From 6938d4e1b150361fc53d12401ab8236b0ccf9d79 Mon Sep 17 00:00:00 2001 From: Hu Jin Date: Tue, 9 Apr 2024 08:32:50 +1000 Subject: [PATCH] release version 1.4.0 --- CHANGELOG.md | 14 + NOTICE.txt | 125 + README.md | 16 +- THIRDPARTY_LICENSES.txt | 2230 ++++++++- .../testGoogleAnalytics.cy.ts | 15 +- source/package.json | 54 +- source/packages/@ada/api/README.md | 2 +- .../@ada/api/extended-client/mock/types.ts | 2 +- source/packages/@ada/api/package.json | 5 +- source/packages/@ada/api/spec.yaml | 240 +- source/packages/@ada/athena-lens/package.json | 1 + .../@ada/athena-utilities/package.json | 1 + source/packages/@ada/cdk-core/README.md | 2 +- source/packages/@ada/cdk-core/package.json | 5 +- .../src/namespace/global-uuid/index.ts | 2 + .../@ada/cdk-core/src/retained/index.test.ts | 2 +- source/packages/@ada/common/jest.config.ts | 8 +- source/packages/@ada/common/package.json | 4 +- .../@ada/common/src/api/validation.ts | 4 +- .../packages/@ada/infra/jest.config.base.ts | 84 +- source/packages/@ada/infra/jest.config.ts | 37 +- source/packages/@ada/infra/jest.setup.ts | 5 + source/packages/@ada/infra/package.json | 58 +- .../src/common/aspects/app-registry/index.ts | 4 +- .../nodejs/api-client-lambda/package.json | 1 + .../api/lambda-layer/code/nodejs/package.json | 1 + .../constructs/api/lambda-layer/layer.ts | 2 +- .../constructs/deployment-metrics/index.ts | 3 + .../src/common/constructs/iam/policies.ts | 35 +- .../constructs/lambda/typescript-function.ts | 2 +- .../@ada/infra/src/common/context/README.md | 4 +- .../environment/build-cdk-environment.ts | 28 +- .../@ada/infra/src/common/utils/index.ts | 2 +- .../@ada/infra/src/common/utils/metrics.ts | 11 +- .../utils/operational-metrics-config.ts | 8 + .../@ada/infra/src/connectors/README.md | 10 +- .../common/common/docker-image/Dockerfile | 18 +- .../common/docker-image/requirements.txt | 12 +- .../@ada/infra/src/connectors/jest.config.ts | 12 +- .../docker-image/requirements.txt | 2 +- .../dynamic/__snapshots__/stack.test.ts.snap | 66 +- .../amazon_cloudwatch/docker-image/import.py | 213 - .../docker-image/requirements.txt | 2 +- .../dynamic/__snapshots__/stack.test.ts.snap | 66 +- .../docker-image/requirements.txt | 2 +- .../dynamic/__snapshots__/stack.test.ts.snap | 66 +- .../dynamic/__snapshots__/stack.test.ts.snap | 64 +- .../docker-image/requirements.txt | 4 +- .../dynamic/__snapshots__/stack.test.ts.snap | 66 +- .../dynamic/__snapshots__/stack.test.ts.snap | 64 +- .../google_analytics/docker-image/Dockerfile | 3 + .../docker-image/google_analytics.py | 94 - .../google_analytics/docker-image/import.py | 189 +- .../docker-image/requirements.txt | 5 +- .../sources/google_analytics/index.ts | 30 +- .../dynamic/__snapshots__/stack.test.ts.snap | 76 +- .../infra/dynamic/stack.test.ts | 4 +- .../google_analytics/infra/dynamic/stack.ts | 4 +- .../static/import-data-state-machine/index.ts | 4 +- .../preview/__tests__/test_pull_samples.py | 170 +- .../google_analytics/preview/pull_samples.py | 159 +- .../sources/google_analytics/ui-options.ts | 815 ++-- .../google_bigquery/docker-image/Dockerfile | 3 + .../docker-image/requirements.txt | 61 +- .../dynamic/__snapshots__/stack.test.ts.snap | 66 +- .../google_storage/docker-image/Dockerfile | 3 + .../dynamic/__snapshots__/stack.test.ts.snap | 66 +- .../dynamic/__snapshots__/stack.test.ts.snap | 64 +- .../dynamic/__snapshots__/stack.test.ts.snap | 64 +- .../dynamic/__snapshots__/stack.test.ts.snap | 64 +- .../dynamic/__snapshots__/stack.test.ts.snap | 64 +- .../mongodb/docker-image/requirements.txt | 2 +- .../dynamic/__snapshots__/stack.test.ts.snap | 66 +- .../generator/openapi/generate-spec/README.md | 2 +- .../openapi/generate-spec/generate.ts | 6 + .../jest.config.generate-spec.ts | 33 +- source/packages/@ada/infra/src/jest.config.ts | 13 +- .../cognito-auth-stack.test.ts.snap | 2 +- .../__snapshots__/common-stack.test.ts.snap | 13 +- .../__snapshots__/kms-stack.test.ts.snap | 71 +- .../static-website-stack.test.ts.snap | 5 +- .../api/handlers/__fixtures__/budget.ts | 107 + .../handlers/__tests__/delete-budget.test.ts | 53 + .../api/handlers/__tests__/get-budget.test.ts | 105 + .../handlers/__tests__/post-budget.test.ts | 258 + .../api/handlers/delete-budget.ts | 52 + .../api/handlers/deploy-superset.ts | 35 + .../administration/api/handlers/get-budget.ts | 145 + .../api/handlers/post-budget.ts | 348 ++ .../src/services/administration/api/index.ts | 112 +- .../src/services/administration/api/types.ts | 109 + .../src/services/administration/constant.ts | 19 + .../administration/jest-dynamodb-config.ts | 3 + .../services/administration/jest.config.ts | 16 +- .../src/services/administration/jest.setup.ts | 1 + .../stack/__snapshots__/index.test.ts.snap | 4310 +++++++++++++++-- .../services/administration/stack/index.ts | 89 +- .../visualisation-deployment/Dockerfile.DB | 5 + .../visualisation-deployment/Dockerfile.Node | 14 + .../Dockerfile.SuperSet | 17 + .../stack/visualisation-deployment/deploy.sh | 67 + .../update-template.py | 56 + .../visualisation-deployment-spec.yml | 14 + .../components/operational-metrics/client.ts | 3 +- .../infra/src/services/api/jest.config.ts | 14 +- .../stack/__snapshots__/index.test.ts.snap | 18 +- ...ta-product-infra-deployment-status.test.ts | 7 + ...-product-infra-deployment-complete.test.ts | 7 + .../Dockerfile | 5 +- .../package.json | 24 +- .../yarn.lock | 320 +- .../docker-image/handlers/sampling/common.py | 5 + .../schema-preview/docker-image/package.json | 1 + .../schema-preview/docker-image/poetry.lock | 1514 +++--- .../docker-image/pyproject.toml | 41 +- .../docker-image/requirements.txt | 75 - .../transform-sandbox-requirements.txt | 30 +- .../dynamic-infrastructure/jest.config.ts | 14 +- .../prepare-external-imports.test.ts | 2 +- .../src/services/data-product/jest.config.ts | 14 +- .../script-validation/handler/test_index.py | 2 +- .../script-validation/package.json | 3 +- .../script-validation/poetry.lock | 505 +- .../__snapshots__/api-stack.test.ts.snap | 46 +- ...uilt-in-transformation-statck.test.ts.snap | 2 +- .../stack/__snapshots__/index.test.ts.snap | 10 +- .../schema-preview-stack.test.ts.snap | 63 +- .../static-infrastructure-stack.test.ts.snap | 3284 ++++++++----- .../src/services/governance/jest.config.ts | 14 +- .../stack/__snapshots__/index.test.ts.snap | 44 +- .../src/services/identity/jest.config.ts | 14 +- .../stack/__snapshots__/index.test.ts.snap | 52 +- .../src/services/notification/jest.config.ts | 14 +- .../stack/__snapshots__/index.test.ts.snap | 8 +- .../src/services/ontology/jest.config.ts | 14 +- .../stack/__snapshots__/index.test.ts.snap | 10 +- .../query-parse-render/jest.config.ts | 10 +- .../stack/__snapshots__/index.test.ts.snap | 2 +- .../athena-proxy/handlers/athena-proxy.ts | 8 +- .../query/components/athena-proxy/index.ts | 5 +- .../infra/src/services/query/jest.config.ts | 14 +- .../stack/__snapshots__/index.test.ts.snap | 106 +- .../__snapshots__/ada-stack.test.ts.snap | 740 +-- .../@ada/infra/src/stacks/ada-stack.ts | 2 + source/packages/@ada/infra/tsconfig.json | 3 +- .../query-parse-render-lambdas/package.json | 1 + source/packages/@ada/solution/package.json | 7 +- source/packages/@ada/strings/README.md | 10 +- .../@ada/strings/markdown/view/budget/help.md | 3 + .../markdown/view/visualisation/help.md | 9 + .../dictionary/en/entities/entity/Budget.ts | 32 + .../dictionary/en/entities/entity/index.ts | 2 + .../src/dictionary/en/entities/types.ts | 1 + .../src/dictionary/en/views/view/budget.ts | 55 + .../src/dictionary/en/views/view/index.ts | 4 + .../dictionary/en/views/view/visualisation.ts | 56 + source/packages/@ada/website/README.md | 2 +- source/packages/@ada/website/package.json | 16 +- source/packages/@ada/website/setupTests.ts | 7 + .../@ada/website/src/api/data-product.test.ts | 12 +- .../common/components/DeleteEntity/index.tsx | 4 +- .../__tests__/multipart-file-uploader.test.ts | 16 +- .../@ada/website/src/core/App/index.tsx | 34 +- .../src/core/provider/AmplifyProvider.tsx | 5 +- .../src/core/provider/AmplifyToast.tsx | 19 + .../components/AlertButton/index.test.tsx | 1 - .../components/CheckboxInput/index.tsx | 70 + .../components/PercentagesSelector/index.tsx | 68 + .../src/northstar-plus/components/index.ts | 2 + .../packages/@ada/website/src/testing/api.ts | 53 +- .../admin/views/Teardown/index.stories.tsx | 2 +- .../website/src/views/admin/views/router.tsx | 4 + .../budget/components/BudgetWizard/index.tsx | 66 + .../budget/components/BudgetWizard/schema.tsx | 93 + .../components/DeleteBudgetButton/index.tsx | 74 + .../views/budget/components/Details/index.tsx | 114 + .../budget/components/LandingPage/index.tsx | 14 + .../components/NotificationCard/index.tsx | 59 + .../index.tsx | 20 + .../@ada/website/src/views/budget/index.ts | 3 + .../views/budget/views/Create/index.test.tsx | 24 + .../src/views/budget/views/Create/index.tsx | 25 + .../views/budget/views/Root/index.test.tsx | 68 + .../src/views/budget/views/Root/index.tsx | 62 + .../views/budget/views/Update/index.test.tsx | 52 + .../src/views/budget/views/Update/index.tsx | 65 + .../website/src/views/budget/views/index.ts | 4 + .../website/src/views/budget/views/router.tsx | 21 + .../views/cost/views/Root/index.stories.tsx | 6 +- .../schema/SchemaRenderer/index.stories.tsx | 6 +- .../views/Create/__tests__/helpers.ts | 2 +- .../views/Create/__tests__/index.test.tsx | 10 +- .../__tests__/source-type/dynamodb.test.tsx | 4 +- .../source-type/google/analytics.stories.tsx | 10 +- .../views/Create/utils/index.test.tsx | 32 +- .../views/Detail/index.stories.tsx | 4 +- .../data-product/views/Detail/index.test.tsx | 4 +- .../governance/views/Create/index.stories.tsx | 2 +- .../governance/views/Create/index.test.tsx | 2 +- .../governance/views/Detail/index.test.tsx | 10 +- .../governance/views/Root/index.stories.tsx | 6 +- .../components/GroupWizard/index.test.tsx | 2 +- .../views/group/views/Detail/index.test.tsx | 10 +- .../src/views/group/views/Root/index.test.tsx | 4 +- .../views/public/views/Root/index.stories.tsx | 1 + .../QueryWorkbench/index.stories.tsx | 15 +- .../components/QueryWorkbench/index.test.tsx | 2 +- .../src/views/query/views/Root/index.test.tsx | 12 +- .../CreateApiKeyDialog/index.stories.tsx | 5 +- .../views/user/views/Detail/index.stories.tsx | 7 +- .../views/user/views/Root/index.stories.tsx | 2 +- .../website/src/views/visualisation/index.ts | 3 + .../views/visualisation/views/Root/index.tsx | 68 + .../src/views/visualisation/views/index.ts | 5 + .../src/views/visualisation/views/router.tsx | 15 + source/scripts/check-licenses.ts | 6 +- source/yarn.lock | 2359 +++++++-- 217 files changed, 16261 insertions(+), 6521 deletions(-) create mode 100644 source/packages/@ada/infra/src/common/utils/operational-metrics-config.ts delete mode 100644 source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/docker-image/import.py delete mode 100644 source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/google_analytics.py mode change 100644 => 100755 source/packages/@ada/infra/src/nested-stacks/__snapshots__/kms-stack.test.ts.snap create mode 100644 source/packages/@ada/infra/src/services/administration/api/handlers/__fixtures__/budget.ts create mode 100644 source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/delete-budget.test.ts create mode 100644 source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/get-budget.test.ts create mode 100644 source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/post-budget.test.ts create mode 100644 source/packages/@ada/infra/src/services/administration/api/handlers/delete-budget.ts create mode 100755 source/packages/@ada/infra/src/services/administration/api/handlers/deploy-superset.ts create mode 100644 source/packages/@ada/infra/src/services/administration/api/handlers/get-budget.ts create mode 100644 source/packages/@ada/infra/src/services/administration/api/handlers/post-budget.ts create mode 100644 source/packages/@ada/infra/src/services/administration/constant.ts mode change 100644 => 100755 source/packages/@ada/infra/src/services/administration/stack/__snapshots__/index.test.ts.snap create mode 100644 source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.DB create mode 100644 source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.Node create mode 100644 source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.SuperSet create mode 100644 source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/deploy.sh create mode 100644 source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/update-template.py create mode 100644 source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/visualisation-deployment-spec.yml delete mode 100644 source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/requirements.txt mode change 100644 => 100755 source/packages/@ada/infra/src/stacks/__snapshots__/ada-stack.test.ts.snap create mode 100644 source/packages/@ada/strings/markdown/view/budget/help.md create mode 100644 source/packages/@ada/strings/markdown/view/visualisation/help.md create mode 100644 source/packages/@ada/strings/src/dictionary/en/entities/entity/Budget.ts create mode 100644 source/packages/@ada/strings/src/dictionary/en/views/view/budget.ts create mode 100644 source/packages/@ada/strings/src/dictionary/en/views/view/visualisation.ts create mode 100644 source/packages/@ada/website/src/core/provider/AmplifyToast.tsx create mode 100644 source/packages/@ada/website/src/northstar-plus/components/PercentagesSelector/components/CheckboxInput/index.tsx create mode 100644 source/packages/@ada/website/src/northstar-plus/components/PercentagesSelector/index.tsx create mode 100644 source/packages/@ada/website/src/views/budget/components/BudgetWizard/index.tsx create mode 100644 source/packages/@ada/website/src/views/budget/components/BudgetWizard/schema.tsx create mode 100644 source/packages/@ada/website/src/views/budget/components/DeleteBudgetButton/index.tsx create mode 100644 source/packages/@ada/website/src/views/budget/components/Details/index.tsx create mode 100644 source/packages/@ada/website/src/views/budget/components/LandingPage/index.tsx create mode 100644 source/packages/@ada/website/src/views/budget/components/NotificationCard/index.tsx create mode 100644 source/packages/@ada/website/src/views/budget/components/PercentagesSelectorCustomComponent/index.tsx create mode 100644 source/packages/@ada/website/src/views/budget/index.ts create mode 100644 source/packages/@ada/website/src/views/budget/views/Create/index.test.tsx create mode 100644 source/packages/@ada/website/src/views/budget/views/Create/index.tsx create mode 100644 source/packages/@ada/website/src/views/budget/views/Root/index.test.tsx create mode 100644 source/packages/@ada/website/src/views/budget/views/Root/index.tsx create mode 100644 source/packages/@ada/website/src/views/budget/views/Update/index.test.tsx create mode 100644 source/packages/@ada/website/src/views/budget/views/Update/index.tsx create mode 100644 source/packages/@ada/website/src/views/budget/views/index.ts create mode 100644 source/packages/@ada/website/src/views/budget/views/router.tsx create mode 100644 source/packages/@ada/website/src/views/visualisation/index.ts create mode 100644 source/packages/@ada/website/src/views/visualisation/views/Root/index.tsx create mode 100644 source/packages/@ada/website/src/views/visualisation/views/index.ts create mode 100644 source/packages/@ada/website/src/views/visualisation/views/router.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index 11aa6ec..abcb8e6 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.4.0] - 2024-04-04 + +### Added + +- New added Custom budget and alert feature +- New added Visualization platform (Apache Superset On AWS) deployment feature +- New added documentation for new released The AppFlow Extension for ADA + +### Changed + +- Upgrade ADA Google Analytics Connector to support Google Analytics 4 +- Upgrade CDK to 2.130.0, Node to 18.19, Python to 3.12.2 +- Fix security vulnerabilities found by yarn audit and Dependabot + ## [1.3.0] - 2023-09-15 ### Added diff --git a/NOTICE.txt b/NOTICE.txt index 44ea486..5603ea2 100755 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -777,3 +777,128 @@ zen-observable MIT zen-observable-ts MIT zen-push MIT zwitch MIT +********************** PYTHON THIRD PARTIES LIBRARIES ********************* +aenum 2.2.6 BSD License +aiohttp 3.8.1 Apache 2 +aiosignal 1.3.1 Apache 2.0 +asn1crypto 1.5.1 MIT +assertpy 1.1 BSD +async-timeout 4.0.3 Apache 2 +asynctest 0.13.0 Apache 2 +attrs 23.2.0 (Licence not found) +awslambdaric 2.0.1 UNKNOWN +awswrangler 2.20.1 Apache-2.0 +backoff 1.11.1 MIT +beautifulsoup4 4.10.0 MIT +boto3 1.26.107 Apache License 2.0 +botocore 1.29.107 Apache License 2.0 +cachetools 5.0.0 MIT +certifi 2024.2.2 MPL-2.0 +cffi 1.15.1 MIT +charset-normalizer 2.0.12 MIT +cmake 3.28.4 Apache 2.0 +coverage 7.2.7 Apache-2.0 +cryptography 42.0.5 Apache-2.0 OR BSD-3-Clause +db-dtypes 1.2.0 (Licence not found) +decorator 5.1.1 new BSD License +distlib 0.3.4 Python license +dnspython 2.3.0 ISC +edx-codejail 3.2.0 Apache +et-xmlfile 1.1.0 MIT +exceptiongroup 1.2.0 (Licence not found) +fastavro 1.8.0 MIT +filelock 3.6.0 Unlicense +frozenlist 1.3.3 Apache 2 +google-analytics-data 0.18.7 Apache 2.0 +google-api-core 2.17.1 Apache 2.0 +google-api-python-client 2.122.0 Apache 2.0 +google-auth 2.28.2 Apache 2.0 +google-auth-httplib2 0.2.0 Apache 2.0 +google-cloud-bigquery 3.19.0 Apache 2.0 +google-cloud-bigquery-storage 2.24.0 Apache 2.0 +google-cloud-core 2.4.1 Apache 2.0 +google-cloud-storage 2.16.0 Apache 2.0 +google-crc32c 1.5.0 Apache 2.0 +google-resumable-media 2.7.0 Apache 2.0 +googleapis-common-protos 1.63.0 Apache-2.0 +gremlinpython 3.5.2 Apache 2 +grpcio 1.56.2 Apache License 2.0 +grpcio-status 1.56.2 Apache License 2.0 +handlers 0.1.0 Apache-2.0 +httplib2 0.20.4 MIT +idna 3.3 BSD-3-Clause +importlib-metadata 2.1.3 Apache Software License +iniconfig 2.0.0 (Licence not found) +isodate 0.6.1 BSD +Jinja2 3.1.3 BSD-3-Clause +jmespath 1.0.0 MIT +jsonpath-ng 1.5.3 Apache 2.0 +lxml 4.9.1 BSD +MarkupSafe 2.1.5 BSD-3-Clause +mongomock 4.1.2 BSD +moto 4.2.14 Apache License 2.0 +multidict 6.0.5 Apache 2 +nest-asyncio 1.5.5 BSD +numpy 1.21.6 BSD +oauth2client Apache License 2.0 +openpyxl 3.0.9 MIT +opensearch-py 1.1.0 Apache-2.0 +oracledb 1.4.2 Apache and/or UPL +packaging 24.0 (Licence not found) +pandas 1.3.5 BSD-3-Clause +pg8000 1.24.1 BSD +pip 22.2.1 MIT +platformdirs 2.5.1 MIT +pluggy 1.2.0 MIT +ply 3.11 BSD +prettytable 3.7.0 BSD (3 clause) +progressbar2 4.2.0 BSD +proto-plus 1.22.3 Apache 2.0 +protobuf 4.21.6 3-Clause BSD License +psutil 5.9.8 BSD-3-Clause +pyarrow 10.0.0 Apache License, Version 2.0 +pyasn1 0.4.8 BSD +pyasn1-modules 0.2.8 BSD-2-Clause +pycparser 2.21 BSD +pymongo 4.6.2 Apache License +PyMySQL 1.0.2 "MIT" +pynt 0.8.2 MIT License +pyparsing 3.1.2 (Licence not found) +pytest 7.4.4 MIT +pytest-cov 3.0.0 MIT +pytest-mock 3.11.1 MIT +pytest-only 2.0.0 MIT +python-dateutil 2.9.0.post0 Dual License +python-utils 3.1.0 BSD +pytz 2021.3 MIT +PyYAML 6.0.1 MIT +rdflib 6.1.1 bsd-3-clause +redshift-connector 2.0.905 Apache License 2.0 +regex 2022.3.15 Apache Software License +requests 2.27.1 Apache 2.0 +requests-aws4auth 1.2.3 MIT License +requests-mock 1.10.0 Apache-2 +responses 0.23.1 Apache 2.0 +rsa 4.8 Apache-2.0 +s3transfer 0.6.0 Apache License 2.0 +scramp 1.4.1 MIT +sentinels 1.0.0 BSD +setuptools 63.2.0 (Licence not found) +simplejson 3.17.2 MIT License +six 1.16.0 MIT +smart-open 7.0.3 MIT +soupsieve 2.3.2 (Licence not found) +tomli 2.0.1 (Licence not found) +types-PyYAML 6.0.11 Apache-2.0 license +typing_extensions 4.1.1 (Licence not found) +tzdata 2024.1 Apache-2.0 +uritemplate 4.1.1 BSD 3-Clause License or Apache License, Version 2.0 +urllib3 1.26.9 MIT +virtualenv 20.14.0 MIT +wcwidth 0.2.13 MIT +Werkzeug 2.2.3 BSD-3-Clause +wheel 0.37.1 MIT +wrapt 1.16.0 BSD +xmltodict 0.13.0 MIT +yarl 1.7.2 Apache 2 +zipp 3.15.0 (Licence not found) diff --git a/README.md b/README.md index 59792ec..6e65c1f 100755 --- a/README.md +++ b/README.md @@ -30,28 +30,28 @@ For more information on the solution’s architecture, refer to the [implementat - https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html - Sufficient AWS Lambda Concurrent executions limit - - Please use AWS Service Quotas to verify AWS Lambda Concurrent exeuctions `Applied quota value` in your account is greater or equal to the `AWS default quota value` (which is 1000). Click this [link](https://console.aws.amazon.com/servicequotas/home/services/lambda/quotas/L-B99A9384) to check it in your AWS Console. If `Applied quota value` is less than 1000, please use `Request quota increase` button to make a request to increase it to at least 1000 before deploying the solution. For more details, please refer to [AWS Lambda Developer Guide](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html). + - Please use AWS Service Quotas to verify AWS Lambda Concurrent executions `Applied quota value` in your account is greater or equal to the `AWS default quota value` (which is 1000). Click this [link](https://console.aws.amazon.com/servicequotas/home/services/lambda/quotas/L-B99A9384) to check it in your AWS Console. If `Applied quota value` is less than 1000, please use `Request quota increase` button to make a request to increase it to at least 1000 before deploying the solution. For more details, please refer to [AWS Lambda Developer Guide](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html). ### Tools - The latest version of the AWS CLI, installed and configured. - https://aws.amazon.com/cli/ . -- node.js version 16. +- node.js version 18.19. - https://docs.npmjs.com/getting-started - - Below are the example commands for installing nvm and node 16, please make sure those commands fit your build environment before using them. + - Below are the example commands for installing nvm and node 18, please make sure those commands fit your build environment before using them. ``` curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash exec $SHELL -l - nvm install 16 + nvm install 18.19 ``` - install yarn ``` npm install --global yarn ``` -- Python 3.9 +- Python 3.12.2 - We recommend creating a python virtual env using `pipenv` to avoid version conflicts - - Below are the example commands for installing python 3.9 on Amazon Linux 2 and configure the virtual env, please make sure those commands fit your build environment before using them. + - Below are the example commands for installing python 3.12 on Amazon Linux 2 and configure the virtual env, please make sure those commands fit your build environment before using them. ``` pip3 install --user pipenv @@ -59,11 +59,11 @@ For more information on the solution’s architecture, refer to the [implementat git clone https://github.com/pyenv/pyenv.git ~/.pyenv export PATH="/home//.pyenv/bin:$PATH" sudo yum-builddep python3 - pipenv --python 3.9 + pipenv --python 3.12.2 # after clone the Ada repository, navigate to the Ada directory and run the following commands cd - pyenv local 3.9 + pyenv local 3.12.2 eval "$(pyenv init -)" ``` diff --git a/THIRDPARTY_LICENSES.txt b/THIRDPARTY_LICENSES.txt index 0d6edbd..5246ac5 100644 --- a/THIRDPARTY_LICENSES.txt +++ b/THIRDPARTY_LICENSES.txt @@ -2,7 +2,7 @@ THE FOLLOWING SETS FORTH ATTRIBUTION NOTICES FOR THIRD PARTY SOFTWARE THAT MAY B ----- -The following software may be included in this product: @aws-amplify/analytics, @aws-amplify/api, @aws-amplify/api-graphql, @aws-amplify/api-rest, @aws-amplify/auth, @aws-amplify/cache, @aws-amplify/core, @aws-amplify/datastore, @aws-amplify/geo, @aws-amplify/interactions, @aws-amplify/notifications, @aws-amplify/predictions, @aws-amplify/pubsub, @aws-amplify/rtn-push-notification, @aws-amplify/storage, @aws-amplify/ui-react. A copy of the source code may be downloaded from https://github.com/aws-amplify/amplify-js.git (@aws-amplify/analytics), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/api), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/api-graphql), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/api-rest), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/auth), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/cache), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/core), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/datastore), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/geo), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/interactions), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/notifications), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/predictions), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/pubsub), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/rtn-push-notification), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/storage), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/ui-react). This software contains the following license and notice below: +The following software may be included in this product: @aws-amplify/analytics, @aws-amplify/api, @aws-amplify/api-graphql, @aws-amplify/api-rest, @aws-amplify/auth, @aws-amplify/cache, @aws-amplify/core, @aws-amplify/datastore, @aws-amplify/geo, @aws-amplify/interactions, @aws-amplify/notifications, @aws-amplify/predictions, @aws-amplify/pubsub, @aws-amplify/rtn-push-notification, @aws-amplify/storage, @aws-amplify/ui, @aws-amplify/ui-react, @aws-amplify/ui-react-core, @aws-amplify/ui-react-v1. A copy of the source code may be downloaded from https://github.com/aws-amplify/amplify-js.git (@aws-amplify/analytics), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/api), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/api-graphql), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/api-rest), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/auth), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/cache), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/core), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/datastore), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/geo), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/interactions), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/notifications), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/predictions), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/pubsub), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/rtn-push-notification), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/storage), https://github.com/aws-amplify/amplify-ui (@aws-amplify/ui), https://github.com/aws-amplify/amplify-ui (@aws-amplify/ui-react), https://github.com/aws-amplify/amplify-js.git (@aws-amplify/ui-react-v1). This software contains the following license and notice below: Apache License Version 2.0, January 2004 @@ -208,7 +208,7 @@ Apache License ----- -The following software may be included in this product: @aws-amplify/ui-components. This software contains the following license and notice below: +The following software may be included in this product: @aws-amplify/ui-components, maplibre-gl-js-amplify. A copy of the source code may be downloaded from git@github.com:aws-amplify/maplibre-gl-js-amplify.git (maplibre-gl-js-amplify). This software contains the following license and notice below: Apache License Version 2.0, January 2004 @@ -414,7 +414,7 @@ Apache License ----- -The following software may be included in this product: @aws-cdk/asset-awscli-v1, @aws-cdk/asset-kubectl-v20, @aws-cdk/asset-node-proxy-agent-v5. A copy of the source code may be downloaded from https://github.com/cdklabs/awscdk-asset-awscli.git (@aws-cdk/asset-awscli-v1), https://github.com/cdklabs/awscdk-asset-kubectl.git (@aws-cdk/asset-kubectl-v20), https://github.com/cdklabs/awscdk-asset-node-proxy-agent.git (@aws-cdk/asset-node-proxy-agent-v5). This software contains the following license and notice below: +The following software may be included in this product: @aws-cdk/asset-awscli-v1, @aws-cdk/asset-kubectl-v20, @aws-cdk/asset-node-proxy-agent-v6. A copy of the source code may be downloaded from https://github.com/cdklabs/awscdk-asset-awscli.git (@aws-cdk/asset-awscli-v1), https://github.com/cdklabs/awscdk-asset-kubectl.git (@aws-cdk/asset-kubectl-v20), https://github.com/cdklabs/awscdk-asset-node-proxy-agent.git (@aws-cdk/asset-node-proxy-agent-v6). This software contains the following license and notice below: Apache License Version 2.0, January 2004 @@ -625,7 +625,7 @@ Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. ----- -The following software may be included in this product: @aws-cdk/aws-apigatewayv2-alpha, @aws-cdk/aws-apigatewayv2-authorizers-alpha, @aws-cdk/aws-apigatewayv2-integrations-alpha, @aws-cdk/aws-glue-alpha, @aws-cdk/aws-kinesisfirehose-alpha, @aws-cdk/aws-kinesisfirehose-destinations-alpha, @aws-cdk/aws-lambda-python-alpha, @aws-cdk/aws-servicecatalogappregistry-alpha. A copy of the source code may be downloaded from https://github.com/aws/aws-cdk.git (@aws-cdk/aws-apigatewayv2-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-apigatewayv2-authorizers-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-apigatewayv2-integrations-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-glue-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-kinesisfirehose-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-kinesisfirehose-destinations-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-lambda-python-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-servicecatalogappregistry-alpha). This software contains the following license and notice below: +The following software may be included in this product: @aws-cdk/aws-glue-alpha, @aws-cdk/aws-kinesisfirehose-alpha, @aws-cdk/aws-kinesisfirehose-destinations-alpha, @aws-cdk/aws-lambda-python-alpha, @aws-cdk/aws-servicecatalogappregistry-alpha. A copy of the source code may be downloaded from https://github.com/aws/aws-cdk.git (@aws-cdk/aws-glue-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-kinesisfirehose-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-kinesisfirehose-destinations-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-lambda-python-alpha), https://github.com/aws/aws-cdk.git (@aws-cdk/aws-servicecatalogappregistry-alpha). This software contains the following license and notice below: Apache License Version 2.0, January 2004 @@ -815,7 +815,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -833,7 +833,7 @@ Apache License NOTICE AWS Cloud Development Kit (AWS CDK) -Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. +Copyright 2018-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. ----- @@ -1455,7 +1455,7 @@ Apache License ----- -The following software may be included in this product: @aws-sdk/abort-controller, @aws-sdk/config-resolver, @aws-sdk/credential-provider-env, @aws-sdk/credential-provider-imds, @aws-sdk/credential-provider-ini, @aws-sdk/credential-provider-node, @aws-sdk/fetch-http-handler, @aws-sdk/hash-node, @aws-sdk/is-array-buffer, @aws-sdk/md5-js, @aws-sdk/middleware-content-length, @aws-sdk/middleware-signing, @aws-sdk/middleware-stack, @aws-sdk/node-http-handler, @aws-sdk/property-provider, @aws-sdk/shared-ini-file-loader, @aws-sdk/signature-v4, @aws-sdk/types, @aws-sdk/util-arn-parser, @aws-sdk/util-base64-browser, @aws-sdk/util-base64-node, @aws-sdk/util-body-length-browser, @aws-sdk/util-body-length-node, @aws-sdk/util-buffer-from, @aws-sdk/util-hex-encoding, @aws-sdk/util-locate-window, @aws-sdk/util-uri-escape, @aws-sdk/util-utf8-browser, @aws-sdk/util-utf8-node, @aws-sdk/util-waiter, @smithy/is-array-buffer, @smithy/signature-v4, @smithy/util-buffer-from, @smithy/util-hex-encoding, @smithy/util-uri-escape, @smithy/util-utf8. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/abort-controller), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-env), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-imds), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-ini), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/fetch-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/is-array-buffer), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/md5-js), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-content-length), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-signing), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-stack), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/node-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/property-provider), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/shared-ini-file-loader), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/signature-v4), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/types), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-arn-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-buffer-from), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-hex-encoding), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-locate-window), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-uri-escape), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-waiter), https://github.com/awslabs/smithy-typescript.git (@smithy/is-array-buffer), https://github.com/awslabs/smithy-typescript.git (@smithy/signature-v4), https://github.com/awslabs/smithy-typescript.git (@smithy/util-buffer-from), https://github.com/awslabs/smithy-typescript.git (@smithy/util-hex-encoding), https://github.com/awslabs/smithy-typescript.git (@smithy/util-uri-escape), https://github.com/awslabs/smithy-typescript.git (@smithy/util-utf8). This software contains the following license and notice below: +The following software may be included in this product: @aws-sdk/abort-controller, @aws-sdk/config-resolver, @aws-sdk/credential-provider-env, @aws-sdk/credential-provider-imds, @aws-sdk/credential-provider-ini, @aws-sdk/credential-provider-node, @aws-sdk/fetch-http-handler, @aws-sdk/hash-node, @aws-sdk/is-array-buffer, @aws-sdk/md5-js, @aws-sdk/middleware-content-length, @aws-sdk/middleware-signing, @aws-sdk/middleware-stack, @aws-sdk/node-http-handler, @aws-sdk/property-provider, @aws-sdk/region-config-resolver, @aws-sdk/shared-ini-file-loader, @aws-sdk/signature-v4, @aws-sdk/token-providers, @aws-sdk/types, @aws-sdk/util-arn-parser, @aws-sdk/util-base64-browser, @aws-sdk/util-base64-node, @aws-sdk/util-body-length-browser, @aws-sdk/util-body-length-node, @aws-sdk/util-buffer-from, @aws-sdk/util-endpoints, @aws-sdk/util-hex-encoding, @aws-sdk/util-locate-window, @aws-sdk/util-uri-escape, @aws-sdk/util-utf8, @aws-sdk/util-utf8-browser, @aws-sdk/util-utf8-node, @aws-sdk/util-waiter, @smithy/abort-controller, @smithy/config-resolver, @smithy/credential-provider-imds, @smithy/fetch-http-handler, @smithy/hash-node, @smithy/is-array-buffer, @smithy/middleware-content-length, @smithy/middleware-endpoint, @smithy/middleware-stack, @smithy/node-http-handler, @smithy/property-provider, @smithy/shared-ini-file-loader, @smithy/signature-v4, @smithy/util-base64, @smithy/util-body-length-browser, @smithy/util-body-length-node, @smithy/util-buffer-from, @smithy/util-hex-encoding, @smithy/util-stream, @smithy/util-uri-escape, @smithy/util-utf8. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/abort-controller), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-env), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-imds), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-ini), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/credential-provider-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/fetch-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/hash-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/is-array-buffer), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/md5-js), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-content-length), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-signing), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-stack), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/node-http-handler), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/property-provider), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/region-config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/shared-ini-file-loader), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/signature-v4), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/token-providers), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/types), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-arn-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-base64-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-body-length-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-buffer-from), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-endpoints), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-hex-encoding), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-locate-window), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-uri-escape), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-utf8-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-waiter), https://github.com/awslabs/smithy-typescript.git (@smithy/abort-controller), https://github.com/awslabs/smithy-typescript.git (@smithy/config-resolver), https://github.com/awslabs/smithy-typescript.git (@smithy/credential-provider-imds), https://github.com/awslabs/smithy-typescript.git (@smithy/fetch-http-handler), https://github.com/awslabs/smithy-typescript.git (@smithy/hash-node), https://github.com/awslabs/smithy-typescript.git (@smithy/is-array-buffer), https://github.com/awslabs/smithy-typescript.git (@smithy/middleware-content-length), https://github.com/awslabs/smithy-typescript.git (@smithy/middleware-endpoint), https://github.com/awslabs/smithy-typescript.git (@smithy/middleware-stack), https://github.com/awslabs/smithy-typescript.git (@smithy/node-http-handler), https://github.com/awslabs/smithy-typescript.git (@smithy/property-provider), https://github.com/awslabs/smithy-typescript.git (@smithy/shared-ini-file-loader), https://github.com/awslabs/smithy-typescript.git (@smithy/signature-v4), https://github.com/awslabs/smithy-typescript.git (@smithy/util-base64), https://github.com/awslabs/smithy-typescript.git (@smithy/util-body-length-browser), https://github.com/awslabs/smithy-typescript.git (@smithy/util-body-length-node), https://github.com/awslabs/smithy-typescript.git (@smithy/util-buffer-from), https://github.com/awslabs/smithy-typescript.git (@smithy/util-hex-encoding), https://github.com/awslabs/smithy-typescript.git (@smithy/util-stream), https://github.com/awslabs/smithy-typescript.git (@smithy/util-uri-escape), https://github.com/awslabs/smithy-typescript.git (@smithy/util-utf8). This software contains the following license and notice below: Apache License Version 2.0, January 2004 @@ -1661,7 +1661,7 @@ Apache License ----- -The following software may be included in this product: @aws-sdk/client-cloudwatch-logs, @aws-sdk/client-comprehend, @aws-sdk/client-firehose, @aws-sdk/client-kinesis, @aws-sdk/client-lex-runtime-service, @aws-sdk/client-personalize-events, @aws-sdk/client-polly, @aws-sdk/client-rekognition, @aws-sdk/client-sso, @aws-sdk/client-sts, @aws-sdk/client-textract, @aws-sdk/client-translate, @aws-sdk/eventstream-codec, @aws-sdk/eventstream-marshaller, @aws-sdk/middleware-eventstream, @aws-sdk/middleware-retry, @aws-sdk/middleware-sdk-sts, @aws-sdk/querystring-builder, @aws-sdk/querystring-parser, @aws-sdk/service-error-classification, @aws-sdk/url-parser, @aws-sdk/url-parser-native, @aws-sdk/util-defaults-mode-browser, @aws-sdk/util-defaults-mode-node, @aws-sdk/util-user-agent-browser, @aws-sdk/util-user-agent-node, @smithy/eventstream-codec. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-cloudwatch-logs), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-comprehend), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-firehose), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-kinesis), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-lex-runtime-service), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-personalize-events), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-polly), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-rekognition), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sso), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sts), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-textract), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-translate), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-codec), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-marshaller), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-eventstream), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-retry), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-sts), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/querystring-builder), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/querystring-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/service-error-classification), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/url-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/url-parser-native), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-defaults-mode-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-defaults-mode-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-user-agent-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-user-agent-node), https://github.com/awslabs/smithy-typescript.git (@smithy/eventstream-codec). This software contains the following license and notice below: +The following software may be included in this product: @aws-sdk/client-budgets, @aws-sdk/client-cloudwatch-logs, @aws-sdk/client-comprehend, @aws-sdk/client-firehose, @aws-sdk/client-kinesis, @aws-sdk/client-lex-runtime-service, @aws-sdk/client-personalize-events, @aws-sdk/client-polly, @aws-sdk/client-rekognition, @aws-sdk/client-sso, @aws-sdk/client-sso-oidc, @aws-sdk/client-sts, @aws-sdk/client-textract, @aws-sdk/client-translate, @aws-sdk/eventstream-codec, @aws-sdk/eventstream-marshaller, @aws-sdk/middleware-eventstream, @aws-sdk/middleware-retry, @aws-sdk/middleware-sdk-sts, @aws-sdk/querystring-builder, @aws-sdk/querystring-parser, @aws-sdk/service-error-classification, @aws-sdk/url-parser, @aws-sdk/url-parser-native, @aws-sdk/util-defaults-mode-browser, @aws-sdk/util-defaults-mode-node, @aws-sdk/util-user-agent-browser, @aws-sdk/util-user-agent-node, @smithy/eventstream-codec, @smithy/middleware-retry, @smithy/querystring-builder, @smithy/querystring-parser, @smithy/service-error-classification, @smithy/url-parser, @smithy/util-defaults-mode-browser, @smithy/util-defaults-mode-node. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-budgets), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-cloudwatch-logs), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-comprehend), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-firehose), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-kinesis), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-lex-runtime-service), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-personalize-events), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-polly), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-rekognition), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sso), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sso-oidc), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-sts), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-textract), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/client-translate), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-codec), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-marshaller), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-eventstream), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-retry), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-sdk-sts), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/querystring-builder), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/querystring-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/service-error-classification), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/url-parser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/url-parser-native), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-defaults-mode-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-defaults-mode-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-user-agent-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-user-agent-node), https://github.com/awslabs/smithy-typescript.git (@smithy/eventstream-codec), https://github.com/awslabs/smithy-typescript.git (@smithy/middleware-retry), https://github.com/awslabs/smithy-typescript.git (@smithy/querystring-builder), https://github.com/awslabs/smithy-typescript.git (@smithy/querystring-parser), https://github.com/awslabs/smithy-typescript.git (@smithy/service-error-classification), https://github.com/awslabs/smithy-typescript.git (@smithy/url-parser), https://github.com/awslabs/smithy-typescript.git (@smithy/util-defaults-mode-browser), https://github.com/awslabs/smithy-typescript.git (@smithy/util-defaults-mode-node). This software contains the following license and notice below: Apache License Version 2.0, January 2004 @@ -2279,7 +2279,7 @@ Apache License ----- -The following software may be included in this product: @aws-sdk/eventstream-handler-node, @aws-sdk/eventstream-serde-browser, @aws-sdk/eventstream-serde-config-resolver, @aws-sdk/eventstream-serde-node, @aws-sdk/eventstream-serde-universal, @aws-sdk/invalid-dependency, @aws-sdk/middleware-host-header, @aws-sdk/middleware-recursion-detection, @aws-sdk/middleware-serde, @aws-sdk/middleware-user-agent, @aws-sdk/protocol-http, @aws-sdk/smithy-client, @smithy/types. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-handler-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-serde-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-serde-config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-serde-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-serde-universal), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/invalid-dependency), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-host-header), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-recursion-detection), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-serde), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-user-agent), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/protocol-http), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/smithy-client), https://github.com/awslabs/smithy-typescript.git (@smithy/types). This software contains the following license and notice below: +The following software may be included in this product: @aws-sdk/eventstream-handler-node, @aws-sdk/eventstream-serde-browser, @aws-sdk/eventstream-serde-config-resolver, @aws-sdk/eventstream-serde-node, @aws-sdk/eventstream-serde-universal, @aws-sdk/invalid-dependency, @aws-sdk/middleware-host-header, @aws-sdk/middleware-recursion-detection, @aws-sdk/middleware-serde, @aws-sdk/middleware-user-agent, @aws-sdk/protocol-http, @aws-sdk/smithy-client, @smithy/invalid-dependency, @smithy/middleware-serde, @smithy/protocol-http, @smithy/smithy-client, @smithy/types. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-handler-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-serde-browser), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-serde-config-resolver), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-serde-node), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/eventstream-serde-universal), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/invalid-dependency), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-host-header), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-recursion-detection), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-serde), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-user-agent), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/protocol-http), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/smithy-client), https://github.com/awslabs/smithy-typescript.git (@smithy/invalid-dependency), https://github.com/awslabs/smithy-typescript.git (@smithy/middleware-serde), https://github.com/awslabs/smithy-typescript.git (@smithy/protocol-http), https://github.com/awslabs/smithy-typescript.git (@smithy/smithy-client), https://github.com/awslabs/smithy-typescript.git (@smithy/types). This software contains the following license and notice below: Apache License Version 2.0, January 2004 @@ -2485,7 +2485,7 @@ Apache License ----- -The following software may be included in this product: @aws-sdk/middleware-logger, @aws-sdk/node-config-provider, @aws-sdk/util-config-provider. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-logger), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/node-config-provider), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-config-provider). This software contains the following license and notice below: +The following software may be included in this product: @aws-sdk/middleware-logger, @aws-sdk/node-config-provider, @aws-sdk/util-config-provider, @smithy/node-config-provider, @smithy/util-config-provider. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/middleware-logger), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/node-config-provider), https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-config-provider), https://github.com/awslabs/smithy-typescript.git (@smithy/node-config-provider), https://github.com/awslabs/smithy-typescript.git (@smithy/util-config-provider). This software contains the following license and notice below: Apache License Version 2.0, January 2004 @@ -2691,7 +2691,7 @@ Apache License ----- -The following software may be included in this product: @aws-sdk/util-middleware, @smithy/util-middleware. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-middleware), https://github.com/awslabs/smithy-typescript.git (@smithy/util-middleware). This software contains the following license and notice below: +The following software may be included in this product: @aws-sdk/util-middleware, @smithy/util-middleware, @smithy/util-retry. A copy of the source code may be downloaded from https://github.com/aws/aws-sdk-js-v3.git (@aws-sdk/util-middleware), https://github.com/awslabs/smithy-typescript.git (@smithy/util-middleware), https://github.com/awslabs/smithy-typescript.git (@smithy/util-retry). This software contains the following license and notice below: Apache License Version 2.0, January 2004 @@ -2897,7 +2897,7 @@ Apache License ----- -The following software may be included in this product: @babel/runtime. A copy of the source code may be downloaded from https://github.com/babel/babel.git. This software contains the following license and notice below: +The following software may be included in this product: @babel/code-frame, @babel/generator, @babel/helper-environment-visitor, @babel/helper-function-name, @babel/helper-hoist-variables, @babel/helper-split-export-declaration, @babel/helper-string-parser, @babel/helper-validator-identifier, @babel/highlight, @babel/runtime, @babel/template, @babel/traverse, @babel/types. A copy of the source code may be downloaded from https://github.com/babel/babel.git (@babel/code-frame), https://github.com/babel/babel.git (@babel/generator), https://github.com/babel/babel.git (@babel/helper-environment-visitor), https://github.com/babel/babel.git (@babel/helper-function-name), https://github.com/babel/babel.git (@babel/helper-hoist-variables), https://github.com/babel/babel.git (@babel/helper-split-export-declaration), https://github.com/babel/babel.git (@babel/helper-string-parser), https://github.com/babel/babel.git (@babel/helper-validator-identifier), https://github.com/babel/babel.git (@babel/highlight), https://github.com/babel/babel.git (@babel/runtime), https://github.com/babel/babel.git (@babel/template), https://github.com/babel/babel.git (@babel/traverse), https://github.com/babel/babel.git (@babel/types). This software contains the following license and notice below: MIT License @@ -2924,6 +2924,30 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- +The following software may be included in this product: @babel/parser. A copy of the source code may be downloaded from https://github.com/babel/babel.git. This software contains the following license and notice below: + +Copyright (C) 2012-2014 by various contributors (see AUTHORS) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +----- + The following software may be included in this product: @balena/dockerignore. A copy of the source code may be downloaded from git@github.com:balena-io-modules/dockerignore.git. This software contains the following license and notice below: * Copyright 2020 Balena Ltd. under the Apache 2.0 License included in this file. @@ -3321,18 +3345,416 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ----- -The following software may be included in this product: @hapi/topo. A copy of the source code may be downloaded from git://github.com/hapijs/topo. This software contains the following license and notice below: +The following software may be included in this product: @hapi/topo. A copy of the source code may be downloaded from git://github.com/hapijs/topo. This software contains the following license and notice below: + +Copyright (c) 2012-2020, Sideway Inc, and project contributors +Copyright (c) 2012-2014, Walmart. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* The names of any contributors may not be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS OFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +The following software may be included in this product: @jridgewell/gen-mapping, @jridgewell/set-array. A copy of the source code may be downloaded from https://github.com/jridgewell/gen-mapping (@jridgewell/gen-mapping), https://github.com/jridgewell/set-array (@jridgewell/set-array). This software contains the following license and notice below: + +Copyright 2022 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +The following software may be included in this product: @jridgewell/resolve-uri. A copy of the source code may be downloaded from https://github.com/jridgewell/resolve-uri. This software contains the following license and notice below: + +Copyright 2019 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +The following software may be included in this product: @jridgewell/sourcemap-codec. A copy of the source code may be downloaded from git+https://github.com/jridgewell/sourcemap-codec.git. This software contains the following license and notice below: + +The MIT License + +Copyright (c) 2015 Rich Harris + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +----- + +The following software may be included in this product: @jridgewell/trace-mapping. A copy of the source code may be downloaded from git+https://github.com/jridgewell/trace-mapping.git. This software contains the following license and notice below: + +Copyright 2022 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +The following software may be included in this product: @mapbox/geojson-area. A copy of the source code may be downloaded from git@github.com:mapbox/geojson-area.git. This software contains the following license and notice below: + +Copyright 2005-2013 OpenLayers Contributors. All rights reserved. See +authors.txt for full list. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY OPENLAYERS CONTRIBUTORS ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of OpenLayers Contributors. + +----- + +The following software may be included in this product: @mapbox/geojson-coords, @mapbox/geojson-extent. A copy of the source code may be downloaded from git@github.com:mapbox/geojson-coords.git (@mapbox/geojson-coords), git@github.com:mapbox/geojson-extent.git (@mapbox/geojson-extent). This software contains the following license and notice below: + +ISC License + +Copyright (c) 2017, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +----- + +The following software may be included in this product: @mapbox/geojson-rewind. A copy of the source code may be downloaded from git://github.com/mapbox/geojson-rewind.git. This software contains the following license and notice below: + +Copyright (c) 2020, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +----- + +The following software may be included in this product: @mapbox/geojson-types. This software contains the following license and notice below: + +MIT License + +Copyright (c) 2018 Mapbox + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +The following software may be included in this product: @mapbox/mapbox-gl-draw. A copy of the source code may be downloaded from git://github.com/mapbox/mapbox-gl-draw.git. This software contains the following license and notice below: + +Copyright (c) Mapbox + +All rights reserved. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +----- + +The following software may be included in this product: @mapbox/mapbox-gl-supported. A copy of the source code may be downloaded from git+https://github.com/mapbox/mapbox-gl-supported.git. This software contains the following license and notice below: + +BSD 3-Clause License + +Copyright (c) 2017, Mapbox +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +The following software may be included in this product: @mapbox/point-geometry. A copy of the source code may be downloaded from git@github.com:mapbox/point-geometry.git. This software contains the following license and notice below: + +Copyright (c) 2015, Mapbox <> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +----- + +The following software may be included in this product: @mapbox/tiny-sdf. A copy of the source code may be downloaded from git+https://github.com/mapbox/tiny-sdf.git. This software contains the following license and notice below: + +Copyright © 2016-2021 Mapbox, Inc. +This code available under the terms of the BSD 2-Clause license. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +The following software may be included in this product: @mapbox/tiny-sdf. A copy of the source code may be downloaded from git+https://github.com/mapbox/tiny-sdf.git. This software contains the following license and notice below: + +BSD-2-Clause +Copyright (c) 2016-2022 Mapbox, Inc. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +The following software may be included in this product: @mapbox/unitbezier. A copy of the source code may be downloaded from git@github.com:mapbox/unitbezier.git. This software contains the following license and notice below: + +BSD-2-Clause + +Copyright (C) 2008 Apple Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Ported from Webkit +http://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/UnitBezier.h + +----- + +The following software may be included in this product: @mapbox/vector-tile. A copy of the source code may be downloaded from https://github.com/mapbox/vector-tile-js.git. This software contains the following license and notice below: + +Copyright (c) 2014, Mapbox + + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Mapbox nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +The following software may be included in this product: @mapbox/whoots-js. A copy of the source code may be downloaded from https://github.com/mapbox/whoots-js.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2017, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +----- + +The following software may be included in this product: @maplibre/maplibre-gl-geocoder. A copy of the source code may be downloaded from git+ssh://git@github.com/maplibre/maplibre-gl-geocoder.git. This software contains the following license and notice below: -Copyright (c) 2012-2020, Sideway Inc, and project contributors -Copyright (c) 2012-2014, Walmart. -All rights reserved. +Copyright (c) 2021 MapLibre contributors -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -* The names of any contributors may not be used to endorse or promote products derived from this software without specific prior written permission. +Copyright (c) 2016, Mapbox -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS OFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ----- @@ -3568,7 +3990,7 @@ Apache License ----- -The following software may be included in this product: @turf/boolean-clockwise, @turf/helpers, @turf/invariant. A copy of the source code may be downloaded from git://github.com/Turfjs/turf.git (@turf/boolean-clockwise), git://github.com/Turfjs/turf.git (@turf/helpers), git://github.com/Turfjs/turf.git (@turf/invariant). This software contains the following license and notice below: +The following software may be included in this product: @turf/along, @turf/bbox, @turf/bearing, @turf/boolean-clockwise, @turf/circle, @turf/destination, @turf/distance, @turf/helpers, @turf/invariant, @turf/length, @turf/line-intersect, @turf/line-segment, @turf/line-slice, @turf/meta, @turf/nearest-point-on-line. A copy of the source code may be downloaded from git://github.com/Turfjs/turf.git (@turf/along), git://github.com/Turfjs/turf.git (@turf/bbox), git://github.com/Turfjs/turf.git (@turf/bearing), git://github.com/Turfjs/turf.git (@turf/boolean-clockwise), git://github.com/Turfjs/turf.git (@turf/circle), git://github.com/Turfjs/turf.git (@turf/destination), git://github.com/Turfjs/turf.git (@turf/distance), git://github.com/Turfjs/turf.git (@turf/helpers), git://github.com/Turfjs/turf.git (@turf/invariant), git://github.com/Turfjs/turf.git (@turf/length), git://github.com/Turfjs/turf.git (@turf/line-intersect), git://github.com/Turfjs/turf.git (@turf/line-segment), git://github.com/Turfjs/turf.git (@turf/line-slice), git://github.com/Turfjs/turf.git (@turf/meta), git://github.com/Turfjs/turf.git (@turf/nearest-point-on-line). This software contains the following license and notice below: The MIT License (MIT) @@ -3593,7 +4015,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- -The following software may be included in this product: @types/aws-lambda, @types/body-parser, @types/cls-hooked, @types/connect, @types/d3-color, @types/d3-interpolate, @types/d3-path, @types/d3-scale, @types/d3-shape, @types/d3-time, @types/debug, @types/express, @types/express-serve-static-core, @types/hast, @types/json-schema, @types/mdast, @types/mime, @types/mysql, @types/node, @types/node-fetch, @types/parse5, @types/pg, @types/prop-types, @types/qs, @types/range-parser, @types/react, @types/react-redux, @types/react-table, @types/react-transition-group, @types/resize-observer-browser, @types/scheduler, @types/serve-static, @types/styled-jsx, @types/unist, @types/uuid. A copy of the source code may be downloaded from https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/aws-lambda), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/body-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/cls-hooked), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/connect), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-color), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-interpolate), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-path), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-scale), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-shape), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-time), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/debug), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express-serve-static-core), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/hast), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/json-schema), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mdast), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mime), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mysql), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/node), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/node-fetch), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/parse5), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/pg), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/prop-types), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/qs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/range-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/react), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/react-redux), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/react-table), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/react-transition-group), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/resize-observer-browser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/scheduler), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/serve-static), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/styled-jsx), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/unist), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/uuid). This software contains the following license and notice below: +The following software may be included in this product: @types/aws-lambda, @types/body-parser, @types/cls-hooked, @types/connect, @types/d3-color, @types/d3-interpolate, @types/d3-path, @types/d3-scale, @types/d3-shape, @types/d3-time, @types/debug, @types/express, @types/express-serve-static-core, @types/geojson, @types/hast, @types/json-schema, @types/mapbox__point-geometry, @types/mapbox__vector-tile, @types/mapbox-gl, @types/mdast, @types/mime, @types/mysql, @types/node, @types/node-fetch, @types/parse5, @types/pbf, @types/pg, @types/prop-types, @types/qs, @types/range-parser, @types/react, @types/react-redux, @types/react-table, @types/react-transition-group, @types/resize-observer-browser, @types/scheduler, @types/serve-static, @types/styled-jsx, @types/unist, @types/uuid. A copy of the source code may be downloaded from https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/aws-lambda), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/body-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/cls-hooked), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/connect), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-color), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-interpolate), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-path), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-scale), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-shape), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/d3-time), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/debug), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express-serve-static-core), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/geojson), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/hast), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/json-schema), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mapbox__point-geometry), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mapbox__vector-tile), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mapbox-gl), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mdast), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mime), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mysql), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/node), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/node-fetch), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/parse5), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/pbf), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/pg), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/prop-types), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/qs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/range-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/react), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/react-redux), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/react-table), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/react-transition-group), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/resize-observer-browser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/scheduler), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/serve-static), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/styled-jsx), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/unist), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/uuid). This software contains the following license and notice below: MIT License @@ -3645,6 +4067,32 @@ MIT License ----- +The following software may be included in this product: @xstate/react, xstate. A copy of the source code may be downloaded from git+ssh://git@github.com/statelyai/xstate.git (@xstate/react), git+https://github.com/statelyai/xstate.git (xstate). This software contains the following license and notice below: + +The MIT License (MIT) + +Copyright (c) 2015 David Khourshid + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + The following software may be included in this product: accepts, mime-types. A copy of the source code may be downloaded from https://github.com/jshttp/accepts.git (accepts), https://github.com/jshttp/mime-types.git (mime-types). This software contains the following license and notice below: (The MIT License) @@ -3702,7 +4150,33 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----- -The following software may be included in this product: acorn, acorn-walk. A copy of the source code may be downloaded from https://github.com/acornjs/acorn.git (acorn), https://github.com/acornjs/acorn.git (acorn-walk). This software contains the following license and notice below: +The following software may be included in this product: acorn. A copy of the source code may be downloaded from https://github.com/acornjs/acorn.git. This software contains the following license and notice below: + +MIT License + +Copyright (C) 2012-2022 by various contributors (see AUTHORS) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +----- + +The following software may be included in this product: acorn-walk. A copy of the source code may be downloaded from https://github.com/acornjs/acorn.git. This software contains the following license and notice below: MIT License @@ -3925,7 +4399,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- -The following software may be included in this product: ansi-regex, ansi-styles, camelcase, camelcase-keys, find-up, is-fullwidth-code-point, is-plain-obj, locate-path, normalize-url, p-limit, p-locate, p-try, path-exists, quick-lru, split-on-first, string-width, strip-ansi, trim-newlines, wrap-ansi. A copy of the source code may be downloaded from https://github.com/chalk/ansi-regex.git (ansi-regex), https://github.com/chalk/ansi-styles.git (ansi-styles), https://github.com/sindresorhus/camelcase.git (camelcase), https://github.com/sindresorhus/camelcase-keys.git (camelcase-keys), https://github.com/sindresorhus/find-up.git (find-up), https://github.com/sindresorhus/is-fullwidth-code-point.git (is-fullwidth-code-point), https://github.com/sindresorhus/is-plain-obj.git (is-plain-obj), https://github.com/sindresorhus/locate-path.git (locate-path), https://github.com/sindresorhus/normalize-url.git (normalize-url), https://github.com/sindresorhus/p-limit.git (p-limit), https://github.com/sindresorhus/p-locate.git (p-locate), https://github.com/sindresorhus/p-try.git (p-try), https://github.com/sindresorhus/path-exists.git (path-exists), https://github.com/sindresorhus/quick-lru.git (quick-lru), https://github.com/sindresorhus/split-on-first.git (split-on-first), https://github.com/sindresorhus/string-width.git (string-width), https://github.com/chalk/strip-ansi.git (strip-ansi), https://github.com/sindresorhus/trim-newlines.git (trim-newlines), https://github.com/chalk/wrap-ansi.git (wrap-ansi). This software contains the following license and notice below: +The following software may be included in this product: ansi-regex, ansi-styles, camelcase, camelcase-keys, chalk, find-up, globals, has-flag, is-fullwidth-code-point, is-plain-obj, locate-path, normalize-url, p-limit, p-locate, p-try, path-exists, quick-lru, split-on-first, string-width, strip-ansi, supports-color, trim-newlines, wrap-ansi. A copy of the source code may be downloaded from https://github.com/chalk/ansi-regex.git (ansi-regex), https://github.com/chalk/ansi-styles.git (ansi-styles), https://github.com/sindresorhus/camelcase.git (camelcase), https://github.com/sindresorhus/camelcase-keys.git (camelcase-keys), https://github.com/chalk/chalk.git (chalk), https://github.com/sindresorhus/find-up.git (find-up), https://github.com/sindresorhus/globals.git (globals), https://github.com/sindresorhus/has-flag.git (has-flag), https://github.com/sindresorhus/is-fullwidth-code-point.git (is-fullwidth-code-point), https://github.com/sindresorhus/is-plain-obj.git (is-plain-obj), https://github.com/sindresorhus/locate-path.git (locate-path), https://github.com/sindresorhus/normalize-url.git (normalize-url), https://github.com/sindresorhus/p-limit.git (p-limit), https://github.com/sindresorhus/p-locate.git (p-locate), https://github.com/sindresorhus/p-try.git (p-try), https://github.com/sindresorhus/path-exists.git (path-exists), https://github.com/sindresorhus/quick-lru.git (quick-lru), https://github.com/sindresorhus/split-on-first.git (split-on-first), https://github.com/sindresorhus/string-width.git (string-width), https://github.com/chalk/strip-ansi.git (strip-ansi), https://github.com/chalk/supports-color.git (supports-color), https://github.com/sindresorhus/trim-newlines.git (trim-newlines), https://github.com/chalk/wrap-ansi.git (wrap-ansi). This software contains the following license and notice below: MIT License @@ -3997,7 +4471,33 @@ SOFTWARE. ----- -The following software may be included in this product: array-flatten, path-to-regexp. A copy of the source code may be downloaded from git://github.com/blakeembrey/array-flatten.git (array-flatten), https://github.com/pillarjs/path-to-regexp.git (path-to-regexp). This software contains the following license and notice below: +The following software may be included in this product: aria-hidden, react-remove-scroll, use-callback-ref, use-sidecar. A copy of the source code may be downloaded from git+https://github.com/theKashey/aria-hidden.git (aria-hidden), https://github.com/theKashey/react-remove-scroll (react-remove-scroll), https://github.com/theKashey/use-callback-ref/ (use-callback-ref), https://github.com/theKashey/use-sidecar (use-sidecar). This software contains the following license and notice below: + +MIT License + +Copyright (c) 2017 Anton Korzunov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +The following software may be included in this product: array-flatten, camel-case, capital-case, change-case, constant-case, dot-case, header-case, lower-case, no-case, param-case, pascal-case, path-case, path-to-regexp, sentence-case, snake-case, upper-case-first. A copy of the source code may be downloaded from git://github.com/blakeembrey/array-flatten.git (array-flatten), git://github.com/blakeembrey/change-case.git (camel-case), git://github.com/blakeembrey/change-case.git (capital-case), git://github.com/blakeembrey/change-case.git (change-case), git://github.com/blakeembrey/change-case.git (constant-case), git://github.com/blakeembrey/change-case.git (dot-case), git://github.com/blakeembrey/change-case.git (header-case), git://github.com/blakeembrey/change-case.git (lower-case), git://github.com/blakeembrey/change-case.git (no-case), git://github.com/blakeembrey/change-case.git (param-case), git://github.com/blakeembrey/change-case.git (pascal-case), git://github.com/blakeembrey/change-case.git (path-case), https://github.com/pillarjs/path-to-regexp.git (path-to-regexp), git://github.com/blakeembrey/change-case.git (sentence-case), git://github.com/blakeembrey/change-case.git (snake-case), git://github.com/blakeembrey/change-case.git (upper-case-first). This software contains the following license and notice below: The MIT License (MIT) @@ -4637,7 +5137,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -4655,7 +5155,7 @@ Apache License NOTICE AWS Cloud Development Kit (AWS CDK) -Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. +Copyright 2018-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. ------------------------------------------------------------------------------- @@ -4678,6 +5178,36 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------- +The AWS CDK includes the following third-party software/licensing: + +** mime-db - https://www.npmjs.com/package/mime-db +** mime-types - https://www.npmjs.com/package/mime-types +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------- + ** fs-extra - https://www.npmjs.com/package/fs-extra Copyright (c) 2011-2017 JP Richardson @@ -6911,25 +7441,13 @@ SOFTWARE. The following software may be included in this product: axios. A copy of the source code may be downloaded from https://github.com/axios/axios.git. This software contains the following license and notice below: -Copyright (c) 2014-present Matt Zabriskie +# Copyright (c) 2014-present Matt Zabriskie & Collaborators -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- @@ -7509,7 +8027,7 @@ SOFTWARE. ----- -The following software may be included in this product: camelcase, decamelize, filter-obj, object-assign, path-is-absolute. A copy of the source code may be downloaded from https://github.com/sindresorhus/camelcase.git (camelcase), https://github.com/sindresorhus/decamelize.git (decamelize), https://github.com/sindresorhus/filter-obj.git (filter-obj), https://github.com/sindresorhus/object-assign.git (object-assign), https://github.com/sindresorhus/path-is-absolute.git (path-is-absolute). This software contains the following license and notice below: +The following software may be included in this product: camelcase, decamelize, escape-string-regexp, filter-obj, object-assign, path-is-absolute. A copy of the source code may be downloaded from https://github.com/sindresorhus/camelcase.git (camelcase), https://github.com/sindresorhus/decamelize.git (decamelize), https://github.com/sindresorhus/escape-string-regexp.git (escape-string-regexp), https://github.com/sindresorhus/filter-obj.git (filter-obj), https://github.com/sindresorhus/object-assign.git (object-assign), https://github.com/sindresorhus/path-is-absolute.git (path-is-absolute). This software contains the following license and notice below: The MIT License (MIT) @@ -8771,6 +9289,26 @@ SOFTWARE. ----- +The following software may be included in this product: d, es6-symbol. A copy of the source code may be downloaded from git://github.com/medikoo/d.git (d), git://github.com/medikoo/es6-symbol.git (es6-symbol). This software contains the following license and notice below: + +ISC License + +Copyright (c) 2013-2019, Mariusz Nowak, @medikoo, medikoo.com + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +----- + The following software may be included in this product: d3-array. A copy of the source code may be downloaded from https://github.com/d3/d3-array.git. This software contains the following license and notice below: Copyright 2010-2020 Mike Bostock @@ -9003,6 +9541,32 @@ SOFTWARE. ----- +The following software may be included in this product: debounce. A copy of the source code may be downloaded from git://github.com/component/debounce. This software contains the following license and notice below: + +MIT License + +Copyright (c) 2012-2018 The Debounce Contributors. See CONTRIBUTORS. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + The following software may be included in this product: debug. A copy of the source code may be downloaded from git://github.com/visionmedia/debug.git. This software contains the following license and notice below: (The MIT License) @@ -9091,6 +9655,32 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ----- +The following software may be included in this product: deepmerge. A copy of the source code may be downloaded from git://github.com/TehShrike/deepmerge.git. This software contains the following license and notice below: + +The MIT License (MIT) + +Copyright (c) 2012 James Halliday, Josh Duff, and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +----- + The following software may be included in this product: define-properties, es-abstract. A copy of the source code may be downloaded from git://github.com/ljharb/define-properties.git (define-properties), git://github.com/ljharb/es-abstract.git (es-abstract). This software contains the following license and notice below: The MIT License (MIT) @@ -9197,7 +9787,7 @@ THE SOFTWARE. ----- -The following software may be included in this product: detect-node. A copy of the source code may be downloaded from https://github.com/iliakan/detect-node. This software contains the following license and notice below: +The following software may be included in this product: detect-node, detect-node-es. A copy of the source code may be downloaded from https://github.com/iliakan/detect-node (detect-node), https://github.com/thekashey/detect-node (detect-node-es). This software contains the following license and notice below: MIT License @@ -9544,6 +10134,26 @@ OTHER DEALINGS IN THE SOFTWARE. ----- +The following software may be included in this product: earcut. A copy of the source code may be downloaded from git://github.com/mapbox/earcut.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +----- + The following software may be included in this product: ecc-jsbn. A copy of the source code may be downloaded from https://github.com/quartzjer/ecc-jsbn.git. This software contains the following license and notice below: The MIT License (MIT) @@ -9881,11 +10491,57 @@ THE SOFTWARE. ----- -The following software may be included in this product: es-to-primitive, is-boolean-object, is-callable, is-date-object, is-number-object, is-string, is-symbol, is-typed-array, which-typed-array. A copy of the source code may be downloaded from git://github.com/ljharb/es-to-primitive.git (es-to-primitive), git://github.com/inspect-js/is-boolean-object.git (is-boolean-object), git://github.com/inspect-js/is-callable.git (is-callable), git://github.com/inspect-js/is-date-object.git (is-date-object), git://github.com/inspect-js/is-number-object.git (is-number-object), git://github.com/ljharb/is-string.git (is-string), git://github.com/inspect-js/is-symbol.git (is-symbol), git://github.com/inspect-js/is-typed-array.git (is-typed-array), git://github.com/inspect-js/which-typed-array.git (which-typed-array). This software contains the following license and notice below: +The following software may be included in this product: es-to-primitive, is-boolean-object, is-callable, is-date-object, is-number-object, is-string, is-symbol, is-typed-array, which-typed-array. A copy of the source code may be downloaded from git://github.com/ljharb/es-to-primitive.git (es-to-primitive), git://github.com/inspect-js/is-boolean-object.git (is-boolean-object), git://github.com/inspect-js/is-callable.git (is-callable), git://github.com/inspect-js/is-date-object.git (is-date-object), git://github.com/inspect-js/is-number-object.git (is-number-object), git://github.com/ljharb/is-string.git (is-string), git://github.com/inspect-js/is-symbol.git (is-symbol), git://github.com/inspect-js/is-typed-array.git (is-typed-array), git://github.com/inspect-js/which-typed-array.git (which-typed-array). This software contains the following license and notice below: + +The MIT License (MIT) + +Copyright (c) 2015 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +The following software may be included in this product: es5-ext. A copy of the source code may be downloaded from https://github.com/medikoo/es5-ext.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2011-2024, Mariusz Nowak, @medikoo, medikoo.com + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +----- + +The following software may be included in this product: es6-iterator. A copy of the source code may be downloaded from git://github.com/medikoo/es6-iterator.git. This software contains the following license and notice below: The MIT License (MIT) -Copyright (c) 2015 Jordan Harband +Copyright (C) 2013-2017 Mariusz Nowak (www.medikoo.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -9894,16 +10550,16 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. ----- @@ -9936,7 +10592,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- -The following software may be included in this product: escape-string-regexp, find-up, is-plain-obj, locate-path, map-obj, p-limit, p-locate, path-exists, pretty-bytes, yocto-queue. A copy of the source code may be downloaded from https://github.com/sindresorhus/escape-string-regexp.git (escape-string-regexp), https://github.com/sindresorhus/find-up.git (find-up), https://github.com/sindresorhus/is-plain-obj.git (is-plain-obj), https://github.com/sindresorhus/locate-path.git (locate-path), https://github.com/sindresorhus/map-obj.git (map-obj), https://github.com/sindresorhus/p-limit.git (p-limit), https://github.com/sindresorhus/p-locate.git (p-locate), https://github.com/sindresorhus/path-exists.git (path-exists), https://github.com/sindresorhus/pretty-bytes.git (pretty-bytes), https://github.com/sindresorhus/yocto-queue.git (yocto-queue). This software contains the following license and notice below: +The following software may be included in this product: escape-string-regexp, find-up, get-stream, is-plain-obj, locate-path, map-obj, p-limit, p-locate, path-exists, pretty-bytes, yocto-queue. A copy of the source code may be downloaded from https://github.com/sindresorhus/escape-string-regexp.git (escape-string-regexp), https://github.com/sindresorhus/find-up.git (find-up), https://github.com/sindresorhus/get-stream.git (get-stream), https://github.com/sindresorhus/is-plain-obj.git (is-plain-obj), https://github.com/sindresorhus/locate-path.git (locate-path), https://github.com/sindresorhus/map-obj.git (map-obj), https://github.com/sindresorhus/p-limit.git (p-limit), https://github.com/sindresorhus/p-locate.git (p-locate), https://github.com/sindresorhus/path-exists.git (path-exists), https://github.com/sindresorhus/pretty-bytes.git (pretty-bytes), https://github.com/sindresorhus/yocto-queue.git (yocto-queue). This software contains the following license and notice below: MIT License @@ -9950,6 +10606,26 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ----- +The following software may be included in this product: esniff. A copy of the source code may be downloaded from https://github.com/medikoo/esniff.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2013-2024, Mariusz Nowak, @medikoo, medikoo.com + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +----- + The following software may be included in this product: etag, proxy-addr. A copy of the source code may be downloaded from https://github.com/jshttp/etag.git (etag), https://github.com/jshttp/proxy-addr.git (proxy-addr). This software contains the following license and notice below: (The MIT License) @@ -9977,6 +10653,30 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- +The following software may be included in this product: event-emitter. A copy of the source code may be downloaded from git://github.com/medikoo/event-emitter.git. This software contains the following license and notice below: + +Copyright (C) 2012-2015 Mariusz Nowak (www.medikoo.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +----- + The following software may be included in this product: eventemitter3. A copy of the source code may be downloaded from git://github.com/primus/eventemitter3.git. This software contains the following license and notice below: The MIT License (MIT) @@ -10059,6 +10759,26 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- +The following software may be included in this product: ext. A copy of the source code may be downloaded from https://github.com/medikoo/es5-ext#ext. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2011-2019, Mariusz Nowak, @medikoo, medikoo.com + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +----- + The following software may be included in this product: extend. A copy of the source code may be downloaded from https://github.com/justmoon/node-extend.git. This software contains the following license and notice below: The MIT License (MIT) @@ -10894,6 +11614,51 @@ Apache License ----- +The following software may be included in this product: geojson-rbush. This software contains the following license and notice below: + +The MIT License (MIT) + +Copyright (c) 2018 Denis Carriere + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +----- + +The following software may be included in this product: geojson-vt. A copy of the source code may be downloaded from git://github.com/mapbox/geojson-vt.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2015, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +----- + The following software may be included in this product: get-caller-file. A copy of the source code may be downloaded from git+https://github.com/stefanpenner/get-caller-file.git. This software contains the following license and notice below: ISC License (ISC) @@ -10931,6 +11696,32 @@ SOFTWARE. ----- +The following software may be included in this product: get-nonce. A copy of the source code may be downloaded from git@github.com:theKashey/get-nonce.git. This software contains the following license and notice below: + +MIT License + +Copyright (c) 2020 Anton Korzunov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + The following software may be included in this product: get-symbol-description, has-tostringtag, is-shared-array-buffer. A copy of the source code may be downloaded from git+https://github.com/inspect-js/get-symbol-description.git (get-symbol-description), git+https://github.com/inspect-js/has-tostringtag.git (has-tostringtag), git+https://github.com/inspect-js/is-shared-array-buffer.git (is-shared-array-buffer). This software contains the following license and notice below: MIT License @@ -10980,6 +11771,30 @@ IN THE SOFTWARE. ----- +The following software may be included in this product: gl-matrix. A copy of the source code may be downloaded from https://github.com/toji/gl-matrix.git. This software contains the following license and notice below: + +Copyright (c) 2015-2021, Brandon Jones, Colin MacKenzie IV. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +----- + The following software may be included in this product: glob. A copy of the source code may be downloaded from git://github.com/isaacs/node-glob.git. This software contains the following license and notice below: The ISC License @@ -11072,6 +11887,24 @@ SOFTWARE. ----- +The following software may be included in this product: grid-index. A copy of the source code may be downloaded from git+https://github.com/mapbox/grid-index.git. This software contains the following license and notice below: + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +----- + The following software may be included in this product: has-property-descriptors. A copy of the source code may be downloaded from git+https://github.com/inspect-js/has-property-descriptors.git. This software contains the following license and notice below: MIT License @@ -11507,6 +12340,32 @@ THIS SOFTWARE. ----- +The following software may be included in this product: invariant, prop-types. A copy of the source code may be downloaded from https://github.com/zertosh/invariant (invariant), https://github.com/facebook/prop-types.git (prop-types). This software contains the following license and notice below: + +MIT License + +Copyright (c) 2013-present, Facebook, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + The following software may be included in this product: ipaddr.js. A copy of the source code may be downloaded from git://github.com/whitequark/ipaddr.js. This software contains the following license and notice below: Copyright (C) 2011-2017 whitequark @@ -11608,6 +12467,31 @@ THE SOFTWARE. ----- +The following software may be included in this product: is-core-module. A copy of the source code may be downloaded from git+https://github.com/inspect-js/is-core-module.git. This software contains the following license and notice below: + +The MIT License (MIT) + +Copyright (c) 2014 Dave Justice + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +----- + The following software may be included in this product: is-extglob. A copy of the source code may be downloaded from https://github.com/jonschlinkert/is-extglob.git. This software contains the following license and notice below: The MIT License (MIT) @@ -12068,11 +12952,39 @@ SOFTWARE. ----- -The following software may be included in this product: json5. A copy of the source code may be downloaded from git+https://github.com/json5/json5.git. This software contains the following license and notice below: +The following software may be included in this product: json5. A copy of the source code may be downloaded from git+https://github.com/json5/json5.git. This software contains the following license and notice below: + +MIT License + +Copyright (c) 2012-2018 Aseem Kishore, and [others]. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +[others]: https://github.com/json5/json5/contributors + +----- + +The following software may be included in this product: jsonc-parser. A copy of the source code may be downloaded from https://github.com/microsoft/node-jsonc-parser. This software contains the following license and notice below: -MIT License +The MIT License (MIT) -Copyright (c) 2012-2018 Aseem Kishore, and [others]. +Copyright (c) Microsoft Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -12092,8 +13004,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -[others]: https://github.com/json5/json5/contributors - ----- The following software may be included in this product: jsonfile. A copy of the source code may be downloaded from git@github.com:jprichardson/node-jsonfile.git. This software contains the following license and notice below: @@ -12229,6 +13139,26 @@ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEAL ----- +The following software may be included in this product: kdbush, quickselect. A copy of the source code may be downloaded from git://github.com/mourner/kdbush.git (kdbush). This software contains the following license and notice below: + +ISC License + +Copyright (c) 2018, Vladimir Agafonkin + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +----- + The following software may be included in this product: lambda-log. A copy of the source code may be downloaded from https://github.com/KyleRoss/node-lambda-log.git. This software contains the following license and notice below: MIT License @@ -12464,6 +13394,230 @@ THE SOFTWARE. ----- +The following software may be included in this product: mapbox-gl. A copy of the source code may be downloaded from git://github.com/mapbox/mapbox-gl-js.git. This software contains the following license and notice below: + +Copyright (c) 2020, Mapbox + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Mapbox GL JS nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +------------------------------------------------------------------------------- + +Contains code from glfx.js + +Copyright (C) 2011 by Evan Wallace + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +-------------------------------------------------------------------------------- + +Contains a portion of d3-color https://github.com/d3/d3-color + +Copyright 2010-2016 Mike Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +The following software may be included in this product: maplibre-gl. A copy of the source code may be downloaded from git://github.com/maplibre/maplibre-gl-js.git. This software contains the following license and notice below: + +Copyright (c) 2020, MapLibre contributors + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of MapLibre GL JS nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +------------------------------------------------------------------------------- + +Contains code from mapbox-gl-js v1.13 and earlier + +Version v1.13 of mapbox-gl-js and earlier are licensed under a BSD-3-Clause license + +Copyright (c) 2020, Mapbox +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of Mapbox GL JS nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +------------------------------------------------------------------------------- + +Contains code from glfx.js + +Copyright (C) 2011 by Evan Wallace + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +-------------------------------------------------------------------------------- + +Contains a portion of d3-color https://github.com/d3/d3-color + +Copyright 2010-2016 Mike Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +The following software may be included in this product: maplibre-gl-draw-circle. A copy of the source code may be downloaded from https://github.com/thaddmt/maplibre-gl-draw-circle. This software contains the following license and notice below: + +MIT License + +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +----- + The following software may be included in this product: markdown-table. A copy of the source code may be downloaded from https://github.com/wooorm/markdown-table.git. This software contains the following license and notice below: (The MIT License) @@ -12843,7 +13997,7 @@ The following software may be included in this product: minipass. A copy of the The ISC License -Copyright (c) 2017-2022 npm, Inc., Isaac Z. Schlueter, and Contributors +Copyright (c) 2017-2023 npm, Inc., Isaac Z. Schlueter, and Contributors Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above @@ -13095,6 +14249,26 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- +The following software may be included in this product: next-tick. A copy of the source code may be downloaded from git://github.com/medikoo/next-tick.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2012-2020, Mariusz Nowak, @medikoo, medikoo.com + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +----- + The following software may be included in this product: node-fetch. A copy of the source code may be downloaded from https://github.com/bitinn/node-fetch.git. This software contains the following license and notice below: The MIT License (MIT) @@ -13388,24 +14562,82 @@ The following software may be included in this product: parseurl. A copy of the Copyright (c) 2014 Jonathan Ong Copyright (c) 2014-2017 Douglas Christopher Wilson -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +----- + +The following software may be included in this product: path-parse. A copy of the source code may be downloaded from https://github.com/jbgutierrez/path-parse.git. This software contains the following license and notice below: + +The MIT License (MIT) + +Copyright (c) 2015 Javier Blanco + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +The following software may be included in this product: pbf. A copy of the source code may be downloaded from git@github.com:mapbox/pbf.git. This software contains the following license and notice below: + +Copyright (c) 2017, Mapbox +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +* Neither the name of pbf nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----- @@ -13589,6 +14821,26 @@ THE SOFTWARE. ----- +The following software may be included in this product: potpack. A copy of the source code may be downloaded from git+https://github.com/mapbox/potpack.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2018, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +----- + The following software may be included in this product: prismjs. A copy of the source code may be downloaded from https://github.com/PrismJS/prism.git. This software contains the following license and notice below: MIT LICENSE @@ -13615,11 +14867,11 @@ THE SOFTWARE. ----- -The following software may be included in this product: prop-types. A copy of the source code may be downloaded from https://github.com/facebook/prop-types.git. This software contains the following license and notice below: +The following software may be included in this product: protocol-buffers-schema. A copy of the source code may be downloaded from https://github.com/mafintosh/protocol-buffers-schema. This software contains the following license and notice below: -MIT License +The MIT License (MIT) -Copyright (c) 2013-present, Facebook, Inc. +Copyright (c) 2014 Mathias Buus Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -13628,16 +14880,41 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +----- + +The following software may be included in this product: proxy-from-env. A copy of the source code may be downloaded from https://github.com/Rob--W/proxy-from-env.git. This software contains the following license and notice below: + +The MIT License + +Copyright (C) 2016-2018 Rob Wu + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- @@ -13872,7 +15149,33 @@ THE SOFTWARE. ----- -The following software may be included in this product: react, react-dom, react-is, scheduler. A copy of the source code may be downloaded from https://github.com/facebook/react.git (react), https://github.com/facebook/react.git (react-dom), https://github.com/facebook/react.git (react-is), https://github.com/facebook/react.git (scheduler). This software contains the following license and notice below: +The following software may be included in this product: rbush. A copy of the source code may be downloaded from git://github.com/mourner/rbush.git. This software contains the following license and notice below: + +MIT License + +Copyright (c) 2016 Vladimir Agafonkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +----- + +The following software may be included in this product: react, react-dom, react-is, scheduler, use-sync-external-store. A copy of the source code may be downloaded from https://github.com/facebook/react.git (react), https://github.com/facebook/react.git (react-dom), https://github.com/facebook/react.git (react-is), https://github.com/facebook/react.git (scheduler), https://github.com/facebook/react.git (use-sync-external-store). This software contains the following license and notice below: MIT License @@ -13968,6 +15271,32 @@ SOFTWARE. ----- +The following software may be included in this product: react-generate-context. This software contains the following license and notice below: + +MIT License + +Copyright (c) 2021 Kyle Shevlin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + The following software may be included in this product: react-lifecycles-compat. A copy of the source code may be downloaded from https://github.com/reactjs/react-lifecycles-compat.git. This software contains the following license and notice below: MIT License @@ -13994,6 +15323,70 @@ SOFTWARE. ----- +The following software may be included in this product: react-map-gl. A copy of the source code may be downloaded from https://github.com/visgl/react-map-gl.git. This software contains the following license and notice below: + +Copyright (c) 2020 Urban Computing Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +This contains code from MapboxGL-js + +Copyright (c) 2014, Mapbox + +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Mapbox GL JS nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------- + +Contains code from Mapbox GL Style JSON + +Mapbox Open Styles are copyright (c) 2014, Mapbox, all rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + The following software may be included in this product: react-markdown. A copy of the source code may be downloaded from https://github.com/remarkjs/react-markdown.git. This software contains the following license and notice below: The MIT License (MIT) @@ -14522,7 +15915,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- -The following software may be included in this product: regenerator-runtime. A copy of the source code may be downloaded from https://github.com/facebook/regenerator/tree/master/packages/runtime. This software contains the following license and notice below: +The following software may be included in this product: regenerator-runtime. A copy of the source code may be downloaded from https://github.com/facebook/regenerator/tree/main/packages/runtime. This software contains the following license and notice below: MIT License @@ -14803,6 +16196,32 @@ SOFTWARE. ----- +The following software may be included in this product: resolve. A copy of the source code may be downloaded from git://github.com/browserify/resolve.git. This software contains the following license and notice below: + +MIT License + +Copyright (c) 2012 James Halliday + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + The following software may be included in this product: resolve-pathname, value-equal. A copy of the source code may be downloaded from https://github.com/mjackson/resolve-pathname.git (resolve-pathname), https://github.com/mjackson/value-equal.git (value-equal). This software contains the following license and notice below: MIT License @@ -14829,29 +16248,117 @@ SOFTWARE. ----- -The following software may be included in this product: retry. A copy of the source code may be downloaded from git://github.com/tim-kos/node-retry.git. This software contains the following license and notice below: +The following software may be included in this product: resolve-protobuf-schema. A copy of the source code may be downloaded from https://github.com/mafintosh/resolve-protobuf-schema.git. This software contains the following license and notice below: + +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +----- + +The following software may be included in this product: retry. A copy of the source code may be downloaded from git://github.com/tim-kos/node-retry.git. This software contains the following license and notice below: + +Copyright (c) 2011: +Tim Koschützki (tim@debuggable.com) +Felix Geisendörfer (felix@debuggable.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +----- + +The following software may be included in this product: rw. A copy of the source code may be downloaded from http://github.com/mbostock/rw.git. This software contains the following license and notice below: + +Copyright (c) 2014-2016, Michael Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* The name Michael Bostock may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + +The following software may be included in this product: rw. A copy of the source code may be downloaded from http://github.com/mbostock/rw.git. This software contains the following license and notice below: -Copyright (c) 2011: -Tim Koschützki (tim@debuggable.com) -Felix Geisendörfer (felix@debuggable.com) +Copyright (c) 2014, Michael Bostock +All rights reserved. - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* The name Michael Bostock may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----- @@ -15329,39 +16836,251 @@ furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +The following software may be included in this product: strnum. A copy of the source code may be downloaded from https://github.com/NaturalIntelligence/strnum. This software contains the following license and notice below: + +MIT License + +Copyright (c) 2021 Natural Intelligence + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + +The following software may be included in this product: style-dictionary. A copy of the source code may be downloaded from git://github.com/amzn/style-dictionary.git. This software contains the following license and notice below: + +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. ------ + Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. -The following software may be included in this product: strnum. A copy of the source code may be downloaded from https://github.com/NaturalIntelligence/strnum. This software contains the following license and notice below: + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at -MIT License + http://www.apache.org/licenses/LICENSE-2.0 -Copyright (c) 2021 Natural Intelligence + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +NOTICE -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +Style Dictionary +Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. ----- @@ -15392,6 +17111,54 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- +The following software may be included in this product: subtag. A copy of the source code may be downloaded from git+https://github.com/ryanve/subtag.git. This software contains the following license and notice below: + +## ISC License + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +----- + +The following software may be included in this product: suggestions-list. A copy of the source code may be downloaded from git+ssh://git@github.com:thaddmt/suggestions-list.git. This software contains the following license and notice below: + +Copyright (c) 2021, thaddmt + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +----- + +The following software may be included in this product: supercluster. A copy of the source code may be downloaded from git://github.com/mapbox/supercluster.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2021, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +----- + The following software may be included in this product: table. A copy of the source code may be downloaded from https://github.com/gajus/table. This software contains the following license and notice below: Copyright (c) 2018, Gajus Kuizinas (http://gajus.com/) @@ -15446,6 +17213,41 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- +The following software may be included in this product: tinyqueue. A copy of the source code may be downloaded from https://github.com/mourner/tinyqueue.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2017, Vladimir Agafonkin + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +----- + +The following software may be included in this product: to-fast-properties. A copy of the source code may be downloaded from https://github.com/sindresorhus/to-fast-properties.git. This software contains the following license and notice below: + +MIT License + +Copyright (c) 2014 Petka Antonov + 2015 Sindre Sorhus + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +----- + The following software may be included in this product: toidentifier. A copy of the source code may be downloaded from https://github.com/component/toidentifier.git. This software contains the following license and notice below: MIT License @@ -15489,6 +17291,32 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ----- +The following software may be included in this product: traverse. A copy of the source code may be downloaded from git://github.com/ljharb/js-traverse.git. This software contains the following license and notice below: + +MIT License + +Copyright (c) 2010 James Halliday and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + The following software may be included in this product: trough. A copy of the source code may be downloaded from https://github.com/wooorm/trough.git. This software contains the following license and notice below: (The MIT License) @@ -15532,6 +17360,66 @@ PERFORMANCE OF THIS SOFTWARE. ----- +The following software may be included in this product: type. A copy of the source code may be downloaded from https://github.com/medikoo/type.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2019-2022, Mariusz Nowak, @medikoo, medikoo.com + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +----- + +The following software may be included in this product: type. A copy of the source code may be downloaded from https://github.com/medikoo/type.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2019, Mariusz Nowak, @medikoo, medikoo.com + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +----- + +The following software may be included in this product: type. A copy of the source code may be downloaded from https://github.com/medikoo/type.git. This software contains the following license and notice below: + +ISC License + +Copyright (c) 2019-2020, Mariusz Nowak, @medikoo, medikoo.com + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +----- + The following software may be included in this product: typesafe-i18n. A copy of the source code may be downloaded from https://github.com/ivanhofer/typesafe-i18n. This software contains the following license and notice below: MIT License @@ -16186,6 +18074,32 @@ SOFTWARE. ----- +The following software may be included in this product: use-isomorphic-layout-effect. A copy of the source code may be downloaded from git+https://github.com/Andarist/use-isomorphic-layout-effect.git. This software contains the following license and notice below: + +MIT License + +Copyright (c) Mateusz Burzyński + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +----- + The following software may be included in this product: util. A copy of the source code may be downloaded from git://github.com/browserify/node-util. This software contains the following license and notice below: Copyright Joyent, Inc. and other Node contributors. All rights reserved. @@ -16419,6 +18333,64 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ----- +The following software may be included in this product: vt-pbf. A copy of the source code may be downloaded from git+https://github.com/mapbox/vt-pbf.git. This software contains the following license and notice below: + +The MIT License (MIT) + +Copyright (c) 2015 Anand Thakker + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- + +Contains geojson_wrapper.js from https://github.com/mapbox/mapbox-gl-js + +Copyright (c) 2014, Mapbox + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Mapbox GL JS nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----- + The following software may be included in this product: web-vitals. A copy of the source code may be downloaded from https://github.com/GoogleChrome/web-vitals.git. This software contains the following license and notice below: Apache License diff --git a/source/cypress/e2e/GoogleAnalyticsDP/testGoogleAnalytics.cy.ts b/source/cypress/e2e/GoogleAnalyticsDP/testGoogleAnalytics.cy.ts index f839d79..9c5619a 100644 --- a/source/cypress/e2e/GoogleAnalyticsDP/testGoogleAnalytics.cy.ts +++ b/source/cypress/e2e/GoogleAnalyticsDP/testGoogleAnalytics.cy.ts @@ -59,15 +59,16 @@ describe('complete e2e creation of a domain, google analytics product, query wit cy.contains('.MuiTypography-root', 'Google Analytics').click(); cy.contains('.MuiButton-label', 'Next').click(); - cy.get('input[name="sourceDetails.viewId"]').type('173381731'); - cy.get('input[name="sourceDetails.dimensions"]').type('ga:year{enter}'); - cy.get('input[name="sourceDetails.dimensions"]').type('ga:month{enter}'); - cy.get('input[name="sourceDetails.dimensions"]').type('ga:day{enter}'); - cy.get('input[name="sourceDetails.metrics"]').type('ga:visitors{enter}'); - cy.get('input[name="sourceDetails.metrics"]').type('ga:newVisits{enter}'); + cy.get('input[name="sourceDetails.propertyId"]').type('430446865'); + cy.get('input[name="sourceDetails.dimensions"]').type('year{downArrow}{downArrow}{downArrow}{enter}'); + cy.get('input[name="sourceDetails.dimensions"]').type('month{downArrow}{enter}'); + cy.get('input[name="sourceDetails.dimensions"]').type('day{downArrow}{enter}'); + cy.get('input[name="sourceDetails.dimensions"]').type('city{enter}'); + cy.get('input[name="sourceDetails.metrics"]').type('engagedSessions{enter}'); + cy.get('input[name="sourceDetails.metrics"]').type('totalUsers{downArrow}{enter}'); cy.contains('.MuiTypography-root', 'From JSON file').click(); - cy.get('input[type="file"]').attachFile('ga-credentials.json'); + cy.get('input[type="file"]').attachFile('credentials.json'); cy.wait(2000); cy.contains('.MuiTypography-root', 'Schedule').click(); diff --git a/source/package.json b/source/package.json index a967857..891df56 100644 --- a/source/package.json +++ b/source/package.json @@ -2,14 +2,17 @@ "name": "ada", "title": "Automated Data Analytics on AWS", "description": "Automated Data Analytics on AWS simplifies the management and analysis of data, providing an end-to-end platform used for ingesting, transforming, governing, and querying datasets through a standalone user interface", - "version": "1.3.0", - "author": "Amazon Web Services", + "version": "1.4.0", + "author": { + "name": "Amazon Web Services", + "url": "https://aws.amazon.com/solutions" + }, "awsSolutionId": "SO0190", - "awsSolutionVersion": "v1.3.0", + "awsSolutionVersion": "v1.4.0", "private": true, "license": "Apache-2.0", "engines": { - "node": ">=14.0.0 <19.0.0" + "node": ">=16.0.0 <19.0.0" }, "scripts": { "audit": "node yarn-audit.js --groups dependencies --level high --adt-suppress-level-exit-code", @@ -50,14 +53,11 @@ "*.{ts,tsx}": "eslint --cache --fix --quiet" }, "dependencies": { - "@aws-cdk/aws-apigatewayv2-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-apigatewayv2-authorizers-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-apigatewayv2-integrations-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-glue-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-kinesisfirehose-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-kinesisfirehose-destinations-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-lambda-python-alpha": "2.88.0-alpha.0", - "aws-cdk-lib": "2.88.0", + "@aws-cdk/aws-glue-alpha": "2.130.0-alpha.0", + "@aws-cdk/aws-kinesisfirehose-alpha": "2.130.0-alpha.0", + "@aws-cdk/aws-kinesisfirehose-destinations-alpha": "2.130.0-alpha.0", + "@aws-cdk/aws-lambda-python-alpha": "2.130.0-alpha.0", + "aws-cdk-lib": "2.130.0", "constructs": "^10.1.101", "find-up": "^6.0.0", "json5": "^2.2.2", @@ -67,9 +67,8 @@ "short-uuid": "^4.2.0" }, "devDependencies": { - "@aws-cdk/cloudformation-diff": "^2.33.0", - "@aws-sdk/client-dynamodb": "^3.370.0", - "@aws-sdk/util-credentials": "^3.56.0", + "@aws-sdk/client-dynamodb": "3.370.0", + "@aws-sdk/util-credentials": "3.56.0", "@mock/require": "^0.2.2", "@pact-foundation/pact": "^9.16.0", "@shelf/jest-dynamodb": "^2.1.0", @@ -87,11 +86,11 @@ "@types/node-fetch": "^2.5.8", "@typescript-eslint/eslint-plugin": "^4.31.0", "@typescript-eslint/parser": "^4.31.0", - "aws-cdk": "2.88.0", + "aws-cdk": "2.130.0", "aws-sdk": "^2.1358.0", "babel-eslint": "^10.0.3", "copyfiles": "^2.4.1", - "cypress": "10.3.1", + "cypress": "12.15.0", "cypress-fail-fast": "^5.0.0", "cypress-file-upload": "^5.0.8", "cypress-localstorage-commands": "^2.1.0", @@ -114,9 +113,9 @@ "find": "^0.3.0", "fs-extra": "^10.0.0", "husky": "^8.0.1", - "jest": "^26.6.3", - "jest-environment-node": "^26.6.2", - "jest-extended": "^0.11.5", + "jest": "26.6.3", + "jest-environment-node": "26.6.2", + "jest-extended": "0.11.5", "jest-pact": "^0.9.1", "json-stringify-nice": "^1.1.4", "lerna": "^5.0.0", @@ -153,11 +152,11 @@ "**/react-scripts/**/browserslist": "^4.16.5", "**/react-scripts/**/glob-parent": "^5.1.2", "**/node-fetch": "^2.6.7", - "**/follow-redirects": "^1.14.8", + "**/follow-redirects": "^1.15.6", "**/nth-check": "^2.0.1", "d3-color": "^3.1.0", "minimatch": "^3.0.5", - "decode-uri-component": "0.2.1", + "decode-uri-component": "^0.2.1", "qs": "^6.7.3", "express": "^4.17.3", "http-cache-semantics": "^4.1.1", @@ -165,7 +164,16 @@ "xml2js": "^0.5.0", "tough-cookie": "^4.1.3", "url-parse": "^1.5.9", - "@cypress/request": "^3.0.0" + "@cypress/request": "^3.0.0", + "ttypescript": "1.5.15", + "source-map": "0.6.1", + "@babel/traverse": "7.23.9", + "axios": "^1.6.5", + "**/dynamodb-local/debug": "^4.3.1", + "**/@shelf/jest-dynamodb/debug": "^4.3.1", + "**/socks/ip": "1.1.9", + "**/pac-resolver/ip": "1.1.9", + "es5-ext": "0.10.63" }, "workspaces": { "packages": [ diff --git a/source/packages/@ada/api/README.md b/source/packages/@ada/api/README.md index cf8737b..0d620ae 100644 --- a/source/packages/@ada/api/README.md +++ b/source/packages/@ada/api/README.md @@ -1,4 +1,4 @@ # @ada/api package -This package contains all the "api" peripherial, such as generated sdk specs, sdk clients, docs, and utils; +This package contains all the "api" peripheral, such as generated sdk specs, sdk clients, docs, and utils; it does **not** contain the source of api definition which comes from CDK constructs in the infra. diff --git a/source/packages/@ada/api/extended-client/mock/types.ts b/source/packages/@ada/api/extended-client/mock/types.ts index 1fbe278..14f4be3 100644 --- a/source/packages/@ada/api/extended-client/mock/types.ts +++ b/source/packages/@ada/api/extended-client/mock/types.ts @@ -11,7 +11,7 @@ export type MockApiClient = { [I in ApiOperationName]: I extends ApiOperationName ? API[I] extends (...args: infer P) => infer R ? R extends Promise - ? jest.Mock>, P> + ? jest.Mock<(...args: P) => Promise>> : never : never : never; diff --git a/source/packages/@ada/api/package.json b/source/packages/@ada/api/package.json index 13f9f9c..370accc 100644 --- a/source/packages/@ada/api/package.json +++ b/source/packages/@ada/api/package.json @@ -6,6 +6,7 @@ "license": "Apache-2.0", "main": "./client/index.js", "types": "./client/index.d.ts", + "type": "commonjs", "scripts": { "prebuild": "yarn clean && yarn generate", "build": "yarn run compile", @@ -28,8 +29,8 @@ "@types/node": "*", "@types/node-fetch": "^2.5.7", "@types/pluralize": "^0.0.29", - "aws-cdk": "2.88.0", - "aws-cdk-lib": "2.88.0", + "aws-cdk": "2.130.0", + "aws-cdk-lib": "2.130.0", "constructs": "^10.1.181", "btoa": "^1.2.1", "es6-promise": "^4.2.4", diff --git a/source/packages/@ada/api/spec.yaml b/source/packages/@ada/api/spec.yaml index 9a1f7c5..e376633 100644 --- a/source/packages/@ada/api/spec.yaml +++ b/source/packages/@ada/api/spec.yaml @@ -4,7 +4,7 @@ info: of data, providing an end-to-end platform used for ingesting, transforming, governing, and querying datasets through a standalone user interface title: Automated Data Analytics on AWS API - version: 1.3.0 + version: 1.4.0 servers: - url: https://{apigId}.execute-api.{region}.amazonaws.com/{stage} variables: @@ -18,6 +18,130 @@ servers: default: prod description: AWS API Gateway Stage paths: + /administration/budgets: + delete: + description: Delete administration budgets + operationId: DeleteAdministrationBudgets + parameters: [] + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/BudgetResponse' + description: 200 response + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 400 response + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 403 response + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 404 response + get: + description: Get administration budgets + operationId: GetAdministrationBudgets + parameters: [] + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/BudgetDetails' + description: 200 response + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 400 response + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 403 response + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 404 response + post: + description: Post administration budgets + operationId: PostAdministrationBudgets + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BudgetInput' + required: true + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/BudgetResponse' + description: 200 response + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 400 response + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 403 response + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 404 response + /administration/deploy-superset: + post: + description: Post administration deploy superset + operationId: PostAdministrationDeploySuperset + parameters: [] + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/SupersetDeployResponse' + description: 200 response + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 400 response + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 403 response + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiError' + description: 404 response /administration/start-tear-down/destroy-data: delete: description: Delete administration start tear down destroy data @@ -4740,6 +4864,95 @@ components: - sqlClause title: AttributeValuePolicyInput type: object + BudgetDetails: + description: Information about the Budget action + example: + softNotifications: + - threshold: 5 + state: state + - threshold: 5 + state: state + forecastedSpend: 1 + subscriberList: + - subscriberList + - subscriberList + actualSpend: 0 + budgetLimit: 6 + properties: + actualSpend: + type: integer + budgetLimit: + type: integer + forecastedSpend: + type: integer + softNotifications: + description: Soft notifications + items: + $ref: '#/components/schemas/BudgetDetails_softNotifications' + type: array + subscriberList: + description: Subscribers to recieve notifications + items: + type: string + type: array + required: + - actualSpend + - budgetLimit + - forecastedSpend + - softNotifications + - subscriberList + title: BudgetDetails + type: object + BudgetInput: + description: Create new/Update existing budget with notification and subscribers + example: + softNotifications: + - 6 + - 6 + subscriberList: + - subscriberList + - subscriberList + updatedTimestamp: updatedTimestamp + budgetLimit: 0 + properties: + budgetLimit: + type: integer + softNotifications: + description: Soft notifications + items: + type: integer + type: array + subscriberList: + description: Subscribers to recieve notifications + items: + type: string + type: array + updatedTimestamp: + maxLength: 64 + pattern: ^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)((-(\d{2}):(\d{2})|Z)?))?$ + type: string + required: + - budgetLimit + - softNotifications + - subscriberList + title: BudgetInput + type: object + BudgetResponse: + description: Information about the Budget creation/update action + example: + budgetName: budgetName + message: message + properties: + budgetName: + description: The budget name + type: string + message: + description: Response message + type: string + required: + - budgetName + title: BudgetResponse + type: object ColumnMetadata: properties: dataType: @@ -9704,6 +9917,18 @@ components: - CLOUDTRAIL - MONGODB type: string + SupersetDeployResponse: + description: Information about the Apache Superset deployment action + example: + message: message + properties: + message: + description: Response message + type: string + required: + - message + title: SupersetDeployResponse + type: object TableStream: properties: crossAccount: @@ -10171,6 +10396,19 @@ components: $ref: '#/components/schemas/Permission' description: Map of route by name type: object + BudgetDetails_softNotifications: + example: + threshold: 5 + state: state + properties: + state: + type: string + threshold: + type: integer + required: + - state + - threshold + type: object FileUploadInput_parts: example: etag: etag diff --git a/source/packages/@ada/athena-lens/package.json b/source/packages/@ada/athena-lens/package.json index c3a08c3..8fae9dc 100644 --- a/source/packages/@ada/athena-lens/package.json +++ b/source/packages/@ada/athena-lens/package.json @@ -3,6 +3,7 @@ "version": "0.0.0", "private": true, "license": "Apache-2.0", + "description": "Ada athena-lens", "scripts": { "docker": "docker run -v $(pwd)/../../../:/source -v $HOME/.m2:/root/.m2 -w /source ada-java-build-base scripts/build-java.sh athena-lens", "build": "yarn docker install", diff --git a/source/packages/@ada/athena-utilities/package.json b/source/packages/@ada/athena-utilities/package.json index 4e05658..a64d56f 100644 --- a/source/packages/@ada/athena-utilities/package.json +++ b/source/packages/@ada/athena-utilities/package.json @@ -3,6 +3,7 @@ "version": "0.0.0", "private": true, "license": "Apache-2.0", + "description": "Ada athena-utilities", "scripts": { "docker": "docker run -v $(pwd)/../../../:/source -v $HOME/.m2:/root/.m2 -w /source ada-java-build-base scripts/build-java.sh athena-utilities", "build": "yarn docker install", diff --git a/source/packages/@ada/cdk-core/README.md b/source/packages/@ada/cdk-core/README.md index 2ad29b1..f72f7fa 100644 --- a/source/packages/@ada/cdk-core/README.md +++ b/source/packages/@ada/cdk-core/README.md @@ -1,5 +1,5 @@ # cdk-core -This package defines common modules utlized by the solution infrastructure packages for [AWS Development Kit (CDK)](https://aws.amazon.com/cdk/) that are considered agnostic to the solution itself. +This package defines common modules utilized by the solution infrastructure packages for [AWS Development Kit (CDK)](https://aws.amazon.com/cdk/) that are considered agnostic to the solution itself. In general, modules in this package can be considered for broader open-source use in other CDK projects and may eventually be extracted into a separate project/library to enable reuse. diff --git a/source/packages/@ada/cdk-core/package.json b/source/packages/@ada/cdk-core/package.json index 3da169d..6f24847 100644 --- a/source/packages/@ada/cdk-core/package.json +++ b/source/packages/@ada/cdk-core/package.json @@ -3,6 +3,7 @@ "version": "0.0.0", "private": true, "license": "Apache-2.0", + "description": "Ada cdk core", "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { @@ -14,13 +15,13 @@ }, "dependencies": { "@ada/common": "*", - "aws-cdk-lib": "2.88.0", + "aws-cdk-lib": "2.130.0", "constructs": "^10.1.181", "truncate-middle": "^1.0.6" }, "devDependencies": { "@types/truncate-middle": "^1.0.1", - "aws-cdk": "2.88.0", + "aws-cdk": "2.130.0", "aws-sdk": "^2.1358.0", "cross-env": "^7.0.2", "module-alias": "^2.2.2", diff --git a/source/packages/@ada/cdk-core/src/namespace/global-uuid/index.ts b/source/packages/@ada/cdk-core/src/namespace/global-uuid/index.ts index 20f717b..26142ef 100644 --- a/source/packages/@ada/cdk-core/src/namespace/global-uuid/index.ts +++ b/source/packages/@ada/cdk-core/src/namespace/global-uuid/index.ts @@ -7,6 +7,7 @@ import { Construct } from 'constructs'; import { CustomResource, Lazy, Stack } from 'aws-cdk-lib'; import { Data, Properties } from './common'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; +import { Runtime } from 'aws-cdk-lib/aws-lambda' import { getRootStack } from '../../utils'; const UUID = 'NamespaceGlobalUUID'; @@ -103,6 +104,7 @@ export class NamespaceGlobalUUID extends Construct { entry: getHandlerFile(), handler: 'handler', description: 'Cloudformation deployment helper generated unique short uuid', + runtime: Runtime.NODEJS_18_X }); const provider = new cr.Provider(this, 'Provider', { diff --git a/source/packages/@ada/cdk-core/src/retained/index.test.ts b/source/packages/@ada/cdk-core/src/retained/index.test.ts index 385db60..1dc76f6 100644 --- a/source/packages/@ada/cdk-core/src/retained/index.test.ts +++ b/source/packages/@ada/cdk-core/src/retained/index.test.ts @@ -83,7 +83,7 @@ describe('retained', () => { const lambdaFunction = new lambda.Function(stack, 'Lambda', { code: lambda.AssetCode.fromInline('foo'), handler: 'handler', - runtime: lambda.Runtime.NODEJS_16_X, + runtime: lambda.Runtime.NODEJS_18_X, }); aspect.bindLambda(lambdaFunction); diff --git a/source/packages/@ada/common/jest.config.ts b/source/packages/@ada/common/jest.config.ts index 5dc21f8..a28eb69 100644 --- a/source/packages/@ada/common/jest.config.ts +++ b/source/packages/@ada/common/jest.config.ts @@ -1,13 +1,11 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ import * as path from 'path'; -import baseConfig from '../infra/jest.config.base'; // must be imported before any aliases -import type { Config } from '@jest/types'; +import createConfig from '../infra/jest.config.base'; // must be imported before any aliases -export const config: Config.InitialOptions = { - ...baseConfig(), +export const config = createConfig({ displayName: path.basename(__dirname), roots: ['/src'], -}; +}); export default config; diff --git a/source/packages/@ada/common/package.json b/source/packages/@ada/common/package.json index c9c9412..6b08e0d 100644 --- a/source/packages/@ada/common/package.json +++ b/source/packages/@ada/common/package.json @@ -3,9 +3,11 @@ "version": "0.0.0", "private": true, "license": "Apache-2.0", + "description": "Ada common", "main": "dist/index.js", "types": "dist/index.d.ts", "source": "src/index.ts", + "type": "commonjs", "scripts": { "build": "yarn run compile", "compile": "tsc", @@ -16,7 +18,7 @@ "clean": "rm -rf node_modules" }, "dependencies": { - "@aws-sdk/signature-v4": "^3.370.0", + "@aws-sdk/signature-v4": "3.370.0", "mime-types": "^2.1.35" }, "devDependencies": { diff --git a/source/packages/@ada/common/src/api/validation.ts b/source/packages/@ada/common/src/api/validation.ts index 46c7bf1..8a75f51 100644 --- a/source/packages/@ada/common/src/api/validation.ts +++ b/source/packages/@ada/common/src/api/validation.ts @@ -4,7 +4,7 @@ import { JsonSchema } from './json-schema'; export interface JsonSchemaValidation extends Pick {} +> { } export const ID_VALIDATION: JsonSchemaValidation = { pattern: '^[a-z][a-z_0-9]*$', @@ -141,7 +141,7 @@ export const GOOGLE_STORAGE_PATH_VALIDATION: JsonSchemaValidation = { }; // https://regexr.com/6f5bu -export const GA_KV_REGEX = /^(ga:[a-zA-Z0-9]+,?)+$/; +export const GA_KV_REGEX = /^([a-zA-Z0-9]+,?)+$/; export const GA_KV_VALIDATION: JsonSchemaValidation = { pattern: GA_KV_REGEX.source, diff --git a/source/packages/@ada/infra/jest.config.base.ts b/source/packages/@ada/infra/jest.config.base.ts index 655bf34..24ecc0c 100644 --- a/source/packages/@ada/infra/jest.config.base.ts +++ b/source/packages/@ada/infra/jest.config.base.ts @@ -1,32 +1,74 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ -import { jsWithTs } from 'ts-jest/presets'; -import type { Config } from '@jest/types'; -// https://kulshekhar.github.io/ts-jest/docs/getting-started/paths-mapping/ import * as path from 'path'; +import { isArray, isPlainObject, mergeWith } from "lodash"; +import { jsWithTs } from 'ts-jest/presets'; import { pathsToModuleNameMapper } from 'ts-jest/utils'; +import type { Config } from '@jest/types'; +// https://kulshekhar.github.io/ts-jest/docs/getting-started/paths-mapping/ const { compilerOptions } = require('./ts-module-alias'); -export interface BaseConfigProps { - disableCustomSetupScript?: boolean; +export interface BaseConfig extends Config.InitialOptions { } + +export interface BaseConfigOptions { + /** + * Indicates if arrays are recursively merged (concat), or replaced. + * @default true - merged + */ + readonly mergeArrays?: boolean; + /** + * Indicates if plain objects are recursively merged, or replaced. + * @default true - merged + */ + readonly mergeObjects?: boolean; } -export const config = (props?: BaseConfigProps): Config.InitialOptions => ({ - ...jsWithTs, - verbose: true, - maxWorkers: '40%', // keeping this a bit low given multiple dynamodb clients - setupFilesAfterEnv: [ - 'jest-extended', - ...(props?.disableCustomSetupScript ? [] : [path.resolve(__dirname, 'jest.setup.ts')]), - ], - moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths || {}, { prefix: __dirname }), - transformIgnorePatterns: ['.*\\.js$'], - globals: { - 'ts-jest': { - isolatedModules: true, +export const createConfig = (config: Config.InitialOptions, options?: BaseConfigOptions): Config.InitialOptions => { + let displayName = config.displayName || config.rootDir || createConfig.caller?.name; + if (typeof displayName != 'string') displayName = displayName.name; + if (path.isAbsolute(displayName)) displayName = path.basename(displayName); + + delete config.displayName; // drop it from source to override + + const _base = { + ...jsWithTs, + verbose: true, + maxWorkers: '40%', // keeping this a bit low given multiple dynamodb clients + setupFilesAfterEnv: [ + 'jest-extended', + path.resolve(__dirname, 'jest.setup.ts'), + ], + transformIgnorePatterns: ['.*\\.js$'], + // https://jestjs.io/blog/2020/01/21/jest-25#v8-code-coverage + // Requires `NODE_OPTIONS=--no-experimental-fetch` + coverageProvider: "v8", + coverageReporters: [["json", { file: `coverage-${displayName}.json` }]], + coverageDirectory: path.join(__dirname, "coverage", "nested"), + globals: { + 'ts-jest': { + isolatedModules: true, + }, }, - }, -}); + moduleNameMapper: { + ...pathsToModuleNameMapper(compilerOptions.paths || {}, { prefix: __dirname }), + "^axios$": "axios/dist/node/axios.cjs" + }, + displayName, + } + + return mergeWith(_base, config, (objValue, srcValue) => { + if (isArray(objValue)) { + if (options?.mergeArrays === false) { + return srcValue; + } else { + return objValue.concat(srcValue); + } + } + if (options?.mergeObjects === false && isPlainObject(objValue)) { + return srcValue; + } + }) +}; -export default config; +export default createConfig; diff --git a/source/packages/@ada/infra/jest.config.ts b/source/packages/@ada/infra/jest.config.ts index a433c52..2c87228 100644 --- a/source/packages/@ada/infra/jest.config.ts +++ b/source/packages/@ada/infra/jest.config.ts @@ -1,12 +1,39 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ -import baseConfig from './jest.config.base'; -import type { Config } from '@jest/types'; +import createConfig from './jest.config.base'; -export const config: Config.InitialOptions = { - ...baseConfig(), +/** + * Root "infra" jest config is sequence orchestrator for running the nested jest.config.json + * files within the infra/... directory. This config does not run suites itself, but + * rather collects all the nested projects to run and then runs them in sequence. + * + * NOTE: THIS CURRENTLY CAUSES HEAP MEMORY ISSUES (Jest v26, Node >=18) + * - using `v8` coverage provider gets it from about 25% to 90% complete + * - https://jest-archive-august-2023.netlify.app/docs/26.x/configuration#coverageprovider-string + * - This is known issue with Jest, with workaround in v29 via `workerIdleMemoryLimit` + * - https://github.com/jestjs/jest/issues/11956 / https://github.com/jestjs/jest/issues/9980 + * - https://jestjs.io/docs/configuration#workeridlememorylimit-numberstring + * + * Potential improvements have been followed from https://stackoverflow.com/a/76730397: + * 1. [x] Currently implemented with minimal impact (~10%) + * 2. [x][ Attempted but codebase is not compatible with SWC (const enums, namespaces, complex types in static infra) + * 3. [x] Currently implemented with minimal impact (~10%) + * 4. [ ] Not done yet, this is likely best nest step to solve as many `import *...` cases (aws-cdk-lib!) + * 5. [ ] Have not yet investigated if have potential for dep replacement + * 6. [ ] Updating deps is a good next step also + * + * WORKAROUND: Run test for each project as separate project in sequence, and merge coverage results. + * The `test` script is now performing the following instead of call this config. + * 1. Delete /coverage + * 2. Run `yarn test:nested`... which runs all `test:nested:*` scripts in sequence + * - each outputs coverage to /coverage/nested/coverage-{name}.json + * 3. Merge all nested coverage json reports to /coverage/coverage-full.json (yarn test:coverage:merge) + * 5. Generate coverage reports [lcov, clover] (yarn test:coverage:report) + */ +export const config = createConfig({ + displayName: "infra", projects: ['/src/**/jest.config.ts'], testSequencer: '/jest.sequencer.ts', -}; +}); export default config; diff --git a/source/packages/@ada/infra/jest.setup.ts b/source/packages/@ada/infra/jest.setup.ts index 73cef43..6aee83b 100644 --- a/source/packages/@ada/infra/jest.setup.ts +++ b/source/packages/@ada/infra/jest.setup.ts @@ -11,6 +11,11 @@ process.env = { AWS_REGION: TEST_REGION, }; +// Fix mem heap issues - https://stackoverflow.com/a/76730397 +afterAll(() => { + if (global.gc) global.gc() +}) + jest.mock('@aws-cdk/aws-lambda-python-alpha/lib/bundling', () => ({ Bundling: { bundle: () => { diff --git a/source/packages/@ada/infra/package.json b/source/packages/@ada/infra/package.json index 09d2da7..98f1e83 100644 --- a/source/packages/@ada/infra/package.json +++ b/source/packages/@ada/infra/package.json @@ -3,6 +3,7 @@ "version": "0.0.0", "private": true, "license": "Apache-2.0", + "description": "Ada infra", "main": "dist/index.js", "types": "dist/index.d.ts", "source": "src/index.ts", @@ -24,34 +25,44 @@ "scan:image:start-data-product-infra-deployment": "yarn run scan:image start-data-product-infra-deployment src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment", "scan:image": "./scripts/scan-docker-image.sh", "prejest-runner": "if-env-defined SKIP_CDK_OUT_TEST_RIMRAF || rimraf ./cdk.out.test", - "jest-runner": "yarn node --max-old-space-size=16384 --expose-gc $(yarn bin jest) --runInBand", + "jest-runner": "yarn node --max-old-space-size=16384 --no-compilation-cache --no-experimental-fetch --expose-gc $(yarn bin jest) --runInBand --logHeapUsage", + "jest-runner:coverage": "yarn jest-runner --coverage --silent", "test:dev": "yarn jest-runner --no-cache", "test:debug": "node $(yarn bin jest) --no-cache --runInBand", "test:node14": "yarn jest-runner --coverage --silent", - "test": "docker run -v $(pwd)/../../..:/source -w /source -e SOURCE_DIR=$(dirname $(readlink -e $(pwd)/../../../../source)) public.ecr.aws/docker/library/node:14.21-bullseye /source/packages/@ada/infra/scripts/run-infra-tests.sh", + "test:docker": "docker run -v $(pwd)/../../..:/source -w /source -e SOURCE_DIR=$(dirname $(readlink -e $(pwd)/../../../../source)) public.ecr.aws/docker/library/node:14.21-bullseye /source/packages/@ada/infra/scripts/run-infra-tests.sh", "test:changed": "yarn run test --onlyChanged", "test:snapshots": "yarn test:dev stack -t snapshot", "test:snapshots:update": "yarn test:snapshots -u", - "copyfiles": "yarn run copyfiles:nodejs && yarn run copyfiles:python", + "test": "yarn test:nested --coverage --silent", + "test:coverage:clean": "rimraf coverage", + "pretest": "yarn test:coverage:clean", + "posttest": "yarn test:coverage:merge && yarn test:coverage:report", + "test:coverage:merge": "npx istanbul-merge --out coverage/coverage-final.json coverage/nested/*.json", + "test:coverage:report": "run-s test:coverage:report:* --", + "test:coverage:report:lcov": "npx istanbul report --include coverage/coverage-final.json --dir coverage lcov", + "test:coverage:report:clover": "npx istanbul report --include coverage/coverage-final.json --dir coverage clover", + "copyfiles": "yarn run copyfiles:nodejs && yarn run copyfiles:python && yarn run copyfiles:script", "copyfiles:nodejs": "copyfiles --all --follow -u 1 ./src/**/nodejs/** dist", "copyfiles:python": "copyfiles -u 1 -e **/htmlcov/** ./src/services/data-product/script-validation/** ./src/services/data-product/script-validation/handler/* dist", + "copyfiles:script": "cp -R ./src/services/administration/stack/visualisation-deployment dist/services/administration/stack/", "copy:jwtsigner": "yarn run copyversion && yarn run copyfiles:jwtsigner", "copyversion": "ts-node scripts/copy-solution-version.ts", "copyfiles:jwtsigner": "copyfiles -u 3 ./src/common/jwt-signer/index.ts ./src/common/constructs/api/lambda-layer/code/nodejs/api-client-lambda/jwt-signer", "dist:api-client-lambda": "cd dist/common/constructs/api/lambda-layer/code/nodejs && rm -rf node_modules/@ada/api-client-lambda && mv api-client-lambda node_modules/@ada/", - "test:nested": "run-s test:nested:* --", - "test:nested:root": "yarn test:dev --config ./src/jest.config.ts", - "test:nested:connectors": "yarn test:dev --config ./src/connectors/jest.config.ts", - "test:nested:api": "yarn test:dev --config ./src/services/api/jest.config.ts", - "test:nested:administration": "yarn test:dev --config ./src/services/administration/jest.config.ts", - "test:nested:data-product": "yarn test:dev --config ./src/services/data-product/jest.config.ts", - "test:nested:dynamic-infra": "yarn test:dev --config ./src/services/data-product/dynamic-infrastructure/jest.config.ts", - "test:nested:governance": "yarn test:dev --config ./src/services/governance/jest.config.ts", - "test:nested:identity": "yarn test:dev --config ./src/services/identity/jest.config.ts", - "test:nested:notification": "yarn test:dev --config ./src/services/notification/jest.config.ts", - "test:nested:ontology": "yarn test:dev --config ./src/services/ontology/jest.config.ts", - "test:nested:query": "yarn test:dev --config ./src/services/query/jest.config.ts", - "test:nested:query-parse-render": "yarn test:dev --config ./src/services/query-parse-render/jest.config.ts", + "test:nested": "yarn prejest-runner && SKIP_CDK_OUT_TEST_RIMRAF=true run-s test:nested:* --", + "test:nested:root": "yarn jest-runner:coverage --config ./src/jest.config.ts", + "test:nested:connectors": "yarn jest-runner:coverage --config ./src/connectors/jest.config.ts", + "test:nested:api": "yarn jest-runner:coverage --config ./src/services/api/jest.config.ts", + "test:nested:administration": "yarn jest-runner:coverage --config ./src/services/administration/jest.config.ts", + "test:nested:data-product": "yarn jest-runner:coverage --config ./src/services/data-product/jest.config.ts", + "test:nested:dynamic-infra": "yarn jest-runner:coverage --config ./src/services/data-product/dynamic-infrastructure/jest.config.ts", + "test:nested:governance": "yarn jest-runner:coverage --config ./src/services/governance/jest.config.ts", + "test:nested:identity": "yarn jest-runner:coverage --config ./src/services/identity/jest.config.ts", + "test:nested:notification": "yarn jest-runner:coverage --config ./src/services/notification/jest.config.ts", + "test:nested:ontology": "yarn jest-runner:coverage --config ./src/services/ontology/jest.config.ts", + "test:nested:query": "yarn jest-runner:coverage --config ./src/services/query/jest.config.ts", + "test:nested:query-parse-render": "yarn jest-runner:coverage --config ./src/services/query-parse-render/jest.config.ts", "clean": "rm -rf ./dist", "generate:openapi:spec": "ts-node ./src/generator/openapi/generate-spec/task.ts", "dynamodb-local:find": "ps aux | grep -i sharedDb", @@ -67,10 +78,12 @@ "@ada/query-parse-render-lambdas": "*", "@ada/strings": "*", "@ada/transforms": "*", - "@aws-cdk/aws-servicecatalogappregistry-alpha": "2.88.0-alpha.0", - "@aws-sdk/util-arn-parser": "^3.310.0", + "@aws-cdk/aws-servicecatalogappregistry-alpha": "2.130.0-alpha.0", + "@aws-sdk/client-budgets": "3.370.0", + "@aws-sdk/region-config-resolver": "3.468.0", + "@aws-sdk/util-arn-parser": "3.310.0", "await-spawn": "^4.0.2", - "aws-cdk-lib": "2.88.0", + "aws-cdk-lib": "2.130.0", "aws-lambda-router": "0.11.0", "aws-xray-sdk": "^3.3.6", "aws4": "1.11.0", @@ -97,6 +110,7 @@ }, "devDependencies": { "@openapitools/openapi-generator-cli": "^2.4.1", + "@smithy/util-endpoints": "^1.0.7", "@types/bcryptjs": "^2.4.2", "@types/dynamodb-lock-client": "^0.7.1", "@types/isomorphic-fetch": "^0.0.35", @@ -106,9 +120,11 @@ "@types/string-hash": "^1.1.1", "@types/uglify-js": "^3.13.1", "@types/verror": "^1.10.5", - "aws-cdk": "2.88.0", + "aws-cdk": "2.130.0", "aws-sdk": "^2.1358.0", - "cdk-assets": "2.88.0", + "aws-sdk-client-mock": "^3.0.0", + "aws-sdk-client-mock-jest": "^3.0.0", + "cdk-assets": "2.130.0", "cross-env": "^7.0.2", "execa": "^5.1.1", "find-port-free-sync": "^1.0.7", diff --git a/source/packages/@ada/infra/src/common/aspects/app-registry/index.ts b/source/packages/@ada/infra/src/common/aspects/app-registry/index.ts index bfbf276..af1786d 100644 --- a/source/packages/@ada/infra/src/common/aspects/app-registry/index.ts +++ b/source/packages/@ada/infra/src/common/aspects/app-registry/index.ts @@ -32,8 +32,6 @@ export class AppRegistry extends Construct implements cdk.IAspect { this.createAttributeGroup(this.application); this.addTagsforApplication(this.application); - const waiter = this.waitForResourceGroupCreated(this.application); - this.createAppForAppInsights(this.application, waiter); this.application.associateApplicationWithStack(scope); } @@ -109,7 +107,7 @@ export class AppRegistry extends Construct implements cdk.IAspect { handler: 'handler', description: 'Lambda for checking the state of AppRegistry Application Resource Group state', initialPolicy: [lambdaPolicyStatement], - runtime: lambda.Runtime.NODEJS_16_X, + runtime: lambda.Runtime.NODEJS_18_X, }); const provider = new cr.Provider(this, 'Provider', { diff --git a/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/code/nodejs/api-client-lambda/package.json b/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/code/nodejs/api-client-lambda/package.json index 933383d..0e47a31 100644 --- a/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/code/nodejs/api-client-lambda/package.json +++ b/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/code/nodejs/api-client-lambda/package.json @@ -5,6 +5,7 @@ "main": "index.js", "types": "index.d.ts", "license": "Apache-2.0", + "description": "Ada api-client-lambda", "files": [ "index.js", "index.d.ts" diff --git a/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/code/nodejs/package.json b/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/code/nodejs/package.json index c13eb21..764e1d0 100644 --- a/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/code/nodejs/package.json +++ b/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/code/nodejs/package.json @@ -3,6 +3,7 @@ "version": "0.0.0", "private": true, "license": "Apache-2.0", + "description": "Ada api-client-layer", "dependencies": { "isomorphic-fetch": "^3.0.0", "lodash": "^4.17.21", diff --git a/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/layer.ts b/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/layer.ts index cff52b4..898ec44 100644 --- a/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/layer.ts +++ b/source/packages/@ada/infra/src/common/constructs/api/lambda-layer/layer.ts @@ -111,7 +111,7 @@ export class ApiLambdaLayer extends Construct { this.layer = new lambda.LayerVersion(scope, 'Layer', { description: 'Api layer modules - provides @ada/api-client', code: lambda.Code.fromAsset(CODE_DIR), // make sure to zip folder containing "nodejs" directory - compatibleRuntimes: [lambda.Runtime.NODEJS_16_X], + compatibleRuntimes: [lambda.Runtime.NODEJS_18_X], }); this.secret = new DeploymentSecret(scope, 'ApiWafDeploymentSecret', { diff --git a/source/packages/@ada/infra/src/common/constructs/deployment-metrics/index.ts b/source/packages/@ada/infra/src/common/constructs/deployment-metrics/index.ts index c853da8..8c1e796 100644 --- a/source/packages/@ada/infra/src/common/constructs/deployment-metrics/index.ts +++ b/source/packages/@ada/infra/src/common/constructs/deployment-metrics/index.ts @@ -4,6 +4,7 @@ import * as cdk from 'aws-cdk-lib'; import * as cr from 'aws-cdk-lib/custom-resources'; import { Construct } from 'constructs'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; +import { Runtime } from 'aws-cdk-lib/aws-lambda' import { solutionInfo } from '@ada/common'; export interface DeploymentMetricsCollectionProps { @@ -23,6 +24,8 @@ export class DeploymentMetricsCollection extends Construct { entry: require.resolve('./handler'), handler: 'handler', description: 'Lambda for Deployment Metrics collection', + runtime: Runtime.NODEJS_18_X, + timeout: cdk.Duration.seconds(30) }); const provider = new cr.Provider(this, 'Provider', { diff --git a/source/packages/@ada/infra/src/common/constructs/iam/policies.ts b/source/packages/@ada/infra/src/common/constructs/iam/policies.ts index 3a7bf45..0c0173c 100644 --- a/source/packages/@ada/infra/src/common/constructs/iam/policies.ts +++ b/source/packages/@ada/infra/src/common/constructs/iam/policies.ts @@ -64,6 +64,39 @@ export const DynamicInfraDeploymentPermissionsBoundaryPolicyStatement = new Poli resources: ['*'], }); +export const VisualisationSolutionCodeBuildPolicyStatement = new PolicyStatement({ + effect: Effect.ALLOW, + actions: [ + ...dynamicInfrastructureDeploymentActions, + 'ecr:GetAuthorizationToken', + 'ecr:DescribeRepositories', + 'ecr:CreateRepository', + 'ecr:BatchCheckLayerAvailability', + 'ecr:GetDownloadUrlForLayer', + 'ecr:GetRepositoryPolicy', + 'ecr:DescribeRepositories', + 'ecr:ListImages', + 'ecr:DescribeImages', + 'ecr:BatchGetImage', + 'ecr:InitiateLayerUpload', + 'ecr:UploadLayerPart', + 'ecr:CompleteLayerUpload', + 'ecr:PutImage', + 'ec2:*', + 'elasticfilesystem:*', + 'servicediscovery:*', + 'elasticloadbalancing:*', + 'secretsmanager:*', + 'route53:*', + 'cloudformation:DescribeStacks', + 'cloudformation:ExecuteChangeSet', + 'cloudformation:DescribeChangeSet', + 'cloudformation:CreateChangeSet', + 'cloudformation:GetTemplateSummary', + ], + resources: ['*'], +}); + /** * Permission for preview lambda and importing cluster to read data source credentials */ @@ -118,7 +151,7 @@ export const ExternalSourceDataCloudWatchAccessPolicyStatement = new PolicyState resources: ['*'], }); -export const ExternalSourceRedshiftAccessPolicyStatement = new PolicyStatement({ +export const ExternalSourceRedshiftAccessPolicyStatement = new PolicyStatement({ effect: Effect.ALLOW, actions: ['redshift:GetClusterCredentials', 'redshift-serverless:GetCredentials'], resources: ['*'], diff --git a/source/packages/@ada/infra/src/common/constructs/lambda/typescript-function.ts b/source/packages/@ada/infra/src/common/constructs/lambda/typescript-function.ts index 0293089..fb54c93 100644 --- a/source/packages/@ada/infra/src/common/constructs/lambda/typescript-function.ts +++ b/source/packages/@ada/infra/src/common/constructs/lambda/typescript-function.ts @@ -95,7 +95,7 @@ export class TypescriptFunction extends NodejsFunction { handler: props.handlerFunction || 'handler', timeout: props.timeout || Duration.seconds(30), memorySize: props.memorySize || 1024, - runtime: Runtime.NODEJS_16_X, + runtime: Runtime.NODEJS_18_X, environment: props.environment, layers: props.layers, role: props.role, diff --git a/source/packages/@ada/infra/src/common/context/README.md b/source/packages/@ada/infra/src/common/context/README.md index 3599060..73016eb 100644 --- a/source/packages/@ada/infra/src/common/context/README.md +++ b/source/packages/@ada/infra/src/common/context/README.md @@ -1,6 +1,6 @@ # Solution Context -The solution utilizes [CDK Runtime Context](https://docs.aws.amazon.com/cdk/v2/guide/context.html) to configure additional functionaly and override defaults. +The solution utilizes [CDK Runtime Context](https://docs.aws.amazon.com/cdk/v2/guide/context.html) to configure additional functionally and override defaults. ## List of support context properties @@ -44,7 +44,7 @@ Disables `CLOUDFRONT` base WAF WebACLs, which require deployment to `us-east-1` ### `@ada/waf:ipSet` -Provides list of CIDR IP address ranges to apply to WAF WebACLs rules to support restricting access to an explict allow-list. +Provides list of CIDR IP address ranges to apply to WAF WebACLs rules to support restricting access to an explicit allow-list. This accept either partial [IPSet Configuration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-wafv2-ipset.html) which requires `IPAddressVersion` and `Addresses` properties, or ARN values for both CLOUDFRONT and REGIONAL existing IPSets. diff --git a/source/packages/@ada/infra/src/common/services/testing/environment/build-cdk-environment.ts b/source/packages/@ada/infra/src/common/services/testing/environment/build-cdk-environment.ts index 6f319de..edace6f 100644 --- a/source/packages/@ada/infra/src/common/services/testing/environment/build-cdk-environment.ts +++ b/source/packages/@ada/infra/src/common/services/testing/environment/build-cdk-environment.ts @@ -157,7 +157,7 @@ export interface CdkEnvironmentForTests { // eslint-disable-next-line @typescript-eslint/no-unused-vars interface MicroserviceType extends LambdaFunction { - new (scope: Construct, id: string, props: P): T; + new(scope: Construct, id: string, props: P): T; } type TMockableMicroserviceProps

> = Omit< @@ -187,19 +187,19 @@ export const buildCdkEnvironmentForTests = The _interface_ defined here is considered temporary and expected to drastically change in future releases. -> In a future release, the solution will refactor this connector _interface_ to completely decouple connectors and support third-party connector integration in a more pluggable way. To get to this future state, we first need to consolidate, co-locate, and decouple the indvidual connector code/resources from the rest of the solution as much as possible and provide _**an** interface_ to baseline against. +> In a future release, the solution will refactor this connector _interface_ to completely decouple connectors and support third-party connector integration in a more pluggable way. To get to this future state, we first need to consolidate, co-locate, and decouple the individual connector code/resources from the rest of the solution as much as possible and provide _**an** interface_ to baseline against. ### Goals of current interface @@ -62,7 +62,7 @@ Ingress connectors consist of both back-end CDK infrastructure and scripts, and The `Connectors` namespace defines the connector contract (`Connectors.IConnector` interface), handles connector registration (`Connectors.register(...)`) which binds the connector into the solution, and provides common utility functionality to both defining and using connectors. -Connectors must register both their **type** declarations and **implementation** values with the connector interface, and this must be done for both the _core defintion_ (environment agnostic) and _infra_ (CDK specific). The connector interface declares `CONNECTOR_REGISTRY` and `CONNECTOR_INFRA_REGISTRY` _typescript interfaces_ to abstract this process and enable _static typing_ of connectors throughout, which is made possible by [Typescript extending interface](https://www.typescriptlang.org/docs/handbook/interfaces.html#extending-interfaces) feature. +Connectors must register both their **type** declarations and **implementation** values with the connector interface, and this must be done for both the _core definition_ (environment agnostic) and _infra_ (CDK specific). The connector interface declares `CONNECTOR_REGISTRY` and `CONNECTOR_INFRA_REGISTRY` _typescript interfaces_ to abstract this process and enable _static typing_ of connectors throughout, which is made possible by [Typescript extending interface](https://www.typescriptlang.org/docs/handbook/interfaces.html#extending-interfaces) feature. The [connector/interface.ts](./interface.ts) modules declares empty _interfaces_ for both these registration points that each connector must extends to provide static typings and integration. @@ -70,7 +70,7 @@ The [connector/interface.ts](./interface.ts) modules declares empty _interfaces_ Connectors are registered by extending the `CONNECTOR_REGISTRY` interface of the `@ada/connectors/interface` module with `ID => Connectors.IConnector` mapping for the connector and registering the connector via `Connector.register()` method. -Additionally, each connector **MUST** be added to [connectors/sources/index.ts](./sources/index.ts) file to ensure it is automatatically registered at the appropriate time. +Additionally, each connector **MUST** be added to [connectors/sources/index.ts](./sources/index.ts) file to ensure it is automatically registered at the appropriate time. ```ts export const ID = 'MY_CONNECTOR'; @@ -100,7 +100,7 @@ Connectors.register(CONNECTOR); Connector **infra** is registered by extending the `CONNECTOR_INFRA_REGISTRY` interface of the `@ada/connectors/interface` module with `ID => Connectors.IConnectorInfra` mapping for the connector and registering the connector infra via `Connectors.Infra.register()` method which registers both the _static_ and _dynamic_ infrastructure for the connector. -Additionally, each connector **MUST** be added to [connectors/sources/register-infra.ts](./sources/register-infra.ts) file to ensure it is automatatically registered at the appropriate time. +Additionally, each connector **MUST** be added to [connectors/sources/register-infra.ts](./sources/register-infra.ts) file to ensure it is automatically registered at the appropriate time. ```ts // {connector-folder}/infra/register.ts @@ -142,7 +142,7 @@ Connectors.Infra.register(ID, { ### Connector Preview (Python) -Schema preview functionality available during the creation of a data product is handled by a custom docker image lambda that mimicks the glue/spark environment. +Schema preview functionality available during the creation of a data product is handled by a custom docker image lambda that mimics the glue/spark environment. This core functionality for this is located in [schema-preview/docker-image](../services/data-product/components/schema-preview/docker-image). To enable co-location during development of connectors, all \*.py files located in the `@ada/infra/src/connectors` folder are copied under the `handlers` folder of the docker image. To assist with development, the connectors folder contains a `pyproject.toml` file that maps to the docker image directory and support creating a venv using poetry for intellisense support. diff --git a/source/packages/@ada/infra/src/connectors/common/common/docker-image/Dockerfile b/source/packages/@ada/infra/src/connectors/common/common/docker-image/Dockerfile index c43e28b..9a897df 100644 --- a/source/packages/@ada/infra/src/connectors/common/common/docker-image/Dockerfile +++ b/source/packages/@ada/infra/src/connectors/common/common/docker-image/Dockerfile @@ -4,16 +4,24 @@ RUN yum update -y RUN yum install -y --skip-broken \ which \ curl \ - python3 \ - python3-devel \ unzip \ gzip \ zip \ jq \ - tar + tar \ + wget -RUN curl -sSL https://sdk.cloud.google.com | bash -ENV PATH $PATH:/root/google-cloud-sdk/bin +RUN yum groupinstall "Development Tools" -y && yum install gcc bzip2-devel libffi-devel sqlite-devel cmake -y + +# install openssl 1.1.1w +RUN cd /usr/src && wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz && tar xzf openssl-1.1.1w.tar.gz +RUN cd /usr/src/openssl-1.1.1w && ./config --prefix=/usr/local/custom-openssl --openssldir=/etc/ssl && make -j1 depend && make -j8 && make install_sw + +# install python 3.12 +RUN cd /usr/src && wget https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tgz && tar xzf Python-3.12.2.tgz +RUN cd /usr/src/Python-3.12.2 && ./configure -C --with-openssl=/usr/local/custom-openssl --with-openssl-rpath=auto --enable-loadable-sqlite-extensions --enable-optimizations && make -j 8 && make altinstall +RUN ln -s /usr/local/bin/python3.12 /usr/bin/python3 +RUN ln -s /usr/local/bin/pip3.12 /usr/bin/pip3 RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" RUN unzip awscliv2.zip diff --git a/source/packages/@ada/infra/src/connectors/common/common/docker-image/requirements.txt b/source/packages/@ada/infra/src/connectors/common/common/docker-image/requirements.txt index b7b25dd..17e64e4 100644 --- a/source/packages/@ada/infra/src/connectors/common/common/docker-image/requirements.txt +++ b/source/packages/@ada/infra/src/connectors/common/common/docker-image/requirements.txt @@ -1,5 +1,7 @@ -boto3==1.21.36 -botocore==1.24.36 -smart_open[s3]==5.2.1 -pandas==1.3.5 -pyarrow==7.0.0 \ No newline at end of file +boto3==1.34.65 +botocore==1.34.65 +smart_open[s3]==7.0.1 +pandas==2.2.1 +pyarrow==15.0.2 +cryptography==42.0.4 +cmake==3.28.3 \ No newline at end of file diff --git a/source/packages/@ada/infra/src/connectors/jest.config.ts b/source/packages/@ada/infra/src/connectors/jest.config.ts index c515e3c..5d0cc3c 100644 --- a/source/packages/@ada/infra/src/connectors/jest.config.ts +++ b/source/packages/@ada/infra/src/connectors/jest.config.ts @@ -1,12 +1,12 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ -import baseConfig from '../../jest.config.base'; -import type { Config } from '@jest/types'; +/* eslint-disable: sort-imports */ +// must be imported before any aliases +import createConfig from '../../jest.config.base'; +/* eslint-enable: sort-imports */ -export const config: Config.InitialOptions = { - ...baseConfig(), +export const config = createConfig({ rootDir: __dirname, - displayName: 'connectors', -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_cloudtrail/docker-image/requirements.txt b/source/packages/@ada/infra/src/connectors/sources/amazon_cloudtrail/docker-image/requirements.txt index 6777102..cbc9237 100644 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_cloudtrail/docker-image/requirements.txt +++ b/source/packages/@ada/infra/src/connectors/sources/amazon_cloudtrail/docker-image/requirements.txt @@ -1,2 +1,2 @@ -awswrangler==2.17.0 +awswrangler==3.7.1 psutil diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_cloudtrail/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/amazon_cloudtrail/infra/dynamic/__snapshots__/stack.test.ts.snap index ea1a39f..afbe328 100644 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_cloudtrail/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/amazon_cloudtrail/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -306,30 +306,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -494,6 +470,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -570,7 +570,7 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportCloudTrailData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportCloudTrailData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -590,19 +590,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\",\\"updatePolicy\\":\\"APPEND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"CLOUDTRAIL\\",\\"sourceDetails\\":{\\"cloudTrailTrailArn\\":\\"arn:aws:cloudtrail:ap-southeast-2:123456789012:trail/test-cloudtrail\\",\\"cloudTrailEventTypes\\":\\"Data\\",\\"cloudTrailDateFrom\\":\\"#date#\\",\\"cloudTrailDateTo\\":\\"#date#\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\",\\"updatePolicy\\":\\"APPEND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"CLOUDTRAIL\\",\\"sourceDetails\\":{\\"cloudTrailTrailArn\\":\\"arn:aws:cloudtrail:ap-southeast-2:123456789012:trail/test-cloudtrail\\",\\"cloudTrailEventTypes\\":\\"Data\\",\\"cloudTrailDateFrom\\":\\"#date#\\",\\"cloudTrailDateTo\\":\\"#date#\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -614,11 +614,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -626,11 +626,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/docker-image/import.py b/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/docker-image/import.py deleted file mode 100644 index dbcea03..0000000 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/docker-image/import.py +++ /dev/null @@ -1,213 +0,0 @@ -################################################################### -# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -# SPDX-License-Identifier: Apache-2.0 -################################################################### -import os -import uuid -import boto3 -import awswrangler as wr -from datetime import datetime -from dateutil import parser -import pandas as pd - -# These are the Required Environment Variables input into the State -# Machine. Values are input into the CloudWatchImportDataStateMachine -# class as taskEnv object - -QUERY = os.environ.get('QUERY') -CW_LOG_GROUP_NAME = os.environ.get('CW_LOG_GROUP_NAME') -S3_OUTPUT_BUCKET_URI = os.environ.get('S3_OUTPUT_BUCKET_URI') -TRIGGER_TYPE = os.environ.get("TRIGGER_TYPE") -SCHEDULE_RATE = os.environ.get("SCHEDULE_RATE") -SINCE = os.environ.get('SINCE') -UNTIL = os.environ.get("UNTIL") -TABLE_NAME = os.environ.get("TABLE_NAME") -DOMAIN_ID = os.environ.get("DOMAIN_ID") -DATA_PRODUCT_ID = os.environ.get("DATA_PRODUCT_ID") -CROSS_ACCOUNT_ACCESS_ROLE = os.environ.get("CROSS_ACCOUNT_ACCESS_ROLE") - -class DateRangeException(Exception): - pass -class MissingParameterException(Exception): - pass - - -class CloudWatchImport(): - - def __init__(self, - cw_log_name: str, - query: str, - since: str, - until: str, - s3_output_uri: str, - table_name: str, - data_product_id: str, - domain_id: str, - trigger_type: str, - cross_account_access_role: str) -> None: - - if cw_log_name is None: - raise MissingParameterException("CloudWatch ARN is missing") - if query is None: - raise MissingParameterException("CloudWatch log Query is missing") - if s3_output_uri is None: - raise MissingParameterException("S3 Bucket URI is missing") - if table_name is None: - raise MissingParameterException("Last Updated Detail Table Name is missing") - if data_product_id is None: - raise MissingParameterException("Data Product ID is missing") - if domain_id is None: - raise MissingParameterException("Domain Id is missing") - if trigger_type is None: - raise MissingParameterException("Trigger Type is missing") - - try: - self._since = parser.parse(since) - except (TypeError, parser.ParserError) as _: - raise DateRangeException("Since date must be provided") - - try: - self._until = parser.parse(until) - self._range_filename = "cloudwatch_range_dataset.parquet" - except (TypeError, parser.ParserError) as _: - self._until = None - self._range_filename = f'{str(uuid.uuid4())}.parquet' - - if cross_account_access_role != '' and cross_account_access_role is not None: - self._sts_client = boto3.client('sts') - self._cross_account_access_role = cross_account_access_role - else: - self._sts_client = None - - self._cw_log_name = cw_log_name - self._query = query - self._s3_output_uri = s3_output_uri - self._ddb_client = boto3.client('dynamodb') - self._table_name = table_name - self._data_product_id = data_product_id - self._domain_id = domain_id - self._trigger_type = trigger_type - self._num_rows_returned = 0 - - def execute(self): - if self._trigger_type == "ON_DEMAND" and self._until is not None: - # if both since and until are set - if self._since > self._until: - raise DateRangeException("Start date cannot be greater than end date") - - wr.s3.delete_objects(f"{self._s3_output_uri}/{self._range_filename}") - self._import_data(self._since, self._until) - else: - # for ON_DEMAND without a specified end date and SCHEDULE - last_ts = self._get_last_updated_timestamp() - if last_ts is None: - self._import_data(self._since, datetime.now()) - else: - try: - self._import_data(parser.parse(last_ts), datetime.now()) - except (TypeError, parser.ParserError) as _: - raise DateRangeException("Last Updated Timestamp error") - - def _import_data(self, since, until) -> None: - self._get_and_write_logs(since, until) - self._update_last_updated_timestamp(until.strftime("%m/%d/%Y, %H:%M")) - - def _get_and_write_logs(self, since, until) -> None: - logs_df = self._get_logs(since, until) - self._num_rows_returned = logs_df.shape[0] - - if self._num_rows_returned == 0: - print("No data to update") - else: - print("Writing cloudwatch logs to s3") - self._write_logs(logs_df) - - def _get_logs(self, since: datetime, until: datetime) -> pd.DataFrame: - print(f"Conducting data import of {since} -> {until}") - - if self._sts_client is not None: - print("Reading Cloudwatch logs from cross account") - df = wr.cloudwatch.read_logs( - log_group_names=[self._cw_log_name], - query=self._query, - start_time=since, - end_time=until, - boto3_session=self._assume_pull_data_sample_role_session(self._cross_account_access_role) - ) - else: - df = wr.cloudwatch.read_logs( - log_group_names=[self._cw_log_name], - query=self._query, - start_time=since, - end_time=until, - ) - # remove nonmeaningful ptr column returned - df = df.drop(['ptr'], axis=1, errors='ignore') - return df - - def _write_logs(self, logs: pd.DataFrame) -> None: - print(f'{self._s3_output_uri}/{self._range_filename}') - result = wr.s3.to_parquet( - df=logs, - path=f'{self._s3_output_uri}/{self._range_filename}', - ) - print(result) - - def _get_last_updated_timestamp(self) -> str or None: - print("Retrieving last updated timestamp") - response = self._ddb_client.get_item( - TableName=self._table_name, - Key={ - 'dataProductId': {'S': self._data_product_id}, - 'domainId': {'S': self._domain_id}, - } - ) - if 'Item'in response: - print("Last update timestamp exists") - return response['Item']['timestamp']['S'] - else: - print("Last update timestamp does not exists") - return None - - def _update_last_updated_timestamp(self, timestamp) -> None: - print(f"Updating last update timestamp with: {timestamp}") - self._ddb_client.put_item( - TableName=self._table_name, - Item={ - 'dataProductId': {'S': self._data_product_id}, - 'domainId': {'S': self._domain_id}, - 'timestamp': {'S': timestamp}, - 'num_rows': {'S': str(self._num_rows_returned)}, - } - ) - - def _assume_pull_data_sample_role_session(self, role_arn: str): - assumed_role = self._sts_client.assume_role( - RoleArn=role_arn, - RoleSessionName="ada-cloudwatch-import", - Tags=[ - {'Key': 'ada:service', 'Value': 'data-product'} - ] - ) - credentials = assumed_role['Credentials'] - return boto3.session.Session( - aws_access_key_id=credentials['AccessKeyId'], - aws_secret_access_key=credentials['SecretAccessKey'], - aws_session_token=credentials['SessionToken'], - ) - - -cwi = CloudWatchImport(CW_LOG_GROUP_NAME, - QUERY, - SINCE, - UNTIL, - S3_OUTPUT_BUCKET_URI, - TABLE_NAME, - DATA_PRODUCT_ID, - DOMAIN_ID, - TRIGGER_TYPE, - CROSS_ACCOUNT_ACCESS_ROLE) - -print("Executing CloudWatchImport") -cwi.execute() - \ No newline at end of file diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/docker-image/requirements.txt b/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/docker-image/requirements.txt index 129621d..24c972e 100644 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/docker-image/requirements.txt +++ b/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/docker-image/requirements.txt @@ -1 +1 @@ -awswrangler==2.17.0 +awswrangler==3.7.1 diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/infra/dynamic/__snapshots__/stack.test.ts.snap index 3ad7df9..6ba51fe 100644 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/amazon_cloudwatch/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -306,30 +306,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -494,6 +470,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -570,7 +570,7 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportCloudWatchData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportCloudWatchData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -590,19 +590,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\",\\"updatePolicy\\":\\"APPEND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"CLOUDWATCH\\",\\"sourceDetails\\":{\\"cloudwatchLogGroupArn\\":\\"arn:aws:logs:ap-southeast-1:123456789012:log-group:/myloggroup\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\",\\"updatePolicy\\":\\"APPEND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"CLOUDWATCH\\",\\"sourceDetails\\":{\\"cloudwatchLogGroupArn\\":\\"arn:aws:logs:ap-southeast-1:123456789012:log-group:/myloggroup\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -614,11 +614,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -626,11 +626,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_dynamodb/docker-image/requirements.txt b/source/packages/@ada/infra/src/connectors/sources/amazon_dynamodb/docker-image/requirements.txt index 129621d..24c972e 100644 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_dynamodb/docker-image/requirements.txt +++ b/source/packages/@ada/infra/src/connectors/sources/amazon_dynamodb/docker-image/requirements.txt @@ -1 +1 @@ -awswrangler==2.17.0 +awswrangler==3.7.1 diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_dynamodb/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/amazon_dynamodb/infra/dynamic/__snapshots__/stack.test.ts.snap index c30f945..a5807c1 100644 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_dynamodb/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/amazon_dynamodb/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -305,30 +305,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -493,6 +469,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -569,7 +569,7 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportDynamoDBData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportDynamoDBData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -589,19 +589,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"DYNAMODB\\",\\"sourceDetails\\":{\\"dynamoDbTableArn\\":\\"arn:aws:dynamodb:us-west-2:11111111111:table/1-test-data\\",\\"crossAccountRoleArn\\":\\"arn:aws:iam::11111111111:role/DynamoDB-FullAccess-For-Account\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"DYNAMODB\\",\\"sourceDetails\\":{\\"dynamoDbTableArn\\":\\"arn:aws:dynamodb:us-west-2:11111111111:table/1-test-data\\",\\"crossAccountRoleArn\\":\\"arn:aws:iam::11111111111:role/DynamoDB-FullAccess-For-Account\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -613,11 +613,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -625,11 +625,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_kinesis/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/amazon_kinesis/infra/dynamic/__snapshots__/stack.test.ts.snap index f9d5e96..571369b 100644 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_kinesis/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/amazon_kinesis/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -534,30 +534,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -682,6 +658,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -770,19 +770,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\",\\"updatePolicy\\":\\"APPEND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"KINESIS\\",\\"sourceDetails\\":{\\"kinesisStreamArn\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\",\\"updatePolicy\\":\\"APPEND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"KINESIS\\",\\"sourceDetails\\":{\\"kinesisStreamArn\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -794,11 +794,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -806,11 +806,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_redshift/docker-image/requirements.txt b/source/packages/@ada/infra/src/connectors/sources/amazon_redshift/docker-image/requirements.txt index 058cf46..5e490c9 100644 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_redshift/docker-image/requirements.txt +++ b/source/packages/@ada/infra/src/connectors/sources/amazon_redshift/docker-image/requirements.txt @@ -1,2 +1,2 @@ -awswrangler==2.17.0 -redshift_connector==2.0.905 +awswrangler==3.7.1 +redshift_connector==2.1.0 diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_redshift/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/amazon_redshift/infra/dynamic/__snapshots__/stack.test.ts.snap index 1921c84..8177431 100644 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_redshift/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/amazon_redshift/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -305,30 +305,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -493,6 +469,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -569,7 +569,7 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportRedshiftData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportRedshiftData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -589,19 +589,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"REDSHIFT\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"default.123456789012.us-east-1.redshift-serverless.amazonaws.com\\",\\"databasePort\\":\\"5439\\",\\"databaseName\\":\\"dev\\",\\"databaseTable\\":\\"test_data\\",\\"databaseType\\":\\"Serverless\\",\\"workgroup\\":\\"default\\",\\"databaseUsername\\":\\"\\",\\"clusterIdentifier\\":\\"\\",\\"crossAccountRoleArn\\":\\"arn:aws:iam::11111111111:role/Redshift-Access-Role\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"REDSHIFT\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"default.123456789012.us-east-1.redshift-serverless.amazonaws.com\\",\\"databasePort\\":\\"5439\\",\\"databaseName\\":\\"dev\\",\\"databaseTable\\":\\"test_data\\",\\"databaseType\\":\\"Serverless\\",\\"workgroup\\":\\"default\\",\\"databaseUsername\\":\\"\\",\\"clusterIdentifier\\":\\"\\",\\"crossAccountRoleArn\\":\\"arn:aws:iam::11111111111:role/Redshift-Access-Role\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -613,11 +613,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -625,11 +625,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/amazon_s3/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/amazon_s3/infra/dynamic/__snapshots__/stack.test.ts.snap index 9dc24b9..faddeab 100644 --- a/source/packages/@ada/infra/src/connectors/sources/amazon_s3/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/amazon_s3/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -403,30 +403,6 @@ Object { }, ], }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "states:StartExecution", "Effect": "Allow", @@ -551,6 +527,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -656,19 +656,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"},{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\",\\"glueJobName\\":\\"test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-1--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-1-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\"}],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"S3\\",\\"sourceDetails\\":{\\"bucket\\":\\"test-bucket\\",\\"key\\":\\"test-key\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"},{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\",\\"glueJobName\\":\\"test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-1--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-1-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\"}],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"S3\\",\\"sourceDetails\\":{\\"bucket\\":\\"test-bucket\\",\\"key\\":\\"test-key\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -680,11 +680,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -692,11 +692,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/Dockerfile b/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/Dockerfile index 35f2ab4..a128807 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/Dockerfile +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/Dockerfile @@ -1,5 +1,8 @@ FROM ada:data-import-base-image +RUN curl -sSL https://sdk.cloud.google.com | bash > /dev/null +ENV PATH $PATH:/root/google-cloud-sdk/bin + COPY requirements.txt requirements.txt RUN pip3 install -r requirements.txt COPY . . diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/google_analytics.py b/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/google_analytics.py deleted file mode 100644 index cca39a4..0000000 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/google_analytics.py +++ /dev/null @@ -1,94 +0,0 @@ -################################################################### -# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -# SPDX-License-Identifier: Apache-2.0 -################################################################### -import time -import os -from collections import namedtuple -from apiclient.discovery import build -from oauth2client.service_account import ServiceAccountCredentials - -class GoogleAnalytics(): - ga_service = namedtuple('gaService', ['name', 'version', 'scopes']) - _services = { - 'reporting': ga_service(name='analyticsreporting', - version='v4', - scopes=['https://www.googleapis.com/auth/analytics.readonly']), - 'management': ga_service(name='analytics', - version='v3', - scopes=['https://www.googleapis.com/auth/analytics']) - } - - def __init__(self, key_file=None): - self.file_location = key_file if key_file else os.environ.get("GOOGLE_APPLICATION_CREDENTIALS") - - def get_service_object(self, name): - service = GoogleAnalytics._services[name] - credentials = ServiceAccountCredentials.from_json_keyfile_name(self.file_location, - service.scopes) - return build(service.name, service.version, credentials=credentials) - - def get_management_report(self, - view_id, - since, - until, - metrics, - dimensions): - - analytics = self.get_service_object(name='management') - - return analytics.data().ga().get( - ids=view_id, - start_date=since, - end_date=until, - metrics=metrics, - dimensions=dimensions).execute() - - def get_analytics_report(self, - view_id, - since, - until, - sampling_level, - dimensions, - metrics, - page_size, - include_empty_rows): - - analytics = self.get_service_object(name='reporting') - - #https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet - - report_request = { - 'viewId': view_id, - 'dateRanges': [{'startDate': since, 'endDate': until}], - 'samplingLevel': sampling_level or 'LARGE', - 'dimensions': dimensions, - 'metrics': metrics, - 'pageSize': page_size or 10000, - 'includeEmptyRows': include_empty_rows or False - } - - response = (analytics - .reports() - .batchGet(body={'reportRequests': [report_request]}) - .execute()) - - if response.get('reports'): - report = response['reports'][0] - rows = report.get('data', {}).get('rows', []) - - while report.get('nextPageToken'): - time.sleep(1) - report_request.update({'pageToken': report['nextPageToken']}) - response = (analytics - .reports() - .batchGet(body={'reportRequests': [report_request]}) - .execute()) - report = response['reports'][0] - rows.extend(report.get('data', {}).get('rows', [])) - - if report['data']: - report['data']['rows'] = rows - return report - else: - return {} \ No newline at end of file diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/import.py b/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/import.py index 3fc2882..af9cdf1 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/import.py +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/import.py @@ -7,7 +7,14 @@ from datetime import datetime from dateutil import parser from dateutil.relativedelta import relativedelta -from google_analytics import GoogleAnalytics +from google.analytics.data_v1beta import BetaAnalyticsDataClient +from google.analytics.data_v1beta.types import ( + DateRange, + Dimension, + Metric, + MetricType, + RunReportRequest, +) import pandas as pd import smart_open import tempfile @@ -21,21 +28,21 @@ VARCHAR_255 = 'varchar(255)' DECIMAL_20_5 = 'decimal(20,5)' -VIEW_ID = os.environ.get('VIEW_ID') +PROPERTY_ID = os.environ.get('PROPERTY_ID') SINCE = os.environ.get('SINCE') UNTIL = os.environ.get("UNTIL") DIMENSIONS = os.environ.get('DIMENSIONS') METRICS = os.environ.get('METRICS') PAGE_SIZE = os.environ.get('PAGE_SIZE') -SAMPLING_LEVEL = os.environ.get('SAMPLING_LEVEL') INCLUDE_EMPTY_ROWS = os.environ.get('INCLUDE_EMPTY_ROWS') S3_OUTPUT_BUCKET_URI = os.environ.get('S3_OUTPUT_BUCKET_URI') -MAX_REQUEST_SIZE = 100000 +MAX_REQUEST_SIZE = 250000 +DEFAULT_REQUEST_SIZE = 10000 TRIGGER_TYPE = os.environ.get("TRIGGER_TYPE") SCHEDULE_RATE = os.environ.get("SCHEDULE_RATE") -if VIEW_ID is None: - raise Exception("ga::missing view id") +if PROPERTY_ID is None: + raise Exception("ga::missing property id") if DIMENSIONS is None: raise Exception("ga::missing dimensions") @@ -59,20 +66,22 @@ class UnsupportedDataFormatException(Exception): class GoogleAnalyticsImport(): """ required parameters: - :param view_id: The view id for associated report. - :type view_id: string/array - :param dimensions: comma separated GA dimensions, e.g. ga:year,ga:month,ga:day - or array, e.g. [{name:"ga:year"},{name:"ga:month"}] - :type dimensions: string/array - :param metrics comma separated GA dimensions, e.g. ga:users,ga:visitors - or array e.g. [{expression:"ga:users"},{expression:"ga:visitors"}] - :type metrics: string/array + :param property_id: The property id. + :type property_id: string + + :param dimensions: comma separated GA dimensions, e.g. year,month,day + :type dimensions: string + + :param metrics comma separated GA dimensions, e.g. engagedSessions,totalUsers + :type metrics: string + :param since: The date up from which to pull GA data. This can either be a string in the format of '%Y-%m-%d %H:%M:%S' or ISO format '%Y-%m-%dT%H:%M:%SZ' but in either case it will be passed to GA as '%Y-%m-%d'. :type since: string + :param until: The date up to which to pull GA data. This can either be a string in the format of '%Y-%m-%d %H:%M:%S' or or ISO format '%Y-%m-%dT%H:%M:%SZ' @@ -82,42 +91,26 @@ class GoogleAnalyticsImport(): """ def __init__(self, - view_id, + property_id, since, until, dimensions, metrics, - page_size=10000, - include_empty_rows=True, - sampling_level=None): - self.view_id = view_id + page_size=DEFAULT_REQUEST_SIZE, + include_empty_rows=True): + self.property_id = property_id self.since = since self.until = until - self.sampling_level = sampling_level or 'LARGE' self.dimensions = self.get_dimensions(dimensions) self.metrics = self.get_metrics(metrics) - self.page_size = page_size or 10000 + self.page_size = min(int(page_size or DEFAULT_REQUEST_SIZE), MAX_REQUEST_SIZE) self.include_empty_rows = include_empty_rows - self.metric_map = { - 'METRIC_TYPE_UNSPECIFIED': VARCHAR_255, - 'CURRENCY': DECIMAL_20_5, - 'INTEGER': 'int(11)', - 'FLOAT': DECIMAL_20_5, - 'PERCENT': DECIMAL_20_5, - 'TIME': 'time' - } - - if self.page_size > MAX_REQUEST_SIZE: - self.page_size = MAX_REQUEST_SIZE def execute(self): + # get formattted data range date_range = self.get_data_range() - if date_range is None: return - - ga_conn = GoogleAnalytics() - try: since_formatted = date_range[0].strftime('%Y-%m-%d') except Exception as _: @@ -127,46 +120,57 @@ def execute(self): until_formatted = date_range[1].strftime('%Y-%m-%d') except Exception as _: until_formatted = str(self.until) - print("Start date: ", since_formatted, ", End date: ", until_formatted) - report = ga_conn.get_analytics_report(self.view_id, - since_formatted, - until_formatted, - self.sampling_level, - self.dimensions, - self.metrics, - self.page_size, - self.include_empty_rows) + ga_client = BetaAnalyticsDataClient() - column_header = report.get('columnHeader', {}) - # Right now all dimensions are hardcoded to varchar(255), will need a map if any non-varchar dimensions are used in the future - # Unfortunately the API does not send back types for Dimensions like it does for Metrics (yet..) - dimension_headers = [ - {'name': header.replace('ga:', ''), 'type': VARCHAR_255} - for header - in column_header.get('dimensions', []) - ] - metric_headers = [ - {'name': entry.get('name').replace('ga:', ''), - 'type': self.metric_map.get(entry.get('type'), VARCHAR_255)} - for entry - in column_header.get('metricHeader', {}).get('metricHeaderEntries', []) - ] - report_data = report.get('data', {}); - # might use this for antisampling - has_sampling = report_data.get('samplesReadCounts', None) - print('Has data been sampled by google: ', has_sampling != None) + # pagination offset + offset = 0 - total_row_count = report_data.get('rowCount', 0) - + # first the initial request + response = ga_client.run_report(self.get_request(since_formatted, until_formatted, offset)) + + # dimension headers are lower case all the time + dimension_headers = [ dim.name.lower() for dim in response.dimension_headers ] + print("Response Dimension Headers") + print (dimension_headers) + + # metric headers are lower case all the time + metric_headers = [ metric.name.lower() for metric in response.metric_headers] + print("Response Metric headers") + print(metric_headers) + + total_row_count = response.row_count if total_row_count <= 0: raise Exception("Nothing to import, throw exception to avoid crawler") - rows = report_data.get('rows', []) - filename = str(uuid.uuid4()) + # getting all rows + normalized_rows = [] + # processing current page + while (offset < total_row_count): + rows = response.rows + for row in rows: + row_data = dict() + # retrieve dimensions + for index, dimension_value in enumerate(row.dimension_values): + row_data[dimension_headers[index]] = dimension_value.value + # retrieve metrics + for index, metric_value in enumerate(row.metric_values): + row_data[metric_headers[index]] = metric_value.value + # add common columns + row_data['propertyid'] = self.property_id + row_data['timestamp'] = until_formatted + normalized_rows.append(row_data) + print(offset, len(rows)) + # getting next page + offset += len(rows) + if offset < total_row_count: + response = ga_client.run_report(self.get_requset(since_formatted, until_formatted, offset)) + + # there are data to process, so open output file + filename = str(uuid.uuid4()) with (tempfile.NamedTemporaryFile()) as tmp: if (tmp is not None): part_size = 1 * GB @@ -186,33 +190,10 @@ def execute(self): transport_params={ 'min_part_size': part_size, 'writebuffer': tmp} ) as fout: - #dataframe.to_parquet(fout, engine='pyarrow', index=True) - normalize_rows = [] - - for row_counter, row in enumerate(rows): - root_data_obj = {} - dimensions = row.get('dimensions', []) - metrics = row.get('metrics', []) - - for index, dimension in enumerate(dimensions): - header = dimension_headers[index].get( - 'name').lower() - root_data_obj[header] = dimension - - for metric in metrics: - data = {} - data.update(root_data_obj) - - for index, value in enumerate(metric.get('values', [])): - header = metric_headers[index].get( - 'name').lower() - data[header] = value - data['viewid'] = self.view_id - data['timestamp'] = until_formatted - normalize_rows.append(data) - df = pd.DataFrame(normalize_rows) + # write all rows to file + df = pd.DataFrame(normalized_rows) df.to_parquet(fout, engine='pyarrow', index=False) - print("Import completed. ", total_row_count, " row(s) imported") + print("Import completed. ", len(normalized_rows), " row(s) imported") """ @@ -276,21 +257,25 @@ def get_data_range(self): # handle string inputs for metrics and dimensions def get_dimensions(self, dimensions): if type(dimensions) is str: - results = [] - for dimension in dimensions.split(","): - results.append({"name": dimension}) - return results + return [Dimension(name=dim) for dim in dimensions.split(",")] return dimensions def get_metrics(self, metrics): if type(metrics) is str: - results = [] - for metric in metrics.split(","): - results.append({"expression": metric}) - return results + return [Metric(name=metric) for metric in metrics.split(",")] return metrics + def get_request(self, since_formatted, until_formatted, offset): + return RunReportRequest( + property=f"properties/{self.property_id}", + dimensions=self.dimensions, + metrics=self.metrics, + date_ranges=[DateRange(start_date=since_formatted, end_date=until_formatted)], + keep_empty_rows = self.include_empty_rows, + limit = self.page_size, + offset = offset + ) con = GoogleAnalyticsImport( - VIEW_ID, SINCE, UNTIL, DIMENSIONS, METRICS, PAGE_SIZE, False, SAMPLING_LEVEL) + PROPERTY_ID, SINCE, UNTIL, DIMENSIONS, METRICS, PAGE_SIZE, False) con.execute() diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/requirements.txt b/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/requirements.txt index c21bfc1..3089969 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/requirements.txt +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/docker-image/requirements.txt @@ -1,3 +1,6 @@ -google-api-core==1.2.1 +google-api-core==2.17.1 google-api-python-client==1.7.3 oauth2client==4.1.2 +google-analytics-data==0.18.7 +grpcio==1.62.1 + diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/index.ts b/source/packages/@ada/infra/src/connectors/sources/google_analytics/index.ts index 5ecc40b..ecf76ed 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/index.ts +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/index.ts @@ -21,7 +21,7 @@ export const ID = 'GOOGLE_ANALYTICS' as const; * @required */ export interface ISourceDetails__GOOGLE_ANALYTICS extends IGoogleServiceAccountAuth { - viewId: string; + propertyId: string; dimensions: string; metrics: string; since?: string; @@ -41,6 +41,8 @@ export type IFormData__GOOGLE_ANALYTICS = Connectors.IFormData< } >; +const PROPERTY_ID = "Property Id" + export const CONNECTOR: Connectors.IConnector = { ID, FOLDER: 'google_analytics', @@ -96,9 +98,9 @@ export const CONNECTOR: Connectors.IConnector { return { ...googleAuthFormDataToInputData({ sourceDetails, updateTrigger }), - viewId: sourceDetails.viewId, + propertyId: sourceDetails.propertyId, dimensions: sourceDetails.dimensions.map((d: { value: string }) => d.value).join(','), metrics: sourceDetails.metrics.map((m: { value: string }) => m.value).join(','), ...(updateTrigger.triggerType === DataProductUpdateTriggerType.ON_DEMAND ? { - // convert the data format from iso to yyyy-MM-DD based on local date as ga does not take time stamps - // en-ca formats the data as yyyy-MM-DD - // scheduled import does not support start and end date form - since: new Date(sourceDetails.since!).toLocaleDateString('en-CA'), - until: new Date(sourceDetails.until!).toLocaleDateString('en-CA'), - } + // convert the data format from iso to yyyy-MM-DD based on local date as ga does not take time stamps + // en-ca formats the data as yyyy-MM-DD + // scheduled import does not support start and end date form + since: new Date(sourceDetails.since!).toLocaleDateString('en-CA'), + until: new Date(sourceDetails.until!).toLocaleDateString('en-CA'), + } : {}), }; }, @@ -236,7 +238,7 @@ export const CONNECTOR: Connectors.IConnector (value || '').split(',') }, { key: 'metrics', label: 'Metrics', valueRenderer: (value: string) => (value || '').split(',') }, { key: 'since', label: 'Since' }, diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/__snapshots__/stack.test.ts.snap index 272e0ae..9b73c0e 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -305,30 +305,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -477,6 +453,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -553,15 +553,15 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportAnalyticsData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportAnalyticsData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"crawlerName\\":\\"test-d4688test-d45928737-gcp-analytics--crawler\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-gcp-analytics-\\",\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/gcp-analytics-import\\",\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_ANALYTICS\\",\\"sourceDetails\\":{\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"projectId\\":\\"mock-project-id\\",\\"viewId\\":\\"mock-view-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}}}}}},\\"ImportAnalyticsData\\":{\\"Next\\":\\"VerifyImportStatus\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.ImportOutput\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"crawlerName\\":\\"test-d4688test-d45928737-gcp-analytics--crawler\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-gcp-analytics-\\",\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/gcp-analytics-import\\",\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_ANALYTICS\\",\\"sourceDetails\\":{\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"projectId\\":\\"mock-project-id\\",\\"propertyId\\":\\"mock-property-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}}}}}},\\"ImportAnalyticsData\\":{\\"Next\\":\\"VerifyImportStatus\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.ImportOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input\\":{\\"clientId\\":\\"mock-client-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\",\\"projectId\\":\\"mock-project-id\\",\\"viewId\\":\\"mock-view-id\\",\\"since\\":\\"\\",\\"until\\":\\"\\",\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"triggerType\\":\\"ON_DEMAND\\",\\"scheduleRate\\":\\"\\",\\"s3OutputPath.$\\":\\"$.Payload.outputS3Path\\"},\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachineImport\\"}},\\"VerifyImportStatus\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.ImportOutput.Output.status\\",\\"StringEquals\\":\\"SUCCEEDED\\"},\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"ExecuteCrawlertest-d4688test-d45928737-gcp-analytics--crawler\\"},\\"ExecuteCrawlertest-d4688test-d45928737-gcp-analytics--crawler\\":{\\"Next\\":\\"VerifyCrawlerStepFunctionOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.CrawlerOutput\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input\\":{\\"clientId\\":\\"mock-client-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\",\\"projectId\\":\\"mock-project-id\\",\\"propertyId\\":\\"mock-property-id\\",\\"since\\":\\"\\",\\"until\\":\\"\\",\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"triggerType\\":\\"ON_DEMAND\\",\\"scheduleRate\\":\\"\\",\\"s3OutputPath.$\\":\\"$.Payload.outputS3Path\\"},\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachineImport\\"}},\\"VerifyImportStatus\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.ImportOutput.Output.status\\",\\"StringEquals\\":\\"SUCCEEDED\\"},\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"ExecuteCrawlertest-d4688test-d45928737-gcp-analytics--crawler\\"},\\"ExecuteCrawlertest-d4688test-d45928737-gcp-analytics--crawler\\":{\\"Next\\":\\"VerifyCrawlerStepFunctionOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.CrawlerOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -569,23 +569,23 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_ANALYTICS\\",\\"sourceDetails\\":{\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"projectId\\":\\"mock-project-id\\",\\"viewId\\":\\"mock-view-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_ANALYTICS\\",\\"sourceDetails\\":{\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"projectId\\":\\"mock-project-id\\",\\"propertyId\\":\\"mock-property-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.currentTransformJob.outputCrawlerTablePrefix\\",\\"transformJobs.$\\":\\"$.Payload.transformJobs\\",\\"transformJobIndex.$\\":\\"$.Payload.transformJobIndex\\",\\"transformJobCount.$\\":\\"$.Payload.transformJobCount\\",\\"currentTransformJob.$\\":\\"$.Payload.currentTransformJob\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_ANALYTICS\\",\\"sourceDetails\\":{\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"projectId\\":\\"mock-project-id\\",\\"viewId\\":\\"mock-view-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}}}}}},\\"CrawlTransformOutput\\":{\\"Next\\":\\"GetCrawledTransformOutputTableDetails\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformCrawlOutput\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.currentTransformJob.outputCrawlerTablePrefix\\",\\"transformJobs.$\\":\\"$.Payload.transformJobs\\",\\"transformJobIndex.$\\":\\"$.Payload.transformJobIndex\\",\\"transformJobCount.$\\":\\"$.Payload.transformJobCount\\",\\"currentTransformJob.$\\":\\"$.Payload.currentTransformJob\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_ANALYTICS\\",\\"sourceDetails\\":{\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"projectId\\":\\"mock-project-id\\",\\"propertyId\\":\\"mock-property-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}}}}}},\\"CrawlTransformOutput\\":{\\"Next\\":\\"GetCrawledTransformOutputTableDetails\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformCrawlOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -593,27 +593,27 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::events:putEvents\\",\\"Parameters\\":{\\"Entries\\":[{\\"Detail\\":{\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_ANALYTICS\\",\\"sourceDetails\\":{\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"projectId\\":\\"mock-project-id\\",\\"viewId\\":\\"mock-view-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}},\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"dataProductCompositeIdentifier\\":\\"test-domain.test-data-product\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"viewId\\":\\"mock-view-id\\"},\\"DetailType\\":\\"DataProductImportSuccess\\",\\"EventBusName\\":\\"arn:", + ":states:::events:putEvents\\",\\"Parameters\\":{\\"Entries\\":[{\\"Detail\\":{\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_ANALYTICS\\",\\"sourceDetails\\":{\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"projectId\\":\\"mock-project-id\\",\\"propertyId\\":\\"mock-property-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}},\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"dataProductCompositeIdentifier\\":\\"test-domain.test-data-product\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"propertyId\\":\\"mock-property-id\\"},\\"DetailType\\":\\"DataProductImportSuccess\\",\\"EventBusName\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::events:putEvents\\",\\"Parameters\\":{\\"Entries\\":[{\\"Detail\\":{\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_ANALYTICS\\",\\"sourceDetails\\":{\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"projectId\\":\\"mock-project-id\\",\\"viewId\\":\\"mock-view-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}},\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"executionId.$\\":\\"$$.Execution.Id\\",\\"errorDetails.$\\":\\"$.ErrorDetails\\",\\"currentPayload.$\\":\\"$\\",\\"viewId\\":\\"mock-view-id\\"},\\"DetailType\\":\\"DataProductImportError\\",\\"EventBusName\\":\\"arn:", + ":states:::events:putEvents\\",\\"Parameters\\":{\\"Entries\\":[{\\"Detail\\":{\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_ANALYTICS\\",\\"sourceDetails\\":{\\"dimensions\\":\\"ga:dimension1,ga:dimension2\\",\\"metrics\\":\\"ga:metric1,ga:metric2\\",\\"projectId\\":\\"mock-project-id\\",\\"propertyId\\":\\"mock-property-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}},\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"executionId.$\\":\\"$$.Execution.Id\\",\\"errorDetails.$\\":\\"$.ErrorDetails\\",\\"currentPayload.$\\":\\"$\\",\\"propertyId\\":\\"mock-property-id\\"},\\"DetailType\\":\\"DataProductImportError\\",\\"EventBusName\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/stack.test.ts b/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/stack.test.ts index aade2d7..92bc59f 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/stack.test.ts +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/stack.test.ts @@ -23,7 +23,7 @@ describe('google-analytics-source', () => { privateKeyId: 'private-key-id', privateKeySecretName: 'private-key-secret', projectId: 'project', - viewId: '173381731', + propertyId: '173381731', since: '2020-12-31', until: '2021-11-16', dimensions: 'ga:country,ga:users', @@ -53,7 +53,7 @@ describe('stack/synthesizer/google-analytics', () => { dimensions: ['ga:dimension1', 'ga:dimension2'].join(','), metrics: ['ga:metric1', 'ga:metric2'].join(','), projectId: 'mock-project-id', - viewId: 'mock-view-id', + propertyId: 'mock-property-id', // common clientEmail: 'mock@example.com', clientId: 'mock-client-id', diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/stack.ts b/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/stack.ts index cf36710..3f1faee 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/stack.ts +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/dynamic/stack.ts @@ -25,7 +25,7 @@ export class GoogleAnalyticsSourceTask extends GoogleConnectorSourceTask { privateKeyId: details.privateKeyId, privateKeySecretName: details.privateKeySecretName, projectId: details.projectId, - viewId: details.viewId, + propertyId: details.propertyId, since: details.since || '', until: details.until || '', dimensions: details.dimensions, @@ -34,7 +34,7 @@ export class GoogleAnalyticsSourceTask extends GoogleConnectorSourceTask { scheduleRate: updateTrigger.scheduleRate || '', }, additionalNotificationPayload: { - viewId: details.viewId, + propertyId: details.propertyId, since: details.since, until: details.until, }, diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/static/import-data-state-machine/index.ts b/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/static/import-data-state-machine/index.ts index f5d81c9..a2da981 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/static/import-data-state-machine/index.ts +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/infra/static/import-data-state-machine/index.ts @@ -25,8 +25,8 @@ export default class GoogleAnalyticsImportDataStateMachine extends BaseEcsRunner taskEnv: TaskInput.fromObject([ ...GOOGLE_BASE_TASK_INPUT, { - name: 'VIEW_ID', - value: TaskInput.fromJsonPathAt('$.viewId').value, + name: 'PROPERTY_ID', + value: TaskInput.fromJsonPathAt('$.propertyId').value, }, { name: 'SINCE', diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/preview/__tests__/test_pull_samples.py b/source/packages/@ada/infra/src/connectors/sources/google_analytics/preview/__tests__/test_pull_samples.py index 5e0630f..c99662a 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/preview/__tests__/test_pull_samples.py +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/preview/__tests__/test_pull_samples.py @@ -7,22 +7,29 @@ from unittest.mock import patch from datetime import datetime from dateutil.relativedelta import relativedelta +from collections import namedtuple from handlers.common import * # NOSONAR from handlers.sampling import * # NOSONAR from handlers.__tests__.sampling_helpers import SamplingTestHelpers +Header = namedtuple('Header', ['name']) +Value = namedtuple('Value', ['value']) +ReportRow = namedtuple('ReportRow', ['dimension_values', 'metric_values']) +ReportData = namedtuple('ReportData', ['dimension_headers', 'metric_headers', 'rows']) + @pytest.mark.parametrize("source_type", ["GOOGLE_ANALYTICS"]) -@patch("handlers.sampling.common.SamplingUtils.build_google_api_client") @patch("handlers.sampling.common.SamplingUtils.get_google_cloud_credentials") +@patch("handlers.sampling.common.SamplingUtils.build_google_analytics_client") +@patch("google.analytics.data_v1beta.BetaAnalyticsDataClient.run_report") @patch("botocore.client.BaseClient._make_api_call") -def test_google_analytics_pull_samples(boto_client, mock_ga_cred, mock_build, source_type): +def test_google_analytics_pull_samples(boto_client, mock_run_report, mock_ga_client, mock_ga_cred, source_type): source_details = { - "viewId": "12345678", + "propertyId": "12345678", "since": "2020-12-31T13:00:00.000Z", "until": "2021-11-16T13:00:00.000Z", - "dimensions": "ga:userType,ga:country", - "metrics": "ga:users", + "dimensions": "userType,country", + "metrics": "users", "projectId": "lt-demo-330100", "clientId": "114452300742793677110", "clientEmail": "sample@test.iam.gserviceaccount.example.com", @@ -41,64 +48,19 @@ def test_google_analytics_pull_samples(boto_client, mock_ga_cred, mock_build, so "Contents": [{"Key": "some_file"}] }] - mock_build.return_value.reports.return_value.batchGet.return_value.execute.return_value = { - "reports": [ - { - "columnHeader": { - "dimensions": [ - "ga:userType" - ], - "metricHeader": { - "metricHeaderEntries": [ - { - "name": "ga:sessions", - "type": "INTEGER" - } - ] - } - }, - "data": { - "rows": [ - { - "dimensions": [ - "New Visitor" - ], - "metrics": [ - { - "values": [ - "12872" - ] - } - ] - } - ], - "totals": [ - { - "values": [ - "12872" - ] - } - ], - "rowCount": 1, - "minimums": [ - { - "values": [ - "12872" - ] - } - ], - "maximums": [ - { - "values": [ - "12872" - ] - } - ], - "isDataGolden": True - } - } - ] - } + data_row = ReportRow([ + Value("New Visitor"), + Value("USA") + ], + [ + Value("12872") + ]) + + mock_ga_client.return_value.run_report.return_value = ReportData( + [Header('userType'), Header('country')], + [Header('users')], + [data_row] + ) table_details = SamplingTestHelpers.pull_data_sample(source_type, source_details)['tableDetails'] assert len(table_details) == 1 @@ -108,16 +70,17 @@ def test_google_analytics_pull_samples(boto_client, mock_ga_cred, mock_build, so @pytest.mark.parametrize("source_type", ["GOOGLE_ANALYTICS"]) -@patch("handlers.sampling.common.SamplingUtils.build_google_api_client") @patch("handlers.sampling.common.SamplingUtils.get_google_cloud_credentials") +@patch("handlers.sampling.common.SamplingUtils.build_google_analytics_client") +@patch("google.analytics.data_v1beta.BetaAnalyticsDataClient.run_report") @patch("botocore.client.BaseClient._make_api_call") -def test_google_analytics_pull_samples_schedule(boto_client, mock_ga_cred, mock_build, source_type): +def test_google_analytics_pull_samples_schedule(boto_client, mock_run_report, mock_ga_client, mock_ga_cred, source_type): source_details = { - "viewId": "12345678", + "propertyId": "12345678", "since": "", "until": "", - "dimensions": "ga:userType,ga:country", - "metrics": "ga:users", + "dimensions": "userType,country", + "metrics": "users", "projectId": "lt-demo-330100", "clientId": "114452300742793677110", "clientEmail": "sample@test.iam.gserviceaccount.example.com", @@ -136,64 +99,19 @@ def test_google_analytics_pull_samples_schedule(boto_client, mock_ga_cred, mock_ "Contents": [{"Key": "some_file"}] }] - mock_build.return_value.reports.return_value.batchGet.return_value.execute.return_value = { - "reports": [ - { - "columnHeader": { - "dimensions": [ - "ga:userType" - ], - "metricHeader": { - "metricHeaderEntries": [ - { - "name": "ga:sessions", - "type": "INTEGER" - } - ] - } - }, - "data": { - "rows": [ - { - "dimensions": [ - "New Visitor" - ], - "metrics": [ - { - "values": [ - "12872" - ] - } - ] - } - ], - "totals": [ - { - "values": [ - "12872" - ] - } - ], - "rowCount": 1, - "minimums": [ - { - "values": [ - "12872" - ] - } - ], - "maximums": [ - { - "values": [ - "12872" - ] - } - ], - "isDataGolden": True - } - } - ] - } + data_row = ReportRow([ + Value("New Visitor"), + Value("USA") + ], + [ + Value("12872") + ]) + + mock_ga_client.return_value.run_report.return_value = ReportData( + [Header('userType'), Header('country')], + [Header('users')], + [data_row] + ) table_details = SamplingTestHelpers.pull_scheduled_data_sample(source_type, source_details)['tableDetails'] assert len(table_details) == 1 diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/preview/pull_samples.py b/source/packages/@ada/infra/src/connectors/sources/google_analytics/preview/pull_samples.py index 0354624..308217a 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/preview/pull_samples.py +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/preview/pull_samples.py @@ -3,6 +3,14 @@ # SPDX-License-Identifier: Apache-2.0 ################################################################### import pandas as pd +from google.analytics.data_v1beta import BetaAnalyticsDataClient +from google.analytics.data_v1beta.types import ( + DateRange, + Dimension, + Metric, + MetricType, + RunReportRequest, +) from handlers.common import * # NOSONAR from handlers.sampling import SamplingUtils @@ -11,16 +19,15 @@ def pull_samples(input: IPullSamplesInput) -> IPullSamplesReturn: # NOSONAR (python:S3776) - false positive """ - Query data from Goolge Analytics - https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet + Query data from Goolge Analytics 4 + https://googleapis.dev/python/analyticsdata/latest/data_v1beta/beta_analytics_data.html request body: { - 'viewId': '123456', + 'propertyId': '123456', 'dateRanges': [{'startDate': '2021-01-01', 'endDate': '2021-12-01'}], - 'samplingLevel': 'Default|LARGE', 'metrics': [], 'dimensions': [], - 'pageSize': 10, + 'limit': 10, } """ print('Reading sample data from Google Analytics') @@ -30,7 +37,8 @@ def pull_samples(input: IPullSamplesInput) -> IPullSamplesReturn: # NOSONAR (pyt cred = SamplingUtils.get_google_cloud_credentials(source_details) cred.with_scopes(["https://www.googleapis.com/auth/analytics.readonly"]) - analytics = SamplingUtils.build_google_api_client("analyticsreporting", "v4", credentials=cred, cache_discovery=False) + + ga_client = SamplingUtils.build_google_analytics_client(cred) trigger_type = update_trigger.get("triggerType", "ON_DEMAND") schedule_rate = update_trigger.get("scheduleRate", "") @@ -45,108 +53,65 @@ def pull_samples(input: IPullSamplesInput) -> IPullSamplesReturn: # NOSONAR (pyt print("Preview ga data with date ranges: ", date_range) since_formatted = date_range[0].strftime('%Y-%m-%d') - until_formatted = date_range[1].strftime('%Y-%m-%d') - """ - # input: - # "ga:sessions, ga:users" - # output: - # [{"name": "ga:sessions"}, {"name": "ga:users"}] - """ source_dimenions = source_details.get("dimensions", {}) if type(source_dimenions) is str: - dimensions = [] - for dimension in source_dimenions.split(","): - dimensions.append({"name": dimension}) + dimensions = [Dimension(name=dim) for dim in source_dimenions.split(",")] else: - dimensions = source_dimenions + dimensions = map(lambda dim: Dimension(name=dim), source_dimenions) - """ - # input - # "ga:country, ga:userType" - # output - # [{"expression": "ga:country"}, {"expression": "ga:userType"}] - """ source_metrics = source_details.get("metrics", {}) - if type(source_metrics) is str: - metrics = [] - for metric in source_metrics.split(","): - metrics.append({"expression": metric}) + metrics = [Metric(name=metric) for metric in source_metrics.split(",")] else: - metrics = source_metrics - - print("Calling anlytics - should be mocked", analytics) - print("#reports()", analytics.reports()) - body = { - 'reportRequests': [ - { - 'viewId': source_details.get("viewId"), - 'dateRanges': [{'startDate': since_formatted, 'endDate': until_formatted}], - 'metrics': metrics, - 'dimensions': dimensions, - 'pageSize': input.sample_size - }] - } - print("body=", body) - response = analytics.reports().batchGet(body=body).execute() - print("response:", response) - - print("Retrieved ga report for preview ...") - - if response.get('reports'): - report = response['reports'][0] - rows = report.get('data', {}).get('rows', []) - - column_header = report.get('columnHeader', {}) - dimension_headers = [ - {'name': header.replace('ga:', ''), 'type': VARCHAR_255} - for header - in column_header.get('dimensions', []) - ] - metric_map = { - 'METRIC_TYPE_UNSPECIFIED': VARCHAR_255, - 'CURRENCY': DECIMAL_20_5, - 'INTEGER': 'int(11)', - 'FLOAT': DECIMAL_20_5, - 'PERCENT': DECIMAL_20_5, - 'TIME': 'time' - } - metric_headers = [ - {'name': entry.get('name').replace('ga:', ''), - 'type': metric_map.get(entry.get('type'), VARCHAR_255)} - for entry - in column_header.get('metricHeader', {}).get('metricHeaderEntries', []) - ] - - normalize_rows = [] - - for row_counter, row in enumerate(rows): - root_data_obj = {} - dimensions = row.get('dimensions', []) - metrics = row.get('metrics', []) - - for index, dimension in enumerate(dimensions): - header = dimension_headers[index].get('name').lower() - root_data_obj[header] = dimension - - for metric in metrics: - data = {} - data.update(root_data_obj) - for index, value in enumerate(metric.get('values', [])): - header = metric_headers[index].get('name').lower() - data[header] = value - data['viewid'] = source_details["viewId"] - data['timestamp'] = until_formatted - normalize_rows.append(data) - print("normalized length: ", len(normalize_rows)) - if len(normalize_rows): - dataframe = pd.DataFrame(normalize_rows) + metrics = map(lambda metric: Metric(name=metric), source_metrics) + + try: + request = RunReportRequest( + property=f"properties/{source_details.get('propertyId')}", + dimensions=dimensions, + metrics=metrics, + date_ranges=[DateRange(start_date=since_formatted, end_date=until_formatted)], + limit = input.sample_size, + ) + print(request) + + response = ga_client.run_report(request) + print("response:", response) + + print("Retrieved ga report for preview ...") + # dimension headers are lower case all the time + dimension_headers = [ dim.name.lower() for dim in response.dimension_headers ] + print("Response Dimension Headers") + print (dimension_headers) + + # metric headers are lower case all the time + metric_headers = [ metric.name.lower() for metric in response.metric_headers] + print("Response Metric headers") + print(metric_headers) + + normalized_rows = [] + rows = response.rows + for row in rows: + row_data = dict() + # retrieve dimensions + for index, dimension_value in enumerate(row.dimension_values): + row_data[dimension_headers[index]] = dimension_value.value + # retrieve metrics + for index, metric_value in enumerate(row.metric_values): + row_data[metric_headers[index]] = metric_value.value + # add common columns + row_data['propertyid'] = source_details.get('propertyId') + row_data['timestamp'] = until_formatted + normalized_rows.append(row_data) + + if len(normalized_rows): + dataframe = pd.DataFrame(normalized_rows) return [Sample(DEFAULT_DATASET_ID, dataframe, 'parquet')] else: raise NoSourceDataFoundException( "Unable to load preview: empty data") - else: + except: raise NoSourceDataFoundException( - "Unable to load preview: bad responses from google analytics") + "Unable to load preview: bad responses from google analytics") \ No newline at end of file diff --git a/source/packages/@ada/infra/src/connectors/sources/google_analytics/ui-options.ts b/source/packages/@ada/infra/src/connectors/sources/google_analytics/ui-options.ts index 8bd4277..b47e9d7 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_analytics/ui-options.ts +++ b/source/packages/@ada/infra/src/connectors/sources/google_analytics/ui-options.ts @@ -1,542 +1,287 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ export const GA_DIMENSIONS = [ - 'ga:userType', - 'ga:visitorType', - 'ga:sessionCount', - 'ga:visitCount', - 'ga:daysSinceLastSession', - 'ga:userDefinedValue', - 'ga:userBucket', - 'ga:sessionDurationBucket', - 'ga:visitLength', - 'ga:referralPath', - 'ga:fullReferrer', - 'ga:campaign', - 'ga:source', - 'ga:medium', - 'ga:sourceMedium', - 'ga:keyword', - 'ga:adContent', - 'ga:socialNetwork', - 'ga:hasSocialSourceReferral', - 'ga:adGroup', - 'ga:adSlot', - 'ga:adDistributionNetwork', - 'ga:adMatchType', - 'ga:adKeywordMatchType', - 'ga:adMatchedQuery', - 'ga:adPlacementDomain', - 'ga:adPlacementUrl', - 'ga:adFormat', - 'ga:adTargetingType', - 'ga:adTargetingOption', - 'ga:adDisplayUrl', - 'ga:adDestinationUrl', - 'ga:adwordsCustomerID', - 'ga:adwordsCampaignID', - 'ga:adwordsAdGroupID', - 'ga:adwordsCreativeID', - 'ga:adwordsCriteriaID', - 'ga:adQueryWordCount', - 'ga:goalCompletionLocation', - 'ga:goalPreviousStep1', - 'ga:goalPreviousStep2', - 'ga:goalPreviousStep3', - 'ga:browser', - 'ga:browserVersion', - 'ga:operatingSystem', - 'ga:operatingSystemVersion', - 'ga:mobileDeviceBranding', - 'ga:mobileDeviceModel', - 'ga:mobileInputSelector', - 'ga:mobileDeviceInfo', - 'ga:mobileDeviceMarketingName', - 'ga:deviceCategory', - 'ga:continent', - 'ga:subContinent', - 'ga:country', - 'ga:region', - 'ga:metro', - 'ga:city', - 'ga:latitude', - 'ga:longitude', - 'ga:networkDomain', - 'ga:networkLocation', - 'ga:flashVersion', - 'ga:javaEnabled', - 'ga:language', - 'ga:screenColors', - 'ga:sourcePropertyDisplayName', - 'ga:sourcePropertyTrackingId', - 'ga:screenResolution', - 'ga:socialActivityContentUrl', - 'ga:hostname', - 'ga:pagePath', - 'ga:pagePathLevel1', - 'ga:pagePathLevel2', - 'ga:pagePathLevel3', - 'ga:pagePathLevel4', - 'ga:pageTitle', - 'ga:landingPagePath', - 'ga:secondPagePath', - 'ga:exitPagePath', - 'ga:previousPagePath', - 'ga:pageDepth', - 'ga:searchUsed', - 'ga:searchKeyword', - 'ga:searchKeywordRefinement', - 'ga:searchCategory', - 'ga:searchStartPage', - 'ga:searchDestinationPage', - 'ga:searchAfterDestinationPage', - 'ga:appInstallerId', - 'ga:appVersion', - 'ga:appName', - 'ga:appId', - 'ga:screenName', - 'ga:screenDepth', - 'ga:landingScreenName', - 'ga:exitScreenName', - 'ga:eventCategory', - 'ga:eventAction', - 'ga:eventLabel', - 'ga:transactionId', - 'ga:affiliation', - 'ga:sessionsToTransaction', - 'ga:visitsToTransaction', - 'ga:daysToTransaction', - 'ga:productSku', - 'ga:productName', - 'ga:productCategory', - 'ga:currencyCode', - 'ga:socialInteractionNetwork', - 'ga:socialInteractionAction', - 'ga:socialInteractionNetworkAction', - 'ga:socialInteractionTarget', - 'ga:socialEngagementType', - 'ga:userTimingCategory', - 'ga:userTimingLabel', - 'ga:userTimingVariable', - 'ga:exceptionDescription', - 'ga:experimentId', - 'ga:experimentVariant', - 'ga:dimensionXX', - 'ga:customVarNameXX', - 'ga:customVarValueXX', - 'ga:date', - 'ga:year', - 'ga:month', - 'ga:week', - 'ga:day', - 'ga:hour', - 'ga:minute', - 'ga:nthMonth', - 'ga:nthWeek', - 'ga:nthDay', - 'ga:nthMinute', - 'ga:dayOfWeek', - 'ga:dayOfWeekName', - 'ga:dateHour', - 'ga:dateHourMinute', - 'ga:yearMonth', - 'ga:yearWeek', - 'ga:isoWeek', - 'ga:isoYear', - 'ga:isoYearIsoWeek', - 'ga:dcmClickAd', - 'ga:dcmClickAdId', - 'ga:dcmClickAdType', - 'ga:dcmClickAdTypeId', - 'ga:dcmClickAdvertiser', - 'ga:dcmClickAdvertiserId', - 'ga:dcmClickCampaign', - 'ga:dcmClickCampaignId', - 'ga:dcmClickCreativeId', - 'ga:dcmClickCreative', - 'ga:dcmClickRenderingId', - 'ga:dcmClickCreativeType', - 'ga:dcmClickCreativeTypeId', - 'ga:dcmClickCreativeVersion', - 'ga:dcmClickSite', - 'ga:dcmClickSiteId', - 'ga:dcmClickSitePlacement', - 'ga:dcmClickSitePlacementId', - 'ga:dcmClickSpotId', - 'ga:dcmFloodlightActivity', - 'ga:dcmFloodlightActivityAndGroup', - 'ga:dcmFloodlightActivityGroup', - 'ga:dcmFloodlightActivityGroupId', - 'ga:dcmFloodlightActivityId', - 'ga:dcmFloodlightAdvertiserId', - 'ga:dcmFloodlightSpotId', - 'ga:dcmLastEventAd', - 'ga:dcmLastEventAdId', - 'ga:dcmLastEventAdType', - 'ga:dcmLastEventAdTypeId', - 'ga:dcmLastEventAdvertiser', - 'ga:dcmLastEventAdvertiserId', - 'ga:dcmLastEventAttributionType', - 'ga:dcmLastEventCampaign', - 'ga:dcmLastEventCampaignId', - 'ga:dcmLastEventCreativeId', - 'ga:dcmLastEventCreative', - 'ga:dcmLastEventRenderingId', - 'ga:dcmLastEventCreativeType', - 'ga:dcmLastEventCreativeTypeId', - 'ga:dcmLastEventCreativeVersion', - 'ga:dcmLastEventSite', - 'ga:dcmLastEventSiteId', - 'ga:dcmLastEventSitePlacement', - 'ga:dcmLastEventSitePlacementId', - 'ga:dcmLastEventSpotId', - 'ga:landingContentGroupXX', - 'ga:previousContentGroupXX', - 'ga:contentGroupXX', - 'ga:userAgeBracket', - 'ga:visitorAgeBracket', - 'ga:userGender', - 'ga:visitorGender', - 'ga:interestOtherCategory', - 'ga:interestAffinityCategory', - 'ga:interestInMarketCategory', - 'ga:dfpLineItemId', - 'ga:dfpLineItemName', - 'ga:acquisitionCampaign', - 'ga:acquisitionMedium', - 'ga:acquisitionSource', - 'ga:acquisitionSourceMedium', - 'ga:acquisitionTrafficChannel', - 'ga:browserSize', - 'ga:campaignCode', - 'ga:channelGrouping', - 'ga:checkoutOptions', - 'ga:cityId', - 'ga:cohort', - 'ga:cohortNthDay', - 'ga:cohortNthMonth', - 'ga:cohortNthWeek', - 'ga:continentId', - 'ga:countryIsoCode', - 'ga:dataSource', - 'ga:dbmClickAdvertiser', - 'ga:dbmClickAdvertiserId', - 'ga:dbmClickCreativeId', - 'ga:dbmClickExchange', - 'ga:dbmClickExchangeId', - 'ga:dbmClickInsertionOrder', - 'ga:dbmClickInsertionOrderId', - 'ga:dbmClickLineItem', - 'ga:dbmClickLineItemId', - 'ga:dbmClickSite', - 'ga:dbmClickSiteId', - 'ga:dbmLastEventAdvertiser', - 'ga:dbmLastEventAdvertiserId', - 'ga:dbmLastEventCreativeId', - 'ga:dbmLastEventExchange', - 'ga:dbmLastEventExchangeId', - 'ga:dbmLastEventInsertionOrder', - 'ga:dbmLastEventInsertionOrderId', - 'ga:dbmLastEventLineItem', - 'ga:dbmLastEventLineItemId', - 'ga:dbmLastEventSite', - 'ga:dbmLastEventSiteId', - 'ga:dsAdGroup', - 'ga:dsAdGroupId', - 'ga:dsAdvertiser', - 'ga:dsAdvertiserId', - 'ga:dsAgency', - 'ga:dsAgencyId', - 'ga:dsCampaign', - 'ga:dsCampaignId', - 'ga:dsEngineAccount', - 'ga:dsEngineAccountId', - 'ga:dsKeyword', - 'ga:dsKeywordId', - 'ga:experimentCombination', - 'ga:experimentName', - 'ga:internalPromotionCreative', - 'ga:internalPromotionId', - 'ga:internalPromotionName', - 'ga:internalPromotionPosition', - 'ga:isTrueViewVideoAd', - 'ga:metroId', - 'ga:nthHour', - 'ga:orderCouponCode', - 'ga:productBrand', - 'ga:productCategoryHierarchy', - 'ga:productCategoryLevelXX', - 'ga:productCouponCode', - 'ga:productListName', - 'ga:productListPosition', - 'ga:productVariant', - 'ga:regionId', - 'ga:regionIsoCode', - 'ga:shoppingStage', - 'ga:subContinentCode', + 'achievementId', + 'adFormat', + 'adSourceName', + 'adUnitName', + 'appVersion', + 'audienceName', + 'audienceResourceName', + 'brandingInterest', + 'browser', + 'campaignId', + 'campaignName', + 'character', + 'city', + 'cityId', + 'cohort', + 'cohortNthDay', + 'cohortNthMonth', + 'cohortNthWeek', + 'contentGroup', + 'contentId', + 'contentType', + 'continent', + 'continentId', + 'country', + 'countryId', + 'currencyCode', + 'date', + 'dateHour', + 'dateHourMinute', + 'day', + 'dayOfWeek', + 'dayOfWeekName', + 'defaultChannelGroup', + 'deviceCategory', + 'deviceModel', + 'eventName', + 'fileExtension', + 'fileName', + 'firstSessionDate', + 'firstUserCampaignId', + 'firstUserCampaignName', + 'firstUserDefaultChannelGroup', + 'firstUserGoogleAdsAccountName', + 'firstUserGoogleAdsAdGroupId', + 'firstUserGoogleAdsAdGroupName', + 'firstUserGoogleAdsAdNetworkType', + 'firstUserGoogleAdsCampaignId', + 'firstUserGoogleAdsCampaignName', + 'firstUserGoogleAdsCampaignType', + 'firstUserGoogleAdsCreativeId', + 'firstUserGoogleAdsCustomerId', + 'firstUserGoogleAdsKeyword', + 'firstUserGoogleAdsQuery', + 'firstUserManualAdContent', + 'firstUserManualTerm', + 'firstUserMedium', + 'firstUserSource', + 'firstUserSourceMedium', + 'firstUserSourcePlatform', + 'fullPageUrl', + 'googleAdsAccountName', + 'googleAdsAdGroupId', + 'googleAdsAdGroupName', + 'googleAdsAdNetworkType', + 'googleAdsCampaignId', + 'googleAdsCampaignName', + 'googleAdsCampaignType', + 'googleAdsCreativeId', + 'googleAdsCustomerId', + 'googleAdsKeyword', + 'googleAdsQuery', + 'groupId', + 'hostName', + 'hour', + 'isConversionEvent', + 'isoWeek', + 'isoYear', + 'isoYearIsoWeek', + 'itemAffiliation', + 'itemBrand', + 'itemCategory', + 'itemCategory2', + 'itemCategory3', + 'itemCategory4', + 'itemCategory5', + 'itemId', + 'itemListId', + 'itemListName', + 'itemListPosition', + 'itemLocationID', + 'itemName', + 'itemPromotionCreativeName', + 'itemPromotionCreativeSlot', + 'itemPromotionId', + 'itemPromotionName', + 'itemVariant', + 'landingPage', + 'landingPagePlusQueryString', + 'language', + 'languageCode', + 'level', + 'linkClasses', + 'linkDomain', + 'linkId', + 'linkText', + 'linkUrl', + 'manualAdContent', + 'manualTerm', + 'medium', + 'method', + 'minute', + 'mobileDeviceBranding', + 'mobileDeviceMarketingName', + 'mobileDeviceModel', + 'month', + 'newVsReturning', + 'nthDay', + 'nthHour', + 'nthMinute', + 'nthMonth', + 'nthWeek', + 'nthYear', + 'operatingSystem', + 'operatingSystemVersion', + 'operatingSystemWithVersion', + 'orderCoupon', + 'outbound', + 'pageLocation', + 'pagePath', + 'pagePathPlusQueryString', + 'pageReferrer', + 'pageTitle', + 'percentScrolled', + 'platform', + 'platformDeviceCategory', + 'region', + 'screenResolution', + 'searchTerm', + 'sessionCampaignId', + 'sessionCampaignName', + 'sessionDefaultChannelGroup', + 'sessionGoogleAdsAccountName', + 'sessionGoogleAdsAdGroupId', + 'sessionGoogleAdsAdGroupName', + 'sessionGoogleAdsAdNetworkType', + 'sessionGoogleAdsCampaignId', + 'sessionGoogleAdsCampaignName', + 'sessionGoogleAdsCampaignType', + 'sessionGoogleAdsCreativeId', + 'sessionGoogleAdsCustomerId', + 'sessionGoogleAdsKeyword', + 'sessionGoogleAdsQuery', + 'sessionManualAdContent', + 'sessionManualTerm', + 'sessionMedium', + 'sessionSa360AdGroupName', + 'sessionSa360CampaignId', + 'sessionSa360CampaignName', + 'sessionSa360CreativeFormat', + 'sessionSa360EngineAccountId', + 'sessionSa360EngineAccountName', + 'sessionSa360EngineAccountType', + 'sessionSa360Keyword', + 'sessionSa360Medium', + 'sessionSa360Query', + 'sessionSa360Source', + 'sessionSource', + 'sessionSourceMedium', + 'sessionSourcePlatform', + 'shippingTier', + 'signedInWithUserId', + 'source', + 'sourceMedium', + 'sourcePlatform', + 'streamId', + 'streamName', + 'testDataFilterId', + 'testDataFilterName', + 'transactionId', + 'unifiedPagePathScreen', + 'unifiedPageScreen', + 'unifiedScreenClass', + 'unifiedScreenName', + 'userAgeBracket', + 'userGender', + 'videoProvider', + 'videoTitle', + 'videoUrl', + 'virtualCurrencyName', + 'visible', + 'week', + 'year', + 'yearMonth', + 'yearWeek', ]; export const GA_METRICS = [ - 'ga:users', - 'ga:visitors', - 'ga:newUsers', - 'ga:newVisits', - 'ga:percentNewSessions', - 'ga:percentNewVisits', - 'ga:1dayUsers', - 'ga:7dayUsers', - 'ga:14dayUsers', - 'ga:28dayUsers', - 'ga:30dayUsers', - 'ga:sessions', - 'ga:visits', - 'ga:bounces', - 'ga:bounceRate', - 'ga:visitBounceRate', - 'ga:sessionDuration', - 'ga:avgSessionDuration', - 'ga:organicSearches', - 'ga:impressions', - 'ga:adClicks', - 'ga:adCost', - 'ga:CPM', - 'ga:CPC', - 'ga:CTR', - 'ga:costPerTransaction', - 'ga:costPerGoalConversion', - 'ga:costPerConversion', - 'ga:RPC', - 'ga:ROI', - 'ga:margin', - 'ga:ROAS', - 'ga:goalXXStarts', - 'ga:goalStartsAll', - 'ga:goalXXCompletions', - 'ga:goalCompletionsAll', - 'ga:goalXXValue', - 'ga:goalValueAll', - 'ga:goalValuePerSession', - 'ga:goalValuePerVisit', - 'ga:goalXXConversionRate', - 'ga:goalConversionRateAll', - 'ga:goalXXAbandons', - 'ga:goalAbandonsAll', - 'ga:goalXXAbandonRate', - 'ga:goalAbandonRateAll', - 'ga:pageValue', - 'ga:entrances', - 'ga:entranceRate', - 'ga:pageviews', - 'ga:pageviewsPerSession', - 'ga:pageviewsPerVisit', - 'ga:contentGroupUniqueViewsXX', - 'ga:uniquePageviews', - 'ga:timeOnPage', - 'ga:avgTimeOnPage', - 'ga:exits', - 'ga:exitRate', - 'ga:searchResultViews', - 'ga:searchUniques', - 'ga:avgSearchResultViews', - 'ga:searchSessions', - 'ga:searchVisits', - 'ga:percentSessionsWithSearch', - 'ga:percentVisitsWithSearch', - 'ga:searchDepth', - 'ga:avgSearchDepth', - 'ga:searchRefinements', - 'ga:percentSearchRefinements', - 'ga:searchDuration', - 'ga:avgSearchDuration', - 'ga:searchExits', - 'ga:searchExitRate', - 'ga:searchGoalXXConversionRate', - 'ga:searchGoalConversionRateAll', - 'ga:goalValueAllPerSearch', - 'ga:pageLoadTime', - 'ga:pageLoadSample', - 'ga:avgPageLoadTime', - 'ga:domainLookupTime', - 'ga:avgDomainLookupTime', - 'ga:pageDownloadTime', - 'ga:avgPageDownloadTime', - 'ga:redirectionTime', - 'ga:avgRedirectionTime', - 'ga:serverConnectionTime', - 'ga:avgServerConnectionTime', - 'ga:serverResponseTime', - 'ga:avgServerResponseTime', - 'ga:speedMetricsSample', - 'ga:domInteractiveTime', - 'ga:avgDomInteractiveTime', - 'ga:domContentLoadedTime', - 'ga:avgDomContentLoadedTime', - 'ga:domLatencyMetricsSample', - 'ga:screenviews', - 'ga:uniqueScreenviews', - 'ga:uniqueAppviews', - 'ga:screenviewsPerSession', - 'ga:timeOnScreen', - 'ga:avgScreenviewDuration', - 'ga:totalEvents', - 'ga:uniqueDimensionCombinations', - 'ga:uniqueEvents', - 'ga:eventValue', - 'ga:avgEventValue', - 'ga:sessionsWithEvent', - 'ga:visitsWithEvent', - 'ga:eventsPerSessionWithEvent', - 'ga:eventsPerVisitWithEvent', - 'ga:transactions', - 'ga:transactionsPerSession', - 'ga:transactionsPerVisit', - 'ga:transactionRevenue', - 'ga:revenuePerTransaction', - 'ga:transactionRevenuePerSession', - 'ga:transactionRevenuePerVisit', - 'ga:transactionShipping', - 'ga:transactionTax', - 'ga:totalValue', - 'ga:itemQuantity', - 'ga:uniquePurchases', - 'ga:revenuePerItem', - 'ga:itemRevenue', - 'ga:itemsPerPurchase', - 'ga:localTransactionRevenue', - 'ga:localTransactionShipping', - 'ga:localTransactionTax', - 'ga:localItemRevenue', - 'ga:socialInteractions', - 'ga:uniqueSocialInteractions', - 'ga:socialInteractionsPerSession', - 'ga:socialInteractionsPerVisit', - 'ga:userTimingValue', - 'ga:userTimingSample', - 'ga:avgUserTimingValue', - 'ga:exceptions', - 'ga:exceptionsPerScreenview', - 'ga:fatalExceptions', - 'ga:fatalExceptionsPerScreenview', - 'ga:metricXX', - 'ga:dcmFloodlightQuantity', - 'ga:dcmFloodlightRevenue', - 'ga:adsenseRevenue', - 'ga:adsenseAdUnitsViewed', - 'ga:adsenseAdsViewed', - 'ga:adsenseAdsClicks', - 'ga:adsensePageImpressions', - 'ga:adsenseCTR', - 'ga:adsenseECPM', - 'ga:adsenseExits', - 'ga:adsenseViewableImpressionPercent', - 'ga:adsenseCoverage', - 'ga:totalPublisherImpressions', - 'ga:totalPublisherCoverage', - 'ga:totalPublisherMonetizedPageviews', - 'ga:totalPublisherImpressionsPerSession', - 'ga:totalPublisherViewableImpressionsPercent', - 'ga:totalPublisherClicks', - 'ga:totalPublisherCTR', - 'ga:totalPublisherRevenue', - 'ga:totalPublisherRevenuePer1000Sessions', - 'ga:totalPublisherECPM', - 'ga:adxImpressions', - 'ga:adxCoverage', - 'ga:adxMonetizedPageviews', - 'ga:adxImpressionsPerSession', - 'ga:adxViewableImpressionsPercent', - 'ga:adxClicks', - 'ga:adxCTR', - 'ga:adxRevenue', - 'ga:adxRevenuePer1000Sessions', - 'ga:adxECPM', - 'ga:dfpImpressions', - 'ga:dfpCoverage', - 'ga:dfpMonetizedPageviews', - 'ga:dfpImpressionsPerSession', - 'ga:dfpViewableImpressionsPercent', - 'ga:dfpClicks', - 'ga:dfpCTR', - 'ga:dfpRevenue', - 'ga:dfpRevenuePer1000Sessions', - 'ga:dfpECPM', - 'ga:backfillImpressions', - 'ga:backfillCoverage', - 'ga:backfillMonetizedPageviews', - 'ga:backfillImpressionsPerSession', - 'ga:backfillViewableImpressionsPercent', - 'ga:backfillClicks', - 'ga:backfillCTR', - 'ga:backfillRevenue', - 'ga:backfillRevenuePer1000Sessions', - 'ga:backfillECPM', - 'ga:buyToDetailRate', - 'ga:calcMetric_', - 'ga:cartToDetailRate', - 'ga:cohortActiveUsers', - 'ga:cohortAppviewsPerUser', - 'ga:cohortAppviewsPerUserWithLifetimeCriteria', - 'ga:cohortGoalCompletionsPerUser', - 'ga:cohortGoalCompletionsPerUserWithLifetimeCriteria', - 'ga:cohortPageviewsPerUser', - 'ga:cohortPageviewsPerUserWithLifetimeCriteria', - 'ga:cohortRetentionRate', - 'ga:cohortRevenuePerUser', - 'ga:cohortRevenuePerUserWithLifetimeCriteria', - 'ga:cohortSessionDurationPerUser', - 'ga:cohortSessionDurationPerUserWithLifetimeCriteria', - 'ga:cohortSessionsPerUser', - 'ga:cohortSessionsPerUserWithLifetimeCriteria', - 'ga:cohortTotalUsers', - 'ga:cohortTotalUsersWithLifetimeCriteria', - 'ga:dbmCPA', - 'ga:dbmCPC', - 'ga:dbmCPM', - 'ga:dbmCTR', - 'ga:dbmClicks', - 'ga:dbmConversions', - 'ga:dbmCost', - 'ga:dbmImpressions', - 'ga:dbmROAS', - 'ga:dcmCPC', - 'ga:dcmCTR', - 'ga:dcmClicks', - 'ga:dcmCost', - 'ga:dcmImpressions', - 'ga:dcmMargin', - 'ga:dcmROAS', - 'ga:dcmRPC', - 'ga:dsCPC', - 'ga:dsCTR', - 'ga:dsClicks', - 'ga:dsCost', - 'ga:dsImpressions', - 'ga:dsProfit', - 'ga:dsReturnOnAdSpend', - 'ga:dsRevenuePerClick', - 'ga:hits', - 'ga:internalPromotionCTR', - 'ga:internalPromotionClicks', - 'ga:internalPromotionViews', - 'ga:localProductRefundAmount', - 'ga:localRefundAmount', - 'ga:productAddsToCart', - 'ga:productCheckouts', - 'ga:productDetailViews', - 'ga:productListCTR', - 'ga:productListClicks', - 'ga:productListViews', - 'ga:productRefundAmount', - 'ga:productRefunds', - 'ga:productRemovesFromCart', - 'ga:productRevenuePerPurchase', - 'ga:quantityAddedToCart', - 'ga:quantityCheckedOut', - 'ga:quantityRefunded', - 'ga:quantityRemovedFromCart', - 'ga:refundAmount', - 'ga:revenuePerUser', - 'ga:sessionsPerUser', - 'ga:totalRefunds', - 'ga:transactionsPerUser', + 'active1DayUsers', + 'active28DayUsers', + 'active7DayUsers', + 'activeUsers', + 'addToCarts', + 'adUnitExposure', + 'advertiserAdClicks', + 'advertiserAdCost', + 'advertiserAdCostPerClick', + 'advertiserAdCostPerConversion', + 'advertiserAdImpressions', + 'averagePurchaseRevenue', + 'averagePurchaseRevenuePerPayingUser', + 'averagePurchaseRevenuePerUser', + 'averageRevenuePerUser', + 'averageSessionDuration', + 'bounceRate', + 'cartToViewRate', + 'checkouts', + 'cohortActiveUsers', + 'cohortTotalUsers', + 'conversions', + 'crashAffectedUsers', + 'crashFreeUsersRate', + 'dauPerMau', + 'dauPerWau', + 'ecommercePurchases', + 'engagedSessions', + 'engagementRate', + 'eventCount', + 'eventCountPerUser', + 'eventsPerSession', + 'eventValue', + 'firstTimePurchaserConversionRate', + 'firstTimePurchasers', + 'firstTimePurchasersPerNewUser', + 'grossItemRevenue', + 'grossPurchaseRevenue', + 'itemDiscountAmount', + 'itemListClickEvents', + 'itemListClickThroughRate', + 'itemListViewEvents', + 'itemPromotionClickThroughRate', + 'itemRefundAmount', + 'itemRevenue', + 'itemsAddedToCart', + 'itemsCheckedOut', + 'itemsClickedInList', + 'itemsClickedInPromotion', + 'itemsPurchased', + 'itemsViewed', + 'itemsViewedInList', + 'itemsViewedInPromotion', + 'itemViewEvents', + 'newUsers', + 'organicGoogleSearchAveragePosition', + 'organicGoogleSearchClicks', + 'organicGoogleSearchClickThroughRate', + 'organicGoogleSearchImpressions', + 'promotionClicks', + 'promotionViews', + 'publisherAdClicks', + 'publisherAdImpressions', + 'purchaserConversionRate', + 'purchaseRevenue', + 'purchaseToViewRate', + 'refundAmount', + 'returnOnAdSpend', + 'screenPageViews', + 'screenPageViewsPerSession', + 'screenPageViewsPerUser', + 'scrolledUsers', + 'sessionConversionRate', + 'sessions', + 'sessionsPerUser', + 'shippingAmount', + 'taxAmount', + 'totalAdRevenue', + 'totalPurchasers', + 'totalRevenue', + 'totalUsers', + 'transactions', + 'transactionsPerPurchaser', + 'userConversionRate', + 'userEngagementDuration', + 'wauPerMau', ]; diff --git a/source/packages/@ada/infra/src/connectors/sources/google_bigquery/docker-image/Dockerfile b/source/packages/@ada/infra/src/connectors/sources/google_bigquery/docker-image/Dockerfile index d3570b7..865539e 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_bigquery/docker-image/Dockerfile +++ b/source/packages/@ada/infra/src/connectors/sources/google_bigquery/docker-image/Dockerfile @@ -1,5 +1,8 @@ FROM ada:data-import-base-image +RUN curl -sSL https://sdk.cloud.google.com | bash > /dev/null +ENV PATH $PATH:/root/google-cloud-sdk/bin + COPY requirements.txt requirements.txt RUN pip3 install -r requirements.txt COPY . . diff --git a/source/packages/@ada/infra/src/connectors/sources/google_bigquery/docker-image/requirements.txt b/source/packages/@ada/infra/src/connectors/sources/google_bigquery/docker-image/requirements.txt index ed91b4a..c1f9d02 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_bigquery/docker-image/requirements.txt +++ b/source/packages/@ada/infra/src/connectors/sources/google_bigquery/docker-image/requirements.txt @@ -1,32 +1,31 @@ -cachetools==5.0.0 -certifi==2021.10.8 -charset-normalizer==2.0.12 -fastavro==1.4.10 -google-api-core==2.7.1 -google-auth==2.6.3 -google-cloud-bigquery==2.34.3 -google-cloud-bigquery-storage==2.13.1 -google-cloud-core==2.2.3 -google-crc32c==1.3.0 -google-resumable-media==2.3.2 -googleapis-common-protos==1.56.0 -grpcio==1.44.0 -grpcio-status==1.44.0 -idna==3.3 -jmespath==1.0.0 -numpy==1.21.5 -packaging==21.3 -proto-plus==1.20.3 -protobuf==3.20.2 -pyasn1==0.4.8 -pyasn1-modules==0.2.8 -pyparsing==3.0.7 -python-dateutil==2.8.2 -pytz==2022.1 -requests==2.27.1 -rsa==4.8 -s3transfer==0.5.2 +cachetools==5.3.3 +certifi==2024.2.2 +charset-normalizer==3.3.2 +fastavro==1.9.4 +google-api-core==2.17.1 +google-auth==2.28.2 +google-cloud-bigquery==3.19.0 +google-cloud-bigquery-storage==2.24.0 +google-cloud-core==2.4.1 +google-crc32c==1.5.0 +google-resumable-media==2.7.0 +googleapis-common-protos==1.63.0 +grpcio==1.62.1 +grpcio-status==1.62.1 +idna==3.6 +jmespath==1.0.1 +numpy==1.26.4 +packaging==24.0 +proto-plus==1.23.0 +pyasn1==0.5.1 +pyasn1-modules==0.3.0 +pyparsing==3.1.2 +python-dateutil==2.9.0 +pytz==2024.1 +requests==2.31.0 +rsa==4.9 +s3transfer==0.10.1 six==1.16.0 -smart-open==5.2.1 -urllib3==1.26.9 -db-dtypes==1.0.1 +smart-open==7.0.1 +urllib3==2.2.1 +db-dtypes==1.2.0 diff --git a/source/packages/@ada/infra/src/connectors/sources/google_bigquery/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/google_bigquery/infra/dynamic/__snapshots__/stack.test.ts.snap index 124627b..7481ef2 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_bigquery/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/google_bigquery/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -305,30 +305,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -477,6 +453,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -553,7 +553,7 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportBigQueryData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportBigQueryData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -569,19 +569,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_BIGQUERY\\",\\"sourceDetails\\":{\\"projectId\\":\\"mock-project-id\\",\\"query\\":\\"SELECT * FROM mock\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_BIGQUERY\\",\\"sourceDetails\\":{\\"projectId\\":\\"mock-project-id\\",\\"query\\":\\"SELECT * FROM mock\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -593,11 +593,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -605,11 +605,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/google_storage/docker-image/Dockerfile b/source/packages/@ada/infra/src/connectors/sources/google_storage/docker-image/Dockerfile index 8ca35ec..eaa591a 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_storage/docker-image/Dockerfile +++ b/source/packages/@ada/infra/src/connectors/sources/google_storage/docker-image/Dockerfile @@ -1,6 +1,9 @@ FROM ada:data-import-base-image +RUN curl -sSL https://sdk.cloud.google.com | bash > /dev/null +ENV PATH $PATH:/root/google-cloud-sdk/bin + RUN pip3 install gsutil COPY . . diff --git a/source/packages/@ada/infra/src/connectors/sources/google_storage/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/google_storage/infra/dynamic/__snapshots__/stack.test.ts.snap index 55411e6..1c18b8b 100644 --- a/source/packages/@ada/infra/src/connectors/sources/google_storage/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/google_storage/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -305,30 +305,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -477,6 +453,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -553,7 +553,7 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportGoogleStorageData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportGoogleStorageData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -569,19 +569,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_STORAGE\\",\\"sourceDetails\\":{\\"bucket\\":\\"mock-bucket\\",\\"key\\":\\"mock-bucket-key\\",\\"projectId\\":\\"mock-project-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"GOOGLE_STORAGE\\",\\"sourceDetails\\":{\\"bucket\\":\\"mock-bucket\\",\\"key\\":\\"mock-bucket-key\\",\\"projectId\\":\\"mock-project-id\\",\\"clientEmail\\":\\"mock@example.com\\",\\"clientId\\":\\"mock-client-id\\",\\"privateKeyId\\":\\"mock-private-key-id\\",\\"privateKey\\":\\"mock-private-key\\",\\"privateKeySecretName\\":\\"mock-private-key-secret-name\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -593,11 +593,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -605,11 +605,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/jdbc_mysql5/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/jdbc_mysql5/infra/dynamic/__snapshots__/stack.test.ts.snap index 86b8865..03f2d72 100644 --- a/source/packages/@ada/infra/src/connectors/sources/jdbc_mysql5/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/jdbc_mysql5/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -401,30 +401,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "states:StartExecution", "Effect": "Allow", @@ -549,6 +525,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -655,19 +655,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"},{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\",\\"glueJobName\\":\\"test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-1--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-1-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\"}],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"MYSQL5\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"mydb.123456789012.ap-southeast-2.rds.amazonaws.com\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"},{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\",\\"glueJobName\\":\\"test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-1--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-1-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\"}],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"MYSQL5\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"mydb.123456789012.ap-southeast-2.rds.amazonaws.com\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -679,11 +679,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -691,11 +691,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/jdbc_oracle/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/jdbc_oracle/infra/dynamic/__snapshots__/stack.test.ts.snap index d6fad8d..de211c9 100644 --- a/source/packages/@ada/infra/src/connectors/sources/jdbc_oracle/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/jdbc_oracle/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -401,30 +401,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "states:StartExecution", "Effect": "Allow", @@ -549,6 +525,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -655,19 +655,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"},{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\",\\"glueJobName\\":\\"test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-1--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-1-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\"}],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"ORACLE\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"mydb.123456789012.ap-southeast-2.rds.amazonaws.com\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"},{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\",\\"glueJobName\\":\\"test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-1--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-1-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\"}],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"ORACLE\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"mydb.123456789012.ap-southeast-2.rds.amazonaws.com\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -679,11 +679,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -691,11 +691,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/jdbc_postgresql/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/jdbc_postgresql/infra/dynamic/__snapshots__/stack.test.ts.snap index e4aa36b..33c1a6d 100644 --- a/source/packages/@ada/infra/src/connectors/sources/jdbc_postgresql/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/jdbc_postgresql/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -401,30 +401,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "states:StartExecution", "Effect": "Allow", @@ -549,6 +525,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -655,19 +655,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"},{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\",\\"glueJobName\\":\\"test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-1--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-1-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\"}],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"POSTGRESQL\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"mydb.123456789012.ap-southeast-2.rds.amazonaws.com\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"},{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\",\\"glueJobName\\":\\"test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-1--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-1-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\"}],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"POSTGRESQL\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"mydb.123456789012.ap-southeast-2.rds.amazonaws.com\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -679,11 +679,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -691,11 +691,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/jdbc_sqlserver/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/jdbc_sqlserver/infra/dynamic/__snapshots__/stack.test.ts.snap index ce4474e..5da288e 100644 --- a/source/packages/@ada/infra/src/connectors/sources/jdbc_sqlserver/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/jdbc_sqlserver/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -401,30 +401,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "states:StartExecution", "Effect": "Allow", @@ -549,6 +525,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -655,19 +655,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromStateMachineExecution\\"}],\\"Default\\":\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\"},\\"GetCrawledTableDetailsFortest-d4688test-d45928737-start\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix\\":\\"test-d4688test-d45928737-start\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"},{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\",\\"glueJobName\\":\\"test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-1--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-1-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\"}],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"SQLSERVER\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"mydb.123456789012.ap-southeast-2.rds.amazonaws.com\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"},{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\",\\"glueJobName\\":\\"test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_parquet_data_type_map/1/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-1--global-ada_parquet_data_type_map-1/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-1--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-1-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[{\\"scriptId\\":\\"ada_parquet_data_type_map\\",\\"namespace\\":\\"global\\"}],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"SQLSERVER\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"mydb.123456789012.ap-southeast-2.rds.amazonaws.com\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -679,11 +679,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -691,11 +691,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/connectors/sources/mongodb/docker-image/requirements.txt b/source/packages/@ada/infra/src/connectors/sources/mongodb/docker-image/requirements.txt index e3e2ad0..1e83323 100644 --- a/source/packages/@ada/infra/src/connectors/sources/mongodb/docker-image/requirements.txt +++ b/source/packages/@ada/infra/src/connectors/sources/mongodb/docker-image/requirements.txt @@ -1,2 +1,2 @@ pymongo==4.3.3 -awswrangler==2.20.0 \ No newline at end of file +awswrangler==3.7.1 \ No newline at end of file diff --git a/source/packages/@ada/infra/src/connectors/sources/mongodb/infra/dynamic/__snapshots__/stack.test.ts.snap b/source/packages/@ada/infra/src/connectors/sources/mongodb/infra/dynamic/__snapshots__/stack.test.ts.snap index 3fb30a2..b93f40c 100644 --- a/source/packages/@ada/infra/src/connectors/sources/mongodb/infra/dynamic/__snapshots__/stack.test.ts.snap +++ b/source/packages/@ada/infra/src/connectors/sources/mongodb/infra/dynamic/__snapshots__/stack.test.ts.snap @@ -305,30 +305,6 @@ Object { "Effect": "Allow", "Resource": "*", }, - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -493,6 +469,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "glue:StartJobRun", @@ -569,7 +569,7 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportMongoDBData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"PrepareImportExternal\\",\\"States\\":{\\"PrepareImportExternal\\":{\\"Next\\":\\"ImportMongoDBData\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -589,19 +589,19 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"VerifyCrawlerStepFunctionOutput\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.CrawlerOutput.Output.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"DeconstructErrorFromCrawlerOutput\\"}],\\"Default\\":\\"GetCrawledTableDetailsForTableDetails\\"},\\"GetCrawledTableDetailsForTableDetails\\":{\\"Next\\":\\"PrepareTransformChain\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\"}}}},\\"PrepareTransformChain\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\",\\"updatePolicy\\":\\"REPLACE\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"MONGODB\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"docdb.ccs34r2qyjer.ap-southeast-2.docdb.amazonaws.com\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload\\":{\\"Payload\\":{\\"databaseName\\":\\"rawDB\\",\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"tablePrefix.$\\":\\"$.Payload.tablePrefix\\",\\"ingestionTimestamp.$\\":\\"$.Payload.ingestionTimestamp\\",\\"transformJobs\\":[{\\"scriptId\\":\\"ada_json_relationalise\\",\\"namespace\\":\\"global\\",\\"applicableClassifications\\":[\\"json\\"],\\"glueJobName\\":\\"test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0\\",\\"outputS3Target\\":{\\"bucket\\":\\"data-bucket\\",\\"key\\":\\"test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\"},\\"outputS3TargetPath\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/transform/global-ada_json_relationalise/0/ada_default_dataset/\\",\\"tempS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/test-stack/temp/test-d4688test-d45928737-transform-0--global-ada_json_relationalise-0/\\",\\"outputCrawlerName\\":\\"test-d4688test-d45928737-transform-0--crawler\\",\\"outputCrawlerTablePrefix\\":\\"test-d4688test-d45928737-transform-0-\\"}],\\"dataProduct\\":{\\"dataProductId\\":\\"test-data-product\\",\\"domainId\\":\\"test-domain\\",\\"name\\":\\"Test\\",\\"infrastructureStatus\\":\\"PROVISIONING\\",\\"dataStatus\\":\\"NO_DATA\\",\\"dataSets\\":{},\\"tags\\":[],\\"enableAutomaticTransforms\\":true,\\"enableAutomaticPii\\":false,\\"transforms\\":[],\\"updateTrigger\\":{\\"triggerType\\":\\"ON_DEMAND\\",\\"updatePolicy\\":\\"REPLACE\\"},\\"parentDataProducts\\":[],\\"childDataProducts\\":[],\\"sourceType\\":\\"MONGODB\\",\\"sourceDetails\\":{\\"databaseEndpoint\\":\\"docdb.ccs34r2qyjer.ap-southeast-2.docdb.amazonaws.com\\"}}}}}},\\"StartTransformations\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"IsTransformRemaining?\\"},\\"PrepareNextTransform\\":{\\"Next\\":\\"StartTransformations\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::lambda:invoke\\",\\"Parameters\\":{\\"FunctionName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Payload.$\\":\\"$\\"}},\\"GetCrawledTransformOutputTableDetails\\":{\\"Next\\":\\"PrepareNextTransform\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -613,11 +613,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", + ":states:ap-southeast-1:1111111111:stateMachine:glueCrawlerStateMachine\\"}},\\"RunTransformJobs\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutputs\\",\\"Next\\":\\"CrawlTransformOutput\\",\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\",\\"Iterator\\":{\\"StartAt\\":\\"RunTransformJob\\",\\"States\\":{\\"RunTransformJob\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.currentTransformJobOutput\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}},\\"ItemsPath\\":\\"$.Payload.currentResolvedTransformJobs\\"},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::glue:startJobRun.sync\\",\\"Parameters\\":{\\"JobName.$\\":\\"$.glueJobName\\",\\"Arguments\\":{\\"--INPUT_TABLE_NAME.$\\":\\"$.inputTableName\\",\\"--OUTPUT_S3_PATH.$\\":\\"$.outputS3TargetPath\\",\\"--DATABASE_NAME\\":\\"rawDB\\",\\"--DOMAIN_ID\\":\\"test-domain\\",\\"--DATA_PRODUCT_ID\\":\\"test-data-product\\",\\"--TEMP_S3_PATH.$\\":\\"$.tempS3Path\\"}}}}}},\\"IsTransformRemaining?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.transformJobIndex\\",\\"NumericLessThanPath\\":\\"$.Payload.transformJobCount\\",\\"Next\\":\\"RunTransformJobs\\"}],\\"Default\\":\\"IsAutomaticPiiEnabled?\\"},\\"IsAutomaticPiiEnabled?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.dataProduct.enableAutomaticPii\\",\\"BooleanEquals\\":true,\\"Next\\":\\"GeneratePiiQuery\\"}],\\"Default\\":\\"NotifyForSuccess\\"},\\"NotifyForSuccess\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -625,11 +625,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":events:ap-southeast-1:1111111111:event-bus/eventBus\\",\\"Source\\":\\"ada.data-products\\"}]}},\\"GetPiiResultsFromAthena\\":{\\"Next\\":\\"NotifyForSuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.tableDetails\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"executePiiDetectionOutput.$\\":\\"$.Payload.executePiiDetectionOutput\\"}}},\\"ExecutePiiQueryForAllTables\\":{\\"Type\\":\\"Map\\",\\"ResultPath\\":\\"$.Payload.executePiiDetectionOutput\\",\\"Next\\":\\"GetPiiResultsFromAthena\\",\\"InputPath\\":\\"$.Payload.generatePiiQueryOutput.piiQuery\\",\\"Parameters\\":{\\"contextIndex.$\\":\\"$$.Map.Item.Index\\",\\"query.$\\":\\"$$.Map.Item.Value\\",\\"callingUser\\":{\\"userId\\":\\"test-user\\",\\"groups\\":[\\"admin\\",\\"analyst\\"],\\"username\\":\\"test-user@example.com\\"},\\"outputS3Path\\":\\"s3://data-bucket/test-domain/test-data-product/_pii-detection-output\\"},\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Iterator\\":{\\"StartAt\\":\\"IsQueryNotEmpty?\\",\\"States\\":{\\"IsQueryNotEmpty?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Not\\":{\\"Variable\\":\\"$.query\\",\\"StringEquals\\":\\"\\"},\\"Next\\":\\"ExecuteQueryForPIIDetection\\"}],\\"Default\\":\\"SkipPiiDetection\\"},\\"SkipPiiDetection\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"piiDetectionSkipped\\":true},\\"End\\":true},\\"ExecuteQueryForPIIDetection\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, - ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + ":states:::states:startExecution.sync:2\\",\\"Parameters\\":{\\"Input.$\\":\\"$\\",\\"StateMachineArn\\":\\"arn:aws:states:us-east-1:123456789012:stateMachine:TestStateMachine\\"}}}}},\\"GeneratePiiQuery\\":{\\"Next\\":\\"ExecutePiiQueryForAllTables\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"NotifyForError\\"}],\\"Type\\":\\"Task\\",\\"ResultPath\\":\\"$.Payload.generatePiiQueryOutput\\",\\"Resource\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"Parameters\\":{\\"Payload\\":{\\"tableDetails.$\\":\\"$.Payload.tableDetails\\",\\"athenaUtilitiesLambdaName\\":\\"arn:aws:lambda:ap-southeast-1:1111111111:test\\",\\"databaseName\\":\\"rawDB\\"}}},\\"NotifyForError\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, diff --git a/source/packages/@ada/infra/src/generator/openapi/generate-spec/README.md b/source/packages/@ada/infra/src/generator/openapi/generate-spec/README.md index beb40f0..95045f0 100644 --- a/source/packages/@ada/infra/src/generator/openapi/generate-spec/README.md +++ b/source/packages/@ada/infra/src/generator/openapi/generate-spec/README.md @@ -1,7 +1,7 @@ # Generate OpenAPI Spec Given that the @ada/infra package depends on @ada/api package to fully build, but the OpenAPI spec for -the @ada/api pacakge is derived from definitions in @ada/infra package, we use jest mocking to +the @ada/api package is derived from definitions in @ada/infra package, we use jest mocking to virtualize and circumvent this dependency when generating the OpenAPI spec for @ada/api package. ## Notes diff --git a/source/packages/@ada/infra/src/generator/openapi/generate-spec/generate.ts b/source/packages/@ada/infra/src/generator/openapi/generate-spec/generate.ts index 0ef1f10..7ddefdd 100644 --- a/source/packages/@ada/infra/src/generator/openapi/generate-spec/generate.ts +++ b/source/packages/@ada/infra/src/generator/openapi/generate-spec/generate.ts @@ -49,6 +49,12 @@ jest.mock('@aws-cdk/aws-lambda-python-alpha/lib/bundling', () => ({ }, })); +jest.mock('axios', () => ({ + axios: { + post: () => {}, + }, +})); + test('generate openapi spec file', async () => { console.log('generating openapi spec...'); const outputFile = process.env.OPENAPI_SPEC_FILE; diff --git a/source/packages/@ada/infra/src/generator/openapi/generate-spec/jest.config.generate-spec.ts b/source/packages/@ada/infra/src/generator/openapi/generate-spec/jest.config.generate-spec.ts index fcf5c97..aa0354e 100644 --- a/source/packages/@ada/infra/src/generator/openapi/generate-spec/jest.config.generate-spec.ts +++ b/source/packages/@ada/infra/src/generator/openapi/generate-spec/jest.config.generate-spec.ts @@ -2,35 +2,17 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import createBaseConfig from '../../../../jest.config.base'; +import createConfig from '../../../../jest.config.base'; /* eslint-enable: sort-imports */ import * as path from 'path'; -import type { Config } from '@jest/types'; -/* eslint-disable */ -const baseConfig = createBaseConfig({ - disableCustomSetupScript: true, -}); - -export const config: Config.InitialOptions = { - ...baseConfig, +export const baseConfig = createConfig({ + displayName: "openapi-generate-spec", rootDir: path.resolve(__dirname, '../../../'), - displayName: path.basename(__dirname), testTimeout: 30000, silent: false, // only run for our generator file testMatch: [require.resolve('./generate')], - globals: { - ...(baseConfig.globals || {}), - 'ts-jest': { - ...(((baseConfig.globals || {})['ts-jest'] as object) || {}), - // https://huafu.github.io/ts-jest/user/config/isolatedModules - // Prevent type-checking for generating api client since infra package references api code. - // Types are somewhat checked when client is actually compiled so this is moderately safe to assume types are checked - // within context of generating the api schema / client - isolatedModules: true, - }, - }, collectCoverageFrom: [ '**/*.ts', '!**/node_modules/**', @@ -42,6 +24,13 @@ export const config: Config.InitialOptions = { '!**/handler/**', '!**/handlers/**', ] -}; +}); + +const config = { + ...baseConfig, + setupFilesAfterEnv: [ + 'jest-extended', + ], +} export default config; diff --git a/source/packages/@ada/infra/src/jest.config.ts b/source/packages/@ada/infra/src/jest.config.ts index 93cdf4d..db2278e 100644 --- a/source/packages/@ada/infra/src/jest.config.ts +++ b/source/packages/@ada/infra/src/jest.config.ts @@ -1,18 +1,19 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ -import baseConfig from '../jest.config.base'; -import type { Config } from '@jest/types'; +/* eslint-disable: sort-imports */ +// must be imported before any aliases +import createConfig from '../jest.config.base'; +/* eslint-enable: sort-imports */ -export const config: Config.InitialOptions = { - ...baseConfig(), - rootDir: __dirname, +export const config = createConfig({ displayName: 'root', + rootDir: __dirname, testPathIgnorePatterns: [ '/node_modules/', '/connectors/', '/services/', '/generator/openapi/' ], -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/nested-stacks/__snapshots__/cognito-auth-stack.test.ts.snap b/source/packages/@ada/infra/src/nested-stacks/__snapshots__/cognito-auth-stack.test.ts.snap index 863611c..f21edc5 100644 --- a/source/packages/@ada/infra/src/nested-stacks/__snapshots__/cognito-auth-stack.test.ts.snap +++ b/source/packages/@ada/infra/src/nested-stacks/__snapshots__/cognito-auth-stack.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-CognitoAuth) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-CognitoAuth) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaCognitoAuthUserPoolBD7CD0F7Arn": Object { "Value": Object { diff --git a/source/packages/@ada/infra/src/nested-stacks/__snapshots__/common-stack.test.ts.snap b/source/packages/@ada/infra/src/nested-stacks/__snapshots__/common-stack.test.ts.snap index ce87023..aaaf2d5 100644 --- a/source/packages/@ada/infra/src/nested-stacks/__snapshots__/common-stack.test.ts.snap +++ b/source/packages/@ada/infra/src/nested-stacks/__snapshots__/common-stack.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-CommonStack) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-CommonStack) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaCommonStackAccessLogBucketB5B66FEDArn": Object { "Value": Object { @@ -322,6 +322,7 @@ Object { }, Object { "Action": Array [ + "s3:PutBucketPolicy", "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", @@ -493,6 +494,7 @@ Object { }, Object { "Action": Array [ + "s3:PutBucketPolicy", "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", @@ -1082,7 +1084,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1244,6 +1246,9 @@ Object { "UpdateReplacePolicy": "Delete", }, "InternalTokenSecrectSecretAutoRotateSecret83D34BCD": Object { + "DependsOn": Array [ + "InternalTokenSecrectRotationLambdaInvokeN0A2GKfZP0JmDqDEVhhu6A0TUv3NyNbk4YMFKNc83FC692A", + ], "Properties": Object { "RotateImmediatelyOnUpdate": false, "RotationLambdaARN": Object { @@ -1253,7 +1258,7 @@ Object { ], }, "RotationRules": Object { - "AutomaticallyAfterDays": 90, + "ScheduleExpression": "rate(90 days)", }, "SecretId": Object { "Ref": "InternalTokenSecrectSecret3C76F640", @@ -1324,7 +1329,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", diff --git a/source/packages/@ada/infra/src/nested-stacks/__snapshots__/kms-stack.test.ts.snap b/source/packages/@ada/infra/src/nested-stacks/__snapshots__/kms-stack.test.ts.snap old mode 100644 new mode 100755 index 6a2c37d..30eac37 --- a/source/packages/@ada/infra/src/nested-stacks/__snapshots__/kms-stack.test.ts.snap +++ b/source/packages/@ada/infra/src/nested-stacks/__snapshots__/kms-stack.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-KMSStack) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-KMSStack) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaKMSStackKeyBucketKeyAthenaOutputBucket0D9D1563Arn": Object { "Value": Object { @@ -20,6 +20,14 @@ Object { ], }, }, + "AdaKMSStackKeyBucketKeyDeploymentScriptBucket915B124DArn": Object { + "Value": Object { + "Fn::GetAtt": Array [ + "KeyBucketKeyDeploymentScriptBucket6F2C2BAC", + "Arn", + ], + }, + }, "AdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn": Object { "Value": Object { "Fn::GetAtt": Array [ @@ -367,6 +375,67 @@ Object { }, "Type": "AWS::KMS::Alias", }, + "KeyBucketKeyDeploymentScriptBucket6F2C2BAC": Object { + "DeletionPolicy": "Delete", + "Metadata": Object { + "cfn_nag": Object { + "rules_to_suppress": Array [ + Object { + "id": "W12", + "reason": "kms:* and account principal required to prevent cirucular dependencies and to prevent unmanageable keys - recommended https://github.com/aws/aws-cdk/tree/main/packages/%40aws-cdk/aws-kms#key-policies", + }, + ], + }, + }, + "Properties": Object { + "Description": "Key for bucket DeploymentScriptBucket", + "EnableKeyRotation": true, + "KeyPolicy": Object { + "Statement": Array [ + Object { + "Action": "kms:*", + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::1111111111:root", + ], + ], + }, + }, + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + }, + "Type": "AWS::KMS::Key", + "UpdateReplacePolicy": "Delete", + }, + "KeyBucketKeyDeploymentScriptBucketAlias65D31DCD": Object { + "Properties": Object { + "AliasName": "alias/ada/BucketKey-DeploymentScriptBucket/ghashx", + "TargetKeyId": Object { + "Fn::GetAtt": Array [ + "KeyBucketKeyDeploymentScriptBucket6F2C2BAC", + "Arn", + ], + }, + }, + "Type": "AWS::KMS::Alias", + }, "KeyBucketKeyScriptsBucketAlias12B17B18": Object { "Properties": Object { "AliasName": "alias/ada/BucketKey-ScriptsBucket/ghashx", diff --git a/source/packages/@ada/infra/src/nested-stacks/__snapshots__/static-website-stack.test.ts.snap b/source/packages/@ada/infra/src/nested-stacks/__snapshots__/static-website-stack.test.ts.snap index 90589e5..b605883 100644 --- a/source/packages/@ada/infra/src/nested-stacks/__snapshots__/static-website-stack.test.ts.snap +++ b/source/packages/@ada/infra/src/nested-stacks/__snapshots__/static-website-stack.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-Website) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-Website) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaWebsiteCloudfrontDistributionCFDistribution28056574DomainName": Object { "Value": Object { @@ -337,7 +337,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1174,6 +1174,7 @@ Object { }, Object { "Action": Array [ + "s3:PutBucketPolicy", "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", diff --git a/source/packages/@ada/infra/src/services/administration/api/handlers/__fixtures__/budget.ts b/source/packages/@ada/infra/src/services/administration/api/handlers/__fixtures__/budget.ts new file mode 100644 index 0000000..9f2e541 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/api/handlers/__fixtures__/budget.ts @@ -0,0 +1,107 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { + NotFoundException, +} from '@aws-sdk/client-budgets'; + +export const BUDGET_NAME = 'AWS_Solution_Ada_ap-southeast-1'; +export const ACCOUNT_ID = '11111111111'; + +export const NOT_FOUND_ERROR = new NotFoundException({ + message: 'Budget not found', + $metadata: {}, +}); + +export const BUDGET_OUTPUT = { + Budget: { + BudgetName: BUDGET_NAME, + BudgetType: 'COST', + TimeUnit: 'MONTHLY', + BudgetLimit: { + Amount: "300.00", + Unit: 'USD', + }, + CalculatedSpend: { + ActualSpend: { + Amount: "120.00", + Unit: 'USD', + }, + ForecastedSpend: { + Amount: "1000.00", + Unit: 'USD', + } + } + } +} + +export const BUDGET_NOTIFICATIONS_OUTPUT = { + Notifications: [ + { + ComparisonOperator: 'GREATER_THAN', + NotificationState: 'OK', + NotificationType: 'ACTUAL', + Threshold: 100 + }, + { + ComparisonOperator: 'GREATER_THAN', + NotificationState: 'ALARM', + NotificationType: 'ACTUAL', + Threshold: 30 + }, + { + ComparisonOperator: 'GREATER_THAN', + NotificationState: 'ALARM', + NotificationType: 'ACTUAL', + Threshold: 60 + } + ] +} + +export const BUDGET_NOTIFICATIONS_EMPTY = { +} + +export const BUDGET_SUBSCRIBERS_OUTPUT = { + "Subscribers": [ + { + Address: "test@example.com", + SubscriptionType: "EMAIL" + }, + { + Address: "test@domain.example.com", + SubscriptionType: "EMAIL", + } + ] +} + +export const EXPECTED_GET_BUDGET_OUTPUT = { + budgetLimit: 300, + actualSpend: 120, + forecastedSpend: 1000, + softNotifications: [ + { + state: "ALARM", + threshold: 30 + }, + { + state: "ALARM", + threshold: 60 + }, + { + state: "OK", + threshold: 100 + }, + ], + subscriberList: ['test@example.com', 'test@domain.example.com'] +} + +export const BUDGET_INPUT = { + budgetLimit: 400, + subscriberList: ['test@example.com', 'test1@domain.example.com'], + softNotifications: [40, 80, 100], +} + +export const BUDGET_INPUT_ONLY_BUDGET_LIMIT_CHANGE = { + budgetLimit: 400, + subscriberList: ['test@example.com', 'test@domain.example.com'], + softNotifications: [30, 60, 100], +} \ No newline at end of file diff --git a/source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/delete-budget.test.ts b/source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/delete-budget.test.ts new file mode 100644 index 0000000..be02220 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/delete-budget.test.ts @@ -0,0 +1,53 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { mockClient }from 'aws-sdk-client-mock'; +import { + BudgetsClient, + DeleteBudgetCommand, +} from '@aws-sdk/client-budgets'; +import { DEFAULT_CALLER } from '../../../../../common/services/testing/default-entities'; +import { buildApiRequest } from '../../../../api/api-gateway'; +import { handler } from '../delete-budget'; +import { BUDGET_NAME, NOT_FOUND_ERROR } from '../__fixtures__/budget'; + +const mockBudgetsClient = mockClient(BudgetsClient); + +describe('delete-budget', () => { + beforeEach(() => { + mockBudgetsClient.reset(); + }); + + it('should invoke the delete-budget lambda', async () => { + mockBudgetsClient.on(DeleteBudgetCommand).resolves({}); + const response = await handler(buildApiRequest(DEFAULT_CALLER, {}) as any, null); + expect(response.statusCode).toBe(200); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + budgetName: BUDGET_NAME, + message: 'Budget deleted successfully' + }), + ); + }); + + it('should return 404 error when budget not found', async () => { + mockBudgetsClient.on(DeleteBudgetCommand).rejects(NOT_FOUND_ERROR); + const response = await handler(buildApiRequest(DEFAULT_CALLER, {}) as any, null); + expect(response.statusCode).toBe(404); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Budget not found', + }), + ); + }); + + it('should return 400 error when error occurs', async () => { + mockBudgetsClient.on(DeleteBudgetCommand).rejects(new Error('Error')); + const response = await handler(buildApiRequest(DEFAULT_CALLER, {}) as any, null); + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in deleteBudget' + }), + ); + }); +}); diff --git a/source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/get-budget.test.ts b/source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/get-budget.test.ts new file mode 100644 index 0000000..d5a11a4 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/get-budget.test.ts @@ -0,0 +1,105 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { mockClient } from 'aws-sdk-client-mock'; +import { + BudgetsClient, + DescribeBudgetCommand, + DescribeNotificationsForBudgetCommand, + DescribeSubscribersForNotificationCommand, +} from '@aws-sdk/client-budgets'; +import { DEFAULT_CALLER } from '../../../../../common/services/testing/default-entities'; +import { buildApiRequest } from '../../../../api/api-gateway'; +import { handler } from '../get-budget'; +import { BUDGET_OUTPUT, + EXPECTED_GET_BUDGET_OUTPUT, + BUDGET_NOTIFICATIONS_OUTPUT, + BUDGET_SUBSCRIBERS_OUTPUT, + BUDGET_NOTIFICATIONS_EMPTY, + NOT_FOUND_ERROR, +} from '../__fixtures__/budget'; + +const mockBudgetsClient = mockClient(BudgetsClient); + +describe('get-budget', () => { + beforeEach(() => { + mockBudgetsClient.reset(); + }); + + it('should invoke the get-budget lambda and return the budget', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).resolves(BUDGET_NOTIFICATIONS_OUTPUT); + mockBudgetsClient.on(DescribeSubscribersForNotificationCommand).resolves(BUDGET_SUBSCRIBERS_OUTPUT); + const response = await handler(buildApiRequest(DEFAULT_CALLER, {}) as any, null); + expect(response.statusCode).toBe(200); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + ...EXPECTED_GET_BUDGET_OUTPUT + }), + ); + }); + + it('should return the budget with empty notification', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).resolves(BUDGET_NOTIFICATIONS_EMPTY); + const response = await handler(buildApiRequest(DEFAULT_CALLER, {}) as any, null); + expect(response.statusCode).toBe(200); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + ...EXPECTED_GET_BUDGET_OUTPUT, + softNotifications: [], + subscriberList: [], + }), + ); + }); + + it('should returns 404 when budget not found', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).rejects(NOT_FOUND_ERROR); + const response = await handler(buildApiRequest(DEFAULT_CALLER, {}) as any, null); + expect(response.statusCode).toBe(404); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Budget not found', + }), + ); + }); + + it('should returns 400 when DescribeBudgetCommand throws error', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).rejects(new Error('Error')); + const response = await handler(buildApiRequest(DEFAULT_CALLER, {}) as any, null); + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in getBudget', + }), + ); + }); + + it('should returns 400 when DescribeNotificationsForBudgetCommand throws error', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).resolves(BUDGET_NOTIFICATIONS_OUTPUT); + mockBudgetsClient.on(DescribeSubscribersForNotificationCommand) + .resolvesOnce(BUDGET_SUBSCRIBERS_OUTPUT) + .rejectsOnce(new Error('Error')) + .resolves(BUDGET_SUBSCRIBERS_OUTPUT) + const response = await handler(buildApiRequest(DEFAULT_CALLER, {}) as any, null); + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in getBudget', + }), + ); + }); + + it('should returns 400 when DescribeNotificationsForBudgetCommand throws error', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).rejects(new Error('Error')); + const response = await handler(buildApiRequest(DEFAULT_CALLER, {}) as any, null); + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in getBudget', + }), + ); + }); +}); + diff --git a/source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/post-budget.test.ts b/source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/post-budget.test.ts new file mode 100644 index 0000000..3df0605 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/api/handlers/__tests__/post-budget.test.ts @@ -0,0 +1,258 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { mockClient } from 'aws-sdk-client-mock'; +import { + BudgetsClient, + CreateBudgetCommand, + CreateNotificationCommand, + CreateSubscriberCommand, + DescribeBudgetCommand, + DescribeNotificationsForBudgetCommand, + DescribeSubscribersForNotificationCommand, + UpdateBudgetCommand, + DeleteNotificationCommand, + DeleteSubscriberCommand, +} from '@aws-sdk/client-budgets'; +import { apiGatewayEvent } from '@ada/microservice-test-common'; +import { handler } from '../post-budget'; +import { + ACCOUNT_ID, + BUDGET_NAME, + BUDGET_INPUT, + BUDGET_INPUT_ONLY_BUDGET_LIMIT_CHANGE, + BUDGET_OUTPUT, + BUDGET_NOTIFICATIONS_OUTPUT, + BUDGET_SUBSCRIBERS_OUTPUT, + NOT_FOUND_ERROR, +} from '../__fixtures__/budget'; +import { BUDGET_COST_FILTER, BUDGET_CURRENCY } from '../../../constant'; + +const mockBudgetsClient = mockClient(BudgetsClient); + +describe('post-budget', () => { + beforeEach(() => { + mockBudgetsClient.reset(); + }); + + it('should invoke the post-budget lambda and create the budget if budget not found', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).rejects(NOT_FOUND_ERROR); + mockBudgetsClient.on(CreateBudgetCommand).resolves({}); + const response = await callHandler(); + + expect(response.statusCode).toBe(200); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + budgetName: BUDGET_NAME, + message: 'Budget created successfully' + }), + ); + }); + + it('should update the budget if budget exists', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).resolves(BUDGET_NOTIFICATIONS_OUTPUT); + mockBudgetsClient.on(DescribeSubscribersForNotificationCommand).resolves(BUDGET_SUBSCRIBERS_OUTPUT); + mockBudgetsClient.on(UpdateBudgetCommand).resolves({}); + mockBudgetsClient.on(CreateNotificationCommand).resolves({}); + mockBudgetsClient.on(CreateSubscriberCommand).resolves({}); + mockBudgetsClient.on(DeleteNotificationCommand).resolves({}); + mockBudgetsClient.on(DeleteSubscriberCommand).resolves({}); + const response = await callHandler(); + + expect(response.statusCode).toBe(200); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + budgetName: BUDGET_NAME, + message: 'Budget updated successfully' + }), + ); + + expect(mockBudgetsClient).toHaveReceivedCommandWith(UpdateBudgetCommand, { + AccountId: ACCOUNT_ID, + NewBudget: { + // Budget + BudgetName: BUDGET_NAME, + BudgetLimit: { + // Spend + Amount: String(BUDGET_INPUT.budgetLimit), + Unit: BUDGET_CURRENCY, + }, + CostFilters: { + // CostFilters + TagKeyValue: [ + // DimensionValues + BUDGET_COST_FILTER, + ], + }, + TimeUnit: 'MONTHLY', + BudgetType: 'COST', + } + }); + + expect(mockBudgetsClient).toHaveReceivedCommandTimes(CreateNotificationCommand, 2); + expect(mockBudgetsClient).toHaveReceivedCommandTimes(DeleteNotificationCommand, 2); + + expect(mockBudgetsClient).toHaveReceivedCommandTimes(CreateSubscriberCommand, 1); + expect(mockBudgetsClient).toHaveReceivedCommandTimes(DeleteSubscriberCommand, 1); + }); + + it('should update the budget without updating notifications if budget exists and budget notifications and subscribers unchanged', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).resolves(BUDGET_NOTIFICATIONS_OUTPUT); + mockBudgetsClient.on(DescribeSubscribersForNotificationCommand).resolves(BUDGET_SUBSCRIBERS_OUTPUT); + mockBudgetsClient.on(UpdateBudgetCommand).resolves({}); + const response = await callHandler(BUDGET_INPUT_ONLY_BUDGET_LIMIT_CHANGE); + + expect(response.statusCode).toBe(200); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + budgetName: BUDGET_NAME, + message: 'Budget updated successfully' + }), + ); + + expect(mockBudgetsClient).toHaveReceivedCommandWith(UpdateBudgetCommand, { + AccountId: ACCOUNT_ID, + NewBudget: { + // Budget + BudgetName: BUDGET_NAME, + BudgetLimit: { + // Spend + Amount: String(400), + Unit: BUDGET_CURRENCY, + }, + CostFilters: { + // CostFilters + TagKeyValue: [ + // DimensionValues + BUDGET_COST_FILTER, + ], + }, + TimeUnit: 'MONTHLY', + BudgetType: 'COST', + } + }); + + expect(mockBudgetsClient).toHaveReceivedCommandTimes(CreateNotificationCommand, 0); + expect(mockBudgetsClient).toHaveReceivedCommandTimes(DeleteNotificationCommand, 0); + + expect(mockBudgetsClient).toHaveReceivedCommandTimes(CreateSubscriberCommand, 0); + expect(mockBudgetsClient).toHaveReceivedCommandTimes(DeleteSubscriberCommand, 0); + }); + + it('should return 400 error when DescribeBudgetCommand throws error', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).rejects(new Error('Error')); + + const response = await callHandler(); + + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in postBudget' + }), + ); + }); + + it('should return 400 error when CreateBudgetCommand throws error', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).rejects(NOT_FOUND_ERROR); + mockBudgetsClient.on(CreateBudgetCommand).rejects(new Error('Error')); + + const response = await callHandler(); + + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in postBudget' + }), + ); + }); + + it('should return 400 error when DescribeNotificationsForBudgetCommand throws error', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).rejects(new Error('Error')); + + const response = await callHandler(); + + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in postBudget' + }), + ); + }); + + it('should return 400 error when DescribeSubscribersForNotificationCommand throws error', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).resolves(BUDGET_NOTIFICATIONS_OUTPUT); + mockBudgetsClient.on(DescribeSubscribersForNotificationCommand).rejects(new Error('Error')); + + const response = await callHandler(); + + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in postBudget' + }), + ); + }); + + it('should return 400 error when UpdateBudgetCommand throws error', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).resolves(BUDGET_NOTIFICATIONS_OUTPUT); + mockBudgetsClient.on(DescribeSubscribersForNotificationCommand).resolves(BUDGET_SUBSCRIBERS_OUTPUT); + mockBudgetsClient.on(UpdateBudgetCommand).rejects(new Error('Error')); + + const response = await callHandler(); + + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in postBudget' + }), + ); + }); + + it('should return 400 error when UpdateBudgetCommand throws error', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).resolves(BUDGET_NOTIFICATIONS_OUTPUT); + mockBudgetsClient.on(DescribeSubscribersForNotificationCommand).resolves(BUDGET_SUBSCRIBERS_OUTPUT); + mockBudgetsClient.on(UpdateBudgetCommand).resolves({}); + mockBudgetsClient.on(CreateNotificationCommand).rejects(new Error('Error')); + + const response = await callHandler(); + + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in postBudget' + }), + ); + }); + + it('should return 400 error when DeleteNotificationCommand throws error', async () => { + mockBudgetsClient.on(DescribeBudgetCommand).resolves(BUDGET_OUTPUT); + mockBudgetsClient.on(DescribeNotificationsForBudgetCommand).resolves(BUDGET_NOTIFICATIONS_OUTPUT); + mockBudgetsClient.on(DescribeSubscribersForNotificationCommand).resolves(BUDGET_SUBSCRIBERS_OUTPUT); + mockBudgetsClient.on(UpdateBudgetCommand).resolves({}); + mockBudgetsClient.on(DeleteNotificationCommand).rejects(new Error('Error')); + + const response = await callHandler(); + + expect(response.statusCode).toBe(400); + expect(JSON.parse(response.body)).toEqual( + expect.objectContaining({ + message: 'Error in postBudget' + }), + ); + }); +}); + +const callHandler = async (budget?: any) => { + // return handler(buildApiRequest(DEFAULT_CALLER, { + // body: BUDGET_INPUT, + // }) as any, null) + return handler(apiGatewayEvent({ + body: JSON.stringify(budget || BUDGET_INPUT), + requestContext: { accountId: ACCOUNT_ID }, + }), null); +} diff --git a/source/packages/@ada/infra/src/services/administration/api/handlers/delete-budget.ts b/source/packages/@ada/infra/src/services/administration/api/handlers/delete-budget.ts new file mode 100644 index 0000000..71d5577 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/api/handlers/delete-budget.ts @@ -0,0 +1,52 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { ApiLambdaHandler, ApiResponse } from '@ada/api-gateway'; +import { + BudgetsClient, DeleteBudgetCommand, + DeleteBudgetCommandInput, NotFoundException, +} from '@aws-sdk/client-budgets'; +import { getBudgetName } from '../../constant'; + +const REGION = process.env.AWS_REGION || ''; +const BUDGET_NAME = getBudgetName(REGION); + +/** + * Handler for deleting a Budget + * @param event api gateway request + * @param context lambda context + */ +export const handler = ApiLambdaHandler.for( + 'deleteAdministrationBudgets', + async (_request, _callingUser, event, { log }) => { + try { + const client = new BudgetsClient({ region: process.env.AWS_REGION }); + const accountId = event.requestContext.accountId; + + const input: DeleteBudgetCommandInput = { + AccountId: accountId, + BudgetName: BUDGET_NAME, + } + + log.info('DeleteBudgetCommand input', input); + const output = await client.send(new DeleteBudgetCommand(input)); + log.info('DeleteBudgetCommand output', output); + + return ApiResponse.success({ + budgetName: BUDGET_NAME, + message: 'Budget deleted successfully' + }); + } catch (e: any) { + if(e instanceof NotFoundException) { + log.info('Budget not found', e); + return ApiResponse.notFound({ + message: 'Budget not found', + }); + } + + log.error('DeleteBudgetCommand error', e); + return ApiResponse.badRequest({ + message: 'Error in deleteBudget' + }); + } + }, +); diff --git a/source/packages/@ada/infra/src/services/administration/api/handlers/deploy-superset.ts b/source/packages/@ada/infra/src/services/administration/api/handlers/deploy-superset.ts new file mode 100755 index 0000000..66640de --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/api/handlers/deploy-superset.ts @@ -0,0 +1,35 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import * as AWS from 'aws-sdk'; +import { ApiError } from '@ada/api'; +import { ApiLambdaHandler, ApiResponse } from '@ada/api-gateway'; +import { SupersetDeployResponse } from '@ada/api-client'; + +const codebuild = new AWS.CodeBuild(); +/** + * Handler for starting to deploy Apache Superset + */ +export const handler = ApiLambdaHandler.for( + 'postAdministrationDeploySuperset', + async (): Promise> => { + const codeBuildName = process.env.DEPLOYMENT_CODEBUILD_PROJECT_NAME ?? ''; + console.log(`Starting build ${codeBuildName}`); + try { + const build = await codebuild + .startBuild({ + projectName: codeBuildName, + }) + .promise(); + console.log(`Started build ${codeBuildName}`); + console.log(build); + return ApiResponse.success({ + message: `Visualisation solution deployment started. Please monitor progress in CodeBuild Project ${codeBuildName} from the CodeBuild console.`, + }); + } catch (e) { + console.log(e); + return ApiResponse.internalServerError({ + message: `Visualisation solution deployment failed to start. Please check status in CodeBuild Project ${codeBuildName} from the CodeBuild console.`, + }); + } + }, +); diff --git a/source/packages/@ada/infra/src/services/administration/api/handlers/get-budget.ts b/source/packages/@ada/infra/src/services/administration/api/handlers/get-budget.ts new file mode 100644 index 0000000..9e70383 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/api/handlers/get-budget.ts @@ -0,0 +1,145 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { ApiLambdaHandler, ApiResponse } from '@ada/api-gateway'; +import { + BudgetsClient, + DescribeBudgetCommand, + DescribeBudgetCommandInput, + DescribeNotificationsForBudgetCommand, + DescribeNotificationsForBudgetCommandInput, + DescribeSubscribersForNotificationCommand, + DescribeSubscribersForNotificationCommandInput, + NotFoundException, +} from '@aws-sdk/client-budgets'; +import { Logger } from '@ada/infra-common/constructs/lambda/lambda-logger'; +import { + SUBSCRIPTION_TYPE, + getBudgetName, +} from '../../constant'; + +const REGION = process.env.AWS_REGION || ''; +const BUDGET_NAME = getBudgetName(REGION); + +export interface Notification { + threshold: number; + state: string; +} + +/** + * Handler for retrieving budget details + * @param event api gateway request + * @param context lambda context + */ +export const handler = ApiLambdaHandler.for( + 'getAdministrationBudgets', + async (_request, _callingUser, event, { log }) => { + try { + const client = new BudgetsClient({ region: process.env.AWS_REGION }); + const accountId = event.requestContext.accountId; + const budget = await getBudget(client, accountId, log); + + if (budget) { + const { softNotifications, subscriberList } = await getBudgetNotificationSubscribers(client, accountId, log); + + const budgetOutput = { + budgetLimit: Number(budget.BudgetLimit?.Amount || 0), + actualSpend: Number(budget.CalculatedSpend?.ActualSpend?.Amount || 0), + forecastedSpend: Number(budget.CalculatedSpend?.ForecastedSpend?.Amount || 0), + softNotifications: softNotifications, + subscriberList: subscriberList, + } + + return ApiResponse.success(budgetOutput); + } + + return ApiResponse.notFound({ + message: 'Budget not found' + }); + } catch (e: any) { + log.error('getBudget error', e); + return ApiResponse.badRequest({ + message: 'Error in getBudget' + }); + } + }, +); + +export const getBudget = async (client: BudgetsClient, accountId: string, log: Logger) => { + try { + const input: DescribeBudgetCommandInput = { + AccountId: accountId, + BudgetName: BUDGET_NAME, + } + + log.info('DescribeBudgetCommand input', input); + const output = await client.send(new DescribeBudgetCommand(input)); + log.info('DescribeBudgetCommand output', output); + return output.Budget; + } catch (e: any) { + if (e instanceof NotFoundException) { + return null; + } + + throw e; + } +} + +const describeSubscribersForNotification = async (client: BudgetsClient, accountId: string, log: Logger, notification: DescribeSubscribersForNotificationCommandInput['Notification']) => { + const input: DescribeSubscribersForNotificationCommandInput = { + AccountId: accountId, + BudgetName: BUDGET_NAME, + Notification: notification, + } + + log.info('DescribeSubscribersForNotificationCommand input', input); + const output = client.send(new DescribeSubscribersForNotificationCommand(input)); + log.info('DescribeSubscribersForNotificationCommand output', output); + + return output; +} + +export const getBudgetNotificationSubscribers = async (client: BudgetsClient, accountId: string, log: Logger) => { + const input: DescribeNotificationsForBudgetCommandInput = { + AccountId: accountId, + BudgetName: BUDGET_NAME, + } + + log.info('DescribeNotificationsForBudgetCommand input', input); + const output = await client.send(new DescribeNotificationsForBudgetCommand(input)); + log.info('DescribeNotificationsForBudgetCommand output', output); + + if (output.Notifications && output.Notifications.length > 0) { + const promises = output.Notifications.filter(x => x.ComparisonOperator === 'GREATER_THAN' + && x.NotificationType === 'ACTUAL' + ).map((x) => { + return describeSubscribersForNotification(client, accountId, log, x); + }); + + const subscribersOutput = await Promise.all(promises); + + const subscriberList: string[] = []; + + subscribersOutput.forEach(x => { + if (x.Subscribers) { + x.Subscribers.forEach(s => { + if (s.SubscriptionType === SUBSCRIPTION_TYPE && s.Address && !subscriberList.includes(s.Address)) { + subscriberList.push(s.Address); + } + }) + } + }) + + return { + softNotifications: output.Notifications.map(x => ({ + threshold: x.Threshold || 0, + state: x.NotificationState || '' + })).filter(x => x.threshold > 0).sort((a, b) => a.threshold - b.threshold) as Notification[], + subscriberList, + } + } + + return { + softNotifications: [], + subscriberList: [], + }; +} diff --git a/source/packages/@ada/infra/src/services/administration/api/handlers/post-budget.ts b/source/packages/@ada/infra/src/services/administration/api/handlers/post-budget.ts new file mode 100644 index 0000000..13e9e83 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/api/handlers/post-budget.ts @@ -0,0 +1,348 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { ApiLambdaHandler, ApiResponse } from '@ada/api-gateway'; +import { BUDGET_COST_FILTER, BUDGET_CURRENCY, + NOTIFICATION_COMPARISON_OPERATOR, + NOTIFICATION_STATE, + NOTIFICATION_THRESHOLD_TYPE, + NOTIFICATION_TYPE, + SUBSCRIPTION_TYPE, + getBudgetName } from '../../constant'; +import { + Budget, + BudgetsClient, + CreateBudgetCommand, + CreateBudgetCommandInput, + CreateNotificationCommand, + CreateNotificationCommandInput, + CreateSubscriberCommand, + CreateSubscriberCommandInput, + DeleteNotificationCommand, + DeleteNotificationCommandInput, + DeleteSubscriberCommand, + DeleteSubscriberCommandInput, + UpdateBudgetCommand, + UpdateBudgetCommandInput +} from '@aws-sdk/client-budgets'; +import { BudgetInput } from '@ada/api-client'; +import { Logger } from '@ada/infra-common/constructs/lambda/lambda-logger'; +import { difference, flatten, intersection, isEqual } from 'lodash'; +import { getBudget, getBudgetNotificationSubscribers } from './get-budget'; + +const REGION = process.env.AWS_REGION || ''; +const BUDGET_NAME = getBudgetName(REGION); + +/** + * Handler for creating/updating a Budget + * @param event api gateway request + * @param context lambda context + */ +export const handler = ApiLambdaHandler.for( + 'postAdministrationBudgets', + async ({ body: budget }, _callingUser, event, { log }) => { + try { + const client = new BudgetsClient({ region: process.env.AWS_REGION }); + const accountId = event.requestContext.accountId; + + const oldBudget = await getBudget(client, accountId, log); + + if (oldBudget) { + await updateBudget(client, accountId, log, budget, oldBudget); + + return ApiResponse.success({ + budgetName: BUDGET_NAME, + message: 'Budget updated successfully', + }); + } + + await createBudget(client, accountId, log, budget); + return ApiResponse.success({ + budgetName: BUDGET_NAME, + message: 'Budget created successfully', + }); + } catch (e: any) { + log.error('Create/Update budget failed', e); + return ApiResponse.badRequest({ + message: 'Error in postBudget' + }); + } + }, +); + +const getNotifications = (budget: BudgetInput) => { + const notifications: CreateBudgetCommandInput['NotificationsWithSubscribers'] = []; + const subscribers: { SubscriptionType: string; Address: any; }[] = []; + + budget.subscriberList.forEach((item: any) => { + const subscriber = { + SubscriptionType: SUBSCRIPTION_TYPE, + Address: item, + }; + subscribers.push(subscriber); + }); + + budget.softNotifications.forEach((item: number) => { + const notification = { + // NotificationWithSubscribers + Notification: { + // Notification + NotificationType: NOTIFICATION_TYPE, + ComparisonOperator: NOTIFICATION_COMPARISON_OPERATOR, + ThresholdType: NOTIFICATION_THRESHOLD_TYPE, + NotificationState: NOTIFICATION_STATE, + Threshold: Number(item), + }, + Subscribers: subscribers, + }; + + notifications.push(notification); + }); + + return notifications; +} + +const createBudget = async (client: BudgetsClient, accountId: string, log: Logger, budget: BudgetInput) => { + const notifications = getNotifications(budget); + + const input: CreateBudgetCommandInput = { + AccountId: accountId, + Budget: { + // Budget + BudgetName: BUDGET_NAME, + BudgetLimit: { + // Spend + Amount: String(budget.budgetLimit), + Unit: BUDGET_CURRENCY, + }, + CostFilters: { + // CostFilters + TagKeyValue: [ + // DimensionValues + BUDGET_COST_FILTER, + ], + }, + TimeUnit: 'MONTHLY', + BudgetType: 'COST', + }, + NotificationsWithSubscribers: notifications, + }; + + log.info('CreateBudgetCommand input', input); + const command = new CreateBudgetCommand(input); + const response = await client.send(command); + log.info('CreateBudgetCommand output', response); + + return response; +} + +const updateBudget = async ( + client: BudgetsClient, + accountId: string, + log: Logger, + budget: BudgetInput, + _oldBudget: Budget) => { + // Handle Subscribers change + const input: UpdateBudgetCommandInput = { + AccountId: accountId, + NewBudget: { + // Budget + BudgetName: BUDGET_NAME, + BudgetLimit: { + // Spend + Amount: String(budget.budgetLimit), + Unit: BUDGET_CURRENCY, + }, + CostFilters: { + // CostFilters + TagKeyValue: [ + // DimensionValues + BUDGET_COST_FILTER, + ], + }, + TimeUnit: 'MONTHLY', + BudgetType: 'COST', + }, + }; + + log.info('UpdateBudgetCommand input', input); + const command = new UpdateBudgetCommand(input); + const response = await client.send(command); + log.info('UpdateBudgetCommand output', response); + + await updateBudgetNotificationSubscribers(client, accountId, log, budget); + + return response; +} + +const updateBudgetNotificationSubscribers = async (client: BudgetsClient, + accountId: string, + log: Logger, + budget: BudgetInput) => { + const { softNotifications: oldDetailedSoftNotifications, + subscriberList: oldSubscriberList } = await getBudgetNotificationSubscribers(client, accountId, log); + const { softNotifications, subscriberList } = budget; + + const oldSoftNotifications = oldDetailedSoftNotifications.map(x => x.threshold); + + if (!isEqual(oldSoftNotifications, softNotifications) || !isEqual(oldSubscriberList, subscriberList)) { + log.info('Updating Notifications and its Subscribers'); + + const notificationsToBeDeleted = difference(oldSoftNotifications, softNotifications); + if (notificationsToBeDeleted.length > 0) { + log.info('notificationsToBeDeleted:', notificationsToBeDeleted); + const promises = notificationsToBeDeleted.map(x => { + return deleteNotification(client, accountId, log, x); + }) + + const notificationsToBeDeletedOutput = await Promise.all(promises); + log.info('Notifications deleted', notificationsToBeDeletedOutput); + } + + const notificationsToBeAdded = difference(softNotifications, oldSoftNotifications); + if(notificationsToBeAdded.length > 0) { + log.info('notificationsToBeAdded:', notificationsToBeAdded) + const promises = notificationsToBeAdded.map(x => { + return createNotification(client, accountId, log, x, subscriberList); + }) + + const notificationsToBeAddedOutput = await Promise.all(promises); + log.info('Notifications added:', notificationsToBeAddedOutput); + } + + const notificationsRemain = intersection(softNotifications, oldSoftNotifications); + if(notificationsRemain.length > 0 && !isEqual(oldSubscriberList, subscriberList)) { + log.info('notificationsRemain', notificationsRemain) + const subscribersToBeAdded = difference(subscriberList, oldSubscriberList); + if(subscribersToBeAdded.length > 0) { + log.info('subscribersToBeAdded', subscribersToBeAdded); + const promises = flatten(notificationsRemain.map(n => subscribersToBeAdded.map(s => { + return createSubscriber(client, accountId, log, n, s); + }))); + + const subscribersToBeAddedOutput = await Promise.all(promises); + log.info('Subscribers added:', subscribersToBeAddedOutput); + } + + const subscribersToBeDeleted = difference(oldSubscriberList, subscriberList); + if(subscribersToBeDeleted.length > 0) { + log.info(`subscribersToBeDeleted: ${subscribersToBeDeleted}`); + const promises = flatten(notificationsRemain.map(n => subscribersToBeDeleted.map(s => { + return deleteSubscriber(client, accountId, log, n, s); + }))); + + const subscribersToBeDeletedOutput = await Promise.all(promises); + log.info(`Subscribers deleted: ${subscribersToBeDeletedOutput}`); + } + } + } + else { + log.info('Notifications and its Subscribers unchanged'); + } +} + +const deleteNotification = async (client: BudgetsClient, + accountId: string, + log: Logger, + threshold: number) => { + const input: DeleteNotificationCommandInput = { + AccountId: accountId, + BudgetName: BUDGET_NAME, + Notification: { + NotificationType: NOTIFICATION_TYPE, + ComparisonOperator: NOTIFICATION_COMPARISON_OPERATOR, + ThresholdType: NOTIFICATION_THRESHOLD_TYPE, + NotificationState: NOTIFICATION_STATE, + Threshold: threshold, + } + } + + log.info('DeleteNotificationCommand input', input); + const output = await client.send(new DeleteNotificationCommand(input)); + log.info('DeleteNotificationCommand output', output); + + return output; +} + +const createNotification = async (client: BudgetsClient, + accountId: string, + log: Logger, + threshold: number, + subscriberList: string[]) => { + const input: CreateNotificationCommandInput = { + AccountId: accountId, + BudgetName: BUDGET_NAME, + Notification: { + NotificationType: NOTIFICATION_TYPE, + ComparisonOperator: NOTIFICATION_COMPARISON_OPERATOR, + ThresholdType: NOTIFICATION_THRESHOLD_TYPE, + NotificationState: NOTIFICATION_STATE, + Threshold: threshold, + }, + Subscribers: subscriberList.map(x => ({ + SubscriptionType: SUBSCRIPTION_TYPE, + Address: x, + })) + }; + + log.info('CreateNotificationCommand input', input); + const output = await client.send(new CreateNotificationCommand(input)); + log.info('CreateNotificationCommand output', output); + + return output; +} + +const deleteSubscriber = async (client: BudgetsClient, + accountId: string, + log: Logger, + threshold: number, + subscriber: string) => { + const input: DeleteSubscriberCommandInput = { + AccountId: accountId, + BudgetName: BUDGET_NAME, + Notification: { + NotificationType: NOTIFICATION_TYPE, + ComparisonOperator: NOTIFICATION_COMPARISON_OPERATOR, + ThresholdType: NOTIFICATION_THRESHOLD_TYPE, + NotificationState: NOTIFICATION_STATE, + Threshold: threshold, + }, + Subscriber: { + Address: subscriber, + SubscriptionType: SUBSCRIPTION_TYPE, + } + } + + log.info('DeleteSubscriberCommand input', input); + const output = await client.send(new DeleteSubscriberCommand(input)); + log.info('DeleteSubscriberCommand output', output); + + return output; +} + +const createSubscriber = async (client: BudgetsClient, + accountId: string, + log: Logger, + threshold: number, + subscriber: string) => { + const input: CreateSubscriberCommandInput = { + AccountId: accountId, + BudgetName: BUDGET_NAME, + Notification: { + NotificationType: NOTIFICATION_TYPE, + ComparisonOperator: NOTIFICATION_COMPARISON_OPERATOR, + ThresholdType: NOTIFICATION_THRESHOLD_TYPE, + NotificationState: NOTIFICATION_STATE, + Threshold: threshold, + }, + Subscriber: { + Address: subscriber, + SubscriptionType: SUBSCRIPTION_TYPE, + } + } + + log.info('CreateSubscriberCommand input', input); + const output = await client.send(new CreateSubscriberCommand(input)); + log.info('CreateSubscriberCommand output', output); + + return output; +} diff --git a/source/packages/@ada/infra/src/services/administration/api/index.ts b/source/packages/@ada/infra/src/services/administration/api/index.ts index b58bed6..fb039b5 100644 --- a/source/packages/@ada/infra/src/services/administration/api/index.ts +++ b/source/packages/@ada/infra/src/services/administration/api/index.ts @@ -1,9 +1,10 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ +import { Aws, Duration, Stack } from 'aws-cdk-lib'; import { Bucket } from 'aws-cdk-lib/aws-s3'; +import { Budget, BudgetDetails, BudgetResponse, SupersetDeployResponse, TearDownDetails } from './types'; import { Construct } from 'constructs'; import { CounterTable } from '../../../common/constructs/dynamodb/counter-table'; -import { Duration, Stack } from 'aws-cdk-lib'; import { DynamicInfraDeploymentPermissionsBoundaryPolicyStatement, DynamicInfraDeploymentPolicyStatement, @@ -11,6 +12,7 @@ import { } from '@ada/infra-common'; import { Effect, ManagedPolicy, PermissionsBoundary, PolicyStatement } from 'aws-cdk-lib/aws-iam'; import { EntityManagementTables } from '../../api/components/entity/constructs/entity-management-tables'; +import { IAM_MODIFY_BUDGET, IAM_VIEW_BUDGET } from '../constant'; import { InternalTokenKey } from '../../../common/constructs/kms/internal-token-key'; import { LambdaIntegration } from 'aws-cdk-lib/aws-apigateway'; import { MicroserviceApi, MicroserviceApiProps } from '../../../common/services'; @@ -24,8 +26,9 @@ import { import { ResponseProps } from '@ada/infra-common/constructs/api'; import { StatusCodes } from 'http-status-codes/build/cjs'; import { Table } from 'aws-cdk-lib/aws-dynamodb'; -import { TearDownDetails } from './types'; import { TeardownEnvironmentVars } from './handlers/types'; +import { asInput } from '../../../common/constructs/api'; +import { getBudgetName } from '../constant'; import DataProductCreationStateMachine from '../../data-product/components/creation-state-machine'; export interface AdministrationApiProps extends MicroserviceApiProps { @@ -37,6 +40,7 @@ export interface AdministrationApiProps extends MicroserviceApiProps { dataBuckets: Bucket[]; notificationBus: NotificationBus; coreStack: Stack; + visualisationDeploymentCodeBuildProjectName: string; } /** @@ -46,11 +50,23 @@ export default class AdministrationApi extends MicroserviceApi { readonly startTearDownRetainDataLambda: TypescriptFunction; readonly startTearDownDestroyDataLambda: TypescriptFunction; readonly tearDownLambda: TypescriptFunction; + readonly getBudgetLambda: TypescriptFunction; + readonly postBudgetLambda: TypescriptFunction; + readonly deleteBudgetLambda: TypescriptFunction; + readonly deploySupersetLambda: TypescriptFunction; constructor(scope: Construct, id: string, props: AdministrationApiProps) { super(scope, id, props); - const { coreStack, counterTable, internalTokenKey, entityManagementTables, federatedApi, notificationBus } = props; + const { + coreStack, + counterTable, + internalTokenKey, + entityManagementTables, + federatedApi, + notificationBus, + visualisationDeploymentCodeBuildProjectName, + } = props; // Utility method for lambda handlers const buildLambda = (handlerFile: string, timeout?: Duration) => { @@ -120,6 +136,51 @@ export default class AdministrationApi extends MicroserviceApi { lambda.addEnvironment('TEAR_DOWN_LAMBDA_ARN', this.tearDownLambda.functionArn); }); + const budgetName = getBudgetName(Stack.of(this).region); + const budgetArn = `arn:${Stack.of(this).partition}:budgets::${Stack.of(this).account}:budget/${budgetName}`; + + this.getBudgetLambda = buildLambda('get-budget'); + this.getBudgetLambda.addToRolePolicy( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: [IAM_VIEW_BUDGET], + resources: [budgetArn], + }), + ); + + this.postBudgetLambda = buildLambda('post-budget'); + this.postBudgetLambda.addToRolePolicy( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: [IAM_VIEW_BUDGET, IAM_MODIFY_BUDGET], + resources: [budgetArn], + }), + ); + + this.deleteBudgetLambda = buildLambda('delete-budget'); + this.deleteBudgetLambda.addToRolePolicy( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: [IAM_VIEW_BUDGET, IAM_MODIFY_BUDGET], + resources: [budgetArn], + }), + ); + + this.deploySupersetLambda = buildLambda('deploy-superset'); + this.deploySupersetLambda.addToRolePolicy( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: ['codebuild:StartBuild', 'codebuild:RetryBuild', 'codebuild:ListBuilds'], + resources: [ + `arn:${Aws.PARTITION}:codebuild:${Aws.REGION}:${Aws.ACCOUNT_ID}:project/${visualisationDeploymentCodeBuildProjectName}`, + ], + }), + ); + this.deploySupersetLambda.addEnvironment( + 'DEPLOYMENT_CODEBUILD_PROJECT_NAME', + visualisationDeploymentCodeBuildProjectName, + ); + this.addRoutes(); } @@ -133,6 +194,17 @@ export default class AdministrationApi extends MicroserviceApi { this.api.addRoutes({ paths: { + 'deploy-superset': { + POST: { + integration: new LambdaIntegration(this.deploySupersetLambda), + response: { + name: 'PostDeploySupersetOutput', + description: 'Information about the Apache Superset deployment action', + schema: SupersetDeployResponse, + errorStatusCodes: [StatusCodes.BAD_REQUEST, StatusCodes.NOT_FOUND, StatusCodes.FORBIDDEN], + }, + }, + }, 'start-tear-down': { paths: { 'retain-data': { @@ -149,6 +221,40 @@ export default class AdministrationApi extends MicroserviceApi { }, }, }, + budgets: { + GET: { + integration: new LambdaIntegration(this.getBudgetLambda), + response: { + name: 'GetBudgetOutput', + description: 'Information about the Budget action', + schema: BudgetDetails, + errorStatusCodes: [StatusCodes.BAD_REQUEST, StatusCodes.NOT_FOUND, StatusCodes.FORBIDDEN], + }, + }, + POST: { + integration: new LambdaIntegration(this.postBudgetLambda), + request: { + name: 'PostBudgetInput', + description: 'Create new/Update existing budget with notification and subscribers', + schema: asInput(Budget, ['budgetLimit', 'subscriberList', 'softNotifications']), + }, + response: { + name: 'PostBudgetOutput', + description: 'Information about the Budget creation/update action', + schema: BudgetResponse, + errorStatusCodes: [StatusCodes.BAD_REQUEST, StatusCodes.NOT_FOUND, StatusCodes.FORBIDDEN], + }, + }, + DELETE: { + integration: new LambdaIntegration(this.deleteBudgetLambda), + response: { + name: 'DeleteBudgetOutput', + description: 'Information about the Budget deletion action', + schema: BudgetResponse, + errorStatusCodes: [StatusCodes.BAD_REQUEST, StatusCodes.NOT_FOUND, StatusCodes.FORBIDDEN], + }, + }, + }, }, }); } diff --git a/source/packages/@ada/infra/src/services/administration/api/types.ts b/source/packages/@ada/infra/src/services/administration/api/types.ts index 0776fee..5cb0234 100644 --- a/source/packages/@ada/infra/src/services/administration/api/types.ts +++ b/source/packages/@ada/infra/src/services/administration/api/types.ts @@ -29,3 +29,112 @@ export const TearDownDetails: JsonSchema = { }, required: ['coreStackId', 'mode', 'message', 'retainedResources'], }; + +/** + * Schema for an Budget attribute + */ +export const Budget: JsonSchema = { + id: `${__filename}/Budget`, + type: JsonSchemaType.OBJECT, + properties: { + budgetLimit: { + type: JsonSchemaType.INTEGER, + }, + subscriberList: { + type: JsonSchemaType.ARRAY, + description: 'Subscribers to recieve notifications', + items: { + type: JsonSchemaType.STRING, + }, + }, + softNotifications: { + type: JsonSchemaType.ARRAY, + description: 'Soft notifications', + items: { + type: JsonSchemaType.INTEGER, + }, + }, + }, + required: ['budgetLimit', 'subscriberList', 'softNotifications'], +}; + +export const Notification: JsonSchema = { + id: `${__filename}/Notification`, + type: JsonSchemaType.OBJECT, + properties: { + threshold: { + type: JsonSchemaType.INTEGER, + }, + state: { + type: JsonSchemaType.STRING, + }, + }, +}; + +export const BudgetDetails: JsonSchema = { + id: `${__filename}/BudgetDetails`, + type: JsonSchemaType.OBJECT, + properties: { + budgetLimit: { + type: JsonSchemaType.INTEGER, + }, + actualSpend: { + type: JsonSchemaType.INTEGER, + }, + forecastedSpend: { + type: JsonSchemaType.INTEGER, + }, + subscriberList: { + type: JsonSchemaType.ARRAY, + description: 'Subscribers to recieve notifications', + items: { + type: JsonSchemaType.STRING, + }, + }, + softNotifications: { + type: JsonSchemaType.ARRAY, + description: 'Soft notifications', + items: { + type: JsonSchemaType.OBJECT, + properties: { + threshold: { + type: JsonSchemaType.INTEGER, + }, + state: { + type: JsonSchemaType.STRING, + }, + }, + required: ['threshold', 'state'], + }, + }, + }, + required: ['budgetLimit', 'actualSpend', 'forecastedSpend', 'subscriberList', 'softNotifications'], +}; + +export const BudgetResponse: JsonSchema = { + id: `${__filename}/BudgetResponse`, + type: JsonSchemaType.OBJECT, + properties: { + budgetName: { + type: JsonSchemaType.STRING, + description: 'The budget name', + }, + message: { + type: JsonSchemaType.STRING, + description: 'Response message', + }, + }, + required: ['budgetName'], +}; + +export const SupersetDeployResponse: JsonSchema = { + id: `${__filename}/SupersetDeployResponse`, + type: JsonSchemaType.OBJECT, + properties: { + message: { + type: JsonSchemaType.STRING, + description: 'Response message', + }, + }, + required: ['message'], +}; diff --git a/source/packages/@ada/infra/src/services/administration/constant.ts b/source/packages/@ada/infra/src/services/administration/constant.ts new file mode 100644 index 0000000..8845683 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/constant.ts @@ -0,0 +1,19 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +export const getBudgetName = (region: string) => { + return `AWS_Solution_Ada_${region}`; +} + +export const BUDGET_COST_FILTER = 'user:Application$Ada'; +export const BUDGET_CURRENCY = 'USD'; + +export const IAM_VIEW_BUDGET = 'budgets:ViewBudget'; +export const IAM_MODIFY_BUDGET = 'budgets:ModifyBudget'; + +export const NOTIFICATION_TYPE = 'ACTUAL'; +export const NOTIFICATION_COMPARISON_OPERATOR = 'GREATER_THAN'; +export const NOTIFICATION_THRESHOLD_TYPE = 'PERCENTAGE'; +export const NOTIFICATION_STATE = 'OK'; + +export const SUBSCRIPTION_TYPE = 'EMAIL'; + diff --git a/source/packages/@ada/infra/src/services/administration/jest-dynamodb-config.ts b/source/packages/@ada/infra/src/services/administration/jest-dynamodb-config.ts index ff3a056..38c839c 100644 --- a/source/packages/@ada/infra/src/services/administration/jest-dynamodb-config.ts +++ b/source/packages/@ada/infra/src/services/administration/jest-dynamodb-config.ts @@ -14,6 +14,7 @@ export const generateEnvironmentForTests = () => { const stack = new TestStackWithMockedApiService(new TestApp()); new RetainedAspect(stack); //NOSONAR (S1848) - cdk construct is used const { + accessLogsBucket, federatedApi, counterTable, notificationBus, @@ -52,6 +53,8 @@ export const generateEnvironmentForTests = () => { }, counterTable, }), + accessLogsBucket, + athenaProxyDomainName: 'https://test-athena-proxy', notificationBus, internalTokenKey, entityManagementTables, diff --git a/source/packages/@ada/infra/src/services/administration/jest.config.ts b/source/packages/@ada/infra/src/services/administration/jest.config.ts index 1ed1328..eaead53 100644 --- a/source/packages/@ada/infra/src/services/administration/jest.config.ts +++ b/source/packages/@ada/infra/src/services/administration/jest.config.ts @@ -2,12 +2,11 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import createBaseConfig from '../../../jest.config.base'; +import createConfig from '../../../jest.config.base'; /* eslint-enable: sort-imports */ import * as path from 'path'; import { generateEnvironmentForTests } from './jest-dynamodb-config'; import { writeCdkEnvironmentToFile } from '../../common/services/testing/environment'; -import type { Config } from '@jest/types'; const cdkEnvironment = generateEnvironmentForTests(); const JEST_DYNAMODB_CONFIG = path.resolve(__dirname, '.jest.test-cdk-environment.json'); @@ -21,19 +20,14 @@ process.env = { XRAY_DISABLED: true, }; -const baseConfig = createBaseConfig(); - -export const config: Config.InitialOptions = { - ...baseConfig, +export const config = createConfig({ ...require('@shelf/jest-dynamodb/jest-preset'), + rootDir: __dirname, globals: { - ...(baseConfig.globals || {}), __JEST_DYNAMODB_TABLES: tables, }, - setupFilesAfterEnv: [...(baseConfig.setupFilesAfterEnv || []), path.resolve(__dirname, 'jest.setup.ts')], - rootDir: __dirname, - displayName: path.basename(__dirname), + setupFilesAfterEnv: [path.resolve(__dirname, 'jest.setup.ts')], testTimeout: 30000, -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/services/administration/jest.setup.ts b/source/packages/@ada/infra/src/services/administration/jest.setup.ts index fa877be..39ae1bc 100644 --- a/source/packages/@ada/infra/src/services/administration/jest.setup.ts +++ b/source/packages/@ada/infra/src/services/administration/jest.setup.ts @@ -1,5 +1,6 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ +import 'aws-sdk-client-mock-jest'; import * as path from 'path'; import { TEST_ENVIRONMENT } from '@ada/cdk-core'; diff --git a/source/packages/@ada/infra/src/services/administration/stack/__snapshots__/index.test.ts.snap b/source/packages/@ada/infra/src/services/administration/stack/__snapshots__/index.test.ts.snap old mode 100644 new mode 100755 index 8a6bc57..288ec06 --- a/source/packages/@ada/infra/src/services/administration/stack/__snapshots__/index.test.ts.snap +++ b/source/packages/@ada/infra/src/services/administration/stack/__snapshots__/index.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-AdministrationService) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-AdministrationService) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaAdministrationServiceApiLambdaStartTearDownDestroyDataC06606E1Ref": Object { "Value": Object { @@ -56,6 +56,9 @@ Object { "referencetoAdaApiWafDeploymentSecretCA25FA9ARef": Object { "Type": "String", }, + "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackAccessLogBucketB5B66FEDRef": Object { + "Type": "String", + }, "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Arn": Object { "Type": "String", }, @@ -98,6 +101,9 @@ Object { "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDataBucket51FCC54DArn": Object { "Type": "String", }, + "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDeploymentScriptBucket915B124DArn": Object { + "Type": "String", + }, "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn": Object { "Type": "String", }, @@ -113,15 +119,82 @@ Object { "referencetoAdaLayer6FB4FEF4Ref": Object { "Type": "String", }, + "referencetoAdaQueryServiceNestedStackQueryServiceNestedStackResourceB637DA5COutputsAdaQueryServiceAthenaProxyDistribution31E1FEE1DomainName": Object { + "Type": "String", + }, "referencetoAdaSharedEvntBus3C45F515Arn": Object { "Type": "String", }, }, "Resources": Object { - "ApiLambdaStartTearDownDestroyData8A16B5F1": Object { + "AWS679F53Fac002430Cb0Da5B7982Bd22872D164C4C": Object { "DependsOn": Array [ - "ApiLambdaStartTearDownDestroyDataServiceRoleDefaultPolicyEE46E7FC", - "ApiLambdaStartTearDownDestroyDataServiceRoleFC7A40E3", + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": "cdk-#####", + "S3Key": "cdkhash######.zip", + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + "Arn", + ], + }, + "Runtime": "nodejs18.x", + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + "Timeout": 120, + }, + "Type": "AWS::Lambda::Function", + }, + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "ApiLambdaDeleteBudget6E0EFB99": Object { + "DependsOn": Array [ + "ApiLambdaDeleteBudgetServiceRoleDefaultPolicy6FEAD0D9", + "ApiLambdaDeleteBudgetServiceRole5DC83BC2", ], "Properties": Object { "Architectures": Array [ @@ -131,7 +204,7 @@ Object { "S3Bucket": "cdk-#####", "S3Key": "cdkhash######.zip", }, - "Description": "TypescriptFunction Ada/AdministrationService/Api/LambdaStartTearDownDestroyData of start-tear-down-destroy-data.ts", + "Description": "TypescriptFunction Ada/AdministrationService/Api/LambdaDeleteBudget of delete-budget.ts", "Environment": Object { "Variables": Object { "API_ENDPOINT": Object { @@ -201,12 +274,6 @@ Object { ], ], }, - "TEAR_DOWN_LAMBDA_ARN": Object { - "Fn::GetAtt": Array [ - "ApiLambdaTearDownE19F3AC4", - "Arn", - ], - }, }, }, "Handler": "index.handler", @@ -218,11 +285,11 @@ Object { "MemorySize": 1024, "Role": Object { "Fn::GetAtt": Array [ - "ApiLambdaStartTearDownDestroyDataServiceRoleFC7A40E3", + "ApiLambdaDeleteBudgetServiceRole5DC83BC2", "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -236,7 +303,44 @@ Object { }, "Type": "AWS::Lambda::Function", }, - "ApiLambdaStartTearDownDestroyDataServiceRoleDefaultPolicyEE46E7FC": Object { + "ApiLambdaDeleteBudgetServiceRole5DC83BC2": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "ApiLambdaDeleteBudgetServiceRoleDefaultPolicy6FEAD0D9": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ @@ -453,84 +557,40 @@ Object { ], }, Object { - "Action": "lambda:InvokeFunction", + "Action": Array [ + "budgets:ViewBudget", + "budgets:ModifyBudget", + ], "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::GetAtt": Array [ - "ApiLambdaTearDownE19F3AC4", - "Arn", - ], - }, - Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "ApiLambdaTearDownE19F3AC4", - "Arn", - ], - }, - ":*", - ], + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":budgets::1111111111:budget/AWS_Solution_Ada_ap-southeast-1", ], - }, - ], + ], + }, }, ], "Version": "2012-10-17", }, - "PolicyName": "ApiLambdaStartTearDownDestroyDataServiceRoleDefaultPolicyEE46E7FC", + "PolicyName": "ApiLambdaDeleteBudgetServiceRoleDefaultPolicy6FEAD0D9", "Roles": Array [ Object { - "Ref": "ApiLambdaStartTearDownDestroyDataServiceRoleFC7A40E3", + "Ref": "ApiLambdaDeleteBudgetServiceRole5DC83BC2", }, ], }, "Type": "AWS::IAM::Policy", }, - "ApiLambdaStartTearDownDestroyDataServiceRoleFC7A40E3": Object { - "Properties": Object { - "AssumeRolePolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": Object { - "Service": "lambda.amazonaws.com", - }, - }, - ], - "Version": "2012-10-17", - }, - "ManagedPolicyArns": Array [ - Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", - ], - ], - }, - ], - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - }, - "Type": "AWS::IAM::Role", - }, - "ApiLambdaStartTearDownRetainData494048DD": Object { + "ApiLambdaDeploySupersetCE112C28": Object { "DependsOn": Array [ - "ApiLambdaStartTearDownRetainDataServiceRoleDefaultPolicy3877510D", - "ApiLambdaStartTearDownRetainDataServiceRole6E14B1C6", + "ApiLambdaDeploySupersetServiceRoleDefaultPolicy77184336", + "ApiLambdaDeploySupersetServiceRoleABBE7665", ], "Properties": Object { "Architectures": Array [ @@ -540,7 +600,7 @@ Object { "S3Bucket": "cdk-#####", "S3Key": "cdkhash######.zip", }, - "Description": "TypescriptFunction Ada/AdministrationService/Api/LambdaStartTearDownRetainData of start-tear-down-retain-data.ts", + "Description": "TypescriptFunction Ada/AdministrationService/Api/LambdaDeploySuperset of deploy-superset.ts", "Environment": Object { "Variables": Object { "API_ENDPOINT": Object { @@ -569,6 +629,9 @@ Object { "DATA_PRODUCT_TABLE_NAME": Object { "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceDataProductTableC1CE90D5Ref", }, + "DEPLOYMENT_CODEBUILD_PROJECT_NAME": Object { + "Ref": "VisSolutionDeployProject0B4F52E2", + }, "INTERNAL_TOKEN_KMS_KEY": Object { "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackKeyInternalTokenE7D6550ERef", }, @@ -610,12 +673,6 @@ Object { ], ], }, - "TEAR_DOWN_LAMBDA_ARN": Object { - "Fn::GetAtt": Array [ - "ApiLambdaTearDownE19F3AC4", - "Arn", - ], - }, }, }, "Handler": "index.handler", @@ -627,11 +684,11 @@ Object { "MemorySize": 1024, "Role": Object { "Fn::GetAtt": Array [ - "ApiLambdaStartTearDownRetainDataServiceRole6E14B1C6", + "ApiLambdaDeploySupersetServiceRoleABBE7665", "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -645,7 +702,7 @@ Object { }, "Type": "AWS::Lambda::Function", }, - "ApiLambdaStartTearDownRetainDataServiceRole6E14B1C6": Object { + "ApiLambdaDeploySupersetServiceRoleABBE7665": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ @@ -682,7 +739,7 @@ Object { }, "Type": "AWS::IAM::Role", }, - "ApiLambdaStartTearDownRetainDataServiceRoleDefaultPolicy3877510D": Object { + "ApiLambdaDeploySupersetServiceRoleDefaultPolicy77184336": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ @@ -899,47 +956,52 @@ Object { ], }, Object { - "Action": "lambda:InvokeFunction", + "Action": Array [ + "codebuild:StartBuild", + "codebuild:RetryBuild", + "codebuild:ListBuilds", + ], "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::GetAtt": Array [ - "ApiLambdaTearDownE19F3AC4", - "Arn", - ], - }, - Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "ApiLambdaTearDownE19F3AC4", - "Arn", - ], - }, - ":*", - ], + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":codebuild:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":project/", + Object { + "Ref": "VisSolutionDeployProject0B4F52E2", + }, ], - }, - ], + ], + }, }, ], "Version": "2012-10-17", }, - "PolicyName": "ApiLambdaStartTearDownRetainDataServiceRoleDefaultPolicy3877510D", + "PolicyName": "ApiLambdaDeploySupersetServiceRoleDefaultPolicy77184336", "Roles": Array [ Object { - "Ref": "ApiLambdaStartTearDownRetainDataServiceRole6E14B1C6", + "Ref": "ApiLambdaDeploySupersetServiceRoleABBE7665", }, ], }, "Type": "AWS::IAM::Policy", }, - "ApiLambdaTearDownE19F3AC4": Object { + "ApiLambdaGetBudget9733845A": Object { "DependsOn": Array [ - "ApiLambdaTearDownServiceRoleDefaultPolicyF2BD814F", - "ApiLambdaTearDownServiceRole49396A85", + "ApiLambdaGetBudgetServiceRoleDefaultPolicy0B11E0AB", + "ApiLambdaGetBudgetServiceRole32C7DC4F", ], "Properties": Object { "Architectures": Array [ @@ -949,7 +1011,7 @@ Object { "S3Bucket": "cdk-#####", "S3Key": "cdkhash######.zip", }, - "Description": "TypescriptFunction Ada/AdministrationService/Api/LambdaTearDown of tear-down.ts", + "Description": "TypescriptFunction Ada/AdministrationService/Api/LambdaGetBudget of get-budget.ts", "Environment": Object { "Variables": Object { "API_ENDPOINT": Object { @@ -1030,25 +1092,25 @@ Object { "MemorySize": 1024, "Role": Object { "Fn::GetAtt": Array [ - "ApiLambdaTearDownServiceRole49396A85", + "ApiLambdaGetBudgetServiceRole32C7DC4F", "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", "Value": "Ada", }, ], - "Timeout": 900, + "Timeout": 30, "TracingConfig": Object { "Mode": "Active", }, }, "Type": "AWS::Lambda::Function", }, - "ApiLambdaTearDownServiceRole49396A85": Object { + "ApiLambdaGetBudgetServiceRole32C7DC4F": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ @@ -1076,9 +1138,6 @@ Object { ], }, ], - "PermissionsBoundary": Object { - "Ref": "ApiTearDownPermissionsBoundaryBE821880", - }, "Tags": Array [ Object { "Key": "Application", @@ -1088,29 +1147,7 @@ Object { }, "Type": "AWS::IAM::Role", }, - "ApiLambdaTearDownServiceRoleDefaultPolicyF2BD814F": Object { - "Metadata": Object { - "cfn_nag": Object { - "rules_to_suppress": Array [ - Object { - "id": "F4", - "reason": "Used to tear down the CloudFormation stack", - }, - Object { - "id": "F39", - "reason": "Used to tear down the CloudFormation stack", - }, - Object { - "id": "W12", - "reason": "Used to tear down the CloudFormation stack", - }, - Object { - "id": "W76", - "reason": "SPCM expected to be high for CloudFormation execution role", - }, - ], - }, - }, + "ApiLambdaGetBudgetServiceRoleDefaultPolicy0B11E0AB": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ @@ -1326,14 +1363,210 @@ Object { }, ], }, + Object { + "Action": "budgets:ViewBudget", + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":budgets::1111111111:budget/AWS_Solution_Ada_ap-southeast-1", + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "ApiLambdaGetBudgetServiceRoleDefaultPolicy0B11E0AB", + "Roles": Array [ + Object { + "Ref": "ApiLambdaGetBudgetServiceRole32C7DC4F", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "ApiLambdaPostBudget69EEB94F": Object { + "DependsOn": Array [ + "ApiLambdaPostBudgetServiceRoleDefaultPolicy85B96C06", + "ApiLambdaPostBudgetServiceRole7D50991A", + ], + "Properties": Object { + "Architectures": Array [ + "x86_64", + ], + "Code": Object { + "S3Bucket": "cdk-#####", + "S3Key": "cdkhash######.zip", + }, + "Description": "TypescriptFunction Ada/AdministrationService/Api/LambdaPostBudget of post-budget.ts", + "Environment": Object { + "Variables": Object { + "API_ENDPOINT": Object { + "Fn::Join": Array [ + "", + Array [ + "https://", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + ".execute-api.ap-southeast-1.amazonaws.com/prod/", + ], + ], + }, + "API_WAF_ALLOW_RULE_SECRET": Object { + "Ref": "referencetoAdaApiWafDeploymentSecretCA25FA9ARef", + }, + "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1", + "CORE_STACK_ID": Object { + "Ref": "referencetoAdaAWSStackId", + }, + "CORE_STACK_NAME": "Ada", + "COUNTER_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Ref", + }, + "DATA_PRODUCT_TABLE_NAME": Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceDataProductTableC1CE90D5Ref", + }, + "INTERNAL_TOKEN_KMS_KEY": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackKeyInternalTokenE7D6550ERef", + }, + "INTERNAL_TOKEN_SECRET_NAME": "sign-internal-token2855ghashx", + "LOCK_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesLocksC922FC29Ref", + }, + "NOTIFICATION_BUS_EVENT_BUS_ARN": Object { + "Ref": "referencetoAdaSharedEvntBus3C45F515Arn", + }, + "RELATIONSHIP_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesRelationshipsAA870878Ref", + }, + "RETAINED_RESOURCES": Object { + "Fn::Join": Array [ + "", + Array [ + "[\\"", + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDataBucket51FCC54DArn", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + "\\"]", + ], + ], + }, + }, + }, + "Handler": "index.handler", + "Layers": Array [ + Object { + "Ref": "referencetoAdaLayer6FB4FEF4Ref", + }, + ], + "MemorySize": 1024, + "Role": Object { + "Fn::GetAtt": Array [ + "ApiLambdaPostBudgetServiceRole7D50991A", + "Arn", + ], + }, + "Runtime": "nodejs18.x", + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + "Timeout": 30, + "TracingConfig": Object { + "Mode": "Active", + }, + }, + "Type": "AWS::Lambda::Function", + }, + "ApiLambdaPostBudgetServiceRole7D50991A": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "ApiLambdaPostBudgetServiceRoleDefaultPolicy85B96C06": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ - "kms:Decrypt", - "kms:DescribeKey", + "secretsmanager:GetSecretValue", + "secretsmanager:DescribeSecret", ], "Effect": "Allow", "Resource": Object { - "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyTableDataProductTableCFB5877CArn", + "Ref": "referencetoAdaApiWafDeploymentSecretCA25FA9ARef", + }, + }, + Object { + "Action": "events:PutEvents", + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaSharedEvntBus3C45F515Arn", }, }, Object { @@ -1345,12 +1578,16 @@ Object { "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", "dynamodb:DescribeTable", ], "Effect": "Allow", "Resource": Array [ Object { - "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceDataProductTableC1CE90D5Arn", + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Arn", }, Object { "Ref": "AWS::NoValue", @@ -1358,93 +1595,2464 @@ Object { ], }, Object { - "Action": Array [ - "cloudformation:DeleteStack", - "cloudformation:DescribeStacks", - ], + "Action": "kms:Decrypt", "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":cloudformation:ap-southeast-1:1111111111:stack/ada-dp-*", - ], - ], - }, - Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":cloudformation:ap-southeast-1:1111111111:stack/CDKToolkit/*", - ], - ], - }, - Object { - "Ref": "referencetoAdaAWSStackId", - }, - ], + "Resource": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackKeyInternalTokenE7D6550EArn", + }, }, Object { - "Action": Array [ - "s3:*", - "cloudformation:*", - "lambda:*", - "glue:*", - "ecs:*", - "states:*", - "logs:*", - "kms:*", - "iam:*", - "cloudtrail:*", - "cloudwatch:*", - "events:*", - "kinesis:*", - "firehose:*", - ], - "Condition": Object { - "ForAnyValue:StringEquals": Object { - "aws:CalledVia": Array [ - "cloudformation.amazonaws.com", + "Action": "secretsManager:GetSecretValue", + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":secretsmanager:ap-southeast-1:1111111111:secret:sign-internal-token2855ghashx*", ], + ], + }, + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyTableLocks696688D7Arn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesLocksC922FC29Arn", + }, + Object { + "Ref": "AWS::NoValue", }, + ], + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyTableRelationships0CDF4443Arn", }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], "Effect": "Allow", - "Resource": "*", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesRelationshipsAA870878Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": Array [ + "kms:DisableKey", + "kms:ScheduleKeyDeletion", + "kms:DeleteAlias", + "s3:Get*", + "s3:Describe*", + "s3:List*", + "s3:Delete*", + "logs:Delete*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDataBucket51FCC54DArn", + }, + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn", + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + "/*", + ], + ], + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + "/*", + ], + ], + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "budgets:ViewBudget", + "budgets:ModifyBudget", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":budgets::1111111111:budget/AWS_Solution_Ada_ap-southeast-1", + ], + ], + }, }, ], "Version": "2012-10-17", }, - "PolicyName": "ApiLambdaTearDownServiceRoleDefaultPolicyF2BD814F", + "PolicyName": "ApiLambdaPostBudgetServiceRoleDefaultPolicy85B96C06", "Roles": Array [ Object { - "Ref": "ApiLambdaTearDownServiceRole49396A85", + "Ref": "ApiLambdaPostBudgetServiceRole7D50991A", }, ], }, "Type": "AWS::IAM::Policy", }, - "ApiRestApiRefAdministrationD50CFF79": Object { + "ApiLambdaStartTearDownDestroyData8A16B5F1": Object { + "DependsOn": Array [ + "ApiLambdaStartTearDownDestroyDataServiceRoleDefaultPolicyEE46E7FC", + "ApiLambdaStartTearDownDestroyDataServiceRoleFC7A40E3", + ], "Properties": Object { - "ParentId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5RootResourceId", + "Architectures": Array [ + "x86_64", + ], + "Code": Object { + "S3Bucket": "cdk-#####", + "S3Key": "cdkhash######.zip", }, - "PathPart": "administration", - "RestApiId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + "Description": "TypescriptFunction Ada/AdministrationService/Api/LambdaStartTearDownDestroyData of start-tear-down-destroy-data.ts", + "Environment": Object { + "Variables": Object { + "API_ENDPOINT": Object { + "Fn::Join": Array [ + "", + Array [ + "https://", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + ".execute-api.ap-southeast-1.amazonaws.com/prod/", + ], + ], + }, + "API_WAF_ALLOW_RULE_SECRET": Object { + "Ref": "referencetoAdaApiWafDeploymentSecretCA25FA9ARef", + }, + "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1", + "CORE_STACK_ID": Object { + "Ref": "referencetoAdaAWSStackId", + }, + "CORE_STACK_NAME": "Ada", + "COUNTER_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Ref", + }, + "DATA_PRODUCT_TABLE_NAME": Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceDataProductTableC1CE90D5Ref", + }, + "INTERNAL_TOKEN_KMS_KEY": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackKeyInternalTokenE7D6550ERef", + }, + "INTERNAL_TOKEN_SECRET_NAME": "sign-internal-token2855ghashx", + "LOCK_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesLocksC922FC29Ref", + }, + "NOTIFICATION_BUS_EVENT_BUS_ARN": Object { + "Ref": "referencetoAdaSharedEvntBus3C45F515Arn", + }, + "RELATIONSHIP_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesRelationshipsAA870878Ref", + }, + "RETAINED_RESOURCES": Object { + "Fn::Join": Array [ + "", + Array [ + "[\\"", + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDataBucket51FCC54DArn", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + "\\"]", + ], + ], + }, + "TEAR_DOWN_LAMBDA_ARN": Object { + "Fn::GetAtt": Array [ + "ApiLambdaTearDownE19F3AC4", + "Arn", + ], + }, + }, + }, + "Handler": "index.handler", + "Layers": Array [ + Object { + "Ref": "referencetoAdaLayer6FB4FEF4Ref", + }, + ], + "MemorySize": 1024, + "Role": Object { + "Fn::GetAtt": Array [ + "ApiLambdaStartTearDownDestroyDataServiceRoleFC7A40E3", + "Arn", + ], + }, + "Runtime": "nodejs18.x", + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + "Timeout": 30, + "TracingConfig": Object { + "Mode": "Active", + }, + }, + "Type": "AWS::Lambda::Function", + }, + "ApiLambdaStartTearDownDestroyDataServiceRoleDefaultPolicyEE46E7FC": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "secretsmanager:GetSecretValue", + "secretsmanager:DescribeSecret", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaApiWafDeploymentSecretCA25FA9ARef", + }, + }, + Object { + "Action": "events:PutEvents", + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaSharedEvntBus3C45F515Arn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": "kms:Decrypt", + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackKeyInternalTokenE7D6550EArn", + }, + }, + Object { + "Action": "secretsManager:GetSecretValue", + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":secretsmanager:ap-southeast-1:1111111111:secret:sign-internal-token2855ghashx*", + ], + ], + }, + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyTableLocks696688D7Arn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesLocksC922FC29Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyTableRelationships0CDF4443Arn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesRelationshipsAA870878Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": Array [ + "kms:DisableKey", + "kms:ScheduleKeyDeletion", + "kms:DeleteAlias", + "s3:Get*", + "s3:Describe*", + "s3:List*", + "s3:Delete*", + "logs:Delete*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDataBucket51FCC54DArn", + }, + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn", + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + "/*", + ], + ], + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + "/*", + ], + ], + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": "lambda:InvokeFunction", + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "ApiLambdaTearDownE19F3AC4", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "ApiLambdaTearDownE19F3AC4", + "Arn", + ], + }, + ":*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "ApiLambdaStartTearDownDestroyDataServiceRoleDefaultPolicyEE46E7FC", + "Roles": Array [ + Object { + "Ref": "ApiLambdaStartTearDownDestroyDataServiceRoleFC7A40E3", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "ApiLambdaStartTearDownDestroyDataServiceRoleFC7A40E3": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "ApiLambdaStartTearDownRetainData494048DD": Object { + "DependsOn": Array [ + "ApiLambdaStartTearDownRetainDataServiceRoleDefaultPolicy3877510D", + "ApiLambdaStartTearDownRetainDataServiceRole6E14B1C6", + ], + "Properties": Object { + "Architectures": Array [ + "x86_64", + ], + "Code": Object { + "S3Bucket": "cdk-#####", + "S3Key": "cdkhash######.zip", + }, + "Description": "TypescriptFunction Ada/AdministrationService/Api/LambdaStartTearDownRetainData of start-tear-down-retain-data.ts", + "Environment": Object { + "Variables": Object { + "API_ENDPOINT": Object { + "Fn::Join": Array [ + "", + Array [ + "https://", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + ".execute-api.ap-southeast-1.amazonaws.com/prod/", + ], + ], + }, + "API_WAF_ALLOW_RULE_SECRET": Object { + "Ref": "referencetoAdaApiWafDeploymentSecretCA25FA9ARef", + }, + "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1", + "CORE_STACK_ID": Object { + "Ref": "referencetoAdaAWSStackId", + }, + "CORE_STACK_NAME": "Ada", + "COUNTER_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Ref", + }, + "DATA_PRODUCT_TABLE_NAME": Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceDataProductTableC1CE90D5Ref", + }, + "INTERNAL_TOKEN_KMS_KEY": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackKeyInternalTokenE7D6550ERef", + }, + "INTERNAL_TOKEN_SECRET_NAME": "sign-internal-token2855ghashx", + "LOCK_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesLocksC922FC29Ref", + }, + "NOTIFICATION_BUS_EVENT_BUS_ARN": Object { + "Ref": "referencetoAdaSharedEvntBus3C45F515Arn", + }, + "RELATIONSHIP_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesRelationshipsAA870878Ref", + }, + "RETAINED_RESOURCES": Object { + "Fn::Join": Array [ + "", + Array [ + "[\\"", + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDataBucket51FCC54DArn", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + "\\"]", + ], + ], + }, + "TEAR_DOWN_LAMBDA_ARN": Object { + "Fn::GetAtt": Array [ + "ApiLambdaTearDownE19F3AC4", + "Arn", + ], + }, + }, + }, + "Handler": "index.handler", + "Layers": Array [ + Object { + "Ref": "referencetoAdaLayer6FB4FEF4Ref", + }, + ], + "MemorySize": 1024, + "Role": Object { + "Fn::GetAtt": Array [ + "ApiLambdaStartTearDownRetainDataServiceRole6E14B1C6", + "Arn", + ], + }, + "Runtime": "nodejs18.x", + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + "Timeout": 30, + "TracingConfig": Object { + "Mode": "Active", + }, + }, + "Type": "AWS::Lambda::Function", + }, + "ApiLambdaStartTearDownRetainDataServiceRole6E14B1C6": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "ApiLambdaStartTearDownRetainDataServiceRoleDefaultPolicy3877510D": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "secretsmanager:GetSecretValue", + "secretsmanager:DescribeSecret", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaApiWafDeploymentSecretCA25FA9ARef", + }, + }, + Object { + "Action": "events:PutEvents", + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaSharedEvntBus3C45F515Arn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": "kms:Decrypt", + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackKeyInternalTokenE7D6550EArn", + }, + }, + Object { + "Action": "secretsManager:GetSecretValue", + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":secretsmanager:ap-southeast-1:1111111111:secret:sign-internal-token2855ghashx*", + ], + ], + }, + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyTableLocks696688D7Arn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesLocksC922FC29Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyTableRelationships0CDF4443Arn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesRelationshipsAA870878Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": Array [ + "kms:DisableKey", + "kms:ScheduleKeyDeletion", + "kms:DeleteAlias", + "s3:Get*", + "s3:Describe*", + "s3:List*", + "s3:Delete*", + "logs:Delete*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDataBucket51FCC54DArn", + }, + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn", + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + "/*", + ], + ], + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + "/*", + ], + ], + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": "lambda:InvokeFunction", + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "ApiLambdaTearDownE19F3AC4", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "ApiLambdaTearDownE19F3AC4", + "Arn", + ], + }, + ":*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "ApiLambdaStartTearDownRetainDataServiceRoleDefaultPolicy3877510D", + "Roles": Array [ + Object { + "Ref": "ApiLambdaStartTearDownRetainDataServiceRole6E14B1C6", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "ApiLambdaTearDownE19F3AC4": Object { + "DependsOn": Array [ + "ApiLambdaTearDownServiceRoleDefaultPolicyF2BD814F", + "ApiLambdaTearDownServiceRole49396A85", + ], + "Properties": Object { + "Architectures": Array [ + "x86_64", + ], + "Code": Object { + "S3Bucket": "cdk-#####", + "S3Key": "cdkhash######.zip", + }, + "Description": "TypescriptFunction Ada/AdministrationService/Api/LambdaTearDown of tear-down.ts", + "Environment": Object { + "Variables": Object { + "API_ENDPOINT": Object { + "Fn::Join": Array [ + "", + Array [ + "https://", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + ".execute-api.ap-southeast-1.amazonaws.com/prod/", + ], + ], + }, + "API_WAF_ALLOW_RULE_SECRET": Object { + "Ref": "referencetoAdaApiWafDeploymentSecretCA25FA9ARef", + }, + "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1", + "CORE_STACK_ID": Object { + "Ref": "referencetoAdaAWSStackId", + }, + "CORE_STACK_NAME": "Ada", + "COUNTER_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Ref", + }, + "DATA_PRODUCT_TABLE_NAME": Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceDataProductTableC1CE90D5Ref", + }, + "INTERNAL_TOKEN_KMS_KEY": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackKeyInternalTokenE7D6550ERef", + }, + "INTERNAL_TOKEN_SECRET_NAME": "sign-internal-token2855ghashx", + "LOCK_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesLocksC922FC29Ref", + }, + "NOTIFICATION_BUS_EVENT_BUS_ARN": Object { + "Ref": "referencetoAdaSharedEvntBus3C45F515Arn", + }, + "RELATIONSHIP_TABLE_NAME": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesRelationshipsAA870878Ref", + }, + "RETAINED_RESOURCES": Object { + "Fn::Join": Array [ + "", + Array [ + "[\\"", + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDataBucket51FCC54DArn", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + "\\",\\"", + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + "\\"]", + ], + ], + }, + }, + }, + "Handler": "index.handler", + "Layers": Array [ + Object { + "Ref": "referencetoAdaLayer6FB4FEF4Ref", + }, + ], + "MemorySize": 1024, + "Role": Object { + "Fn::GetAtt": Array [ + "ApiLambdaTearDownServiceRole49396A85", + "Arn", + ], + }, + "Runtime": "nodejs18.x", + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + "Timeout": 900, + "TracingConfig": Object { + "Mode": "Active", + }, + }, + "Type": "AWS::Lambda::Function", + }, + "ApiLambdaTearDownServiceRole49396A85": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + "PermissionsBoundary": Object { + "Ref": "ApiTearDownPermissionsBoundaryBE821880", + }, + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "ApiLambdaTearDownServiceRoleDefaultPolicyF2BD814F": Object { + "Metadata": Object { + "cfn_nag": Object { + "rules_to_suppress": Array [ + Object { + "id": "F4", + "reason": "Used to tear down the CloudFormation stack", + }, + Object { + "id": "F39", + "reason": "Used to tear down the CloudFormation stack", + }, + Object { + "id": "W12", + "reason": "Used to tear down the CloudFormation stack", + }, + Object { + "id": "W76", + "reason": "SPCM expected to be high for CloudFormation execution role", + }, + ], + }, + }, + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "secretsmanager:GetSecretValue", + "secretsmanager:DescribeSecret", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaApiWafDeploymentSecretCA25FA9ARef", + }, + }, + Object { + "Action": "events:PutEvents", + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaSharedEvntBus3C45F515Arn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": "kms:Decrypt", + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackKeyInternalTokenE7D6550EArn", + }, + }, + Object { + "Action": "secretsManager:GetSecretValue", + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":secretsmanager:ap-southeast-1:1111111111:secret:sign-internal-token2855ghashx*", + ], + ], + }, + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyTableLocks696688D7Arn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesLocksC922FC29Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyTableRelationships0CDF4443Arn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:BatchWriteItem", + "dynamodb:PutItem", + "dynamodb:UpdateItem", + "dynamodb:DeleteItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackEntityManagementTablesRelationshipsAA870878Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": Array [ + "kms:DisableKey", + "kms:ScheduleKeyDeletion", + "kms:DeleteAlias", + "s3:Get*", + "s3:Describe*", + "s3:List*", + "s3:Delete*", + "logs:Delete*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDataBucket51FCC54DArn", + }, + Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn", + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu1AA3D612", + }, + "/*", + ], + ], + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceStaticInfrastructureNestedStackStaticInfrastructureNestedStackResourceCCEA4A1BOutputsAdaDataProductServiceStaticInfrastructu0312C0F1", + }, + "/*", + ], + ], + }, + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceFileUploadBucket4C6FA9E4Arn", + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyTableDataProductTableCFB5877CArn", + }, + }, + Object { + "Action": Array [ + "dynamodb:BatchGetItem", + "dynamodb:GetRecords", + "dynamodb:GetShardIterator", + "dynamodb:Query", + "dynamodb:GetItem", + "dynamodb:Scan", + "dynamodb:ConditionCheckItem", + "dynamodb:DescribeTable", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Ref": "referencetoAdaDataProductServiceNestedStackDataProductServiceNestedStackResourceA1CE38EDOutputsAdaDataProductServiceDataProductTableC1CE90D5Arn", + }, + Object { + "Ref": "AWS::NoValue", + }, + ], + }, + Object { + "Action": Array [ + "cloudformation:DeleteStack", + "cloudformation:DescribeStacks", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":cloudformation:ap-southeast-1:1111111111:stack/ada-dp-*", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":cloudformation:ap-southeast-1:1111111111:stack/CDKToolkit/*", + ], + ], + }, + Object { + "Ref": "referencetoAdaAWSStackId", + }, + ], + }, + Object { + "Action": Array [ + "s3:*", + "cloudformation:*", + "lambda:*", + "glue:*", + "ecs:*", + "states:*", + "logs:*", + "kms:*", + "iam:*", + "cloudtrail:*", + "cloudwatch:*", + "events:*", + "kinesis:*", + "firehose:*", + ], + "Condition": Object { + "ForAnyValue:StringEquals": Object { + "aws:CalledVia": Array [ + "cloudformation.amazonaws.com", + ], + }, + }, + "Effect": "Allow", + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "ApiLambdaTearDownServiceRoleDefaultPolicyF2BD814F", + "Roles": Array [ + Object { + "Ref": "ApiLambdaTearDownServiceRole49396A85", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "ApiRestApiRefAdministrationD50CFF79": Object { + "Properties": Object { + "ParentId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5RootResourceId", + }, + "PathPart": "administration", + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "ApiRestApiRefadministrationBudgetsF3D9DA30": Object { + "Properties": Object { + "ParentId": Object { + "Ref": "ApiRestApiRefAdministrationD50CFF79", + }, + "PathPart": "budgets", + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "ApiRestApiRefadministrationDeploySuperset4261B23E": Object { + "Properties": Object { + "ParentId": Object { + "Ref": "ApiRestApiRefAdministrationD50CFF79", + }, + "PathPart": "deploy-superset", + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "ApiRestApiRefadministrationOPTIONS9595A0BA": Object { + "Properties": Object { + "ApiKeyRequired": false, + "AuthorizationType": "NONE", + "HttpMethod": "OPTIONS", + "Integration": Object { + "IntegrationResponses": Array [ + Object { + "ResponseParameters": Object { + "method.response.header.Access-Control-Allow-Headers": "'Authorization,*'", + "method.response.header.Access-Control-Allow-Methods": "'OPTIONS,GET,PUT,POST,DELETE,PATCH,HEAD'", + "method.response.header.Access-Control-Allow-Origin": "'*'", + "method.response.header.Access-Control-Max-Age": "'600'", + }, + "StatusCode": "200", + }, + ], + "RequestTemplates": Object { + "application/json": "{ statusCode: 200 }", + }, + "Type": "MOCK", + }, + "MethodResponses": Array [ + Object { + "ResponseParameters": Object { + "method.response.header.Access-Control-Allow-Headers": true, + "method.response.header.Access-Control-Allow-Methods": true, + "method.response.header.Access-Control-Allow-Origin": true, + "method.response.header.Access-Control-Max-Age": true, + }, + "StatusCode": "200", + }, + ], + "ResourceId": Object { + "Ref": "ApiRestApiRefAdministrationD50CFF79", + }, + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "ApiRestApiRefadministrationStartTearDown66E3AD16": Object { + "Properties": Object { + "ParentId": Object { + "Ref": "ApiRestApiRefAdministrationD50CFF79", + }, + "PathPart": "start-tear-down", + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "ApiRestApiRefadministrationbudGETsGETDCB5FE3A": Object { + "DependsOn": Array [ + "ApiRestApiRefadministrationbudgetsPOST42FA30D1", + ], + "Properties": Object { + "AuthorizationType": "CUSTOM", + "AuthorizerId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiCustomAuthorizerHandler80C96C55Ref", + }, + "HttpMethod": "GET", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:ap-southeast-1:lambda:path/2015-03-31/functions/", + Object { + "Fn::GetAtt": Array [ + "ApiLambdaGetBudget9733845A", + "Arn", + ], + }, + "/invocations", + ], + ], + }, + }, + "MethodResponses": Array [ + Object { + "ResponseModels": Object {}, + "StatusCode": "200", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "400", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "404", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "403", + }, + ], + "OperationName": "GetAdministrationBudgets", + "RequestValidatorId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiValidator5117C971Ref", + }, + "ResourceId": Object { + "Ref": "ApiRestApiRefadministrationBudgetsF3D9DA30", + }, + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "ApiRestApiRefadministrationbudgetsDELETE5ED07557": Object { + "DependsOn": Array [ + "ApiRestApiRefadministrationbudGETsGETDCB5FE3A", + ], + "Properties": Object { + "AuthorizationType": "CUSTOM", + "AuthorizerId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiCustomAuthorizerHandler80C96C55Ref", + }, + "HttpMethod": "DELETE", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:ap-southeast-1:lambda:path/2015-03-31/functions/", + Object { + "Fn::GetAtt": Array [ + "ApiLambdaDeleteBudget6E0EFB99", + "Arn", + ], + }, + "/invocations", + ], + ], + }, + }, + "MethodResponses": Array [ + Object { + "ResponseModels": Object {}, + "StatusCode": "200", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "400", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "404", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "403", + }, + ], + "OperationName": "DeleteAdministrationBudgets", + "RequestValidatorId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiValidator5117C971Ref", + }, + "ResourceId": Object { + "Ref": "ApiRestApiRefadministrationBudgetsF3D9DA30", + }, + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "ApiRestApiRefadministrationbudgetsDELETEApiPermissionAdaAdministrationServiceApiRestApiRef8F32857ADELETEAdministrationBudgets719FAD4E": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaDeleteBudget6E0EFB99", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/prod/DELETE/administration/budgets", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApiRestApiRefadministrationbudgetsDELETEApiPermissionTestAdaAdministrationServiceApiRestApiRef8F32857ADELETEAdministrationBudgetsDAF380DB": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaDeleteBudget6E0EFB99", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/test-invoke-stage/DELETE/administration/budgets", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApiRestApiRefadministrationbudgetsGETApiPermissionAdaAdministrationServiceApiRestApiRef8F32857AGETAdministrationBudgetsEDA75EFB": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaGetBudget9733845A", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/prod/GET/administration/budgets", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApiRestApiRefadministrationbudgetsGETApiPermissionTestAdaAdministrationServiceApiRestApiRef8F32857AGETAdministrationBudgetsB01336AE": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaGetBudget9733845A", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/test-invoke-stage/GET/administration/budgets", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApiRestApiRefadministrationbudgetsOPTIONSA6319DA3": Object { + "Properties": Object { + "ApiKeyRequired": false, + "AuthorizationType": "NONE", + "HttpMethod": "OPTIONS", + "Integration": Object { + "IntegrationResponses": Array [ + Object { + "ResponseParameters": Object { + "method.response.header.Access-Control-Allow-Headers": "'Authorization,*'", + "method.response.header.Access-Control-Allow-Methods": "'OPTIONS,GET,PUT,POST,DELETE,PATCH,HEAD'", + "method.response.header.Access-Control-Allow-Origin": "'*'", + "method.response.header.Access-Control-Max-Age": "'600'", + }, + "StatusCode": "200", + }, + ], + "RequestTemplates": Object { + "application/json": "{ statusCode: 200 }", + }, + "Type": "MOCK", + }, + "MethodResponses": Array [ + Object { + "ResponseParameters": Object { + "method.response.header.Access-Control-Allow-Headers": true, + "method.response.header.Access-Control-Allow-Methods": true, + "method.response.header.Access-Control-Allow-Origin": true, + "method.response.header.Access-Control-Max-Age": true, + }, + "StatusCode": "200", + }, + ], + "ResourceId": Object { + "Ref": "ApiRestApiRefadministrationBudgetsF3D9DA30", + }, + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "ApiRestApiRefadministrationbudgetsPOST42FA30D1": Object { + "DependsOn": Array [ + "ApiRestApiRefadministrationbudgetsOPTIONSA6319DA3", + ], + "Properties": Object { + "AuthorizationType": "CUSTOM", + "AuthorizerId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiCustomAuthorizerHandler80C96C55Ref", + }, + "HttpMethod": "POST", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:ap-southeast-1:lambda:path/2015-03-31/functions/", + Object { + "Fn::GetAtt": Array [ + "ApiLambdaPostBudget69EEB94F", + "Arn", + ], + }, + "/invocations", + ], + ], + }, + }, + "MethodResponses": Array [ + Object { + "ResponseModels": Object {}, + "StatusCode": "200", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "400", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "404", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "403", + }, + ], + "OperationName": "PostAdministrationBudgets", + "RequestModels": Object { + "application/json": Object { + "Ref": "ApiRestApiRefadministrationbudgetsPostAdministrationBudgetsRequest933D3E18", + }, + }, + "RequestValidatorId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiValidator5117C971Ref", + }, + "ResourceId": Object { + "Ref": "ApiRestApiRefadministrationBudgetsF3D9DA30", + }, + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "ApiRestApiRefadministrationbudgetsPOSTApiPermissionAdaAdministrationServiceApiRestApiRef8F32857APOSTAdministrationBudgets26E198FE": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaPostBudget69EEB94F", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/prod/POST/administration/budgets", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApiRestApiRefadministrationbudgetsPOSTApiPermissionTestAdaAdministrationServiceApiRestApiRef8F32857APOSTAdministrationBudgets2CD70B47": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaPostBudget69EEB94F", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/test-invoke-stage/POST/administration/budgets", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApiRestApiRefadministrationbudgetsPostAdministrationBudgetsRequest933D3E18": Object { + "Properties": Object { + "ContentType": "application/json", + "Description": "Create new/Update existing budget with notification and subscribers", + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "Schema": Object { + "$schema": "http://json-schema.org/draft-04/schema#", + "properties": Object { + "budgetLimit": Object { + "type": "integer", + }, + "softNotifications": Object { + "description": "Soft notifications", + "items": Object { + "type": "integer", + }, + "type": "array", + }, + "subscriberList": Object { + "description": "Subscribers to recieve notifications", + "items": Object { + "type": "string", + }, + "type": "array", + }, + "updatedTimestamp": Object { + "maxLength": 64, + "pattern": "^(\\\\d{4})-(\\\\d{2})-(\\\\d{2})(?:T(\\\\d{2}):(\\\\d{2}):(\\\\d{2}(?:\\\\.\\\\d*)?)((-(\\\\d{2}):(\\\\d{2})|Z)?))?$", + "type": "string", + }, + }, + "required": Array [ + "budgetLimit", + "subscriberList", + "softNotifications", + ], + "title": "PostAdministrationBudgetsRequest", + "type": "object", + }, + }, + "Type": "AWS::ApiGateway::Model", + }, + "ApiRestApiRefadministrationdeploysupersetOPTIONSFC426E9A": Object { + "Properties": Object { + "ApiKeyRequired": false, + "AuthorizationType": "NONE", + "HttpMethod": "OPTIONS", + "Integration": Object { + "IntegrationResponses": Array [ + Object { + "ResponseParameters": Object { + "method.response.header.Access-Control-Allow-Headers": "'Authorization,*'", + "method.response.header.Access-Control-Allow-Methods": "'OPTIONS,GET,PUT,POST,DELETE,PATCH,HEAD'", + "method.response.header.Access-Control-Allow-Origin": "'*'", + "method.response.header.Access-Control-Max-Age": "'600'", + }, + "StatusCode": "200", + }, + ], + "RequestTemplates": Object { + "application/json": "{ statusCode: 200 }", + }, + "Type": "MOCK", + }, + "MethodResponses": Array [ + Object { + "ResponseParameters": Object { + "method.response.header.Access-Control-Allow-Headers": true, + "method.response.header.Access-Control-Allow-Methods": true, + "method.response.header.Access-Control-Allow-Origin": true, + "method.response.header.Access-Control-Max-Age": true, + }, + "StatusCode": "200", + }, + ], + "ResourceId": Object { + "Ref": "ApiRestApiRefadministrationDeploySuperset4261B23E", + }, + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "ApiRestApiRefadministrationdeploysupersetPOST1297F933": Object { + "DependsOn": Array [ + "ApiRestApiRefadministrationdeploysupersetOPTIONSFC426E9A", + ], + "Properties": Object { + "AuthorizationType": "CUSTOM", + "AuthorizerId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiCustomAuthorizerHandler80C96C55Ref", + }, + "HttpMethod": "POST", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:ap-southeast-1:lambda:path/2015-03-31/functions/", + Object { + "Fn::GetAtt": Array [ + "ApiLambdaDeploySupersetCE112C28", + "Arn", + ], + }, + "/invocations", + ], + ], + }, + }, + "MethodResponses": Array [ + Object { + "ResponseModels": Object {}, + "StatusCode": "200", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "400", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "404", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "403", + }, + ], + "OperationName": "PostAdministrationDeploySuperset", + "RequestValidatorId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiValidator5117C971Ref", + }, + "ResourceId": Object { + "Ref": "ApiRestApiRefadministrationDeploySuperset4261B23E", + }, + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "ApiRestApiRefadministrationdeploysupersetPOSTApiPermissionAdaAdministrationServiceApiRestApiRef8F32857APOSTAdministrationDeploySuperset7F894572": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaDeploySupersetCE112C28", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/prod/POST/administration/deploy-superset", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApiRestApiRefadministrationdeploysupersetPOSTApiPermissionTestAdaAdministrationServiceApiRestApiRef8F32857APOSTAdministrationDeploySuperset235D88AD": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaDeploySupersetCE112C28", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/test-invoke-stage/POST/administration/deploy-superset", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApiRestApiRefadministrationstartteardownDestroyDataDCBFCBA5": Object { + "Properties": Object { + "ParentId": Object { + "Ref": "ApiRestApiRefadministrationStartTearDown66E3AD16", + }, + "PathPart": "destroy-data", + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "ApiRestApiRefadministrationstartteardownOPTIONS6D1EC999": Object { + "Properties": Object { + "ApiKeyRequired": false, + "AuthorizationType": "NONE", + "HttpMethod": "OPTIONS", + "Integration": Object { + "IntegrationResponses": Array [ + Object { + "ResponseParameters": Object { + "method.response.header.Access-Control-Allow-Headers": "'Authorization,*'", + "method.response.header.Access-Control-Allow-Methods": "'OPTIONS,GET,PUT,POST,DELETE,PATCH,HEAD'", + "method.response.header.Access-Control-Allow-Origin": "'*'", + "method.response.header.Access-Control-Max-Age": "'600'", + }, + "StatusCode": "200", + }, + ], + "RequestTemplates": Object { + "application/json": "{ statusCode: 200 }", + }, + "Type": "MOCK", + }, + "MethodResponses": Array [ + Object { + "ResponseParameters": Object { + "method.response.header.Access-Control-Allow-Headers": true, + "method.response.header.Access-Control-Allow-Methods": true, + "method.response.header.Access-Control-Allow-Origin": true, + "method.response.header.Access-Control-Max-Age": true, + }, + "StatusCode": "200", + }, + ], + "ResourceId": Object { + "Ref": "ApiRestApiRefadministrationStartTearDown66E3AD16", + }, + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "ApiRestApiRefadministrationstartteardownRetainDataD8D5A6FE": Object { + "Properties": Object { + "ParentId": Object { + "Ref": "ApiRestApiRefadministrationStartTearDown66E3AD16", + }, + "PathPart": "retain-data", + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "ApiRestApiRefadministrationstartteardowndestroydataDELETE95234A82": Object { + "DependsOn": Array [ + "ApiRestApiRefadministrationstartteardowndestroydataOPTIONSB50EAC5B", + ], + "Properties": Object { + "AuthorizationType": "CUSTOM", + "AuthorizerId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiCustomAuthorizerHandler80C96C55Ref", + }, + "HttpMethod": "DELETE", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:ap-southeast-1:lambda:path/2015-03-31/functions/", + Object { + "Fn::GetAtt": Array [ + "ApiLambdaStartTearDownDestroyData8A16B5F1", + "Arn", + ], + }, + "/invocations", + ], + ], + }, + }, + "MethodResponses": Array [ + Object { + "ResponseModels": Object {}, + "StatusCode": "200", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "400", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "403", + }, + ], + "OperationName": "DeleteAdministrationStartTearDownDestroyData", + "RequestValidatorId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiValidator5117C971Ref", + }, + "ResourceId": Object { + "Ref": "ApiRestApiRefadministrationstartteardownDestroyDataDCBFCBA5", + }, + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "ApiRestApiRefadministrationstartteardowndestroydataDELETEApiPermissionAdaAdministrationServiceApiRestApiRef8F32857ADELETEAdministrationStartTearDownDestroyData139AFCFD": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaStartTearDownDestroyData8A16B5F1", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/prod/DELETE/administration/start-tear-down/destroy-data", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApiRestApiRefadministrationstartteardowndestroydataDELETEApiPermissionTestAdaAdministrationServiceApiRestApiRef8F32857ADELETEAdministrationStartTearDownDestroyData87F2D899": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaStartTearDownDestroyData8A16B5F1", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/test-invoke-stage/DELETE/administration/start-tear-down/destroy-data", + ], + ], }, }, - "Type": "AWS::ApiGateway::Resource", + "Type": "AWS::Lambda::Permission", }, - "ApiRestApiRefadministrationOPTIONS9595A0BA": Object { + "ApiRestApiRefadministrationstartteardowndestroydataOPTIONSB50EAC5B": Object { "Properties": Object { "ApiKeyRequired": false, "AuthorizationType": "NONE", @@ -1478,7 +4086,7 @@ Object { }, ], "ResourceId": Object { - "Ref": "ApiRestApiRefAdministrationD50CFF79", + "Ref": "ApiRestApiRefadministrationstartteardownDestroyDataDCBFCBA5", }, "RestApiId": Object { "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", @@ -1486,31 +4094,133 @@ Object { }, "Type": "AWS::ApiGateway::Method", }, - "ApiRestApiRefadministrationStartTearDown66E3AD16": Object { + "ApiRestApiRefadministrationstartteardownretaindataDELETEApiPermissionAdaAdministrationServiceApiRestApiRef8F32857ADELETEAdministrationStartTearDownRetainData6FD18BDE": Object { "Properties": Object { - "ParentId": Object { - "Ref": "ApiRestApiRefAdministrationD50CFF79", + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaStartTearDownRetainData494048DD", + "Arn", + ], }, - "PathPart": "start-tear-down", - "RestApiId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/prod/DELETE/administration/start-tear-down/retain-data", + ], + ], }, }, - "Type": "AWS::ApiGateway::Resource", + "Type": "AWS::Lambda::Permission", }, - "ApiRestApiRefadministrationstartteardownDestroyDataDCBFCBA5": Object { + "ApiRestApiRefadministrationstartteardownretaindataDELETEApiPermissionTestAdaAdministrationServiceApiRestApiRef8F32857ADELETEAdministrationStartTearDownRetainDataA3A59248": Object { "Properties": Object { - "ParentId": Object { - "Ref": "ApiRestApiRefadministrationStartTearDown66E3AD16", + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApiLambdaStartTearDownRetainData494048DD", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:ap-southeast-1:1111111111:", + Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + "/test-invoke-stage/DELETE/administration/start-tear-down/retain-data", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApiRestApiRefadministrationstartteardownretaindataDELETED088B466": Object { + "DependsOn": Array [ + "ApiRestApiRefadministrationstartteardownretaindataOPTIONS4EFC215B", + ], + "Properties": Object { + "AuthorizationType": "CUSTOM", + "AuthorizerId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiCustomAuthorizerHandler80C96C55Ref", + }, + "HttpMethod": "DELETE", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:ap-southeast-1:lambda:path/2015-03-31/functions/", + Object { + "Fn::GetAtt": Array [ + "ApiLambdaStartTearDownRetainData494048DD", + "Arn", + ], + }, + "/invocations", + ], + ], + }, + }, + "MethodResponses": Array [ + Object { + "ResponseModels": Object {}, + "StatusCode": "200", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "400", + }, + Object { + "ResponseModels": Object { + "application/json": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + }, + }, + "StatusCode": "403", + }, + ], + "OperationName": "DeleteAdministrationStartTearDownRetainData", + "RequestValidatorId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiValidator5117C971Ref", + }, + "ResourceId": Object { + "Ref": "ApiRestApiRefadministrationstartteardownRetainDataD8D5A6FE", }, - "PathPart": "destroy-data", "RestApiId": Object { "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", }, }, - "Type": "AWS::ApiGateway::Resource", + "Type": "AWS::ApiGateway::Method", }, - "ApiRestApiRefadministrationstartteardownOPTIONS6D1EC999": Object { + "ApiRestApiRefadministrationstartteardownretaindataOPTIONS4EFC215B": Object { "Properties": Object { "ApiKeyRequired": false, "AuthorizationType": "NONE", @@ -1524,60 +4234,213 @@ Object { "method.response.header.Access-Control-Allow-Origin": "'*'", "method.response.header.Access-Control-Max-Age": "'600'", }, - "StatusCode": "200", + "StatusCode": "200", + }, + ], + "RequestTemplates": Object { + "application/json": "{ statusCode: 200 }", + }, + "Type": "MOCK", + }, + "MethodResponses": Array [ + Object { + "ResponseParameters": Object { + "method.response.header.Access-Control-Allow-Headers": true, + "method.response.header.Access-Control-Allow-Methods": true, + "method.response.header.Access-Control-Allow-Origin": true, + "method.response.header.Access-Control-Max-Age": true, + }, + "StatusCode": "200", + }, + ], + "ResourceId": Object { + "Ref": "ApiRestApiRefadministrationstartteardownRetainDataD8D5A6FE", + }, + "RestApiId": Object { + "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "ApiTearDownPermissionsBoundaryBE821880": Object { + "Metadata": Object { + "cfn_nag": Object { + "rules_to_suppress": Array [ + Object { + "id": "F40", + "reason": "Policy is for CDK permissions which require this level of permissiveness - solution prevents elevation of permissions through a PermissionBoundary as per AppSec requirements.", + }, + Object { + "id": "F5", + "reason": "Policy is for CDK permissions which require this level of permissiveness - solution prevents elevation of permissions through a PermissionBoundary as per AppSec requirements.", + }, + Object { + "id": "W13", + "reason": "Policy is for CDK permissions which require this level of permissiveness - solution prevents elevation of permissions through a PermissionBoundary as per AppSec requirements.", + }, + ], + }, + }, + "Properties": Object { + "Description": "", + "Path": "/", + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "s3:*", + "cloudformation:*", + "lambda:*", + "glue:*", + "ecs:*", + "states:*", + "logs:*", + "kms:*", + "iam:*", + "cloudtrail:*", + "cloudwatch:*", + "events:*", + "kinesis:*", + "firehose:*", + "dynamodb:*", + "ssm:*", + ], + "Effect": "Allow", + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::IAM::ManagedPolicy", + }, + "AppRegistryAssociation": Object { + "Properties": Object { + "Application": Object { + "Fn::Join": Array [ + "-", + Array [ + "Automated-Data-Analysis-on-AWS", + Object { + "Ref": "AWS::Region", + }, + Object { + "Ref": "AWS::AccountId", + }, + ], + ], + }, + "Resource": Object { + "Ref": "AWS::StackId", + }, + "ResourceType": "CFN_STACK", + }, + "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation", + }, + "BudgetCleanUp2CD60C97": Object { + "DeletionPolicy": "Delete", + "DependsOn": Array [ + "BudgetCleanUpCustomResourcePolicyB4B375D9", + ], + "Properties": Object { + "Delete": "{\\"ignoreErrorCodesMatching\\":\\"NotFoundException\\",\\"service\\":\\"Budgets\\",\\"action\\":\\"DeleteBudget\\",\\"parameters\\":{\\"AccountId\\":\\"1111111111\\",\\"BudgetName\\":\\"AWS_Solution_Ada_ap-southeast-1\\"},\\"physicalResourceId\\":{\\"id\\":\\"AWS_Solution_Ada_ap-southeast-1\\"}}", + "InstallLatestAwsSdk": true, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "AWS679F53Fac002430Cb0Da5B7982Bd22872D164C4C", + "Arn", + ], + }, + }, + "Type": "Custom::AWS", + "UpdateReplacePolicy": "Delete", + }, + "BudgetCleanUpCustomResourcePolicyB4B375D9": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "budgets:ModifyBudget", + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":budgets::1111111111:budget/AWS_Solution_Ada_ap-southeast-1", + ], + ], + }, }, ], - "RequestTemplates": Object { - "application/json": "{ statusCode: 200 }", - }, - "Type": "MOCK", + "Version": "2012-10-17", }, - "MethodResponses": Array [ + "PolicyName": "BudgetCleanUpCustomResourcePolicyB4B375D9", + "Roles": Array [ Object { - "ResponseParameters": Object { - "method.response.header.Access-Control-Allow-Headers": true, - "method.response.header.Access-Control-Allow-Methods": true, - "method.response.header.Access-Control-Allow-Origin": true, - "method.response.header.Access-Control-Max-Age": true, - }, - "StatusCode": "200", + "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", }, ], - "ResourceId": Object { - "Ref": "ApiRestApiRefadministrationStartTearDown66E3AD16", - }, - "RestApiId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", - }, }, - "Type": "AWS::ApiGateway::Method", + "Type": "AWS::IAM::Policy", }, - "ApiRestApiRefadministrationstartteardownRetainDataD8D5A6FE": Object { + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536": Object { + "DependsOn": Array [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + ], "Properties": Object { - "ParentId": Object { - "Ref": "ApiRestApiRefadministrationStartTearDown66E3AD16", + "Code": Object { + "S3Bucket": "cdk-#####", + "S3Key": "cdkhash######.zip", }, - "PathPart": "retain-data", - "RestApiId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + "Environment": Object { + "Variables": Object { + "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", + }, }, + "Handler": "index.handler", + "Layers": Array [ + Object { + "Ref": "DeployScriptsAwsCliLayer8E94A235", + }, + ], + "Role": Object { + "Fn::GetAtt": Array [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + "Arn", + ], + }, + "Runtime": "python3.9", + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + "Timeout": 900, }, - "Type": "AWS::ApiGateway::Resource", + "Type": "AWS::Lambda::Function", }, - "ApiRestApiRefadministrationstartteardowndestroydataDELETE95234A82": Object { - "DependsOn": Array [ - "ApiRestApiRefadministrationstartteardowndestroydataOPTIONSB50EAC5B", - ], + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265": Object { "Properties": Object { - "AuthorizationType": "CUSTOM", - "AuthorizerId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiCustomAuthorizerHandler80C96C55Ref", + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", }, - "HttpMethod": "DELETE", - "Integration": Object { - "IntegrationHttpMethod": "POST", - "Type": "AWS_PROXY", - "Uri": Object { + "ManagedPolicyArns": Array [ + Object { "Fn::Join": Array [ "", Array [ @@ -1585,225 +4448,425 @@ Object { Object { "Ref": "AWS::Partition", }, - ":apigateway:ap-southeast-1:lambda:path/2015-03-31/functions/", + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Application", + "Value": "Ada", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::cdk-hnb659fds-assets-1111111111-ap-southeast-1", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::cdk-hnb659fds-assets-1111111111-ap-southeast-1/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + "s3:DeleteObject*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", + "s3:Abort*", + ], + "Effect": "Allow", + "Resource": Array [ Object { "Fn::GetAtt": Array [ - "ApiLambdaStartTearDownDestroyData8A16B5F1", + "DeploymentScriptBucket", "Arn", ], }, - "/invocations", + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "DeploymentScriptBucket", + "Arn", + ], + }, + "/*", + ], + ], + }, ], - ], - }, - }, - "MethodResponses": Array [ - Object { - "ResponseModels": Object {}, - "StatusCode": "200", - }, - Object { - "ResponseModels": Object { - "application/json": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", - }, }, - "StatusCode": "400", - }, - Object { - "ResponseModels": Object { - "application/json": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDeploymentScriptBucket915B124DArn", }, }, - "StatusCode": "403", + ], + "Version": "2012-10-17", + }, + "PolicyName": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", + "Roles": Array [ + Object { + "Ref": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", }, ], - "OperationName": "DeleteAdministrationStartTearDownDestroyData", - "RequestValidatorId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiValidator5117C971Ref", - }, - "ResourceId": Object { - "Ref": "ApiRestApiRefadministrationstartteardownDestroyDataDCBFCBA5", - }, - "RestApiId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", - }, }, - "Type": "AWS::ApiGateway::Method", + "Type": "AWS::IAM::Policy", }, - "ApiRestApiRefadministrationstartteardowndestroydataDELETEApiPermissionAdaAdministrationServiceApiRestApiRef8F32857ADELETEAdministrationStartTearDownDestroyData139AFCFD": Object { + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": Object { + "DependsOn": Array [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + ], "Properties": Object { - "Action": "lambda:InvokeFunction", - "FunctionName": Object { - "Fn::GetAtt": Array [ - "ApiLambdaStartTearDownDestroyData8A16B5F1", - "Arn", - ], + "Code": Object { + "S3Bucket": "cdk-#####", + "S3Key": "cdkhash######.zip", }, - "Principal": "apigateway.amazonaws.com", - "SourceArn": Object { + "Description": Object { "Fn::Join": Array [ "", Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":execute-api:ap-southeast-1:1111111111:", + "Lambda function for auto-deleting objects in ", Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + "Ref": "DeploymentScriptBucket", }, - "/prod/DELETE/administration/start-tear-down/destroy-data", + " S3 bucket.", ], ], }, + "Handler": "index.handler", + "MemorySize": 128, + "Role": Object { + "Fn::GetAtt": Array [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn", + ], + }, + "Runtime": "nodejs18.x", + "Timeout": 900, + }, + "Type": "AWS::Lambda::Function", + }, + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Sub": "arn:\${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "DeployScriptsAwsCliLayer8E94A235": Object { + "Properties": Object { + "Content": Object { + "S3Bucket": "cdk-#####", + "S3Key": "cdkhash######.zip", + }, + "Description": "/opt/awscli/aws", }, - "Type": "AWS::Lambda::Permission", + "Type": "AWS::Lambda::LayerVersion", }, - "ApiRestApiRefadministrationstartteardowndestroydataDELETEApiPermissionTestAdaAdministrationServiceApiRestApiRef8F32857ADELETEAdministrationStartTearDownDestroyData87F2D899": Object { + "DeployScriptsCustomResourceD26A4D08": Object { + "DeletionPolicy": "Delete", "Properties": Object { - "Action": "lambda:InvokeFunction", - "FunctionName": Object { + "DestinationBucketKeyPrefix": "deployment", + "DestinationBucketName": Object { + "Ref": "DeploymentScriptBucket", + }, + "Extract": false, + "Prune": true, + "ServiceToken": Object { "Fn::GetAtt": Array [ - "ApiLambdaStartTearDownDestroyData8A16B5F1", + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "Arn", ], }, - "Principal": "apigateway.amazonaws.com", - "SourceArn": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":execute-api:ap-southeast-1:1111111111:", - Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", - }, - "/test-invoke-stage/DELETE/administration/start-tear-down/destroy-data", - ], - ], - }, + "SourceBucketNames": Array [ + "cdk-#####", + ], + "SourceObjectKeys": Array [ + "cdkhash######.zip", + ], }, - "Type": "AWS::Lambda::Permission", + "Type": "Custom::CDKBucketDeployment", + "UpdateReplacePolicy": "Delete", }, - "ApiRestApiRefadministrationstartteardowndestroydataOPTIONSB50EAC5B": Object { + "DeploymentScriptBucket": Object { + "DeletionPolicy": "Delete", "Properties": Object { - "ApiKeyRequired": false, - "AuthorizationType": "NONE", - "HttpMethod": "OPTIONS", - "Integration": Object { - "IntegrationResponses": Array [ + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ Object { - "ResponseParameters": Object { - "method.response.header.Access-Control-Allow-Headers": "'Authorization,*'", - "method.response.header.Access-Control-Allow-Methods": "'OPTIONS,GET,PUT,POST,DELETE,PATCH,HEAD'", - "method.response.header.Access-Control-Allow-Origin": "'*'", - "method.response.header.Access-Control-Max-Age": "'600'", + "ServerSideEncryptionByDefault": Object { + "KMSMasterKeyID": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDeploymentScriptBucket915B124DArn", + }, + "SSEAlgorithm": "aws:kms", }, - "StatusCode": "200", }, ], - "RequestTemplates": Object { - "application/json": "{ statusCode: 200 }", + }, + "LoggingConfiguration": Object { + "DestinationBucketName": Object { + "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackAccessLogBucketB5B66FEDRef", }, - "Type": "MOCK", + "LogFilePrefix": "deployment-scripts/", }, - "MethodResponses": Array [ + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "Tags": Array [ Object { - "ResponseParameters": Object { - "method.response.header.Access-Control-Allow-Headers": true, - "method.response.header.Access-Control-Allow-Methods": true, - "method.response.header.Access-Control-Allow-Origin": true, - "method.response.header.Access-Control-Max-Age": true, - }, - "StatusCode": "200", + "Key": "Application", + "Value": "Ada", + }, + Object { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true", + }, + Object { + "Key": "aws-cdk:cr-owned:deployment:c3a075a6", + "Value": "true", }, ], - "ResourceId": Object { - "Ref": "ApiRestApiRefadministrationstartteardownDestroyDataDCBFCBA5", - }, - "RestApiId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + "VersioningConfiguration": Object { + "Status": "Enabled", }, }, - "Type": "AWS::ApiGateway::Method", + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Delete", }, - "ApiRestApiRefadministrationstartteardownretaindataDELETEApiPermissionAdaAdministrationServiceApiRestApiRef8F32857ADELETEAdministrationStartTearDownRetainData6FD18BDE": Object { + "DeploymentScriptBucketAutoDeleteObjectsCustomResourceABF68066": Object { + "DeletionPolicy": "Delete", + "DependsOn": Array [ + "DeploymentScriptBucketPolicy49477E0E", + ], "Properties": Object { - "Action": "lambda:InvokeFunction", - "FunctionName": Object { + "BucketName": Object { + "Ref": "DeploymentScriptBucket", + }, + "ServiceToken": Object { "Fn::GetAtt": Array [ - "ApiLambdaStartTearDownRetainData494048DD", + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "Arn", ], }, - "Principal": "apigateway.amazonaws.com", - "SourceArn": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", + }, + "Type": "Custom::S3AutoDeleteObjects", + "UpdateReplacePolicy": "Delete", + }, + "DeploymentScriptBucketPolicy49477E0E": Object { + "Properties": Object { + "Bucket": Object { + "Ref": "DeploymentScriptBucket", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, }, - ":execute-api:ap-southeast-1:1111111111:", - Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + "Effect": "Deny", + "Principal": Object { + "AWS": "*", }, - "/prod/DELETE/administration/start-tear-down/retain-data", - ], + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "DeploymentScriptBucket", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "DeploymentScriptBucket", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "s3:PutBucketPolicy", + "s3:GetBucket*", + "s3:List*", + "s3:DeleteObject*", + ], + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::GetAtt": Array [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn", + ], + }, + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "DeploymentScriptBucket", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "DeploymentScriptBucket", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, ], + "Version": "2012-10-17", }, }, - "Type": "AWS::Lambda::Permission", + "Type": "AWS::S3::BucketPolicy", }, - "ApiRestApiRefadministrationstartteardownretaindataDELETEApiPermissionTestAdaAdministrationServiceApiRestApiRef8F32857ADELETEAdministrationStartTearDownRetainDataA3A59248": Object { + "VisSolutionDeployProject0B4F52E2": Object { "Properties": Object { - "Action": "lambda:InvokeFunction", - "FunctionName": Object { - "Fn::GetAtt": Array [ - "ApiLambdaStartTearDownRetainData494048DD", - "Arn", - ], + "Artifacts": Object { + "Type": "NO_ARTIFACTS", }, - "Principal": "apigateway.amazonaws.com", - "SourceArn": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", + "Cache": Object { + "Type": "NO_CACHE", + }, + "Description": "CodeBuild project to deploy Apache Superset visualisation solution for Ada", + "EncryptionKey": "alias/aws/s3", + "Environment": Object { + "ComputeType": "BUILD_GENERAL1_MEDIUM", + "EnvironmentVariables": Array [ + Object { + "Name": "ADA_ATHENA_ENDPOINT_URL", + "Type": "PLAINTEXT", + "Value": Object { + "Fn::Join": Array [ + "", + Array [ + "https://", + Object { + "Ref": "referencetoAdaQueryServiceNestedStackQueryServiceNestedStackResourceB637DA5COutputsAdaQueryServiceAthenaProxyDistribution31E1FEE1DomainName", + }, + ], + ], }, - ":execute-api:ap-southeast-1:1111111111:", - Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", + }, + Object { + "Name": "AWS_REGION", + "Type": "PLAINTEXT", + "Value": Object { + "Ref": "AWS::Region", }, - "/test-invoke-stage/DELETE/administration/start-tear-down/retain-data", - ], + }, + Object { + "Name": "VERSION_TAG", + "Type": "PLAINTEXT", + "Value": "latest", + }, + Object { + "Name": "CFN_TEMP_BUCKET", + "Type": "PLAINTEXT", + "Value": Object { + "Ref": "DeploymentScriptBucket", + }, + }, ], + "Image": "aws/codebuild/standard:6.0", + "ImagePullCredentialsType": "CODEBUILD", + "PrivilegedMode": true, + "Type": "LINUX_CONTAINER", }, - }, - "Type": "AWS::Lambda::Permission", - }, - "ApiRestApiRefadministrationstartteardownretaindataDELETED088B466": Object { - "DependsOn": Array [ - "ApiRestApiRefadministrationstartteardownretaindataOPTIONS4EFC215B", - ], - "Properties": Object { - "AuthorizationType": "CUSTOM", - "AuthorizerId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiCustomAuthorizerHandler80C96C55Ref", + "ServiceRole": Object { + "Fn::GetAtt": Array [ + "VisSolutionDeployProjectRole8C6397B7", + "Arn", + ], }, - "HttpMethod": "DELETE", - "Integration": Object { - "IntegrationHttpMethod": "POST", - "Type": "AWS_PROXY", - "Uri": Object { + "Source": Object { + "BuildSpec": Object { "Fn::Join": Array [ "", Array [ @@ -1811,119 +4874,261 @@ Object { Object { "Ref": "AWS::Partition", }, - ":apigateway:ap-southeast-1:lambda:path/2015-03-31/functions/", + ":s3:::cdk-hnb659fds-assets-1111111111-ap-southeast-1/###hash64###.yml", + ], + ], + }, + "Location": Object { + "Fn::Join": Array [ + "", + Array [ Object { - "Fn::GetAtt": Array [ - "ApiLambdaStartTearDownRetainData494048DD", - "Arn", + "Ref": "DeploymentScriptBucket", + }, + "/", + Object { + "Fn::Join": Array [ + "/", + Array [ + "deployment", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::GetAtt": Array [ + "DeployScriptsCustomResourceD26A4D08", + "SourceObjectKeys", + ], + }, + ], + }, + ], ], }, - "/invocations", ], ], }, + "Type": "S3", }, - "MethodResponses": Array [ - Object { - "ResponseModels": Object {}, - "StatusCode": "200", - }, - Object { - "ResponseModels": Object { - "application/json": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", - }, - }, - "StatusCode": "400", - }, + "Tags": Array [ Object { - "ResponseModels": Object { - "application/json": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiErrorModelD8BFCFCERef", - }, - }, - "StatusCode": "403", + "Key": "Application", + "Value": "Ada", }, ], - "OperationName": "DeleteAdministrationStartTearDownRetainData", - "RequestValidatorId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApiFederatedRestApiValidator5117C971Ref", - }, - "ResourceId": Object { - "Ref": "ApiRestApiRefadministrationstartteardownRetainDataD8D5A6FE", - }, - "RestApiId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", - }, + "TimeoutInMinutes": 120, }, - "Type": "AWS::ApiGateway::Method", + "Type": "AWS::CodeBuild::Project", }, - "ApiRestApiRefadministrationstartteardownretaindataOPTIONS4EFC215B": Object { + "VisSolutionDeployProjectRole8C6397B7": Object { "Properties": Object { - "ApiKeyRequired": false, - "AuthorizationType": "NONE", - "HttpMethod": "OPTIONS", - "Integration": Object { - "IntegrationResponses": Array [ + "AssumeRolePolicyDocument": Object { + "Statement": Array [ Object { - "ResponseParameters": Object { - "method.response.header.Access-Control-Allow-Headers": "'Authorization,*'", - "method.response.header.Access-Control-Allow-Methods": "'OPTIONS,GET,PUT,POST,DELETE,PATCH,HEAD'", - "method.response.header.Access-Control-Allow-Origin": "'*'", - "method.response.header.Access-Control-Max-Age": "'600'", + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "codebuild.amazonaws.com", }, - "StatusCode": "200", }, ], - "RequestTemplates": Object { - "application/json": "{ statusCode: 200 }", - }, - "Type": "MOCK", + "Version": "2012-10-17", }, - "MethodResponses": Array [ + "Tags": Array [ Object { - "ResponseParameters": Object { - "method.response.header.Access-Control-Allow-Headers": true, - "method.response.header.Access-Control-Allow-Methods": true, - "method.response.header.Access-Control-Allow-Origin": true, - "method.response.header.Access-Control-Max-Age": true, - }, - "StatusCode": "200", + "Key": "Application", + "Value": "Ada", }, ], - "ResourceId": Object { - "Ref": "ApiRestApiRefadministrationstartteardownRetainDataD8D5A6FE", - }, - "RestApiId": Object { - "Ref": "referencetoAdaApiServiceNestedStackApiServiceNestedStackResourceBBF04FB4OutputsAdaApiServiceFederatedApiFederatedRestApi1FB0E4F5Ref", - }, }, - "Type": "AWS::ApiGateway::Method", + "Type": "AWS::IAM::Role", }, - "ApiTearDownPermissionsBoundaryBE821880": Object { + "VisSolutionDeployProjectRoleDefaultPolicy971F5CB5": Object { "Metadata": Object { "cfn_nag": Object { "rules_to_suppress": Array [ Object { - "id": "F40", - "reason": "Policy is for CDK permissions which require this level of permissiveness - solution prevents elevation of permissions through a PermissionBoundary as per AppSec requirements.", + "id": "W12", + "reason": "This role requires permissions to deploy the AWS partner solution for visualisation", }, Object { - "id": "F5", - "reason": "Policy is for CDK permissions which require this level of permissiveness - solution prevents elevation of permissions through a PermissionBoundary as per AppSec requirements.", + "id": "F4", + "reason": "This role requires permissions to deploy the AWS partner solution for visualisation", }, Object { - "id": "W13", - "reason": "Policy is for CDK permissions which require this level of permissiveness - solution prevents elevation of permissions through a PermissionBoundary as per AppSec requirements.", + "id": "F39", + "reason": "This role requires permissions to deploy the AWS partner solution for visualisation", + }, + Object { + "id": "W76", + "reason": "This role requires permissions to deploy the AWS partner solution for visualisation", }, ], }, }, "Properties": Object { - "Description": "", - "Path": "/", "PolicyDocument": Object { "Statement": Array [ + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "DeploymentScriptBucket", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "DeploymentScriptBucket", + "Arn", + ], + }, + "/", + Object { + "Fn::Join": Array [ + "/", + Array [ + "deployment", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::GetAtt": Array [ + "DeployScriptsCustomResourceD26A4D08", + "SourceObjectKeys", + ], + }, + ], + }, + ], + ], + }, + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDeploymentScriptBucket915B124DArn", + }, + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::cdk-hnb659fds-assets-1111111111-ap-southeast-1", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::cdk-hnb659fds-assets-1111111111-ap-southeast-1/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":logs:ap-southeast-1:1111111111:log-group:/aws/codebuild/", + Object { + "Ref": "VisSolutionDeployProject0B4F52E2", + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":logs:ap-southeast-1:1111111111:log-group:/aws/codebuild/", + Object { + "Ref": "VisSolutionDeployProject0B4F52E2", + }, + ":*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "codebuild:CreateReportGroup", + "codebuild:CreateReport", + "codebuild:UpdateReport", + "codebuild:BatchPutTestCases", + "codebuild:BatchPutCodeCoverages", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":codebuild:ap-southeast-1:1111111111:report-group/", + Object { + "Ref": "VisSolutionDeployProject0B4F52E2", + }, + "-*", + ], + ], + }, + }, Object { "Action": Array [ "s3:*", @@ -1940,40 +5145,95 @@ Object { "events:*", "kinesis:*", "firehose:*", - "dynamodb:*", - "ssm:*", + "ecr:GetAuthorizationToken", + "ecr:DescribeRepositories", + "ecr:CreateRepository", + "ecr:BatchCheckLayerAvailability", + "ecr:GetDownloadUrlForLayer", + "ecr:GetRepositoryPolicy", + "ecr:ListImages", + "ecr:DescribeImages", + "ecr:BatchGetImage", + "ecr:InitiateLayerUpload", + "ecr:UploadLayerPart", + "ecr:CompleteLayerUpload", + "ecr:PutImage", + "ec2:*", + "elasticfilesystem:*", + "servicediscovery:*", + "elasticloadbalancing:*", + "secretsmanager:*", + "route53:*", + "cloudformation:DescribeStacks", + "cloudformation:ExecuteChangeSet", + "cloudformation:DescribeChangeSet", + "cloudformation:CreateChangeSet", + "cloudformation:GetTemplateSummary", ], "Effect": "Allow", "Resource": "*", }, - ], - "Version": "2012-10-17", - }, - }, - "Type": "AWS::IAM::ManagedPolicy", - }, - "AppRegistryAssociation": Object { - "Properties": Object { - "Application": Object { - "Fn::Join": Array [ - "-", - Array [ - "Automated-Data-Analysis-on-AWS", - Object { - "Ref": "AWS::Region", - }, - Object { - "Ref": "AWS::AccountId", + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + "s3:DeleteObject*", + "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", + "s3:Abort*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "DeploymentScriptBucket", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "DeploymentScriptBucket", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "kms:Decrypt", + "kms:DescribeKey", + "kms:Encrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + ], + "Effect": "Allow", + "Resource": Object { + "Ref": "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDeploymentScriptBucket915B124DArn", }, - ], + }, ], + "Version": "2012-10-17", }, - "Resource": Object { - "Ref": "AWS::StackId", - }, - "ResourceType": "CFN_STACK", + "PolicyName": "VisSolutionDeployProjectRoleDefaultPolicy971F5CB5", + "Roles": Array [ + Object { + "Ref": "VisSolutionDeployProjectRole8C6397B7", + }, + ], }, - "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation", + "Type": "AWS::IAM::Policy", }, }, } diff --git a/source/packages/@ada/infra/src/services/administration/stack/index.ts b/source/packages/@ada/infra/src/services/administration/stack/index.ts index 8d204ca..02d58ee 100644 --- a/source/packages/@ada/infra/src/services/administration/stack/index.ts +++ b/source/packages/@ada/infra/src/services/administration/stack/index.ts @@ -1,19 +1,30 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ -import { Bucket } from 'aws-cdk-lib/aws-s3'; +import { Aws, Duration, Fn, Stack } from 'aws-cdk-lib'; +import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId } from 'aws-cdk-lib/custom-resources'; +import { Bucket } from '../../../common/constructs/s3/bucket'; import { Construct } from 'constructs'; +import { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam'; +import { IAM_MODIFY_BUDGET, getBudgetName } from '../constant'; import { Microservice, MicroserviceProps } from '../../../common/services'; -import { Stack } from 'aws-cdk-lib'; import { Table } from 'aws-cdk-lib/aws-dynamodb'; +import { addCfnNagSuppressionsToRolePolicy } from '@ada/cdk-core'; import AdministrationApi from '../api'; import DataProductCreationStateMachine from '../../data-product/components/creation-state-machine'; import serviceConfig from '../service-config'; +import * as codebuild from 'aws-cdk-lib/aws-codebuild'; +import * as path from 'path'; +import * as s3_deploy from 'aws-cdk-lib/aws-s3-deployment'; +import { VisualisationSolutionCodeBuildPolicyStatement } from '@ada/infra-common'; + export interface AdministrationServiceStackProps extends MicroserviceProps { dataProductCreationStateMachine: DataProductCreationStateMachine; dataProductTable: Table; dataBuckets: Bucket[]; coreStack: Stack; + accessLogsBucket: Bucket; + athenaProxyDomainName: string; } /** @@ -25,9 +36,83 @@ export class AdministrationServiceStack extends Microservice { constructor(scope: Construct, id: string, props: AdministrationServiceStackProps) { super(scope, id, { ...props, ...serviceConfig }); + // Budget + const budgetName = getBudgetName(Stack.of(this).region); + const budgetArn = `arn:${Stack.of(this).partition}:budgets::${Stack.of(this).account}:budget/${budgetName}`; + const policy = AwsCustomResourcePolicy.fromStatements([ + new PolicyStatement({ + effect: Effect.ALLOW, + actions: [IAM_MODIFY_BUDGET], + resources: [budgetArn], + }), + ]); + + new AwsCustomResource(this, 'BudgetCleanUp', { + policy, + onDelete: { + ignoreErrorCodesMatching: 'NotFoundException', + service: 'Budgets', + action: 'DeleteBudget', + parameters: { + AccountId: Stack.of(this).account, + BudgetName: budgetName, + }, + physicalResourceId: PhysicalResourceId.of(budgetName), + }, + }); + + // Visualisation solution deployment code build and scripts + const deploymentScriptBucket = new Bucket(this, 'DeploymentScriptBucket', { + retain: false, + serverAccessLogsBucket: props.accessLogsBucket, + serverAccessLogsPrefix: 'deployment-scripts/', + }); + + const deployment = new s3_deploy.BucketDeployment(this, 'DeployScripts', { + sources: [s3_deploy.Source.asset(path.resolve(__dirname, 'visualisation-deployment'))], + destinationBucket: deploymentScriptBucket, + extract: false, + destinationKeyPrefix: 'deployment', + }); + + const deployProject = new codebuild.Project(this, 'VisSolutionDeployProject', { + description: 'CodeBuild project to deploy Apache Superset visualisation solution for Ada', + source: codebuild.Source.s3({ + bucket: deploymentScriptBucket, + path: Fn.join('/', ['deployment', Fn.select(0, deployment.objectKeys)]), + }), + buildSpec: codebuild.BuildSpec.fromAsset( + path.resolve(__dirname, 'visualisation-deployment/visualisation-deployment-spec.yml'), + ), + environment: { + buildImage: codebuild.LinuxBuildImage.STANDARD_6_0, + computeType: codebuild.ComputeType.MEDIUM, + privileged: true, + }, + environmentVariables: { + ADA_ATHENA_ENDPOINT_URL: { value: `https://${props.athenaProxyDomainName}` }, + AWS_REGION: { value: Aws.REGION }, + VERSION_TAG: { value: 'latest' }, + CFN_TEMP_BUCKET: { value: deploymentScriptBucket.bucketName }, + }, + timeout: Duration.hours(2), + }); + deployProject.addToRolePolicy(VisualisationSolutionCodeBuildPolicyStatement); + deploymentScriptBucket.grantReadWrite(deployProject); + + addCfnNagSuppressionsToRolePolicy( + deployProject.role!, + ['W12', 'F4', 'F39', 'W76'].map((_id) => ({ + id: _id, + reason: 'This role requires permissions to deploy the AWS partner solution for visualisation', + })), + ); + + // API this.api = new AdministrationApi(this, 'Api', { ...serviceConfig, ...props, + visualisationDeploymentCodeBuildProjectName: deployProject.projectName, }); } } diff --git a/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.DB b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.DB new file mode 100644 index 0000000..4cd2830 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.DB @@ -0,0 +1,5 @@ +FROM docker.io/library/postgres:15 +RUN set -e + +# replacement for volume config "- ./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d" in original docker-compose file +COPY ./docker/docker-entrypoint-initdb.d /docker-entrypoint-initdb.d \ No newline at end of file diff --git a/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.Node b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.Node new file mode 100644 index 0000000..a56c45e --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.Node @@ -0,0 +1,14 @@ +FROM node:16 +RUN set -e + +# workaround for host volume not support in fargate +RUN mkdir -p /app/superset-frontend + +# replacement for volume config "- ./superset-frontend:/app/superset-frontend" in original docker-compose file +COPY ./superset-frontend /app/superset-frontend + +# replacement for volume config "- ./superset:/app/superset" in original docker-compose file +COPY ./superset /app/superset + +# replacement for volume config "- ./docker:/app/docker" in original docker-compose file +COPY ./docker /app/docker \ No newline at end of file diff --git a/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.SuperSet b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.SuperSet new file mode 100644 index 0000000..bfe04a1 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/Dockerfile.SuperSet @@ -0,0 +1,17 @@ +FROM apachesuperset.docker.scarf.sh/apache/superset:3.0.0 +ARG ADA_ATHENA_ENDPOINT_URL +USER root +# install Athena driver +RUN pip install "boto3>=1.28.84" +RUN pip install "PyAthenaJDBC>1.0.9" +RUN pip install "PyAthena>1.2.0" + +# override Athena Endpoint URL to connecto to Ada +COPY ./docker /app/docker/ +RUN echo "AWS_ENDPOINT_URL_ATHENA=${ADA_ATHENA_ENDPOINT_URL}" >> /app/docker/.env-non-dev + +COPY ./superset/examples/helpers.py /app/superset/examples/helpers.py +COPY ./superset/examples/configs/datasets/examples /app/superset/examples/configs/datasets/ +COPY ./superset/config.py /app/superset/config.py + +USER superset diff --git a/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/deploy.sh b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/deploy.sh new file mode 100644 index 0000000..ef3fa80 --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/deploy.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +ACCOUNT=$(aws sts get-caller-identity | jq -r '.Account') +REGION=${AWS_REGION:=us-east-1} +ECR_REPO="${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com" +TAG=${VERSION_TAG:=latest} + +# clone superset source +git clone --depth 1 --branch 3.1.1 https://github.com/apache/superset.git +cd superset +cp ../Dockerfile.* . + +APP_IMAGE=${ECR_REPO}/superset-app:${TAG} +NODE_IMAGE=${ECR_REPO}/superset-node:${TAG} +DB_IMAGE=${ECR_REPO}/superset-postgres:${TAG} + +# build docker images +aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin ${ECR_REPO} + +aws ecr describe-repositories --repository-names "superset-app" "superset-node" "superset-postgres" +if [[ $? == 254 ]]; then + aws ecr create-repository --repository-name superset-app + aws ecr create-repository --repository-name superset-node + aws ecr create-repository --repository-name superset-postgres +fi; + +docker build -f Dockerfile.DB -t ${DB_IMAGE} . +docker build -f Dockerfile.Node -t ${NODE_IMAGE} . +docker build -f Dockerfile.SuperSet -t ${APP_IMAGE} --build-arg ADA_ATHENA_ENDPOINT_URL=$ADA_ATHENA_ENDPOINT_URL . + +docker push ${DB_IMAGE} +docker push ${NODE_IMAGE} +docker push ${APP_IMAGE} + +cd .. +# download Partner solution for AWS VPC +echo "Download AWS Partner Solution to deploy VPC for Superset" +curl -o superset-vpc.yaml https://aws-ia-us-east-1.s3.us-east-1.amazonaws.com/cfn-ps-aws-vpc/templates/aws-vpc.template.yaml + +# download GCR solution template +## pip install cfn-flip +echo "Download Superset Solution template" +curl -o superset.yaml https://aws-ia-us-east-1.s3.us-east-1.amazonaws.com/cfn-ps-apache-superset/templates/superset-entrypoint-existing-vpc.template.yaml +python update-template.py superset.yaml superset-updated.yaml $DB_IMAGE $NODE_IMAGE $APP_IMAGE $ADA_ATHENA_ENDPOINT_URL + +# deploy VPC +echo "Deploying VPC for Superset" +AVAILABLITY_ZONES=$(aws ec2 describe-availability-zones --region=$REGION | jq -r '.AvailabilityZones[].ZoneName' | head -n2 | tr '\n' ',' | sed 's/,$//') +echo "Deploy VPC to 2 Availibility Zones $AVAILABLITY_ZONES" +aws cloudformation deploy --template-file superset-vpc.yaml --stack-name superset-vpc --s3-bucket $CFN_TEMP_BUCKET \ + --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM \ + --parameter-overrides "AvailabilityZones=$AVAILABLITY_ZONES" "NumberOfAZs=2" "CreateVPCFlowLogsToCloudWatch=true" + +# read output +VPC_OUTPUT=$(aws cloudformation describe-stacks --stack-name superset-vpc --region=$REGION) +VPC_ID=$(echo $VPC_OUTPUT | jq -r '.Stacks[0].Outputs[] | select (.OutputKey == "VPCID") | .OutputValue') +PUBLIC_SUBNET_1=$(echo $VPC_OUTPUT | jq -r '.Stacks[0].Outputs[] | select (.OutputKey == "PublicSubnet1ID") | .OutputValue') +PUBLIC_SUBNET_2=$(echo $VPC_OUTPUT | jq -r '.Stacks[0].Outputs[] | select (.OutputKey == "PublicSubnet2ID") | .OutputValue') +PRIVATE_SUBNET_1=$(echo $VPC_OUTPUT | jq -r '.Stacks[0].Outputs[] | select (.OutputKey == "PrivateSubnet1AID") | .OutputValue') +PRIVATE_SUBNET_2=$(echo $VPC_OUTPUT | jq -r '.Stacks[0].Outputs[] | select (.OutputKey == "PrivateSubnet2AID") | .OutputValue') + +# deploy Superset +echo "Deploying Superset Solution" +aws cloudformation deploy --template-file superset-updated.yaml --stack-name superset --s3-bucket $CFN_TEMP_BUCKET \ + --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM \ + --parameter-overrides 'SuperSetUserPassword=DevTest12345!' "PublicSubnet1=$PUBLIC_SUBNET_1" "PublicSubnet2=$PUBLIC_SUBNET_2" "PrivateSubnet1=$PRIVATE_SUBNET_1" "PrivateSubnet2=$PRIVATE_SUBNET_2" "Vpc=$VPC_ID" + diff --git a/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/update-template.py b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/update-template.py new file mode 100644 index 0000000..f8253df --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/update-template.py @@ -0,0 +1,56 @@ +import sys +from collections import OrderedDict +from cfn_tools import load_yaml, dump_yaml + +if len(sys.argv) != 7: + print("Number of arguments is incorrect") + +print(sys.argv) +source_file = sys.argv[1] +output_file = sys.argv[2] +postgres_image = sys.argv[3] +node_image = sys.argv[4] +app_image = sys.argv[5] +ada_athena_proxy_url = sys.argv[6] + +with open(source_file) as f: + template = load_yaml(f.read()) + +ada_endpoint_value = OrderedDict([('Name','AWS_ENDPOINT_URL_ATHENA'), ('Value', ada_athena_proxy_url)]) + +# DB container +template['Resources']['DbTaskDefinition']['Properties']['ContainerDefinitions'][1]['Image'] = postgres_image + +# app container +superset_task_def = template['Resources']['SupersetTaskDefinition']['Properties']['ContainerDefinitions'][1] +superset_task_def['Image'] = app_image +for env_variable in superset_task_def['Environment']: + if env_variable['Name'] == 'SUPERSET_ENV': + env_variable['Value'] = "production" +ada_endpoint_value_entry = superset_task_def['Environment'][0].copy() +ada_endpoint_value_entry['Name'] = 'AWS_ENDPOINT_URL_ATHENA' +ada_endpoint_value_entry['Value'] = ada_athena_proxy_url +superset_task_def['Environment'].append(ada_endpoint_value_entry) + +# init task container +superset_init_task_def = template['Resources']['SupersetinitTaskDefinition']['Properties']['ContainerDefinitions'][1] +superset_init_task_def['Image'] = app_image +superset_init_task_def['Environment'].append(ada_endpoint_value_entry.copy()) + +# node container +template['Resources']['SupersetnodeTaskDefinition']['Properties']['ContainerDefinitions'][1]['Image'] = node_image + +# worker container +superset_worker_container = template['Resources']['SupersetworkerTaskDefinition']['Properties']['ContainerDefinitions'][1] +superset_worker_container['Image'] = app_image +superset_worker_container['Environment'].append(ada_endpoint_value_entry.copy()) + +# workerbeat container +superset_worker_beat_container = template['Resources']['SupersetworkerbeatTaskDefinition']['Properties']['ContainerDefinitions'][1] +superset_worker_beat_container['Image'] = app_image +superset_worker_beat_container['Environment'].append(ada_endpoint_value_entry.copy()) + +# output the new template +output = open(output_file, "w") +output.write(dump_yaml(template)) +output.close() \ No newline at end of file diff --git a/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/visualisation-deployment-spec.yml b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/visualisation-deployment-spec.yml new file mode 100644 index 0000000..88cc97c --- /dev/null +++ b/source/packages/@ada/infra/src/services/administration/stack/visualisation-deployment/visualisation-deployment-spec.yml @@ -0,0 +1,14 @@ +version: 0.2 +phases: + install: + runtime-versions: + python: '3.10' + commands: + - pip3 install cfn-flip + build: + commands: + - chmod +x deploy.sh + - ./deploy.sh + post_build: + commands: + - echo Build completed diff --git a/source/packages/@ada/infra/src/services/api/components/operational-metrics/client.ts b/source/packages/@ada/infra/src/services/api/components/operational-metrics/client.ts index 83bfcc5..7734cbe 100644 --- a/source/packages/@ada/infra/src/services/api/components/operational-metrics/client.ts +++ b/source/packages/@ada/infra/src/services/api/components/operational-metrics/client.ts @@ -2,7 +2,8 @@ SPDX-License-Identifier: Apache-2.0 */ import { Function as LambdaFunction } from 'aws-cdk-lib/aws-lambda'; import { Logger } from '@ada/infra-common/constructs/lambda/lambda-logger'; -import { MetricsPayload, OperationalMetricsConfig, sendAnonymousMetric } from '@ada/infra-common/utils/metrics'; +import { MetricsPayload, sendAnonymousMetric } from '@ada/infra-common/utils/metrics'; +import { OperationalMetricsConfig } from '@ada/infra-common/utils/operational-metrics-config' import moment from 'moment'; export const SEND_ANONYMOUS_DATA = 'SEND_ANONYMOUS_DATA'; diff --git a/source/packages/@ada/infra/src/services/api/jest.config.ts b/source/packages/@ada/infra/src/services/api/jest.config.ts index 1ed1328..1b738ab 100644 --- a/source/packages/@ada/infra/src/services/api/jest.config.ts +++ b/source/packages/@ada/infra/src/services/api/jest.config.ts @@ -2,12 +2,11 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import createBaseConfig from '../../../jest.config.base'; +import createConfig from '../../../jest.config.base'; /* eslint-enable: sort-imports */ import * as path from 'path'; import { generateEnvironmentForTests } from './jest-dynamodb-config'; import { writeCdkEnvironmentToFile } from '../../common/services/testing/environment'; -import type { Config } from '@jest/types'; const cdkEnvironment = generateEnvironmentForTests(); const JEST_DYNAMODB_CONFIG = path.resolve(__dirname, '.jest.test-cdk-environment.json'); @@ -21,19 +20,14 @@ process.env = { XRAY_DISABLED: true, }; -const baseConfig = createBaseConfig(); - -export const config: Config.InitialOptions = { - ...baseConfig, +export const config = createConfig({ ...require('@shelf/jest-dynamodb/jest-preset'), globals: { - ...(baseConfig.globals || {}), __JEST_DYNAMODB_TABLES: tables, }, - setupFilesAfterEnv: [...(baseConfig.setupFilesAfterEnv || []), path.resolve(__dirname, 'jest.setup.ts')], + setupFilesAfterEnv: [path.resolve(__dirname, 'jest.setup.ts')], rootDir: __dirname, - displayName: path.basename(__dirname), testTimeout: 30000, -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/services/api/stack/__snapshots__/index.test.ts.snap b/source/packages/@ada/infra/src/services/api/stack/__snapshots__/index.test.ts.snap index 43a119f..4910e71 100644 --- a/source/packages/@ada/infra/src/services/api/stack/__snapshots__/index.test.ts.snap +++ b/source/packages/@ada/infra/src/services/api/stack/__snapshots__/index.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-ApiService) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-ApiService) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaApiServiceFederatedApiAccessRequestTableC2AE5655Arn": Object { "Value": Object { @@ -529,7 +529,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -842,7 +842,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1148,7 +1148,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1454,7 +1454,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3216,7 +3216,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3488,7 +3488,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5464,7 +5464,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5785,7 +5785,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", diff --git a/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/__tests__/check-data-product-infra-deployment-status.test.ts b/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/__tests__/check-data-product-infra-deployment-status.test.ts index abd8fe3..12d67cf 100644 --- a/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/__tests__/check-data-product-infra-deployment-status.test.ts +++ b/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/__tests__/check-data-product-infra-deployment-status.test.ts @@ -7,6 +7,13 @@ import { handler } from '../check-data-product-infra-deployment-status'; const mockDescribeStacks = jest.fn(); +jest.mock('@aws-cdk/aws-service-spec', ()=>({ + loadAwsServiceSpec: (...args: any[]) => ({ + promise: jest.fn(() => Promise.resolve(mockDescribeStacks(...args))), + }), + loadAwsServiceSpecSync: jest.fn() +})) + jest.mock('@ada/aws-sdk', () => ({ ...(jest.requireActual('@ada/aws-sdk') as any), AwsCloudFormationInstance: jest.fn().mockImplementation(() => ({ diff --git a/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/__tests__/data-product-infra-deployment-complete.test.ts b/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/__tests__/data-product-infra-deployment-complete.test.ts index c510508..d0a7d49 100644 --- a/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/__tests__/data-product-infra-deployment-complete.test.ts +++ b/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/__tests__/data-product-infra-deployment-complete.test.ts @@ -20,6 +20,13 @@ import { noopMockLockClient } from '../../../../../api/components/entity/locks/m const mockDescribeStacks = jest.fn(); +jest.mock('@aws-cdk/aws-service-spec', ()=>({ + loadAwsServiceSpec: (...args: any[]) => ({ + promise: jest.fn(() => Promise.resolve(mockDescribeStacks(...args))), + }), + loadAwsServiceSpecSync: jest.fn() +})) + jest.mock('@ada/aws-sdk', () => ({ ...(jest.requireActual('@ada/aws-sdk') as any), AwsCloudFormationInstance: jest.fn().mockImplementation(() => ({ diff --git a/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/Dockerfile b/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/Dockerfile index c06b734..bdb4217 100644 --- a/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/Dockerfile +++ b/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/Dockerfile @@ -1,4 +1,4 @@ -FROM public.ecr.aws/lambda/nodejs:16 AS builder +FROM public.ecr.aws/lambda/nodejs:18 AS builder WORKDIR /usr/app COPY node_modules/ ./node_modules COPY dist/ ./ @@ -9,7 +9,8 @@ RUN ls RUN node -e "console.log(typeof require('./index.js').handler === 'function');" -FROM public.ecr.aws/lambda/nodejs:16 +FROM public.ecr.aws/lambda/nodejs:18 +RUN yum update -y WORKDIR ${LAMBDA_TASK_ROOT} COPY --from=builder /usr/app/* ./ CMD ["index.handler"] diff --git a/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/package.json b/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/package.json index 1e1e025..c844d89 100644 --- a/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/package.json +++ b/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/package.json @@ -4,25 +4,25 @@ "build": "npx esbuild --bundle ./index.ts --target=node16 --platform=node --outfile=dist/index.js --external:aws-sdk --external:aws-cdk --external:cdk-assets --external:promptly --external:proxy-agent --external:punycode --external:aws-cdk-lib --external:@aws-cdk/*" }, "private": true, + "description": "Ada start-data-product-infra-deployment", "dependencies": { - "@aws-cdk/aws-apigatewayv2-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-apigatewayv2-authorizers-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-apigatewayv2-integrations-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-glue-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-kinesisfirehose-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-kinesisfirehose-destinations-alpha": "2.88.0-alpha.0", - "@aws-cdk/aws-lambda-python-alpha": "2.88.0-alpha.0", - "@aws-cdk/cloudformation-diff": "2.88.0", - "aws-cdk-lib": "2.88.0", + "@aws-cdk/aws-glue-alpha": "2.130.0-alpha.0", + "@aws-cdk/aws-kinesisfirehose-alpha": "2.130.0-alpha.0", + "@aws-cdk/aws-kinesisfirehose-destinations-alpha": "2.130.0-alpha.0", + "@aws-cdk/aws-lambda-python-alpha": "2.130.0-alpha.0", + "@aws-cdk/cloudformation-diff": "2.130.0", + "aws-cdk-lib": "2.130.0", "constructs": "^10.1.181", - "aws-cdk": "2.88.0", - "cdk-assets": "2.88.0", + "aws-cdk": "2.130.0", + "cdk-assets": "2.130.0", "chalk": "^4", "promptly": "^3.2.0", "proxy-agent": "^6.3.0" }, "resolutions": { - "xml2js": "^0.5.0" + "xml2js": "^0.5.0", + "ip":"^2.0.1", + "semver":"^7.5.2" }, "workspaces": { "nohoist": [ diff --git a/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/yarn.lock b/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/yarn.lock index 096ee43..6440cf9 100644 --- a/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/yarn.lock +++ b/source/packages/@ada/infra/src/services/data-product/components/creation-state-machine/steps/start-data-product-infra-deployment/yarn.lock @@ -2,97 +2,94 @@ # yarn lockfile v1 -"@aws-cdk/asset-awscli-v1@^2.2.200": - version "2.2.200" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.200.tgz#6ead533f73f705ad7350eb46955e2538e50cd013" - integrity sha512-Kf5J8DfJK4wZFWT2Myca0lhwke7LwHcHBo+4TvWOGJrFVVKVuuiLCkzPPRBQQVDj0Vtn2NBokZAz8pfMpAqAKg== +"@aws-cdk/asset-awscli-v1@^2.2.202": + version "2.2.202" + resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.202.tgz#4627201d71f6a5c60db36385ce09cb81005f4b32" + integrity sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg== "@aws-cdk/asset-kubectl-v20@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz#d8e20b5f5dc20128ea2000dc479ca3c7ddc27248" integrity sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg== -"@aws-cdk/asset-node-proxy-agent-v5@^2.0.165": - version "2.0.166" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.166.tgz#467507db141cd829ff8aa9d6ea5519310a4276b8" - integrity sha512-j0xnccpUQHXJKPgCwQcGGNu4lRiC1PptYfdxBIH1L4dRK91iBxtSQHESRQX+yB47oGLaF/WfNN/aF3WXwlhikg== - -"@aws-cdk/aws-apigatewayv2-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-alpha/-/aws-apigatewayv2-alpha-2.88.0-alpha.0.tgz#237fa9f4e4034cd4a18c07da73e0a4bf9a49a8e3" - integrity sha512-xCYzaXDyI+cs88MTFOMCE142KczRwEERTF0AtCqWgBwi6Se0aWd8ilwOh3jkL90sRDYquIJ01jlET2biFWmduw== - -"@aws-cdk/aws-apigatewayv2-authorizers-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-authorizers-alpha/-/aws-apigatewayv2-authorizers-alpha-2.88.0-alpha.0.tgz#d41aca6fcec0ffb1ae65fbf67ee2149f74755b35" - integrity sha512-0R3el9USkc6r24kn6GT9YtezEraf3Xm+U57nEK35JWU7ePHtxQ2qpN6wKCw+2A5oq5NKEj03a0m52mAbk1wg0Q== - -"@aws-cdk/aws-apigatewayv2-integrations-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations-alpha/-/aws-apigatewayv2-integrations-alpha-2.88.0-alpha.0.tgz#32cd96f6db2f4dd8161254a2f6fd87f3059c8e8d" - integrity sha512-G7wvMnGEysfpNEJaVNUAY4PEPkD4QesMHfWyDIUNyED9lx1NiSv3hgtr87hzadJq+j2nRCCwMj9Rls8d+bBzQw== - -"@aws-cdk/aws-glue-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-glue-alpha/-/aws-glue-alpha-2.88.0-alpha.0.tgz#2b6e575dff836df6807fd52e0585f8f87559d898" - integrity sha512-ozyZgSTDAkClIBEL5QM/c+WXNgCrNUk9q6v3x/VGaYaXqrT21o7DKATkoOk2wnDTR2dY4HZJL2O5yUBhvc3oFw== - -"@aws-cdk/aws-kinesisfirehose-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesisfirehose-alpha/-/aws-kinesisfirehose-alpha-2.88.0-alpha.0.tgz#1ae599c36ff16642cd24d9b3c40f48d1ba24e666" - integrity sha512-mYUJ6uX25k31WhPJ2kxKWWOkQhXQ7K6xfD0aWwLxXusyCJanJPlswVpt04CoDsnLiOXIf5k0Xp/cFWbi4tvCMg== - -"@aws-cdk/aws-kinesisfirehose-destinations-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesisfirehose-destinations-alpha/-/aws-kinesisfirehose-destinations-alpha-2.88.0-alpha.0.tgz#249681ada4c4a38d1caaf4cf7c4067d628180f8f" - integrity sha512-/9bTGm87lBMWGQHWqE4JkSM18RrRU0dATf8izP7UrbxRchgYtlncFIrTt3AvAGaABqKz1pcb5ZBnTncVO+uLvA== - -"@aws-cdk/aws-lambda-python-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-python-alpha/-/aws-lambda-python-alpha-2.88.0-alpha.0.tgz#9edfef326f687934c342ba41eeaaca02a3f51534" - integrity sha512-CdSLWAeHLx9uRqAt9OhaWmlsc1wrDEMIDtRWCHVwPW1oVzEjiQ1yUH3sRxZtL0O9rRXpZbJrtUdOM+3SZld64w== - -"@aws-cdk/cfnspec@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-2.88.0-alpha.0.tgz#13af371fa6f0edd17cf160387474c5693cb2f071" - integrity sha512-pArQaqBC8mtoRwTToQGtHefeIkA5Cv8EwtbgZW/XgASjb5ZvE/RiRl3TmszXgLwthdvZx2sMMoIYwJTE50JQsA== - dependencies: - fs-extra "^9.1.0" - md5 "^2.3.0" - -"@aws-cdk/cloud-assembly-schema@2.88.0": - version "2.88.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-2.88.0.tgz#29c6452aa240d56063c7453e750987e20d089cab" - integrity sha512-dDcbH9g1CQmXdKe4k0eADZfJGIvNw9ZLBH6Mm4M6H1+kaHaxOir016OrZ/xt+eTCPF+uwfSvfFsu4HzUysopyg== +"@aws-cdk/asset-node-proxy-agent-v6@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.1.tgz#6dc9b7cdb22ff622a7176141197962360c33e9ac" + integrity sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg== + +"@aws-cdk/aws-glue-alpha@2.130.0-alpha.0": + version "2.130.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-glue-alpha/-/aws-glue-alpha-2.130.0-alpha.0.tgz#fb04e9b8085f561a4860b90be9219748b3b3c450" + integrity sha512-3NkrlB+MK2UHT2u4I+TBI0qX0b07mJpbo/9c0qNuVsia6FTnvFSgfDTBd52jqSkqOuXHpq5eh0BGKm4c5xazkg== + +"@aws-cdk/aws-kinesisfirehose-alpha@2.130.0-alpha.0": + version "2.130.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesisfirehose-alpha/-/aws-kinesisfirehose-alpha-2.130.0-alpha.0.tgz#e60ddab2bc5b40923e23e28b1682371a7f7b9c1d" + integrity sha512-wCwfgoqvsLpE6IeNjlQBrmQOBJsCDqDFVXi2FLf9STnJvbar4KixwKuWsGguRoQfZNKrsMdfvnUhNOmFpNbLOA== + +"@aws-cdk/aws-kinesisfirehose-destinations-alpha@2.130.0-alpha.0": + version "2.130.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesisfirehose-destinations-alpha/-/aws-kinesisfirehose-destinations-alpha-2.130.0-alpha.0.tgz#6c6eaea04fbe84f0414f1418b47d0961b3e21b3b" + integrity sha512-nLBORMct+0ZS60nKdxPC98TOBBbsuCCJ5Sih0bfg9M7sd9vNpGpZ5VQMY4op+x4DTtqq2I4YuzKsUFPEju+Hcg== + +"@aws-cdk/aws-lambda-python-alpha@2.130.0-alpha.0": + version "2.130.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-python-alpha/-/aws-lambda-python-alpha-2.130.0-alpha.0.tgz#e64476c3ccede496673224605e6a71bed451d1aa" + integrity sha512-pUGmXxx9XC+POFVnTBvNPEgMkQ2Py6krpK003GOnRuTQH34yTdrgeIvLq1RQRVwaqeDdN74dx8r567XwZG0FoA== + +"@aws-cdk/aws-service-spec@^0.0.50": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-service-spec/-/aws-service-spec-0.0.50.tgz#9d2e1218be8982f3cc79ffcd2c268749e6d6d1db" + integrity sha512-uVKv4sJMARQxnHfpiwn+hXq4a2+///vsURP4TdfEF/unrKl8i7s4s5d165au//aNZNOJ4UMTWLohb5UnwDMhzw== + dependencies: + "@aws-cdk/service-spec-types" "^0.0.50" + "@cdklabs/tskb" "^0.0.3" + +"@aws-cdk/cloud-assembly-schema@2.130.0": + version "2.130.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-2.130.0.tgz#660c92dcf76a5ed63419e8246f8baea13fefa0b2" + integrity sha512-Q1bnS7lOOyyZ70rguBuekF2OZPRxtSGQUsN1lVwnwpWV/S9J+JpgKSaPLJJaM/wq3C8VdmKZyDyp+UpfN9Iryg== dependencies: jsonschema "^1.4.1" - semver "^7.5.4" + semver "^7.6.0" -"@aws-cdk/cloudformation-diff@2.88.0": - version "2.88.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-2.88.0.tgz#b93e22fffdee8811ca8c60311d61efd400a5d067" - integrity sha512-3F6xfAnV/c91/6nm3ZCk0S4rfq3OJ/fSOihSr7VTqABN2vs16e2LYtPialUQvmIXM6I46fByx9DMaBTkQFBxJA== +"@aws-cdk/cloudformation-diff@2.130.0": + version "2.130.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-2.130.0.tgz#6ace93bb7751ca0b32802b7c97a7adafd8a21aac" + integrity sha512-0w5kJNUlV/QpE/9h+rCzToON78nWR+17DZtIFDfuLYXvImlb5UpZfrrok6ppOMfE9pMJ+ATMnv1MbS7z2TVUHA== dependencies: - "@aws-cdk/cfnspec" "2.88.0-alpha.0" + "@aws-cdk/aws-service-spec" "^0.0.50" + "@aws-cdk/service-spec-types" "^0.0.50" chalk "^4" - diff "^5.1.0" + diff "^5.2.0" fast-deep-equal "^3.1.3" string-width "^4.2.3" table "^6.8.1" -"@aws-cdk/cx-api@2.88.0": - version "2.88.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-2.88.0.tgz#f84423f841d47c891a678c97ea5ad9b993964cc1" - integrity sha512-Wf6ax/1eGjE42Dc7NvlMzu6QU5wraUnKIay9QvznZaJYkkcWZ7LlRwmoh95p431RTOoYME3dWzHOEsV/LBv5xQ== +"@aws-cdk/cx-api@2.130.0": + version "2.130.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-2.130.0.tgz#b0280e4cb27c0d9d856f0abfeab0c0ca62522241" + integrity sha512-QoP5O5ouv9rTvY3+epdeE3LJu8RP0QT0e9mwYneXWmHm4ZWw/J0TZDBwx68xPgwBh8fpIDdZNc9LTG3EQXo3zQ== + dependencies: + semver "^7.6.0" + +"@aws-cdk/service-spec-types@^0.0.50": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@aws-cdk/service-spec-types/-/service-spec-types-0.0.50.tgz#5fd946acc1212bfa51021813fb71d8087c44554a" + integrity sha512-J6XoyihczUWoQvxjKf0EqmdeZ8Djs1LCse49rXyQ8IFUXZIUNNrZ1A1x0tAeU3iZn08yC3KAh+YSPRMScfZ5Lw== dependencies: - "@aws-cdk/cloud-assembly-schema" "2.88.0" - semver "^7.5.4" + "@cdklabs/tskb" "^0.0.3" "@balena/dockerignore@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== +"@cdklabs/tskb@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@cdklabs/tskb/-/tskb-0.0.3.tgz#4b79846d9381eb1252ba85d5d20b7cd7d99b6ecb" + integrity sha512-JR+MuD4awAXvutu7HArephXfZm09GPTaSAQUqNcJB5+ZENRm4kV+L6vJL6Tn1xHjCcHksO+HAqj3gYtm5K94vA== + "@tootallnate/quickjs-emscripten@^0.23.0": version "0.23.0" resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" @@ -143,16 +140,16 @@ archiver-utils@^2.1.0: normalize-path "^3.0.0" readable-stream "^2.0.0" -archiver@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" - integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== +archiver@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0" + integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw== dependencies: archiver-utils "^2.1.0" - async "^3.2.3" + async "^3.2.4" buffer-crc32 "^0.2.1" readable-stream "^3.6.0" - readdir-glob "^1.0.0" + readdir-glob "^1.1.2" tar-stream "^2.2.0" zip-stream "^4.1.0" @@ -168,51 +165,47 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +async@^3.2.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -aws-cdk-lib@2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.88.0.tgz#72d165cb7dc168c5fa3b22caaacd8d33364866fc" - integrity sha512-bmhokh30HVeqlotWaoEmK7mKB9SJbJwpbsiVgmYe3JcMu8DposHQqaIPI7LnC+dg015tZaxUsExxOYBEw+vntQ== +aws-cdk-lib@2.130.0: + version "2.130.0" + resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.130.0.tgz#ce1b8cd1bcf9ca040d600c2570dfbac9b2df3cfb" + integrity sha512-yK7ibePipdjlI4AFM94fwwtsCkmpWJ0JFZTMPahahC/3Pxe/BA/nnI/4Namvl5QPxW5QlU0xQYU7cywioq3RQg== dependencies: - "@aws-cdk/asset-awscli-v1" "^2.2.200" + "@aws-cdk/asset-awscli-v1" "^2.2.202" "@aws-cdk/asset-kubectl-v20" "^2.1.2" - "@aws-cdk/asset-node-proxy-agent-v5" "^2.0.165" + "@aws-cdk/asset-node-proxy-agent-v6" "^2.0.1" "@balena/dockerignore" "^1.0.2" case "1.6.3" - fs-extra "^11.1.1" - ignore "^5.2.4" + fs-extra "^11.2.0" + ignore "^5.3.1" jsonschema "^1.4.1" + mime-types "^2.1.35" minimatch "^3.1.2" - punycode "^2.3.0" - semver "^7.5.4" + punycode "^2.3.1" + semver "^7.6.0" table "^6.8.1" yaml "1.10.2" -aws-cdk@2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-2.88.0.tgz#2e1adfa0d13145c44ff8a81705d962e861bf29f1" - integrity sha512-7Tj0uusA2nsEOsqkd4kB5vmzciz7l/eGBN5a+Ce4/CCcoe4ZCvT85L+T6tK0aohUTLZTAlTPBceH34RN5iMYpA== +aws-cdk@2.130.0: + version "2.130.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-2.130.0.tgz#086b859d81ff6b12e072f81692dc3fada3d17650" + integrity sha512-MsjGzQ2kZv0FEfXvpW7FTJRnefew0GrYt9M2SMN2Yn45+yjugGl2X8to416kABeFz1OFqW56hq8Y5BiLuFDVLQ== optionalDependencies: fsevents "2.3.2" -aws-sdk@^2.1417.0: - version "2.1420.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1420.0.tgz#ae49a7b8e54fbcd72bfdd4a94473ccf25ca8c984" - integrity sha512-BvGzkKGgOXNj9WAeazvOLu48sCbU52mKLGIY5AjBKX4EuY8APcKKvl1R54kdUoJDnMwv0HwQpGvrVvLTDdOv/A== +aws-sdk@^2.1562.0: + version "2.1567.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1567.0.tgz#a82e8ecef666fedae1c312b579b5b7528848b9aa" + integrity sha512-5irUeMggUkQBARXtm3YN4E/lffEN51uIw+D7cD0+d8e2rhhJL/DTphP8cdx22xr+uOfOyRjx9SjSwHvack2B9Q== dependencies: buffer "4.9.2" events "1.1.1" @@ -223,7 +216,7 @@ aws-sdk@^2.1417.0: url "0.10.3" util "^0.12.4" uuid "8.0.0" - xml2js "0.5.0" + xml2js "0.6.2" balanced-match@^1.0.0: version "1.0.2" @@ -299,15 +292,15 @@ case@1.6.3: resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== -cdk-assets@2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-2.88.0.tgz#300290fb98369f459467e40eed45ce3875b621b7" - integrity sha512-qt5rfsG2Ek7V9GH2z7epF4y0MOLt+Z/2n4ApbgQweLaq5bwptiIfkos5mAA0z+gOcd080yqvsZGPQKytTdlx+A== +cdk-assets@2.130.0: + version "2.130.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-2.130.0.tgz#60ee7b14df1ec7d1e16cd437926e27a132d8c2c3" + integrity sha512-wUntK5qZUCXGJJjFCWE2odCxgmW5jWNwWceoV2vM68LQ+OyQGC0zAyR/bjLB3+P6vNT4bsq056JBBmx3rsfpJQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "2.88.0" - "@aws-cdk/cx-api" "2.88.0" - archiver "^5.3.1" - aws-sdk "^2.1417.0" + "@aws-cdk/cloud-assembly-schema" "2.130.0" + "@aws-cdk/cx-api" "2.130.0" + archiver "^5.3.2" + aws-sdk "^2.1562.0" glob "^7.2.3" mime "^2.6.0" yargs "^16.2.0" @@ -320,11 +313,6 @@ chalk@^4: ansi-styles "^4.1.0" supports-color "^7.1.0" -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -384,11 +372,6 @@ crc32-stream@^4.0.2: crc-32 "^1.2.0" readable-stream "^3.4.0" -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - data-uri-to-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz#db89a9e279c2ffe74f50637a59a32fb23b3e4d7c" @@ -410,10 +393,10 @@ degenerator@^5.0.0: escodegen "^2.1.0" esprima "^4.0.1" -diff@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== emoji-regex@^8.0.0: version "8.0.0" @@ -480,10 +463,10 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -498,16 +481,6 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -621,10 +594,10 @@ ieee754@^1.1.13, ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== inflight@^1.0.4: version "1.0.6" @@ -639,15 +612,10 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ip@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +ip@^1.1.8, ip@^2.0.0, ip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" + integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== is-arguments@^1.0.4: version "1.1.1" @@ -657,11 +625,6 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-callable@^1.1.3: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -775,14 +738,17 @@ lru-cache@^7.14.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.35: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" + mime-db "1.52.0" mime@^2.6.0: version "2.6.0" @@ -899,10 +865,10 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -punycode@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== querystring@0.2.0: version "0.2.0" @@ -938,10 +904,10 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdir-glob@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.2.tgz#b185789b8e6a43491635b6953295c5c5e3fd224c" - integrity sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA== +readdir-glob@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== dependencies: minimatch "^5.1.0" @@ -975,10 +941,10 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== +semver@^7.5.2, semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -1154,7 +1120,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -xml2js@0.5.0, xml2js@^0.5.0: +xml2js@0.6.2, xml2js@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== diff --git a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/handlers/sampling/common.py b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/handlers/sampling/common.py index b848652..f2326f5 100644 --- a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/handlers/sampling/common.py +++ b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/handlers/sampling/common.py @@ -19,6 +19,7 @@ from typing import Tuple from google.oauth2 import service_account from apiclient.discovery import build as buildGoogleApiClient +from google.analytics.data_v1beta import BetaAnalyticsDataClient from handlers.common import * # NOSONAR @@ -239,6 +240,10 @@ def get_google_cloud_credentials(source_details: ISourceDetails) -> IGoogleCreds def build_google_api_client(*args, **kwargs): return buildGoogleApiClient(*args, **kwargs) + @staticmethod + def build_google_analytics_client(cred): + return BetaAnalyticsDataClient(credentials=cred) + @staticmethod def get_rows_from_stream(stream, size: int, remove_last_row: bool = True): """ diff --git a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/package.json b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/package.json index ad4f588..fe279a9 100644 --- a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/package.json +++ b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/package.json @@ -3,6 +3,7 @@ "version": "0.0.0", "private": true, "license": "Apache-2.0", + "description": "Ada schema-preview-docker-image", "scripts": { "prebuild": "rm -rf ./handlers/connectors", "build": "copyfiles --verbose --up 6 \"../../../../../connectors/**/*.py\" handlers/connectors" diff --git a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/poetry.lock b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/poetry.lock index 6b4325a..898f2f1 100644 --- a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/poetry.lock +++ b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/poetry.lock @@ -57,11 +57,11 @@ python-versions = "*" [[package]] name = "async-timeout" -version = "4.0.2" +version = "4.0.3" description = "Timeout context manager for asyncio programs" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] typing-extensions = {version = ">=3.6.5", markers = "python_version < \"3.8\""} @@ -76,19 +76,22 @@ python-versions = ">=3.5" [[package]] name = "attrs" -version = "22.2.0" +version = "23.2.0" description = "Classes Without Boilerplate" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" + +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -cov = ["attrs", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] -tests = ["attrs", "zope.interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=0.971,<0.990)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist"] -tests_no_zope = ["cloudpickle", "hypothesis", "mypy (>=0.971,<0.990)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist"] +cov = ["attrs", "coverage[toml] (>=5.3)"] +dev = ["attrs", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist"] [[package]] name = "awslambdaric" @@ -198,11 +201,11 @@ python-versions = "~=3.7" [[package]] name = "certifi" -version = "2021.10.8" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "cffi" @@ -236,7 +239,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7 [[package]] name = "coverage" -version = "7.2.3" +version = "7.2.7" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -250,38 +253,38 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "39.0.2" +version = "42.0.5" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -cffi = ">=1.12" +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "check-manifest", "mypy", "ruff", "types-pytz", "types-requests"] -sdist = ["setuptools-rust (>=0.11.4)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist", "pytz"] +test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] -tox = ["tox"] [[package]] name = "db-dtypes" -version = "1.0.1" +version = "1.2.0" description = "Pandas Data Types for SQL systems (BigQuery, Spanner)" category = "main" optional = false -python-versions = ">=3.6, <3.11" +python-versions = ">=3.7" [package.dependencies] -numpy = ">=1.16.6,<2.0dev" +numpy = ">=1.16.6" packaging = ">=17.0" -pandas = ">=0.24.2,<2.0dev" -pyarrow = ">=3.0.0,<9.0dev" +pandas = ">=0.24.2" +pyarrow = ">=3.0.0" [[package]] name = "decorator" @@ -337,7 +340,7 @@ python-versions = ">=3.6" [[package]] name = "exceptiongroup" -version = "1.1.1" +version = "1.2.0" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false @@ -366,64 +369,79 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "google-analytics-data" +version = "0.18.7" +description = "Google Analytics Data API client library" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +google-api-core = {version = ">=1.34.1,<2.0.0 || >=2.11.0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0dev" +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + [[package]] name = "google-api-core" -version = "2.7.1" +version = "2.17.1" description = "Google API client core library" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -google-auth = ">=1.25.0,<3.0dev" -googleapis-common-protos = ">=1.52.0,<2.0dev" +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} -grpcio-status = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} -protobuf = ">=3.12.0" -requests = ">=2.18.0,<3.0.0dev" +grpcio-status = {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""} +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" [package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)"] -grpcgcp = ["grpcio-gcp (>=0.2.2)"] -grpcio-gcp = ["grpcio-gcp (>=0.2.2)"] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.43.0" +version = "2.122.0" description = "Google API Client Library for Python" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" -google-auth = ">=1.16.0,<3.0.0dev" +google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0.dev0" +google-auth = ">=1.19.0,<3.0.0.dev0" google-auth-httplib2 = ">=0.1.0" -httplib2 = ">=0.15.0,<1dev" +httplib2 = ">=0.15.0,<1.dev0" uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.6.2" +version = "2.28.2" description = "Google Authentication Library" category = "main" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" +python-versions = ">=3.7" [package.dependencies] cachetools = ">=2.0.0,<6.0" pyasn1-modules = ">=0.2.1" -rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} -six = ">=1.9.0" +rsa = ">=3.1.4,<5" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] -pyopenssl = ["pyopenssl (>=20.0.0)"] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise_cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] [[package]] name = "google-auth-httplib2" -version = "0.1.0" +version = "0.2.0" description = "Google Authentication Library: httplib2 transport" category = "main" optional = false @@ -431,126 +449,128 @@ python-versions = "*" [package.dependencies] google-auth = "*" -httplib2 = ">=0.15.0" -six = "*" +httplib2 = ">=0.19.0" [[package]] name = "google-cloud-bigquery" -version = "2.34.3" +version = "3.19.0" description = "Google BigQuery API client library" category = "main" optional = false -python-versions = ">=3.6, <3.11" +python-versions = ">=3.7" [package.dependencies] -google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]} -google-cloud-core = ">=1.4.1,<3.0.0dev" +google-api-core = {version = ">=1.34.1,<2.0.0 || >=2.11.0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<3.0.0dev" +google-cloud-core = ">=1.6.0,<3.0.0dev" google-resumable-media = ">=0.6.0,<3.0dev" -grpcio = ">=1.38.1,<2.0dev" -packaging = ">=14.3" -proto-plus = ">=1.15.0" -protobuf = ">=3.12.0" +packaging = ">=20.0.0" python-dateutil = ">=2.7.2,<3.0dev" -requests = ">=2.18.0,<3.0.0dev" +requests = ">=2.21.0,<3.0.0dev" [package.extras] -all = ["Shapely (>=1.6.0,<2.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.0.0,<3.0.0dev)", "grpcio (>=1.38.1,<2.0dev)", "ipython (>=7.0.1,!=8.1.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=0.24.2)", "pyarrow (>=3.0.0,<8.0dev)", "tqdm (>=4.7.4,<5.0.0dev)"] -bignumeric_type = ["pyarrow (>=3.0.0,<8.0dev)"] -bqstorage = ["google-cloud-bigquery-storage (>=2.0.0,<3.0.0dev)", "grpcio (>=1.38.1,<2.0dev)", "pyarrow (>=3.0.0,<8.0dev)"] -geopandas = ["Shapely (>=1.6.0,<2.0dev)", "geopandas (>=0.9.0,<1.0dev)"] -ipython = ["ipython (>=7.0.1,!=8.1.0)"] +all = ["Shapely (>=1.8.4,<3.0.0dev)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] +bigquery_v2 = ["proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)"] +bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"] +geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"] +ipython = ["ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)"] +ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"] opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"] -pandas = ["pandas (>=0.24.2)", "pyarrow (>=3.0.0,<8.0dev)"] +pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] [[package]] name = "google-cloud-bigquery-storage" -version = "2.13.1" -description = "BigQuery Storage API API client library" +version = "2.24.0" +description = "Google Cloud Bigquery Storage API client library" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]} -proto-plus = ">=1.18.0" +google-api-core = {version = ">=1.34.0,<2.0.0 || >=2.11.0,<3.0.0dev", extras = ["grpc"]} +proto-plus = ">=1.22.0,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" [package.extras] fastavro = ["fastavro (>=0.21.2)"] -pandas = ["pandas (>=0.21.1)"] +pandas = ["importlib-metadata (>=1.0.0)", "pandas (>=0.21.1)"] pyarrow = ["pyarrow (>=0.15.0)"] -tests = ["freezegun"] [[package]] name = "google-cloud-core" -version = "2.2.3" +version = "2.4.1" description = "Google Cloud API client core library" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" +google-api-core = ">=1.31.6,<2.0.0 || >2.3.0,<3.0.0dev" google-auth = ">=1.25.0,<3.0dev" +importlib-metadata = {version = ">1.0.0", markers = "python_version < \"3.8\""} [package.extras] -grpc = ["grpcio (>=1.8.2,<2.0dev)"] +grpc = ["grpcio (>=1.38.0,<2.0dev)", "grpcio-status (>=1.38.0,<2.0.dev0)"] [[package]] name = "google-cloud-storage" -version = "2.2.1" +version = "2.16.0" description = "Google Cloud Storage API client library" category = "main" optional = false python-versions = ">=3.7" [package.dependencies] -google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" -google-auth = ">=1.25.0,<3.0dev" -google-cloud-core = ">=1.6.0,<3.0dev" -google-resumable-media = ">=2.3.2" -protobuf = "*" +google-api-core = ">=2.15.0,<3.0.0dev" +google-auth = ">=2.26.1,<3.0dev" +google-cloud-core = ">=2.3.0,<3.0dev" +google-crc32c = ">=1.0,<2.0dev" +google-resumable-media = ">=2.6.0" requests = ">=2.18.0,<3.0.0dev" +[package.extras] +protobuf = ["protobuf (<5.0.0dev)"] + [[package]] name = "google-crc32c" -version = "1.3.0" +version = "1.5.0" description = "A python wrapper of the C library 'Google CRC32C'" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] testing = ["pytest"] [[package]] name = "google-resumable-media" -version = "2.3.2" +version = "2.7.0" description = "Utilities for Google Media Downloads and Resumable Uploads" category = "main" optional = false -python-versions = ">= 3.6" +python-versions = ">= 3.7" [package.dependencies] google-crc32c = ">=1.0,<2.0dev" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"] requests = ["requests (>=2.18.0,<3.0.0dev)"] [[package]] name = "googleapis-common-protos" -version = "1.56.0" +version = "1.63.0" description = "Common protobufs used in Google APIs" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -protobuf = ">=3.12.0" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" [package.extras] -grpc = ["grpcio (>=1.0.0)"] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "gremlinpython" @@ -569,21 +589,18 @@ six = ">=1.10.0,<2.0.0" [[package]] name = "grpcio" -version = "1.44.0" +version = "1.56.2" description = "HTTP/2-based RPC framework" category = "main" optional = false -python-versions = ">=3.6" - -[package.dependencies] -six = ">=1.5.2" +python-versions = ">=3.7" [package.extras] -protobuf = ["grpcio-tools (>=1.44.0)"] +protobuf = ["grpcio-tools (>=1.56.2)"] [[package]] name = "grpcio-status" -version = "1.44.0" +version = "1.56.2" description = "Status proto mapping for gRPC" category = "main" optional = false @@ -591,8 +608,8 @@ python-versions = ">=3.6" [package.dependencies] googleapis-common-protos = ">=1.5.5" -grpcio = ">=1.44.0" -protobuf = ">=3.6.0" +grpcio = ">=1.56.2" +protobuf = ">=4.21.6" [[package]] name = "httplib2" @@ -649,7 +666,7 @@ six = "*" [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." category = "dev" optional = false @@ -698,7 +715,7 @@ source = ["Cython (>=0.29.7)"] [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." category = "dev" optional = false @@ -718,7 +735,7 @@ sentinels = "*" [[package]] name = "moto" -version = "4.1.4" +version = "4.2.14" description = "" category = "dev" optional = false @@ -737,32 +754,30 @@ werkzeug = ">=0.5,<2.2.0 || >2.2.0,<2.2.1 || >2.2.1" xmltodict = "*" [package.extras] -all = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.2.8)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] -apigateway = ["PyYAML (>=5.1)", "ecdsa (!=0.15)", "openapi-spec-validator (>=0.2.8)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] +all = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +apigateway = ["PyYAML (>=5.1)", "ecdsa (!=0.15)", "openapi-spec-validator (>=0.5.0)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] apigatewayv2 = ["PyYAML (>=5.1)"] appsync = ["graphql-core"] -awslambda = ["docker (>=2.5.1)"] -batch = ["docker (>=2.5.1)"] -cloudformation = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.2.8)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +awslambda = ["docker (>=3.0.0)"] +batch = ["docker (>=3.0.0)"] +cloudformation = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] cognitoidp = ["ecdsa (!=0.15)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] -ds = ["sshpubkeys (>=3.1.0)"] -dynamodb = ["docker (>=2.5.1)"] -dynamodbstreams = ["docker (>=2.5.1)"] -ebs = ["sshpubkeys (>=3.1.0)"] +dynamodb = ["docker (>=3.0.0)", "py-partiql-parser (==0.5.0)"] +dynamodbstreams = ["docker (>=3.0.0)", "py-partiql-parser (==0.5.0)"] ec2 = ["sshpubkeys (>=3.1.0)"] -efs = ["sshpubkeys (>=3.1.0)"] -eks = ["sshpubkeys (>=3.1.0)"] glue = ["pyparsing (>=3.0.7)"] iotdata = ["jsondiff (>=1.1.2)"] -route53resolver = ["sshpubkeys (>=3.1.0)"] -s3 = ["PyYAML (>=5.1)"] -server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "flask (!=2.2.0,!=2.2.1)", "flask-cors", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.2.8)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +proxy = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +resourcegroupstaggingapi = ["PyYAML (>=5.1)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] +s3 = ["PyYAML (>=5.1)", "py-partiql-parser (==0.5.0)"] +s3crc32c = ["PyYAML (>=5.1)", "crc32c", "py-partiql-parser (==0.5.0)"] +server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "flask (!=2.2.0,!=2.2.1)", "flask-cors", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] ssm = ["PyYAML (>=5.1)"] xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] [[package]] name = "multidict" -version = "6.0.4" +version = "6.0.5" description = "multidict implementation" category = "main" optional = false @@ -778,7 +793,7 @@ python-versions = ">=3.5" [[package]] name = "numpy" -version = "1.21.5" +version = "1.21.6" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false @@ -815,7 +830,7 @@ requests = ["requests (>=2.4.0,<3.0.0)"] [[package]] name = "oracledb" -version = "1.3.0" +version = "1.4.2" description = "Python interface to Oracle Database" category = "main" optional = false @@ -826,7 +841,7 @@ cryptography = ">=3.2.1" [[package]] name = "packaging" -version = "23.0" +version = "24.0" description = "Core utilities for Python packages" category = "main" optional = false @@ -878,11 +893,11 @@ test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} @@ -916,29 +931,29 @@ tests = ["flake8 (>=3.7.7)", "freezegun (>=0.3.11)", "pytest (>=4.6.9)", "pytest [[package]] name = "proto-plus" -version = "1.20.3" +version = "1.22.3" description = "Beautiful, Pythonic protocol buffers." category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -protobuf = ">=3.19.0" +protobuf = ">=3.19.0,<5.0.0dev" [package.extras] -testing = ["google-api-core[grpc] (>=1.22.2)"] +testing = ["google-api-core[grpc] (>=1.31.5)"] [[package]] name = "protobuf" -version = "3.20.2" -description = "Protocol Buffers" +version = "4.21.6" +description = "" category = "main" optional = false python-versions = ">=3.7" [[package]] name = "pyarrow" -version = "7.0.0" +version = "10.0.0" description = "Python library for Apache Arrow" category = "main" optional = false @@ -976,7 +991,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pymongo" -version = "4.3.3" +version = "4.6.2" description = "Python driver for MongoDB " category = "main" optional = false @@ -987,10 +1002,11 @@ dnspython = ">=1.16.0,<3.0.0" [package.extras] aws = ["pymongo-auth-aws (<2.0.0)"] -encryption = ["pymongo-auth-aws (<2.0.0)", "pymongocrypt (>=1.3.0,<2.0.0)"] -gssapi = ["pykerberos"] -ocsp = ["certifi", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"] +encryption = ["certifi", "pymongo", "pymongocrypt (>=1.6.0,<2.0.0)"] +gssapi = ["pykerberos", "winkerberos (>=0.5.0)"] +ocsp = ["certifi", "cryptography (>=2.5)", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"] snappy = ["python-snappy"] +test = ["pytest (>=7)"] zstd = ["zstandard"] [[package]] @@ -1015,7 +1031,7 @@ python-versions = "*" [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" category = "main" optional = false @@ -1026,14 +1042,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "7.2.2" +version = "7.4.4" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} @@ -1043,7 +1058,7 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" @@ -1062,7 +1077,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale [[package]] name = "pytest-mock" -version = "3.10.0" +version = "3.11.1" description = "Thin-wrapper around the mock package for easier use with pytest" category = "dev" optional = false @@ -1087,7 +1102,7 @@ pytest = {version = ">=7.1", markers = "python_version >= \"3.7\" and python_ver [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" category = "main" optional = false @@ -1118,7 +1133,7 @@ python-versions = "*" [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" category = "dev" optional = false @@ -1191,11 +1206,11 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] [[package]] name = "requests-aws4auth" -version = "1.1.2" +version = "1.2.3" description = "AWS4 authentication for Requests" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.3" [package.dependencies] requests = "*" @@ -1330,7 +1345,7 @@ python-versions = ">=3.7" [[package]] name = "types-pyyaml" -version = "6.0.12.8" +version = "6.0.11" description = "Typing stubs for PyYAML" category = "dev" optional = false @@ -1437,7 +1452,7 @@ ada-docker-image = ["redshift-connector", "SPARQLWrapper", "pytz"] [metadata] lock-version = "1.1" python-versions = ">=3.7.1,<3.11" -content-hash = "d9f5b0409f6d081cc6f2471d1d7f1746ba14862f7b93f15b5bfd770cc9c9c0ac" +content-hash = "e55b09434a71676a9acb87e6ba71b45c1b0acb9491dc8d9fb85b1af9ce85ec8a" [metadata.files] aenum = [ @@ -1531,16 +1546,16 @@ assertpy = [ {file = "assertpy-1.1.tar.gz", hash = "sha256:acc64329934ad71a3221de185517a43af33e373bb44dc05b5a9b174394ef4833"}, ] async-timeout = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] asynctest = [ {file = "asynctest-0.13.0-py3-none-any.whl", hash = "sha256:5da6118a7e6d6b54d83a8f7197769d046922a44d2a99c21382f0a6e4fadae676"}, {file = "asynctest-0.13.0.tar.gz", hash = "sha256:c27862842d15d83e6a34eb0b2866c323880eb3a75e4485b079ea11748fd77fac"}, ] attrs = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] awslambdaric = [ {file = "awslambdaric-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3981d84efeba86e6c6611b12c51878bf6c89c4a173c6dede67ffc1a71d6e2dda"}, @@ -1585,8 +1600,8 @@ cachetools = [ {file = "cachetools-5.0.0.tar.gz", hash = "sha256:486471dfa8799eb7ec503a8059e263db000cdda20075ce5e48903087f79d5fd6"}, ] certifi = [ - {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, - {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] cffi = [ {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, @@ -1663,86 +1678,104 @@ colorama = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] coverage = [ - {file = "coverage-7.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e58c0d41d336569d63d1b113bd573db8363bc4146f39444125b7f8060e4e04f5"}, - {file = "coverage-7.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:344e714bd0fe921fc72d97404ebbdbf9127bac0ca1ff66d7b79efc143cf7c0c4"}, - {file = "coverage-7.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:974bc90d6f6c1e59ceb1516ab00cf1cdfbb2e555795d49fa9571d611f449bcb2"}, - {file = "coverage-7.2.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0743b0035d4b0e32bc1df5de70fba3059662ace5b9a2a86a9f894cfe66569013"}, - {file = "coverage-7.2.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d0391fb4cfc171ce40437f67eb050a340fdbd0f9f49d6353a387f1b7f9dd4fa"}, - {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a42e1eff0ca9a7cb7dc9ecda41dfc7cbc17cb1d02117214be0561bd1134772b"}, - {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:be19931a8dcbe6ab464f3339966856996b12a00f9fe53f346ab3be872d03e257"}, - {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72fcae5bcac3333a4cf3b8f34eec99cea1187acd55af723bcbd559adfdcb5535"}, - {file = "coverage-7.2.3-cp310-cp310-win32.whl", hash = "sha256:aeae2aa38395b18106e552833f2a50c27ea0000122bde421c31d11ed7e6f9c91"}, - {file = "coverage-7.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:83957d349838a636e768251c7e9979e899a569794b44c3728eaebd11d848e58e"}, - {file = "coverage-7.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfd393094cd82ceb9b40df4c77976015a314b267d498268a076e940fe7be6b79"}, - {file = "coverage-7.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:182eb9ac3f2b4874a1f41b78b87db20b66da6b9cdc32737fbbf4fea0c35b23fc"}, - {file = "coverage-7.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bb1e77a9a311346294621be905ea8a2c30d3ad371fc15bb72e98bfcfae532df"}, - {file = "coverage-7.2.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0f34363e2634deffd390a0fef1aa99168ae9ed2af01af4a1f5865e362f8623"}, - {file = "coverage-7.2.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55416d7385774285b6e2a5feca0af9652f7f444a4fa3d29d8ab052fafef9d00d"}, - {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:06ddd9c0249a0546997fdda5a30fbcb40f23926df0a874a60a8a185bc3a87d93"}, - {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fff5aaa6becf2c6a1699ae6a39e2e6fb0672c2d42eca8eb0cafa91cf2e9bd312"}, - {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ea53151d87c52e98133eb8ac78f1206498c015849662ca8dc246255265d9c3c4"}, - {file = "coverage-7.2.3-cp311-cp311-win32.whl", hash = "sha256:8f6c930fd70d91ddee53194e93029e3ef2aabe26725aa3c2753df057e296b925"}, - {file = "coverage-7.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:fa546d66639d69aa967bf08156eb8c9d0cd6f6de84be9e8c9819f52ad499c910"}, - {file = "coverage-7.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b2317d5ed777bf5a033e83d4f1389fd4ef045763141d8f10eb09a7035cee774c"}, - {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be9824c1c874b73b96288c6d3de793bf7f3a597770205068c6163ea1f326e8b9"}, - {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c3b2803e730dc2797a017335827e9da6da0e84c745ce0f552e66400abdfb9a1"}, - {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f69770f5ca1994cb32c38965e95f57504d3aea96b6c024624fdd5bb1aa494a1"}, - {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1127b16220f7bfb3f1049ed4a62d26d81970a723544e8252db0efde853268e21"}, - {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:aa784405f0c640940595fa0f14064d8e84aff0b0f762fa18393e2760a2cf5841"}, - {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3146b8e16fa60427e03884301bf8209221f5761ac754ee6b267642a2fd354c48"}, - {file = "coverage-7.2.3-cp37-cp37m-win32.whl", hash = "sha256:1fd78b911aea9cec3b7e1e2622c8018d51c0d2bbcf8faaf53c2497eb114911c1"}, - {file = "coverage-7.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f3736a5d34e091b0a611964c6262fd68ca4363df56185902528f0b75dbb9c1f"}, - {file = "coverage-7.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:981b4df72c93e3bc04478153df516d385317628bd9c10be699c93c26ddcca8ab"}, - {file = "coverage-7.2.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0045f8f23a5fb30b2eb3b8a83664d8dc4fb58faddf8155d7109166adb9f2040"}, - {file = "coverage-7.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f760073fcf8f3d6933178d67754f4f2d4e924e321f4bb0dcef0424ca0215eba1"}, - {file = "coverage-7.2.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c86bd45d1659b1ae3d0ba1909326b03598affbc9ed71520e0ff8c31a993ad911"}, - {file = "coverage-7.2.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:172db976ae6327ed4728e2507daf8a4de73c7cc89796483e0a9198fd2e47b462"}, - {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d2a3a6146fe9319926e1d477842ca2a63fe99af5ae690b1f5c11e6af074a6b5c"}, - {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f649dd53833b495c3ebd04d6eec58479454a1784987af8afb77540d6c1767abd"}, - {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c4ed4e9f3b123aa403ab424430b426a1992e6f4c8fd3cb56ea520446e04d152"}, - {file = "coverage-7.2.3-cp38-cp38-win32.whl", hash = "sha256:eb0edc3ce9760d2f21637766c3aa04822030e7451981ce569a1b3456b7053f22"}, - {file = "coverage-7.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:63cdeaac4ae85a179a8d6bc09b77b564c096250d759eed343a89d91bce8b6367"}, - {file = "coverage-7.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:20d1a2a76bb4eb00e4d36b9699f9b7aba93271c9c29220ad4c6a9581a0320235"}, - {file = "coverage-7.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ea748802cc0de4de92ef8244dd84ffd793bd2e7be784cd8394d557a3c751e21"}, - {file = "coverage-7.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21b154aba06df42e4b96fc915512ab39595105f6c483991287021ed95776d934"}, - {file = "coverage-7.2.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd214917cabdd6f673a29d708574e9fbdb892cb77eb426d0eae3490d95ca7859"}, - {file = "coverage-7.2.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c2e58e45fe53fab81f85474e5d4d226eeab0f27b45aa062856c89389da2f0d9"}, - {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:87ecc7c9a1a9f912e306997ffee020297ccb5ea388421fe62a2a02747e4d5539"}, - {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:387065e420aed3c71b61af7e82c7b6bc1c592f7e3c7a66e9f78dd178699da4fe"}, - {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ea3f5bc91d7d457da7d48c7a732beaf79d0c8131df3ab278e6bba6297e23c6c4"}, - {file = "coverage-7.2.3-cp39-cp39-win32.whl", hash = "sha256:ae7863a1d8db6a014b6f2ff9c1582ab1aad55a6d25bac19710a8df68921b6e30"}, - {file = "coverage-7.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:3f04becd4fcda03c0160d0da9c8f0c246bc78f2f7af0feea1ec0930e7c93fa4a"}, - {file = "coverage-7.2.3-pp37.pp38.pp39-none-any.whl", hash = "sha256:965ee3e782c7892befc25575fa171b521d33798132692df428a09efacaffe8d0"}, - {file = "coverage-7.2.3.tar.gz", hash = "sha256:d298c2815fa4891edd9abe5ad6e6cb4207104c7dd9fd13aea3fdebf6f9b91259"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, + {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, + {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, + {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, + {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, + {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, + {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, + {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, + {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, + {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, + {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, + {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, + {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, + {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, + {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, + {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, + {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, ] cryptography = [ - {file = "cryptography-39.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:2725672bb53bb92dc7b4150d233cd4b8c59615cd8288d495eaa86db00d4e5c06"}, - {file = "cryptography-39.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:23df8ca3f24699167daf3e23e51f7ba7334d504af63a94af468f468b975b7dd7"}, - {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:eb40fe69cfc6f5cdab9a5ebd022131ba21453cf7b8a7fd3631f45bbf52bed612"}, - {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc0521cce2c1d541634b19f3ac661d7a64f9555135e9d8af3980965be717fd4a"}, - {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffd394c7896ed7821a6d13b24657c6a34b6e2650bd84ae063cf11ccffa4f1a97"}, - {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:e8a0772016feeb106efd28d4a328e77dc2edae84dfbac06061319fdb669ff828"}, - {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8f35c17bd4faed2bc7797d2a66cbb4f986242ce2e30340ab832e5d99ae60e011"}, - {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b49a88ff802e1993b7f749b1eeb31134f03c8d5c956e3c125c75558955cda536"}, - {file = "cryptography-39.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c682e736513db7d04349b4f6693690170f95aac449c56f97415c6980edef5"}, - {file = "cryptography-39.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:d7d84a512a59f4412ca8549b01f94be4161c94efc598bf09d027d67826beddc0"}, - {file = "cryptography-39.0.2-cp36-abi3-win32.whl", hash = "sha256:c43ac224aabcbf83a947eeb8b17eaf1547bce3767ee2d70093b461f31729a480"}, - {file = "cryptography-39.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:788b3921d763ee35dfdb04248d0e3de11e3ca8eb22e2e48fef880c42e1f3c8f9"}, - {file = "cryptography-39.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d15809e0dbdad486f4ad0979753518f47980020b7a34e9fc56e8be4f60702fac"}, - {file = "cryptography-39.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:50cadb9b2f961757e712a9737ef33d89b8190c3ea34d0fb6675e00edbe35d074"}, - {file = "cryptography-39.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:103e8f7155f3ce2ffa0049fe60169878d47a4364b277906386f8de21c9234aa1"}, - {file = "cryptography-39.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6236a9610c912b129610eb1a274bdc1350b5df834d124fa84729ebeaf7da42c3"}, - {file = "cryptography-39.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e944fe07b6f229f4c1a06a7ef906a19652bdd9fd54c761b0ff87e83ae7a30354"}, - {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:35d658536b0a4117c885728d1a7032bdc9a5974722ae298d6c533755a6ee3915"}, - {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:30b1d1bfd00f6fc80d11300a29f1d8ab2b8d9febb6ed4a38a76880ec564fae84"}, - {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e029b844c21116564b8b61216befabca4b500e6816fa9f0ba49527653cae2108"}, - {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fa507318e427169ade4e9eccef39e9011cdc19534f55ca2f36ec3f388c1f70f3"}, - {file = "cryptography-39.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8bc0008ef798231fac03fe7d26e82d601d15bd16f3afaad1c6113771566570f3"}, - {file = "cryptography-39.0.2.tar.gz", hash = "sha256:bc5b871e977c8ee5a1bbc42fa8d19bcc08baf0c51cbf1586b0e87a2694dde42f"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, + {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, + {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, + {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, + {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, + {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, + {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, ] db-dtypes = [ - {file = "db-dtypes-1.0.1.tar.gz", hash = "sha256:3eb5931c9f8c314a1a4aeb698a7eb1d713cddaed4a7a13f0408a8785c4a72330"}, - {file = "db_dtypes-1.0.1-py2.py3-none-any.whl", hash = "sha256:b26b295773d2a4b445f6a7f297ec04dd9eb5d3fb26622032550da013486ba7b7"}, + {file = "db-dtypes-1.2.0.tar.gz", hash = "sha256:3531bb1fb8b5fbab33121fe243ccc2ade16ab2524f4c113b05cc702a1908e6ea"}, + {file = "db_dtypes-1.2.0-py2.py3-none-any.whl", hash = "sha256:6320bddd31d096447ef749224d64aab00972ed20e4392d86f7d8b81ad79f7ff0"}, ] decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, @@ -1765,8 +1798,8 @@ et-xmlfile = [ {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, ] exceptiongroup = [ - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] filelock = [ {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"}, @@ -1848,144 +1881,174 @@ frozenlist = [ {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"}, {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"}, ] +google-analytics-data = [ + {file = "google-analytics-data-0.18.7.tar.gz", hash = "sha256:d98aaae0515bd29375278228a22d9dc919749f62ba52e905e3da16f25dcb384d"}, + {file = "google_analytics_data-0.18.7-py2.py3-none-any.whl", hash = "sha256:4579be17a415e9f381d248c3e5e775c30592350aa583cc5a02209aecff0d842f"}, +] google-api-core = [ - {file = "google-api-core-2.7.1.tar.gz", hash = "sha256:b0fa577e512f0c8e063386b974718b8614586a798c5894ed34bedf256d9dae24"}, - {file = "google_api_core-2.7.1-py3-none-any.whl", hash = "sha256:6be1fc59e2a7ba9f66808bbc22f976f81e4c3e7ab20fa0620ce42686288787d0"}, + {file = "google-api-core-2.17.1.tar.gz", hash = "sha256:9df18a1f87ee0df0bc4eea2770ebc4228392d8cc4066655b320e2cfccb15db95"}, + {file = "google_api_core-2.17.1-py3-none-any.whl", hash = "sha256:610c5b90092c360736baccf17bd3efbcb30dd380e7a6dc28a71059edb8bd0d8e"}, ] google-api-python-client = [ - {file = "google-api-python-client-2.43.0.tar.gz", hash = "sha256:ccd16b3aa92070d3777c4b188669820aacdd70695a87cfc8dbb330f6be9578f7"}, - {file = "google_api_python_client-2.43.0-py2.py3-none-any.whl", hash = "sha256:a06b9621de90623ec2d66389a3615ca3c260849de622112868dd79109eed67b1"}, + {file = "google-api-python-client-2.122.0.tar.gz", hash = "sha256:77447bf2d6b6ea9e686fd66fc2f12ee7a63e3889b7427676429ebf09fcb5dcf9"}, + {file = "google_api_python_client-2.122.0-py2.py3-none-any.whl", hash = "sha256:a5953e60394b77b98bcc7ff7c4971ed784b3b693e9a569c176eaccb1549330f2"}, ] google-auth = [ - {file = "google-auth-2.6.2.tar.gz", hash = "sha256:60d449f8142c742db760f4c0be39121bc8d9be855555d784c252deaca1ced3f5"}, - {file = "google_auth-2.6.2-py2.py3-none-any.whl", hash = "sha256:3ba4d63cb29c1e6d5ffcc1c0623c03cf02ede6240a072f213084749574e691ab"}, + {file = "google-auth-2.28.2.tar.gz", hash = "sha256:80b8b4969aa9ed5938c7828308f20f035bc79f9d8fb8120bf9dc8db20b41ba30"}, + {file = "google_auth-2.28.2-py2.py3-none-any.whl", hash = "sha256:9fd67bbcd40f16d9d42f950228e9cf02a2ded4ae49198b27432d0cded5a74c38"}, ] google-auth-httplib2 = [ - {file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"}, - {file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"}, + {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, + {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, ] google-cloud-bigquery = [ - {file = "google-cloud-bigquery-2.34.3.tar.gz", hash = "sha256:0ab6362a86a29f17e379e886b49544bc0b75626902a48d12c13a0b47f821bf4a"}, - {file = "google_cloud_bigquery-2.34.3-py2.py3-none-any.whl", hash = "sha256:d702c609e57a3d7d7fbd37e4913d8d0e0e77eabaf7119037ceaa33e2370d7dcb"}, + {file = "google-cloud-bigquery-3.19.0.tar.gz", hash = "sha256:8e311dae49768e1501fcdc5e916bff4b7e169471e5707919f4a6f78a02b3b5a6"}, + {file = "google_cloud_bigquery-3.19.0-py2.py3-none-any.whl", hash = "sha256:c6b8850247a4b132066e49f6e45f850c22824482838688d744a4398eea1120ed"}, ] google-cloud-bigquery-storage = [ - {file = "google-cloud-bigquery-storage-2.13.1.tar.gz", hash = "sha256:7a25148f635a04ca9ff568d47e64be275d3a4a3c90772524879e8f88f270d92d"}, - {file = "google_cloud_bigquery_storage-2.13.1-py2.py3-none-any.whl", hash = "sha256:4f3845535c77f9271a03046438e43cfd56df575d0c5f2ee3362bf8760a0aba50"}, + {file = "google-cloud-bigquery-storage-2.24.0.tar.gz", hash = "sha256:b4af5b9aacd8396b8407d1b877601a376d8eea6d192823a8a7881bd2fdc076ce"}, + {file = "google_cloud_bigquery_storage-2.24.0-py2.py3-none-any.whl", hash = "sha256:7981eb2758cba56603058d11bb1eeeebf2e1c18097a7118a894510a16e02be52"}, ] google-cloud-core = [ - {file = "google-cloud-core-2.2.3.tar.gz", hash = "sha256:89d2f7189bc6dc74de128d423ea52cc8719f0a5dbccd9ca80433f6504a20255c"}, - {file = "google_cloud_core-2.2.3-py2.py3-none-any.whl", hash = "sha256:a423852f4c36622376c8f0be509b67533690e061062368b763b92694c4ee06a7"}, + {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, + {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, ] google-cloud-storage = [ - {file = "google-cloud-storage-2.2.1.tar.gz", hash = "sha256:0244f4612710cb5ec445fc6774387564e23f9823363fb408b28724e2102401b7"}, - {file = "google_cloud_storage-2.2.1-py2.py3-none-any.whl", hash = "sha256:abdf0fadf26516172e804e00b9c24819a3b3f7351cd32f35ca249bbfac965494"}, + {file = "google-cloud-storage-2.16.0.tar.gz", hash = "sha256:dda485fa503710a828d01246bd16ce9db0823dc51bbca742ce96a6817d58669f"}, + {file = "google_cloud_storage-2.16.0-py2.py3-none-any.whl", hash = "sha256:91a06b96fb79cf9cdfb4e759f178ce11ea885c79938f89590344d079305f5852"}, ] google-crc32c = [ - {file = "google-crc32c-1.3.0.tar.gz", hash = "sha256:276de6273eb074a35bc598f8efbc00c7869c5cf2e29c90748fccc8c898c244df"}, - {file = "google_crc32c-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cb6994fff247987c66a8a4e550ef374671c2b82e3c0d2115e689d21e511a652d"}, - {file = "google_crc32c-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9da0a39b53d2fab3e5467329ed50e951eb91386e9d0d5b12daf593973c3b168"}, - {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:eb0b14523758e37802f27b7f8cd973f5f3d33be7613952c0df904b68c4842f0e"}, - {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:95c68a4b9b7828ba0428f8f7e3109c5d476ca44996ed9a5f8aac6269296e2d59"}, - {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c3cf890c3c0ecfe1510a452a165431b5831e24160c5fcf2071f0f85ca5a47cd"}, - {file = "google_crc32c-1.3.0-cp310-cp310-win32.whl", hash = "sha256:3bbce1be3687bbfebe29abdb7631b83e6b25da3f4e1856a1611eb21854b689ea"}, - {file = "google_crc32c-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:c124b8c8779bf2d35d9b721e52d4adb41c9bfbde45e6a3f25f0820caa9aba73f"}, - {file = "google_crc32c-1.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:42ae4781333e331a1743445931b08ebdad73e188fd554259e772556fc4937c48"}, - {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ff71073ebf0e42258a42a0b34f2c09ec384977e7f6808999102eedd5b49920e3"}, - {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fe31de3002e7b08eb20823b3735b97c86c5926dd0581c7710a680b418a8709d4"}, - {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd7760a88a8d3d705ff562aa93f8445ead54f58fd482e4f9e2bafb7e177375d4"}, - {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0b9e622c3b2b8d0ce32f77eba617ab0d6768b82836391e4f8f9e2074582bf02"}, - {file = "google_crc32c-1.3.0-cp36-cp36m-win32.whl", hash = "sha256:779cbf1ce375b96111db98fca913c1f5ec11b1d870e529b1dc7354b2681a8c3a"}, - {file = "google_crc32c-1.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:04e7c220798a72fd0f08242bc8d7a05986b2a08a0573396187fd32c1dcdd58b3"}, - {file = "google_crc32c-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e7a539b9be7b9c00f11ef16b55486141bc2cdb0c54762f84e3c6fc091917436d"}, - {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ca60076c388728d3b6ac3846842474f4250c91efbfe5afa872d3ffd69dd4b318"}, - {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05340b60bf05b574159e9bd940152a47d38af3fb43803ffe71f11d704b7696a6"}, - {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:318f73f5484b5671f0c7f5f63741ab020a599504ed81d209b5c7129ee4667407"}, - {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f58099ad7affc0754ae42e6d87443299f15d739b0ce03c76f515153a5cda06c"}, - {file = "google_crc32c-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:f52a4ad2568314ee713715b1e2d79ab55fab11e8b304fd1462ff5cccf4264b3e"}, - {file = "google_crc32c-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:bab4aebd525218bab4ee615786c4581952eadc16b1ff031813a2fd51f0cc7b08"}, - {file = "google_crc32c-1.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dda4d8a3bb0b50f540f6ff4b6033f3a74e8bf0bd5320b70fab2c03e512a62812"}, - {file = "google_crc32c-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fec221a051150eeddfdfcff162e6db92c65ecf46cb0f7bb1bf812a1520ec026b"}, - {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:226f2f9b8e128a6ca6a9af9b9e8384f7b53a801907425c9a292553a3a7218ce0"}, - {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7f9cbea4245ee36190f85fe1814e2d7b1e5f2186381b082f5d59f99b7f11328"}, - {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a4db36f9721fdf391646685ecffa404eb986cbe007a3289499020daf72e88a2"}, - {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:12674a4c3b56b706153a358eaa1018c4137a5a04635b92b4652440d3d7386206"}, - {file = "google_crc32c-1.3.0-cp38-cp38-win32.whl", hash = "sha256:650e2917660e696041ab3dcd7abac160b4121cd9a484c08406f24c5964099829"}, - {file = "google_crc32c-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:58be56ae0529c664cc04a9c76e68bb92b091e0194d6e3c50bea7e0f266f73713"}, - {file = "google_crc32c-1.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:96a8918a78d5d64e07c8ea4ed2bc44354e3f93f46a4866a40e8db934e4c0d74b"}, - {file = "google_crc32c-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:13af315c3a0eec8bb8b8d80b8b128cb3fcd17d7e4edafc39647846345a3f003a"}, - {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6311853aa2bba4064d0c28ca54e7b50c4d48e3de04f6770f6c60ebda1e975267"}, - {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed447680ff21c14aaceb6a9f99a5f639f583ccfe4ce1a5e1d48eb41c3d6b3217"}, - {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1c1d6236feab51200272d79b3d3e0f12cf2cbb12b208c835b175a21efdb0a73"}, - {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e0f1ff55dde0ebcfbef027edc21f71c205845585fffe30d4ec4979416613e9b3"}, - {file = "google_crc32c-1.3.0-cp39-cp39-win32.whl", hash = "sha256:fbd60c6aaa07c31d7754edbc2334aef50601b7f1ada67a96eb1eb57c7c72378f"}, - {file = "google_crc32c-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:127f9cc3ac41b6a859bd9dc4321097b1a4f6aa7fdf71b4f9227b9e3ebffb4422"}, - {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fc28e0db232c62ca0c3600884933178f0825c99be4474cdd645e378a10588125"}, - {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1926fd8de0acb9d15ee757175ce7242e235482a783cd4ec711cc999fc103c24e"}, - {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5da2c81575cc3ccf05d9830f9e8d3c70954819ca9a63828210498c0774fda1a3"}, - {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f712ce54e0d631370e1f4997b3f182f3368179198efc30d477c75d1f44942"}, - {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7f6fe42536d9dcd3e2ffb9d3053f5d05221ae3bbcefbe472bdf2c71c793e3183"}, + {file = "google-crc32c-1.5.0.tar.gz", hash = "sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win32.whl", hash = "sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win32.whl", hash = "sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win32.whl", hash = "sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win32.whl", hash = "sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93"}, ] google-resumable-media = [ - {file = "google-resumable-media-2.3.2.tar.gz", hash = "sha256:06924e8b1e79f158f0202e7dd151ad75b0ea9d59b997c850f56bdd4a5a361513"}, - {file = "google_resumable_media-2.3.2-py2.py3-none-any.whl", hash = "sha256:3c13f84813861ac8f5b6371254bdd437076bf1f3bac527a9f3fd123a70166f52"}, + {file = "google-resumable-media-2.7.0.tar.gz", hash = "sha256:5f18f5fa9836f4b083162064a1c2c98c17239bfda9ca50ad970ccf905f3e625b"}, + {file = "google_resumable_media-2.7.0-py2.py3-none-any.whl", hash = "sha256:79543cfe433b63fd81c0844b7803aba1bb8950b47bedf7d980c38fa123937e08"}, ] googleapis-common-protos = [ - {file = "googleapis-common-protos-1.56.0.tar.gz", hash = "sha256:4007500795bcfc269d279f0f7d253ae18d6dc1ff5d5a73613ffe452038b1ec5f"}, - {file = "googleapis_common_protos-1.56.0-py2.py3-none-any.whl", hash = "sha256:60220c89b8bd5272159bed4929ecdc1243ae1f73437883a499a44a1cbc084086"}, + {file = "googleapis-common-protos-1.63.0.tar.gz", hash = "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e"}, + {file = "googleapis_common_protos-1.63.0-py2.py3-none-any.whl", hash = "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632"}, ] gremlinpython = [ {file = "gremlinpython-3.5.2-py2.py3-none-any.whl", hash = "sha256:333c8d2d67d1c5350a7ade2efd8d2acdb81968c01c09fdea80269292deadb582"}, {file = "gremlinpython-3.5.2.tar.gz", hash = "sha256:2ebaa1f360ba62c48705b056ba3d4e92e448287431f42a92eef4b2217ae51c5b"}, ] grpcio = [ - {file = "grpcio-1.44.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:11f811c0fffd84fca747fbc742464575e5eb130fd4fb4d6012ccc34febd001db"}, - {file = "grpcio-1.44.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:9a86a91201f8345502ea81dee0a55ae13add5fafadf109b17acd858fe8239651"}, - {file = "grpcio-1.44.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:5f3c54ebb5d9633a557335c01d88d3d4928e9b1b131692283b6184da1edbec0b"}, - {file = "grpcio-1.44.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d47553b8e86ab1e59b0185ba6491a187f94a0239f414c8fc867a22b0405b798"}, - {file = "grpcio-1.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1e22d3a510438b7f3365c0071b810672d09febac6e8ca8a47eab657ae5f347b"}, - {file = "grpcio-1.44.0-cp310-cp310-win32.whl", hash = "sha256:41036a574cab3468f24d41d6ed2b52588fb85ed60f8feaa925d7e424a250740b"}, - {file = "grpcio-1.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:4ee51964edfd0a1293a95bb0d72d134ecf889379d90d2612cbf663623ce832b4"}, - {file = "grpcio-1.44.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:e2149077d71e060678130644670389ddf1491200bcea16c5560d4ccdc65e3f2e"}, - {file = "grpcio-1.44.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:0ac72d4b953b76924f8fa21436af060d7e6d8581e279863f30ee14f20751ac27"}, - {file = "grpcio-1.44.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:5c30a9a7d3a05920368a60b080cbbeaf06335303be23ac244034c71c03a0fd24"}, - {file = "grpcio-1.44.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:05467acd391e3fffb05991c76cb2ed2fa1309d0e3815ac379764bc5670b4b5d4"}, - {file = "grpcio-1.44.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:b81dc7894062ed2d25b74a2725aaa0a6895ce97ce854f432fe4e87cad5a07316"}, - {file = "grpcio-1.44.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46d4843192e7d36278884282e100b8f305cf37d1b3d8c6b4f736d4454640a069"}, - {file = "grpcio-1.44.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:898c159148f27e23c08a337fb80d31ece6b76bb24f359d83929460d813665b74"}, - {file = "grpcio-1.44.0-cp36-cp36m-win32.whl", hash = "sha256:b8d852329336c584c636caa9c2db990f3a332b19bc86a80f4646b58d27c142db"}, - {file = "grpcio-1.44.0-cp36-cp36m-win_amd64.whl", hash = "sha256:790d7493337558ae168477d1be3178f4c9b8f91d8cd9b8b719d06fd9b2d48836"}, - {file = "grpcio-1.44.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:cd61b52d9cf8fcf8d9628c0b640b9e44fdc5e93d989cc268086a858540ed370c"}, - {file = "grpcio-1.44.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:14eefcf623890f3f7dd7831decd2a2116652b5ce1e0f1d4b464b8f52110743b0"}, - {file = "grpcio-1.44.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:bebe90b8020b4248e5a2076b56154cc6ff45691bbbe980579fc9db26717ac968"}, - {file = "grpcio-1.44.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:89b390b1c0de909965280d175c53128ce2f0f4f5c0f011382243dd7f2f894060"}, - {file = "grpcio-1.44.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:c122dac5cb299b8ad7308d61bd9fe0413de13b0347cce465398436b3fdf1f609"}, - {file = "grpcio-1.44.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6641a28cc826a92ef717201cca9a035c34a0185e38b0c93f3ce5f01a01a1570a"}, - {file = "grpcio-1.44.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb0a3e0e64843441793923d9532a3a23907b07b2a1e0a7a31f186dc185bb772"}, - {file = "grpcio-1.44.0-cp37-cp37m-win32.whl", hash = "sha256:be857b7ec2ac43455156e6ba89262f7d7ae60227049427d01a3fecd218a3f88d"}, - {file = "grpcio-1.44.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f6a9cf0e77f72f2ac30c9c6e086bc7446c984c51bebc6c7f50fbcd718037edba"}, - {file = "grpcio-1.44.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:19e54f0c7083c8332b5a75a9081fc5127f1dbb67b6c1a32bd7fe896ef0934918"}, - {file = "grpcio-1.44.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:bfd36b959c3c4e945119387baed1414ea46f7116886aa23de0172302b49d7ff1"}, - {file = "grpcio-1.44.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:ccd388b8f37b19d06e4152189726ce309e36dc03b53f2216a4ea49f09a7438e6"}, - {file = "grpcio-1.44.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:9075c0c003c1ff14ebce8f0ba55cc692158cb55c68da09cf8b0f9fc5b749e343"}, - {file = "grpcio-1.44.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:e898194f76212facbaeb6d7545debff29351afa23b53ff8f0834d66611af5139"}, - {file = "grpcio-1.44.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fa6584046a7cf281649975a363673fa5d9c6faf9dc923f261cc0e56713b5892"}, - {file = "grpcio-1.44.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36a7bdd6ef9bca050c7ade8cba5f0e743343ea0756d5d3d520e915098a9dc503"}, - {file = "grpcio-1.44.0-cp38-cp38-win32.whl", hash = "sha256:dc3290d0411ddd2bd49adba5793223de8de8b01588d45e9376f1a9f7d25414f4"}, - {file = "grpcio-1.44.0-cp38-cp38-win_amd64.whl", hash = "sha256:13343e7b840c20f43b44f0e6d3bbdc037c964f0aec9735d7cb685c407731c9ff"}, - {file = "grpcio-1.44.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:c5c2f8417d13386e18ccc8c61467cb6a6f9667a1ff7000a2d7d378e5d7df693f"}, - {file = "grpcio-1.44.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:cf220199b7b4992729ad4d55d5d3f652f4ccfe1a35b5eacdbecf189c245e1859"}, - {file = "grpcio-1.44.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4201c597e5057a9bfef9ea5777a6d83f6252cb78044db7d57d941ec2300734a5"}, - {file = "grpcio-1.44.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:e2de61005118ae59d48d5d749283ebfd1ba4ca68cc1000f8a395cd2bdcff7ceb"}, - {file = "grpcio-1.44.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:871078218fa9117e2a378678f327e32fda04e363ed6bc0477275444273255d4d"}, - {file = "grpcio-1.44.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8d610b7b557a7609fecee80b6dd793ecb7a9a3c3497fbdce63ce7d151cdd705"}, - {file = "grpcio-1.44.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcb53e4eb8c271032c91b8981df5fc1bb974bc73e306ec2c27da41bd95c44b5"}, - {file = "grpcio-1.44.0-cp39-cp39-win32.whl", hash = "sha256:e50ddea6de76c09b656df4b5a55ae222e2a56e625c44250e501ff3c904113ec1"}, - {file = "grpcio-1.44.0-cp39-cp39-win_amd64.whl", hash = "sha256:d2ec124a986093e26420a5fb10fa3f02b2c232f924cdd7b844ddf7e846c020cd"}, - {file = "grpcio-1.44.0.tar.gz", hash = "sha256:4bae1c99896045d3062ab95478411c8d5a52cb84b91a1517312629fa6cfeb50e"}, + {file = "grpcio-1.56.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:bf0b9959e673505ee5869950642428046edb91f99942607c2ecf635f8a4b31c9"}, + {file = "grpcio-1.56.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:5144feb20fe76e73e60c7d73ec3bf54f320247d1ebe737d10672480371878b48"}, + {file = "grpcio-1.56.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a72797549935c9e0b9bc1def1768c8b5a709538fa6ab0678e671aec47ebfd55e"}, + {file = "grpcio-1.56.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3f3237a57e42f79f1e560726576aedb3a7ef931f4e3accb84ebf6acc485d316"}, + {file = "grpcio-1.56.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900bc0096c2ca2d53f2e5cebf98293a7c32f532c4aeb926345e9747452233950"}, + {file = "grpcio-1.56.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:97e0efaebbfd222bcaac2f1735c010c1d3b167112d9d237daebbeedaaccf3d1d"}, + {file = "grpcio-1.56.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c0c85c5cbe8b30a32fa6d802588d55ffabf720e985abe9590c7c886919d875d4"}, + {file = "grpcio-1.56.2-cp310-cp310-win32.whl", hash = "sha256:06e84ad9ae7668a109e970c7411e7992751a116494cba7c4fb877656527f9a57"}, + {file = "grpcio-1.56.2-cp310-cp310-win_amd64.whl", hash = "sha256:10954662f77dc36c9a1fb5cc4a537f746580d6b5734803be1e587252682cda8d"}, + {file = "grpcio-1.56.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:c435f5ce1705de48e08fcbcfaf8aee660d199c90536e3e06f2016af7d6a938dd"}, + {file = "grpcio-1.56.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:6108e5933eb8c22cd3646e72d5b54772c29f57482fd4c41a0640aab99eb5071d"}, + {file = "grpcio-1.56.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8391cea5ce72f4a12368afd17799474015d5d3dc00c936a907eb7c7eaaea98a5"}, + {file = "grpcio-1.56.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:750de923b456ca8c0f1354d6befca45d1f3b3a789e76efc16741bd4132752d95"}, + {file = "grpcio-1.56.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fda2783c12f553cdca11c08e5af6eecbd717280dc8fbe28a110897af1c15a88c"}, + {file = "grpcio-1.56.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9e04d4e4cfafa7c5264e535b5d28e786f0571bea609c3f0aaab13e891e933e9c"}, + {file = "grpcio-1.56.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89a49cc5ad08a38b6141af17e00d1dd482dc927c7605bc77af457b5a0fca807c"}, + {file = "grpcio-1.56.2-cp311-cp311-win32.whl", hash = "sha256:6a007a541dff984264981fbafeb052bfe361db63578948d857907df9488d8774"}, + {file = "grpcio-1.56.2-cp311-cp311-win_amd64.whl", hash = "sha256:af4063ef2b11b96d949dccbc5a987272f38d55c23c4c01841ea65a517906397f"}, + {file = "grpcio-1.56.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:a6ff459dac39541e6a2763a4439c4ca6bc9ecb4acc05a99b79246751f9894756"}, + {file = "grpcio-1.56.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:f20fd21f7538f8107451156dd1fe203300b79a9ddceba1ee0ac8132521a008ed"}, + {file = "grpcio-1.56.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:d1fbad1f9077372b6587ec589c1fc120b417b6c8ad72d3e3cc86bbbd0a3cee93"}, + {file = "grpcio-1.56.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee26e9dfb3996aff7c870f09dc7ad44a5f6732b8bdb5a5f9905737ac6fd4ef1"}, + {file = "grpcio-1.56.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4c60abd950d6de3e4f1ddbc318075654d275c29c846ab6a043d6ed2c52e4c8c"}, + {file = "grpcio-1.56.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1c31e52a04e62c8577a7bf772b3e7bed4df9c9e0dd90f92b6ffa07c16cab63c9"}, + {file = "grpcio-1.56.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:345356b307cce5d14355e8e055b4ca5f99bc857c33a3dc1ddbc544fca9cd0475"}, + {file = "grpcio-1.56.2-cp37-cp37m-win_amd64.whl", hash = "sha256:42e63904ee37ae46aa23de50dac8b145b3596f43598fa33fe1098ab2cbda6ff5"}, + {file = "grpcio-1.56.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:7c5ede2e2558f088c49a1ddda19080e4c23fb5d171de80a726b61b567e3766ed"}, + {file = "grpcio-1.56.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:33971197c47965cc1d97d78d842163c283e998223b151bab0499b951fd2c0b12"}, + {file = "grpcio-1.56.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:d39f5d4af48c138cb146763eda14eb7d8b3ccbbec9fe86fb724cd16e0e914c64"}, + {file = "grpcio-1.56.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ded637176addc1d3eef35331c39acc598bac550d213f0a1bedabfceaa2244c87"}, + {file = "grpcio-1.56.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c90da4b124647547a68cf2f197174ada30c7bb9523cb976665dfd26a9963d328"}, + {file = "grpcio-1.56.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3ccb621749a81dc7755243665a70ce45536ec413ef5818e013fe8dfbf5aa497b"}, + {file = "grpcio-1.56.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4eb37dd8dd1aa40d601212afa27ca5be255ba792e2e0b24d67b8af5e012cdb7d"}, + {file = "grpcio-1.56.2-cp38-cp38-win32.whl", hash = "sha256:ddb4a6061933bd9332b74eac0da25f17f32afa7145a33a0f9711ad74f924b1b8"}, + {file = "grpcio-1.56.2-cp38-cp38-win_amd64.whl", hash = "sha256:8940d6de7068af018dfa9a959a3510e9b7b543f4c405e88463a1cbaa3b2b379a"}, + {file = "grpcio-1.56.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:51173e8fa6d9a2d85c14426bdee5f5c4a0654fd5fddcc21fe9d09ab0f6eb8b35"}, + {file = "grpcio-1.56.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:373b48f210f43327a41e397391715cd11cfce9ded2fe76a5068f9bacf91cc226"}, + {file = "grpcio-1.56.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:42a3bbb2bc07aef72a7d97e71aabecaf3e4eb616d39e5211e2cfe3689de860ca"}, + {file = "grpcio-1.56.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5344be476ac37eb9c9ad09c22f4ea193c1316bf074f1daf85bddb1b31fda5116"}, + {file = "grpcio-1.56.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3fa3ab0fb200a2c66493828ed06ccd1a94b12eddbfb985e7fd3e5723ff156c6"}, + {file = "grpcio-1.56.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b975b85d1d5efc36cf8b237c5f3849b64d1ba33d6282f5e991f28751317504a1"}, + {file = "grpcio-1.56.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cbdf2c498e077282cd427cfd88bdce4668019791deef0be8155385ab2ba7837f"}, + {file = "grpcio-1.56.2-cp39-cp39-win32.whl", hash = "sha256:139f66656a762572ae718fa0d1f2dce47c05e9fbf7a16acd704c354405b97df9"}, + {file = "grpcio-1.56.2-cp39-cp39-win_amd64.whl", hash = "sha256:830215173ad45d670140ff99aac3b461f9be9a6b11bee1a17265aaaa746a641a"}, + {file = "grpcio-1.56.2.tar.gz", hash = "sha256:0ff789ae7d8ddd76d2ac02e7d13bfef6fc4928ac01e1dcaa182be51b6bcc0aaa"}, ] grpcio-status = [ - {file = "grpcio-status-1.44.0.tar.gz", hash = "sha256:ac613ab7a45380cbfa3e529022d0b37317d858f172ba6e65c188aa7355539398"}, - {file = "grpcio_status-1.44.0-py3-none-any.whl", hash = "sha256:caf831c1fdcafeb3f48f7f2500e6ffb0c755120354a302f8695b698b0a2faace"}, + {file = "grpcio-status-1.56.2.tar.gz", hash = "sha256:a046b2c0118df4a5687f4585cca9d3c3bae5c498c4dff055dcb43fb06a1180c8"}, + {file = "grpcio_status-1.56.2-py3-none-any.whl", hash = "sha256:63f3842867735f59f5d70e723abffd2e8501a6bcd915612a1119e52f10614782"}, ] httplib2 = [ {file = "httplib2-0.20.4-py3-none-any.whl", hash = "sha256:8b6a905cb1c79eefd03f8669fd993c36dc341f7c558f056cb5a33b5c2f458543"}, @@ -2008,8 +2071,8 @@ isodate = [ {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, ] jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] jmespath = [ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"}, @@ -2093,176 +2156,203 @@ lxml = [ {file = "lxml-4.9.1.tar.gz", hash = "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"}, ] markupsafe = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] mongomock = [ {file = "mongomock-4.1.2-py2.py3-none-any.whl", hash = "sha256:08a24938a05c80c69b6b8b19a09888d38d8c6e7328547f94d46cadb7f47209f2"}, {file = "mongomock-4.1.2.tar.gz", hash = "sha256:f06cd62afb8ae3ef63ba31349abd220a657ef0dd4f0243a29587c5213f931b7d"}, ] moto = [ - {file = "moto-4.1.4-py2.py3-none-any.whl", hash = "sha256:f9bf72aec6aea49ebb1a46c8096b2c9629be58ecca3ecd8b51f781fea78148e2"}, - {file = "moto-4.1.4.tar.gz", hash = "sha256:304cb19eee0019cd13f7d87ca590a4694677469c383ab8f8439fcb6717c47037"}, + {file = "moto-4.2.14-py2.py3-none-any.whl", hash = "sha256:6d242dbbabe925bb385ddb6958449e5c827670b13b8e153ed63f91dbdb50372c"}, + {file = "moto-4.2.14.tar.gz", hash = "sha256:8f9263ca70b646f091edcc93e97cda864a542e6d16ed04066b1370ed217bd190"}, ] multidict = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] nest-asyncio = [ {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, {file = "nest_asyncio-1.5.5.tar.gz", hash = "sha256:e442291cd942698be619823a17a86a5759eabe1f8613084790de189fe9e16d65"}, ] numpy = [ - {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:301e408a052fdcda5cdcf03021ebafc3c6ea093021bf9d1aa47c54d48bdad166"}, - {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7e8f6216f180f3fd4efb73de5d1eaefb5f5a1ee5b645c67333033e39440e63a"}, - {file = "numpy-1.21.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc7a7d7b0ed72589fd8b8486b9b42a564f10b8762be8bd4d9df94b807af4a089"}, - {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58ca1d7c8aef6e996112d0ce873ac9dfa1eaf4a1196b4ff7ff73880a09923ba7"}, - {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4b2fb01f1b4ddbe2453468ea0719f4dbb1f5caa712c8b21bb3dd1480cd30d9"}, - {file = "numpy-1.21.5-cp310-cp310-win_amd64.whl", hash = "sha256:cc1b30205d138d1005adb52087ff45708febbef0e420386f58664f984ef56954"}, - {file = "numpy-1.21.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:08de8472d9f7571f9d51b27b75e827f5296295fa78817032e84464be8bb905bc"}, - {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4fe6a006557b87b352c04596a6e3f12a57d6e5f401d804947bd3188e6b0e0e76"}, - {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3d893b0871322eaa2f8c7072cdb552d8e2b27645b7875a70833c31e9274d4611"}, - {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341dddcfe3b7b6427a28a27baa59af5ad51baa59bfec3264f1ab287aa3b30b13"}, - {file = "numpy-1.21.5-cp37-cp37m-win32.whl", hash = "sha256:ca9c23848292c6fe0a19d212790e62f398fd9609aaa838859be8459bfbe558aa"}, - {file = "numpy-1.21.5-cp37-cp37m-win_amd64.whl", hash = "sha256:025b497014bc33fc23897859350f284323f32a2fff7654697f5a5fc2a19e9939"}, - {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a5098df115340fb17fc93867317a947e1dcd978c3888c5ddb118366095851f8"}, - {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:311283acf880cfcc20369201bd75da907909afc4666966c7895cbed6f9d2c640"}, - {file = "numpy-1.21.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b545ebadaa2b878c8630e5bcdb97fc4096e779f335fc0f943547c1c91540c815"}, - {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c5562bcc1a9b61960fc8950ade44d00e3de28f891af0acc96307c73613d18f6e"}, - {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eed2afaa97ec33b4411995be12f8bdb95c87984eaa28d76cf628970c8a2d689a"}, - {file = "numpy-1.21.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61bada43d494515d5b122f4532af226fdb5ee08fe5b5918b111279843dc6836a"}, - {file = "numpy-1.21.5-cp38-cp38-win32.whl", hash = "sha256:7b9d6b14fc9a4864b08d1ba57d732b248f0e482c7b2ff55c313137e3ed4d8449"}, - {file = "numpy-1.21.5-cp38-cp38-win_amd64.whl", hash = "sha256:dbce7adeb66b895c6aaa1fad796aaefc299ced597f6fbd9ceddb0dd735245354"}, - {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:507c05c7a37b3683eb08a3ff993bd1ee1e6c752f77c2f275260533b265ecdb6c"}, - {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:00c9fa73a6989895b8815d98300a20ac993c49ac36c8277e8ffeaa3631c0dbbb"}, - {file = "numpy-1.21.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69a5a8d71c308d7ef33ef72371c2388a90e3495dbb7993430e674006f94797d5"}, - {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2d8adfca843bc46ac199a4645233f13abf2011a0b2f4affc5c37cd552626f27b"}, - {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c293d3c0321996cd8ffe84215ffe5d269fd9d1d12c6f4ffe2b597a7c30d3e593"}, - {file = "numpy-1.21.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c978544be9e04ed12016dd295a74283773149b48f507d69b36f91aa90a643e5"}, - {file = "numpy-1.21.5-cp39-cp39-win32.whl", hash = "sha256:2a9add27d7fc0fdb572abc3b2486eb3b1395da71e0254c5552b2aad2a18b5441"}, - {file = "numpy-1.21.5-cp39-cp39-win_amd64.whl", hash = "sha256:1964db2d4a00348b7a60ee9d013c8cb0c566644a589eaa80995126eac3b99ced"}, - {file = "numpy-1.21.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7c4b701ca418cd39e28ec3b496e6388fe06de83f5f0cb74794fa31cfa384c02"}, - {file = "numpy-1.21.5.zip", hash = "sha256:6a5928bc6241264dce5ed509e66f33676fc97f464e7a919edc672fb5532221ee"}, + {file = "numpy-1.21.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8737609c3bbdd48e380d463134a35ffad3b22dc56295eff6f79fd85bd0eeeb25"}, + {file = "numpy-1.21.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fdffbfb6832cd0b300995a2b08b8f6fa9f6e856d562800fea9182316d99c4e8e"}, + {file = "numpy-1.21.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3820724272f9913b597ccd13a467cc492a0da6b05df26ea09e78b171a0bb9da6"}, + {file = "numpy-1.21.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f17e562de9edf691a42ddb1eb4a5541c20dd3f9e65b09ded2beb0799c0cf29bb"}, + {file = "numpy-1.21.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f30427731561ce75d7048ac254dbe47a2ba576229250fb60f0fb74db96501a1"}, + {file = "numpy-1.21.6-cp310-cp310-win32.whl", hash = "sha256:d4bf4d43077db55589ffc9009c0ba0a94fa4908b9586d6ccce2e0b164c86303c"}, + {file = "numpy-1.21.6-cp310-cp310-win_amd64.whl", hash = "sha256:d136337ae3cc69aa5e447e78d8e1514be8c3ec9b54264e680cf0b4bd9011574f"}, + {file = "numpy-1.21.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6aaf96c7f8cebc220cdfc03f1d5a31952f027dda050e5a703a0d1c396075e3e7"}, + {file = "numpy-1.21.6-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:67c261d6c0a9981820c3a149d255a76918278a6b03b6a036800359aba1256d46"}, + {file = "numpy-1.21.6-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a6be4cb0ef3b8c9250c19cc122267263093eee7edd4e3fa75395dfda8c17a8e2"}, + {file = "numpy-1.21.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c4068a8c44014b2d55f3c3f574c376b2494ca9cc73d2f1bd692382b6dffe3db"}, + {file = "numpy-1.21.6-cp37-cp37m-win32.whl", hash = "sha256:7c7e5fa88d9ff656e067876e4736379cc962d185d5cd808014a8a928d529ef4e"}, + {file = "numpy-1.21.6-cp37-cp37m-win_amd64.whl", hash = "sha256:bcb238c9c96c00d3085b264e5c1a1207672577b93fa666c3b14a45240b14123a"}, + {file = "numpy-1.21.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:82691fda7c3f77c90e62da69ae60b5ac08e87e775b09813559f8901a88266552"}, + {file = "numpy-1.21.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:643843bcc1c50526b3a71cd2ee561cf0d8773f062c8cbaf9ffac9fdf573f83ab"}, + {file = "numpy-1.21.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:357768c2e4451ac241465157a3e929b265dfac85d9214074985b1786244f2ef3"}, + {file = "numpy-1.21.6-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9f411b2c3f3d76bba0865b35a425157c5dcf54937f82bbeb3d3c180789dd66a6"}, + {file = "numpy-1.21.6-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4aa48afdce4660b0076a00d80afa54e8a97cd49f457d68a4342d188a09451c1a"}, + {file = "numpy-1.21.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a96eef20f639e6a97d23e57dd0c1b1069a7b4fd7027482a4c5c451cd7732f4"}, + {file = "numpy-1.21.6-cp38-cp38-win32.whl", hash = "sha256:5c3c8def4230e1b959671eb959083661b4a0d2e9af93ee339c7dada6759a9470"}, + {file = "numpy-1.21.6-cp38-cp38-win_amd64.whl", hash = "sha256:bf2ec4b75d0e9356edea834d1de42b31fe11f726a81dfb2c2112bc1eaa508fcf"}, + {file = "numpy-1.21.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4391bd07606be175aafd267ef9bea87cf1b8210c787666ce82073b05f202add1"}, + {file = "numpy-1.21.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:67f21981ba2f9d7ba9ade60c9e8cbaa8cf8e9ae51673934480e45cf55e953673"}, + {file = "numpy-1.21.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee5ec40fdd06d62fe5d4084bef4fd50fd4bb6bfd2bf519365f569dc470163ab0"}, + {file = "numpy-1.21.6-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1dbe1c91269f880e364526649a52eff93ac30035507ae980d2fed33aaee633ac"}, + {file = "numpy-1.21.6-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d9caa9d5e682102453d96a0ee10c7241b72859b01a941a397fd965f23b3e016b"}, + {file = "numpy-1.21.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58459d3bad03343ac4b1b42ed14d571b8743dc80ccbf27444f266729df1d6f5b"}, + {file = "numpy-1.21.6-cp39-cp39-win32.whl", hash = "sha256:7f5ae4f304257569ef3b948810816bc87c9146e8c446053539947eedeaa32786"}, + {file = "numpy-1.21.6-cp39-cp39-win_amd64.whl", hash = "sha256:e31f0bb5928b793169b87e3d1e070f2342b22d5245c755e2b81caa29756246c3"}, + {file = "numpy-1.21.6-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd1c8f6bd65d07d3810b90d02eba7997e32abbdf1277a481d698969e921a3be0"}, + {file = "numpy-1.21.6.zip", hash = "sha256:ecb55251139706669fdec2ff073c98ef8e9a84473e51e716211b41aa0f18e656"}, ] openpyxl = [ {file = "openpyxl-3.0.9-py2.py3-none-any.whl", hash = "sha256:8f3b11bd896a95468a4ab162fc4fcd260d46157155d1f8bfaabb99d88cfcf79f"}, @@ -2273,38 +2363,43 @@ opensearch-py = [ {file = "opensearch_py-1.1.0-py2.py3-none-any.whl", hash = "sha256:cb573546fb373dac8091be9b8eac2ba8da277713eea4b50b4a49ccd30dec25f1"}, ] oracledb = [ - {file = "oracledb-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:090909b6f96ba0d9705a65413b3139903271860abe2cb2d5e4120cb700d8946d"}, - {file = "oracledb-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a225ed644f04cbd4d4edefb717c282d4b70a06f60a6d98eb8d1e747cdce6c62"}, - {file = "oracledb-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5ca297268ebbfb4783f7c37d20329b3472cdcb6b03e18036eccf2cc6cf489b4"}, - {file = "oracledb-1.3.0-cp310-cp310-win32.whl", hash = "sha256:906355f22e9acc331a54ea54b50b524d14db0b8fe33891248a582b801c163998"}, - {file = "oracledb-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:8d0be62327337f78fd28d4767018cb568038540c12cfe8e135a7ed86732cf1bf"}, - {file = "oracledb-1.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:34f0c9f4df230a16e6a79bae601bc21d8ef915a95ebbaacd07dc9e586a419ed0"}, - {file = "oracledb-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd58d90ca0bcbc656049fc5160215e301e0192e12d4cd771dddca2638767bf6b"}, - {file = "oracledb-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd24339fbdab303cbf7b13826686117e7c17a2778599b22b4b2db2d61c9dc8f0"}, - {file = "oracledb-1.3.0-cp311-cp311-win32.whl", hash = "sha256:904a88478b86def89b54980fe80fd88a69b7831fcfaccf98849ec81e88a7ab26"}, - {file = "oracledb-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b22c2d40778c798c84afbef8057ed352b90aeaff522ce675163d6943fa56790"}, - {file = "oracledb-1.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f408b252087c50f2adf6296b42f60ede3a0b4f4ff29963cccc1a2e929e4f0b33"}, - {file = "oracledb-1.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32db286d9ef2aad276bea80c01734b637ce805f7fc53c2a3bace7322324e4e73"}, - {file = "oracledb-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:53e4e826ebaf3dff0294c23d58af91ca85b0d3de246c7b31e413b63a6ebb0a81"}, - {file = "oracledb-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e855536c60f46507872ab38dd661f62318149f8ad5477abddb9a54294bdf6604"}, - {file = "oracledb-1.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfb44e2ca7d17b983a5a9cb43b4f2acc1bc03c9c2010a83e25777bf6b1a6a1c"}, - {file = "oracledb-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:a5fa8ce065a6cc0d5b2384d848e7c4bab9abd6fbbf5a734da4749cc050dcc19c"}, - {file = "oracledb-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:785c191c39ee765a910e0d256f72889f527a45aaf3577917c08f0602155e785b"}, - {file = "oracledb-1.3.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:9b50bdd797a65877d6570c57558138f04b329465cef52798091241989216e8b0"}, - {file = "oracledb-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:786264c0b62bef784cca22b313e875cd08423c5d042bb766092eed6d4355e77b"}, - {file = "oracledb-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1843dfe676fc8637aa9da59e2390730a3e6464f77b86f8b438463c094098b7d3"}, - {file = "oracledb-1.3.0-cp38-cp38-win32.whl", hash = "sha256:b858670555031254be28e4c51382dc0bd22df6f0fa3e8b10c19b6e56f16de986"}, - {file = "oracledb-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:09ad628a599612b621548ea034fcc9872766248f50380a1b1bb10509c0c140e9"}, - {file = "oracledb-1.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f0ce0cde66faaa9d9113aaa48a544cdae56e49a16f7492e49efefb4334103e8c"}, - {file = "oracledb-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3f7f7620308dd1adc7eeaf83372492fb80fc39b7cab335ccd332135c10d63ac"}, - {file = "oracledb-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d13baf1e5cc8aa2a45fbd94de09e05228a2ca63a2c0704665cedaeea1be3bf60"}, - {file = "oracledb-1.3.0-cp39-cp39-win32.whl", hash = "sha256:fa3dbf4b8ca9809c774ea6755b7e618617cb84320e88909ba8f2f503f81f217b"}, - {file = "oracledb-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:3d0645bc03c91c9074c0553dc21fb3966048e7a9967d4b0b53a2861fc4b9d31f"}, - {file = "oracledb-1.3.0.tar.gz", hash = "sha256:f105a4705916a28d33e2918fa3634097fe83552bf5ea81afc3a7a68528c9e2f3"}, + {file = "oracledb-1.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1fba71bbc0ec8fc806236a30d1212d2f516519c0658f0022f3d5fb593cb4e9b2"}, + {file = "oracledb-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f1d7c4d3d68572fa0ef3d3973dd0905c4f30e31d91de6a8da771223937fefa9"}, + {file = "oracledb-1.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5b9542d77b86c80dcc0314458cb15619831c06f232bbdbd77863f8ab5921b3"}, + {file = "oracledb-1.4.2-cp310-cp310-win32.whl", hash = "sha256:db99de736ed7996bd428ad0a4eb154543d6dd4add2a2b67b46a51cbf761e01ec"}, + {file = "oracledb-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:facf47d6787a0d2ab7cf8dfa68572ea4a3f1cb022843a8ff3b9f87d75ba7c815"}, + {file = "oracledb-1.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:56667754b7d4add421edebb624e772f64f3a192e9ff5a7d3ed32d79ed1d37a01"}, + {file = "oracledb-1.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abc152418518fb8e433403afe39b6d2a71faa8653316d6a8e1853bb152584e84"}, + {file = "oracledb-1.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2152dffc586fd7544bd0dd883db4ab93cf17a0bfece8f4d305353f4bdebc627c"}, + {file = "oracledb-1.4.2-cp311-cp311-win32.whl", hash = "sha256:99d08c406752c38c3f3e863db372d1f74adb4d23dd6a34437ddea9fe3f437a37"}, + {file = "oracledb-1.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e5ab88775074b6a758951fea09e53a824343ab53cb84e5a662a52ef5c5799a2b"}, + {file = "oracledb-1.4.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e482cd62cf2c1eb9d655f95d5e87e7903ad83fd759b3c2b2b634d4480ff9d086"}, + {file = "oracledb-1.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69302569a08a9bc136c1032d72222545271100460d1dcde7f9bb8fa928efb11f"}, + {file = "oracledb-1.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21f74ed6de46465020b23f8fe765f246d835e121482009f7389cb693686f3151"}, + {file = "oracledb-1.4.2-cp312-cp312-win32.whl", hash = "sha256:7e13acc1dab125506b87e536d0e3ed2e1482b61cadae7ba140471c4d2b9315e3"}, + {file = "oracledb-1.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:dea6a0c5150ebb52c0ba617b636d2f5af40fef1d0901e3df3f3f0bcc03359ac7"}, + {file = "oracledb-1.4.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecdebcca26e9964903dd36d01bb95bbf64cd4403a741f8ec7ad9122073fb30a8"}, + {file = "oracledb-1.4.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52a8b99e00cda8de6ca8e887e00dfb60753eab2b98cf1812c7fb7033e757b5fc"}, + {file = "oracledb-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d77808966802c36995ac81107ee8e3ec188030fc81f753d813edbb604c8bf584"}, + {file = "oracledb-1.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420fd1571426bd4d645849977c4660dcb953387166684d55e5032abf25aac2ed"}, + {file = "oracledb-1.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6028c8edf53fa13781cdd9324c02e41d6072f5b753e6c6a37c1e1081587e6b2"}, + {file = "oracledb-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:2154d4c71f421d2be8fbcbd51174e6fc7194346e74e903882c6be43e6ac03fed"}, + {file = "oracledb-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c99e5ade66a04e57b8ff98dd9e1a3068426835446c76d7fa6b8d2100f1d32a52"}, + {file = "oracledb-1.4.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:34fabe0b96a4ca3369bfd3edf570455aad16d64e62563bb493cd4870c51724e3"}, + {file = "oracledb-1.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf56e92ad93b3822918dec26f6c0948904a3ac5ab49a8246c1e48c65933bbcaa"}, + {file = "oracledb-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5050aff415b9ef516b271f52e667f52dde9f236bd36ffb6c2e080b9011e6d19d"}, + {file = "oracledb-1.4.2-cp38-cp38-win32.whl", hash = "sha256:1d21b92854b8ea7fd6b216743e7e8585b666031ca2d2b3700c23b62710648c03"}, + {file = "oracledb-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:87243baec69b71b3bdb2b9e3962812d66f75953ae1773251c8db510426470761"}, + {file = "oracledb-1.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a8e8b306d8032436d0619191021379f298215cc90ae1d9cc0e064529d5cfbb61"}, + {file = "oracledb-1.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a31bfbbfec42e9c4f518c9fb4c0a70dda7154ae01539a697688107a75047297f"}, + {file = "oracledb-1.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29b0188a0ecf4951114c5bdd5a252725f9637fe2a7786e454036720d5f6aa9bf"}, + {file = "oracledb-1.4.2-cp39-cp39-win32.whl", hash = "sha256:035432c89f92ad1b36cd9ce8cd70ddcbe7a2b8e281d8951e77136a977c82a135"}, + {file = "oracledb-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:c839cf0f3f90b953243dc65debcfc66dfbd3c885ff9fd2e68d16de986d25e01c"}, + {file = "oracledb-1.4.2.tar.gz", hash = "sha256:e28ed9046f2735dc2dd5bbcdf3667f284e384e0ec7eed3eeb3798fa8a7d47e36"}, ] packaging = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] pandas = [ {file = "pandas-1.3.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:62d5b5ce965bae78f12c1c0df0d387899dd4211ec0bdc52822373f13a3a022b9"}, @@ -2342,8 +2437,8 @@ platformdirs = [ {file = "platformdirs-2.5.1.tar.gz", hash = "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d"}, ] pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] ply = [ {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, @@ -2354,64 +2449,48 @@ progressbar2 = [ {file = "progressbar2-4.2.0.tar.gz", hash = "sha256:1393922fcb64598944ad457569fbeb4b3ac189ef50b5adb9cef3284e87e394ce"}, ] proto-plus = [ - {file = "proto-plus-1.20.3.tar.gz", hash = "sha256:f28b225bc9e6c14e206fb7f8e996a46fb2ccd902648e512d496abb6a716a4ae5"}, - {file = "proto_plus-1.20.3-py3-none-any.whl", hash = "sha256:b06be21c3848fbc20387d1d6891a9b97dfa1cdd0f10d3d42ef70b5700ec0f423"}, + {file = "proto-plus-1.22.3.tar.gz", hash = "sha256:fdcd09713cbd42480740d2fe29c990f7fbd885a67efc328aa8be6ee3e9f76a6b"}, + {file = "proto_plus-1.22.3-py3-none-any.whl", hash = "sha256:a49cd903bc0b6ab41f76bf65510439d56ca76f868adf0274e738bfdd096894df"}, ] protobuf = [ - {file = "protobuf-3.20.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:09e25909c4297d71d97612f04f41cea8fa8510096864f2835ad2f3b3df5a5559"}, - {file = "protobuf-3.20.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e8fbc522303e09036c752a0afcc5c0603e917222d8bedc02813fd73b4b4ed804"}, - {file = "protobuf-3.20.2-cp310-cp310-win32.whl", hash = "sha256:84a1544252a933ef07bb0b5ef13afe7c36232a774affa673fc3636f7cee1db6c"}, - {file = "protobuf-3.20.2-cp310-cp310-win_amd64.whl", hash = "sha256:2c0b040d0b5d5d207936ca2d02f00f765906622c07d3fa19c23a16a8ca71873f"}, - {file = "protobuf-3.20.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3cb608e5a0eb61b8e00fe641d9f0282cd0eedb603be372f91f163cbfbca0ded0"}, - {file = "protobuf-3.20.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:84fe5953b18a383fd4495d375fe16e1e55e0a3afe7b4f7b4d01a3a0649fcda9d"}, - {file = "protobuf-3.20.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:384164994727f274cc34b8abd41a9e7e0562801361ee77437099ff6dfedd024b"}, - {file = "protobuf-3.20.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e39cf61bb8582bda88cdfebc0db163b774e7e03364bbf9ce1ead13863e81e359"}, - {file = "protobuf-3.20.2-cp37-cp37m-win32.whl", hash = "sha256:18e34a10ae10d458b027d7638a599c964b030c1739ebd035a1dfc0e22baa3bfe"}, - {file = "protobuf-3.20.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8228e56a865c27163d5d1d1771d94b98194aa6917bcfb6ce139cbfa8e3c27334"}, - {file = "protobuf-3.20.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d76b7bd42ac4a6e109742a4edf81ffe26ffd87c5993126d894fe48a120396a"}, - {file = "protobuf-3.20.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f52dabc96ca99ebd2169dadbe018824ebda08a795c7684a0b7d203a290f3adb0"}, - {file = "protobuf-3.20.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f34464ab1207114e73bba0794d1257c150a2b89b7a9faf504e00af7c9fd58978"}, - {file = "protobuf-3.20.2-cp38-cp38-win32.whl", hash = "sha256:5d9402bf27d11e37801d1743eada54372f986a372ec9679673bfcc5c60441151"}, - {file = "protobuf-3.20.2-cp38-cp38-win_amd64.whl", hash = "sha256:9c673c8bfdf52f903081816b9e0e612186684f4eb4c17eeb729133022d6032e3"}, - {file = "protobuf-3.20.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:291fb4307094bf5ccc29f424b42268640e00d5240bf0d9b86bf3079f7576474d"}, - {file = "protobuf-3.20.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b4fdb29c5a7406e3f7ef176b2a7079baa68b5b854f364c21abe327bbeec01cdb"}, - {file = "protobuf-3.20.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7a5037af4e76c975b88c3becdf53922b5ffa3f2cddf657574a4920a3b33b80f3"}, - {file = "protobuf-3.20.2-cp39-cp39-win32.whl", hash = "sha256:a9e5ae5a8e8985c67e8944c23035a0dff2c26b0f5070b2f55b217a1c33bbe8b1"}, - {file = "protobuf-3.20.2-cp39-cp39-win_amd64.whl", hash = "sha256:c184485e0dfba4dfd451c3bd348c2e685d6523543a0f91b9fd4ae90eb09e8422"}, - {file = "protobuf-3.20.2-py2.py3-none-any.whl", hash = "sha256:c9cdf251c582c16fd6a9f5e95836c90828d51b0069ad22f463761d27c6c19019"}, - {file = "protobuf-3.20.2.tar.gz", hash = "sha256:712dca319eee507a1e7df3591e639a2b112a2f4a62d40fe7832a16fd19151750"}, + {file = "protobuf-4.21.6-cp310-abi3-win32.whl", hash = "sha256:49f88d56a9180dbb7f6199c920f5bb5c1dd0172f672983bb281298d57c2ac8eb"}, + {file = "protobuf-4.21.6-cp310-abi3-win_amd64.whl", hash = "sha256:7a6cc8842257265bdfd6b74d088b829e44bcac3cca234c5fdd6052730017b9ea"}, + {file = "protobuf-4.21.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:ba596b9ffb85c909fcfe1b1a23136224ed678af3faf9912d3fa483d5f9813c4e"}, + {file = "protobuf-4.21.6-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:4143513c766db85b9d7c18dbf8339673c8a290131b2a0fe73855ab20770f72b0"}, + {file = "protobuf-4.21.6-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:b6cea204865595a92a7b240e4b65bcaaca3ad5d2ce25d9db3756eba06041138e"}, + {file = "protobuf-4.21.6-cp37-cp37m-win32.whl", hash = "sha256:9666da97129138585b26afcb63ad4887f602e169cafe754a8258541c553b8b5d"}, + {file = "protobuf-4.21.6-cp37-cp37m-win_amd64.whl", hash = "sha256:308173d3e5a3528787bb8c93abea81d5a950bdce62840d9760effc84127fb39c"}, + {file = "protobuf-4.21.6-cp38-cp38-win32.whl", hash = "sha256:aa29113ec901281f29d9d27b01193407a98aa9658b8a777b0325e6d97149f5ce"}, + {file = "protobuf-4.21.6-cp38-cp38-win_amd64.whl", hash = "sha256:8f9e60f7d44592c66e7b332b6a7b4b6e8d8b889393c79dbc3a91f815118f8eac"}, + {file = "protobuf-4.21.6-cp39-cp39-win32.whl", hash = "sha256:80e6540381080715fddac12690ee42d087d0d17395f8d0078dfd6f1181e7be4c"}, + {file = "protobuf-4.21.6-cp39-cp39-win_amd64.whl", hash = "sha256:77b355c8604fe285536155286b28b0c4cbc57cf81b08d8357bf34829ea982860"}, + {file = "protobuf-4.21.6-py2.py3-none-any.whl", hash = "sha256:07a0bb9cc6114f16a39c866dc28b6e3d96fa4ffb9cc1033057412547e6e75cb9"}, + {file = "protobuf-4.21.6-py3-none-any.whl", hash = "sha256:c7c864148a237f058c739ae7a05a2b403c0dfa4ce7d1f3e5213f352ad52d57c6"}, + {file = "protobuf-4.21.6.tar.gz", hash = "sha256:6b1040a5661cd5f6e610cbca9cfaa2a17d60e2bb545309bc1b278bb05be44bdd"}, ] pyarrow = [ - {file = "pyarrow-7.0.0-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:0f15213f380539c9640cb2413dc677b55e70f04c9e98cfc2e1d8b36c770e1036"}, - {file = "pyarrow-7.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:29c4e3b3be0b94d07ff4921a5e410fc690a3a066a850a302fc504de5fc638495"}, - {file = "pyarrow-7.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8a9bfc8a016bcb8f9a8536d2fa14a890b340bc7a236275cd60fd4fb8b93ff405"}, - {file = "pyarrow-7.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:49d431ed644a3e8f53ae2bbf4b514743570b495b5829548db51610534b6eeee7"}, - {file = "pyarrow-7.0.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa6442a321c1e49480b3d436f7d631c895048a16df572cf71c23c6b53c45ed66"}, - {file = "pyarrow-7.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b01a23cb401750092c6f7c4dcae67cd8fd6b99ae710e26f654f23508f25f25"}, - {file = "pyarrow-7.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f10928745c6ff66e121552731409803bed86c66ac79c64c90438b053b5242c5"}, - {file = "pyarrow-7.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:759090caa1474cafb5e68c93a9bd6cb45d8bb8e4f2cad2f1a0cc9439bae8ae88"}, - {file = "pyarrow-7.0.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:e3fe34bcfc28d9c4a747adc3926d2307a04c5c50b89155946739515ccfe5eab0"}, - {file = "pyarrow-7.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:040dce5345603e4e621bcf4f3b21f18d557852e7b15307e559bb14c8951c8714"}, - {file = "pyarrow-7.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed4b647c3345ae3463d341a9d28d0260cd302fb92ecf4e2e3e0f1656d6e0e55c"}, - {file = "pyarrow-7.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7fecd5d5604f47e003f50887a42aee06cb8b7bf8e8bf7dc543a22331d9ba832"}, - {file = "pyarrow-7.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f2d00b892fe865e43346acb78761ba268f8bb1cbdba588816590abcb780ee3d"}, - {file = "pyarrow-7.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f439f7d77201681fd31391d189aa6b1322d27c9311a8f2fce7d23972471b02b6"}, - {file = "pyarrow-7.0.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:3e06b0e29ce1e32f219c670c6b31c33d25a5b8e29c7828f873373aab78bf30a5"}, - {file = "pyarrow-7.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:13dc05bcf79dbc1bd2de1b05d26eb64824b85883d019d81ca3c2eca9b68b5a44"}, - {file = "pyarrow-7.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:06183a7ff2b0c030ec0413fc4dc98abad8cf336c78c280a0b7f4bcbebb78d125"}, - {file = "pyarrow-7.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:702c5a9f960b56d03569eaaca2c1a05e8728f05ea1a2138ef64234aa53cd5884"}, - {file = "pyarrow-7.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7313038203df77ec4092d6363dbc0945071caa72635f365f2b1ae0dd7469865"}, - {file = "pyarrow-7.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e87d1f7dc7a0b2ecaeb0c7a883a85710f5b5626d4134454f905571c04bc73d5a"}, - {file = "pyarrow-7.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:ba69488ae25c7fde1a2ae9ea29daf04d676de8960ffd6f82e1e13ca945bb5861"}, - {file = "pyarrow-7.0.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:11a591f11d2697c751261c9d57e6e5b0d38fdc7f0cc57f4fd6edc657da7737df"}, - {file = "pyarrow-7.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:6183c700877852dc0f8a76d4c0c2ffd803ba459e2b4a452e355c2d58d48cf39f"}, - {file = "pyarrow-7.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1748154714b543e6ae8452a68d4af85caf5298296a7e5d4d00f1b3021838ac6"}, - {file = "pyarrow-7.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcc8f934c7847a88f13ec35feecffb61fe63bb7a3078bd98dd353762e969ce60"}, - {file = "pyarrow-7.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:759f59ac77b84878dbd54d06cf6df74ff781b8e7cf9313eeffbb5ec97b94385c"}, - {file = "pyarrow-7.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d3e3f93ac2993df9c5e1922eab7bdea047b9da918a74e52145399bc1f0099a3"}, - {file = "pyarrow-7.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:306120af554e7e137895254a3b4741fad682875a5f6403509cd276de3fe5b844"}, - {file = "pyarrow-7.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:087769dac6e567d58d59b94c4f866b3356c00d3db5b261387ece47e7324c2150"}, - {file = "pyarrow-7.0.0.tar.gz", hash = "sha256:da656cad3c23a2ebb6a307ab01d35fce22f7850059cffafcb90d12590f8f4f38"}, + {file = "pyarrow-10.0.0-cp310-cp310-macosx_10_14_universal2.whl", hash = "sha256:10e031794d019425d34406edffe7e32157359e9455f9edb97a1732f8dabf802f"}, + {file = "pyarrow-10.0.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:e4c6da9f9e1ff96781ee1478f7cc0860e66c23584887b8e297c4b9905c3c9066"}, + {file = "pyarrow-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4051664d354b14939b5da35cfa77821ade594bc1cf56dd2032b3068c96697d74"}, + {file = "pyarrow-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65d4a312f3ced318423704355acaccc7f7bdfe242472e59bdd54aa0f8837adf8"}, + {file = "pyarrow-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:758284e1ebd3f2a9abb30544bfec28d151a398bb7c0f2578cbca5ee5b000364a"}, + {file = "pyarrow-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:f329951d56b3b943c353f7b27c894e02367a7efbb9fef7979c6b24e02dbfcf55"}, + {file = "pyarrow-10.0.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:511735040b83f2993f78d7fb615e7b88253d75f41500e87e587c40156ff88120"}, + {file = "pyarrow-10.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2694f08c8d4482d14e3798ff036dbd81ae6b1c47948f52515e1aa90fbec3f0"}, + {file = "pyarrow-10.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c79300e1a3e23f2bf4defcf0d70ff5ea25ef6ebf6f121d8670ee14bb662bb7ca"}, + {file = "pyarrow-10.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f76157d9579571c865860e5fd004537c03e21139db76692d96fd8a186adab1f2"}, + {file = "pyarrow-10.0.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:69b8a1fd99201178799b02f18498633847109b701856ec762f314352a431b7d0"}, + {file = "pyarrow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:68ccb82c04c0f7abf7a95541d5e9d9d94290fc66a2d36d3f6ea0777f40c15654"}, + {file = "pyarrow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b45f969ed924282e9d4ede38f3430630d809c36dbff65452cabce03141943d28"}, + {file = "pyarrow-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9f63ceb8346aac0bcb487fafe9faca642ad448ca649fcf66a027c6e120cbc12"}, + {file = "pyarrow-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:7ce026274cd5d9934cd3694e89edecde4e036018bbc6cb735fd33b9e967e7d47"}, + {file = "pyarrow-10.0.0-cp39-cp39-macosx_10_14_universal2.whl", hash = "sha256:7e6b837cc44cd62a0e280c8fc4de94ebce503d6d1190e6e94157ab49a8bea67b"}, + {file = "pyarrow-10.0.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:7be7f42f713068293308c989a4a3a2de03b70199bdbe753901c6595ff8640c64"}, + {file = "pyarrow-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b3e3148468d3eed3779d68241f1d13ed4ee7cca4c6dbc7c07e5062b93ad4da33"}, + {file = "pyarrow-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d326a9d47ac237d81b8c4337e9d30a0b361835b536fc7ea53991455ce761fbd"}, + {file = "pyarrow-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25f51dca780fc22cfd7ac30f6bdfe70eb99145aee9acfda987f2c49955d66ed9"}, + {file = "pyarrow-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:d45a59e2f47826544c0ca70bc0f7ed8ffa5ad23f93b0458230c7e983bcad1acf"}, + {file = "pyarrow-10.0.0.tar.gz", hash = "sha256:b153b05765393557716e3729cf988442b3ae4f5567364ded40d58c07feed27c2"}, ] pyasn1 = [ {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, @@ -2448,80 +2527,88 @@ pycparser = [ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] pymongo = [ - {file = "pymongo-4.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:74731c9e423c93cbe791f60c27030b6af6a948cef67deca079da6cd1bb583a8e"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux1_i686.whl", hash = "sha256:66413c50d510e5bcb0afc79880d1693a2185bcea003600ed898ada31338c004e"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:9b87b23570565a6ddaa9244d87811c2ee9cffb02a753c8a2da9c077283d85845"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux2014_i686.whl", hash = "sha256:695939036a320f4329ccf1627edefbbb67cc7892b8222d297b0dd2313742bfee"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux2014_ppc64le.whl", hash = "sha256:ffcc8394123ea8d43fff8e5d000095fe7741ce3f8988366c5c919c4f5eb179d3"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux2014_s390x.whl", hash = "sha256:943f208840777f34312c103a2d1caab02d780c4e9be26b3714acf6c4715ba7e1"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:01f7cbe88d22440b6594c955e37312d932fd632ffed1a86d0c361503ca82cc9d"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdb87309de97c63cb9a69132e1cb16be470e58cffdfbad68fdd1dc292b22a840"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d86c35d94b5499689354ccbc48438a79f449481ee6300f3e905748edceed78e7"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a966d5304b7d90c45c404914e06bbf02c5bf7e99685c6c12f0047ef2aa837142"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be1d2ce7e269215c3ee9a215e296b7a744aff4f39233486d2c4d77f5f0c561a6"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b6163dac53ef1e5d834297810c178050bd0548a4136cd4e0f56402185916ca"}, - {file = "pymongo-4.3.3-cp310-cp310-win32.whl", hash = "sha256:dc0cff74cd36d7e1edba91baa09622c35a8a57025f2f2b7a41e3f83b1db73186"}, - {file = "pymongo-4.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:cafa52873ae12baa512a8721afc20de67a36886baae6a5f394ddef0ce9391f91"}, - {file = "pymongo-4.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:599d3f6fbef31933b96e2d906b0f169b3371ff79ea6aaf6ecd76c947a3508a3d"}, - {file = "pymongo-4.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0640b4e9d008e13956b004d1971a23377b3d45491f87082161c92efb1e6c0d6"}, - {file = "pymongo-4.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:341221e2f2866a5960e6f8610f4cbac0bb13097f3b1a289aa55aba984fc0d969"}, - {file = "pymongo-4.3.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7fac06a539daef4fcf5d8288d0d21b412f9b750454cd5a3cf90484665db442a"}, - {file = "pymongo-4.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a51901066696c4af38c6c63a1f0aeffd5e282367ff475de8c191ec9609b56d"}, - {file = "pymongo-4.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3055510fdfdb1775bc8baa359783022f70bb553f2d46e153c094dfcb08578ff"}, - {file = "pymongo-4.3.3-cp311-cp311-win32.whl", hash = "sha256:524d78673518dcd352a91541ecd2839c65af92dc883321c2109ef6e5cd22ef23"}, - {file = "pymongo-4.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:b8a03af1ce79b902a43f5f694c4ca8d92c2a4195db0966f08f266549e2fc49bc"}, - {file = "pymongo-4.3.3-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:39b03045c71f761aee96a12ebfbc2f4be89e724ff6f5e31c2574c1a0e2add8bd"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6fcfbf435eebf8a1765c6d1f46821740ebe9f54f815a05c8fc30d789ef43cb12"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7d43ac9c7eeda5100fb0a7152fab7099c9cf9e5abd3bb36928eb98c7d7a339c6"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3b93043b14ba7eb08c57afca19751658ece1cfa2f0b7b1fb5c7a41452fbb8482"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:c09956606c08c4a7c6178a04ba2dd9388fcc5db32002ade9c9bc865ab156ab6d"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:b0cfe925610f2fd59555bb7fc37bd739e4b197d33f2a8b2fae7b9c0c6640318c"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:4d00b91c77ceb064c9b0459f0d6ea5bfdbc53ea9e17cf75731e151ef25a830c7"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:c6258a3663780ae47ba73d43eb63c79c40ffddfb764e09b56df33be2f9479837"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29e758f0e734e1e90357ae01ec9c6daf19ff60a051192fe110d8fb25c62600e"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f3621a46cdc7a9ba8080422262398a91762a581d27e0647746588d3f995c88"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47f7aa217b25833cd6f0e72b0d224be55393c2692b4f5e0561cb3beeb10296e9"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c2fdc855149efe7cdcc2a01ca02bfa24761c640203ea94df467f3baf19078be"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5effd87c7d363890259eac16c56a4e8da307286012c076223997f8cc4a8c435b"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6dd1cf2995fdbd64fc0802313e8323f5fa18994d51af059b5b8862b73b5e53f0"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bb869707d8e30645ed6766e44098600ca6cdf7989c22a3ea2b7966bb1d98d4b2"}, - {file = "pymongo-4.3.3-cp37-cp37m-win32.whl", hash = "sha256:49210feb0be8051a64d71691f0acbfbedc33e149f0a5d6e271fddf6a12493fed"}, - {file = "pymongo-4.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:54c377893f2cbbffe39abcff5ff2e917b082c364521fa079305f6f064e1a24a9"}, - {file = "pymongo-4.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c184ec5be465c0319440734491e1aa4709b5f3ba75fdfc9dbbc2ae715a7f6829"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:dca34367a4e77fcab0693e603a959878eaf2351585e7d752cac544bc6b2dee46"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd6a4afb20fb3c26a7bfd4611a0bbb24d93cbd746f5eb881f114b5e38fd55501"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0c466710871d0026c190fc4141e810cf9d9affbf4935e1d273fbdc7d7cda6143"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:d07d06dba5b5f7d80f9cc45501456e440f759fe79f9895922ed486237ac378a8"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:711bc52cb98e7892c03e9b669bebd89c0a890a90dbc6d5bb2c47f30239bac6e9"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:34b040e095e1671df0c095ec0b04fc4ebb19c4c160f87c2b55c079b16b1a6b00"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4ed00f96e147f40b565fe7530d1da0b0f3ab803d5dd5b683834500fa5d195ec4"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef888f48eb9203ee1e04b9fb27429017b290fb916f1e7826c2f7808c88798394"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:316498b642c00401370b2156b5233b256f9b33799e0a8d9d0b8a7da217a20fca"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa7e202feb683dad74f00dea066690448d0cfa310f8a277db06ec8eb466601b5"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52896e22115c97f1c829db32aa2760b0d61839cfe08b168c2b1d82f31dbc5f55"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c051fe37c96b9878f37fa58906cb53ecd13dcb7341d3a85f1e2e2f6b10782d9"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5134d33286c045393c7beb51be29754647cec5ebc051cf82799c5ce9820a2ca2"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a9c2885b4a8e6e39db5662d8b02ca6dcec796a45e48c2de12552841f061692ba"}, - {file = "pymongo-4.3.3-cp38-cp38-win32.whl", hash = "sha256:a6cd6f1db75eb07332bd3710f58f5fce4967eadbf751bad653842750a61bda62"}, - {file = "pymongo-4.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:d5571b6978750601f783cea07fb6b666837010ca57e5cefa389c1d456f6222e2"}, - {file = "pymongo-4.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:81d1a7303bd02ca1c5be4aacd4db73593f573ba8e0c543c04c6da6275fd7a47e"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:016c412118e1c23fef3a1eada4f83ae6e8844fd91986b2e066fc1b0013cdd9ae"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:8fd6e191b92a10310f5a6cfe10d6f839d79d192fb02480bda325286bd1c7b385"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:e2961b05f9c04a53da8bfc72f1910b6aec7205fcf3ac9c036d24619979bbee4b"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:b38a96b3eed8edc515b38257f03216f382c4389d022a8834667e2bc63c0c0c31"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:c1a70c51da9fa95bd75c167edb2eb3f3c4d27bc4ddd29e588f21649d014ec0b7"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8a06a0c02f5606330e8f2e2f3b7949877ca7e4024fa2bff5a4506bec66c49ec7"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:6c2216d8b6a6d019c6f4b1ad55f890e5e77eb089309ffc05b6911c09349e7474"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eac0a143ef4f28f49670bf89cb15847eb80b375d55eba401ca2f777cd425f338"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08fc250b5552ee97ceeae0f52d8b04f360291285fc7437f13daa516ce38fdbc6"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704d939656e21b073bfcddd7228b29e0e8a93dd27b54240eaafc0b9a631629a6"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1074f1a6f23e28b983c96142f2d45be03ec55d93035b471c26889a7ad2365db3"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b16250238de8dafca225647608dddc7bbb5dce3dd53b4d8e63c1cc287394c2f"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7761cacb8745093062695b11574effea69db636c2fd0a9269a1f0183712927b4"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd7bb378d82b88387dc10227cfd964f6273eb083e05299e9b97cbe075da12d11"}, - {file = "pymongo-4.3.3-cp39-cp39-win32.whl", hash = "sha256:dc24d245026a72d9b4953729d31813edd4bd4e5c13622d96e27c284942d33f24"}, - {file = "pymongo-4.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:fc28e8d85d392a06434e9a934908d97e2cf453d69488d2bcd0bfb881497fd975"}, - {file = "pymongo-4.3.3.tar.gz", hash = "sha256:34e95ffb0a68bffbc3b437f2d1f25fc916fef3df5cdeed0992da5f42fae9b807"}, + {file = "pymongo-4.6.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7640d176ee5b0afec76a1bda3684995cb731b2af7fcfd7c7ef8dc271c5d689af"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux1_i686.whl", hash = "sha256:4e2129ec8f72806751b621470ac5d26aaa18fae4194796621508fa0e6068278a"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:c43205e85cbcbdf03cff62ad8f50426dd9d20134a915cfb626d805bab89a1844"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux2014_i686.whl", hash = "sha256:91ddf95cedca12f115fbc5f442b841e81197d85aa3cc30b82aee3635a5208af2"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux2014_ppc64le.whl", hash = "sha256:0fbdbf2fba1b4f5f1522e9f11e21c306e095b59a83340a69e908f8ed9b450070"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux2014_s390x.whl", hash = "sha256:097791d5a8d44e2444e0c8c4d6e14570ac11e22bcb833808885a5db081c3dc2a"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:e0b208ebec3b47ee78a5c836e2e885e8c1e10f8ffd101aaec3d63997a4bdcd04"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1849fd6f1917b4dc5dbf744b2f18e41e0538d08dd8e9ba9efa811c5149d665a3"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa0bbbfbd1f8ebbd5facaa10f9f333b20027b240af012748555148943616fdf3"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4522ad69a4ab0e1b46a8367d62ad3865b8cd54cf77518c157631dac1fdc97584"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397949a9cc85e4a1452f80b7f7f2175d557237177120954eff00bf79553e89d3"}, + {file = "pymongo-4.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d511db310f43222bc58d811037b176b4b88dc2b4617478c5ef01fea404f8601"}, + {file = "pymongo-4.6.2-cp310-cp310-win32.whl", hash = "sha256:991e406db5da4d89fb220a94d8caaf974ffe14ce6b095957bae9273c609784a0"}, + {file = "pymongo-4.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:94637941fe343000f728e28d3fe04f1f52aec6376b67b85583026ff8dab2a0e0"}, + {file = "pymongo-4.6.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:84593447a5c5fe7a59ba86b72c2c89d813fbac71c07757acdf162fbfd5d005b9"}, + {file = "pymongo-4.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9aebddb2ec2128d5fc2fe3aee6319afef8697e0374f8a1fcca3449d6f625e7b4"}, + {file = "pymongo-4.6.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f706c1a644ed33eaea91df0a8fb687ce572b53eeb4ff9b89270cb0247e5d0e1"}, + {file = "pymongo-4.6.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18c422e6b08fa370ed9d8670c67e78d01f50d6517cec4522aa8627014dfa38b6"}, + {file = "pymongo-4.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d002ae456a15b1d790a78bb84f87af21af1cb716a63efb2c446ab6bcbbc48ca"}, + {file = "pymongo-4.6.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f86ba0c781b497a3c9c886765d7b6402a0e3ae079dd517365044c89cd7abb06"}, + {file = "pymongo-4.6.2-cp311-cp311-win32.whl", hash = "sha256:ac20dd0c7b42555837c86f5ea46505f35af20a08b9cf5770cd1834288d8bd1b4"}, + {file = "pymongo-4.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:e78af59fd0eb262c2a5f7c7d7e3b95e8596a75480d31087ca5f02f2d4c6acd19"}, + {file = "pymongo-4.6.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6125f73503407792c8b3f80165f8ab88a4e448d7d9234c762681a4d0b446fcb4"}, + {file = "pymongo-4.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba052446a14bd714ec83ca4e77d0d97904f33cd046d7bb60712a6be25eb31dbb"}, + {file = "pymongo-4.6.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b65433c90e07dc252b4a55dfd885ca0df94b1cf77c5b8709953ec1983aadc03"}, + {file = "pymongo-4.6.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2160d9c8cd20ce1f76a893f0daf7c0d38af093f36f1b5c9f3dcf3e08f7142814"}, + {file = "pymongo-4.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f251f287e6d42daa3654b686ce1fcb6d74bf13b3907c3ae25954978c70f2cd4"}, + {file = "pymongo-4.6.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7d227a60b00925dd3aeae4675575af89c661a8e89a1f7d1677e57eba4a3693c"}, + {file = "pymongo-4.6.2-cp312-cp312-win32.whl", hash = "sha256:311794ef3ccae374aaef95792c36b0e5c06e8d5cf04a1bdb1b2bf14619ac881f"}, + {file = "pymongo-4.6.2-cp312-cp312-win_amd64.whl", hash = "sha256:f673b64a0884edcc56073bda0b363428dc1bf4eb1b5e7d0b689f7ec6173edad6"}, + {file = "pymongo-4.6.2-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:fe010154dfa9e428bd2fb3e9325eff2216ab20a69ccbd6b5cac6785ca2989161"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:1f5f4cd2969197e25b67e24d5b8aa2452d381861d2791d06c493eaa0b9c9fcfe"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:c9519c9d341983f3a1bd19628fecb1d72a48d8666cf344549879f2e63f54463b"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:c68bf4a399e37798f1b5aa4f6c02886188ef465f4ac0b305a607b7579413e366"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:a509db602462eb736666989739215b4b7d8f4bb8ac31d0bffd4be9eae96c63ef"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:362a5adf6f3f938a8ff220a4c4aaa93e84ef932a409abecd837c617d17a5990f"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:ee30a9d4c27a88042d0636aca0275788af09cc237ae365cd6ebb34524bddb9cc"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:477914e13501bb1d4608339ee5bb618be056d2d0e7267727623516cfa902e652"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd343ca44982d480f1e39372c48e8e263fc6f32e9af2be456298f146a3db715"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3797e0a628534e07a36544d2bfa69e251a578c6d013e975e9e3ed2ac41f2d95"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97d81d357e1a2a248b3494d52ebc8bf15d223ee89d59ee63becc434e07438a24"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed694c0d1977cb54281cb808bc2b247c17fb64b678a6352d3b77eb678ebe1bd9"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ceaaff4b812ae368cf9774989dea81b9bbb71e5bed666feca6a9f3087c03e49"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7dd63f7c2b3727541f7f37d0fb78d9942eb12a866180fbeb898714420aad74e2"}, + {file = "pymongo-4.6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e571434633f99a81e081738721bb38e697345281ed2f79c2f290f809ba3fbb2f"}, + {file = "pymongo-4.6.2-cp37-cp37m-win32.whl", hash = "sha256:3e9f6e2f3da0a6af854a3e959a6962b5f8b43bbb8113cd0bff0421c5059b3106"}, + {file = "pymongo-4.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3a5280f496297537301e78bde250c96fadf4945e7b2c397d8bb8921861dd236d"}, + {file = "pymongo-4.6.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:5f6bcd2d012d82d25191a911a239fd05a8a72e8c5a7d81d056c0f3520cad14d1"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:4fa30494601a6271a8b416554bd7cde7b2a848230f0ec03e3f08d84565b4bf8c"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:bea62f03a50f363265a7a651b4e2a4429b4f138c1864b2d83d4bf6f9851994be"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:b2d445f1cf147331947cc35ec10342f898329f29dd1947a3f8aeaf7e0e6878d1"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:5db133d6ec7a4f7fc7e2bd098e4df23d7ad949f7be47b27b515c9fb9301c61e4"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:9eec7140cf7513aa770ea51505d312000c7416626a828de24318fdcc9ac3214c"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:5379ca6fd325387a34cda440aec2bd031b5ef0b0aa2e23b4981945cff1dab84c"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:579508536113dbd4c56e4738955a18847e8a6c41bf3c0b4ab18b51d81a6b7be8"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3bae553ca39ed52db099d76acd5e8566096064dc7614c34c9359bb239ec4081"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0257e0eebb50f242ca28a92ef195889a6ad03dcdde5bf1c7ab9f38b7e810801"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbafe3a1df21eeadb003c38fc02c1abf567648b6477ec50c4a3c042dca205371"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaecfafb407feb6f562c7f2f5b91f22bfacba6dd739116b1912788cff7124c4a"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e942945e9112075a84d2e2d6e0d0c98833cdcdfe48eb8952b917f996025c7ffa"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2f7b98f8d2cf3eeebde738d080ae9b4276d7250912d9751046a9ac1efc9b1ce2"}, + {file = "pymongo-4.6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8110b78fc4b37dced85081d56795ecbee6a7937966e918e05e33a3900e8ea07d"}, + {file = "pymongo-4.6.2-cp38-cp38-win32.whl", hash = "sha256:df813f0c2c02281720ccce225edf39dc37855bf72cdfde6f789a1d1cf32ffb4b"}, + {file = "pymongo-4.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:64ec3e2dcab9af61bdbfcb1dd863c70d1b0c220b8e8ac11df8b57f80ee0402b3"}, + {file = "pymongo-4.6.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bff601fbfcecd2166d9a2b70777c2985cb9689e2befb3278d91f7f93a0456cae"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f1febca6f79e91feafc572906871805bd9c271b6a2d98a8bb5499b6ace0befed"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d788cb5cc947d78934be26eef1623c78cec3729dc93a30c23f049b361aa6d835"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5c2f258489de12a65b81e1b803a531ee8cf633fa416ae84de65cd5f82d2ceb37"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:fb24abcd50501b25d33a074c1790a1389b6460d2509e4b240d03fd2e5c79f463"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:4d982c6db1da7cf3018183891883660ad085de97f21490d314385373f775915b"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:b2dd8c874927a27995f64a3b44c890e8a944c98dec1ba79eab50e07f1e3f801b"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:4993593de44c741d1e9f230f221fe623179f500765f9855936e4ff6f33571bad"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:658f6c028edaeb02761ebcaca8d44d519c22594b2a51dcbc9bd2432aa93319e3"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68109c13176749fbbbbbdb94dd4a58dcc604db6ea43ee300b2602154aebdd55f"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:707d28a822b918acf941cff590affaddb42a5d640614d71367c8956623a80cbc"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f251db26c239aec2a4d57fbe869e0a27b7f6b5384ec6bf54aeb4a6a5e7408234"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57c05f2e310701fc17ae358caafd99b1830014e316f0242d13ab6c01db0ab1c2"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b575fbe6396bbf21e4d0e5fd2e3cdb656dc90c930b6c5532192e9a89814f72d"}, + {file = "pymongo-4.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ca5877754f3fa6e4fe5aacf5c404575f04c2d9efc8d22ed39576ed9098d555c8"}, + {file = "pymongo-4.6.2-cp39-cp39-win32.whl", hash = "sha256:8caa73fb19070008e851a589b744aaa38edd1366e2487284c61158c77fdf72af"}, + {file = "pymongo-4.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:3e03c732cb64b96849310e1d8688fb70d75e2571385485bf2f1e7ad1d309fa53"}, + {file = "pymongo-4.6.2.tar.gz", hash = "sha256:ab7d01ac832a1663dad592ccbd92bb0f0775bc8f98a1923c5e1a7d7fead495af"}, ] pymysql = [ {file = "PyMySQL-1.0.2-py3-none-any.whl", hash = "sha256:41fc3a0c5013d5f039639442321185532e3e2c8924687abe6537de157d403641"}, @@ -2532,28 +2619,28 @@ pynt = [ {file = "pynt-0.8.2.tar.gz", hash = "sha256:f38b9b775804eff6e291bd6894669954d94c680b196adee56c96d082a135483c"}, ] pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, ] pytest = [ - {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, - {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, ] pytest-cov = [ {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, ] pytest-mock = [ - {file = "pytest-mock-3.10.0.tar.gz", hash = "sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f"}, - {file = "pytest_mock-3.10.0-py3-none-any.whl", hash = "sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b"}, + {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, + {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, ] pytest-only = [ {file = "pytest-only-2.0.0.tar.gz", hash = "sha256:0467eefac714a920b2df2e3c1d2fbf61cf2cd65583ccd2e3233f107862a5fc77"}, {file = "pytest_only-2.0.0-py3-none-any.whl", hash = "sha256:1f344d15d6495ca108b341ca12ca90eb1695bebb3bd3978c8efd4a0e121bdb8f"}, ] python-dateutil = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] python-utils = [ {file = "python-utils-3.1.0.tar.gz", hash = "sha256:4dace6420c5f50d6509251fa0aee0e2a0b826bbc8a5d2a6d7e99dca80e78a7f3"}, @@ -2564,46 +2651,57 @@ pytz = [ {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, ] pyyaml = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] rdflib = [ {file = "rdflib-6.1.1-py3-none-any.whl", hash = "sha256:fc81cef513cd552d471f2926141396b633207109d0154c8e77926222c70367fe"}, @@ -2693,8 +2791,8 @@ requests = [ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, ] requests-aws4auth = [ - {file = "requests-aws4auth-1.1.2.tar.gz", hash = "sha256:ebde0662dccda5023546055ec4cbe4470cae017ecbfce8d368b80b5e4a94d619"}, - {file = "requests_aws4auth-1.1.2-py2.py3-none-any.whl", hash = "sha256:23b7a054326f80f86caf87e3eaf54ea41aa27adbed4297bd3456b1fa38f06a52"}, + {file = "requests-aws4auth-1.2.3.tar.gz", hash = "sha256:d4c73c19f37f80d4aa9c5bd4fa376cfd0c69299c48b00a8eb2ae6b0416164fb8"}, + {file = "requests_aws4auth-1.2.3-py2.py3-none-any.whl", hash = "sha256:8070a5207e95fa5fe88e87d9a75f34e768cbab35bb3557ef20cbbf9426dee4d5"}, ] requests-mock = [ {file = "requests-mock-1.10.0.tar.gz", hash = "sha256:59c9c32419a9fb1ae83ec242d98e889c45bd7d7a65d48375cc243ec08441658b"}, @@ -2786,8 +2884,8 @@ tomli = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] types-pyyaml = [ - {file = "types-PyYAML-6.0.12.8.tar.gz", hash = "sha256:19304869a89d49af00be681e7b267414df213f4eb89634c4495fa62e8f942b9f"}, - {file = "types_PyYAML-6.0.12.8-py3-none-any.whl", hash = "sha256:5314a4b2580999b2ea06b2e5f9a7763d860d6e09cdf21c0e9561daa9cbd60178"}, + {file = "types-PyYAML-6.0.11.tar.gz", hash = "sha256:7f7da2fd11e9bc1e5e9eb3ea1be84f4849747017a59fc2eee0ea34ed1147c2e0"}, + {file = "types_PyYAML-6.0.11-py3-none-any.whl", hash = "sha256:8f890028123607379c63550179ddaec4517dc751f4c527a52bb61934bf495989"}, ] typing-extensions = [ {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, diff --git a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/pyproject.toml b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/pyproject.toml index b50ca4c..87cb97f 100644 --- a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/pyproject.toml +++ b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/pyproject.toml @@ -18,27 +18,28 @@ beautifulsoup4 = "4.10.0" boto3 = "1.26.107" botocore = "1.29.107" cachetools = "5.0.0" -certifi = "2021.10.8" +certifi = "2024.2.2" charset-normalizer = "2.0.12" decorator = "5.1.1" distlib = "0.3.4" edx-codejail = "3.2.0" et-xmlfile = "1.1.0" filelock = "3.6.0" -google-api-core = "2.7.1" -google-api-python-client = "2.43.0" -google-auth = "2.6.2" -google-auth-httplib2 = "0.1.0" -google-cloud-bigquery = "2.34.3" -google-cloud-bigquery-storage = "2.13.1" -google-cloud-core = "2.2.3" -google-cloud-storage = "2.2.1" -google-crc32c = "1.3.0" -google-resumable-media = "2.3.2" -googleapis-common-protos = "1.56.0" +google-api-core = "2.17.1" +google-api-python-client = "2.122.0" +google-analytics-data = "0.18.7" +google-auth = "2.28.2" +google-auth-httplib2 = "0.2.0" +google-cloud-bigquery = "3.19.0" +google-cloud-bigquery-storage = "2.24.0" +google-cloud-core = "2.4.1" +google-cloud-storage = "2.16.0" +google-crc32c = "1.5.0" +google-resumable-media = "2.7.0" +googleapis-common-protos = "1.63.0" gremlinpython = "3.5.2" -grpcio = "1.44.0" -grpcio-status = "1.44.0" +grpcio = "1.56.2" +grpcio-status = "1.56.2" httplib2 = "0.20.4" idna = "3.3" importlib-metadata = "2.1.3" @@ -47,7 +48,7 @@ jmespath = "1.0.0" jsonpath-ng = "1.5.3" lxml = "4.9.1" nest-asyncio = "1.5.5" -numpy = "1.21.5" +numpy = "1.21.6" openpyxl = "3.0.9" opensearch-py = "1.1.0" pandas = "1.3.5" @@ -55,9 +56,9 @@ pg8000 = "1.24.1" platformdirs = "2.5.1" ply = "3.11" progressbar2 = "4.2.0" -proto-plus = "1.20.3" -protobuf = "3.20.2" -pyarrow = "7.0.0" +proto-plus = "1.22.3" +protobuf = "4.21.6" +pyarrow = "10.0.0" pyasn1 = "0.4.8" pyasn1-modules = "0.2.8" PyMySQL = "1.0.2" @@ -67,7 +68,7 @@ python-utils = "3.1.0" rdflib = "6.1.1" regex = "2022.3.15" requests = "2.27.1" -requests-aws4auth = "1.1.2" +requests-aws4auth = "1.2.3" rsa = "4.8" s3transfer = "0.6.0" scramp = "1.4.1" @@ -79,7 +80,7 @@ uritemplate = "4.1.1" urllib3 = "1.26.9" virtualenv = "20.14.0" yarl = "1.7.2" -db-dtypes = "1.0.1" +db-dtypes = "1.2.0" #################################################### # Optional - packages that should only be loaded in docker build diff --git a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/requirements.txt b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/requirements.txt deleted file mode 100644 index 3569568..0000000 --- a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/requirements.txt +++ /dev/null @@ -1,75 +0,0 @@ -aenum==2.2.6 -aiohttp==3.8.1 -asn1crypto==1.5.1 -awslambdaric==2.0.1 -awswrangler==2.15.0 -backoff==1.11.1 -beautifulsoup4==4.10.0 -boto3==1.21.35 -botocore==1.24.35 -cachetools==5.0.0 -certifi==2021.10.8 -charset-normalizer==2.0.12 -decorator==5.1.1 -distlib==0.3.4 -edx-codejail==3.2.0 -et-xmlfile==1.1.0 -filelock==3.6.0 -google-api-core==2.7.1 -google-api-python-client==2.43.0 -google-auth==2.6.2 -google-auth-httplib2==0.1.0 -google-cloud-bigquery==2.34.3 -google-cloud-bigquery-storage==2.13.1 -google-cloud-core==2.2.3 -google-cloud-storage==2.2.1 -google-crc32c==1.3.0 -google-resumable-media==2.3.2 -googleapis-common-protos==1.56.0 -gremlinpython==3.5.2 -grpcio==1.44.0 -grpcio-status==1.44.0 -httplib2==0.20.4 -idna==3.3 -importlib-metadata==2.1.3 -isodate==0.6.1 -jmespath==1.0.0 -jsonpath-ng==1.5.3 -lxml==4.9.1 -nest-asyncio==1.5.5 -numpy==1.21.5 -openpyxl==3.0.9 -opensearch-py==1.1.0 -pandas==1.3.5 -pg8000==1.24.1 -platformdirs==2.5.1 -ply==3.11 -progressbar2==3.55.0 -proto-plus==1.20.3 -protobuf==3.20.2 -pyarrow==7.0.0 -pyasn1==0.4.8 -pyasn1-modules==0.2.8 -PyMySQL==1.0.2 -pynt==0.8.2 -pyparsing==^3.0.9 -python-utils==3.1.0 -pytz==2022.1 -rdflib==6.1.1 -redshift-connector==2.0.905 -regex==2022.3.15 -requests==2.27.1 -requests-aws4auth==1.1.2 -rsa==4.8 -s3transfer==0.5.2 -scramp==1.4.1 -simplejson==^3.17.2 -six==1.16.0 -soupsieve==2.3.2 -SPARQLWrapper==1.8.5 -typing-extensions==4.1.1 -uritemplate==4.1.1 -urllib3==1.26.9 -virtualenv==20.14.0 -yarl==1.7.2 -db-dtypes==1.0.1 \ No newline at end of file diff --git a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/transform-sandbox-requirements.txt b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/transform-sandbox-requirements.txt index 4a55501..23c6fcd 100644 --- a/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/transform-sandbox-requirements.txt +++ b/source/packages/@ada/infra/src/services/data-product/components/schema-preview/docker-image/transform-sandbox-requirements.txt @@ -6,9 +6,9 @@ attrs==21.4.0 avro-python3==1.10.2 boto3==1.24.83 botocore==1.27.83 -certifi==2021.5.30 +certifi==2023.7.22 chardet==3.0.4 -charset-normalizer==2.1.0 +charset-normalizer==2.0.0 click==8.1.3 cycler==0.10.0 cython==0.29.4 @@ -19,21 +19,21 @@ fsspec==2021.8.1 idna==2.10 importlib-metadata==4.12.0 jmespath==0.10.0 -joblib==1.0.1 +joblib==1.2.0 kiwisolver==1.3.2 matplotlib==3.4.3 -mpmath==1.2.1 +mpmath==1.3.0 multidict==6.0.2 -nltk==3.6.3 +nltk==3.6.6 numpy==1.19.5 packaging==21.3 pandas==1.3.2 patsy==0.5.1 -pillow==9.1.1 -pip==22.1.2 +pillow==9.5.0 +pip==23.3 pmdarima==1.8.2 ptvsd==4.3.2 -pyarrow==5.0.0 +pyarrow==10.0.0 pydevd==2.5.0 pyhocon==0.3.58 pymysql==1.0.2 @@ -42,21 +42,21 @@ python-dateutil==2.8.2 pytz==2021.1 pyyaml==5.4.1 regex==2022.6.2 -requests==2.23.0 +requests==2.27.1 s3transfer==0.6.0 -scikit-learn==0.24.2 -scipy==1.7.1 -setuptools==49.1.3 +scikit-learn==1.0.1 +scipy==1.7.3 +setuptools==65.5.1 six==1.14.0 statsmodels==0.12.2 subprocess32==3.5.4 -sympy==1.8 +sympy==1.10.1 tbats==1.1.0 threadpoolctl==3.1.0 tqdm==4.64.0 typing-extensions==4.2.0 -urllib3==1.25.11 -wheel==0.37.0 +urllib3==1.26.9 +wheel==0.38.1 wrapt==1.14.1 yarl==1.7.2 zipp==3.8.0 \ No newline at end of file diff --git a/source/packages/@ada/infra/src/services/data-product/dynamic-infrastructure/jest.config.ts b/source/packages/@ada/infra/src/services/data-product/dynamic-infrastructure/jest.config.ts index cc21ba1..c501fdb 100644 --- a/source/packages/@ada/infra/src/services/data-product/dynamic-infrastructure/jest.config.ts +++ b/source/packages/@ada/infra/src/services/data-product/dynamic-infrastructure/jest.config.ts @@ -2,12 +2,11 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import createBaseConfig from '../../../../jest.config.base'; +import createConfig from '../../../../jest.config.base'; /* eslint-enable: sort-imports */ import * as path from 'path'; import { TEST_ENVIRONMENT } from '@ada/cdk-core'; import { generateEnvironmentForTests } from '../jest-dynamodb-config'; -import type { Config } from '@jest/types'; const cdkEnvironment = generateEnvironmentForTests(); const { tables, port } = cdkEnvironment; @@ -23,18 +22,13 @@ process.env = { CDK_DEPLOY_REGION: TEST_ENVIRONMENT.region, }; -const baseConfig = createBaseConfig(); - -export const config: Config.InitialOptions = { - ...baseConfig, +export const config = createConfig({ ...require('@shelf/jest-dynamodb/jest-preset'), globals: { - ...(baseConfig.globals || {}), __JEST_DYNAMODB_TABLES: tables, }, - setupFilesAfterEnv: [...(baseConfig.setupFilesAfterEnv || []), path.resolve(__dirname, '../jest.setup.ts')], + setupFilesAfterEnv: [path.resolve(__dirname, '../jest.setup.ts')], rootDir: __dirname, - displayName: path.basename(__dirname), -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/services/data-product/dynamic-infrastructure/lambdas/handlers/external-import/__tests__/prepare-external-imports.test.ts b/source/packages/@ada/infra/src/services/data-product/dynamic-infrastructure/lambdas/handlers/external-import/__tests__/prepare-external-imports.test.ts index 41d6953..aadd93f 100644 --- a/source/packages/@ada/infra/src/services/data-product/dynamic-infrastructure/lambdas/handlers/external-import/__tests__/prepare-external-imports.test.ts +++ b/source/packages/@ada/infra/src/services/data-product/dynamic-infrastructure/lambdas/handlers/external-import/__tests__/prepare-external-imports.test.ts @@ -45,7 +45,7 @@ describe('prepare-external-imports', () => { ...DEFAULT_S3_SOURCE_DATA_PRODUCT, sourceType: Connectors.Id.GOOGLE_ANALYTICS, sourceDetails: { - viewId: '12345678', + propertyId: '12345678', since: '', until: '', dimensions: 'ga:country,ga:users', diff --git a/source/packages/@ada/infra/src/services/data-product/jest.config.ts b/source/packages/@ada/infra/src/services/data-product/jest.config.ts index 92e687f..6bc327a 100644 --- a/source/packages/@ada/infra/src/services/data-product/jest.config.ts +++ b/source/packages/@ada/infra/src/services/data-product/jest.config.ts @@ -2,12 +2,11 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import createBaseConfig from '../../../jest.config.base'; +import createConfig from '../../../jest.config.base'; /* eslint-enable: sort-imports */ import * as path from 'path'; import { generateEnvironmentForTests } from './jest-dynamodb-config'; import { writeCdkEnvironmentToFile } from '../../common/services/testing/environment'; -import type { Config } from '@jest/types'; const cdkEnvironment = generateEnvironmentForTests(); const JEST_DYNAMODB_CONFIG = path.resolve(__dirname, '.jest.test-cdk-environment.json'); @@ -21,21 +20,16 @@ process.env = { XRAY_DISABLED: true, }; -const baseConfig = createBaseConfig(); - -export const config: Config.InitialOptions = { - ...baseConfig, +export const config = createConfig({ ...require('@shelf/jest-dynamodb/jest-preset'), globals: { - ...(baseConfig.globals || {}), __JEST_DYNAMODB_TABLES: tables, }, - setupFilesAfterEnv: [...(baseConfig.setupFilesAfterEnv || []), path.resolve(__dirname, 'jest.setup.ts')], + setupFilesAfterEnv: [path.resolve(__dirname, 'jest.setup.ts')], rootDir: __dirname, - displayName: path.basename(__dirname), testTimeout: 10000, testPathIgnorePatterns: ['/node_modules/', '/dynamic-infrastructure/'], coveragePathIgnorePatterns: ['/node_modules/', '/docker-images/google-*'], -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/services/data-product/script-validation/handler/test_index.py b/source/packages/@ada/infra/src/services/data-product/script-validation/handler/test_index.py index c84cb77..3a84300 100644 --- a/source/packages/@ada/infra/src/services/data-product/script-validation/handler/test_index.py +++ b/source/packages/@ada/infra/src/services/data-product/script-validation/handler/test_index.py @@ -45,7 +45,7 @@ def test_should_report_bad_script(): 'lineNumber': 3, 'lineRange': [3], 'issueText': 'Function call with shell=True parameter identified, possible security issue.', - 'moreInfo': 'https://bandit.readthedocs.io/en/1.7.4/plugins/b604_any_other_function_with_shell_equals_true.html', + 'moreInfo': 'https://bandit.readthedocs.io/en/1.7.7/plugins/b604_any_other_function_with_shell_equals_true.html', 'testId': 'B604', 'testName': 'any_other_function_with_shell_equals_true', } diff --git a/source/packages/@ada/infra/src/services/data-product/script-validation/package.json b/source/packages/@ada/infra/src/services/data-product/script-validation/package.json index 0cb6201..205cb1d 100644 --- a/source/packages/@ada/infra/src/services/data-product/script-validation/package.json +++ b/source/packages/@ada/infra/src/services/data-product/script-validation/package.json @@ -3,9 +3,10 @@ "version": "0.0.0", "private": true, "license": "Apache-2.0", + "description": "Ada validate-script", "scripts": { "preinstall": "pip3 install poetry==1.*", "install": "poetry install", - "test": "LOG_LEVEL=DEBUG poetry run pytest --cov=../../../../../../.. --cov-report=xml --cov-report=term --log-level=DEBUG" + "test": "LOG_LEVEL=DEBUG poetry run pytest --cov=../../../../../../../.. --cov-report=xml --cov-report=term --log-level=DEBUG" } } diff --git a/source/packages/@ada/infra/src/services/data-product/script-validation/poetry.lock b/source/packages/@ada/infra/src/services/data-product/script-validation/poetry.lock index 7d25a91..2d67b78 100644 --- a/source/packages/@ada/infra/src/services/data-product/script-validation/poetry.lock +++ b/source/packages/@ada/infra/src/services/data-product/script-validation/poetry.lock @@ -1,213 +1,357 @@ -[[package]] -name = "atomicwrites" -version = "1.4.0" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "attrs" -version = "21.4.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. [[package]] name = "bandit" -version = "1.7.4" +version = "1.7.7" description = "Security oriented static analyser for python code." -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "bandit-1.7.7-py3-none-any.whl", hash = "sha256:17e60786a7ea3c9ec84569fd5aee09936d116cb0cb43151023258340dbffb7ed"}, + {file = "bandit-1.7.7.tar.gz", hash = "sha256:527906bec6088cb499aae31bc962864b4e77569e9d529ee51df3a93b4b8ab28a"}, +] [package.dependencies] colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -GitPython = ">=1.0.1" PyYAML = ">=5.3.1" +rich = "*" stevedore = ">=1.20.0" [package.extras] -test = ["coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml", "beautifulsoup4 (>=4.8.0)", "pylint (==1.9.4)"] -toml = ["toml"] -yaml = ["pyyaml"] +baseline = ["GitPython (>=3.1.30)"] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)"] +toml = ["tomli (>=1.1.0)"] +yaml = ["PyYAML"] [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "coverage" -version = "6.4" +version = "7.4.2" description = "Code coverage measurement for Python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "coverage-7.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf54c3e089179d9d23900e3efc86d46e4431188d9a657f345410eecdd0151f50"}, + {file = "coverage-7.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fe6e43c8b510719b48af7db9631b5fbac910ade4bd90e6378c85ac5ac706382c"}, + {file = "coverage-7.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b98c89db1b150d851a7840142d60d01d07677a18f0f46836e691c38134ed18b"}, + {file = "coverage-7.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f9683be6a5b19cd776ee4e2f2ffb411424819c69afab6b2db3a0a364ec6642"}, + {file = "coverage-7.4.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78cdcbf7b9cb83fe047ee09298e25b1cd1636824067166dc97ad0543b079d22f"}, + {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2599972b21911111114100d362aea9e70a88b258400672626efa2b9e2179609c"}, + {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ef00d31b7569ed3cb2036f26565f1984b9fc08541731ce01012b02a4c238bf03"}, + {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:20a875bfd8c282985c4720c32aa05056f77a68e6d8bbc5fe8632c5860ee0b49b"}, + {file = "coverage-7.4.2-cp310-cp310-win32.whl", hash = "sha256:b3f2b1eb229f23c82898eedfc3296137cf1f16bb145ceab3edfd17cbde273fb7"}, + {file = "coverage-7.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7df95fdd1432a5d2675ce630fef5f239939e2b3610fe2f2b5bf21fa505256fa3"}, + {file = "coverage-7.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8ddbd158e069dded57738ea69b9744525181e99974c899b39f75b2b29a624e2"}, + {file = "coverage-7.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81a5fb41b0d24447a47543b749adc34d45a2cf77b48ca74e5bf3de60a7bd9edc"}, + {file = "coverage-7.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2412e98e70f16243be41d20836abd5f3f32edef07cbf8f407f1b6e1ceae783ac"}, + {file = "coverage-7.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb79414c15c6f03f56cc68fa06994f047cf20207c31b5dad3f6bab54a0f66ef"}, + {file = "coverage-7.4.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf89ab85027427d351f1de918aff4b43f4eb5f33aff6835ed30322a86ac29c9e"}, + {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a178b7b1ac0f1530bb28d2e51f88c0bab3e5949835851a60dda80bff6052510c"}, + {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:06fe398145a2e91edaf1ab4eee66149c6776c6b25b136f4a86fcbbb09512fd10"}, + {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:18cac867950943fe93d6cd56a67eb7dcd2d4a781a40f4c1e25d6f1ed98721a55"}, + {file = "coverage-7.4.2-cp311-cp311-win32.whl", hash = "sha256:f72cdd2586f9a769570d4b5714a3837b3a59a53b096bb954f1811f6a0afad305"}, + {file = "coverage-7.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:d779a48fac416387dd5673fc5b2d6bd903ed903faaa3247dc1865c65eaa5a93e"}, + {file = "coverage-7.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:adbdfcda2469d188d79771d5696dc54fab98a16d2ef7e0875013b5f56a251047"}, + {file = "coverage-7.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ac4bab32f396b03ebecfcf2971668da9275b3bb5f81b3b6ba96622f4ef3f6e17"}, + {file = "coverage-7.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:006d220ba2e1a45f1de083d5022d4955abb0aedd78904cd5a779b955b019ec73"}, + {file = "coverage-7.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3733545eb294e5ad274abe131d1e7e7de4ba17a144505c12feca48803fea5f64"}, + {file = "coverage-7.4.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42a9e754aa250fe61f0f99986399cec086d7e7a01dd82fd863a20af34cbce962"}, + {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2ed37e16cf35c8d6e0b430254574b8edd242a367a1b1531bd1adc99c6a5e00fe"}, + {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b953275d4edfab6cc0ed7139fa773dfb89e81fee1569a932f6020ce7c6da0e8f"}, + {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32b4ab7e6c924f945cbae5392832e93e4ceb81483fd6dc4aa8fb1a97b9d3e0e1"}, + {file = "coverage-7.4.2-cp312-cp312-win32.whl", hash = "sha256:f5df76c58977bc35a49515b2fbba84a1d952ff0ec784a4070334dfbec28a2def"}, + {file = "coverage-7.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:34423abbaad70fea9d0164add189eabaea679068ebdf693baa5c02d03e7db244"}, + {file = "coverage-7.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b11f9c6587668e495cc7365f85c93bed34c3a81f9f08b0920b87a89acc13469"}, + {file = "coverage-7.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:51593a1f05c39332f623d64d910445fdec3d2ac2d96b37ce7f331882d5678ddf"}, + {file = "coverage-7.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69f1665165ba2fe7614e2f0c1aed71e14d83510bf67e2ee13df467d1c08bf1e8"}, + {file = "coverage-7.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3c8bbb95a699c80a167478478efe5e09ad31680931ec280bf2087905e3b95ec"}, + {file = "coverage-7.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:175f56572f25e1e1201d2b3e07b71ca4d201bf0b9cb8fad3f1dfae6a4188de86"}, + {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8562ca91e8c40864942615b1d0b12289d3e745e6b2da901d133f52f2d510a1e3"}, + {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d9a1ef0f173e1a19738f154fb3644f90d0ada56fe6c9b422f992b04266c55d5a"}, + {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f40ac873045db4fd98a6f40387d242bde2708a3f8167bd967ccd43ad46394ba2"}, + {file = "coverage-7.4.2-cp38-cp38-win32.whl", hash = "sha256:d1b750a8409bec61caa7824bfd64a8074b6d2d420433f64c161a8335796c7c6b"}, + {file = "coverage-7.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b4ae777bebaed89e3a7e80c4a03fac434a98a8abb5251b2a957d38fe3fd30088"}, + {file = "coverage-7.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ff7f92ae5a456101ca8f48387fd3c56eb96353588e686286f50633a611afc95"}, + {file = "coverage-7.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:861d75402269ffda0b33af94694b8e0703563116b04c681b1832903fac8fd647"}, + {file = "coverage-7.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3507427d83fa961cbd73f11140f4a5ce84208d31756f7238d6257b2d3d868405"}, + {file = "coverage-7.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf711d517e21fb5bc429f5c4308fbc430a8585ff2a43e88540264ae87871e36a"}, + {file = "coverage-7.4.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c00e54f0bd258ab25e7f731ca1d5144b0bf7bec0051abccd2bdcff65fa3262c9"}, + {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f8e845d894e39fb53834da826078f6dc1a933b32b1478cf437007367efaf6f6a"}, + {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:840456cb1067dc350af9080298c7c2cfdddcedc1cb1e0b30dceecdaf7be1a2d3"}, + {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c11ca2df2206a4e3e4c4567f52594637392ed05d7c7fb73b4ea1c658ba560265"}, + {file = "coverage-7.4.2-cp39-cp39-win32.whl", hash = "sha256:3ff5bdb08d8938d336ce4088ca1a1e4b6c8cd3bef8bb3a4c0eb2f37406e49643"}, + {file = "coverage-7.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:ac9e95cefcf044c98d4e2c829cd0669918585755dd9a92e28a1a7012322d0a95"}, + {file = "coverage-7.4.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:f593a4a90118d99014517c2679e04a4ef5aee2d81aa05c26c734d271065efcb6"}, + {file = "coverage-7.4.2.tar.gz", hash = "sha256:1a5ee18e3a8d766075ce9314ed1cb695414bae67df6a4b0805f5137d93d6f1cb"}, +] [package.dependencies] -tomli = {version = "*", optional = true, markers = "python_version < \"3.11\" and extra == \"toml\""} +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] toml = ["tomli"] [[package]] -name = "gitdb" -version = "4.0.9" -description = "Git Object Database" -category = "main" +name = "exceptiongroup" +version = "1.2.0" +description = "Backport of PEP 654 (exception groups)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, +] -[package.dependencies] -smmap = ">=3.0.1,<6" +[package.extras] +test = ["pytest (>=6)"] [[package]] -name = "gitpython" -version = "3.1.27" -description = "GitPython is a python library used to interact with Git repositories" -category = "main" +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] [package.dependencies] -gitdb = ">=4.0.1,<5" +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] -name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" optional = false -python-versions = "*" +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] [[package]] name = "packaging" -version = "21.3" +version = "23.2" description = "Core utilities for Python packages" -category = "dev" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] [[package]] name = "pbr" -version = "5.8.1" +version = "6.0.0" description = "Python Build Reasonableness" -category = "main" optional = false python-versions = ">=2.6" +files = [ + {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, + {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, +] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, +] [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] [[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" +name = "pygments" +version = "2.17.2" +description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pyparsing" -version = "3.0.8" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" -optional = false -python-versions = ">=3.6.8" +python-versions = ">=3.7" +files = [ + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, +] [package.extras] -diagrams = ["railroad-diagrams", "jinja2"] +plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pytest" -version = "7.1.2" +version = "7.4.4" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, +] [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -tomli = ">=1.0.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" version = "3.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, + {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, +] [package.dependencies] coverage = {version = ">=5.2.1", extras = ["toml"]} pytest = ">=4.6" [package.extras] -testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] [[package]] -name = "shortuuid" -version = "1.0.9" -description = "A generator library for concise, unambiguous and URL-safe UUIDs." -category = "main" +name = "rich" +version = "13.7.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false -python-versions = ">=3.5" +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, + {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] -name = "smmap" -version = "5.0.0" -description = "A pure Python implementation of a sliding window memory map manager" -category = "main" +name = "shortuuid" +version = "1.0.11" +description = "A generator library for concise, unambiguous and URL-safe UUIDs." optional = false -python-versions = ">=3.6" +python-versions = ">=3.5" +files = [ + {file = "shortuuid-1.0.11-py3-none-any.whl", hash = "sha256:27ea8f28b1bd0bf8f15057a3ece57275d2059d2b0bb02854f02189962c13b6aa"}, + {file = "shortuuid-1.0.11.tar.gz", hash = "sha256:fc75f2615914815a8e4cb1501b3a513745cb66ef0fd5fc6fb9f8c3fa3481f789"}, +] [[package]] name = "stevedore" -version = "3.5.0" +version = "5.1.0" description = "Manage dynamic plugins for Python applications" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +files = [ + {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, + {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, +] [package.dependencies] pbr = ">=2.0.0,<2.1.0 || >2.1.0" @@ -216,163 +360,14 @@ pbr = ">=2.0.0,<2.1.0 || >2.1.0" name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] [metadata] -lock-version = "1.1" +lock-version = "2.0" python-versions = "^3.9" content-hash = "bf05c56fcd2fbfff456241409fd62c3e260bb6cf028117e7c2d6af15bb2c608d" - -[metadata.files] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -bandit = [ - {file = "bandit-1.7.4-py3-none-any.whl", hash = "sha256:412d3f259dab4077d0e7f0c11f50f650cc7d10db905d98f6520a95a18049658a"}, - {file = "bandit-1.7.4.tar.gz", hash = "sha256:2d63a8c573417bae338962d4b9b06fbc6080f74ecd955a092849e1e65c717bd2"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -coverage = [ - {file = "coverage-6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50ed480b798febce113709846b11f5d5ed1e529c88d8ae92f707806c50297abf"}, - {file = "coverage-6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26f8f92699756cb7af2b30720de0c5bb8d028e923a95b6d0c891088025a1ac8f"}, - {file = "coverage-6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60c2147921da7f4d2d04f570e1838db32b95c5509d248f3fe6417e91437eaf41"}, - {file = "coverage-6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:750e13834b597eeb8ae6e72aa58d1d831b96beec5ad1d04479ae3772373a8088"}, - {file = "coverage-6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af5b9ee0fc146e907aa0f5fb858c3b3da9199d78b7bb2c9973d95550bd40f701"}, - {file = "coverage-6.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a022394996419142b33a0cf7274cb444c01d2bb123727c4bb0b9acabcb515dea"}, - {file = "coverage-6.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5a78cf2c43b13aa6b56003707c5203f28585944c277c1f3f109c7b041b16bd39"}, - {file = "coverage-6.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9229d074e097f21dfe0643d9d0140ee7433814b3f0fc3706b4abffd1e3038632"}, - {file = "coverage-6.4-cp310-cp310-win32.whl", hash = "sha256:fb45fe08e1abc64eb836d187b20a59172053999823f7f6ef4f18a819c44ba16f"}, - {file = "coverage-6.4-cp310-cp310-win_amd64.whl", hash = "sha256:3cfd07c5889ddb96a401449109a8b97a165be9d67077df6802f59708bfb07720"}, - {file = "coverage-6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:03014a74023abaf5a591eeeaf1ac66a73d54eba178ff4cb1fa0c0a44aae70383"}, - {file = "coverage-6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c82f2cd69c71698152e943f4a5a6b83a3ab1db73b88f6e769fabc86074c3b08"}, - {file = "coverage-6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b546cf2b1974ddc2cb222a109b37c6ed1778b9be7e6b0c0bc0cf0438d9e45a6"}, - {file = "coverage-6.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc173f1ce9ffb16b299f51c9ce53f66a62f4d975abe5640e976904066f3c835d"}, - {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c53ad261dfc8695062fc8811ac7c162bd6096a05a19f26097f411bdf5747aee7"}, - {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:eef5292b60b6de753d6e7f2d128d5841c7915fb1e3321c3a1fe6acfe76c38052"}, - {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:543e172ce4c0de533fa892034cce260467b213c0ea8e39da2f65f9a477425211"}, - {file = "coverage-6.4-cp37-cp37m-win32.whl", hash = "sha256:00c8544510f3c98476bbd58201ac2b150ffbcce46a8c3e4fb89ebf01998f806a"}, - {file = "coverage-6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:b84ab65444dcc68d761e95d4d70f3cfd347ceca5a029f2ffec37d4f124f61311"}, - {file = "coverage-6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d548edacbf16a8276af13063a2b0669d58bbcfca7c55a255f84aac2870786a61"}, - {file = "coverage-6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:033ebec282793bd9eb988d0271c211e58442c31077976c19c442e24d827d356f"}, - {file = "coverage-6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:742fb8b43835078dd7496c3c25a1ec8d15351df49fb0037bffb4754291ef30ce"}, - {file = "coverage-6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55fae115ef9f67934e9f1103c9ba826b4c690e4c5bcf94482b8b2398311bf9c"}, - {file = "coverage-6.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd698341626f3c77784858427bad0cdd54a713115b423d22ac83a28303d1d95"}, - {file = "coverage-6.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d382f7d77eeeaff14b30516b17bcbe80f645f5cf02bb755baac376591c653c"}, - {file = "coverage-6.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:016d7f5cf1c8c84f533a3c1f8f36126fbe00b2ec0ccca47cc5731c3723d327c6"}, - {file = "coverage-6.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:69432946f154c6add0e9ede03cc43b96e2ef2733110a77444823c053b1ff5166"}, - {file = "coverage-6.4-cp38-cp38-win32.whl", hash = "sha256:83bd142cdec5e4a5c4ca1d4ff6fa807d28460f9db919f9f6a31babaaa8b88426"}, - {file = "coverage-6.4-cp38-cp38-win_amd64.whl", hash = "sha256:4002f9e8c1f286e986fe96ec58742b93484195defc01d5cc7809b8f7acb5ece3"}, - {file = "coverage-6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e4f52c272fdc82e7c65ff3f17a7179bc5f710ebc8ce8a5cadac81215e8326740"}, - {file = "coverage-6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b5578efe4038be02d76c344007b13119b2b20acd009a88dde8adec2de4f630b5"}, - {file = "coverage-6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8099ea680201c2221f8468c372198ceba9338a5fec0e940111962b03b3f716a"}, - {file = "coverage-6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a00441f5ea4504f5abbc047589d09e0dc33eb447dc45a1a527c8b74bfdd32c65"}, - {file = "coverage-6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e76bd16f0e31bc2b07e0fb1379551fcd40daf8cdf7e24f31a29e442878a827c"}, - {file = "coverage-6.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8d2e80dd3438e93b19e1223a9850fa65425e77f2607a364b6fd134fcd52dc9df"}, - {file = "coverage-6.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:341e9c2008c481c5c72d0e0dbf64980a4b2238631a7f9780b0fe2e95755fb018"}, - {file = "coverage-6.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:21e6686a95025927775ac501e74f5940cdf6fe052292f3a3f7349b0abae6d00f"}, - {file = "coverage-6.4-cp39-cp39-win32.whl", hash = "sha256:968ed5407f9460bd5a591cefd1388cc00a8f5099de9e76234655ae48cfdbe2c3"}, - {file = "coverage-6.4-cp39-cp39-win_amd64.whl", hash = "sha256:e35217031e4b534b09f9b9a5841b9344a30a6357627761d4218818b865d45055"}, - {file = "coverage-6.4-pp36.pp37.pp38-none-any.whl", hash = "sha256:e637ae0b7b481905358624ef2e81d7fb0b1af55f5ff99f9ba05442a444b11e45"}, - {file = "coverage-6.4.tar.gz", hash = "sha256:727dafd7f67a6e1cad808dc884bd9c5a2f6ef1f8f6d2f22b37b96cb0080d4f49"}, -] -gitdb = [ - {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, - {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, -] -gitpython = [ - {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, - {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -pbr = [ - {file = "pbr-5.8.1-py2.py3-none-any.whl", hash = "sha256:27108648368782d07bbf1cb468ad2e2eeef29086affd14087a6d04b7de8af4ec"}, - {file = "pbr-5.8.1.tar.gz", hash = "sha256:66bc5a34912f408bb3925bf21231cb6f59206267b7f63f3503ef865c1a292e25"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pyparsing = [ - {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, - {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, -] -pytest = [ - {file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"}, - {file = "pytest-7.1.2.tar.gz", hash = "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"}, -] -pytest-cov = [ - {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, - {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, -] -pyyaml = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -shortuuid = [ - {file = "shortuuid-1.0.9-py3-none-any.whl", hash = "sha256:b2bb9eb7773170e253bb7ba25971023acb473517a8b76803d9618668cb1dd46f"}, - {file = "shortuuid-1.0.9.tar.gz", hash = "sha256:459f12fa1acc34ff213b1371467c0325169645a31ed989e268872339af7563d5"}, -] -smmap = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, -] -stevedore = [ - {file = "stevedore-3.5.0-py3-none-any.whl", hash = "sha256:a547de73308fd7e90075bb4d301405bebf705292fa90a90fc3bcf9133f58616c"}, - {file = "stevedore-3.5.0.tar.gz", hash = "sha256:f40253887d8712eaa2bb0ea3830374416736dc8ec0e22f5a65092c1174c44335"}, -] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] diff --git a/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/api-stack.test.ts.snap b/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/api-stack.test.ts.snap index 7c3bb4b..8e1a333 100644 --- a/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/api-stack.test.ts.snap +++ b/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/api-stack.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-ApiStack) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-ApiStack) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaDataProductServiceApiStackApiLambdaEventBridgeUpdateDataProductE054F2A1Arn": Object { "Value": Object { @@ -260,7 +260,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -634,7 +634,7 @@ Object { "Ref": "referencetoAdaOpMetricsCustomResource0DFDFE51anonymousDataUUID", }, "AWS_SOLUTION_ID": "SO0190", - "AWS_SOLUTION_VERSION": "v1.3.0", + "AWS_SOLUTION_VERSION": "v1.4.0", "COUNTER_TABLE_NAME": Object { "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Ref", }, @@ -705,7 +705,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1191,7 +1191,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1574,7 +1574,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2006,7 +2006,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2389,7 +2389,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2780,7 +2780,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3156,7 +3156,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3566,7 +3566,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3933,7 +3933,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -4283,7 +4283,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -4659,7 +4659,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5035,7 +5035,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5348,7 +5348,7 @@ Object { "Ref": "referencetoAdaOpMetricsCustomResource0DFDFE51anonymousDataUUID", }, "AWS_SOLUTION_ID": "SO0190", - "AWS_SOLUTION_VERSION": "v1.3.0", + "AWS_SOLUTION_VERSION": "v1.4.0", "BUILD_DATA_PRODUCT_LAMBDA_ARN": Object { "Fn::GetAtt": Array [ "ApiLambdaBuildDataProductEDA86792", @@ -5425,7 +5425,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5857,7 +5857,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6224,7 +6224,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6607,7 +6607,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6990,7 +6990,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -7357,7 +7357,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -7774,7 +7774,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", diff --git a/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/built-in-transformation-statck.test.ts.snap b/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/built-in-transformation-statck.test.ts.snap index c721e96..2110644 100644 --- a/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/built-in-transformation-statck.test.ts.snap +++ b/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/built-in-transformation-statck.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-BuiltInTransformationStack) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-BuiltInTransformationStack) - Automated Data Analytics on AWS. Version v1.4.0", "Parameters": Object { "referencetoAdaDataProductServiceApiStackNestedStackApiStackNestedStackResourceC3A35847OutputsAdaDataProductServiceApiStackApiLambdaPutScript8681009BArn": Object { "Type": "String", diff --git a/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/index.test.ts.snap b/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/index.test.ts.snap index 30a64c6..8139bb5 100644 --- a/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/index.test.ts.snap +++ b/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/index.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-DataProductService) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-DataProductService) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaDataProductServiceApiStackNestedStackApiStackNestedStackResourceC3A35847OutputsAdaDataProductServiceApiStackApiLambdaEventBridgeUpdateDataProductE054F2A1Arn": Object { "Value": Object { @@ -438,7 +438,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -498,7 +498,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -1014,7 +1014,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -1229,7 +1229,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { diff --git a/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/schema-preview-stack.test.ts.snap b/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/schema-preview-stack.test.ts.snap index 21c1687..e5c0827 100644 --- a/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/schema-preview-stack.test.ts.snap +++ b/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/schema-preview-stack.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-SchemaPreview) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-SchemaPreview) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "ApiDataProductPreviewUrl95C4A115": Object { "Value": Object { @@ -172,7 +172,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -550,7 +550,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2270,7 +2270,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3079,7 +3079,7 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"PullDataSample\\",\\"States\\":{\\"PullDataSample\\":{\\"Next\\":\\"DiscoverTransforms\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"Failed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"PullDataSample\\",\\"States\\":{\\"PullDataSample\\":{\\"Next\\":\\"DiscoverTransforms\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"Failed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -3090,7 +3090,7 @@ Object { "Arn", ], }, - "\\",\\"Payload.$\\":\\"$\\"}},\\"DiscoverTransforms\\":{\\"Next\\":\\"ExecuteTransforms\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"Failed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "\\",\\"Payload.$\\":\\"$\\"}},\\"DiscoverTransforms\\":{\\"Next\\":\\"ExecuteTransforms\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"Failed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -3098,7 +3098,7 @@ Object { Object { "Ref": "SchemaPreviewDiscoverTransformsLambdaAliasprod2EE3C32D", }, - "\\",\\"Payload.$\\":\\"$\\"}},\\"ExecuteTransforms\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"Failed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "\\",\\"Payload.$\\":\\"$\\"}},\\"ExecuteTransforms\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"Failed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -3172,30 +3172,6 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -3255,6 +3231,30 @@ Object { }, ], }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -3352,6 +3352,7 @@ Object { }, Object { "Action": Array [ + "s3:PutBucketPolicy", "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", diff --git a/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/static-infrastructure-stack.test.ts.snap b/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/static-infrastructure-stack.test.ts.snap index cfec088..a28e4eb 100644 --- a/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/static-infrastructure-stack.test.ts.snap +++ b/source/packages/@ada/infra/src/services/data-product/stack/__snapshots__/static-infrastructure-stack.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-StaticInfrastructure) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-StaticInfrastructure) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaDataProductServiceStaticInfrastructureDataBucketD9C0AD53Arn": Object { "Value": Object { @@ -363,144 +363,234 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "ecs:RunTask", "Effect": "Allow", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 2, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 3, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 4, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", - }, - ], - }, - ], - }, - ], - }, - ], - }, - "/", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", - }, - ], - }, - ], - }, - ], - }, - ], - }, + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], ], - ], - }, + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudTrailECSTaskDefinitionCloudtrail8490FC3E", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ":*", + ], + ], + }, + ], }, Object { "Action": Array [ @@ -548,6 +638,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -683,144 +797,234 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "ecs:RunTask", "Effect": "Allow", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 2, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 3, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 4, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", - }, - ], - }, - ], - }, - ], - }, - ], - }, - "/", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", - }, - ], - }, - ], - }, - ], - }, - ], - }, + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersCloudWatchECSTaskDefinitionCloudwatch18382EB4", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ":*", + ], ], - ], - }, + }, + ], }, Object { "Action": Array [ @@ -868,6 +1072,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -928,7 +1156,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1049,7 +1277,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1170,7 +1398,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1275,7 +1503,7 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"SubmitCrawl\\",\\"States\\":{\\"SubmitCrawl\\":{\\"Next\\":\\"Wait5Seconds\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.Payload.error\\",\\"Next\\":\\"CrawlFailed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"SubmitCrawl\\",\\"States\\":{\\"SubmitCrawl\\":{\\"Next\\":\\"Wait5Seconds\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.Payload.error\\",\\"Next\\":\\"CrawlFailed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -1286,7 +1514,7 @@ Object { "Arn", ], }, - "\\",\\"Payload\\":{\\"Payload\\":{\\"crawlerName.$\\":\\"$.crawlerName\\"}}}},\\"Wait5Seconds\\":{\\"Type\\":\\"Wait\\",\\"Seconds\\":5,\\"Next\\":\\"GetCrawlStatus\\"},\\"GetCrawlStatus\\":{\\"Next\\":\\"CrawlComplete?\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "\\",\\"Payload\\":{\\"Payload\\":{\\"crawlerName.$\\":\\"$.crawlerName\\"}}}},\\"Wait5Seconds\\":{\\"Type\\":\\"Wait\\",\\"Seconds\\":5,\\"Next\\":\\"GetCrawlStatus\\"},\\"GetCrawlStatus\\":{\\"Next\\":\\"CrawlComplete?\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -1297,7 +1525,7 @@ Object { "Arn", ], }, - "\\",\\"Payload.$\\":\\"$\\"}},\\"CrawlComplete?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"CrawlFailed\\"},{\\"Variable\\":\\"$.Payload.status\\",\\"StringEquals\\":\\"SUCCEEDED\\",\\"Next\\":\\"GetFinalCrawlStatus\\"}],\\"Default\\":\\"Wait5Seconds\\"},\\"CrawlFailed\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"Payload\\":{\\"crawlerName.$\\":\\"$.Payload.crawlerName\\",\\"error.$\\":\\"$.Payload.error\\",\\"status\\":\\"FAILED\\"}},\\"End\\":true},\\"GetFinalCrawlStatus\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "\\",\\"Payload.$\\":\\"$\\"}},\\"CrawlComplete?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.status\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"CrawlFailed\\"},{\\"Variable\\":\\"$.Payload.status\\",\\"StringEquals\\":\\"SUCCEEDED\\",\\"Next\\":\\"GetFinalCrawlStatus\\"}],\\"Default\\":\\"Wait5Seconds\\"},\\"CrawlFailed\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"Payload\\":{\\"crawlerName.$\\":\\"$.Payload.crawlerName\\",\\"error.$\\":\\"$.Payload.error\\",\\"status\\":\\"FAILED\\"}},\\"End\\":true},\\"GetFinalCrawlStatus\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -1371,30 +1599,6 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -1473,6 +1677,30 @@ Object { }, ], }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -2788,6 +3016,10 @@ Object { "Key": "Application", "Value": "Ada", }, + Object { + "Key": "Name", + "Value": "Ada/DataProductService/StaticInfrastructure/DataIngressVpc/VPCFlowLogs", + }, ], "TrafficType": "ALL", }, @@ -2824,7 +3056,7 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"StartDataProductInfraDeployment\\",\\"States\\":{\\"StartDataProductInfraDeployment\\":{\\"Next\\":\\"CheckDataProductInfraDeploymentStatus\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"DataProductInfraDeploymentFailed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "{\\"StartAt\\":\\"StartDataProductInfraDeployment\\",\\"States\\":{\\"StartDataProductInfraDeployment\\":{\\"Next\\":\\"CheckDataProductInfraDeploymentStatus\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"DataProductInfraDeploymentFailed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -2835,7 +3067,7 @@ Object { "Arn", ], }, - "\\",\\"Payload.$\\":\\"$\\"}},\\"CheckDataProductInfraDeploymentStatus\\":{\\"Next\\":\\"IsDataProductInfraDeploymentComplete?\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"DataProductInfraDeploymentFailed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "\\",\\"Payload.$\\":\\"$\\"}},\\"CheckDataProductInfraDeploymentStatus\\":{\\"Next\\":\\"IsDataProductInfraDeploymentComplete?\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"DataProductInfraDeploymentFailed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -2846,7 +3078,7 @@ Object { "Arn", ], }, - "\\",\\"Payload.$\\":\\"$\\"}},\\"Wait5Seconds\\":{\\"Type\\":\\"Wait\\",\\"Seconds\\":5,\\"Next\\":\\"CheckDataProductInfraDeploymentStatus\\"},\\"IsDataProductInfraDeploymentComplete?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.isDeploymentComplete\\",\\"BooleanEquals\\":true,\\"Next\\":\\"DataProductInfraDeploymentComplete\\"}],\\"Default\\":\\"Wait5Seconds\\"},\\"DataProductInfraDeploymentComplete\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"DataProductInfraDeploymentFailed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "\\",\\"Payload.$\\":\\"$\\"}},\\"Wait5Seconds\\":{\\"Type\\":\\"Wait\\",\\"Seconds\\":5,\\"Next\\":\\"CheckDataProductInfraDeploymentStatus\\"},\\"IsDataProductInfraDeploymentComplete?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.Payload.isDeploymentComplete\\",\\"BooleanEquals\\":true,\\"Next\\":\\"DataProductInfraDeploymentComplete\\"}],\\"Default\\":\\"Wait5Seconds\\"},\\"DataProductInfraDeploymentComplete\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"ResultPath\\":\\"$.ErrorDetails\\",\\"Next\\":\\"DataProductInfraDeploymentFailed\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -2857,7 +3089,7 @@ Object { "Arn", ], }, - "\\",\\"Payload.$\\":\\"$\\"}},\\"DataProductInfraDeploymentFailed\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", + "\\",\\"Payload.$\\":\\"$\\"}},\\"DataProductInfraDeploymentFailed\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"arn:", Object { "Ref": "AWS::Partition", }, @@ -2975,7 +3207,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3355,7 +3587,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3735,7 +3967,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -4594,30 +4826,6 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -4722,6 +4930,30 @@ Object { }, ], }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -5010,7 +5242,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5284,7 +5516,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5542,7 +5774,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5800,7 +6032,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6125,7 +6357,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6383,7 +6615,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6660,7 +6892,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6987,7 +7219,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -7394,144 +7626,234 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "ecs:RunTask", "Effect": "Allow", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 2, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 3, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 4, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", - }, - ], - }, - ], - }, - ], - }, - ], - }, - "/", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", - }, - ], - }, - ], - }, - ], - }, - ], - }, + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], ], - ], - }, + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersDynamoDBECSTaskDefinitionDynamoDBD701A1A9", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ":*", + ], + ], + }, + ], }, Object { "Action": Array [ @@ -7579,6 +7901,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -10375,7 +10721,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -10705,7 +11051,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -11017,7 +11363,7 @@ Object { "Role": Object { "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackExecuteAthenaQueryLambdaRole106600ADArn", }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -11042,14 +11388,14 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"GetCachedQuery\\",\\"States\\":{\\"GetCachedQuery\\":{\\"Next\\":\\"IsItemInCache?\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", + "{\\"StartAt\\":\\"GetCachedQuery\\",\\"States\\":{\\"GetCachedQuery\\":{\\"Next\\":\\"IsItemInCache?\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", Object { "Fn::GetAtt": Array [ "ExecuteGovernedQueryStateMachineAthenaQueryExecutorGetCachedQuery41A955B3", "Arn", ], }, - "\\",\\"Parameters\\":{\\"Payload.$\\":\\"$\\"}},\\"IsItemInCache?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.expired\\",\\"BooleanEquals\\":false,\\"Next\\":\\"NotifySuccess\\"}],\\"Default\\":\\"RunQueryOnAthena\\"},\\"RunQueryOnAthena\\":{\\"Next\\":\\"Wait1Second\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"Next\\":\\"NotifyError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", + "\\",\\"Parameters\\":{\\"Payload.$\\":\\"$\\"}},\\"IsItemInCache?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.expired\\",\\"BooleanEquals\\":false,\\"Next\\":\\"NotifySuccess\\"}],\\"Default\\":\\"RunQueryOnAthena\\"},\\"RunQueryOnAthena\\":{\\"Next\\":\\"Wait1Second\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"Next\\":\\"NotifyError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", Object { "Fn::GetAtt": Array [ "ExecuteGovernedQueryStateMachineAthenaQueryExecutorStartAthenaQueryExecutionEA0E790E", @@ -11060,7 +11406,7 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:::athena:getQueryExecution\\",\\"Parameters\\":{\\"QueryExecutionId.$\\":\\"$.queryExecutionId\\"}},\\"IsInFinalState?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"SUCCEEDED\\",\\"Next\\":\\"WriteInCache\\"},{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"NotifyError\\"},{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"CANCELLED\\",\\"Next\\":\\"NotifyError\\"}],\\"Default\\":\\"Wait1Second\\"},\\"WriteInCache\\":{\\"Next\\":\\"NotifySuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", + ":states:::athena:getQueryExecution\\",\\"Parameters\\":{\\"QueryExecutionId.$\\":\\"$.queryExecutionId\\"}},\\"IsInFinalState?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"SUCCEEDED\\",\\"Next\\":\\"WriteInCache\\"},{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"NotifyError\\"},{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"CANCELLED\\",\\"Next\\":\\"NotifyError\\"}],\\"Default\\":\\"Wait1Second\\"},\\"WriteInCache\\":{\\"Next\\":\\"NotifySuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", Object { "Fn::GetAtt": Array [ "ExecuteGovernedQueryStateMachineAthenaQueryExecutorPutCachedQuery58B2E330", @@ -11109,30 +11455,6 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -11216,6 +11538,30 @@ Object { }, ], }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -11547,7 +11893,7 @@ Object { "GroupId", ], }, - "\\"]}},\\"Overrides\\":{\\"ContainerOverrides\\":[{\\"Name\\":\\"ECSContainerDef-google-analytics\\",\\"Environment\\":[{\\"Name\\":\\"CLIENT_EMAIL\\",\\"Value.$\\":\\"$.clientEmail\\"},{\\"Name\\":\\"CLIENT_ID\\",\\"Value.$\\":\\"$.clientId\\"},{\\"Name\\":\\"PRIVATE_KEY_ID\\",\\"Value.$\\":\\"$.privateKeyId\\"},{\\"Name\\":\\"PRIVATE_KEY_SECRET\\",\\"Value.$\\":\\"$.privateKeySecretName\\"},{\\"Name\\":\\"PROJECT_ID\\",\\"Value.$\\":\\"$.projectId\\"},{\\"Name\\":\\"S3_OUTPUT_BUCKET_URI\\",\\"Value.$\\":\\"$.s3OutputPath\\"},{\\"Name\\":\\"VIEW_ID\\",\\"Value.$\\":\\"$.viewId\\"},{\\"Name\\":\\"SINCE\\",\\"Value.$\\":\\"$.since\\"},{\\"Name\\":\\"UNTIL\\",\\"Value.$\\":\\"$.until\\"},{\\"Name\\":\\"DIMENSIONS\\",\\"Value.$\\":\\"$.dimensions\\"},{\\"Name\\":\\"METRICS\\",\\"Value.$\\":\\"$.metrics\\"},{\\"Name\\":\\"TRIGGER_TYPE\\",\\"Value.$\\":\\"$.triggerType\\"},{\\"Name\\":\\"SCHEDULE_RATE\\",\\"Value.$\\":\\"$.scheduleRate\\"}]}]},\\"LaunchType\\":\\"FARGATE\\",\\"PlatformVersion\\":\\"LATEST\\"}},\\"ECSTaskSucceeded\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"status\\":\\"SUCCEEDED\\"},\\"End\\":true},\\"ECSTaskFailed\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"details.$\\":\\"$\\",\\"error\\":\\"Import failed in the ECS container, verify the logs\\",\\"status\\":\\"FAILED\\"},\\"End\\":true}},\\"TimeoutSeconds\\":172800}", + "\\"]}},\\"Overrides\\":{\\"ContainerOverrides\\":[{\\"Name\\":\\"ECSContainerDef-google-analytics\\",\\"Environment\\":[{\\"Name\\":\\"CLIENT_EMAIL\\",\\"Value.$\\":\\"$.clientEmail\\"},{\\"Name\\":\\"CLIENT_ID\\",\\"Value.$\\":\\"$.clientId\\"},{\\"Name\\":\\"PRIVATE_KEY_ID\\",\\"Value.$\\":\\"$.privateKeyId\\"},{\\"Name\\":\\"PRIVATE_KEY_SECRET\\",\\"Value.$\\":\\"$.privateKeySecretName\\"},{\\"Name\\":\\"PROJECT_ID\\",\\"Value.$\\":\\"$.projectId\\"},{\\"Name\\":\\"S3_OUTPUT_BUCKET_URI\\",\\"Value.$\\":\\"$.s3OutputPath\\"},{\\"Name\\":\\"PROPERTY_ID\\",\\"Value.$\\":\\"$.propertyId\\"},{\\"Name\\":\\"SINCE\\",\\"Value.$\\":\\"$.since\\"},{\\"Name\\":\\"UNTIL\\",\\"Value.$\\":\\"$.until\\"},{\\"Name\\":\\"DIMENSIONS\\",\\"Value.$\\":\\"$.dimensions\\"},{\\"Name\\":\\"METRICS\\",\\"Value.$\\":\\"$.metrics\\"},{\\"Name\\":\\"TRIGGER_TYPE\\",\\"Value.$\\":\\"$.triggerType\\"},{\\"Name\\":\\"SCHEDULE_RATE\\",\\"Value.$\\":\\"$.scheduleRate\\"}]}]},\\"LaunchType\\":\\"FARGATE\\",\\"PlatformVersion\\":\\"LATEST\\"}},\\"ECSTaskSucceeded\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"status\\":\\"SUCCEEDED\\"},\\"End\\":true},\\"ECSTaskFailed\\":{\\"Type\\":\\"Pass\\",\\"Parameters\\":{\\"details.$\\":\\"$\\",\\"error\\":\\"Import failed in the ECS container, verify the logs\\",\\"status\\":\\"FAILED\\"},\\"End\\":true}},\\"TimeoutSeconds\\":172800}", ], ], }, @@ -11612,144 +11958,234 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "ecs:RunTask", "Effect": "Allow", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 2, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 3, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 4, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", - }, - ], - }, - ], - }, - ], - }, - ], - }, - "/", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", - }, - ], - }, - ], - }, - ], - }, - ], - }, + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGoogleAnalyticsECSTaskDefinitionGoogleAnalytics92B07651", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ":*", + ], ], - ], - }, + }, + ], }, Object { "Action": Array [ @@ -11797,6 +12233,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -11932,144 +12392,234 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "ecs:RunTask", "Effect": "Allow", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 2, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 3, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 4, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", - }, - ], - }, - ], - }, - ], - }, - ], - }, - "/", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", - }, - ], - }, - ], - }, - ], - }, - ], - }, + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], ], - ], - }, + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPBigQueryECSTaskDefinitionGcpBigQuery1AB7422F", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ":*", + ], + ], + }, + ], }, Object { "Action": Array [ @@ -12117,6 +12667,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -12218,155 +12792,245 @@ Object { "Value": "Ada", }, ], - "TracingConfiguration": Object { - "Enabled": true, - }, - }, - "Type": "AWS::StepFunctions::StateMachine", - "UpdateReplacePolicy": "Delete", - }, - "GCPImportDataStateMachineRoleDefaultPolicyBFDD71A5": Object { - "Properties": Object { - "PolicyDocument": Object { - "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, + "TracingConfiguration": Object { + "Enabled": true, + }, + }, + "Type": "AWS::StepFunctions::StateMachine", + "UpdateReplacePolicy": "Delete", + }, + "GCPImportDataStateMachineRoleDefaultPolicyBFDD71A5": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ Object { "Action": "ecs:RunTask", "Effect": "Allow", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 2, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 3, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 4, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", - }, - ], - }, - ], - }, - ], - }, - ], - }, - "/", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", - }, - ], - }, - ], - }, - ], - }, - ], - }, + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], ], - ], - }, + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersGCPStorageECSTaskDefinitionGcpStorageC48FDC5D", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ":*", + ], + ], + }, + ], }, Object { "Action": Array [ @@ -12414,6 +13078,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -12718,144 +13406,234 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "ecs:RunTask", "Effect": "Allow", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 2, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 3, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 4, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", - }, - ], - }, - ], - }, - ], - }, - ], - }, - "/", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", - }, - ], - }, - ], - }, - ], - }, - ], - }, + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], ], - ], - }, + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersMongoDBECSTaskDefinitionMongoDB36D2EB5D", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ":*", + ], + ], + }, + ], }, Object { "Action": Array [ @@ -12903,6 +13681,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -13038,144 +13840,234 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "ecs:RunTask", "Effect": "Allow", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 2, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 3, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 4, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", - }, - ], - }, - ], - }, - ":", - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", - }, - ], - }, - ], - }, - ], - }, - ], - }, - "/", - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "/", - Object { - "Fn::Select": Array [ - 5, - Object { - "Fn::Split": Array [ - ":", - Object { - "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", - }, - ], - }, - ], - }, - ], - }, - ], - }, + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], ], - ], - }, + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ":", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::Select": Array [ + 5, + Object { + "Fn::Split": Array [ + ":", + Object { + "Ref": "ECSContainersRedshiftECSTaskDefinitionRedshiftDD79CD45", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ":*", + ], + ], + }, + ], }, Object { "Action": Array [ @@ -13223,6 +14115,30 @@ Object { ], }, }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, diff --git a/source/packages/@ada/infra/src/services/governance/jest.config.ts b/source/packages/@ada/infra/src/services/governance/jest.config.ts index 3982de2..79c8d04 100644 --- a/source/packages/@ada/infra/src/services/governance/jest.config.ts +++ b/source/packages/@ada/infra/src/services/governance/jest.config.ts @@ -2,12 +2,11 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import createBaseConfig from '../../../jest.config.base'; +import createConfig from '../../../jest.config.base'; /* eslint-enable: sort-imports */ import * as path from 'path'; import { generateEnvironmentForTests } from './jest-dynamodb-config'; import { writeCdkEnvironmentToFile } from '../../common/services/testing/environment'; -import type { Config } from '@jest/types'; const cdkEnvironment = generateEnvironmentForTests(); const JEST_DYNAMODB_CONFIG = path.resolve(__dirname, '.jest.test-cdk-environment.json'); @@ -21,19 +20,14 @@ process.env = { XRAY_DISABLED: true, }; -const baseConfig = createBaseConfig(); - -export const config: Config.InitialOptions = { - ...baseConfig, +export const config = createConfig({ ...require('@shelf/jest-dynamodb/jest-preset'), globals: { - ...(baseConfig.globals || {}), __JEST_DYNAMODB_TABLES: tables, }, - setupFilesAfterEnv: [...(baseConfig.setupFilesAfterEnv || []), path.resolve(__dirname, 'jest.setup.ts')], + setupFilesAfterEnv: [path.resolve(__dirname, 'jest.setup.ts')], rootDir: __dirname, - displayName: path.basename(__dirname), testTimeout: 10000, -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/services/governance/stack/__snapshots__/index.test.ts.snap b/source/packages/@ada/infra/src/services/governance/stack/__snapshots__/index.test.ts.snap index 160e734..7cd802d 100644 --- a/source/packages/@ada/infra/src/services/governance/stack/__snapshots__/index.test.ts.snap +++ b/source/packages/@ada/infra/src/services/governance/stack/__snapshots__/index.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-GovernanceService) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-GovernanceService) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaGovernanceServiceApiLambdaGetAttributePolicy49F83004Ref": Object { "Value": Object { @@ -472,7 +472,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -560,7 +560,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1142,7 +1142,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1230,7 +1230,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1812,7 +1812,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2136,7 +2136,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2494,7 +2494,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2822,7 +2822,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3150,7 +3150,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3478,7 +3478,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3806,7 +3806,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -4134,7 +4134,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -4462,7 +4462,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -4550,7 +4550,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5096,7 +5096,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5447,7 +5447,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5535,7 +5535,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6117,7 +6117,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6452,7 +6452,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6787,7 +6787,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -7111,7 +7111,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", diff --git a/source/packages/@ada/infra/src/services/identity/jest.config.ts b/source/packages/@ada/infra/src/services/identity/jest.config.ts index 1ed1328..1b738ab 100644 --- a/source/packages/@ada/infra/src/services/identity/jest.config.ts +++ b/source/packages/@ada/infra/src/services/identity/jest.config.ts @@ -2,12 +2,11 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import createBaseConfig from '../../../jest.config.base'; +import createConfig from '../../../jest.config.base'; /* eslint-enable: sort-imports */ import * as path from 'path'; import { generateEnvironmentForTests } from './jest-dynamodb-config'; import { writeCdkEnvironmentToFile } from '../../common/services/testing/environment'; -import type { Config } from '@jest/types'; const cdkEnvironment = generateEnvironmentForTests(); const JEST_DYNAMODB_CONFIG = path.resolve(__dirname, '.jest.test-cdk-environment.json'); @@ -21,19 +20,14 @@ process.env = { XRAY_DISABLED: true, }; -const baseConfig = createBaseConfig(); - -export const config: Config.InitialOptions = { - ...baseConfig, +export const config = createConfig({ ...require('@shelf/jest-dynamodb/jest-preset'), globals: { - ...(baseConfig.globals || {}), __JEST_DYNAMODB_TABLES: tables, }, - setupFilesAfterEnv: [...(baseConfig.setupFilesAfterEnv || []), path.resolve(__dirname, 'jest.setup.ts')], + setupFilesAfterEnv: [path.resolve(__dirname, 'jest.setup.ts')], rootDir: __dirname, - displayName: path.basename(__dirname), testTimeout: 30000, -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/services/identity/stack/__snapshots__/index.test.ts.snap b/source/packages/@ada/infra/src/services/identity/stack/__snapshots__/index.test.ts.snap index 4380530..7abf93d 100644 --- a/source/packages/@ada/infra/src/services/identity/stack/__snapshots__/index.test.ts.snap +++ b/source/packages/@ada/infra/src/services/identity/stack/__snapshots__/index.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-IdentityService) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-IdentityService) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaIdentityServiceUserPoolClient300BB0C2Ref": Object { "Value": Object { @@ -650,7 +650,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1041,7 +1041,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1394,7 +1394,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1740,7 +1740,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2086,7 +2086,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2470,7 +2470,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2823,7 +2823,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3192,7 +3192,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3591,7 +3591,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3959,7 +3959,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -4322,7 +4322,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -4668,7 +4668,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5017,7 +5017,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5363,7 +5363,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5717,7 +5717,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6039,7 +6039,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6385,7 +6385,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -6734,7 +6734,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -7080,7 +7080,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -7465,7 +7465,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -7785,7 +7785,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -7898,7 +7898,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -8491,7 +8491,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -8860,7 +8860,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -9213,7 +9213,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", diff --git a/source/packages/@ada/infra/src/services/notification/jest.config.ts b/source/packages/@ada/infra/src/services/notification/jest.config.ts index 3982de2..79c8d04 100644 --- a/source/packages/@ada/infra/src/services/notification/jest.config.ts +++ b/source/packages/@ada/infra/src/services/notification/jest.config.ts @@ -2,12 +2,11 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import createBaseConfig from '../../../jest.config.base'; +import createConfig from '../../../jest.config.base'; /* eslint-enable: sort-imports */ import * as path from 'path'; import { generateEnvironmentForTests } from './jest-dynamodb-config'; import { writeCdkEnvironmentToFile } from '../../common/services/testing/environment'; -import type { Config } from '@jest/types'; const cdkEnvironment = generateEnvironmentForTests(); const JEST_DYNAMODB_CONFIG = path.resolve(__dirname, '.jest.test-cdk-environment.json'); @@ -21,19 +20,14 @@ process.env = { XRAY_DISABLED: true, }; -const baseConfig = createBaseConfig(); - -export const config: Config.InitialOptions = { - ...baseConfig, +export const config = createConfig({ ...require('@shelf/jest-dynamodb/jest-preset'), globals: { - ...(baseConfig.globals || {}), __JEST_DYNAMODB_TABLES: tables, }, - setupFilesAfterEnv: [...(baseConfig.setupFilesAfterEnv || []), path.resolve(__dirname, 'jest.setup.ts')], + setupFilesAfterEnv: [path.resolve(__dirname, 'jest.setup.ts')], rootDir: __dirname, - displayName: path.basename(__dirname), testTimeout: 10000, -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/services/notification/stack/__snapshots__/index.test.ts.snap b/source/packages/@ada/infra/src/services/notification/stack/__snapshots__/index.test.ts.snap index 3662b93..538e330 100644 --- a/source/packages/@ada/infra/src/services/notification/stack/__snapshots__/index.test.ts.snap +++ b/source/packages/@ada/infra/src/services/notification/stack/__snapshots__/index.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-NotificationService) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-NotificationService) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaNotificationServiceNotificationListenerLambda7FAAC5B2Arn": Object { "Value": Object { @@ -185,7 +185,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -453,7 +453,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1201,7 +1201,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", diff --git a/source/packages/@ada/infra/src/services/ontology/jest.config.ts b/source/packages/@ada/infra/src/services/ontology/jest.config.ts index 1ed1328..1b738ab 100644 --- a/source/packages/@ada/infra/src/services/ontology/jest.config.ts +++ b/source/packages/@ada/infra/src/services/ontology/jest.config.ts @@ -2,12 +2,11 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import createBaseConfig from '../../../jest.config.base'; +import createConfig from '../../../jest.config.base'; /* eslint-enable: sort-imports */ import * as path from 'path'; import { generateEnvironmentForTests } from './jest-dynamodb-config'; import { writeCdkEnvironmentToFile } from '../../common/services/testing/environment'; -import type { Config } from '@jest/types'; const cdkEnvironment = generateEnvironmentForTests(); const JEST_DYNAMODB_CONFIG = path.resolve(__dirname, '.jest.test-cdk-environment.json'); @@ -21,19 +20,14 @@ process.env = { XRAY_DISABLED: true, }; -const baseConfig = createBaseConfig(); - -export const config: Config.InitialOptions = { - ...baseConfig, +export const config = createConfig({ ...require('@shelf/jest-dynamodb/jest-preset'), globals: { - ...(baseConfig.globals || {}), __JEST_DYNAMODB_TABLES: tables, }, - setupFilesAfterEnv: [...(baseConfig.setupFilesAfterEnv || []), path.resolve(__dirname, 'jest.setup.ts')], + setupFilesAfterEnv: [path.resolve(__dirname, 'jest.setup.ts')], rootDir: __dirname, - displayName: path.basename(__dirname), testTimeout: 30000, -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/services/ontology/stack/__snapshots__/index.test.ts.snap b/source/packages/@ada/infra/src/services/ontology/stack/__snapshots__/index.test.ts.snap index 66861e8..01c2545 100644 --- a/source/packages/@ada/infra/src/services/ontology/stack/__snapshots__/index.test.ts.snap +++ b/source/packages/@ada/infra/src/services/ontology/stack/__snapshots__/index.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-OntologyService) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-OntologyService) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaOntologyServiceApiLambdaGetOntology5C119448Ref": Object { "Value": Object { @@ -311,7 +311,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -668,7 +668,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -977,7 +977,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1286,7 +1286,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", diff --git a/source/packages/@ada/infra/src/services/query-parse-render/jest.config.ts b/source/packages/@ada/infra/src/services/query-parse-render/jest.config.ts index 62c5b57..e780f27 100644 --- a/source/packages/@ada/infra/src/services/query-parse-render/jest.config.ts +++ b/source/packages/@ada/infra/src/services/query-parse-render/jest.config.ts @@ -2,15 +2,11 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import baseConfig from '../../../jest.config.base'; +import createConfig from '../../../jest.config.base'; /* eslint-enable: sort-imports */ -import * as path from 'path'; -import type { Config } from '@jest/types'; -export const config: Config.InitialOptions = { - ...baseConfig(), +export const config = createConfig({ rootDir: __dirname, - displayName: path.basename(__dirname), -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/services/query-parse-render/stack/__snapshots__/index.test.ts.snap b/source/packages/@ada/infra/src/services/query-parse-render/stack/__snapshots__/index.test.ts.snap index f2dd3d3..c717630 100644 --- a/source/packages/@ada/infra/src/services/query-parse-render/stack/__snapshots__/index.test.ts.snap +++ b/source/packages/@ada/infra/src/services/query-parse-render/stack/__snapshots__/index.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-QueryParseRenderService) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-QueryParseRenderService) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaQueryParseRenderServiceApiGovernanceAthenaLensLambda2872E629Ref": Object { "Value": Object { diff --git a/source/packages/@ada/infra/src/services/query/components/athena-proxy/handlers/athena-proxy.ts b/source/packages/@ada/infra/src/services/query/components/athena-proxy/handlers/athena-proxy.ts index 4dd07c3..7dbd14e 100644 --- a/source/packages/@ada/infra/src/services/query/components/athena-proxy/handlers/athena-proxy.ts +++ b/source/packages/@ada/infra/src/services/query/components/athena-proxy/handlers/athena-proxy.ts @@ -114,16 +114,16 @@ export const handler = async (event: APIGatewayProxyEvent, _context?: Context): return { statusCode: 200, body: responseBody ? JSON.stringify(responseBody) : '', - } as APIGatewayProxyResult + } as APIGatewayProxyResult; }; export const extractAPIKey = (authToken: string) => { - const pattern = new RegExp(/AWS4-HMAC-SHA256\sCredential=api-key\s(.*?)\//, 'ig'); + const pattern = new RegExp(/AWS4-HMAC-SHA256\sCredential=api-key(.*?)\//, 'ig'); const matched = pattern.exec(authToken); if (!matched || matched.length < 2) { throw new VError({ name: 'MissingApiKeyError' }, 'Unauthorized - missing api-key'); } - return matched[1]; + return matched[1].trim(); }; /** @@ -361,6 +361,8 @@ const getQueryExecution = async ( const getQueryExecStatusRes = await api.getQueryStatus({ executionId: request.QueryExecutionId }); return { QueryExecution: { + Query: 'select * from table', + QueryExecutionId: request.QueryExecutionId, Status: { State: getQueryExecStatusRes.status, }, diff --git a/source/packages/@ada/infra/src/services/query/components/athena-proxy/index.ts b/source/packages/@ada/infra/src/services/query/components/athena-proxy/index.ts index 6f1de84..65de8e2 100644 --- a/source/packages/@ada/infra/src/services/query/components/athena-proxy/index.ts +++ b/source/packages/@ada/infra/src/services/query/components/athena-proxy/index.ts @@ -3,13 +3,12 @@ SPDX-License-Identifier: Apache-2.0 */ import * as cloudfront from 'aws-cdk-lib/aws-cloudfront'; import * as fs from 'fs-extra'; import { Bucket } from '../../../../common/constructs/s3/bucket'; -import { CfnStage } from 'aws-cdk-lib/aws-apigatewayv2'; +import { CfnStage, HttpApi, HttpMethod } from 'aws-cdk-lib/aws-apigatewayv2'; import { Construct } from 'constructs'; import { Duration, RemovalPolicy, Stack } from 'aws-cdk-lib'; import { Effect, PolicyStatement, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam'; import { FederatedRestApi } from '@ada/infra-common/constructs/api'; -import { HttpApi, HttpMethod } from '@aws-cdk/aws-apigatewayv2-alpha'; -import { HttpLambdaIntegration } from '@aws-cdk/aws-apigatewayv2-integrations-alpha'; +import { HttpLambdaIntegration } from 'aws-cdk-lib/aws-apigatewayv2-integrations'; import { HttpOrigin } from 'aws-cdk-lib/aws-cloudfront-origins'; import { LogGroup } from '../../../../common/constructs/cloudwatch/log-group'; import { SolutionContext, TypescriptFunction, tryGetSolutionContext } from '@ada/infra-common'; diff --git a/source/packages/@ada/infra/src/services/query/jest.config.ts b/source/packages/@ada/infra/src/services/query/jest.config.ts index 1ed1328..1b738ab 100644 --- a/source/packages/@ada/infra/src/services/query/jest.config.ts +++ b/source/packages/@ada/infra/src/services/query/jest.config.ts @@ -2,12 +2,11 @@ SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable: sort-imports */ // must be imported before any aliases -import createBaseConfig from '../../../jest.config.base'; +import createConfig from '../../../jest.config.base'; /* eslint-enable: sort-imports */ import * as path from 'path'; import { generateEnvironmentForTests } from './jest-dynamodb-config'; import { writeCdkEnvironmentToFile } from '../../common/services/testing/environment'; -import type { Config } from '@jest/types'; const cdkEnvironment = generateEnvironmentForTests(); const JEST_DYNAMODB_CONFIG = path.resolve(__dirname, '.jest.test-cdk-environment.json'); @@ -21,19 +20,14 @@ process.env = { XRAY_DISABLED: true, }; -const baseConfig = createBaseConfig(); - -export const config: Config.InitialOptions = { - ...baseConfig, +export const config = createConfig({ ...require('@shelf/jest-dynamodb/jest-preset'), globals: { - ...(baseConfig.globals || {}), __JEST_DYNAMODB_TABLES: tables, }, - setupFilesAfterEnv: [...(baseConfig.setupFilesAfterEnv || []), path.resolve(__dirname, 'jest.setup.ts')], + setupFilesAfterEnv: [path.resolve(__dirname, 'jest.setup.ts')], rootDir: __dirname, - displayName: path.basename(__dirname), testTimeout: 30000, -}; +}); export default config; diff --git a/source/packages/@ada/infra/src/services/query/stack/__snapshots__/index.test.ts.snap b/source/packages/@ada/infra/src/services/query/stack/__snapshots__/index.test.ts.snap index 5afff6d..5597226 100644 --- a/source/packages/@ada/infra/src/services/query/stack/__snapshots__/index.test.ts.snap +++ b/source/packages/@ada/infra/src/services/query/stack/__snapshots__/index.test.ts.snap @@ -2,7 +2,7 @@ exports[`stack snapshots 1`] = ` Object { - "Description": "(SO0190-QueryService) - Automated Data Analytics on AWS. Version v1.3.0", + "Description": "(SO0190-QueryService) - Automated Data Analytics on AWS. Version v1.4.0", "Outputs": Object { "AdaQueryServiceApiLambdaGetAthenaQueryResult40B42785Ref": Object { "Value": Object { @@ -353,7 +353,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -734,7 +734,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1217,7 +1217,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -1569,7 +1569,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2052,7 +2052,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2535,7 +2535,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -2902,7 +2902,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3278,7 +3278,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3664,7 +3664,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -3997,7 +3997,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -4330,7 +4330,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -4697,7 +4697,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5186,7 +5186,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -5533,7 +5533,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -9325,7 +9325,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -9875,7 +9875,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -10195,7 +10195,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -10510,7 +10510,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -10841,7 +10841,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -11159,7 +11159,7 @@ Object { "Role": Object { "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackExecuteAthenaQueryLambdaRole106600ADArn", }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -11209,7 +11209,7 @@ Object { "Ref": "referencetoAdaOpMetricsCustomResource0DFDFE51anonymousDataUUID", }, "AWS_SOLUTION_ID": "SO0190", - "AWS_SOLUTION_VERSION": "v1.3.0", + "AWS_SOLUTION_VERSION": "v1.4.0", "COUNTER_TABLE_NAME": Object { "Ref": "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Ref", }, @@ -11244,7 +11244,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", @@ -11269,21 +11269,21 @@ Object { "Fn::Join": Array [ "", Array [ - "{\\"StartAt\\":\\"GenerateQuery\\",\\"States\\":{\\"GenerateQuery\\":{\\"Next\\":\\"GetCachedQuery\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"Next\\":\\"NotifyError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", + "{\\"StartAt\\":\\"GenerateQuery\\",\\"States\\":{\\"GenerateQuery\\":{\\"Next\\":\\"GetCachedQuery\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"Next\\":\\"NotifyError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", Object { "Fn::GetAtt": Array [ "AthenaQueryExecutorStateMachineAthenaQueryExecutorInvokeGenerateQueryB2BEB6A8", "Arn", ], }, - "\\",\\"Parameters\\":{\\"Payload.$\\":\\"$\\"}},\\"GetCachedQuery\\":{\\"Next\\":\\"IsItemInCache?\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", + "\\",\\"Parameters\\":{\\"Payload.$\\":\\"$\\"}},\\"GetCachedQuery\\":{\\"Next\\":\\"IsItemInCache?\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", Object { "Fn::GetAtt": Array [ "AthenaQueryExecutorStateMachineAthenaQueryExecutorGetCachedQuery495881BA", "Arn", ], }, - "\\",\\"Parameters\\":{\\"Payload.$\\":\\"$\\"}},\\"IsItemInCache?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.expired\\",\\"BooleanEquals\\":false,\\"Next\\":\\"NotifySuccess\\"}],\\"Default\\":\\"RunQueryOnAthena\\"},\\"RunQueryOnAthena\\":{\\"Next\\":\\"Wait1Second\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"Next\\":\\"NotifyError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", + "\\",\\"Parameters\\":{\\"Payload.$\\":\\"$\\"}},\\"IsItemInCache?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.expired\\",\\"BooleanEquals\\":false,\\"Next\\":\\"NotifySuccess\\"}],\\"Default\\":\\"RunQueryOnAthena\\"},\\"RunQueryOnAthena\\":{\\"Next\\":\\"Wait1Second\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"Next\\":\\"NotifyError\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", Object { "Fn::GetAtt": Array [ "AthenaQueryExecutorStateMachineAthenaQueryExecutorStartAthenaQueryExecution116B4F60", @@ -11294,14 +11294,14 @@ Object { Object { "Ref": "AWS::Partition", }, - ":states:::athena:getQueryExecution\\",\\"Parameters\\":{\\"QueryExecutionId.$\\":\\"$.queryExecutionId\\"}},\\"IsInFinalState?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"SUCCEEDED\\",\\"Next\\":\\"WriteInCache\\"},{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"NotifyError\\"},{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"CANCELLED\\",\\"Next\\":\\"NotifyError\\"}],\\"Default\\":\\"Wait1Second\\"},\\"WriteInCache\\":{\\"Next\\":\\"NotifySuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", + ":states:::athena:getQueryExecution\\",\\"Parameters\\":{\\"QueryExecutionId.$\\":\\"$.queryExecutionId\\"}},\\"IsInFinalState?\\":{\\"Type\\":\\"Choice\\",\\"Choices\\":[{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"SUCCEEDED\\",\\"Next\\":\\"WriteInCache\\"},{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"FAILED\\",\\"Next\\":\\"NotifyError\\"},{\\"Variable\\":\\"$.athenaStatus.QueryExecution.Status.State\\",\\"StringEquals\\":\\"CANCELLED\\",\\"Next\\":\\"NotifyError\\"}],\\"Default\\":\\"Wait1Second\\"},\\"WriteInCache\\":{\\"Next\\":\\"NotifySuccess\\",\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", Object { "Fn::GetAtt": Array [ "AthenaQueryExecutorStateMachineAthenaQueryExecutorPutCachedQuery44DA72AF", "Arn", ], }, - "\\",\\"Parameters\\":{\\"Payload.$\\":\\"$\\"}},\\"NotifySuccess\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"LogQueryExecution\\"},\\"LogQueryExecution\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", + "\\",\\"Parameters\\":{\\"Payload.$\\":\\"$\\"}},\\"NotifySuccess\\":{\\"Type\\":\\"Pass\\",\\"Next\\":\\"LogQueryExecution\\"},\\"LogQueryExecution\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"Lambda.ClientExecutionTimeoutException\\",\\"Lambda.ServiceException\\",\\"Lambda.AWSLambdaException\\",\\"Lambda.SdkClientException\\"],\\"IntervalSeconds\\":2,\\"MaxAttempts\\":6,\\"BackoffRate\\":2}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", Object { "Fn::GetAtt": Array [ "AthenaQueryExecutorStateMachineAthenaQueryLogQueryExecution7C18D0FA", @@ -11868,30 +11868,6 @@ Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ - Object { - "Action": Array [ - "logs:CreateLogDelivery", - "logs:GetLogDelivery", - "logs:UpdateLogDelivery", - "logs:DeleteLogDelivery", - "logs:ListLogDeliveries", - "logs:PutResourcePolicy", - "logs:DescribeResourcePolicies", - "logs:DescribeLogGroups", - ], - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "xray:PutTraceSegments", - "xray:PutTelemetryRecords", - "xray:GetSamplingRules", - "xray:GetSamplingTargets", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": "lambda:InvokeFunction", "Effect": "Allow", @@ -12027,6 +12003,30 @@ Object { }, ], }, + Object { + "Action": Array [ + "logs:CreateLogDelivery", + "logs:GetLogDelivery", + "logs:UpdateLogDelivery", + "logs:DeleteLogDelivery", + "logs:ListLogDeliveries", + "logs:PutResourcePolicy", + "logs:DescribeResourcePolicies", + "logs:DescribeLogGroups", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + "xray:GetSamplingRules", + "xray:GetSamplingTargets", + ], + "Effect": "Allow", + "Resource": "*", + }, ], "Version": "2012-10-17", }, @@ -12102,7 +12102,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs16.x", + "Runtime": "nodejs18.x", "Tags": Array [ Object { "Key": "Application", diff --git a/source/packages/@ada/infra/src/stacks/__snapshots__/ada-stack.test.ts.snap b/source/packages/@ada/infra/src/stacks/__snapshots__/ada-stack.test.ts.snap old mode 100644 new mode 100755 index 75aa844..cf03d00 --- a/source/packages/@ada/infra/src/stacks/__snapshots__/ada-stack.test.ts.snap +++ b/source/packages/@ada/infra/src/stacks/__snapshots__/ada-stack.test.ts.snap @@ -317,6 +317,7 @@ Object { "DeletionPolicy": "Delete", "DependsOn": Array [ "AppRegistryRegistrySetup9C75F927", + "KMSStack7F65AEC0", "OntologyServiceStackD2BEF838", ], "Properties": Object { @@ -357,6 +358,12 @@ Object { "referencetoAdaApiWafDeploymentSecretCA25FA9ARef": Object { "Ref": "ApiWafDeploymentSecret5FECB872", }, + "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackAccessLogBucketB5B66FEDRef": Object { + "Fn::GetAtt": Array [ + "CommonStackA8F9EE77", + "Outputs.AdaCommonStackAccessLogBucketB5B66FEDRef", + ], + }, "referencetoAdaCommonStackNestedStackCommonStackNestedStackResourceD51B693FOutputsAdaCommonStackCounterTable5D6ADA16Arn": Object { "Fn::GetAtt": Array [ "CommonStackA8F9EE77", @@ -441,6 +448,12 @@ Object { "Outputs.AdaKMSStackKeyBucketKeyDataBucket51FCC54DArn", ], }, + "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyDeploymentScriptBucket915B124DArn": Object { + "Fn::GetAtt": Array [ + "KMSStack7F65AEC0", + "Outputs.AdaKMSStackKeyBucketKeyDeploymentScriptBucket915B124DArn", + ], + }, "referencetoAdaKMSStackNestedStackKMSStackNestedStackResourceA6F3CE60OutputsAdaKMSStackKeyBucketKeyScriptsBucketC9CECD84Arn": Object { "Fn::GetAtt": Array [ "KMSStack7F65AEC0", @@ -468,6 +481,12 @@ Object { "referencetoAdaLayer6FB4FEF4Ref": Object { "Ref": "LayerB20D2F06", }, + "referencetoAdaQueryServiceNestedStackQueryServiceNestedStackResourceB637DA5COutputsAdaQueryServiceAthenaProxyDistribution31E1FEE1DomainName": Object { + "Fn::GetAtt": Array [ + "QueryServiceStack09226509", + "Outputs.AdaQueryServiceAthenaProxyDistribution31E1FEE1DomainName", + ], + }, "referencetoAdaSharedEvntBus3C45F515Arn": Object { "Fn::GetAtt": Array [ "SharedEvntBusF5797523", @@ -482,7 +501,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -640,7 +659,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -789,7 +808,7 @@ Object { "applicationType": "AWS-Solutions", "solutionID": "SO0190", "solutionName": "Automated Data Analytics on AWS", - "version": "v1.3.0", + "version": "v1.4.0", }, "Description": "Attributes for Solutions Metadata", "Name": Object { @@ -801,37 +820,6 @@ Object { }, "Type": "AWS::ServiceCatalogAppRegistry::AttributeGroup", }, - "AppRegistryAppInsightsSetupAD820752": Object { - "DependsOn": Array [ - "AppRegistryCustomResource3F7EBBE3", - ], - "Properties": Object { - "AutoConfigurationEnabled": true, - "CWEMonitorEnabled": true, - "OpsCenterEnabled": true, - "ResourceGroupName": Object { - "Fn::Join": Array [ - "-", - Array [ - "AWS_AppRegistry_Application-Automated-Data-Analysis-on-AWS", - Object { - "Ref": "AWS::Region", - }, - Object { - "Ref": "AWS::AccountId", - }, - ], - ], - }, - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - }, - "Type": "AWS::ApplicationInsights::Application", - }, "AppRegistryAssociation": Object { "Properties": Object { "Application": Object { @@ -847,659 +835,6 @@ Object { }, "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation", }, - "AppRegistryCustomResource3F7EBBE3": Object { - "DeletionPolicy": "Delete", - "Properties": Object { - "ServiceToken": Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderFrameworkOnEvent1C8F1CA3", - "Arn", - ], - }, - "applicationId": Object { - "Fn::GetAtt": Array [ - "AppRegistryRegistrySetup9C75F927", - "Id", - ], - }, - "applicationName": Object { - "Fn::Join": Array [ - "-", - Array [ - "Automated-Data-Analysis-on-AWS", - Object { - "Ref": "AWS::Region", - }, - Object { - "Ref": "AWS::AccountId", - }, - ], - ], - }, - }, - "Type": "AWS::CloudFormation::CustomResource", - "UpdateReplacePolicy": "Delete", - }, - "AppRegistryEventHandlerLambda7CE393E5": Object { - "DependsOn": Array [ - "AppRegistryEventHandlerLambdaServiceRoleDefaultPolicyEDEAC460", - "AppRegistryEventHandlerLambdaServiceRole941F5CAF", - ], - "Properties": Object { - "Code": Object { - "S3Bucket": "cdk-#####", - "S3Key": "cdkhash######.zip", - }, - "Description": "Lambda for checking the state of AppRegistry Application Resource Group state", - "Environment": Object { - "Variables": Object { - "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1", - }, - }, - "Handler": "index.handler", - "Role": Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambdaServiceRole941F5CAF", - "Arn", - ], - }, - "Runtime": "nodejs16.x", - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - }, - "Type": "AWS::Lambda::Function", - }, - "AppRegistryEventHandlerLambdaServiceRole941F5CAF": Object { - "Properties": Object { - "AssumeRolePolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": Object { - "Service": "lambda.amazonaws.com", - }, - }, - ], - "Version": "2012-10-17", - }, - "ManagedPolicyArns": Array [ - Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", - ], - ], - }, - ], - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - }, - "Type": "AWS::IAM::Role", - }, - "AppRegistryEventHandlerLambdaServiceRoleDefaultPolicyEDEAC460": Object { - "Properties": Object { - "PolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "servicecatalog:GetApplication", - "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":servicecatalog:ap-southeast-1:1111111111:application/*", - ], - ], - }, - Object { - "Fn::GetAtt": Array [ - "AppRegistryRegistrySetup9C75F927", - "Arn", - ], - }, - ], - }, - ], - "Version": "2012-10-17", - }, - "PolicyName": "AppRegistryEventHandlerLambdaServiceRoleDefaultPolicyEDEAC460", - "Roles": Array [ - Object { - "Ref": "AppRegistryEventHandlerLambdaServiceRole941F5CAF", - }, - ], - }, - "Type": "AWS::IAM::Policy", - }, - "AppRegistryProviderFrameworkIsComplete4D522877": Object { - "DependsOn": Array [ - "AppRegistryProviderframeworkisCompleteServiceRoleDefaultPolicy65B9F077", - "AppRegistryProviderframeworkisCompleteServiceRoleA45F6FBA", - ], - "Properties": Object { - "Code": Object { - "S3Bucket": "cdk-#####", - "S3Key": "cdkhash######.zip", - }, - "Description": "AWS CDK resource provider framework - isComplete (Ada/AppRegistry/Provider)", - "Environment": Object { - "Variables": Object { - "USER_IS_COMPLETE_FUNCTION_ARN": Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - "USER_ON_EVENT_FUNCTION_ARN": Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - }, - }, - "Handler": "framework.isComplete", - "Role": Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderframeworkisCompleteServiceRoleA45F6FBA", - "Arn", - ], - }, - "Runtime": "nodejs18.x", - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - "Timeout": 900, - }, - "Type": "AWS::Lambda::Function", - }, - "AppRegistryProviderFrameworkOnEvent1C8F1CA3": Object { - "DependsOn": Array [ - "AppRegistryProviderframeworkonEventServiceRoleDefaultPolicyE169F133", - "AppRegistryProviderframeworkonEventServiceRoleD5B6D5CC", - ], - "Properties": Object { - "Code": Object { - "S3Bucket": "cdk-#####", - "S3Key": "cdkhash######.zip", - }, - "Description": "AWS CDK resource provider framework - onEvent (Ada/AppRegistry/Provider)", - "Environment": Object { - "Variables": Object { - "USER_IS_COMPLETE_FUNCTION_ARN": Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - "USER_ON_EVENT_FUNCTION_ARN": Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - "WAITER_STATE_MACHINE_ARN": Object { - "Ref": "AppRegistryProviderWaiterStateMachineCCA7F73D", - }, - }, - }, - "Handler": "framework.onEvent", - "Role": Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderframeworkonEventServiceRoleD5B6D5CC", - "Arn", - ], - }, - "Runtime": "nodejs18.x", - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - "Timeout": 900, - }, - "Type": "AWS::Lambda::Function", - }, - "AppRegistryProviderFrameworkOnTimeoutE87CF662": Object { - "DependsOn": Array [ - "AppRegistryProviderframeworkonTimeoutServiceRoleDefaultPolicyA0F7BFE4", - "AppRegistryProviderframeworkonTimeoutServiceRoleE550CD2F", - ], - "Properties": Object { - "Code": Object { - "S3Bucket": "cdk-#####", - "S3Key": "cdkhash######.zip", - }, - "Description": "AWS CDK resource provider framework - onTimeout (Ada/AppRegistry/Provider)", - "Environment": Object { - "Variables": Object { - "USER_IS_COMPLETE_FUNCTION_ARN": Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - "USER_ON_EVENT_FUNCTION_ARN": Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - }, - }, - "Handler": "framework.onTimeout", - "Role": Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderframeworkonTimeoutServiceRoleE550CD2F", - "Arn", - ], - }, - "Runtime": "nodejs18.x", - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - "Timeout": 900, - }, - "Type": "AWS::Lambda::Function", - }, - "AppRegistryProviderWaiterStateMachineCCA7F73D": Object { - "DependsOn": Array [ - "AppRegistryProviderwaiterstatemachineRoleDefaultPolicy03CF399C", - "AppRegistryProviderwaiterstatemachineRole2C9BFCE4", - ], - "Properties": Object { - "DefinitionString": Object { - "Fn::Join": Array [ - "", - Array [ - "{\\"StartAt\\":\\"framework-isComplete-task\\",\\"States\\":{\\"framework-isComplete-task\\":{\\"End\\":true,\\"Retry\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"IntervalSeconds\\":1,\\"MaxAttempts\\":300,\\"BackoffRate\\":1}],\\"Catch\\":[{\\"ErrorEquals\\":[\\"States.ALL\\"],\\"Next\\":\\"framework-onTimeout-task\\"}],\\"Type\\":\\"Task\\",\\"Resource\\":\\"", - Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderFrameworkIsComplete4D522877", - "Arn", - ], - }, - "\\"},\\"framework-onTimeout-task\\":{\\"End\\":true,\\"Type\\":\\"Task\\",\\"Resource\\":\\"", - Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderFrameworkOnTimeoutE87CF662", - "Arn", - ], - }, - "\\"}}}", - ], - ], - }, - "RoleArn": Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderwaiterstatemachineRole2C9BFCE4", - "Arn", - ], - }, - }, - "Type": "AWS::StepFunctions::StateMachine", - }, - "AppRegistryProviderframeworkisCompleteServiceRoleA45F6FBA": Object { - "Properties": Object { - "AssumeRolePolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": Object { - "Service": "lambda.amazonaws.com", - }, - }, - ], - "Version": "2012-10-17", - }, - "ManagedPolicyArns": Array [ - Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", - ], - ], - }, - ], - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - }, - "Type": "AWS::IAM::Role", - }, - "AppRegistryProviderframeworkisCompleteServiceRoleDefaultPolicy65B9F077": Object { - "Properties": Object { - "PolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "lambda:InvokeFunction", - "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - ":*", - ], - ], - }, - ], - }, - ], - "Version": "2012-10-17", - }, - "PolicyName": "AppRegistryProviderframeworkisCompleteServiceRoleDefaultPolicy65B9F077", - "Roles": Array [ - Object { - "Ref": "AppRegistryProviderframeworkisCompleteServiceRoleA45F6FBA", - }, - ], - }, - "Type": "AWS::IAM::Policy", - }, - "AppRegistryProviderframeworkonEventServiceRoleD5B6D5CC": Object { - "Properties": Object { - "AssumeRolePolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": Object { - "Service": "lambda.amazonaws.com", - }, - }, - ], - "Version": "2012-10-17", - }, - "ManagedPolicyArns": Array [ - Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", - ], - ], - }, - ], - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - }, - "Type": "AWS::IAM::Role", - }, - "AppRegistryProviderframeworkonEventServiceRoleDefaultPolicyE169F133": Object { - "Properties": Object { - "PolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "lambda:InvokeFunction", - "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - ":*", - ], - ], - }, - ], - }, - Object { - "Action": "states:StartExecution", - "Effect": "Allow", - "Resource": Object { - "Ref": "AppRegistryProviderWaiterStateMachineCCA7F73D", - }, - }, - ], - "Version": "2012-10-17", - }, - "PolicyName": "AppRegistryProviderframeworkonEventServiceRoleDefaultPolicyE169F133", - "Roles": Array [ - Object { - "Ref": "AppRegistryProviderframeworkonEventServiceRoleD5B6D5CC", - }, - ], - }, - "Type": "AWS::IAM::Policy", - }, - "AppRegistryProviderframeworkonTimeoutServiceRoleDefaultPolicyA0F7BFE4": Object { - "Properties": Object { - "PolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "lambda:InvokeFunction", - "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "AppRegistryEventHandlerLambda7CE393E5", - "Arn", - ], - }, - ":*", - ], - ], - }, - ], - }, - ], - "Version": "2012-10-17", - }, - "PolicyName": "AppRegistryProviderframeworkonTimeoutServiceRoleDefaultPolicyA0F7BFE4", - "Roles": Array [ - Object { - "Ref": "AppRegistryProviderframeworkonTimeoutServiceRoleE550CD2F", - }, - ], - }, - "Type": "AWS::IAM::Policy", - }, - "AppRegistryProviderframeworkonTimeoutServiceRoleE550CD2F": Object { - "Properties": Object { - "AssumeRolePolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": Object { - "Service": "lambda.amazonaws.com", - }, - }, - ], - "Version": "2012-10-17", - }, - "ManagedPolicyArns": Array [ - Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", - ], - ], - }, - ], - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - }, - "Type": "AWS::IAM::Role", - }, - "AppRegistryProviderwaiterstatemachineRole2C9BFCE4": Object { - "Properties": Object { - "AssumeRolePolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": Object { - "Service": "states.ap-southeast-1.amazonaws.com", - }, - }, - ], - "Version": "2012-10-17", - }, - "Tags": Array [ - Object { - "Key": "Application", - "Value": "Ada", - }, - ], - }, - "Type": "AWS::IAM::Role", - }, - "AppRegistryProviderwaiterstatemachineRoleDefaultPolicy03CF399C": Object { - "Properties": Object { - "PolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "lambda:InvokeFunction", - "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderFrameworkIsComplete4D522877", - "Arn", - ], - }, - Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderFrameworkIsComplete4D522877", - "Arn", - ], - }, - ":*", - ], - ], - }, - ], - }, - Object { - "Action": "lambda:InvokeFunction", - "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderFrameworkOnTimeoutE87CF662", - "Arn", - ], - }, - Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "AppRegistryProviderFrameworkOnTimeoutE87CF662", - "Arn", - ], - }, - ":*", - ], - ], - }, - ], - }, - ], - "Version": "2012-10-17", - }, - "PolicyName": "AppRegistryProviderwaiterstatemachineRoleDefaultPolicy03CF399C", - "Roles": Array [ - Object { - "Ref": "AppRegistryProviderwaiterstatemachineRole2C9BFCE4", - }, - ], - }, - "Type": "AWS::IAM::Policy", - }, "AppRegistryRegistrySetup9C75F927": Object { "Properties": Object { "Description": "Service Catalog application to track and manage all your resources for the solution Automated Data Analytics on AWS", @@ -1522,7 +857,7 @@ Object { "Solutions:ApplicationType": "AWS-Solutions", "Solutions:SolutionID": "SO0190", "Solutions:SolutionName": "Automated Data Analytics on AWS", - "Solutions:SolutionVersion": "v1.3.0", + "Solutions:SolutionVersion": "v1.4.0", }, }, "Type": "AWS::ServiceCatalogAppRegistry::Application", @@ -1571,7 +906,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -1630,7 +965,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -1852,7 +1187,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -1913,7 +1248,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -2069,7 +1404,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -2314,7 +1649,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -2346,7 +1681,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -2368,7 +1703,7 @@ Object { "LayerB20D2F06": Object { "Properties": Object { "CompatibleRuntimes": Array [ - "nodejs16.x", + "nodejs18.x", ], "Content": Object { "S3Bucket": "cdk-#####", @@ -2791,7 +2126,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -2935,7 +2270,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -2967,7 +2302,7 @@ Object { "Ref": "AWS::Region", }, "awsSolutionId": "SO0190", - "awsSolutionVersion": "v1.3.0", + "awsSolutionVersion": "v1.4.0", "sendAnonymousData": Object { "Ref": "sendAnonymousData", }, @@ -3004,6 +2339,7 @@ Object { "Value": "Ada", }, ], + "Timeout": 30, }, "Type": "AWS::Lambda::Function", }, @@ -3214,7 +2550,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -3438,7 +2774,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { @@ -3903,7 +3239,7 @@ Object { }, Object { "Key": "ApplicationVersion", - "Value": "ada@1.3.0", + "Value": "ada@1.4.0", }, ], "TemplateURL": Object { diff --git a/source/packages/@ada/infra/src/stacks/ada-stack.ts b/source/packages/@ada/infra/src/stacks/ada-stack.ts index 79e0c77..72fab1c 100644 --- a/source/packages/@ada/infra/src/stacks/ada-stack.ts +++ b/source/packages/@ada/infra/src/stacks/ada-stack.ts @@ -175,6 +175,8 @@ export class AdaStack extends ExtendedStack { dataProductCreationStateMachine: dataProductService.dataProductCreationStateMachine, dataProductTable: dataProductService.dataProductTable, coreStack: this, + accessLogsBucket, + athenaProxyDomainName: queryService.proxyDistributionDomain, }); const web = new StaticWebsiteStack(this, 'Website', { diff --git a/source/packages/@ada/infra/tsconfig.json b/source/packages/@ada/infra/tsconfig.json index 0c6d0ee..06fa5ed 100644 --- a/source/packages/@ada/infra/tsconfig.json +++ b/source/packages/@ada/infra/tsconfig.json @@ -13,6 +13,7 @@ "strict": true, "noImplicitAny": true, "strictNullChecks": true, + "strictFunctionTypes": true, "outDir": "dist", "rootDir": "src", "noImplicitThis": true, @@ -59,5 +60,5 @@ ] }, "include": ["src"], - "exclude": ["cdk.out", "dist", "node_modules", "tst", "**/jest.config.*"] + "exclude": ["cdk.out", "dist", "node_modules", "tst", "**/jest.config.*", "**/__tests__/**/*.test.ts"] } diff --git a/source/packages/@ada/query-parse-render-lambdas/package.json b/source/packages/@ada/query-parse-render-lambdas/package.json index 4c69430..0461f0f 100644 --- a/source/packages/@ada/query-parse-render-lambdas/package.json +++ b/source/packages/@ada/query-parse-render-lambdas/package.json @@ -3,6 +3,7 @@ "version": "0.0.0", "private": true, "license": "Apache-2.0", + "description":"Ada query-parse-render-lambdas", "scripts": { "docker": "docker run -v $(pwd)/../../../:/source -v $HOME/.m2:/root/.m2 -w /source ada-java-build-base scripts/build-java.sh query-parse-render-lambdas", "build": "yarn docker install -Djava.util.logging.config.file=./no-logging.properties", diff --git a/source/packages/@ada/solution/package.json b/source/packages/@ada/solution/package.json index 1650b28..61c6cd1 100755 --- a/source/packages/@ada/solution/package.json +++ b/source/packages/@ada/solution/package.json @@ -6,6 +6,7 @@ "cdk-solution": "dist/cdk-solution.js" }, "license": "Apache-2.0", + "description":"Ada solution", "scripts": { "cp-context": "cp ../../../../cdk.context.amazon_corp.json ./cdk.context.json || exit 0;", "clean": "yarn run clean:tsc && rm -rf node_modules", @@ -24,14 +25,14 @@ "dependencies": { "@ada/common": "*", "@ada/infra": "*", - "aws-cdk-lib": "2.88.0", + "aws-cdk-lib": "2.130.0", "constructs": "^10.1.181", "source-map-support": "^0.5.21" }, "devDependencies": { "@types/node": "^15.3.1", - "aws-cdk": "2.88.0", - "@aws-cdk/cloudformation-diff": "2.88.0", + "aws-cdk": "2.130.0", + "@aws-cdk/cloudformation-diff": "2.130.0", "if-env-defined": "^1.0.0", "ts-node": "^8.1.0", "typescript": "4.3.5" diff --git a/source/packages/@ada/strings/README.md b/source/packages/@ada/strings/README.md index e42f757..8cd0527 100644 --- a/source/packages/@ada/strings/README.md +++ b/source/packages/@ada/strings/README.md @@ -2,7 +2,7 @@ This package provides strongly typed string dictionary with i18n localization support. -Utlizeds the [typesafe-i18n](https://typesafe-i18n.pages.dev/) generator for ensuring strict typing. +Utilized the [typesafe-i18n](https://typesafe-i18n.pages.dev/) generator for ensuring strict typing. ## Usage @@ -10,7 +10,7 @@ Utlizeds the [typesafe-i18n](https://typesafe-i18n.pages.dev/) generator for ens Entities are core types used in the solution, such as `DataProduct`, `Domain`, and `Ontology`. The entity name used in the solution may differ from the name exposed to end users, such as we may rename `DataSet` to `Table`, -but the entity type in the system must be maintained througout. +but the entity type in the system must be maintained throughout. All entities have several forms that can be used as string values as follows. @@ -38,14 +38,14 @@ LL.ENTITY.data_product(); // => "data product" LL.ENTITY.data_products(); // => "data products" ``` -#### **`$` Infered Plural Entity(s)** - `LL.ENTITY.{EntityName$}()` +#### **`$` Inferred Plural Entity(s)** - `LL.ENTITY.{EntityName$}()` ```js LL.ENTITY.DataProducts$(1); // => "Data Product" LL.ENTITY.DataProducts$(3); // => "Data Products" ``` -#### **`$` Infrered plural entity(s)** - `LL.ENTITY.{entity_name$}()` +#### **`$` Inferred plural entity(s)** - `LL.ENTITY.{entity_name$}()` ```js LL.ENTITY.data_products$(1); // => "data product" @@ -128,7 +128,7 @@ LL.ENTITY.DataProducts__CREATED('with message'); // => 'Created data products "w ### Entities -Entities are core types defines within the solution and folow a common "string" definition pattern. +Entities are core types defines within the solution and follow a common "string" definition pattern. ```js // StringEntityDefinition diff --git a/source/packages/@ada/strings/markdown/view/budget/help.md b/source/packages/@ada/strings/markdown/view/budget/help.md new file mode 100644 index 0000000..4718d1a --- /dev/null +++ b/source/packages/@ada/strings/markdown/view/budget/help.md @@ -0,0 +1,3 @@ +Admins can create a Budget with a cost limit to track costs and usage, and receive notifications. + +Enter budget limit value. Enter a list of subscriber email addresses who will get notified when the thresholds are hit. Set percentage threshold values for notifications and the subscribers will be notified when the current spend is greater than these percentages of the budget limit. diff --git a/source/packages/@ada/strings/markdown/view/visualisation/help.md b/source/packages/@ada/strings/markdown/view/visualisation/help.md new file mode 100644 index 0000000..c1be411 --- /dev/null +++ b/source/packages/@ada/strings/markdown/view/visualisation/help.md @@ -0,0 +1,9 @@ +Ada root admin user can deploy Apache Superset on AWS solution as a data analytics and visualization solution to work alongside ADA and provide other Ada users a lightweight and an intuitive way to explore and visualize their data sets. + +Apache Superset on AWS solution is a standalone solution that is offered by an AWS Partner Solution “Apache Superset On AWS” (https://aws-ia.github.io/cfn-ps-apache-superset/). + +NOTE: ADA only facilitates a convenient way of deploying AWS Partner Solutions “Amazon Virtual Private Cloud on AWS” and “Apache Superset On AWS” from its published source and artifacts. Both AWS Partner solutions are standalone solutions and do not form any part of the Automated Data Analytics Solution. + +For ADA root admin users who want to deploy this, we recommend reading the deployment guides of both solutions and making sure your AWS account is configured for the deployment. + +Once the Apache Superset solution is deployed, there will be two new stacks in AWS CloudFormation Console named: “superset-vpc” and “superset”. You can monitor the deployment process from AWS CodeBuild console and the progress is not displayed on the ADA web user interface. diff --git a/source/packages/@ada/strings/src/dictionary/en/entities/entity/Budget.ts b/source/packages/@ada/strings/src/dictionary/en/entities/entity/Budget.ts new file mode 100644 index 0000000..51c5779 --- /dev/null +++ b/source/packages/@ada/strings/src/dictionary/en/entities/entity/Budget.ts @@ -0,0 +1,32 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import type { StringEntityDefinition } from '../types'; + +export const Budget: StringEntityDefinition<'Budget'> = { + Budget: 'Budget', + Budgets: 'Budgets', + budget: 'budget', + budgets: 'budgets', + + description: 'A Budget setting for ada infrastructure costs', + descriptions: 'A list of budgets for infrastructure costs', + + properties: { + budgetLimit: { + label: 'Budget Limit', + description: 'The cost limit in USD for the Budget', + placeholder: 'Enter budget limit, eg 100...', + }, + subscriberList: { + label: 'Subscriber List', + description: 'The subscribers to recieve notification', + placeholder: 'Enter the subscriber email addresses...', + }, + softNotifications: { + label: 'Notification Percentages', + description: 'The subscribers will be notified when the costs reach these percentages of the budget', + }, + }, +}; + +export default Budget; diff --git a/source/packages/@ada/strings/src/dictionary/en/entities/entity/index.ts b/source/packages/@ada/strings/src/dictionary/en/entities/entity/index.ts index a841831..67bac1a 100644 --- a/source/packages/@ada/strings/src/dictionary/en/entities/entity/index.ts +++ b/source/packages/@ada/strings/src/dictionary/en/entities/entity/index.ts @@ -41,3 +41,5 @@ export { Transform } from './Transform' export { User } from './User' export { UserProfile } from './UserProfile' + +export { Budget } from './Budget'; diff --git a/source/packages/@ada/strings/src/dictionary/en/entities/types.ts b/source/packages/@ada/strings/src/dictionary/en/entities/types.ts index a284f91..77353d6 100644 --- a/source/packages/@ada/strings/src/dictionary/en/entities/types.ts +++ b/source/packages/@ada/strings/src/dictionary/en/entities/types.ts @@ -26,6 +26,7 @@ export enum EntityKey { UserProfile = 'UserProfile', Query = 'Query', SavedQuery = 'SavedQuery', + Budget = 'Budget' } export function toPluralKey(key: EntityKeys): string { diff --git a/source/packages/@ada/strings/src/dictionary/en/views/view/budget.ts b/source/packages/@ada/strings/src/dictionary/en/views/view/budget.ts new file mode 100644 index 0000000..a9bf9ba --- /dev/null +++ b/source/packages/@ada/strings/src/dictionary/en/views/view/budget.ts @@ -0,0 +1,55 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { ENTITY } from '../../entities'; + +export const BUDGET = { + title: ENTITY.Budget, + nav: ENTITY.Budget, + + HELP: { + ROOT: { + header: ENTITY.Budget, + }, + }, + WIZARD: { + description: 'Enter budget details', + }, + DETAILS: { + intro: { + prefix: 'Admins can create a', + suffix: 'with a cost limit to track costs and usage for the solution, and receive notifications if the costs exceed certain thresholds.' + }, + actualSpend: 'Current vs Budgeted', + forecastedSpend: 'Forecasted vs Budgeted (MTD)', + spendAdditionalInfo: 'Amount spent: ${0:number} of ${1:number}', + budgetHealth: 'Budget Health', + budgetAmount: 'Budget Amount', + budgetNotifications: 'Notifications', + NOTIFICATION: { + labelCost: 'Actual Cost > {0:number}% (${1:string})', + labelDefinition: 'Definition', + contentDefiniton: 'When your actual cost is greater than {0:number}% (${1:string}) of your budgeted amount (${2:string}), the alert threshold will be exceeded.', + labelThreshold: 'Threshold', + labelSubscribers: 'Subscribers', + statusNotExceeded: 'Not exceeded', + statusExceeded: 'Exceeded', + } + }, + DELETE: { + CONFIRM: { + title: 'Delete budget setting', + confirmationText: 'delete', + deleteButtonText: 'Delete', + content: 'This will delete the budget limit setting and all the notification settings associated with the budget limit.', + htmlLabel: 'To confirm deletion, type "delete" below' + }, + NOTIFY: { + error: { + header: 'Failed to delete budget', + }, + success: { + header: 'Successfully deleted budget', + }, + } + }, +} as const; diff --git a/source/packages/@ada/strings/src/dictionary/en/views/view/index.ts b/source/packages/@ada/strings/src/dictionary/en/views/view/index.ts index 119a86b..06bdf66 100644 --- a/source/packages/@ada/strings/src/dictionary/en/views/view/index.ts +++ b/source/packages/@ada/strings/src/dictionary/en/views/view/index.ts @@ -2,6 +2,8 @@ SPDX-License-Identifier: Apache-2.0 */ export * from './admin'; +export * from './budget'; + export * from './core'; export * from './cost'; @@ -19,3 +21,5 @@ export * from './public'; export * from './query'; export * from './user'; + +export * from './visualisation'; diff --git a/source/packages/@ada/strings/src/dictionary/en/views/view/visualisation.ts b/source/packages/@ada/strings/src/dictionary/en/views/view/visualisation.ts new file mode 100644 index 0000000..fc7494f --- /dev/null +++ b/source/packages/@ada/strings/src/dictionary/en/views/view/visualisation.ts @@ -0,0 +1,56 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +export const VISUALISATION = { + title: 'Deploy Visualization solution - Apache Superset on AWS', + nav: 'Visualization', + + htmlBody: `

This feature allows you to deploy Apache Superset on AWS solution as an data analytics and visualization platform for Automated Data Analytics on AWS (ADA) solution. You can use Apache Superset to ingest data from ADA data products and help ADA users explore and visualize their data sets.

+

Note: Apache Superset is offered by an AWS Partner Solution Apache Superset On AWS and is a standalone solution that runs alongside the ADA solution, serving as the visualization platform to ADA.

+

How to deploy Apache Superset on AWS

+

Before deploying, read the following deployment guides for the solutions that will be deployed, and make sure your AWS account is set up for this deployment. +

+

Note: You must deploy the Apache Superset on AWS solution in the same AWS account where the ADA solution is deployed.

+
    +
  1. Click Deploy Apache Superset to start the deployment. The deployment takes place in an AWS CodeBuild build. After the deployment is initiated, you can monitor the deployment progress from AWS CodeBuild console.
  2. +
  3. After the deployment is completed, navigate to the AWS CloudFormation console and nagivate to the superset stack to verify that it has been deployed successfully.
  4. +
  5. On the Outputs tab, under SupersetConsole, copy the URL and open it in a browser. This URL points to Apache Superset's web console. The default user name and password are below. You must change the admin password after the first login. +
      +
    • Username: admin
    • +
    • Password: admin
    • +
    +
  6. +
+

Connect to the data products in Ada

+

To connect to the data products in Ada: +

    +
  1. From the ADA user profile, create an API key for the ADA user who will access ADA data using Apache Superset.
  2. +
  3. Open Apache Superset and choose Settings→Database Connections and click +Database button.
  4. +
  5. From the Supported Databases drop-down list, choose Other. and enter the following URI in the SQLALCHEMY URI field: +
    awsathena+rest://api-key<Ada API Key>:1234@athena.<AWS Region>.amazonaws.com:443?catalog_name=<ADA Data Product Domain Identifier>&s3_staging_dir=s3%3A//
    +
  6. +
  7. Edit the Display Name from Other to Ada [Data Product Domain Name].
  8. +
  9. Click Test Connection to make sure Apache Superset can connect to the ADA data product.
  10. +
  11. Once confirmed, click Connect to create this database connection. You can now start using Apache Superset to analyze data from the ADA platform.
  12. +
+

+

NOTE: Deploying the Apache Superset on AWS solution will require user access to the AWS Management Console and an intermediate level of knowledge of AWS service administration. Make sure you have sufficient permissions and access rights before starting the deployment process.

+ `, + NOTIFY: { + error: { + header: 'Failed to start deploying visualisation solution', + }, + success: { + header: 'Successfully started visualisation solution deployment', + content: 'Monitor status of the deployment with provided details', + }, + }, + + HELP: { + ROOT: { + header: 'Deploy visualization solution - Apache Superset on AWS', + }, + }, +} as const; diff --git a/source/packages/@ada/website/README.md b/source/packages/@ada/website/README.md index b9aeaf5..293fde8 100644 --- a/source/packages/@ada/website/README.md +++ b/source/packages/@ada/website/README.md @@ -4,7 +4,7 @@ This package contains the Web UI for the deployed solution and is accessible via secured CloudFront domain endpoint once the solution has fully deployed. -The website is built using the open-source [Northstar](https://northstar.aws-prototyping.cloud/#/About%20NorthStar) project developed and mainatained by AWS. +The website is built using the open-source [Northstar](https://northstar.aws-prototyping.cloud/#/About%20NorthStar) project developed and maintained by AWS. ## Local Development diff --git a/source/packages/@ada/website/package.json b/source/packages/@ada/website/package.json index 717fa57..379b342 100644 --- a/source/packages/@ada/website/package.json +++ b/source/packages/@ada/website/package.json @@ -3,14 +3,15 @@ "version": "0.0.0", "private": true, "license": "Apache-2.0", + "description":"Ada website", "dependencies": { "@ada/api": "*", "@ada/common": "*", "@ada/infra": "*", "@ada/strings": "*", "@ada/transforms": "*", - "@aws-amplify/ui-react": "^1.2.26", - "@aws-sdk/util-arn-parser": "^3.310.0", + "@aws-amplify/ui-react": "^3.6.1", + "@aws-sdk/util-arn-parser": "3.310.0", "@material-ui/core": "4.11.4", "@rjsf/core": "^4.2.0", "@rjsf/material-ui": "^4.2.0", @@ -83,7 +84,7 @@ "@types/jest": "^26.0.24", "@types/jest-environment-puppeteer": "^4.0.0", "@types/moment": "^2.13.0", - "@types/react": "^17.0.5", + "@types/react": "17.0.37", "@types/react-beautiful-dnd": "^13.1.2", "@types/react-dom": "^17.0.3", "@types/react-router": "^5.1.8", @@ -104,7 +105,7 @@ "jest": "^26.6.3", "jest-canvas-mock": "^2.3.1", "jest-css-modules": "^2.1.0", - "jest-mock-axios": "^4.5.0", + "jest-mock-axios": "4.5.0", "jest-puppeteer": "^4.4.0", "jest-silent-reporter": "^0.5.0", "jest-watch-typeahead": "^0.6.4", @@ -125,11 +126,12 @@ "**/@types/react-table": "^7.7.8", "**/react-router": "^5.2.0", "**/react-router-dom": "^5.2.0", - "**/nth-check": "^2.0.1" + "**/nth-check": "^2.0.1", + "follow-redirects": "1.15.5" }, "scripts": { - "start": "craco start", - "build": "craco build", + "start": "NODE_OPTIONS=\"--openssl-legacy-provider --max-old-space-size=16384\" craco start", + "build": "NODE_OPTIONS=\"--openssl-legacy-provider --max-old-space-size=16384\" craco build", "copydocs": "./scripts/copydocs.sh", "serve": "serve -s build -l 3000", "analyze": "BUNDLE_ANALYZER_MODE=server craco build", diff --git a/source/packages/@ada/website/setupTests.ts b/source/packages/@ada/website/setupTests.ts index b63d1d2..c8c55c7 100644 --- a/source/packages/@ada/website/setupTests.ts +++ b/source/packages/@ada/website/setupTests.ts @@ -39,4 +39,11 @@ jest.mock('@ada/strings/node_modules/typesafe-i18n/runtime/cjs/runtime/src/core. } }) +jest.mock('maplibre-gl/dist/maplibre-gl', () => ({ + Map: () => ({}), +})); + +// @ts-ignore +window.URL.createObjectURL = function () {}; + export {}; diff --git a/source/packages/@ada/website/src/api/data-product.test.ts b/source/packages/@ada/website/src/api/data-product.test.ts index d230d2f..fc2e41f 100644 --- a/source/packages/@ada/website/src/api/data-product.test.ts +++ b/source/packages/@ada/website/src/api/data-product.test.ts @@ -16,10 +16,10 @@ describe('api/data-product', () => { }) it('should wait for preview to complete and return results', async () => { const PREVIEW_ID = 'preview-id'; - API.postDataProductPreviewDomainDataProduct.mockResolvedValue({ previewId: PREVIEW_ID }); - API.getDataProductPreviewDomainDataProduct.mockResolvedValue({ previewId: PREVIEW_ID, status: 'SUCCEEDED' }); - API.getDataProductPreviewDomainDataProduct.mockResolvedValueOnce({ previewId: PREVIEW_ID, status: 'RUNNING' }); - API.getDataProductPreviewDomainDataProduct.mockResolvedValueOnce({ previewId: PREVIEW_ID, status: 'RUNNING' }); + API.postDataProductPreviewDomainDataProduct.mockResolvedValue({ previewId: PREVIEW_ID } as never); + API.getDataProductPreviewDomainDataProduct.mockResolvedValue({ previewId: PREVIEW_ID, status: 'SUCCEEDED' } as never); + API.getDataProductPreviewDomainDataProduct.mockResolvedValueOnce({ previewId: PREVIEW_ID, status: 'RUNNING' } as never); + API.getDataProductPreviewDomainDataProduct.mockResolvedValueOnce({ previewId: PREVIEW_ID, status: 'RUNNING' } as never); expect(await previewDataProductUntilComplete(fixtures.DATA_PRODUCT, false)).toEqual(expect.objectContaining({ status: 'SUCCEEDED' })); expect(API.getDataProductPreviewDomainDataProduct).toBeCalledTimes(3); @@ -29,8 +29,8 @@ describe('api/data-product', () => { }) it('should add enableAutomaticTransforms when auto is true', async () => { const PREVIEW_ID = 'preview-id'; - API.postDataProductPreviewDomainDataProduct.mockResolvedValue({ previewId: PREVIEW_ID }); - API.getDataProductPreviewDomainDataProduct.mockResolvedValue({ previewId: PREVIEW_ID, status: 'SUCCEEDED' }); + API.postDataProductPreviewDomainDataProduct.mockResolvedValue({ previewId: PREVIEW_ID } as never); + API.getDataProductPreviewDomainDataProduct.mockResolvedValue({ previewId: PREVIEW_ID, status: 'SUCCEEDED' } as never); expect(await previewDataProductUntilComplete(fixtures.DATA_PRODUCT, true)).toEqual(expect.objectContaining({ status: 'SUCCEEDED' })); expect(API.postDataProductPreviewDomainDataProduct).toBeCalledWith(expect.objectContaining({ diff --git a/source/packages/@ada/website/src/common/components/DeleteEntity/index.tsx b/source/packages/@ada/website/src/common/components/DeleteEntity/index.tsx index fb06007..b0be94b 100644 --- a/source/packages/@ada/website/src/common/components/DeleteEntity/index.tsx +++ b/source/packages/@ada/website/src/common/components/DeleteEntity/index.tsx @@ -169,6 +169,7 @@ export interface DeleteEntityButtonProps extends DeleteEntityConfirmationDialogP buttonSize?: ButtonProps['size']; /** Delete button text @default "Delete" */ deleteButtonText?: string; + DeleteEntityConfirmationDialogComponentType?: React.ComponentType; } export type ScopedDeleteEntityButtonProps = Omit< @@ -182,6 +183,7 @@ export const DeleteEntityButton: React.FC = ({ buttonVariant, buttonSize, onClose, + DeleteEntityConfirmationDialogComponentType = DeleteEntityConfirmationDialog, ...props }) => { const { LL } = useI18nContext(); @@ -212,7 +214,7 @@ export const DeleteEntityButton: React.FC = ({ {allowDelete && isConfirming && ( - + )} diff --git a/source/packages/@ada/website/src/common/utils/__tests__/multipart-file-uploader.test.ts b/source/packages/@ada/website/src/common/utils/__tests__/multipart-file-uploader.test.ts index 364f665..a66fa7b 100644 --- a/source/packages/@ada/website/src/common/utils/__tests__/multipart-file-uploader.test.ts +++ b/source/packages/@ada/website/src/common/utils/__tests__/multipart-file-uploader.test.ts @@ -22,21 +22,21 @@ describe('multipart-file-uploader', () => { bucket: 'a-bucket', key: VALID_FILENAME, uploadId: 'an-upload-id', - }); + } as never); API.putDataProductDomainDataProductFileUpload.mockResolvedValue({ bucket: 'a-bucket', key: VALID_FILENAME, - }); + } as never); API.getDataProductDomainDataProductFileUpload.mockResolvedValueOnce({ bucket: 'a-bucket', key: VALID_FILENAME, signedUrl: 'signed-url-1', - }); + } as never); API.getDataProductDomainDataProductFileUpload.mockResolvedValueOnce({ bucket: 'a-bucket', key: VALID_FILENAME, signedUrl: 'signed-url-2', - }); + } as never); mockAxios.put.mockResolvedValueOnce({ status: 200, headers: { @@ -122,19 +122,19 @@ describe('multipart-file-uploader', () => { bucket: 'a-bucket', key: VALID_FILENAME, uploadId: 'an-upload-id', - }); + } as never); API.putDataProductDomainDataProductFileUpload.mockResolvedValue({ bucket: 'a-bucket', key: VALID_FILENAME, - }); + } as never); API.getDataProductDomainDataProductFileUpload.mockResolvedValueOnce({ bucket: 'a-bucket', key: VALID_FILENAME, signedUrl: 'signed-url-1', - }); + } as never); API.getDataProductDomainDataProductFileUpload.mockRejectedValueOnce({ any: 'error', - }); + } as never); mockAxios.put.mockResolvedValueOnce({ status: 403, }); diff --git a/source/packages/@ada/website/src/core/App/index.tsx b/source/packages/@ada/website/src/core/App/index.tsx index c692d2a..737f9fa 100644 --- a/source/packages/@ada/website/src/core/App/index.tsx +++ b/source/packages/@ada/website/src/core/App/index.tsx @@ -82,17 +82,27 @@ export const App: React.FC = () => { text: LL.VIEW.COST.nav(), href: '/admin/cost', }, + { + type: SideNavigationItemType.LINK, + text: LL.VIEW.BUDGET.nav(), + href: '/admin/budget', + }, ...(isRootAdmin ? [ - { - type: SideNavigationItemType.DIVIDER, - }, - { - type: SideNavigationItemType.LINK, - text: LL.VIEW.ADMIN.Teardown.nav(), - href: '/admin/teardown', - }, - ] + { + type: SideNavigationItemType.DIVIDER, + }, + { + type: SideNavigationItemType.LINK, + text: LL.VIEW.VISUALISATION.nav(), + href: '/admin/visualization', + }, + { + type: SideNavigationItemType.LINK, + text: LL.VIEW.ADMIN.Teardown.nav(), + href: '/admin/teardown', + }, + ] : []), ], }); @@ -121,11 +131,7 @@ export const App: React.FC = () => { }} items={navItems} /> } > - - {import('@ada/strings/markdown/view/help.md')} - + {import('@ada/strings/markdown/view/help.md')} {/* Force users that don't belong to any default groups to public landing page */} {hasNoAccess && } diff --git a/source/packages/@ada/website/src/core/provider/AmplifyProvider.tsx b/source/packages/@ada/website/src/core/provider/AmplifyProvider.tsx index 8c5c4b4..0313b5a 100644 --- a/source/packages/@ada/website/src/core/provider/AmplifyProvider.tsx +++ b/source/packages/@ada/website/src/core/provider/AmplifyProvider.tsx @@ -1,6 +1,7 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ -import { AmplifyAuthenticator, AmplifyToast } from '@aws-amplify/ui-react'; +import { AmplifyAuthenticator } from '@aws-amplify/ui-react/legacy'; +import { AmplifyToast } from './AmplifyToast'; import { Auth, CognitoHostedUIIdentityProvider, CognitoUser } from '@aws-amplify/auth'; import { AuthState, onAuthUIStateChange } from '@aws-amplify/ui-components'; import { @@ -146,7 +147,7 @@ export const AmplifyProvider = ({ children }: PropsWithChildren<{}>) => { return ( <> - {hubError && setHubError(undefined)}>{hubError}} + {hubError && setHubError(undefined)} message={hubError} />} {/* Hide the sign-in form so we only have single federated sign-in experience */}
diff --git a/source/packages/@ada/website/src/core/provider/AmplifyToast.tsx b/source/packages/@ada/website/src/core/provider/AmplifyToast.tsx new file mode 100644 index 0000000..c2c6250 --- /dev/null +++ b/source/packages/@ada/website/src/core/provider/AmplifyToast.tsx @@ -0,0 +1,19 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { Container } from 'aws-northstar'; +import Button from '@material-ui/core/Button'; +import React from 'react'; +import Typography from '@material-ui/core/Typography' + +export interface AmplifyToastProperties { + message: string; + handleClose: ()=>void; +} + +export const AmplifyToast: React.FC = ({message, handleClose}) => { + return ( + + {message} + + ) +} \ No newline at end of file diff --git a/source/packages/@ada/website/src/northstar-plus/components/AlertButton/index.test.tsx b/source/packages/@ada/website/src/northstar-plus/components/AlertButton/index.test.tsx index 7b78f97..2c79536 100644 --- a/source/packages/@ada/website/src/northstar-plus/components/AlertButton/index.test.tsx +++ b/source/packages/@ada/website/src/northstar-plus/components/AlertButton/index.test.tsx @@ -2,7 +2,6 @@ SPDX-License-Identifier: Apache-2.0 */ import { AlertButton } from '.'; import { act, render, screen } from '@testing-library/react'; -import React from 'react'; import userEvent from '@testing-library/user-event'; describe('AlertButton', () => { diff --git a/source/packages/@ada/website/src/northstar-plus/components/PercentagesSelector/components/CheckboxInput/index.tsx b/source/packages/@ada/website/src/northstar-plus/components/PercentagesSelector/components/CheckboxInput/index.tsx new file mode 100644 index 0000000..1185586 --- /dev/null +++ b/source/packages/@ada/website/src/northstar-plus/components/PercentagesSelector/components/CheckboxInput/index.tsx @@ -0,0 +1,70 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { Theme, makeStyles } from 'aws-northstar'; +import React from 'react'; + +const useStyles = makeStyles((theme) => ({ + input: ({ readonly }) => ({ + appearance: 'none', + width: theme.spacing(2), + height: theme.spacing(2), + borderRadius: '100%', + backgroundColor: theme.palette.grey[100], + transition: 'background 300ms ease-in-out', + outline: 'none', + cursor: readonly ? undefined : 'pointer', + margin: theme.spacing(0.4), + padding: 0, + + "&:before": { + position: "absolute", + display: "block", + fontSize: "10px", + color: theme.palette.grey[900], + padding: theme.spacing(0.2), + borderRadius: theme.spacing(0.2), + opacity: 0.5, + willChange: "opacity, transform", + transition: "opacity 150ms ease-in-out, transform 150ms ease-in-out", + transform: 'translate(0, -20px)', + content: 'attr(value) "%"', + }, + + "&:checked": { + backgroundColor: readonly ? theme.palette.grey[900] : theme.palette.info.dark, + + "&:before": { + opacity: 1, + color: theme.palette.grey[100], + backgroundColor: readonly ? theme.palette.grey[900] : theme.palette.info.dark, + } + } + }), +})); + +export interface CheckboxInputProps { + name: string; + value: number; + checked: boolean; + readonly?: boolean; + onChange: React.ChangeEventHandler; +} + +export const CheckboxInput: React.FC = ({ + name, + value, + checked, + readonly, + onChange, +}) => { + const styles = useStyles({ readonly }); + + return (); +} diff --git a/source/packages/@ada/website/src/northstar-plus/components/PercentagesSelector/index.tsx b/source/packages/@ada/website/src/northstar-plus/components/PercentagesSelector/index.tsx new file mode 100644 index 0000000..8dc1d5f --- /dev/null +++ b/source/packages/@ada/website/src/northstar-plus/components/PercentagesSelector/index.tsx @@ -0,0 +1,68 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { Box, makeStyles } from 'aws-northstar'; +import { CheckboxInput } from './components/CheckboxInput'; +import { isEqual } from 'lodash'; +import React, { useCallback, useEffect, useState } from 'react'; + +const useStyles = makeStyles((theme) => ({ + container: { + marginTop: theme.spacing(2), + }, +})); + +const marks = Array.from(Array(20).keys()).map(k => (k + 1) * 5); + +export interface PercentagesSelectorProps { + name: string; + value?: number[]; + onChange?: (value: number[]) => void; + isReadOnly?: (value: number) => boolean; +} + +export const PercentagesSelector: React.FC = ({ + name, + isReadOnly, + onChange, + ...props +}) => { + const styles = useStyles(); + const [value, setValue] = useState(props.value || []); + + useEffect(() => { + setValue(prev => { + if (isEqual(props.value, prev)) { + return props.value || []; + } + + return prev; + }) + }, [props.value]); + + const handleChange = useCallback((event) => { + const targetValue = Number(event.target.value); + const readonly = isReadOnly?.(targetValue); + + if (!readonly) { + let newValue = []; + if (!event.target.checked) { + newValue = value.filter(x => x !== targetValue); + } else { + newValue = [...value, targetValue].sort((a, b) => a - b); + } + setValue(newValue); + onChange?.(newValue); + } + }, [value, onChange]); + + return ( + {marks.map(m => ( ))} + ); +} diff --git a/source/packages/@ada/website/src/northstar-plus/components/index.ts b/source/packages/@ada/website/src/northstar-plus/components/index.ts index 38b2798..36112b3 100644 --- a/source/packages/@ada/website/src/northstar-plus/components/index.ts +++ b/source/packages/@ada/website/src/northstar-plus/components/index.ts @@ -18,4 +18,6 @@ export * from './Tag'; export * from './Badge'; export * from './SummaryRenderer'; export * from './KeyValuePair'; +export * from './PercentagesSelector'; export * from './skeletons'; + diff --git a/source/packages/@ada/website/src/testing/api.ts b/source/packages/@ada/website/src/testing/api.ts index 8c0c302..41a5e8c 100644 --- a/source/packages/@ada/website/src/testing/api.ts +++ b/source/packages/@ada/website/src/testing/api.ts @@ -14,14 +14,14 @@ import { delay, getOntologyIdString } from '$common/utils'; */ export function applyDefaultApiOperationMocks() { // Identity (users, groups, machines, tokens) - API.listIdentityUsers.mockResolvedValue({ users: fixtures.USERS }); - API.listIdentityGroups.mockResolvedValue({ groups: fixtures.GROUPS }); - API.getIdentityMachine.mockResolvedValue({ machineId: TEST_USER.id }); - API.listIdentityMachineTokens.mockResolvedValue({ tokens: [] }); + API.listIdentityUsers.mockResolvedValue({ users: fixtures.USERS } as never); + API.listIdentityGroups.mockResolvedValue({ groups: fixtures.GROUPS } as never); + API.getIdentityMachine.mockResolvedValue({ machineId: TEST_USER.id } as never); + API.listIdentityMachineTokens.mockResolvedValue({ tokens: [] } as never); // Domains - API.getDataProductDomain.mockResolvedValue(fixtures.DOMAIN); - API.listDataProductDomains.mockResolvedValue({ domains: fixtures.DOMAINS }); + API.getDataProductDomain.mockResolvedValue(fixtures.DOMAIN as never); + API.listDataProductDomains.mockResolvedValue({ domains: fixtures.DOMAINS } as never); applyDataProductApiMocks(); @@ -35,8 +35,9 @@ export function applyDefaultApiOperationMocks() { } export function applyDataProductApiMocks() { - API.listDataProductDomainDataProducts.mockResolvedValue({ dataProducts: fixtures.DATA_PRODUCTS }); + API.listDataProductDomainDataProducts.mockResolvedValue({ dataProducts: fixtures.DATA_PRODUCTS } as never); + //@ts-ignore API.getDataProductDomainDataProduct.mockImplementation(async ({ domainId, dataProductId }) => { const entity = fixtures.DATA_PRODUCTS.find((fixture) => { return fixture.domainId === domainId && fixture.dataProductId === dataProductId; @@ -45,6 +46,7 @@ export function applyDataProductApiMocks() { throw new Error('Data Product not found!'); }); + //@ts-ignore API.getGovernancePolicyDomainDataProduct.mockImplementation(async ({ domainId, dataProductId }) => { return ( fixtures.DATA_PRODUCT_POLICIES.find((fixture) => { @@ -53,25 +55,28 @@ export function applyDataProductApiMocks() { ); }); - API.postDataProductScriptsValidate.mockResolvedValue({ report: { errors: [], passed: true } }); + //@ts-ignore + API.postDataProductScriptsValidate.mockResolvedValue({ report: { errors: [], passed: true } } as never); - API.postDataProductPreviewDomainDataProduct.mockResolvedValue({ previewId: DATAPRODUCT_PREVIEW_ID }); - API.getDataProductPreviewDomainDataProduct.mockResolvedValue(DATAPRODUCT_PREVIEW); + API.postDataProductPreviewDomainDataProduct.mockResolvedValue({ previewId: DATAPRODUCT_PREVIEW_ID } as never); + API.getDataProductPreviewDomainDataProduct.mockResolvedValue(DATAPRODUCT_PREVIEW as never); } export function applyGovernanceApiMocks() { - API.listOntologies.mockResolvedValue({ ontologies: fixtures.ONTOLOGIES }); + API.listOntologies.mockResolvedValue({ ontologies: fixtures.ONTOLOGIES } as never); + //@ts-ignore API.getOntology.mockImplementation(async ({ ontologyNamespace, ontologyId }): Promise => { return fixtures.ONTOLOGIES.find( (fixture) => getOntologyIdString(fixture) === getOntologyIdString({ ontologyId, ontologyNamespace }), ); }); - API.getGovernancePolicyAttributes.mockResolvedValue({ attributeIdToLensId: {} }); + API.getGovernancePolicyAttributes.mockResolvedValue({ attributeIdToLensId: {} } as never); - API.getGovernancePolicyAttributes.mockResolvedValue({ attributeIdToLensId: {} }); + API.getGovernancePolicyAttributes.mockResolvedValue({ attributeIdToLensId: {} } as never); + //@ts-ignore API.getGovernancePolicyAttributesGroup.mockImplementation(async ({ group, attributeId, ontologyNamespace }) => { const namespaceAndAttributeId = getOntologyIdString({ ontologyId: attributeId, ontologyNamespace }); const crud: CreateAndUpdateDetails = @@ -108,6 +113,8 @@ export function applyGovernanceApiMocks() { namespaceAndAttributeId, }; }); + + //@ts-ignore API.getGovernancePolicyAttributeValuesGroup.mockImplementation(async ({ group, attributeId, ontologyNamespace }) => { const namespaceAndAttributeId = getOntologyIdString({ ontologyId: attributeId, ontologyNamespace }); const crud: CreateAndUpdateDetails = @@ -146,8 +153,9 @@ export function applyGovernanceApiMocks() { } export function applyIdentityProviderApiMocks() { - API.listIdentityProviders.mockResolvedValue({ providers: fixtures.IDENTITY_PROVIDERS }); + API.listIdentityProviders.mockResolvedValue({ providers: fixtures.IDENTITY_PROVIDERS } as never); + //@ts-ignore API.getIdentityProvider.mockImplementation(async ({ identityProviderId }): Promise => { const entity = fixtures.IDENTITY_PROVIDERS.find((fixture) => fixture.identityProviderId === identityProviderId); if (entity) return entity; @@ -158,19 +166,21 @@ export function applyIdentityProviderApiMocks() { export function applyQueryExecutionApiMocks(variant?: 'delayed') { switch (variant) { case 'delayed': { + //@ts-ignore API.postQuery.mockImplementation(async () => { await delay(100); return fixtures.QUERY_EXECUTION; }); [QueryExecutionStatus.QUEUED, QueryExecutionStatus.RUNNING, QueryExecutionStatus.SUCCEEDED].forEach((status) => { - API.getQueryStatus.mockResolvedValueOnce({ status }); + API.getQueryStatus.mockResolvedValueOnce({ status } as never); }); API.getQueryStatus.mockResolvedValue({ status: QueryExecutionStatus.SUCCEEDED, - }); + } as never); + //@ts-ignore API.listQueryResults.mockImplementation(async () => { await delay(100); return fixtures.QUERY_EXECUTION_RESULT; @@ -178,26 +188,27 @@ export function applyQueryExecutionApiMocks(variant?: 'delayed') { break; } default: { - API.postQuery.mockResolvedValue(fixtures.QUERY_EXECUTION); + API.postQuery.mockResolvedValue(fixtures.QUERY_EXECUTION as never); API.getQueryStatus.mockResolvedValue({ status: QueryExecutionStatus.SUCCEEDED, - }); + } as never); API.listQueryResults.mockResolvedValue({ ...fixtures.QUERY_EXECUTION_RESULT, - }); + } as never); } } } export function applyNotificationApiMocks() { - API.listNotifications.mockResolvedValue({ notifications: fixtures.NOTIFICATIONS }); + API.listNotifications.mockResolvedValue({ notifications: fixtures.NOTIFICATIONS } as never); } export function applyApiAccessPolicyMocks() { - API.listApiAccessPolicies.mockResolvedValue({ policies: fixtures.API_ACCESS_POLICIES }); + API.listApiAccessPolicies.mockResolvedValue({ policies: fixtures.API_ACCESS_POLICIES } as never); + //@ts-ignore API.getApiAccessPolicy.mockImplementation((params) => { const policy = fixtures.API_ACCESS_POLICIES.find((policy) => policy.apiAccessPolicyId === params.apiAccessPolicyId); if (policy) return Promise.resolve(policy); diff --git a/source/packages/@ada/website/src/views/admin/views/Teardown/index.stories.tsx b/source/packages/@ada/website/src/views/admin/views/Teardown/index.stories.tsx index 40d8edb..c437d39 100644 --- a/source/packages/@ada/website/src/views/admin/views/Teardown/index.stories.tsx +++ b/source/packages/@ada/website/src/views/admin/views/Teardown/index.stories.tsx @@ -54,7 +54,7 @@ export default { // More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args const Template: ComponentStory = (args) => { useImmediateEffect(() => { - API.deleteAdministrationStartTearDownDestroyData.mockResolvedValue(TEARDOWN_DETAILS); + API.deleteAdministrationStartTearDownDestroyData.mockResolvedValue(TEARDOWN_DETAILS as never); return () => { jest.clearAllMocks(); }; diff --git a/source/packages/@ada/website/src/views/admin/views/router.tsx b/source/packages/@ada/website/src/views/admin/views/router.tsx index 1d3c08e..0154ae2 100644 --- a/source/packages/@ada/website/src/views/admin/views/router.tsx +++ b/source/packages/@ada/website/src/views/admin/views/router.tsx @@ -1,10 +1,12 @@ /*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ import { AdminGate } from '../components/AdminGate'; +import { BudgetRouter } from '$views/budget/views/router'; import { CostRouter } from '$views/cost/views/router'; import { IdentityProviderRouter } from '$views/identity-provider/views/router'; import { Redirect, Route, Switch, useRouteMatch } from 'react-router-dom'; import { TeardownView } from './Teardown'; +import { VisualisationRouter } from '$views/visualisation/views/router'; export const AdminRouter = () => { const { path } = useRouteMatch(); @@ -14,6 +16,8 @@ export const AdminRouter = () => { + + diff --git a/source/packages/@ada/website/src/views/budget/components/BudgetWizard/index.tsx b/source/packages/@ada/website/src/views/budget/components/BudgetWizard/index.tsx new file mode 100644 index 0000000..5885149 --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/components/BudgetWizard/index.tsx @@ -0,0 +1,66 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { FormData, buildSteps } from './schema'; +import { WizardLayout, WizardStep, useNotificationContext } from '$northstar-plus'; +import { apiHooks } from '$api'; +import { useHistory } from 'react-router-dom'; +import { useI18nContext } from '$strings'; +import { useUserProfile } from '$core/provider/UserProvider'; +import React, { useCallback, useMemo } from 'react'; + +export interface BudgetWizardProps { + initialValues?: FormData; +} + +export const BudgetWizard: React.FC = ({ initialValues }) => { + const { LL } = useI18nContext(); + const history = useHistory(); + const { addError, addSuccess } = useNotificationContext(); + const { email } = useUserProfile(); + const isNew = useMemo(() => !initialValues, [initialValues]); + + const [postBudget, { isLoading: isSubmitting }] = apiHooks.usePostAdministrationBudgets({ + onSuccess: (output) => { + addSuccess({ + header: isNew ? LL.ENTITY.Budget__CREATED(output.budgetName) : LL.ENTITY.Budget__UPDATED(output.budgetName), + }); + history.push(`/admin/budget`); + }, + onError: (error, _input) => { + addError({ + header: isNew ? LL.ENTITY.Budget__FAILED_TO_CREATE() : LL.ENTITY.Budget__FAILED_TO_UPDATE(), + content: error.message, + }); + }, + }); + + const steps = useMemo(() => { + return buildSteps(isNew, email); + }, [isNew, email]); + + const handleSubmit = useCallback((formData: Record) => { + const data = formData as FormData; + postBudget({ + budgetInput: { + budgetLimit: Number(data.budgetLimit), + softNotifications: data.softNotifications || [], + subscriberList: data.subscriberList?.map((item: any) => { + return item.value; + }) || [], + }, + }); + }, []); + + const handleCancel = useCallback(() => { + history.goBack(); + }, [history]); + + return ( + + ); +}; diff --git a/source/packages/@ada/website/src/views/budget/components/BudgetWizard/schema.tsx b/source/packages/@ada/website/src/views/budget/components/BudgetWizard/schema.tsx new file mode 100644 index 0000000..7a3df43 --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/components/BudgetWizard/schema.tsx @@ -0,0 +1,93 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { KeyValuePair, Stack, componentTypes, validatorTypes } from 'aws-northstar'; +import { LL } from '$strings'; +import { PercentagesSelectorCustomComponent } from '../PercentagesSelectorCustomComponent'; +import { WizardStep } from '$northstar-plus'; + +export type FormData = { + budgetLimit: string; + subscriberList?: { + label: string; + value: string; + }[]; + softNotifications?: number[]; +} + +export const buildSteps = (isNew: boolean, email?: string): WizardStep[] => { + return [ + { + title: isNew ? LL.ENTITY.Budget__CREATE() : LL.ENTITY.Budget__UPDATE(), + description: LL.VIEW.BUDGET.WIZARD.description(), + fields: [ + { + component: componentTypes.TEXT_FIELD, + name: 'budgetLimit', + type: 'number', + label: LL.ENTITY['Budget@'].budgetLimit.label(), + description: LL.ENTITY['Budget@'].budgetLimit.description(), + placeholder: LL.ENTITY['Budget@'].budgetLimit.placeholder(), + isRequired: true, + validate: [ + { + type: validatorTypes.REQUIRED, + }, + ], + }, + { + component: componentTypes.SELECT, + name: 'subscriberList', + label: LL.ENTITY['Budget@'].subscriberList.label(), + description: LL.ENTITY['Budget@'].subscriberList.description(), + placeholder: LL.ENTITY['Budget@'].subscriberList.placeholder(), + options: email ? [ + { + label: email, + value: email, + } + ] : [], + multiSelect: true, + freeSolo: true, + isRequired: true, + validate: [ + { + type: validatorTypes.REQUIRED, + }, + ], + }, + { + component: componentTypes.CUSTOM, + name: 'softNotifications', + label: LL.ENTITY['Budget@'].softNotifications.label(), + description: LL.ENTITY['Budget@'].softNotifications.description(), + CustomComponent: PercentagesSelectorCustomComponent, + initialValue: [100] + }, + ], + }, + { + title: LL.VIEW.wizard.STEP.review.title(), + fields: [ + { + component: componentTypes.REVIEW, + name: 'review', + Template: ({ data }: { data: FormData }) => { + return ( + + + item.value).join(', ')} + /> + + + ); + }, + }, + ], + }, + ]; +}; diff --git a/source/packages/@ada/website/src/views/budget/components/DeleteBudgetButton/index.tsx b/source/packages/@ada/website/src/views/budget/components/DeleteBudgetButton/index.tsx new file mode 100644 index 0000000..dfebb79 --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/components/DeleteBudgetButton/index.tsx @@ -0,0 +1,74 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { Button, DeleteConfirmationDialog } from 'aws-northstar'; +import { LLSafeHtmlString, useI18nContext } from '$strings'; +import { apiHooks } from '$api'; +import { useCallback, useState } from 'react'; +import { useHistory } from 'react-router-dom'; +import { useNotificationContext } from '$northstar-plus'; + +export const DeleteBudgetButton: React.FC = () => { + const { LL } = useI18nContext(); + const history = useHistory(); + const [showConfirm, setShowConfirm] = useState(false); + const [isProcessing, setIsProcessing] = useState(false); + const { addSuccess, addError } = useNotificationContext(); + + const handleDeleted = useCallback(() => { + window.setTimeout(() => { + history.go(0); + }, 2000); + }, []); + + const onError = useCallback( + (error) => { + setIsProcessing(false); + setShowConfirm(false); + addError({ + header: LL.VIEW.BUDGET.DELETE.NOTIFY.error.header(), + content: error.message, + }); + }, + [], + ); + + const onSuccess = useCallback( + () => { + setIsProcessing(false); + setShowConfirm(false); + addSuccess({ + header: LL.VIEW.BUDGET.DELETE.NOTIFY.success.header(), + dismissible: false, + }); + handleDeleted(); + }, + [handleDeleted], + ); + + const [deleteBudgets] = apiHooks.useDeleteAdministrationBudgets({ + onError, + onSuccess, + }); + + const handleDelete = useCallback(async () => { + await deleteBudgets({}); + }, [handleDeleted, deleteBudgets]); + + return (<> + + {showConfirm && } + onCancelClicked={() => setShowConfirm(false)} + onDeleteClicked={handleDelete} + loading={isProcessing} + > + {LL.VIEW.BUDGET.DELETE.CONFIRM.content()} + } + ); +} + + diff --git a/source/packages/@ada/website/src/views/budget/components/Details/index.tsx b/source/packages/@ada/website/src/views/budget/components/Details/index.tsx new file mode 100644 index 0000000..ed70906 --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/components/Details/index.tsx @@ -0,0 +1,114 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { + Box, + Column, + ColumnLayout, + Container, + NORTHSTAR_COLORS, ProgressBar, + Stack, + makeStyles, +} from 'aws-northstar'; +import { BudgetDetails as Budget } from '@ada/api-client'; +import { NotificationCard } from '../NotificationCard'; +import { useI18nContext } from '$strings'; +import React, { useMemo } from 'react'; + +export interface BudgetDetailsProps { + budget: Budget; +} + +const useStyles = makeStyles({ + budgetAlarmed: { + "& div.MuiLinearProgress-root": { + backgroundColor: NORTHSTAR_COLORS.RED, + }, + "& span.MuiTypography-root": { + color: NORTHSTAR_COLORS.RED, + fontWeight: 900, + } + }, + budgetAmount: { + fontSize: '48px', + }, + notificationCard: { + "& span.MuiCardHeader-title": { + fontSize: '20px', + color: NORTHSTAR_COLORS.BLUE + } + } +}); + +export const BudgetDetails: React.FC = ({ budget }) => { + const styles = useStyles(); + const { LL } = useI18nContext(); + + const actualSpend = useMemo(() => { + return Math.round((budget.actualSpend / budget.budgetLimit) * 10000) / 100; + }, []); + + const forecastedSpend = useMemo(() => { + return Math.round((budget.forecastedSpend / budget.budgetLimit) * 10000) / 100; + }, []); + + const sortedNotifications = useMemo(() => { + return budget.softNotifications.sort((a, b) => a.threshold - b.threshold); + }, [budget.softNotifications]); + + return ( + + + + ${budget.budgetLimit} + + + + + + + = 100 ? styles.budgetAlarmed : undefined} + > + + + + + = 100 ? styles.budgetAlarmed : undefined} + > + + + + + + + + {sortedNotifications.map(x => ())} + + + ); +} \ No newline at end of file diff --git a/source/packages/@ada/website/src/views/budget/components/LandingPage/index.tsx b/source/packages/@ada/website/src/views/budget/components/LandingPage/index.tsx new file mode 100644 index 0000000..5617940 --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/components/LandingPage/index.tsx @@ -0,0 +1,14 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { Link, Stack, Text } from 'aws-northstar'; +import { useI18nContext } from '$strings'; +import React from 'react'; + +export const BudgetLandingPage: React.FC = () => { + const { LL } = useI18nContext(); + return + + {LL.VIEW.BUDGET.DETAILS.intro.prefix()} Budget {LL.VIEW.BUDGET.DETAILS.intro.suffix()} + + ; +} \ No newline at end of file diff --git a/source/packages/@ada/website/src/views/budget/components/NotificationCard/index.tsx b/source/packages/@ada/website/src/views/budget/components/NotificationCard/index.tsx new file mode 100644 index 0000000..555ba9d --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/components/NotificationCard/index.tsx @@ -0,0 +1,59 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { + Box, + Card, + Container, + KeyValuePair, + Stack, + StatusIndicator +} from 'aws-northstar'; +import { useI18nContext } from '$strings'; +import React, { useMemo } from 'react'; + +export const NotificationCard: React.FC<{ + budgetLimit: number, + threshold: number, + state?: string, + className: string, + subscriberList: string[], +}> = ({ + budgetLimit, + threshold, + state, + subscriberList, + className, +}) => { + const { LL } = useI18nContext(); + const thresholdAmount = useMemo(() => { + return Math.round(budgetLimit * threshold / 100).toFixed(2); + }, [budgetLimit, threshold]); + + const definition = useMemo(() => { + return LL.VIEW.BUDGET.DETAILS.NOTIFICATION.contentDefiniton(threshold, thresholdAmount, budgetLimit.toFixed(2)); + }, [thresholdAmount, threshold]); + + const status = useMemo(() => { + if (state === 'OK') { + return ({LL.VIEW.BUDGET.DETAILS.NOTIFICATION.statusNotExceeded()}); + } + + return ({LL.VIEW.BUDGET.DETAILS.NOTIFICATION.statusExceeded()}) + }, []); + + return ( + + + + + + + {subscriberList.map(x => `- ${x}`)} + + } /> + + + + ); +} diff --git a/source/packages/@ada/website/src/views/budget/components/PercentagesSelectorCustomComponent/index.tsx b/source/packages/@ada/website/src/views/budget/components/PercentagesSelectorCustomComponent/index.tsx new file mode 100644 index 0000000..e95367d --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/components/PercentagesSelectorCustomComponent/index.tsx @@ -0,0 +1,20 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { FormField } from 'aws-northstar'; +import { PercentagesSelector } from '$northstar-plus'; +import React from 'react'; + +export const PercentagesSelectorCustomComponent: React.FC = ({ + input, + ...props +}) => { + return ( + value === 100} + /> + + ) +} \ No newline at end of file diff --git a/source/packages/@ada/website/src/views/budget/index.ts b/source/packages/@ada/website/src/views/budget/index.ts new file mode 100644 index 0000000..be7cc69 --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/index.ts @@ -0,0 +1,3 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +export * from './views'; diff --git a/source/packages/@ada/website/src/views/budget/views/Create/index.test.tsx b/source/packages/@ada/website/src/views/budget/views/Create/index.test.tsx new file mode 100644 index 0000000..4762adf --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/views/Create/index.test.tsx @@ -0,0 +1,24 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { CreateBudgetView } from '.'; +import { MockMetaProvider } from '$core/provider/mock'; +import { Route } from 'react-router'; +import { act, render, screen } from '@testing-library/react'; + +jest.mock('@ada/api-client'); + +describe('CreateBudgetView', () => { + it('should render', async () => { + render( + + + + + ); + + await act(async () => { + expect(await screen.findAllByText('Create budget')).toHaveLength(2); + expect(screen.getByText('Enter budget details')).toBeVisible(); + }); + }); +}); diff --git a/source/packages/@ada/website/src/views/budget/views/Create/index.tsx b/source/packages/@ada/website/src/views/budget/views/Create/index.tsx new file mode 100644 index 0000000..c28418b --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/views/Create/index.tsx @@ -0,0 +1,25 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { BudgetWizard } from '../../components/BudgetWizard'; +import { ManagedHelpPanel } from '$northstar-plus'; +import { useI18nContext } from '$strings'; +import React from 'react'; + +export const CreateBudgetView: React.FC = () => { + return ( + <> + + + + ); +}; + +const HelpInfo = () => { + const { LL } = useI18nContext(); + + return ( + + {import('@ada/strings/markdown/view/budget/help.md')} + + ); +}; diff --git a/source/packages/@ada/website/src/views/budget/views/Root/index.test.tsx b/source/packages/@ada/website/src/views/budget/views/Root/index.test.tsx new file mode 100644 index 0000000..bd0c929 --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/views/Root/index.test.tsx @@ -0,0 +1,68 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { MOCK_API_CLIENT as API, } from '@ada/api-client/mock'; +import { BudgetRootView } from '.'; +import { LL } from '@ada/strings'; +import { MockMetaProvider } from '$core/provider/mock'; +import { Route } from 'react-router'; +import { render, screen } from '@testing-library/react'; +jest.mock('@ada/api-client'); + +export const EXPECTED_GET_BUDGET_OUTPUT = { + budgetLimit: 300, + actualSpend: 120, + forecastedSpend: 1000, + softNotifications: [ + { + state: "ALARM", + threshold: 30 + }, + { + state: "ALARM", + threshold: 60 + }, + { + state: "OK", + threshold: 100 + }, + ], + subscriberList: ['test@example.com', 'test@domain.example.com'] +} + +describe('BudgetRootView', () => { + it('should render BudgetDetail if budget exists', async () => { + API.getAdministrationBudgets.mockResolvedValue(EXPECTED_GET_BUDGET_OUTPUT as never); + + render( + + + + + ); + + expect(await screen.findByText(LL.VIEW.BUDGET.DETAILS.budgetAmount())).toBeVisible(); + expect(await screen.findByText(LL.ENTITY.Budget__UPDATE())).toBeVisible(); + expect(await screen.findByText(LL.ENTITY.Budget__DELETE())).toBeVisible(); + }); + + it('should render BudgetDetail if budget dost not exist', async () => { + //@ts-ignore + API.getAdministrationBudgets.mockImplementation(async () => { + throw { + message: 'Budget not found', + statusCode: 404 + }; + }); + + render( + + + + + ); + + expect(await screen.findByText(new RegExp(LL.VIEW.BUDGET.DETAILS.intro.prefix()))).toBeVisible(); + expect(await screen.findByText(new RegExp(LL.VIEW.BUDGET.DETAILS.intro.suffix()))).toBeVisible(); + expect(await screen.findByText(LL.ENTITY.Budget__CREATE())).toBeVisible(); + }); +}); diff --git a/source/packages/@ada/website/src/views/budget/views/Root/index.tsx b/source/packages/@ada/website/src/views/budget/views/Root/index.tsx new file mode 100644 index 0000000..2111d97 --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/views/Root/index.tsx @@ -0,0 +1,62 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { BudgetDetails } from '../../components/Details'; +import { BudgetLandingPage } from '../../components/LandingPage'; +import { Button, Inline } from 'aws-northstar'; +import { DeleteBudgetButton } from '../../components/DeleteBudgetButton'; +import { ErrorAlert } from '$common/components'; +import { ManagedHelpPanel, PageLayout, Skeletons } from '$northstar-plus'; +import { apiHooks } from '$api'; +import { isNotFoundError } from '$common/utils'; +import { useHistory } from 'react-router-dom'; +import { useI18nContext } from '@ada/strings/dist/i18n/i18n-react'; +import React, { useMemo } from 'react'; + +export interface BudgetRootViewProps { } + +export const BudgetRootView: React.FC = () => { + const { LL } = useI18nContext(); + const history = useHistory(); + const [budget, queryInfo] = apiHooks.useAdministrationBudgets({}); + + const actions = useMemo(() => { + return budget ? ( + + + ) : (); + }, [budget]); + + if (queryInfo.isLoading) { + return (<> + + + ); + } + + return ( + <> + + + {queryInfo.error && !isNotFoundError(queryInfo.error) ? + () : + budget ? + + : } + + + ); +}; + +const HelpInfo = () => { + const { LL } = useI18nContext(); + + return ( + + {import('@ada/strings/markdown/view/budget/help.md')} + + ); +}; diff --git a/source/packages/@ada/website/src/views/budget/views/Update/index.test.tsx b/source/packages/@ada/website/src/views/budget/views/Update/index.test.tsx new file mode 100644 index 0000000..6e3ec2a --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/views/Update/index.test.tsx @@ -0,0 +1,52 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { MOCK_API_CLIENT as API } from '@ada/api-client/mock'; +import { MockMetaProvider } from '$core/provider/mock'; +import { Route } from 'react-router'; +import { UpdateBudgetView } from '.'; +import { render, screen } from '@testing-library/react'; + +jest.mock('@ada/api-client'); + +export const EXPECTED_GET_BUDGET_OUTPUT = { + budgetLimit: 300, + actualSpend: 120, + forecastedSpend: 1000, + softNotifications: [ + { + state: "ALARM", + threshold: 30 + }, + { + state: "ALARM", + threshold: 60 + }, + { + state: "OK", + threshold: 100 + }, + ], + subscriberList: ['test@example.com', 'test@domain.example.com'] +} + +describe('UpdateBudgetView', () => { + it('should render', async () => { + API.getAdministrationBudgets.mockResolvedValue(EXPECTED_GET_BUDGET_OUTPUT as never); + + const { container } = render( + + + + + ); + + expect(await screen.findAllByText('Edit budget')).toHaveLength(2); + expect(screen.getByText('Enter budget details')).toBeVisible(); + expect(screen.getByLabelText('Budget Limit')).toHaveValue(300); + + const subscriberListComponents = container.querySelectorAll('.MuiChip-label'); + + expect(subscriberListComponents[0]).toHaveTextContent('test@example.com'); + expect(subscriberListComponents[1]).toHaveTextContent('test@domain.example.com'); + }); +}); diff --git a/source/packages/@ada/website/src/views/budget/views/Update/index.tsx b/source/packages/@ada/website/src/views/budget/views/Update/index.tsx new file mode 100644 index 0000000..a05fe08 --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/views/Update/index.tsx @@ -0,0 +1,65 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { BudgetWizard } from '../../components/BudgetWizard'; +import { ErrorAlert } from '$common/components'; +import { Link } from 'aws-northstar'; +import { ManagedHelpPanel, PageNotFound } from '$northstar-plus'; +import { apiHooks } from '$api'; +import { isNotFoundError } from '$common/utils'; +import { useI18nContext } from '$strings'; +import React, { useMemo } from 'react'; + +export const UpdateBudgetView: React.FC = () => { + const { LL } = useI18nContext(); + const [ budget, queryInfo ] = apiHooks.useAdministrationBudgets({}); + + const formData = useMemo(() => { + if(budget) { + return { + ...budget, + budgetLimit: String(budget.budgetLimit), + softNotifications: budget.softNotifications?.map(n => n.threshold || 0).sort((a, b) => a-b), + subscriberList: budget.subscriberList?.map(s => ({ + label: s, + value: s, + })) + } + } + return undefined; + }, [budget]); + + if (isNotFoundError(queryInfo.error)) { + return ( + + {LL.VIEW.error.notFoundOf({ type: LL.ENTITY.Budgets() })} +
{queryInfo.error?.message}
+ + } + destinationLinks={[ + + {LL.VIEW.misc.seeAll(LL.ENTITY.Budget())} + , + ]} + /> + ); + } + + return ( + <> + + {queryInfo.error ? : } + + ); +}; + +const HelpInfo = () => { + const { LL } = useI18nContext(); + + return ( + + {import('@ada/strings/markdown/view/budget/help.md')} + + ); +}; diff --git a/source/packages/@ada/website/src/views/budget/views/index.ts b/source/packages/@ada/website/src/views/budget/views/index.ts new file mode 100644 index 0000000..8863de3 --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/views/index.ts @@ -0,0 +1,4 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +export { BudgetRouter as Router } from './router'; +export { BudgetRootView as RootView } from './Root'; diff --git a/source/packages/@ada/website/src/views/budget/views/router.tsx b/source/packages/@ada/website/src/views/budget/views/router.tsx new file mode 100644 index 0000000..93d50ab --- /dev/null +++ b/source/packages/@ada/website/src/views/budget/views/router.tsx @@ -0,0 +1,21 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { AdminGate } from '$views/admin/components/AdminGate'; +import { BudgetRootView } from '$views/budget/views/Root'; +import { CreateBudgetView } from './Create'; +import { Route, Switch, useRouteMatch } from 'react-router-dom'; +import { UpdateBudgetView } from './Update'; + +export const BudgetRouter = () => { + const { path } = useRouteMatch(); + + return ( + + + + + + + + ); +}; diff --git a/source/packages/@ada/website/src/views/cost/views/Root/index.stories.tsx b/source/packages/@ada/website/src/views/cost/views/Root/index.stories.tsx index 8af62ea..f59b8eb 100644 --- a/source/packages/@ada/website/src/views/cost/views/Root/index.stories.tsx +++ b/source/packages/@ada/website/src/views/cost/views/Root/index.stories.tsx @@ -22,7 +22,7 @@ const Template: ComponentStory = (args, context) => { useImmediateEffect(() => { switch (context.parameters.variant) { case 'errorState': { - API.listCosts.mockRejectedValue(new Error('Failed to fetch const')); + API.listCosts.mockRejectedValue(new Error('Failed to fetch const') as never); break; } case 'zeroState': { @@ -30,11 +30,11 @@ const Template: ComponentStory = (args, context) => { dimensionValueAttributes: [], groupDefinitions: [], resultsByTime: [], - }); + } as never); break; } default: { - API.listCosts.mockResolvedValue(MOCK_COSTS); + API.listCosts.mockResolvedValue(MOCK_COSTS as never); } } }); diff --git a/source/packages/@ada/website/src/views/data-product/components/schema/SchemaRenderer/index.stories.tsx b/source/packages/@ada/website/src/views/data-product/components/schema/SchemaRenderer/index.stories.tsx index a38acb9..c5c24e0 100644 --- a/source/packages/@ada/website/src/views/data-product/components/schema/SchemaRenderer/index.stories.tsx +++ b/source/packages/@ada/website/src/views/data-product/components/schema/SchemaRenderer/index.stories.tsx @@ -32,12 +32,14 @@ const Template: ComponentStory = (args) => { const refetchCount = useRef(0); useImmediateEffect(() => { - API.listOntologies.mockResolvedValue({ ontologies: fixtures.ONTOLOGIES }); - API.listIdentityGroups.mockResolvedValue({ groups: fixtures.GROUPS }); + API.listOntologies.mockResolvedValue({ ontologies: fixtures.ONTOLOGIES } as never); + API.listIdentityGroups.mockResolvedValue({ groups: fixtures.GROUPS } as never); + //@ts-ignore API.getDataProductDomainDataProduct.mockImplementation(() => { entityRef.current = fixtures.DATA_PRODUCT; return Promise.resolve(entityRef.current); }); + //@ts-ignore API.putDataProductDomainDataProduct.mockImplementation(async ({ dataProductInput }) => { await delay(10); diff --git a/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/helpers.ts b/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/helpers.ts index 02beace..c70cb1d 100644 --- a/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/helpers.ts +++ b/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/helpers.ts @@ -137,7 +137,7 @@ export function useSourceTypeTestApiMocks() { API.postDataProductDomainDataProduct.mockResolvedValue({ domainId: fixtures.DATA_PRODUCT.domainId, dataProductId: fixtures.DATA_PRODUCT.dataProductId, - }); + } as never); return () => { jest.clearAllMocks(); }; diff --git a/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/index.test.tsx b/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/index.test.tsx index c9fe8a8..412617a 100644 --- a/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/index.test.tsx +++ b/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/index.test.tsx @@ -26,13 +26,13 @@ describe('CreateDataProductView', () => { { namespace: 'global', scriptId: 'script-1', name: 'First Script', source: 'scriptContents' } as any, { namespace: 'global', scriptId: 'script-2', name: 'Second Script', source: 'scriptContents' } as any, ], - }); + } as never); API.listIdentityGroups.mockResolvedValue({ groups: [{ groupId: 'group-1' }, { groupId: 'group-2' }], - }); + } as never); API.listDataProductDomains.mockResolvedValue({ domains: [{ domainId: 'domain-1', name: 'Domain One' }], - }); + } as never); }); describe('storybook', () => { @@ -48,7 +48,7 @@ describe('CreateDataProductView', () => { it('should show an error when we fail to fetch groups', async () => { API.listIdentityGroups.mockRejectedValue({ message: 'Groups not found!', - } as ApiError); + } as ApiError as never); const { findByText } = render( @@ -64,7 +64,7 @@ describe('CreateDataProductView', () => { it('should show an error when we fail to fetch scripts', async () => { API.listDataProductScripts.mockRejectedValue({ message: 'Scripts not found!', - } as ApiError); + } as ApiError as never); const { findByText } = render( diff --git a/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/source-type/dynamodb.test.tsx b/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/source-type/dynamodb.test.tsx index 6324640..437bc57 100644 --- a/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/source-type/dynamodb.test.tsx +++ b/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/source-type/dynamodb.test.tsx @@ -23,7 +23,7 @@ describe(`CreateDataProductView/${Connectors.AmazonDynamoDB.ID}`, () => { tableStreamArn: tableStreamARN, streamEnabled: true, streamViewType: 'NEW_AND_OLD_IMAGES', - }); + } as never); }); it(`happy path - ${Connectors.AmazonDynamoDB.ID}`, async () => { @@ -39,7 +39,7 @@ describe(`CreateDataProductView/${Connectors.AmazonDynamoDB.ID}`, () => { beforeEach(() => { API.getDataProductDynamoDBTableStream.mockResolvedValue({ crossAccount: true, - }); + } as never); }); it(`happy path - ${Connectors.AmazonDynamoDB.ID}`, async () => { diff --git a/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/source-type/google/analytics.stories.tsx b/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/source-type/google/analytics.stories.tsx index f8da967..5610f99 100644 --- a/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/source-type/google/analytics.stories.tsx +++ b/source/packages/@ada/website/src/views/data-product/views/Create/__tests__/source-type/google/analytics.stories.tsx @@ -25,9 +25,9 @@ import * as Connectors from '@ada/connectors'; const SOURCE_DETAILS: Connectors.GoogleAnalytics.ISourceDetails = { ...GOOGLE_SOURCE_DETAILS, - viewId: '12345678', - dimensions: 'ga:userType,ga:visitCount', - metrics: 'ga:visitors,ga:visits', + propertyId: '12345678', + dimensions: 'year,city', + metrics: 'engagedSessions,totalUsers', since: '2022-01-01', until: '2022-02-01', } @@ -51,8 +51,8 @@ Primary.play = async ({ canvasElement }) => { const { getByLabelText } = within(canvasElement); await act(async () => { - const input = getByLabelText('View Id'); - await userEvent.type(input, SOURCE_DETAILS.viewId, { delay: DELAY.TYPING }); + const input = getByLabelText('Property Id'); + await userEvent.type(input, SOURCE_DETAILS.propertyId, { delay: DELAY.TYPING }); }); for (const dimension of SOURCE_DETAILS.dimensions.split(',')) { diff --git a/source/packages/@ada/website/src/views/data-product/views/Create/utils/index.test.tsx b/source/packages/@ada/website/src/views/data-product/views/Create/utils/index.test.tsx index 595409d..fef1d0c 100644 --- a/source/packages/@ada/website/src/views/data-product/views/Create/utils/index.test.tsx +++ b/source/packages/@ada/website/src/views/data-product/views/Create/utils/index.test.tsx @@ -107,16 +107,16 @@ describe('data-product/create/utils', () => { Connectors.Id.GOOGLE_ANALYTICS, { ...MOCK_GOOGLE_SERVICE_ACCOUNT_INPUT, - viewId: '1234567891', + propertyId: '1234567891', since: '2020-12-31T10:29:28.094Z', until: '2021-11-26T10:29:28.094Z', dimensions: [ - { label: 'ga:country', value: 'ga:country' }, - { label: 'ga:userType', value: 'ga:userType' }, + { label: 'year', value: 'year' }, + { label: 'city', value: 'city' }, ], metrics: [ - { label: 'ga:sessions', value: 'ga:sessions' }, - { label: 'ga:users', value: 'ga:users' }, + { label: 'engagedSessions', value: 'engagedSessions' }, + { label: 'totalUsers', value: 'totalUsers' }, ], }, { @@ -125,11 +125,11 @@ describe('data-product/create/utils', () => { ); expect(sourceDetails).toMatchObject({ ...MOCK_GOOGLE_SERVICE_ACCOUNT_INPUT, - viewId: '1234567891', + propertyId: '1234567891', since: '2020-12-31', until: '2021-11-26', - dimensions: 'ga:country,ga:userType', - metrics: 'ga:sessions,ga:users', + dimensions: 'year,city', + metrics: 'engagedSessions,totalUsers', }); // validate output matches schema so will be accepable to api validation expect(Connectors.Schema.validate(Connectors.Id.GOOGLE_STORAGE, sourceDetails).errors).toEqual([]); @@ -578,14 +578,14 @@ describe('data-product/create/utils', () => { enableAutomaticPii: false, sourceDetails: { ...MOCK_GOOGLE_SERVICE_ACCOUNT_INPUT, - viewId: '1234567891', + propertyId: '1234567891', dimensions: [ - { label: 'ga:country', value: 'ga:country' }, - { label: 'ga:userType', value: 'ga:userType' }, + { label: 'year', value: 'year' }, + { label: 'city', value: 'city' }, ], metrics: [ - { label: 'ga:sessions', value: 'ga:sessions' }, - { label: 'ga:users', value: 'ga:users' }, + { label: 'engagedSessions', value: 'engagedSessions' }, + { label: 'totalUsers', value: 'totalUsers' }, ], }, updateTrigger: { @@ -603,9 +603,9 @@ describe('data-product/create/utils', () => { sourceType: Connectors.Id.GOOGLE_ANALYTICS, sourceDetails: { ...MOCK_GOOGLE_SERVICE_ACCOUNT_INPUT, - viewId: '1234567891', - dimensions: 'ga:country,ga:userType', - metrics: 'ga:sessions,ga:users', + propertyId: '1234567891', + dimensions: 'year,city', + metrics: 'engagedSessions,totalUsers', }, updateTrigger: { scheduleRate: 'rate(7 days)', diff --git a/source/packages/@ada/website/src/views/data-product/views/Detail/index.stories.tsx b/source/packages/@ada/website/src/views/data-product/views/Detail/index.stories.tsx index 0318405..b392032 100644 --- a/source/packages/@ada/website/src/views/data-product/views/Detail/index.stories.tsx +++ b/source/packages/@ada/website/src/views/data-product/views/Detail/index.stories.tsx @@ -32,6 +32,7 @@ const Template: ComponentStory = (args, context) = const entityRef = useRef(); useImmediateEffect(() => { + //@ts-ignore API.getDataProductDomainDataProduct.mockImplementation(() => { if (notFound) { return Promise.reject(new Error('Data Product not found!')); @@ -39,6 +40,7 @@ const Template: ComponentStory = (args, context) = entityRef.current = fixtures.DATA_PRODUCT; return Promise.resolve(entityRef.current); }); + //@ts-ignore API.putDataProductDomainDataProduct.mockImplementation(async ({ dataProductInput }) => { await delay(10); @@ -55,7 +57,7 @@ const Template: ComponentStory = (args, context) = [DefaultGroupIds.DEFAULT]: { access: DataProductAccess.READ_ONLY }, [DefaultGroupIds.POWER_USER]: { access: DataProductAccess.FULL }, } - }) + } as never) }); return ( diff --git a/source/packages/@ada/website/src/views/data-product/views/Detail/index.test.tsx b/source/packages/@ada/website/src/views/data-product/views/Detail/index.test.tsx index ca240cd..cec3ce7 100644 --- a/source/packages/@ada/website/src/views/data-product/views/Detail/index.test.tsx +++ b/source/packages/@ada/website/src/views/data-product/views/Detail/index.test.tsx @@ -49,8 +49,8 @@ describe('DataProductDetailView', () => { // TODO: Re-enable when default lenses are added back it.skip('should edit and save default lenses', async () => { - API.putDataProductDomainDataProduct.mockResolvedValue(fixtures.DATA_PRODUCT_WITH_ONE_DATASET); - API.getDataProductDomainDataProduct.mockResolvedValue(fixtures.DATA_PRODUCT_WITH_ONE_DATASET); + API.putDataProductDomainDataProduct.mockResolvedValue(fixtures.DATA_PRODUCT_WITH_ONE_DATASET as never); + API.getDataProductDomainDataProduct.mockResolvedValue(fixtures.DATA_PRODUCT_WITH_ONE_DATASET as never); const { findAllByText, findByText } = render( = (args) => { useImmediateEffect(() => { - API.putOntology.mockResolvedValue(NEW_ONTOLOGY); + API.putOntology.mockResolvedValue(NEW_ONTOLOGY as never); }) return ( diff --git a/source/packages/@ada/website/src/views/governance/views/Create/index.test.tsx b/source/packages/@ada/website/src/views/governance/views/Create/index.test.tsx index 3ac19f9..64757c7 100644 --- a/source/packages/@ada/website/src/views/governance/views/Create/index.test.tsx +++ b/source/packages/@ada/website/src/views/governance/views/Create/index.test.tsx @@ -6,7 +6,7 @@ import { composeStories } from '@storybook/testing-react'; import { delay } from '$common/utils'; jest.retryTimes(3); -jest.setTimeout(30000); +jest.setTimeout(40000); jest.mock('@ada/api-client'); diff --git a/source/packages/@ada/website/src/views/governance/views/Detail/index.test.tsx b/source/packages/@ada/website/src/views/governance/views/Detail/index.test.tsx index dd161a4..ae02163 100644 --- a/source/packages/@ada/website/src/views/governance/views/Detail/index.test.tsx +++ b/source/packages/@ada/website/src/views/governance/views/Detail/index.test.tsx @@ -32,7 +32,7 @@ describe('OntologyDetailView', () => { beforeEach(() => { jest.resetAllMocks(); - API.getOntology.mockResolvedValue(mockOntology); + API.getOntology.mockResolvedValue(mockOntology as never); API.listIdentityGroups.mockResolvedValue({ groups: [ @@ -40,20 +40,20 @@ describe('OntologyDetailView', () => { { groupId: DefaultGroupIds.POWER_USER, claims: [], members: [], apiAccessPolicyIds: [] }, { groupId: DefaultGroupIds.DEFAULT, claims: [], members: [], apiAccessPolicyIds: [] }, ], - }); + } as never); API.getGovernancePolicyAttributeValues.mockResolvedValueOnce({ attributeIdToSqlClause: { 'ontologyNamespace.ontologyId': '"ontologyNamespace.ontologyId" LIKE "% Vader"', }, - }); + } as never); API.getGovernancePolicyAttributeValues.mockResolvedValueOnce({ attributeIdToSqlClause: { 'ontologyNamespace.ontologyId': '"ontologyNamespace.ontologyId" LIKE "Luke %"', }, - }); + } as never); API.getGovernancePolicyAttributeValues.mockResolvedValueOnce({ attributeIdToSqlClause: {}, - }); + } as never); }); it('should show the ontology details', async () => { diff --git a/source/packages/@ada/website/src/views/governance/views/Root/index.stories.tsx b/source/packages/@ada/website/src/views/governance/views/Root/index.stories.tsx index e851280..7a2ece9 100644 --- a/source/packages/@ada/website/src/views/governance/views/Root/index.stories.tsx +++ b/source/packages/@ada/website/src/views/governance/views/Root/index.stories.tsx @@ -62,7 +62,8 @@ const Template: ComponentStory = (args) => { createdBy: TEST_USER.id, }, ], - }); + } as never); + //@ts-ignore API.getGovernancePolicyAttributes.mockImplementation(({ group }) => { switch (group) { case DefaultGroupIds.DEFAULT: { @@ -94,9 +95,11 @@ const Template: ComponentStory = (args) => { }); // introduce slight delay in mutations + //@ts-ignore API.putGovernancePolicyAttributes.mockImplementation(async (): Promise => { await delay(10); }); + //@ts-ignore API.deleteGovernancePolicyAttributes.mockImplementation(async (): Promise => { await delay(10); }); @@ -140,6 +143,7 @@ Coverage.play = async ({ canvasElement }) => { } // handle invalidation to refetch updated values + //@ts-ignore API.getGovernancePolicyAttributes.mockImplementation(({ group }) => { return Promise.resolve({ attributeIdToLensId: { diff --git a/source/packages/@ada/website/src/views/group/components/GroupWizard/index.test.tsx b/source/packages/@ada/website/src/views/group/components/GroupWizard/index.test.tsx index 9c9ec00..a00a9f5 100644 --- a/source/packages/@ada/website/src/views/group/components/GroupWizard/index.test.tsx +++ b/source/packages/@ada/website/src/views/group/components/GroupWizard/index.test.tsx @@ -12,7 +12,7 @@ describe('CreateGroupView', () => { it('should render', async () => { API.listApiAccessPolicies.mockResolvedValue({ policies: [{ apiAccessPolicyId: 'read-only', name: 'Read Only', resources: ['read*'] }], - }); + } as never); await act(async () => { const { findAllByText } = render( diff --git a/source/packages/@ada/website/src/views/group/views/Detail/index.test.tsx b/source/packages/@ada/website/src/views/group/views/Detail/index.test.tsx index 0ff1571..fc07820 100644 --- a/source/packages/@ada/website/src/views/group/views/Detail/index.test.tsx +++ b/source/packages/@ada/website/src/views/group/views/Detail/index.test.tsx @@ -30,22 +30,22 @@ describe('GroupDetailView', () => { beforeEach(() => { jest.clearAllMocks(); - API.getIdentityGroup.mockResolvedValue(GROUP); + API.getIdentityGroup.mockResolvedValue(GROUP as never); API.listIdentityGroups.mockResolvedValue({ groups: [GROUP], - }); + } as never); API.listIdentityUsers.mockResolvedValue({ users: [ { username: 'user-1', preferredUsername: 'user-1', name: 'User 1' }, { username: 'user-2', preferredUsername: 'user-2', name: 'User 2' }, ], - }); + } as never); API.listIdentityRequests.mockRejectedValue({ accessRequests: [], - }); + } as never); }); it('should show group details', async () => { const { findByText } = render( @@ -91,7 +91,7 @@ describe('GroupDetailView', () => { it('should show an error when the group does not exist', async () => { API.getIdentityGroup.mockRejectedValue({ message: 'Group not found!', - } as ApiError); + } as ApiError as never); const { findByText } = render( diff --git a/source/packages/@ada/website/src/views/group/views/Root/index.test.tsx b/source/packages/@ada/website/src/views/group/views/Root/index.test.tsx index 832b83e..ea9b8a6 100644 --- a/source/packages/@ada/website/src/views/group/views/Root/index.test.tsx +++ b/source/packages/@ada/website/src/views/group/views/Root/index.test.tsx @@ -26,10 +26,10 @@ API.listIdentityGroups.mockResolvedValue({ createdBy: 'user-a', }, ], -}); +} as never); API.listIdentityRequests.mockRejectedValue({ accessRequests: [], -}); +} as never); describe('GroupRootView', () => { it('should list all groups', async () => { diff --git a/source/packages/@ada/website/src/views/public/views/Root/index.stories.tsx b/source/packages/@ada/website/src/views/public/views/Root/index.stories.tsx index df12969..faef651 100644 --- a/source/packages/@ada/website/src/views/public/views/Root/index.stories.tsx +++ b/source/packages/@ada/website/src/views/public/views/Root/index.stories.tsx @@ -30,6 +30,7 @@ export default { const Template: ComponentStory = (args) => { useImmediateEffect(() => { + //@ts-ignore API.putIdentityRequest.mockImplementation(async (input) => { return input; }) diff --git a/source/packages/@ada/website/src/views/query/components/QueryWorkbench/index.stories.tsx b/source/packages/@ada/website/src/views/query/components/QueryWorkbench/index.stories.tsx index 09f227c..f48f1e4 100644 --- a/source/packages/@ada/website/src/views/query/components/QueryWorkbench/index.stories.tsx +++ b/source/packages/@ada/website/src/views/query/components/QueryWorkbench/index.stories.tsx @@ -22,11 +22,12 @@ export default { // More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args const Template: ComponentStory = (args) => { useImmediateEffect(() => { - API.listQueryNamespaceSavedQueries.mockResolvedValue({ queries: [SAVED_PRIVATE_QUERY] }); + API.listQueryNamespaceSavedQueries.mockResolvedValue({ queries: [SAVED_PRIVATE_QUERY] } as never); API.listQuerySavedQueries.mockResolvedValue({ queries: [], - }); + } as never); + //@ts-ignore API.putQuerySavedQuery.mockImplementation(({ queryId, savedQueryInput, namespace }) => { return Promise.resolve({ queryId, ...savedQueryInput, namespace }); }); @@ -40,19 +41,21 @@ const Template: ComponentStory = (args) => { // More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args const DeleteQueryTemplate: ComponentStory = (args) => { useImmediateEffect(() => { - API.listQueryNamespaceSavedQueries.mockResolvedValue({ queries: [SAVED_PRIVATE_QUERY] }); + API.listQueryNamespaceSavedQueries.mockResolvedValue({ queries: [SAVED_PRIVATE_QUERY] } as never); API.listQuerySavedQueries.mockResolvedValue({ queries: [], - }); + } as never); + //@ts-ignore API.deleteQuerySavedQuery.mockImplementation(() => { API.listQuerySavedQueries.mockResolvedValue({ queries: [], - }); - API.listQueryNamespaceSavedQueries.mockResolvedValue({ queries: [] }); + } as never); + API.listQueryNamespaceSavedQueries.mockResolvedValue({ queries: [] } as never); return Promise.resolve({} as SavedQuery); }); + //@ts-ignore API.putQuerySavedQuery.mockImplementation(({ queryId, savedQueryInput, namespace }) => { return Promise.resolve({ queryId, ...savedQueryInput, namespace }); }); diff --git a/source/packages/@ada/website/src/views/query/components/QueryWorkbench/index.test.tsx b/source/packages/@ada/website/src/views/query/components/QueryWorkbench/index.test.tsx index 7b4a3a0..97e57ec 100644 --- a/source/packages/@ada/website/src/views/query/components/QueryWorkbench/index.test.tsx +++ b/source/packages/@ada/website/src/views/query/components/QueryWorkbench/index.test.tsx @@ -17,7 +17,7 @@ describe('QueryWorkBench', () => { it('primary', async () => { API.listApiAccessPolicies.mockResolvedValue({ policies: [{ apiAccessPolicyId: 'read-only', name: 'Read Only', resources: ['read*'] }], - }); + } as never); const { findAllByText, container } = render(); expect(container).toBeDefined(); diff --git a/source/packages/@ada/website/src/views/query/views/Root/index.test.tsx b/source/packages/@ada/website/src/views/query/views/Root/index.test.tsx index d1fefff..c093ec3 100644 --- a/source/packages/@ada/website/src/views/query/views/Root/index.test.tsx +++ b/source/packages/@ada/website/src/views/query/views/Root/index.test.tsx @@ -15,10 +15,10 @@ describe('QueryRootView', () => { it('should execute a query', async () => { API.postQuery.mockResolvedValue({ executionId: EXECUTION_ID, - }); + } as never); API.getQueryStatus.mockResolvedValue({ status: QueryExecutionStatus.SUCCEEDED, - }); + } as never); API.listQueryResults.mockResolvedValue({ columns: [ { @@ -34,7 +34,7 @@ describe('QueryRootView', () => { { name: 'Darth Vader', lightsaber: 'red' }, { name: 'Obi Wan Kenobi', lightsaber: 'blue' }, ], - }); + } as never); const { findByText, findByTestId } = render( @@ -62,13 +62,13 @@ describe('QueryRootView', () => { it('should show an error when we fail to execute a query', async () => { API.postQuery.mockResolvedValue({ executionId: EXECUTION_ID, - }); + } as never); API.getQueryStatus.mockResolvedValue({ status: QueryExecutionStatus.FAILED, - }); + } as never); API.listQueryResults.mockRejectedValue({ message: 'Mock error message', - }); + } as never); const { findByText, findAllByText } = render( diff --git a/source/packages/@ada/website/src/views/user/components/dialog/CreateApiKeyDialog/index.stories.tsx b/source/packages/@ada/website/src/views/user/components/dialog/CreateApiKeyDialog/index.stories.tsx index ee50d5a..85044f5 100644 --- a/source/packages/@ada/website/src/views/user/components/dialog/CreateApiKeyDialog/index.stories.tsx +++ b/source/packages/@ada/website/src/views/user/components/dialog/CreateApiKeyDialog/index.stories.tsx @@ -24,7 +24,7 @@ const Template: ComponentStory = (args) => { useImmediateEffect(() => { API.getIdentityMachine.mockResolvedValue({ machineId: TEST_USER.id, - }); + } as never); API.putIdentityMachineToken.mockResolvedValue({ machineId: TEST_USER.id, tokenId: 'mock-token', @@ -33,7 +33,8 @@ const Template: ComponentStory = (args) => { clientSecret: 'mock-client-secret', authToken: 'mock-auth-token', authUrl: 'mock-auth-url', - }); + } as never); + //@ts-ignore API.putQuerySavedQuery.mockImplementation(({ namespace, queryId, savedQueryInput }) => { return Promise.resolve({ queryId, diff --git a/source/packages/@ada/website/src/views/user/views/Detail/index.stories.tsx b/source/packages/@ada/website/src/views/user/views/Detail/index.stories.tsx index 84c1644..8b7d4d7 100644 --- a/source/packages/@ada/website/src/views/user/views/Detail/index.stories.tsx +++ b/source/packages/@ada/website/src/views/user/views/Detail/index.stories.tsx @@ -49,13 +49,14 @@ const Template: ComponentStory = (args) => { ] API.getIdentityMachine.mockResolvedValue({ machineId: TEST_USER.id, - }); + } as never); API.listIdentityUsers.mockResolvedValue({ users: [USER_ENTITY], - }); + } as never); API.listIdentityMachineTokens.mockResolvedValue({ tokens, - }); + } as never); + //@ts-ignore API.putIdentityMachineToken.mockImplementation(async ({ tokenInput }) => { tokens.push(tokenInput); return { diff --git a/source/packages/@ada/website/src/views/user/views/Root/index.stories.tsx b/source/packages/@ada/website/src/views/user/views/Root/index.stories.tsx index ad5ee3a..6a32c15 100644 --- a/source/packages/@ada/website/src/views/user/views/Root/index.stories.tsx +++ b/source/packages/@ada/website/src/views/user/views/Root/index.stories.tsx @@ -37,7 +37,7 @@ const Template: ComponentStory = (args) => { customGroups: [DefaultGroupIds.ADMIN].join(','), } ] - }) + } as never) }) return ( diff --git a/source/packages/@ada/website/src/views/visualisation/index.ts b/source/packages/@ada/website/src/views/visualisation/index.ts new file mode 100644 index 0000000..be7cc69 --- /dev/null +++ b/source/packages/@ada/website/src/views/visualisation/index.ts @@ -0,0 +1,3 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +export * from './views'; diff --git a/source/packages/@ada/website/src/views/visualisation/views/Root/index.tsx b/source/packages/@ada/website/src/views/visualisation/views/Root/index.tsx new file mode 100644 index 0000000..01a357f --- /dev/null +++ b/source/packages/@ada/website/src/views/visualisation/views/Root/index.tsx @@ -0,0 +1,68 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ + +import { Button, Inline, Text } from 'aws-northstar'; +import { LLSafeHtmlString } from '$strings'; +import { ManagedHelpPanel, PageLayout, useNotificationContext } from '$northstar-plus'; +import { apiHooks } from '$api'; +import { useI18nContext } from '@ada/strings/dist/i18n/i18n-react'; +import React, { useCallback, useState } from 'react'; + +export interface VisualisationRootViewProps {} + +export const VisualisationRootView: React.FC = () => { + const { LL } = useI18nContext(); + const [isProcessing, setIsProcessing] = useState(false); + const { addSuccess, addError } = useNotificationContext(); + + const onError = useCallback((error) => { + setIsProcessing(false); + addError({ + header: LL.VIEW.VISUALISATION.NOTIFY.error.header(), + content: error.message, + }); + }, []); + + const onSuccess = useCallback(() => { + setIsProcessing(false); + addSuccess({ + header: LL.VIEW.VISUALISATION.NOTIFY.success.header(), + dismissible: false, + }); + }, []); + + const [startDeployment] = apiHooks.usePostAdministrationDeploySuperset({ + onError, + onSuccess, + }); + + const handleStartDeployment = useCallback(async () => { + await startDeployment({}); + }, [startDeployment]); + + return ( + <> + + + + + + + + + + + ); +}; + +const HelpInfo = () => { + const { LL } = useI18nContext(); + + return ( + + {import('@ada/strings/markdown/view/visualisation/help.md')} + + ); +}; diff --git a/source/packages/@ada/website/src/views/visualisation/views/index.ts b/source/packages/@ada/website/src/views/visualisation/views/index.ts new file mode 100644 index 0000000..ba4ffb6 --- /dev/null +++ b/source/packages/@ada/website/src/views/visualisation/views/index.ts @@ -0,0 +1,5 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +export { VisualisationRouter as Router } from './router'; + +export { VisualisationRootView as RootView } from './Root'; diff --git a/source/packages/@ada/website/src/views/visualisation/views/router.tsx b/source/packages/@ada/website/src/views/visualisation/views/router.tsx new file mode 100644 index 0000000..c2383a3 --- /dev/null +++ b/source/packages/@ada/website/src/views/visualisation/views/router.tsx @@ -0,0 +1,15 @@ +/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 */ +import { AdminGate } from '$views/admin/components/AdminGate'; +import { Route, Switch } from 'react-router-dom'; +import { VisualisationRootView } from '$views/visualisation/views/Root'; + +export const VisualisationRouter = () => { + return ( + + + + + + ); +}; diff --git a/source/scripts/check-licenses.ts b/source/scripts/check-licenses.ts index 6a0c9a1..76e7452 100644 --- a/source/scripts/check-licenses.ts +++ b/source/scripts/check-licenses.ts @@ -37,7 +37,11 @@ const APPROVED_PKG_LIST: string[] = [ 'dreamopt', // The MIT License (MIT) 'es5-ext', // ISC License 'heap', // The MIT License, - "pako", // (MIT AND Zlib) from @aws-amplify + "pako", // (MIT AND Zlib) from @aws-amplify, + "victory-vendor", //"MIT AND ISC", + "@mapbox/jsonlint-lines-primitives", // From @aws-amplify + "mapbox-gl", // From @aws-amplify + "rw" // From @aws-amplify ] const UNKNOWN = 'Unknown' diff --git a/source/yarn.lock b/source/yarn.lock index f4c0afa..cde4dbe 100644 --- a/source/yarn.lock +++ b/source/yarn.lock @@ -194,132 +194,144 @@ tslib "^1.8.0" typescript "5.0.2" -"@aws-amplify/ui-components@1.9.6": - version "1.9.6" - resolved "https://registry.yarnpkg.com/@aws-amplify/ui-components/-/ui-components-1.9.6.tgz#42ec42a71396ccb6144f1d5dd8332393e0e62bf8" - integrity sha512-NfN6mlDrS41qCQ7BNe/bTDQXAG4kUhRnXIQCbi9oY/lnWImtKLrx37zVieuXi5PF/coVCMT+M1OfBbo8LM2wiw== +"@aws-amplify/ui-components@1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@aws-amplify/ui-components/-/ui-components-1.7.2.tgz#9523b05d7ca819fc941b296e36e21c2139bdfde4" + integrity sha512-PrDG5o/svbZm87XModXvzBQ+HflHSmxse4S0yKcFRPuUmLkspzdBcwFmjb1SCqmXKtTVKVkCHJ38rZiO/WFNfw== dependencies: qrcode "^1.4.4" uuid "^8.2.0" -"@aws-amplify/ui-react@^1.2.26": - version "1.2.26" - resolved "https://registry.yarnpkg.com/@aws-amplify/ui-react/-/ui-react-1.2.26.tgz#4cb2b8f39537d99a505fcaa6f761d92834496c53" - integrity sha512-GHKUewYORX7WH8jOrcTyst3B7j8+oj/bNLcEBrLMtbKUXBL9ui7z7LgsuTDVY9nrXb2HL3z1oc8gTEDbUJrtQA== +"@aws-amplify/ui-react-core@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@aws-amplify/ui-react-core/-/ui-react-core-1.0.6.tgz#85e5a77a9ecd5b23ceb167f92ebe6fd53dceaab4" + integrity sha512-2+uFPIY5OWLatQ68mmwF27Sp1WQoayZ4YEU3vdEm8sZX/fqh9XiSNgFPTmUQk2OU7x9Rv3CNkO8fOZ59AQ7WRw== + dependencies: + "@aws-amplify/ui" "4.1.1" + "@xstate/react" "3.0.1" + xstate "^4.33.6" + +"@aws-amplify/ui-react-v1@npm:@aws-amplify/ui-react@1.2.9": + version "1.2.9" + resolved "https://registry.yarnpkg.com/@aws-amplify/ui-react/-/ui-react-1.2.9.tgz#bcaa93f021afc801f9d8e6aa98558128b2cb173f" + integrity sha512-JvvIkzK0fjwnNZj5Oq9LfGgpkxgzXu0pzzUyIaDZjLmIWaJ5SzR9PazRAX1i5FS/b8DufxEvPq18EwrLbFh4FA== + dependencies: + "@aws-amplify/ui-components" "1.7.2" + +"@aws-amplify/ui-react@^3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@aws-amplify/ui-react/-/ui-react-3.6.1.tgz#ecd517ad9fec88040a92886e0aa71ff0475b5011" + integrity sha512-YMX2MhGFREiFsSAkN8a5Dpvi1GPdB/wVcQ1SOJjAxzJMhbqHH4iEg3Md0sX0mL8rrFfvc6AuWQ4lZPdm4UM8xw== + dependencies: + "@aws-amplify/ui" "4.1.1" + "@aws-amplify/ui-react-core" "1.0.6" + "@aws-amplify/ui-react-v1" "npm:@aws-amplify/ui-react@1.2.9" + "@radix-ui/react-accordion" "0.1.6" + "@radix-ui/react-dropdown-menu" "0.1.6" + "@radix-ui/react-slider" "0.1.4" + "@radix-ui/react-tabs" "0.1.5" + classnames "2.3.1" + deepmerge "4.2.2" + lodash "4.17.21" + mapbox-gl "1.13.1" + maplibre-gl "2.1.9" + maplibre-gl-js-amplify "2.1.0" + qrcode "1.5.0" + react-generate-context "1.0.1" + react-map-gl "7.0.15" + tslib "2.4.0" + +"@aws-amplify/ui@4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@aws-amplify/ui/-/ui-4.1.1.tgz#6905da7ed32a827b2dcb085a7c37d7046fce9fa6" + integrity sha512-xwQFyi40ZQHPzJ+lQTnkF22mgmyhtv9JRGgJ/BSa3plsPsw+2m8GyxIZZsAV2co2TjzolB8/v4Qa9YgVz8txTA== dependencies: - "@aws-amplify/ui-components" "1.9.6" + lodash "4.17.21" + style-dictionary "3.7.0" + tslib "2.4.0" -"@aws-cdk/asset-awscli-v1@^2.2.200": - version "2.2.200" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.200.tgz#6ead533f73f705ad7350eb46955e2538e50cd013" - integrity sha512-Kf5J8DfJK4wZFWT2Myca0lhwke7LwHcHBo+4TvWOGJrFVVKVuuiLCkzPPRBQQVDj0Vtn2NBokZAz8pfMpAqAKg== +"@aws-cdk/asset-awscli-v1@^2.2.202": + version "2.2.202" + resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.202.tgz#4627201d71f6a5c60db36385ce09cb81005f4b32" + integrity sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg== "@aws-cdk/asset-kubectl-v20@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz#d8e20b5f5dc20128ea2000dc479ca3c7ddc27248" integrity sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg== -"@aws-cdk/asset-node-proxy-agent-v5@^2.0.165": - version "2.0.166" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.166.tgz#467507db141cd829ff8aa9d6ea5519310a4276b8" - integrity sha512-j0xnccpUQHXJKPgCwQcGGNu4lRiC1PptYfdxBIH1L4dRK91iBxtSQHESRQX+yB47oGLaF/WfNN/aF3WXwlhikg== - -"@aws-cdk/aws-apigatewayv2-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-alpha/-/aws-apigatewayv2-alpha-2.88.0-alpha.0.tgz#237fa9f4e4034cd4a18c07da73e0a4bf9a49a8e3" - integrity sha512-xCYzaXDyI+cs88MTFOMCE142KczRwEERTF0AtCqWgBwi6Se0aWd8ilwOh3jkL90sRDYquIJ01jlET2biFWmduw== - -"@aws-cdk/aws-apigatewayv2-authorizers-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-authorizers-alpha/-/aws-apigatewayv2-authorizers-alpha-2.88.0-alpha.0.tgz#d41aca6fcec0ffb1ae65fbf67ee2149f74755b35" - integrity sha512-0R3el9USkc6r24kn6GT9YtezEraf3Xm+U57nEK35JWU7ePHtxQ2qpN6wKCw+2A5oq5NKEj03a0m52mAbk1wg0Q== - -"@aws-cdk/aws-apigatewayv2-integrations-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2-integrations-alpha/-/aws-apigatewayv2-integrations-alpha-2.88.0-alpha.0.tgz#32cd96f6db2f4dd8161254a2f6fd87f3059c8e8d" - integrity sha512-G7wvMnGEysfpNEJaVNUAY4PEPkD4QesMHfWyDIUNyED9lx1NiSv3hgtr87hzadJq+j2nRCCwMj9Rls8d+bBzQw== - -"@aws-cdk/aws-glue-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-glue-alpha/-/aws-glue-alpha-2.88.0-alpha.0.tgz#2b6e575dff836df6807fd52e0585f8f87559d898" - integrity sha512-ozyZgSTDAkClIBEL5QM/c+WXNgCrNUk9q6v3x/VGaYaXqrT21o7DKATkoOk2wnDTR2dY4HZJL2O5yUBhvc3oFw== - -"@aws-cdk/aws-kinesisfirehose-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesisfirehose-alpha/-/aws-kinesisfirehose-alpha-2.88.0-alpha.0.tgz#1ae599c36ff16642cd24d9b3c40f48d1ba24e666" - integrity sha512-mYUJ6uX25k31WhPJ2kxKWWOkQhXQ7K6xfD0aWwLxXusyCJanJPlswVpt04CoDsnLiOXIf5k0Xp/cFWbi4tvCMg== - -"@aws-cdk/aws-kinesisfirehose-destinations-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesisfirehose-destinations-alpha/-/aws-kinesisfirehose-destinations-alpha-2.88.0-alpha.0.tgz#249681ada4c4a38d1caaf4cf7c4067d628180f8f" - integrity sha512-/9bTGm87lBMWGQHWqE4JkSM18RrRU0dATf8izP7UrbxRchgYtlncFIrTt3AvAGaABqKz1pcb5ZBnTncVO+uLvA== - -"@aws-cdk/aws-lambda-python-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-python-alpha/-/aws-lambda-python-alpha-2.88.0-alpha.0.tgz#9edfef326f687934c342ba41eeaaca02a3f51534" - integrity sha512-CdSLWAeHLx9uRqAt9OhaWmlsc1wrDEMIDtRWCHVwPW1oVzEjiQ1yUH3sRxZtL0O9rRXpZbJrtUdOM+3SZld64w== - -"@aws-cdk/aws-servicecatalogappregistry-alpha@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicecatalogappregistry-alpha/-/aws-servicecatalogappregistry-alpha-2.88.0-alpha.0.tgz#a785eebc7f56be5788f6cf53da3690a8f2357160" - integrity sha512-YodGvg4oNlcONOESuuaE0+XQGqXFSNBFT9+v+iJyVRDb9gTqp8mJf6uPJvY2tjAUTILnRRtNCO8pL7rIqPHmGQ== - -"@aws-cdk/cfnspec@2.33.0": - version "2.33.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-2.33.0.tgz#6719827d85b4ff61c926e039f81f40a7f07799c0" - integrity sha512-+FOy0e16AFGN1nM8lx+jEyP/qz9LCPhSIQNf1Cc2eDH6KLZly3kkxwoVs8wYC77chjSru0oCPvAKdEwXuoSd4g== +"@aws-cdk/asset-node-proxy-agent-v6@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.1.tgz#6dc9b7cdb22ff622a7176141197962360c33e9ac" + integrity sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg== + +"@aws-cdk/aws-glue-alpha@2.130.0-alpha.0": + version "2.130.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-glue-alpha/-/aws-glue-alpha-2.130.0-alpha.0.tgz#fb04e9b8085f561a4860b90be9219748b3b3c450" + integrity sha512-3NkrlB+MK2UHT2u4I+TBI0qX0b07mJpbo/9c0qNuVsia6FTnvFSgfDTBd52jqSkqOuXHpq5eh0BGKm4c5xazkg== + +"@aws-cdk/aws-kinesisfirehose-alpha@2.130.0-alpha.0": + version "2.130.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesisfirehose-alpha/-/aws-kinesisfirehose-alpha-2.130.0-alpha.0.tgz#e60ddab2bc5b40923e23e28b1682371a7f7b9c1d" + integrity sha512-wCwfgoqvsLpE6IeNjlQBrmQOBJsCDqDFVXi2FLf9STnJvbar4KixwKuWsGguRoQfZNKrsMdfvnUhNOmFpNbLOA== + +"@aws-cdk/aws-kinesisfirehose-destinations-alpha@2.130.0-alpha.0": + version "2.130.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesisfirehose-destinations-alpha/-/aws-kinesisfirehose-destinations-alpha-2.130.0-alpha.0.tgz#6c6eaea04fbe84f0414f1418b47d0961b3e21b3b" + integrity sha512-nLBORMct+0ZS60nKdxPC98TOBBbsuCCJ5Sih0bfg9M7sd9vNpGpZ5VQMY4op+x4DTtqq2I4YuzKsUFPEju+Hcg== + +"@aws-cdk/aws-lambda-python-alpha@2.130.0-alpha.0": + version "2.130.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-python-alpha/-/aws-lambda-python-alpha-2.130.0-alpha.0.tgz#e64476c3ccede496673224605e6a71bed451d1aa" + integrity sha512-pUGmXxx9XC+POFVnTBvNPEgMkQ2Py6krpK003GOnRuTQH34yTdrgeIvLq1RQRVwaqeDdN74dx8r567XwZG0FoA== + +"@aws-cdk/aws-service-spec@^0.0.50": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-service-spec/-/aws-service-spec-0.0.50.tgz#9d2e1218be8982f3cc79ffcd2c268749e6d6d1db" + integrity sha512-uVKv4sJMARQxnHfpiwn+hXq4a2+///vsURP4TdfEF/unrKl8i7s4s5d165au//aNZNOJ4UMTWLohb5UnwDMhzw== dependencies: - fs-extra "^9.1.0" - md5 "^2.3.0" + "@aws-cdk/service-spec-types" "^0.0.50" + "@cdklabs/tskb" "^0.0.3" -"@aws-cdk/cfnspec@2.88.0-alpha.0": - version "2.88.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-2.88.0-alpha.0.tgz#13af371fa6f0edd17cf160387474c5693cb2f071" - integrity sha512-pArQaqBC8mtoRwTToQGtHefeIkA5Cv8EwtbgZW/XgASjb5ZvE/RiRl3TmszXgLwthdvZx2sMMoIYwJTE50JQsA== - dependencies: - fs-extra "^9.1.0" - md5 "^2.3.0" +"@aws-cdk/aws-servicecatalogappregistry-alpha@2.130.0-alpha.0": + version "2.130.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicecatalogappregistry-alpha/-/aws-servicecatalogappregistry-alpha-2.130.0-alpha.0.tgz#6faea96eb94314c7bc1677c3d5ba6edcc7bc6d28" + integrity sha512-GQ6dTR9OEXzqvSOH9vqyepO7//AImoXlj1K+n9JwlRsSDqkdiAQd9TYgfauz0XDpp9L10gUWpyMTlEe81vKiTw== -"@aws-cdk/cloud-assembly-schema@2.88.0": - version "2.88.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-2.88.0.tgz#29c6452aa240d56063c7453e750987e20d089cab" - integrity sha512-dDcbH9g1CQmXdKe4k0eADZfJGIvNw9ZLBH6Mm4M6H1+kaHaxOir016OrZ/xt+eTCPF+uwfSvfFsu4HzUysopyg== +"@aws-cdk/cloud-assembly-schema@2.130.0": + version "2.130.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-2.130.0.tgz#660c92dcf76a5ed63419e8246f8baea13fefa0b2" + integrity sha512-Q1bnS7lOOyyZ70rguBuekF2OZPRxtSGQUsN1lVwnwpWV/S9J+JpgKSaPLJJaM/wq3C8VdmKZyDyp+UpfN9Iryg== dependencies: jsonschema "^1.4.1" - semver "^7.5.4" + semver "^7.6.0" -"@aws-cdk/cloudformation-diff@2.88.0": - version "2.88.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-2.88.0.tgz#b93e22fffdee8811ca8c60311d61efd400a5d067" - integrity sha512-3F6xfAnV/c91/6nm3ZCk0S4rfq3OJ/fSOihSr7VTqABN2vs16e2LYtPialUQvmIXM6I46fByx9DMaBTkQFBxJA== +"@aws-cdk/cloudformation-diff@2.130.0": + version "2.130.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-2.130.0.tgz#6ace93bb7751ca0b32802b7c97a7adafd8a21aac" + integrity sha512-0w5kJNUlV/QpE/9h+rCzToON78nWR+17DZtIFDfuLYXvImlb5UpZfrrok6ppOMfE9pMJ+ATMnv1MbS7z2TVUHA== dependencies: - "@aws-cdk/cfnspec" "2.88.0-alpha.0" + "@aws-cdk/aws-service-spec" "^0.0.50" + "@aws-cdk/service-spec-types" "^0.0.50" chalk "^4" - diff "^5.1.0" + diff "^5.2.0" fast-deep-equal "^3.1.3" string-width "^4.2.3" table "^6.8.1" -"@aws-cdk/cloudformation-diff@^2.33.0": - version "2.33.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-2.33.0.tgz#d941ff87636cd533c75e0f31d6363a7d75068f5e" - integrity sha512-3AgGrxQjmO4BDvmABfyamLq1nnEC0QgXRHUz8bGdajwZaGsFAnxk1GM1VycNkGYV5rLm6hch+VCV29+FLS4wSA== +"@aws-cdk/cx-api@2.130.0": + version "2.130.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-2.130.0.tgz#b0280e4cb27c0d9d856f0abfeab0c0ca62522241" + integrity sha512-QoP5O5ouv9rTvY3+epdeE3LJu8RP0QT0e9mwYneXWmHm4ZWw/J0TZDBwx68xPgwBh8fpIDdZNc9LTG3EQXo3zQ== dependencies: - "@aws-cdk/cfnspec" "2.33.0" - "@types/node" "^10.17.60" - chalk "^4" - diff "^5.1.0" - fast-deep-equal "^3.1.3" - string-width "^4.2.3" - table "^6.8.0" + semver "^7.6.0" -"@aws-cdk/cx-api@2.88.0": - version "2.88.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-2.88.0.tgz#f84423f841d47c891a678c97ea5ad9b993964cc1" - integrity sha512-Wf6ax/1eGjE42Dc7NvlMzu6QU5wraUnKIay9QvznZaJYkkcWZ7LlRwmoh95p431RTOoYME3dWzHOEsV/LBv5xQ== +"@aws-cdk/service-spec-types@^0.0.50": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@aws-cdk/service-spec-types/-/service-spec-types-0.0.50.tgz#5fd946acc1212bfa51021813fb71d8087c44554a" + integrity sha512-J6XoyihczUWoQvxjKf0EqmdeZ8Djs1LCse49rXyQ8IFUXZIUNNrZ1A1x0tAeU3iZn08yC3KAh+YSPRMScfZ5Lw== dependencies: - "@aws-cdk/cloud-assembly-schema" "2.88.0" - semver "^7.5.4" + "@cdklabs/tskb" "^0.0.3" "@aws-crypto/crc32@2.0.0": version "2.0.0" @@ -501,6 +513,48 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/client-budgets@3.370.0": + version "3.370.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-budgets/-/client-budgets-3.370.0.tgz#15183c17a3f895768ef8f0b57e6897bb8ff8b86a" + integrity sha512-6avtxdwxu2Pg0TDBSFM7+NcGi4gdwCnYSFhfZvfPy0lTTJtMvijjv+oW7TZS04qnBAdz8owJXWHr6B9dI39yYA== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.370.0" + "@aws-sdk/credential-provider-node" "3.370.0" + "@aws-sdk/middleware-host-header" "3.370.0" + "@aws-sdk/middleware-logger" "3.370.0" + "@aws-sdk/middleware-recursion-detection" "3.370.0" + "@aws-sdk/middleware-signing" "3.370.0" + "@aws-sdk/middleware-user-agent" "3.370.0" + "@aws-sdk/types" "3.370.0" + "@aws-sdk/util-endpoints" "3.370.0" + "@aws-sdk/util-user-agent-browser" "3.370.0" + "@aws-sdk/util-user-agent-node" "3.370.0" + "@smithy/config-resolver" "^1.0.1" + "@smithy/fetch-http-handler" "^1.0.1" + "@smithy/hash-node" "^1.0.1" + "@smithy/invalid-dependency" "^1.0.1" + "@smithy/middleware-content-length" "^1.0.1" + "@smithy/middleware-endpoint" "^1.0.2" + "@smithy/middleware-retry" "^1.0.3" + "@smithy/middleware-serde" "^1.0.1" + "@smithy/middleware-stack" "^1.0.1" + "@smithy/node-config-provider" "^1.0.1" + "@smithy/node-http-handler" "^1.0.2" + "@smithy/protocol-http" "^1.1.0" + "@smithy/smithy-client" "^1.0.3" + "@smithy/types" "^1.1.0" + "@smithy/url-parser" "^1.0.1" + "@smithy/util-base64" "^1.0.1" + "@smithy/util-body-length-browser" "^1.0.1" + "@smithy/util-body-length-node" "^1.0.1" + "@smithy/util-defaults-mode-browser" "^1.0.1" + "@smithy/util-defaults-mode-node" "^1.0.1" + "@smithy/util-retry" "^1.0.3" + "@smithy/util-utf8" "^1.0.1" + tslib "^2.5.0" + "@aws-sdk/client-cloudwatch-logs@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.6.1.tgz#5e8dba495a2ba9a901b0a1a2d53edef8bd452398" @@ -576,7 +630,7 @@ tslib "^2.0.0" uuid "^3.0.0" -"@aws-sdk/client-dynamodb@^3.370.0": +"@aws-sdk/client-dynamodb@3.370.0": version "3.370.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-dynamodb/-/client-dynamodb-3.370.0.tgz#6712ce2750eb2a9d0813b9bdd25ac205dac44938" integrity sha512-qL02C4adrZljZXgPonSHYJ95qkj1IlIsZx3NxaGzMc5S3uPJua14phktk2XP8K/Ap3gD6vLWt1UVVoo/rDFOAQ== @@ -1459,6 +1513,16 @@ "@aws-sdk/util-hex-encoding" "3.186.0" tslib "^2.3.1" +"@aws-sdk/eventstream-codec@3.370.0": + version "3.370.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-codec/-/eventstream-codec-3.370.0.tgz#c407ae5e8e24a4c02f626cc5ae55403df55573f7" + integrity sha512-PiaDMum7TNsIE3DGECSsNYwibBIPN2/e13BJbTwi6KgVx8BV2mYA3kQkaUDiy++tEpzN81Nh5OPTFVb7bvgYYg== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-sdk/types" "3.370.0" + "@aws-sdk/util-hex-encoding" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/eventstream-handler-node@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.186.0.tgz#d58aec9a8617ed1a9a3800d5526333deb3efebb2" @@ -1613,6 +1677,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/is-array-buffer@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz#f87a79f1b858c88744f07e8d8d0a791df204017e" + integrity sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ== + dependencies: + tslib "^2.5.0" + "@aws-sdk/is-array-buffer@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.6.1.tgz#96df5d64b2d599947f81b164d5d92623f85c659c" @@ -1987,6 +2058,17 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/region-config-resolver@3.468.0": + version "3.468.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.468.0.tgz#77dfdf517fdfc40d7452a957c3eb4a1f3d69ddcd" + integrity sha512-EkDfaumuBhDJFg4lmvWiBE8Ln4BF6hYNC2YfkjKCTEuePy5BKryFedwylYZZ3CJG/uVyfr8xBy+mvoR8plpHjg== + dependencies: + "@smithy/node-config-provider" "^2.1.7" + "@smithy/types" "^2.7.0" + "@smithy/util-config-provider" "^2.0.0" + "@smithy/util-middleware" "^2.0.8" + tslib "^2.5.0" + "@aws-sdk/service-error-classification@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz#6e4e1d4b53d68bd28c28d9cf0b3b4cb6a6a59dbb" @@ -2036,6 +2118,20 @@ "@aws-sdk/util-uri-escape" "3.186.0" tslib "^2.3.1" +"@aws-sdk/signature-v4@3.370.0": + version "3.370.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.370.0.tgz#5726c46eddc6e959a497e403d9d4e6f65efb196c" + integrity sha512-Mh++NJiXoBxMzz4d8GQPNB37nqjS1gsVwjKoSAWFE67sjgsjb8D5JWRCm9CinqPoXi2iN57+1DcQalTDKQGc0A== + dependencies: + "@aws-sdk/eventstream-codec" "3.370.0" + "@aws-sdk/is-array-buffer" "3.310.0" + "@aws-sdk/types" "3.370.0" + "@aws-sdk/util-hex-encoding" "3.310.0" + "@aws-sdk/util-middleware" "3.370.0" + "@aws-sdk/util-uri-escape" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/signature-v4@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.6.1.tgz#b20a3cf3e891131f83b012651f7d4af2bf240611" @@ -2047,14 +2143,6 @@ "@aws-sdk/util-uri-escape" "3.6.1" tslib "^1.8.0" -"@aws-sdk/signature-v4@^3.370.0": - version "3.374.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz#bd727f4c392acb81bc667aa4cfceeba608250771" - integrity sha512-2xLJvSdzcZZAg0lsDLUAuSQuihzK0dcxIK7WmfuJeF7DGKJFmp9czQmz5f3qiDz6IDQzvgK1M9vtJSVCslJbyQ== - dependencies: - "@smithy/signature-v4" "^1.0.1" - tslib "^2.5.0" - "@aws-sdk/smithy-client@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz#67514544fb55d7eff46300e1e73311625cf6f916" @@ -2136,7 +2224,7 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" -"@aws-sdk/util-arn-parser@^3.310.0": +"@aws-sdk/util-arn-parser@3.310.0": version "3.310.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz#861ff8810851be52a320ec9e4786f15b5fc74fba" integrity sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA== @@ -2209,6 +2297,14 @@ "@aws-sdk/is-array-buffer" "3.186.0" tslib "^2.3.1" +"@aws-sdk/util-buffer-from@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz#7a72cb965984d3c6a7e256ae6cf1621f52e54a57" + integrity sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw== + dependencies: + "@aws-sdk/is-array-buffer" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/util-buffer-from@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.6.1.tgz#24184ce74512f764d84002201b7f5101565e26f9" @@ -2224,7 +2320,7 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/util-credentials@^3.56.0": +"@aws-sdk/util-credentials@3.56.0": version "3.56.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-credentials/-/util-credentials-3.56.0.tgz#b2ea97a5e90a95c91ea05a103417fecb036e2728" integrity sha512-haKqXtEm5dNQx4NBe8mOiBtxTDQkjMfvayECrMbVo6WaFmL13/k+reVkfGM5ux9EXCYeqHCJI244LogUyEaBXA== @@ -2269,6 +2365,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-hex-encoding@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz#19294c78986c90ae33f04491487863dc1d33bd87" + integrity sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA== + dependencies: + tslib "^2.5.0" + "@aws-sdk/util-hex-encoding@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.6.1.tgz#84954fcc47b74ffbd2911ba5113e93bd9b1c6510" @@ -2290,6 +2393,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-middleware@3.370.0": + version "3.370.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.370.0.tgz#3ff3b0e3cbf05ca44450fd6a943c9eabe4fd7330" + integrity sha512-Jvs9FZHaQznWGLkRel3PFEP93I1n0Kp6356zxYHk3LIOmjpzoob3R+v96mzyN+dZrnhPdPubYS41qbU2F9lROg== + dependencies: + tslib "^2.5.0" + "@aws-sdk/util-uri-escape@3.186.0": version "3.186.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz#1752a93dfe58ec88196edb6929806807fd8986da" @@ -2297,6 +2407,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-uri-escape@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz#9f942f09a715d8278875013a416295746b6085ba" + integrity sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q== + dependencies: + tslib "^2.5.0" + "@aws-sdk/util-uri-escape@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.6.1.tgz#433e87458bb510d0e457a86c0acf12b046a5068c" @@ -2397,6 +2514,14 @@ "@aws-sdk/util-buffer-from" "3.6.1" tslib "^1.8.0" +"@aws-sdk/util-utf8@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz#4a7b9dcebb88e830d3811aeb21e9a6df4273afb4" + integrity sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA== + dependencies: + "@aws-sdk/util-buffer-from" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/util-waiter@3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.6.1.tgz#5c66c2da33ff98468726fefddc2ca7ac3352c17d" @@ -2434,6 +2559,14 @@ dependencies: "@babel/highlight" "^7.16.7" +"@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + "@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4": version "7.16.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" @@ -2548,6 +2681,16 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" @@ -2688,6 +2831,11 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + "@babel/helper-explode-assignable-expression@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" @@ -2720,6 +2868,14 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + "@babel/helper-get-function-arity@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" @@ -2748,6 +2904,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-member-expression-to-functions@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" @@ -2907,6 +3070,18 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + "@babel/helper-validator-identifier@^7.15.7": version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" @@ -2917,6 +3092,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + "@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" @@ -2983,7 +3163,16 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3", "@babel/parser@^7.7.0": +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.7.0": version "7.16.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e" integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng== @@ -2993,6 +3182,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c" integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== +"@babel/parser@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2": version "7.16.2" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" @@ -4522,6 +4716,13 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.13.10": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.5.0", "@babel/runtime@^7.7.6": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" @@ -4554,35 +4755,29 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3", "@babel/traverse@^7.7.0": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" - integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/parser" "^7.16.3" - "@babel/types" "^7.16.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30" - integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.0" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.0" - "@babel/types" "^7.17.0" - debug "^4.1.0" +"@babel/template@^7.22.15": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + +"@babel/traverse@7.23.9", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.7.0": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + debug "^4.3.1" globals "^11.1.0" "@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": @@ -4601,6 +4796,15 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + "@balena/dockerignore@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" @@ -4616,6 +4820,11 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@cdklabs/tskb@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@cdklabs/tskb/-/tskb-0.0.3.tgz#4b79846d9381eb1252ba85d5d20b7cd7d99b6ecb" + integrity sha512-JR+MuD4awAXvutu7HArephXfZm09GPTaSAQUqNcJB5+ZENRm4kV+L6vJL6Tn1xHjCcHksO+HAqj3gYtm5K94vA== + "@cnakazawa/watch@^1.0.3": version "1.0.4" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" @@ -4646,9 +4855,9 @@ integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== "@cypress/request@^2.88.10", "@cypress/request@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.0.tgz#7f58dfda087615ed4e6aab1b25fffe7630d6dd85" - integrity sha512-GKFCqwZwMYmL3IBoNeR2MM1SnxRIGERsQOTWeQKoYBt2JLqcqiy7JXqO894FLrpjZYqGxW92MNwRH2BN56obdQ== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.1.tgz#72d7d5425236a2413bd3d8bb66d02d9dc3168960" + integrity sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -4663,7 +4872,7 @@ json-stringify-safe "~5.0.1" mime-types "~2.1.19" performance-now "^2.1.0" - qs "~6.10.3" + qs "6.10.4" safe-buffer "^5.1.2" tough-cookie "^4.1.3" tunnel-agent "^0.6.0" @@ -4982,6 +5191,13 @@ "@types/node" "*" jest-mock "^26.6.2" +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + "@jest/fake-timers@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" @@ -5035,6 +5251,13 @@ optionalDependencies: node-notifier "^8.0.0" +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + "@jest/source-map@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" @@ -5156,16 +5379,52 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz#9b18145d26cf33d08576cf4c7665b28554480ed7" + integrity sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.11" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + "@jridgewell/trace-mapping@^0.3.0": version "0.3.4" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" @@ -5174,6 +5433,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.23" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz#afc96847f3f07841477f303eed687707a5aacd80" + integrity sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@lerna/add@5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@lerna/add/-/add-5.2.0.tgz#b9d3c728e059eea67f5757ee4b8e9550295f0be6" @@ -5856,6 +6123,142 @@ npmlog "^6.0.2" write-file-atomic "^3.0.3" +"@mapbox/extent@0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@mapbox/extent/-/extent-0.4.0.tgz#3e591f32e1f0c3981c864239f7b0ac06e610f8a9" + integrity sha512-MSoKw3qPceGuupn04sdaJrFeLKvcSETVLZCGS8JA9x6zXQL3FWiKaIXYIZEDXd5jpXpWlRxinCZIN49yRy0C9A== + +"@mapbox/geojson-area@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz#18d7814aa36bf23fbbcc379f8e26a22927debf10" + integrity sha512-bBqqFn1kIbLBfn7Yq1PzzwVkPYQr9lVUeT8Dhd0NL5n76PBuXzOcuLV7GOSbEB1ia8qWxH4COCvFpziEu/yReA== + dependencies: + wgs84 "0.0.0" + +"@mapbox/geojson-coords@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-coords/-/geojson-coords-0.0.2.tgz#f73d5744c832de0f05c48899f16a4288cefb2606" + integrity sha512-YuVzpseee/P1T5BWyeVVPppyfmuXYHFwZHmybkqaMfu4BWlOf2cmMGKj2Rr92MwfSTOCSUA0PAsVGRG8akY0rg== + dependencies: + "@mapbox/geojson-normalize" "0.0.1" + geojson-flatten "^1.0.4" + +"@mapbox/geojson-extent@^1.0.0", "@mapbox/geojson-extent@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-extent/-/geojson-extent-1.0.1.tgz#bd99a6b66ba98e63a29511c9cd1bbd1df4c1e203" + integrity sha512-hh8LEO3djT4fqfr8sSC6wKt+p0TMiu+KOLMBUiFOyj+zGq7+IXwQGl0ppCVDkyzCewyd9LoGe9zAvDxXrLfhLw== + dependencies: + "@mapbox/extent" "0.4.0" + "@mapbox/geojson-coords" "0.0.2" + rw "~0.1.4" + traverse "~0.6.6" + +"@mapbox/geojson-normalize@0.0.1", "@mapbox/geojson-normalize@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-normalize/-/geojson-normalize-0.0.1.tgz#1da1e6b3a7add3ad29909b30f438f60581b7cd80" + integrity sha512-82V7YHcle8lhgIGqEWwtXYN5cy0QM/OHq3ypGhQTbvHR57DF0vMHMjjVSQKFfVXBe/yWCBZTyOuzvK7DFFnx5Q== + +"@mapbox/geojson-rewind@^0.5.0", "@mapbox/geojson-rewind@^0.5.1": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz#591a5d71a9cd1da1a0bf3420b3bea31b0fc7946a" + integrity sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA== + dependencies: + get-stream "^6.0.1" + minimist "^1.2.6" + +"@mapbox/geojson-types@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6" + integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw== + +"@mapbox/jsonlint-lines-primitives@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + integrity sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ== + +"@mapbox/mapbox-gl-draw@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.3.0.tgz#7a30fb99488cb47a32c25e99c3c62413b04bbaed" + integrity sha512-B+KWK+dAgzLHMNyKVuuMRfjeSlQ77MhNLdfpQQpbp3pkhnrdmydDe3ixto1Ua78hktNut0WTrAaD8gYu4PVcjA== + dependencies: + "@mapbox/geojson-area" "^0.2.2" + "@mapbox/geojson-extent" "^1.0.0" + "@mapbox/geojson-normalize" "^0.0.1" + "@mapbox/point-geometry" "^0.1.0" + hat "0.0.3" + lodash.isequal "^4.5.0" + xtend "^4.0.2" + +"@mapbox/mapbox-gl-draw@^1.3.0": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.4.3.tgz#3f95362fdeabcffcb46f3392f24bf5914e7be817" + integrity sha512-03qIJgyGmm0IoTZbV/cfODru9jRGogi4LcQ3maxIJDKccq1gY3ofgt2UYPkeU143ElxitZahEythNQv1NpsLhg== + dependencies: + "@mapbox/geojson-area" "^0.2.2" + "@mapbox/geojson-extent" "^1.0.1" + "@mapbox/geojson-normalize" "^0.0.1" + "@mapbox/point-geometry" "^0.1.0" + hat "0.0.3" + lodash.isequal "^4.5.0" + xtend "^4.0.2" + +"@mapbox/mapbox-gl-supported@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz#f60b6a55a5d8e5ee908347d2ce4250b15103dc8e" + integrity sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg== + +"@mapbox/mapbox-gl-supported@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz#c15367178d8bfe4765e6b47b542fe821ce259c7b" + integrity sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ== + +"@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + integrity sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ== + +"@mapbox/tiny-sdf@^1.1.1": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz#424c620a96442b20402552be70a7f62a8407cc59" + integrity sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw== + +"@mapbox/tiny-sdf@^2.0.4": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz#9a1d33e5018093e88f6a4df2343e886056287282" + integrity sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA== + +"@mapbox/unitbezier@^0.0.0": + version "0.0.0" + resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" + integrity sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA== + +"@mapbox/unitbezier@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz#d32deb66c7177e9e9dfc3bbd697083e2e657ff01" + integrity sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw== + +"@mapbox/vector-tile@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" + integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== + dependencies: + "@mapbox/point-geometry" "~0.1.0" + +"@mapbox/whoots-js@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" + integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== + +"@maplibre/maplibre-gl-geocoder@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-geocoder/-/maplibre-gl-geocoder-1.5.0.tgz#6b413525b361b4759df0fd17429e12b78f03b3a4" + integrity sha512-PsAbV7WFIOu5QYZne95FiXoV7AV1/6ULMjQxgInhZ5DdB0hDLjciQPegnyDgkzI8JfeqoUMZVS/MglZnSZYhyQ== + dependencies: + lodash.debounce "^4.0.6" + subtag "^0.5.0" + suggestions-list "^0.0.2" + xtend "^4.0.1" + "@material-ui/core@4.11.4": version "4.11.4" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.4.tgz#4fb9fe5dec5dcf780b687e3a40cff78b2b9640a4" @@ -6489,6 +6892,336 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== +"@radix-ui/number@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-0.1.0.tgz#73ad13d5cc5f75fa5e147d72e5d5d5e50d688256" + integrity sha512-rpf6QiOWLHAkM4FEMYu9i+5Jr8cKT893+R4mPpcdsy4LD7omr9JfdOqj/h/xPA5+EcVrpMMlU6rrRYpUB5UI8g== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/popper@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/popper/-/popper-0.1.0.tgz#c387a38f31b7799e1ea0d2bb1ca0c91c2931b063" + integrity sha512-uzYeElL3w7SeNMuQpXiFlBhTT+JyaNMCwDfjKkrzugEcYrf5n52PHqncNdQPUtR42hJh8V9FsqyEDbDxkeNjJQ== + dependencies: + "@babel/runtime" "^7.13.10" + csstype "^3.0.4" + +"@radix-ui/primitive@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-0.1.0.tgz#6206b97d379994f0d1929809db035733b337e543" + integrity sha512-tqxZKybwN5Fa3VzZry4G6mXAAb9aAqKmPtnVbZpL0vsBwvOHTBwsjHVPXylocYLwEtBY9SCe665bYnNB515uoA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-accordion@0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-accordion/-/react-accordion-0.1.6.tgz#b76613d56717ed24b8cf6cb1897cbd54f04714ed" + integrity sha512-LOXlqPU6y6EMBopdRIKCWFvMPY1wPTQ4uJiX7ZVxldrMJcM7imBzI3wlRTkPCHZ3FLHmpuw+cQi3du23pzJp1g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "0.1.0" + "@radix-ui/react-collapsible" "0.1.6" + "@radix-ui/react-collection" "0.1.4" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-id" "0.1.5" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-controllable-state" "0.1.0" + +"@radix-ui/react-arrow@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-0.1.4.tgz#a871448a418cd3507d83840fdd47558cb961672b" + integrity sha512-BB6XzAb7Ml7+wwpFdYVtZpK1BlMgqyafSQNGzhIpSZ4uXvXOHPlR5GP8M449JkeQzgQjv9Mp1AsJxFC0KuOtuA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "0.1.4" + +"@radix-ui/react-collapsible@0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collapsible/-/react-collapsible-0.1.6.tgz#3eeadac476761b3c9b8dd91e8a32eb1a547e5a06" + integrity sha512-Gkf8VuqMc6HTLzA2AxVYnyK6aMczVLpatCjdD9Lj4wlYLXCz9KtiqZYslLMeqnQFLwLyZS0WKX/pQ8j5fioIBw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "0.1.0" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-id" "0.1.5" + "@radix-ui/react-presence" "0.1.2" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-controllable-state" "0.1.0" + "@radix-ui/react-use-layout-effect" "0.1.0" + +"@radix-ui/react-collection@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-0.1.4.tgz#734061ffd5bb93e88889d49b87391a73a63824c9" + integrity sha512-3muGI15IdgaDFjOcO7xX8a35HQRBRF6LH9pS6UCeZeRmbslkVeHyJRQr2rzICBUoX7zgIA0kXyMDbpQnJGyJTA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-slot" "0.1.2" + +"@radix-ui/react-compose-refs@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz#cff6e780a0f73778b976acff2c2a5b6551caab95" + integrity sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-context@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-0.1.1.tgz#06996829ea124d9a1bc1dbe3e51f33588fab0875" + integrity sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-dismissable-layer@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-0.1.5.tgz#9379032351e79028d472733a5cc8ba4a0ea43314" + integrity sha512-J+fYWijkX4M4QKwf9dtu1oC0U6e6CEl8WhBp3Ad23yz2Hia0XCo6Pk/mp5CAFy4QBtQedTSkhW05AdtSOEoajQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "0.1.0" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-body-pointer-events" "0.1.1" + "@radix-ui/react-use-callback-ref" "0.1.0" + "@radix-ui/react-use-escape-keydown" "0.1.0" + +"@radix-ui/react-dropdown-menu@0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-0.1.6.tgz#3203229788cd57e552c9f19dcc7008e2b545919c" + integrity sha512-RZhtzjWwJ4ZBN7D8ek4Zn+ilHzYuYta9yIxFnbC0pfqMnSi67IQNONo1tuuNqtFh9SRHacPKc65zo+kBBlxtdg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "0.1.0" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-id" "0.1.5" + "@radix-ui/react-menu" "0.1.6" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-controllable-state" "0.1.0" + +"@radix-ui/react-focus-guards@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-0.1.0.tgz#ba3b6f902cba7826569f8edc21ff8223dece7def" + integrity sha512-kRx/swAjEfBpQ3ns7J3H4uxpXuWCqN7MpALiSDOXiyo2vkWv0L9sxvbpZeTulINuE3CGMzicVMuNc/VWXjFKOg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-focus-scope@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-0.1.4.tgz#c830724e212d42ffaaa81aee49533213d09b47df" + integrity sha512-fbA4ES3H4Wkxp+OeLhvN6SwL7mXNn/aBtUf7DRYxY9+Akrf7dRxl2ck4lgcpPsSg3zSDsEwLcY+h5cmj5yvlug== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-callback-ref" "0.1.0" + +"@radix-ui/react-id@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-0.1.5.tgz#010d311bedd5a2884c1e9bb6aaaa4e6cc1d1d3b8" + integrity sha512-IPc4H/63bes0IZ1GJJozSEkSWcDyhNGtKFWUpJ+XtaLyQ1X3x7Mf6fWwWhDcpqlYEP+5WtAvfqcyEsyjP+ZhBQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "0.1.0" + +"@radix-ui/react-menu@0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-0.1.6.tgz#7f9521a10f6a9cd819b33b33d5ed9538d79b2e75" + integrity sha512-ho3+bhpr3oAFkOBJ8VkUb1BcGoiZBB3OmcWPqa6i5RTUKrzNX/d6rauochu2xDlWjiRtpVuiAcsTVOeIC4FbYQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "0.1.0" + "@radix-ui/react-collection" "0.1.4" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-dismissable-layer" "0.1.5" + "@radix-ui/react-focus-guards" "0.1.0" + "@radix-ui/react-focus-scope" "0.1.4" + "@radix-ui/react-id" "0.1.5" + "@radix-ui/react-popper" "0.1.4" + "@radix-ui/react-portal" "0.1.4" + "@radix-ui/react-presence" "0.1.2" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-roving-focus" "0.1.5" + "@radix-ui/react-use-callback-ref" "0.1.0" + "@radix-ui/react-use-direction" "0.1.0" + aria-hidden "^1.1.1" + react-remove-scroll "^2.4.0" + +"@radix-ui/react-popper@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-0.1.4.tgz#dfc055dcd7dfae6a2eff7a70d333141d15a5d029" + integrity sha512-18gDYof97t8UQa7zwklG1Dr8jIdj3u+rVOQLzPi9f5i1YQak/pVGkaqw8aY+iDUknKKuZniTk/7jbAJUYlKyOw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/popper" "0.1.0" + "@radix-ui/react-arrow" "0.1.4" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-rect" "0.1.1" + "@radix-ui/react-use-size" "0.1.1" + "@radix-ui/rect" "0.1.1" + +"@radix-ui/react-portal@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-0.1.4.tgz#17bdce3d7f1a9a0b35cb5e935ab8bc562441a7d2" + integrity sha512-MO0wRy2eYRTZ/CyOri9NANCAtAtq89DEtg90gicaTlkCfdqCLEBsLb+/q66BZQTr3xX/Vq01nnVfc/TkCqoqvw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-layout-effect" "0.1.0" + +"@radix-ui/react-presence@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-0.1.2.tgz#9f11cce3df73cf65bc348e8b76d891f0d54c1fe3" + integrity sha512-3BRlFZraooIUfRlyN+b/Xs5hq1lanOOo/+3h6Pwu2GMFjkGKKa4Rd51fcqGqnVlbr3jYg+WLuGyAV4KlgqwrQw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-use-layout-effect" "0.1.0" + +"@radix-ui/react-primitive@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz#6c233cf08b0cb87fecd107e9efecb3f21861edc1" + integrity sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-slot" "0.1.2" + +"@radix-ui/react-roving-focus@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-0.1.5.tgz#cc48d17a36b56f253d54905b0fd60ee134cb97ee" + integrity sha512-ClwKPS5JZE+PaHCoW7eu1onvE61pDv4kO8W4t5Ra3qMFQiTJLZMdpBQUhksN//DaVygoLirz4Samdr5Y1x1FSA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "0.1.0" + "@radix-ui/react-collection" "0.1.4" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-id" "0.1.5" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-callback-ref" "0.1.0" + "@radix-ui/react-use-controllable-state" "0.1.0" + +"@radix-ui/react-slider@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slider/-/react-slider-0.1.4.tgz#a7b7a480ee00158195794b08cd3f1583cf102518" + integrity sha512-0z3bCcdrAi+FIcoLXS6r0ESVWuuyMnUJoCsFm7tC7Rtv95x34YtaI8YfSyQmzuMVS4rTsNtCCTZ/s727uRaVkQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/number" "0.1.0" + "@radix-ui/primitive" "0.1.0" + "@radix-ui/react-collection" "0.1.4" + "@radix-ui/react-compose-refs" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-use-controllable-state" "0.1.0" + "@radix-ui/react-use-direction" "0.1.0" + "@radix-ui/react-use-layout-effect" "0.1.0" + "@radix-ui/react-use-previous" "0.1.1" + "@radix-ui/react-use-size" "0.1.1" + +"@radix-ui/react-slot@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-0.1.2.tgz#e6f7ad9caa8ce81cc8d532c854c56f9b8b6307c8" + integrity sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "0.1.0" + +"@radix-ui/react-tabs@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-0.1.5.tgz#ddcf860cc32e186d76477ae767dbb216d1944252" + integrity sha512-ieVQS1TFr0dX1XA8B+CsSFKOE7kcgEaNWWEfItxj9D1GZjn1o3WqPkW+FhQWDAWZLSKCH2PezYF3MNyO41lgJg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "0.1.0" + "@radix-ui/react-context" "0.1.1" + "@radix-ui/react-id" "0.1.5" + "@radix-ui/react-primitive" "0.1.4" + "@radix-ui/react-roving-focus" "0.1.5" + "@radix-ui/react-use-controllable-state" "0.1.0" + +"@radix-ui/react-use-body-pointer-events@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-body-pointer-events/-/react-use-body-pointer-events-0.1.1.tgz#63e7fd81ca7ffd30841deb584cd2b7f460df2597" + integrity sha512-R8leV2AWmJokTmERM8cMXFHWSiv/fzOLhG/JLmRBhLTAzOj37EQizssq4oW0Z29VcZy2tODMi9Pk/htxwb+xpA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "0.1.0" + +"@radix-ui/react-use-callback-ref@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-0.1.0.tgz#934b6e123330f5b3a6b116460e6662cbc663493f" + integrity sha512-Va041McOFFl+aV+sejvl0BS2aeHx86ND9X/rVFmEFQKTXCp6xgUK0NGUAGcgBlIjnJSbMYPGEk1xKSSlVcN2Aw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-controllable-state@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-0.1.0.tgz#4fced164acfc69a4e34fb9d193afdab973a55de1" + integrity sha512-zv7CX/PgsRl46a52Tl45TwqwVJdmqnlQEQhaYMz/yBOD2sx2gCkCFSoF/z9mpnYWmS6DTLNTg5lIps3fV6EnXg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "0.1.0" + +"@radix-ui/react-use-direction@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-direction/-/react-use-direction-0.1.0.tgz#97ac1d52e497c974389e7988f809238ed72e7df7" + integrity sha512-NajpY/An9TCPSfOVkgWIdXJV+VuWl67PxB6kOKYmtNAFHvObzIoh8o0n9sAuwSAyFCZVq211FEf9gvVDRhOyiA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-escape-keydown@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-0.1.0.tgz#dc80cb3753e9d1bd992adbad9a149fb6ea941874" + integrity sha512-tDLZbTGFmvXaazUXXv8kYbiCcbAE8yKgng9s95d8fCO+Eundv0Jngbn/hKPhDDs4jj9ChwRX5cDDnlaN+ugYYQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "0.1.0" + +"@radix-ui/react-use-layout-effect@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz#ebf71bd6d2825de8f1fbb984abf2293823f0f223" + integrity sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-previous@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-0.1.1.tgz#0226017f72267200f6e832a7103760e96a6db5d0" + integrity sha512-O/ZgrDBr11dR8rhO59ED8s5zIXBRFi8MiS+CmFGfi7MJYdLbfqVOmQU90Ghf87aifEgWe6380LA69KBneaShAg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-rect@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-0.1.1.tgz#6c15384beee59c086e75b89a7e66f3d2e583a856" + integrity sha512-kHNNXAsP3/PeszEmM/nxBBS9Jbo93sO+xuMTcRfwzXsmxT5gDXQzAiKbZQ0EecCPtJIzqvr7dlaQi/aP1PKYqQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/rect" "0.1.1" + +"@radix-ui/react-use-size@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-0.1.1.tgz#f6b75272a5d41c3089ca78c8a2e48e5f204ef90f" + integrity sha512-pTgWM5qKBu6C7kfKxrKPoBI2zZYZmp2cSXzpUiGM3qEBQlMLtYhaY2JXdXUCxz+XmD1YEjc8oRwvyfsD4AG4WA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/rect@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-0.1.1.tgz#95b5ba51f469bea6b1b841e2d427e17e37d38419" + integrity sha512-g3hnE/UcOg7REdewduRPAK88EPuLZtaq7sA9ouu8S+YEtnyFRI16jgv6GZYe3VMoQLL1T171ebmEPtDjyxWLzw== + dependencies: + "@babel/runtime" "^7.13.10" + "@rjsf/core@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@rjsf/core/-/core-4.2.0.tgz#9ec807737039b5f63433682f332ecbcd6067a847" @@ -6546,6 +7279,11 @@ debug "4.1.1" dynamodb-local "0.0.31" +"@sinclair/typebox@^0.24.1": + version "0.24.51" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" + integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -6558,6 +7296,27 @@ dependencies: type-detect "4.0.8" +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== + dependencies: + type-detect "4.0.8" + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" @@ -6565,6 +7324,27 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@sinonjs/samsam@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-7.0.1.tgz#5b5fa31c554636f78308439d220986b9523fc51f" + integrity sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw== + dependencies: + "@sinonjs/commons" "^2.0.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" + +"@sinonjs/text-encoding@^0.7.1": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" + integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== + "@smithy/abort-controller@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-1.0.2.tgz#74caac052ecea15c5460438272ad8d43a6ccbc53" @@ -6698,6 +7478,16 @@ "@smithy/types" "^1.1.1" tslib "^2.5.0" +"@smithy/node-config-provider@^2.1.7", "@smithy/node-config-provider@^2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.1.8.tgz#8cab8f1172c8cd1146e7997292786909abcae763" + integrity sha512-+w26OKakaBUGp+UG+dxYZtFb5fs3tgHg3/QrRrmUZj+rl3cIuw840vFUXX35cVPTUCQIiTqmz7CpVF7+hdINdQ== + dependencies: + "@smithy/property-provider" "^2.0.16" + "@smithy/shared-ini-file-loader" "^2.2.7" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + "@smithy/node-http-handler@^1.0.2", "@smithy/node-http-handler@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-1.0.3.tgz#89b556ca2bdcce7a994a9da1ea265094d76d4791" @@ -6717,6 +7507,14 @@ "@smithy/types" "^1.1.1" tslib "^2.5.0" +"@smithy/property-provider@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.0.16.tgz#0c15ea8a3e8c8e7012bf5877c79ce754f7d2c06e" + integrity sha512-28Ky0LlOqtEjwg5CdHmwwaDRHcTWfPRzkT6HrhwOSRS2RryAvuDfJrZpM+BMcrdeCyEg1mbcgIMoqTla+rdL8Q== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + "@smithy/protocol-http@^1.1.0", "@smithy/protocol-http@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-1.1.1.tgz#10977cf71631eed4f5ad1845408920238d52cdba" @@ -6755,6 +7553,14 @@ "@smithy/types" "^1.1.1" tslib "^2.5.0" +"@smithy/shared-ini-file-loader@^2.2.7": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.7.tgz#4a3bd469703d02c3cc8e36dcba2238c06efa12cb" + integrity sha512-0Qt5CuiogIuvQIfK+be7oVHcPsayLgfLJGkPlbgdbl0lD28nUKu4p11L+UG3SAEsqc9UsazO+nErPXw7+IgDpQ== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + "@smithy/signature-v4@^1.0.1": version "1.0.2" resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-1.0.2.tgz#3a7b10ac66c337b404aa061e5f268f0550729680" @@ -6786,6 +7592,13 @@ dependencies: tslib "^2.5.0" +"@smithy/types@^2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.7.0.tgz#6ed9ba5bff7c4d28c980cff967e6d8456840a4f3" + integrity sha512-1OIFyhK+vOkMbu4aN2HZz/MomREkrAC/HqY5mlJMUJfGrPRwijJDTeiN8Rnj9zUaB8ogXAfIOtZrrgqZ4w7Wnw== + dependencies: + tslib "^2.5.0" + "@smithy/url-parser@^1.0.1", "@smithy/url-parser@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-1.0.2.tgz#fb59be6f2283399443d9e7afe08ebf63b3c266bb" @@ -6832,6 +7645,13 @@ dependencies: tslib "^2.5.0" +"@smithy/util-config-provider@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz#4dd6a793605559d94267312fd06d0f58784b4c38" + integrity sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg== + dependencies: + tslib "^2.5.0" + "@smithy/util-defaults-mode-browser@^1.0.1": version "1.0.2" resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-1.0.2.tgz#31ad7b9bce7e38fd57f4a370ee416373b4fbd432" @@ -6854,6 +7674,15 @@ "@smithy/types" "^1.1.1" tslib "^2.5.0" +"@smithy/util-endpoints@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-1.0.7.tgz#5a258ac7838dea085660060b515cd2d19f19a4bc" + integrity sha512-Q2gEind3jxoLk6hdKWyESMU7LnXz8aamVwM+VeVjOYzYT1PalGlY/ETa48hv2YpV4+YV604y93YngyzzzQ4IIA== + dependencies: + "@smithy/node-config-provider" "^2.1.8" + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + "@smithy/util-hex-encoding@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-1.0.2.tgz#5b9f2162f2a59b2d2aa39992bd2c7f65b6616ab6" @@ -6868,6 +7697,14 @@ dependencies: tslib "^2.5.0" +"@smithy/util-middleware@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.0.8.tgz#2ec1da1190d09b69512ce0248ebd5e819e3c8a92" + integrity sha512-qkvqQjM8fRGGA8P2ydWylMhenCDP8VlkPn8kiNuFEaFz9xnUKC2irfqsBSJrfrOB9Qt6pQsI58r3zvvumhFMkw== + dependencies: + "@smithy/types" "^2.7.0" + tslib "^2.5.0" + "@smithy/util-retry@^1.0.3", "@smithy/util-retry@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-1.0.4.tgz#9d95df3884981414163d5f780d38e3529384d9ad" @@ -8019,6 +8856,33 @@ resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== +"@turf/along@^6.0.1", "@turf/along@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/along/-/along-6.5.0.tgz#ab12eec58a14de60fe243a62d31a474f415c8fef" + integrity sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw== + dependencies: + "@turf/bearing" "^6.5.0" + "@turf/destination" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/bbox@*": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.5.0.tgz#bec30a744019eae420dac9ea46fb75caa44d8dc5" + integrity sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/bearing@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bearing/-/bearing-6.5.0.tgz#462a053c6c644434bdb636b39f8f43fb0cd857b0" + integrity sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/boolean-clockwise@6.5.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz#34573ecc18f900080f00e4ff364631a8b1135794" @@ -8027,7 +8891,31 @@ "@turf/helpers" "^6.5.0" "@turf/invariant" "^6.5.0" -"@turf/helpers@^6.5.0": +"@turf/circle@^6.0.1", "@turf/circle@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/circle/-/circle-6.5.0.tgz#dc017d8c0131d1d212b7c06f76510c22bbeb093c" + integrity sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A== + dependencies: + "@turf/destination" "^6.5.0" + "@turf/helpers" "^6.5.0" + +"@turf/destination@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/destination/-/destination-6.5.0.tgz#30a84702f9677d076130e0440d3223ae503fdae1" + integrity sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/distance@^6.0.1", "@turf/distance@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-6.5.0.tgz#21f04d5f86e864d54e2abde16f35c15b4f36149a" + integrity sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/helpers@6.x", "@turf/helpers@^6.1.4", "@turf/helpers@^6.5.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.5.0.tgz#f79af094bd6b8ce7ed2bd3e089a8493ee6cae82e" integrity sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw== @@ -8039,6 +8927,64 @@ dependencies: "@turf/helpers" "^6.5.0" +"@turf/length@^6.0.2", "@turf/length@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/length/-/length-6.5.0.tgz#ff4e9072d5f997e1c32a1311d214d184463f83fa" + integrity sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig== + dependencies: + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/line-intersect@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-intersect/-/line-intersect-6.5.0.tgz#dea48348b30c093715d2195d2dd7524aee4cf020" + integrity sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-segment" "^6.5.0" + "@turf/meta" "^6.5.0" + geojson-rbush "3.x" + +"@turf/line-segment@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-segment/-/line-segment-6.5.0.tgz#ee73f3ffcb7c956203b64ed966d96af380a4dd65" + integrity sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/line-slice@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-slice/-/line-slice-6.5.0.tgz#7b6e0c8e8e93fdb4e65c3b9a123a2ec93a21bdb0" + integrity sha512-vDqJxve9tBHhOaVVFXqVjF5qDzGtKWviyjbyi2QnSnxyFAmLlLnBfMX8TLQCAf2GxHibB95RO5FBE6I2KVPRuw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/nearest-point-on-line" "^6.5.0" + +"@turf/meta@6.x", "@turf/meta@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.5.0.tgz#b725c3653c9f432133eaa04d3421f7e51e0418ca" + integrity sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA== + dependencies: + "@turf/helpers" "^6.5.0" + +"@turf/nearest-point-on-line@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz#8e1cd2cdc0b5acaf4c8d8b3b33bb008d3cb99e7b" + integrity sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg== + dependencies: + "@turf/bearing" "^6.5.0" + "@turf/destination" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-intersect" "^6.5.0" + "@turf/meta" "^6.5.0" + "@types/aria-query@^4.2.0": version "4.2.2" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" @@ -8282,6 +9228,16 @@ dependencies: "@types/node" "*" +"@types/geojson@*", "@types/geojson@^7946.0.8": + version "7946.0.14" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.14.tgz#319b63ad6df705ee2a65a73ef042c8271e696613" + integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg== + +"@types/geojson@7946.0.8": + version "7946.0.8" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" + integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== + "@types/glob@*", "@types/glob@^7.1.1": version "7.2.0" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" @@ -8402,6 +9358,14 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" +"@types/jest@^28.1.3": + version "28.1.8" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.8.tgz#6936409f3c9724ea431efd412ea0238a0f03b09b" + integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== + dependencies: + expect "^28.0.0" + pretty-format "^28.0.0" + "@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -8458,6 +9422,27 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.177.tgz#f70c0d19c30fab101cad46b52be60363c43c4578" integrity sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw== +"@types/mapbox-gl@^2.6.0": + version "2.7.21" + resolved "https://registry.yarnpkg.com/@types/mapbox-gl/-/mapbox-gl-2.7.21.tgz#b0cad1e4c3d1bf1592444de36a4f27e890310416" + integrity sha512-Dx9MuF2kKgT/N22LsMUB4b3acFZh9clVqz9zv1fomoiPoBrJolwYxpWA/9LPO/2N0xWbKi4V+pkjTaFkkx/4wA== + dependencies: + "@types/geojson" "*" + +"@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.2": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz#0ef017b75eedce02ff6243b4189210e2e6d5e56d" + integrity sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA== + +"@types/mapbox__vector-tile@^1.3.0": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz#ad757441ef1d34628d9e098afd9c91423c1f8734" + integrity sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg== + dependencies: + "@types/geojson" "*" + "@types/mapbox__point-geometry" "*" + "@types/pbf" "*" + "@types/mdast@^3.0.0": version "3.0.10" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" @@ -8537,11 +9522,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.10.tgz#2e3ad0a680d96367103d3e670d41c2fed3da61ae" integrity sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA== -"@types/node@^10.17.60": - version "10.17.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== - "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0": version "16.11.24" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.24.tgz#9624338b685fea65fb1aba6c7b7eb45ca2df7188" @@ -8582,6 +9562,11 @@ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== +"@types/pbf@*", "@types/pbf@^3.0.2": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.5.tgz#a9495a58d8c75be4ffe9a0bd749a307715c07404" + integrity sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA== + "@types/pg@*": version "8.6.3" resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.6.3.tgz#eacfd5954752dd64d93d71d639e8c5b1f3bd3f22" @@ -8759,7 +9744,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^17.0.5": +"@types/react@*", "@types/react@17.0.37": version "17.0.37" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959" integrity sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg== @@ -8808,6 +9793,18 @@ "@types/mime" "^1" "@types/node" "*" +"@types/sinon@^10.0.10": + version "10.0.20" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.20.tgz#f1585debf4c0d99f9938f4111e5479fb74865146" + integrity sha512-2APKKruFNCAZgx3daAyACGzWuJ028VVCUDk6o2rw/Z4PXT0ogwdV4KUegW0MwVs0Zu59auPXbbuBJHF12Sx1Eg== + dependencies: + "@types/sinonjs__fake-timers" "*" + +"@types/sinonjs__fake-timers@*": + version "8.1.5" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz#5fd3592ff10c1e9695d377020c033116cc2889f2" + integrity sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ== + "@types/sinonjs__fake-timers@8.1.1": version "8.1.1" resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" @@ -8941,6 +9938,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" + "@types/yauzl@^2.9.1": version "2.9.2" resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a" @@ -9321,6 +10325,14 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@xstate/react@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@xstate/react/-/react-3.0.1.tgz#937eeb5d5d61734ab756ca40146f84a6fe977095" + integrity sha512-/tq/gg92P9ke8J+yDNDBv5/PAxBvXJf2cYyGDByzgtl5wKaxKxzDT82Gj3eWlCJXkrBg4J5/V47//gRJuVH2fA== + dependencies: + use-isomorphic-layout-effect "^1.0.0" + use-sync-external-store "^1.0.0" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -9403,11 +10415,16 @@ acorn-walk@^7.1.1, acorn-walk@^7.2.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.0.0, acorn-walk@^8.2.0: +acorn-walk@^8.0.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== +acorn-walk@^8.2.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" + integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== + acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" @@ -9423,11 +10440,16 @@ acorn@^8.0.4, acorn@^8.2.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== -acorn@^8.4.1, acorn@^8.7.0: +acorn@^8.4.1: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== +acorn@^8.7.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -9562,11 +10584,6 @@ amazon-cognito-identity-js@6.3.1: isomorphic-unfetch "^3.0.0" js-cookie "^2.2.1" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== - ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -9713,16 +10730,16 @@ archiver-utils@^2.1.0: normalize-path "^3.0.0" readable-stream "^2.0.0" -archiver@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" - integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== +archiver@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0" + integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw== dependencies: archiver-utils "^2.1.0" - async "^3.2.3" + async "^3.2.4" buffer-crc32 "^0.2.1" readable-stream "^3.6.0" - readdir-glob "^1.0.0" + readdir-glob "^1.1.2" tar-stream "^2.2.0" zip-stream "^4.1.0" @@ -9779,6 +10796,13 @@ args@^5.0.1: leven "2.1.0" mri "1.1.4" +aria-hidden@^1.1.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.3.tgz#14aeb7fb692bbb72d69bebfa47279c1fd725e954" + integrity sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ== + dependencies: + tslib "^2.0.0" + aria-query@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" @@ -10014,10 +11038,10 @@ async@^3.2.0: resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd" integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g== -async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +async@^3.2.4: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" @@ -10088,29 +11112,30 @@ aws-amplify@^5.3.5: "@aws-amplify/storage" "5.8.0" tslib "^2.0.0" -aws-cdk-lib@2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.88.0.tgz#72d165cb7dc168c5fa3b22caaacd8d33364866fc" - integrity sha512-bmhokh30HVeqlotWaoEmK7mKB9SJbJwpbsiVgmYe3JcMu8DposHQqaIPI7LnC+dg015tZaxUsExxOYBEw+vntQ== +aws-cdk-lib@2.130.0: + version "2.130.0" + resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.130.0.tgz#ce1b8cd1bcf9ca040d600c2570dfbac9b2df3cfb" + integrity sha512-yK7ibePipdjlI4AFM94fwwtsCkmpWJ0JFZTMPahahC/3Pxe/BA/nnI/4Namvl5QPxW5QlU0xQYU7cywioq3RQg== dependencies: - "@aws-cdk/asset-awscli-v1" "^2.2.200" + "@aws-cdk/asset-awscli-v1" "^2.2.202" "@aws-cdk/asset-kubectl-v20" "^2.1.2" - "@aws-cdk/asset-node-proxy-agent-v5" "^2.0.165" + "@aws-cdk/asset-node-proxy-agent-v6" "^2.0.1" "@balena/dockerignore" "^1.0.2" case "1.6.3" - fs-extra "^11.1.1" - ignore "^5.2.4" + fs-extra "^11.2.0" + ignore "^5.3.1" jsonschema "^1.4.1" + mime-types "^2.1.35" minimatch "^3.1.2" - punycode "^2.3.0" - semver "^7.5.4" + punycode "^2.3.1" + semver "^7.6.0" table "^6.8.1" yaml "1.10.2" -aws-cdk@2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-2.88.0.tgz#2e1adfa0d13145c44ff8a81705d962e861bf29f1" - integrity sha512-7Tj0uusA2nsEOsqkd4kB5vmzciz7l/eGBN5a+Ce4/CCcoe4ZCvT85L+T6tK0aohUTLZTAlTPBceH34RN5iMYpA== +aws-cdk@2.130.0: + version "2.130.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-2.130.0.tgz#086b859d81ff6b12e072f81692dc3fada3d17650" + integrity sha512-MsjGzQ2kZv0FEfXvpW7FTJRnefew0GrYt9M2SMN2Yn45+yjugGl2X8to416kABeFz1OFqW56hq8Y5BiLuFDVLQ== optionalDependencies: fsevents "2.3.2" @@ -10148,6 +11173,23 @@ aws-northstar@^1.3.10: use-debounce "^7.0.0" uuid "^8.3.2" +aws-sdk-client-mock-jest@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aws-sdk-client-mock-jest/-/aws-sdk-client-mock-jest-3.0.0.tgz#fff5146ddd56ba3987da3c9aecf9196fa254b4a6" + integrity sha512-oV1rBQZc4UumLbzZAhi8UAehUq+k75hkQYGLrVIP0iJj85Z9xw+EaSsmJke/KQ8Z3vng+Xv1xbounsxpvZpunQ== + dependencies: + "@types/jest" "^28.1.3" + tslib "^2.1.0" + +aws-sdk-client-mock@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aws-sdk-client-mock/-/aws-sdk-client-mock-3.0.0.tgz#4202ce0d52462e8aa96f81ccb0c250a4640b0976" + integrity sha512-4mBiWhuLYLZe1+K/iB8eYy5SAZyW2se+Keyh5u9QouMt6/qJ5SRZhss68xvUX5g3ApzROJ06QPRziYHP6buuvQ== + dependencies: + "@types/sinon" "^10.0.10" + sinon "^14.0.2" + tslib "^2.1.0" + aws-sdk@^2.1358.0: version "2.1358.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1358.0.tgz#86996622bc6c6ca6aed460273a168d6aeea27086" @@ -10164,10 +11206,10 @@ aws-sdk@^2.1358.0: uuid "8.0.0" xml2js "0.5.0" -aws-sdk@^2.1417.0: - version "2.1420.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1420.0.tgz#ae49a7b8e54fbcd72bfdd4a94473ccf25ca8c984" - integrity sha512-BvGzkKGgOXNj9WAeazvOLu48sCbU52mKLGIY5AjBKX4EuY8APcKKvl1R54kdUoJDnMwv0HwQpGvrVvLTDdOv/A== +aws-sdk@^2.1562.0: + version "2.1567.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1567.0.tgz#a82e8ecef666fedae1c312b579b5b7528848b9aa" + integrity sha512-5irUeMggUkQBARXtm3YN4E/lffEN51uIw+D7cD0+d8e2rhhJL/DTphP8cdx22xr+uOfOyRjx9SjSwHvack2B9Q== dependencies: buffer "4.9.2" events "1.1.1" @@ -10178,7 +11220,7 @@ aws-sdk@^2.1417.0: url "0.10.3" util "^0.12.4" uuid "8.0.0" - xml2js "0.5.0" + xml2js "0.6.2" aws-sdk@^2.865.0: version "2.1036.0" @@ -10253,19 +11295,14 @@ axe-core@^4.3.5: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.5.tgz#78d6911ba317a8262bfee292aeafcc1e04b49cc5" integrity sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA== -axios@0.24.0, axios@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== +axios@0.24.0, axios@0.26.0, axios@^0.24.0, axios@^1.6.5: + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== dependencies: - follow-redirects "^1.14.4" - -axios@0.26.0: - version "0.26.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.0.tgz#9a318f1c69ec108f8cd5f3c3d390366635e13928" - integrity sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og== - dependencies: - follow-redirects "^1.14.8" + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" axobject-query@^2.2.0: version "2.2.0" @@ -10918,14 +11955,14 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@4.14.2, browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.5, browserslist@^4.6.2, browserslist@^4.6.4: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" browserslist@^4.14.5, browserslist@^4.19.1: version "4.19.1" @@ -11234,7 +12271,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@^4.1.1: +camel-case@^4.1.1, camel-case@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== @@ -11304,11 +12341,25 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001280, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001400: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001280, caniuse-lite@^1.0.30001286: version "1.0.30001482" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz" integrity sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ== +caniuse-lite@^1.0.30001565: + version "1.0.30001566" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz#61a8e17caf3752e3e426d4239c549ebbb37fef0d" + integrity sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA== + +capital-case@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -11346,15 +12397,15 @@ ccount@^2.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== -cdk-assets@2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-2.88.0.tgz#300290fb98369f459467e40eed45ce3875b621b7" - integrity sha512-qt5rfsG2Ek7V9GH2z7epF4y0MOLt+Z/2n4ApbgQweLaq5bwptiIfkos5mAA0z+gOcd080yqvsZGPQKytTdlx+A== +cdk-assets@2.130.0: + version "2.130.0" + resolved "https://registry.yarnpkg.com/cdk-assets/-/cdk-assets-2.130.0.tgz#60ee7b14df1ec7d1e16cd437926e27a132d8c2c3" + integrity sha512-wUntK5qZUCXGJJjFCWE2odCxgmW5jWNwWceoV2vM68LQ+OyQGC0zAyR/bjLB3+P6vNT4bsq056JBBmx3rsfpJQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "2.88.0" - "@aws-cdk/cx-api" "2.88.0" - archiver "^5.3.1" - aws-sdk "^2.1417.0" + "@aws-cdk/cloud-assembly-schema" "2.130.0" + "@aws-cdk/cx-api" "2.130.0" + archiver "^5.3.2" + aws-sdk "^2.1562.0" glob "^7.2.3" mime "^2.6.0" yargs "^16.2.0" @@ -11417,6 +12468,24 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +change-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== + dependencies: + camel-case "^4.1.2" + capital-case "^1.0.4" + constant-case "^3.0.4" + dot-case "^3.0.4" + header-case "^2.0.4" + no-case "^3.0.4" + param-case "^3.0.4" + pascal-case "^3.1.2" + path-case "^3.0.4" + sentence-case "^3.0.4" + snake-case "^3.0.4" + tslib "^2.0.3" + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -11452,11 +12521,6 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= - check-more-types@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" @@ -11569,7 +12633,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.2.5: +classnames@2.3.1, classnames@^2.2.5: version "2.3.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== @@ -11873,7 +12937,7 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98" integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg== -commander@8.3.0: +commander@8.3.0, commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== @@ -12111,6 +13175,15 @@ console.table@0.10.0: dependencies: easy-table "1.1.0" +constant-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case "^2.0.2" + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -12507,11 +13580,6 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -12717,6 +13785,11 @@ css@^3.0.0: source-map "^0.6.1" source-map-resolve "^0.6.0" +csscolorparser@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" + integrity sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w== + cssdb@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" @@ -12839,6 +13912,11 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== +csstype@^3.0.4: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -12876,10 +13954,10 @@ cypress-localstorage-commands@^2.1.0: resolved "https://registry.yarnpkg.com/cypress-localstorage-commands/-/cypress-localstorage-commands-2.1.0.tgz#6fc299ec60b6b5ccfc09dd23d004866b7444ee78" integrity sha512-DIJLCIh+CcKulAxMVEng6EhpW691emHRqFUD4dK2HUn86Xzt3ABL3SkmxW4rXgvQt697nTDpZC+jo5K5BwndrQ== -cypress@10.3.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.3.1.tgz#7fab4ef43481c05a9a17ebe9a0ec860e15b95a19" - integrity sha512-As9HrExjAgpgjCnbiQCuPdw5sWKx5HUJcK2EOKziu642akwufr/GUeqL5UnCPYXTyyibvEdWT/pSC2qnGW/e5w== +cypress@12.15.0: + version "12.15.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.15.0.tgz#06103529583c41f39712c6cfa6d9d09a01731760" + integrity sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -12895,12 +13973,12 @@ cypress@10.3.1: check-more-types "^2.24.0" cli-cursor "^3.1.0" cli-table3 "~0.6.1" - commander "^5.1.0" + commander "^6.2.1" common-tags "^1.8.0" dayjs "^1.10.4" - debug "^4.3.2" + debug "^4.3.4" enquirer "^2.3.6" - eventemitter2 "^6.4.3" + eventemitter2 "6.4.7" execa "4.1.0" executable "^4.1.1" extract-zip "2.0.1" @@ -12913,7 +13991,7 @@ cypress@10.3.1: listr2 "^3.8.3" lodash "^4.17.21" log-symbols "^4.0.0" - minimist "^1.2.6" + minimist "^1.2.8" ospath "^1.2.2" pretty-bytes "^5.6.0" proxy-from-env "1.0.0" @@ -13044,6 +14122,11 @@ dayjs@^1.10.4: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== +debounce@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -13051,20 +14134,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@4, debug@4.1.1, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@~4.1.0: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" -debug@4.1.1, debug@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -13114,10 +14190,10 @@ decode-named-character-reference@^1.0.0: dependencies: character-entities "^2.0.0" -decode-uri-component@0.2.1, decode-uri-component@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.1.tgz#e9d7afd716fc1a7ec6ae7cc0aa3e540a1eac2e9d" - integrity sha512-XZHyaFJ6QMWhYmlz+UcmtaLeecNiXwkTGzCqG5WByt+1P1HnU6Siwf0TeP3OsZmlnGqQRSEMIxue0LLCaGY3dw== +decode-uri-component@^0.2.0, decode-uri-component@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== decompress-response@^3.3.0: version "3.3.0" @@ -13153,7 +14229,7 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.2.2: +deepmerge@4.2.2, deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== @@ -13323,6 +14399,11 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + detect-node@^2.0.4, detect-node@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" @@ -13384,6 +14465,11 @@ diff-sequences@^27.0.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -13394,10 +14480,10 @@ diff@^5.0.0: resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== -diff@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== diffie-hellman@^5.0.0: version "5.0.3" @@ -13655,6 +14741,11 @@ dynamodb-lock-client@^0.7.3: dependencies: "@hapi/joi" "17.1.1" +earcut@^2.2.2, earcut@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" + integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -13702,10 +14793,10 @@ electron-to-chromium@^1.4.17: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.18.tgz#2fb282213937986a20a653315963070e8321b3f3" integrity sha512-i7nKjGGBE1+YUIbfLObA1EZPmN7J1ITEllbhusDk+KIk6V6gUxN9PFe36v+Sd+8Cg0k3cgUv9lQhQZalr8rggw== -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== +electron-to-chromium@^1.4.601: + version "1.4.606" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.606.tgz#d9f83f7d06a253ccdd99475dccbbd38d4758ba2f" + integrity sha512-Zdv0XuhfyWZUsQ5Uq59d43ZmZOdoGZNWjeN4WCxxlQaP8crAWdnWcTxfHKcaJl6PW2SWpHx6DsxSx7v6KcGCuw== element-resize-detector@^1.2.2: version "1.2.4" @@ -13950,14 +15041,15 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== +es5-ext@0.10.63, es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.62, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: + version "0.10.63" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.63.tgz#9c222a63b6a332ac80b1e373b426af723b895bd6" + integrity sha512-hUCZd2Byj/mNKjfP9jXrdVZ62B8KuA/VoK7X8nUh5qT+AxDmcbvZz041oDVZdbIN1qW6XY9VDNwzkvKnZvK2TQ== dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + esniff "^2.0.1" + next-tick "^1.1.0" es5-shim@^4.5.13: version "4.6.5" @@ -13969,7 +15061,7 @@ es6-error@^4.0.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -es6-iterator@2.0.3, es6-iterator@^2.0.3, es6-iterator@~2.0.3: +es6-iterator@2.0.3, es6-iterator@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -13993,7 +15085,7 @@ es6-shim@^0.35.5: resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.6.tgz#d10578301a83af2de58b9eadb7c2c9945f7388a0" integrity sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA== -es6-symbol@^3.1.1, es6-symbol@~3.1.3: +es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== @@ -14660,6 +15752,16 @@ eslint@^7.11.0, eslint@^7.27.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" @@ -14758,10 +15860,10 @@ event-stream@=3.3.4: stream-combiner "~0.0.4" through "~2.3.1" -eventemitter2@^6.4.3: - version "6.4.5" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" - integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== +eventemitter2@6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== eventemitter3@^4.0.0, eventemitter3@^4.0.1, eventemitter3@^4.0.4, eventemitter3@^4.0.7: version "4.0.7" @@ -14930,6 +16032,17 @@ expect@^26.6.0, expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" +expect@^28.0.0: + version "28.1.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + express@^4.17.1, express@^4.17.3: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -15449,10 +16562,10 @@ folder-hash@^4.0.1: graceful-fs "~4.2.0" minimatch "~3.0.4" -follow-redirects@^1.0.0, follow-redirects@^1.14.4, follow-redirects@^1.14.8: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.0.0, follow-redirects@^1.15.4, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== font-awesome@^4.7.0: version "4.7.0" @@ -15546,6 +16659,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -15634,10 +16756,10 @@ fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -15758,6 +16880,11 @@ fuse.js@^6.4.6: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.4.6.tgz#62f216c110e5aa22486aff20be7896d19a059b79" integrity sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw== +fuzzy@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/fuzzy/-/fuzzy-0.1.3.tgz#4c76ec2ff0ac1a36a9dccf9a00df8623078d4ed8" + integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== + gauge@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" @@ -15792,6 +16919,27 @@ gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +geojson-flatten@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/geojson-flatten/-/geojson-flatten-1.1.1.tgz#601aae07ba6406281ebca683573dcda69eba04c7" + integrity sha512-k/6BCd0qAt7vdqdM1LkLfAy72EsLDy0laNwX0x2h49vfYCiQkRc4PSra8DNEdJ10EKRpwEvDXMb0dBknTJuWpQ== + +geojson-rbush@3.x: + version "3.2.0" + resolved "https://registry.yarnpkg.com/geojson-rbush/-/geojson-rbush-3.2.0.tgz#8b543cf0d56f99b78faf1da52bb66acad6dfc290" + integrity sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w== + dependencies: + "@turf/bbox" "*" + "@turf/helpers" "6.x" + "@turf/meta" "6.x" + "@types/geojson" "7946.0.8" + rbush "^3.0.1" + +geojson-vt@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" + integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== + get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -15811,6 +16959,11 @@ get-node-dimensions@^1.2.1: resolved "https://registry.yarnpkg.com/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz#fb7b4bb57060fb4247dd51c9d690dfbec56b0823" integrity sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ== +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -15961,6 +17114,11 @@ github-slugger@^1.0.0: resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.4.0.tgz#206eb96cdb22ee56fdc53a28d5a302338463444e" integrity sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ== +gl-matrix@^3.2.1, gl-matrix@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9" + integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -16040,7 +17198,7 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.2.3: +glob@^7.2.0, glob@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -16231,6 +17389,11 @@ graphql@^14.0.0: dependencies: iterall "^1.2.2" +grid-index@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7" + integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -16599,11 +17762,24 @@ hastscript@^7.0.0: property-information "^6.0.0" space-separated-tokens "^2.0.0" +hat@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" + integrity sha512-zpImx2GoKXy42fVDSEad2BPKuSQdLcqsCYa48K3zHSzM/ugWuYjLDr8IXxpVuL7uCLHw56eaiLxCRthhOzf5ug== + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +header-case@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== + dependencies: + capital-case "^1.0.4" + tslib "^2.0.3" + hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" @@ -16994,7 +18170,7 @@ ieee754@1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ieee754@^1.1.13, ieee754@^1.1.4: +ieee754@^1.1.12, ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -17038,10 +18214,10 @@ ignore@^5.1.1, ignore@^5.1.4, ignore@^5.1.8: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== -ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immer@8.0.1: version "8.0.1" @@ -17262,20 +18438,20 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@^1.1.0, ip@^1.1.5: +ip@1.1.9, ip@^1.1.5, ip@^1.1.8: + version "1.1.9" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" + integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== + +ip@^1.1.0: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ip@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== - ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" + integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" @@ -17366,7 +18542,7 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^1.0.2, is-buffer@^1.1.5, is-buffer@~1.1.6: +is-buffer@^1.0.2, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -18038,9 +19214,9 @@ iterate-value@^1.0.2: iterate-iterator "^1.0.1" jest-canvas-mock@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/jest-canvas-mock/-/jest-canvas-mock-2.3.1.tgz#9535d14bc18ccf1493be36ac37dd349928387826" - integrity sha512-5FnSZPrX3Q2ZfsbYNE3wqKR3+XorN8qFzDzB5o0golWgt6EOX1+emBnpOc9IAQ+NXFj8Nzm3h7ZdE/9H0ylBcg== + version "2.5.2" + resolved "https://registry.yarnpkg.com/jest-canvas-mock/-/jest-canvas-mock-2.5.2.tgz#7e21ebd75e05ab41c890497f6ba8a77f915d2ad6" + integrity sha512-vgnpPupjOL6+L5oJXzxTxFrlGEIbHdZqFU+LFNdtLxZ3lRDCl17FlTMM7IatoRQkrcyOTMlDinjUguqmQ6bR2A== dependencies: cssfontparser "^1.2.1" moo-color "^1.0.2" @@ -18174,6 +19350,16 @@ jest-diff@^27.0.0: jest-get-type "^27.3.1" pretty-format "^27.3.1" +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + jest-docblock@^26.0.0: version "26.0.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" @@ -18205,7 +19391,7 @@ jest-environment-jsdom@^26.6.2: jest-util "^26.6.2" jsdom "^16.4.0" -"jest-environment-node@>=24 <=26", jest-environment-node@^26.6.2: +jest-environment-node@26.6.2, "jest-environment-node@>=24 <=26", jest-environment-node@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== @@ -18227,7 +19413,7 @@ jest-environment-puppeteer@^4.4.0: jest-dev-server "^4.4.0" merge-deep "^3.0.2" -jest-extended@^0.11.5: +jest-extended@0.11.5: version "0.11.5" resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-0.11.5.tgz#f063b3f1eaadad8d7c13a01f0dfe0f538d498ccf" integrity sha512-3RsdFpLWKScpsLD6hJuyr/tV5iFOrw7v6YjA3tPdda9sJwoHwcMROws5gwiIZfcwhHlJRwFJB2OUvGmF3evV/Q== @@ -18256,6 +19442,11 @@ jest-get-type@^27.3.1: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.3.1.tgz#a8a2b0a12b50169773099eee60a0e6dd11423eff" integrity sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg== +jest-get-type@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== + jest-haste-map@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" @@ -18348,6 +19539,16 @@ jest-matcher-utils@^26.6.0, jest-matcher-utils@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + jest-message-util@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" @@ -18392,7 +19593,22 @@ jest-message-util@^27.3.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-mock-axios@^4.5.0: +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock-axios@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/jest-mock-axios/-/jest-mock-axios-4.5.0.tgz#9862bcbea6c0f9c42bc8a125169eaeea514b2f56" integrity sha512-AVrXkFS4psXtuR63J3SFOIpn6VQJHb3khuWJG+yKmSOAvY3jltAkBivV99QTWE+BA6kBYGGUojk6AGE177F8Gw== @@ -18416,9 +19632,9 @@ jest-mock@^27.0.6: "@types/node" "*" jest-pact@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/jest-pact/-/jest-pact-0.9.1.tgz#60c6a77a2bff1d8827c666e6dddd9d699bb5f253" - integrity sha512-IfM5mCbtPMR+894Dtbj8rwuM8Oxi/Pc9ecPd/ZrI8N5oCeKzsGjEOAN0RFAma2Pc1Gx+npBc4I3oP+ku+1SvLQ== + version "0.9.4" + resolved "https://registry.yarnpkg.com/jest-pact/-/jest-pact-0.9.4.tgz#c13f3d28cbe6288bbb0920e6b69857a9e1a042e9" + integrity sha512-vmBISe3DSGxOuMnjJJHdK0winrkBSpgD/Z3iMCaBUBBYG9bSPsBfGqBzAF0eYLGmQ7yUaoYlI798e515DGnzQw== jest-pnp-resolver@^1.2.2: version "1.2.2" @@ -18606,6 +19822,18 @@ jest-util@^27.3.1: graceful-fs "^4.2.4" picomatch "^2.2.3" +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" @@ -18714,7 +19942,7 @@ jest@26.6.0: import-local "^3.0.2" jest-cli "^26.6.0" -jest@^26.6.3: +jest@26.6.3, jest@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== @@ -18907,6 +20135,11 @@ jsonc-parser@3.0.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== +jsonc-parser@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -19073,6 +20306,11 @@ just-diff@^5.0.1: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.0.3.tgz#4c9c514dec5526b25ab977590e3c39a0cf271554" integrity sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg== +just-extend@^4.0.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" + integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== + jwa@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -19104,6 +20342,11 @@ jwt-decode@^3.1.2: resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== +kdbush@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0" + integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -19533,7 +20776,7 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash.debounce@^4.0.8: +lodash.debounce@^4.0.6, lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= @@ -19596,7 +20839,7 @@ lodash.isundefined@3.0.1: lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.1, lodash.merge@^4.6.2: version "4.6.2" @@ -19918,6 +21161,92 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +mapbox-gl@1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.13.1.tgz#322efe75ab4c764fc4c776da1506aad58d5a5b9d" + integrity sha512-GSyubcoSF5MyaP8z+DasLu5v7KmDK2pp4S5+VQ5WdVQUOaAqQY4jwl4JpcdNho3uWm2bIKs7x1l7q3ynGmW60g== + dependencies: + "@mapbox/geojson-rewind" "^0.5.0" + "@mapbox/geojson-types" "^1.0.2" + "@mapbox/jsonlint-lines-primitives" "^2.0.2" + "@mapbox/mapbox-gl-supported" "^1.5.0" + "@mapbox/point-geometry" "^0.1.0" + "@mapbox/tiny-sdf" "^1.1.1" + "@mapbox/unitbezier" "^0.0.0" + "@mapbox/vector-tile" "^1.3.1" + "@mapbox/whoots-js" "^3.1.0" + csscolorparser "~1.0.3" + earcut "^2.2.2" + geojson-vt "^3.2.1" + gl-matrix "^3.2.1" + grid-index "^1.1.0" + minimist "^1.2.5" + murmurhash-js "^1.0.0" + pbf "^3.2.1" + potpack "^1.0.1" + quickselect "^2.0.0" + rw "^1.3.3" + supercluster "^7.1.0" + tinyqueue "^2.0.3" + vt-pbf "^3.1.1" + +maplibre-gl-draw-circle@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/maplibre-gl-draw-circle/-/maplibre-gl-draw-circle-0.1.1.tgz#2b3ff6433c0b82dfc63b3ea555d8074492150180" + integrity sha512-CGdPcoTj9nWHn0Pa37tCoIyVKnN3AozWZjF2C64jnoWw1yzV4tOsUm+VWPbRRotJVKFQoEKHL8/5EjuS1FNiXQ== + dependencies: + "@mapbox/mapbox-gl-draw" "1.3.0" + "@turf/along" "^6.0.1" + "@turf/circle" "^6.0.1" + "@turf/distance" "^6.0.1" + "@turf/helpers" "^6.1.4" + "@turf/length" "^6.0.2" + +maplibre-gl-js-amplify@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/maplibre-gl-js-amplify/-/maplibre-gl-js-amplify-2.1.0.tgz#1a98396c14c083e848e43dffe6d15b97abb1c15c" + integrity sha512-iE2z3KOrNPOQ8oqzomquDLN8t6DyCD219ygFYXLhO1buYVXTIh47LR3YKDkB1mPshMpENTqLWku5hxI6fb/Omg== + dependencies: + "@mapbox/mapbox-gl-draw" "^1.3.0" + "@maplibre/maplibre-gl-geocoder" "^1.5.0" + "@turf/along" "^6.5.0" + "@turf/circle" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/length" "^6.5.0" + "@turf/line-slice" "^6.5.0" + debounce "^1.2.1" + maplibre-gl-draw-circle "^0.1.1" + +maplibre-gl@2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-2.1.9.tgz#042f3ef4224fa890ecf7a410145243f1fc943dcd" + integrity sha512-pnWJmILeZpgA5QSI7K7xFK3yrkyYTd9srw3fCi2Ca52Phm78hsznPwUErEQcZLfxXKn/1h9t8IPdj0TH0NBNbg== + dependencies: + "@mapbox/geojson-rewind" "^0.5.1" + "@mapbox/jsonlint-lines-primitives" "^2.0.2" + "@mapbox/mapbox-gl-supported" "^2.0.1" + "@mapbox/point-geometry" "^0.1.0" + "@mapbox/tiny-sdf" "^2.0.4" + "@mapbox/unitbezier" "^0.0.1" + "@mapbox/vector-tile" "^1.3.1" + "@mapbox/whoots-js" "^3.1.0" + "@types/geojson" "^7946.0.8" + "@types/mapbox__point-geometry" "^0.1.2" + "@types/mapbox__vector-tile" "^1.3.0" + "@types/pbf" "^3.0.2" + csscolorparser "~1.0.3" + earcut "^2.2.3" + geojson-vt "^3.2.1" + gl-matrix "^3.4.3" + murmurhash-js "^1.0.0" + pbf "^3.2.1" + potpack "^1.0.2" + quickselect "^2.0.0" + supercluster "^7.1.4" + tinyqueue "^2.0.3" + vt-pbf "^3.1.3" + markdown-escapes@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" @@ -19957,15 +21286,6 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - mdast-squeeze-paragraphs@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" @@ -20867,10 +22187,10 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@>=1.2.6, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@>=1.2.6, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" @@ -20952,12 +22272,10 @@ minipass@^3.1.6: dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.0.tgz#7cebb0f9fa7d56f0c5b17853cbe28838a8dbbd3b" - integrity sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw== - dependencies: - yallist "^4.0.0" +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== minizlib@^1.3.3: version "1.3.3" @@ -21144,6 +22462,11 @@ multimatch@^5.0.0: arrify "^2.0.1" minimatch "^3.0.4" +murmurhash-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw== + mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -21244,16 +22567,22 @@ next-tick@1, next-tick@^1.1.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +nise@^5.1.2: + version "5.1.5" + resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.5.tgz#f2aef9536280b6c18940e32ba1fbdc770b8964ee" + integrity sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw== + dependencies: + "@sinonjs/commons" "^2.0.0" + "@sinonjs/fake-timers" "^10.0.2" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + path-to-regexp "^1.7.0" + no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -21386,10 +22715,10 @@ node-releases@^2.0.1: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== node-stream-zip@^1.15.0: version "1.15.0" @@ -22333,7 +23662,7 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@^3.0.3: +param-case@^3.0.3, param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== @@ -22452,6 +23781,14 @@ path-browserify@0.0.1: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== +path-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -22559,6 +23896,14 @@ pause-stream@0.0.11: dependencies: through "~2.3" +pbf@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" + integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== + dependencies: + ieee754 "^1.1.12" + resolve-protobuf-schema "^2.1.0" + pbkdf2@^3.0.3: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" @@ -23510,6 +24855,11 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" +potpack@^1.0.1, potpack@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.2.tgz#23b99e64eb74f5741ffe7656b5b5c4ddce8dfc14" + integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -23607,6 +24957,16 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^28.0.0, pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" @@ -23765,6 +25125,11 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= +protocol-buffers-schema@^3.3.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03" + integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw== + protocols@^2.0.0, protocols@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" @@ -23881,10 +25246,10 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -punycode@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pupa@^2.1.1: version "2.1.1" @@ -23921,7 +25286,7 @@ q@~1.4.1: resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= -qrcode@^1.4.4: +qrcode@1.5.0, qrcode@^1.4.4: version "1.5.0" resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.0.tgz#95abb8a91fdafd86f8190f2836abbfc500c72d1b" integrity sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ== @@ -23931,10 +25296,10 @@ qrcode@^1.4.4: pngjs "^5.0.0" yargs "^15.3.1" -qs@6.11.0, qs@6.7.0, qs@^6.10.0, qs@^6.7.3, qs@~6.10.3, qs@~6.5.2: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== +qs@6.10.4, qs@6.11.0, qs@6.7.0, qs@^6.10.0, qs@^6.7.3, qs@~6.5.2: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" @@ -23998,6 +25363,11 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +quickselect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" + integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== + raf-schd@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" @@ -24068,6 +25438,13 @@ raw-loader@^4.0.2: loader-utils "^2.0.0" schema-utils "^3.0.0" +rbush@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/rbush/-/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf" + integrity sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w== + dependencies: + quickselect "^2.0.0" + rc@1.2.8, rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -24234,6 +25611,11 @@ react-final-form@^6.5.0: dependencies: "@babel/runtime" "^7.15.4" +react-generate-context@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-generate-context/-/react-generate-context-1.0.1.tgz#4454cfecb0b3f27502185dfa5c63d5f5ec14b936" + integrity sha512-rOFGh3KgC2Ot66DmVCcT1p8lVJCmmCjzGE5WK/KsyDFi43wpIbW1PYcr04cQ3mbF4LaIkY6SpK7k1DOgwtpUXA== + react-inspector@^5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-5.1.1.tgz#58476c78fde05d5055646ed8ec02030af42953c8" @@ -24263,6 +25645,13 @@ react-lifecycles-compat@^3.0.4: resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== +react-map-gl@7.0.15: + version "7.0.15" + resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-7.0.15.tgz#ded08ccff49012099a9945b6c2ef7f266dfbde49" + integrity sha512-l7x8lBhIEcHTreSgrc7hsKv5HsMY1wQg2PVXuKAPmQtgRZc9C3NGwurVJFe24gOlAwzta5UavAHWDiZdU1ZNCw== + dependencies: + "@types/mapbox-gl" "^2.6.0" + react-markdown@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-6.0.3.tgz#625ec767fa321d91801129387e7d31ee0cb99254" @@ -24373,6 +25762,25 @@ react-refresh@^0.8.3: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== +react-remove-scroll-bar@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.5.tgz#cd2543b3ed7716c7c5b446342d21b0e0b303f47c" + integrity sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw== + dependencies: + react-style-singleton "^2.2.1" + tslib "^2.0.0" + +react-remove-scroll@^2.4.0: + version "2.5.7" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz#15a1fd038e8497f65a695bf26a4a57970cac1ccb" + integrity sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA== + dependencies: + react-remove-scroll-bar "^2.3.4" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + react-resize-detector@^6.6.3: version "6.7.6" resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-6.7.6.tgz#4416994e5ead7eba76606e3a248a1dfca49b67a3" @@ -24497,6 +25905,15 @@ react-smooth@^2.0.0: raf "^3.4.0" react-transition-group "2.9.0" +react-style-singleton@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" + integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== + dependencies: + get-nonce "^1.0.0" + invariant "^2.2.4" + tslib "^2.0.0" + react-syntax-highlighter@^15.4.4: version "15.4.5" resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.4.5.tgz#db900d411d32a65c8e90c39cd64555bf463e712e" @@ -24745,10 +26162,10 @@ readable-stream@~1.0.31: isarray "0.0.1" string_decoder "~0.10.x" -readdir-glob@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.2.tgz#b185789b8e6a43491635b6953295c5c5e3fd224c" - integrity sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA== +readdir-glob@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== dependencies: minimatch "^5.1.0" @@ -24905,6 +26322,11 @@ regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regenerator-transform@^0.14.2: version "0.14.5" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" @@ -25329,6 +26751,13 @@ resolve-pathname@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== +resolve-protobuf-schema@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== + dependencies: + protocol-buffers-schema "^3.3.1" + resolve-url-loader@^3.1.2: version "3.1.4" resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz#3c16caebe0b9faea9c7cc252fa49d2353c412320" @@ -25546,6 +26975,16 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rw@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + +rw@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/rw/-/rw-0.1.4.tgz#4903cbd80248ae0ede685bf58fd236a7a9b29a3e" + integrity sha512-vSj3D96kMcjNyqPcp65wBRIDImGSrUuMxngNNxvw8MQaO+aQ6llzRPH7XcJy5zrpb3wU++045+Uz/IDIM684iw== + rx@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" @@ -25737,7 +27176,7 @@ semver@7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@7.3.4, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2, semver@^7.5.4: +semver@7.3.4, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -25749,6 +27188,13 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semve resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -25768,6 +27214,15 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +sentence-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -26000,6 +27455,18 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +sinon@^14.0.2: + version "14.0.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-14.0.2.tgz#585a81a3c7b22cf950762ac4e7c28eb8b151c46f" + integrity sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w== + dependencies: + "@sinonjs/commons" "^2.0.0" + "@sinonjs/fake-timers" "^9.1.2" + "@sinonjs/samsam" "^7.0.1" + diff "^5.0.0" + nise "^5.1.2" + supports-color "^7.2.0" + sirv@^1.0.7: version "1.0.18" resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.18.tgz#105fab52fb656ce8a2bebbf36b11052005952899" @@ -26060,6 +27527,14 @@ smart-buffer@^4.1.0, smart-buffer@^4.2.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -26249,28 +27724,11 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@0.6.1, source-map@^0.5.0, source-map@^0.5.6, source-map@^0.6.0, source-map@^0.6.1, source-map@^0.7.3, source-map@~0.2.0, source-map@~0.6.0, source-map@~0.6.1, source-map@~0.7.2: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.7.3, source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== - dependencies: - amdefine ">=0.0.4" - sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -26837,6 +28295,21 @@ strong-log-transformer@^2.1.0: minimist "^1.2.0" through "^2.3.4" +style-dictionary@3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/style-dictionary/-/style-dictionary-3.7.0.tgz#02f4b17232cbb1142a3fdc09a17dfb08aafde3b0" + integrity sha512-BL4AQS5kNDBXbFHWJhlCve6+ojnHgHkiwhf2nNByU698elXWdyK5b27OprphT4q0/tJ52zB+lodhqxIxbNOajQ== + dependencies: + chalk "^4.0.0" + change-case "^4.1.2" + commander "^8.3.0" + fs-extra "^10.0.0" + glob "^7.2.0" + json5 "^2.2.0" + jsonc-parser "^3.0.0" + lodash "^4.17.15" + tinycolor2 "^1.4.1" + style-loader@1.3.0, style-loader@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" @@ -26861,6 +28334,19 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +subtag@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/subtag/-/subtag-0.5.0.tgz#1728a8df5257fb98ded4fb981b2ac7af10cf58ba" + integrity sha512-CaIBcTSb/nyk4xiiSOtZYz1B+F12ZxW8NEp54CdT+84vmh/h4sUnHGC6+KQXUfED8u22PQjCYWfZny8d2ELXwg== + +suggestions-list@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/suggestions-list/-/suggestions-list-0.0.2.tgz#3c5f501833e697a726a1bf58fbc454d57ffa0e98" + integrity sha512-Yw0fdq14c6RQWQIfE1/8WEi9Dp8rjyCD6FhYA/Tit2/ADbE9Y4ADG4ezlvivsa8Civ5nz++pyVVBMjOMlgIUJw== + dependencies: + fuzzy "^0.1.1" + xtend "^4.0.0" + sumchecker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e" @@ -26868,6 +28354,13 @@ sumchecker@^2.0.2: dependencies: debug "^2.2.0" +supercluster@^7.1.0, supercluster@^7.1.4: + version "7.1.5" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.5.tgz#65a6ce4a037a972767740614c19051b64b8be5a3" + integrity sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg== + dependencies: + kdbush "^3.0.0" + supports-color@^3.1.0: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" @@ -26889,7 +28382,7 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -26971,17 +28464,6 @@ table@^6.0.9: string-width "^4.2.3" strip-ansi "^6.0.1" -table@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - table@^6.8.1: version "6.8.1" resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" @@ -27038,13 +28520,13 @@ tar@^4.4.18, tar@~4.4.8: yallist "^3.1.1" tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2, tar@^6.1.9: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^4.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" @@ -27245,6 +28727,11 @@ tinycolor2@^1.4.1: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== +tinyqueue@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" + integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -27365,6 +28852,11 @@ traverse-chain@~0.1.0: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= +traverse@~0.6.6: + version "0.6.8" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.8.tgz#5e5e0c41878b57e4b73ad2f3d1e36a715ea4ab15" + integrity sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA== + tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -27518,16 +29010,16 @@ tslib@2.3.1, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3. resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@2.4.0, tslib@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tslib@^1.11.1, tslib@^1.13.0, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - tslib@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" @@ -27576,10 +29068,10 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= -ttypescript@^1.5.12: - version "1.5.13" - resolved "https://registry.yarnpkg.com/ttypescript/-/ttypescript-1.5.13.tgz#c3bcb760599fe49157d30c5d5895a0023cbb7f30" - integrity sha512-KT/RBfGGlVJFqEI8cVvI3nMsmYcFvPSZh8bU0qX+pAwbi7/ABmYkzn7l/K8skw0xmYjVCoyaV6WLsBQxdadybQ== +ttypescript@1.5.15, ttypescript@^1.5.12: + version "1.5.15" + resolved "https://registry.yarnpkg.com/ttypescript/-/ttypescript-1.5.15.tgz#e45550ad69289d06d3bc3fd4a3c87e7c1ef3eba7" + integrity sha512-48ykDNHzFnPMnv4hYX1P8Q84TvCZyL1QlFxeuxsuZ48X2+ameBgPenvmCkHJtoOSxpoWTWi8NcgNrRnVDOmfSg== dependencies: resolve ">=1.9.0" @@ -27609,7 +29101,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -27677,6 +29169,11 @@ type@^2.5.0: resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -28100,10 +29597,10 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -28136,6 +29633,20 @@ update-notifier@^5.1.0: semver-diff "^3.1.1" xdg-basedir "^4.0.0" +upper-case-first@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== + dependencies: + tslib "^2.0.3" + +upper-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== + dependencies: + tslib "^2.0.3" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -28193,6 +29704,13 @@ url@0.11.0, url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-callback-ref@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.1.tgz#9be64c3902cbd72b07fe55e56408ae3a26036fd0" + integrity sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ== + dependencies: + tslib "^2.0.0" + use-debounce@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/use-debounce/-/use-debounce-7.0.1.tgz#380e6191cc13ad29f8e2149a12b5c37cc2891190" @@ -28203,11 +29721,29 @@ use-immer@^0.6.0: resolved "https://registry.yarnpkg.com/use-immer/-/use-immer-0.6.0.tgz#ca6aa5ade93018e2c65cf128d19ada54fc23f70d" integrity sha512-dFGRfvWCqPDTOt/S431ETYTg6+uxbpb7A1pptufwXVzGJY3RlXr38+3wyLNpc6SbbmAKjWl6+EP6uW74fkEsXQ== +use-isomorphic-layout-effect@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + use-memo-one@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.2.tgz#0c8203a329f76e040047a35a1197defe342fab20" integrity sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ== +use-sidecar@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" + integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + +use-sync-external-store@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -28480,13 +30016,22 @@ vm-browserify@^1.0.1: integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== vm2@^3.9.17: - version "3.9.17" - resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.17.tgz#251b165ff8a0e034942b5181057305e39570aeab" - integrity sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw== + version "3.9.19" + resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.19.tgz#be1e1d7a106122c6c492b4d51c2e8b93d3ed6a4a" + integrity sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg== dependencies: acorn "^8.7.0" acorn-walk "^8.2.0" +vt-pbf@^3.1.1, vt-pbf@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.3.tgz#68fd150756465e2edae1cc5c048e063916dcfaac" + integrity sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA== + dependencies: + "@mapbox/point-geometry" "0.1.0" + "@mapbox/vector-tile" "^1.3.1" + pbf "^3.2.1" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -28838,6 +30383,11 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +wgs84@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76" + integrity sha512-ANHlY4Rb5kHw40D0NJ6moaVfOCMrp9Gpd1R/AIQYg2ko4/jzcJ+TVXYYF6kXJqQwITvEZP4yEthjM7U6rYlljQ== + whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -29252,7 +30802,7 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xml2js@0.4.19, xml2js@0.5.0, xml2js@^0.5.0: +xml2js@0.4.19, xml2js@0.5.0, xml2js@0.6.2, xml2js@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== @@ -29275,7 +30825,12 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xstate@^4.33.6: + version "4.38.3" + resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.38.3.tgz#4e15e7ad3aa0ca1eea2010548a5379966d8f1075" + integrity sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw== + +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==