diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..e6e5a6e20 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,32 @@ +root = true + +# base settings +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# hidden files +[.*] +end_of_line = lf + +# by extensions +[*.sh] +end_of_line = lf +[*.bat] +end_of_line = crlf +[*.md] +trim_trailing_whitespace = false +indent_size = 4 +[*.{yml,yaml}] +indent_size = 4 +[{Makefile,go.mod,go.sum,*.go}] +indent_style = tab +indent_size = 4 + +# by unique files +[package{,-lock}.json] +end_of_line = lf diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..3479441d0 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +**/node_modules/** +**/cdk.out/** +*.js +*.d.ts diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..e0d64110e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,14 @@ +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto + +# Declare files that will always have LF or CRLF line endings on checkout. +*.sln text eol=crlf +*.bat text eol=crlf +*.sh text eol=lf + +# Denote all files that are truly binary and should not be modified. +*.png binary +*.jpg binary + +# Exclude from git archive +.gitkeep export-ignore diff --git a/.gitignore b/.gitignore index e57f59e0c..afd49c545 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,16 @@ +*.d.ts *.js !jest.config.js -*.d.ts node_modules +.DS_Store # CDK asset staging directory .cdk.staging cdk.out -cdk.context.json # Parcel default cache directory .parcel-cache + +# CDK context +cdk.context.json + diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..5a22231d7 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "esbenp.prettier-vscode", + "amazonwebservices.aws-toolkit-vscode", + "editorconfig.editorconfig", + "dbaeumer.vscode-eslint", + "eamodio.gitlens" + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md index b14c3aed8..5f48ef424 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,27 @@ 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.2.0] - 2021-10-26 + +### BREAKING CHANGES + +- Re-organize applications into usecases directory. Now we use npm workspaces to build. + +### Added + +- **guest-apiapp-sample** add Serverless API application sample (NodeJS and Python) +- **guest-webapp-sample** add SSL(R53+CF+ACM+ALB) implementation sample +- **guest-webapp-sample** add Canary(CloudWatch Synthetics) sample +- **guest-webapp-sample** add CloudWatch Dashboard sample +- add documents (HowTo and deployment to controltower) + +### Changed + +- Update CDK version to 1.129.0 and its dependencies. +- **guest-webapp-sample** generalize ECS sample. now we don't use aws-ecs-patterns. +- **guest-webapp-sample** re-organize KMS keys +- **base-ct-guest** **base-standalone** refine notification settings for SecurityHub + ## [1.1.1] - 2021-06-07 ### Changed diff --git a/README.md b/README.md index 19f197465..8b3176f9c 100644 --- a/README.md +++ b/README.md @@ -4,650 +4,366 @@ Baseline Environment on AWS(BLEA) is a set of reference CDK template to establish secure baseline on standalone-account or ControlTower based multi-account AWS environment. This solution provides basic and extensible guardrail with AWS security services and end-to-end sample CDK code for typical system architecture. This template is also useful to learn more about AWS architecting best practices and how to customize CDK code as we incorporated comments in detail so that users can know why and how to customize. -Jump to | [Changelog](CHANGELOG.md) | [Deployment Pipeline](tools/cicd/README.md) | [Standalone to ControlTower](doc/Standalone2ControlTower.md) | +Jump to | [Changelog](CHANGELOG.md) | [HowTo](doc/HowTo.md) | [Deploy to Multiaccount environment](/doc/DeployToControlTower_ja.md) | [Standalone to ControlTower](doc/Standalone2ControlTower_ja.md) | [Deployment Pipeline](tools/cicd/README_ja.md) | -# Governance Architecture +## Governance Architecture -## Operation patterns +### Operation patterns ![BLEA-OpsPatterns](doc/images/BLEA-OpsPatterns.png) -## Multi-Account Governance (with ControlTower) +### Multi-Account Governance (with ControlTower) ![BLEA-GovOverviewMultiAccount](doc/images/BLEA-GovOverviewMultiAccount.png) -## Standalone Governance (with Individual account) +### Standalone Governance (with Individual account) ![BLEA-GovOverviewSingleAccount](doc/images/BLEA-GovOverviewSingleAccount.png) -# Baseline Architecture +## Baseline Architecture -## Multi-Account (With ControlTower) +### Multi-Account (With ControlTower) ![BLEA-ArchMultiAccount](doc/images/BLEA-ArchMultiAccount.png) -## Standalone (With Individual account) +### Standalone (With Individual account) ![BLEA-ArchSingleAccount](doc/images/BLEA-ArchSingleAccount.png) -## Stack Architecture (Standalone) +### Stack Architecture (Standalone) ![BLEA-StackDependency](doc/images/BLEA-StackDependency.png) -# Sample Architectures on Guest Account +## Governance baselines -## ECS +| Use Cases | Folders | +| ------------------------------------------------- | -------------------------- | +| Standalone Governance Base | `usecases/base-standalone` | +| ControlTower governance base (for guest accounts) | `usecases/base-ct-guest` | +| ControlTower governance base for Audit accounts | `usecases/base-ct-audit` | -![BLEA-GuestSampleECS](doc/images/BLEA-GuestSampleECS.png) +## Sample applications for Guest systems -## AutoSacling +| Use Cases | Folders | +| ---------------------- | ------------------------------ | +| Web Application Sample | `usecases/guest-webapp-sample` | +| API Application Sample | `usecases/guest-apiapp-sample` | -![BLEA-GuestSampleASG](doc/images/BLEA-GuestSampleASG.png) +- The web application sample provides four different options -## EC2 + - Sample web application with ECS (default) + - Option: SSL-enabled sample of ECS web application + - Option: Sample web application with AutoScaling + - Option: Sample web application with EC2 -![BLEA-GuestSampleEC2](doc/images/BLEA-GuestSampleEC2.png) +- The API application sample provides two different options + - Sample serverless API application with NodeJS (default) + - Option: Python implementation of the same application -# Deployment +> NOTE: Each use case can be deployed independently, but other options within the same use case may share some resources. Please check the dependencies when deleting or changing them. -> Information: \ -> This deployment process uses AWS credential (e.g. API secret key) on your local PC/Mac. If you want to use CloudShell, please see `Appendix A` that on a bottom of this document. +## Deployment flow -# 1. Setup CDK prerequisities and build +Describe the steps to deploy. When deploying only, it is not necessary to build a development environment, but it is recommended to have a development environment that includes an editor because it is easier to change the code and reduces mistakes. -See: https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/getting_started.html +### Prerequisites -- TypeScript 2.7 or later +#### a. Runtime -``` -npm -g install typescript -``` +Use the following runtimes: Follow the instructions for each OS to install. -- CDK 1.100.0 or later - -``` -npm install -g aws-cdk -``` +- [Node.js](https://nodejs.org/) (>= `14.0.0`) + - `npm` (>= `7.0.0`) +- [Git](https://git-scm.com/) -- Build +npm requires 7.0.0 or higher because it uses workspaces. Please install the latest version as follows. -``` -cd path-to-source -npm ci -npm run build +```sh +npm install -g npm ``` -## (OPTIONAL) Use latest CDK modules +#### b. Development environment -After install CDK, Use below commands instead of `npm ci`. +We recommend that you set up a development environment, even if you are not doing serious development, to ensure safe editing of CDK code. The following are the steps to set up VisualStudioCode. -- Install ncu +- [Instructions]: [VisualStudioCode Setup Instructions](doc/HowTo.md#VisualStudioCode-Setup-Instructions) -``` -npm install -g npm-check-updates -``` +### Typical deployment steps -- Update modules +The most typical deployment steps for using BLEA are as follows: Here are the steps for deploying a governance base and guest applications in a single account. -``` -cd path-to-source -rm -rf package-lock.json node_modules/ -ncu -u -npm install -``` +1. Install related libraries and build code -- Build +2. Configuring AWS CLI Credentials -``` -npm run build -``` +3. Create an account for deployment -# 3. Setup AWS CLI/CDK Configurations +4. Deploy a governance base -## Optioin1. Setup AWS Credentials (Permanent Credentials) +5. Deploy guest application samples -For development purpose, you can use permanent credentials for IAM User created on each account. Here is an example for using `prof_dev` and `prof_prod` account. +> NOTE: +> Here we will introduce the standalone governance base and the ECS version of the web application sample in a single account. +> For instructions on deploying a multi-account version using ControlTower, see [Deploy to ControlTower environment](doc/DeployToControlTower.md). -~/.aws/credentials +## Implementation steps -``` -[prof_dev] -aws_access_key_id = XXXXXXXXXXXXXXX -aws_secret_access_key = YYYYYYYYYYYYYYY -rgion = ap-northeast-1 - -[prof_prod] -aws_access_key_id = ZZZZZZZZZZZZZZZZ -aws_secret_access_key = PPPPPPPPPPPPPPPP -region = ap-northeast-1 -``` +Here is the simplest example of deploying the Standalone version to a single account. -## Option2. Setup AWS Credentials (with AWS SSO) +### 1. Checkout a repository and initializing a project -We recommend to use AWS SSO to login AWS Management Console and AWS CLI - AWS SSO Integration. +#### 1-1. Checkout a repository -> Notes: For AWS CLI-AWS SSO Integration, you need to use AWS CLIv2 -> See: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html +```sh +git clone https://github.com/aws-samples/baseline-environment-on-aws.git +cd baseline-environment-on-aws +``` -To use AWS CLI - AWS SSO Integration from AWS CDK, you need to install opensource tool aws2-wrap (https://github.com/linaro-its/aws2-wrap) on your build environment. +#### 1-2. Initializing a project -``` -pip3 install aws2-wrap +```sh +# install dependencies +npm ci ``` -Configure AWS CLI profile for deploying to Audit Account. This example assume Management Account ID as `1111111111111`, Audit Account ID as `222222222222`. +#### 1-3. Setting up a pre-commit hook for Git -~/.aws/config +Registers a hook to perform checks by Linter, Formatter, and Git-Secrets when committing to Git. Follow the steps below to set it up. It is not required if you are just deploying, but we recommend a setup for more secure development. -``` -# for Management Account -[profile ct-management-sso] -sso_start_url = https://d-90xxxxxxxx.awsapps.com/start#/ -sso_region = ap-northeast-1 -sso_account_id = 1111111111111 -sso_role_name = AWSAdministratorAccess -region = ap-northeast-1 +- [Instructions]: [Git pre-commit hook setup](doc/HowTo.md#Git-pre-commit-hook-setup) -# for AWSControlTowerExecution Role on Audit Account -[profile ct-audit-exec-role] -role_arn = arn:aws:iam::222222222222:role/AWSControlTowerExecution -source_profile = ct-management-sso -region = ap-northeast-1 +### 2. Set credentials for the AWS CLI -# for CDK access to ct-audit-exec-role -[profile ct-audit-exec] -credential_process = aws2-wrap --process --profile ct-audit-exec-role -region = ap-northeast-1 -``` +You need your AWS credentials (API key) to deploy the CDK. Here's the simplest way to use permanent credentials. -Configure AWS CLI profile for deploying to Guest Account. +This method is mainly used for development environments. Consider using two accounts, `prof_dev` and `prof_prod`, as an example of a profile in the AWS CLI. -~/.aws/config +~/.aws/credentials -``` -# for Guest Account -[profile ct-guest-sso] -sso_start_url = https://d-90xxxxxxxx.awsapps.com/start#/ -sso_region = ap-northeast-1 -sso_account_id = 123456789012 -sso_role_name = AWSAdministratorAccess +```text +[prof_dev] +aws_access_key_id = XXXXXXXXXXXXXXX +aws_secret_access_key = YYYYYYYYYYYYYYY region = ap-northeast-1 -# for CDK access to ct-guest-sso -[profile ct-guest] -credential_process = aws2-wrap --process --profile ct-guest-sso +[prof_prod] +aws_access_key_id = ZZZZZZZZZZZZZZZZ +aws_secret_access_key = PPPPPPPPPPPPPPPP region = ap-northeast-1 ``` -Now, you can login with AWS SSO like this. - -``` -aws sso login --profile ct-guest-sso -``` +### 3. Create an account for deployment -This command display AWS SSO login window on your browser. Enter username and password, then you will go back to terminal and can access with AWS CLI with profile `ct-guest-sso`. On AWS CDK, you need to use profile `ct-guest`. +#### 3-1. Create a new account -# 4. Define parameters in CDK Context +Create a new account using Organizations. +It is possible to use a single account that does not use Organizations, but members under Organizations to make it easier to migrate to a multi-account management environment later It is recommended to use an account. -You need to define deployment parameters on CDK Context. Context values are defined in cdk.json file or cdk.context.json file (or -c option). +#### 3-2. Set up Slack to prepare for using AWS Chatbot -- See: https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/context.html -- See: https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/get_context_var.html +BLEA uses Slack channels for notification of security and monitoring events, respectively. Create two channels on Slack and follow the steps below to set up the default AWS Chatbot. +When you are done, make a note of the ID of one workspace and the ID of two channels you want to notify for later settings. -## 1. Sample cdk.json and cdk.context.json: +- [Instructions]: [Set up Slack for AWS ChatBot](doc/HowTo.md#set-up-slack-for-aws-chatbot) -These files define `dev`, `prod`, `ctaudit`, `my` context. cdk.json is managed by git. cdk.context.json doesn't managed by git so you can use it just for your local environmen only. +### 4. Deploy a governance base -For production stacks, we recommend that you explicitly specify the environment in cdk.json using the `env` property. If you not specified env property, to use CDK_DEFAULT_ACCOUNT and CDK_DEFAULT_REGION variables. +#### 4-1. Set deployment information (Context) -cdk.json +You must specify parameters in the CDK Context (cdk.json) for each use case for deployment. Here is the configuration file for the Standalone version of the governance base. +```sh +usecases/base-standalone/cdk.json ``` + +This example shows an example of defining a Context called `dev`. To verify the same configuration and deploy it to a production account, prepare a Context such as `staging` or `prod`. The Context name can be any alphabet. + +usecases/base-standalone/cdk.json + +```json { "app": "npx ts-node bin/blea-base-sa.ts", "context": { "dev": { - "description": "Environment variables for blea-guest-*-samples.ts", + "description": "Environment variables for Governance base ", "envName": "Development", - "vpcCidr": "10.100.0.0/16", - "securityNotifyEmail": "notify-security@example.com", - "monitoringNotifyEmail": "notify-monitoring@example.com", - "dbUser": "dbadmin", - "slackNotifier": { - "workspaceId": "T8XXXXXXX", - "channelIdSec": "C01XXXXXXXX", - "channelIdMon": "C01YYYYYYYY" - } - }, - "prod": { - "description": "Environment variables for blea-guest-*-samples.ts", - "env": { - "account": "111111111111", - "region": "ap-northeast-1" - }, - "envName": "Production", - "vpcCidr": "10.110.0.0/16", "securityNotifyEmail": "notify-security@example.com", - "monitoringNotifyEmail": "notify-monitoring@example.com", - "dbUser": "dbadmin", - "slackNotifier": { - "workspaceId": "T8XXXXXXX", - "channelIdSec": "C01XXXXXXXX", - "channelIdMon": "C01YYYYYYYY" - } - }, - "ctaudit": { - "description": "Environment variables for blea-base-ct-audit.ts", - "env": { - "account": "222222222222", - "region": "ap-northeast-1" - }, "slackNotifier": { "workspaceId": "T8XXXXXXX", - "channelIdAgg": "C01ZZZZZZZZ" + "channelIdSec": "C01XXXXXXXX" } } } } ``` -You can create cdk.context.json to define your developing environment parameters. It may be generated automatically. This file is ignored by git. - -cdk.context.json +The contents of this setting are as follows. -``` -{ - "@aws-cdk/core:enableStackNameDuplicates": "true", - "aws-cdk:enableDiffNoFail": "true", - "@aws-cdk/core:stackRelativeExports": "true", - "my": { - "description": "Personal Environment variables for blea-guest-*-samples.ts", - "envName": "Personal", - "vpcCidr": "10.100.0.0/16", - "securityNotifyEmail": "xxx@example.com", - "monitoringNotifyEmail": "zzz@example.com", - "dbUser": "personaluser", - "slackNotifier": { - "workspaceId": "T8XXXXXXXXX", - "channelIdSec": "C01YYYYYYYY", - "channelIdMon": "C02YYYYYYYY" - } - }, - "myaudit": { - "description": "Personal Environment variables for blea-base-ct-audit.ts", - "env": { - "account": "222222222222", - "region": "ap-northeast-1" - }, - "slackNotifier": { - "workspaceId": "T8XXXXXXX", - "channelIdAgg": "C01ZZZZZZZZ" - } - } -} -``` +| key | value | +| -------------------------- | --------------------------------------------------------------------------------------------------- | +| description | Comment on settings | +| envName | Environment name. This will be set for each resource tag | +| securityNotifyEmail | The email address to which security notifications will be sent. The content is similar to Slack | +| SlackNotifier.WorkspaceID | ID of Slack workspace set on AWS Chatbot | +| SlackNotifier.channelIDSec | The ID of the Slack channel that you configured on AWS Chatbot. You will be notified about security | -> Tips: This is example of how CDK code use this context optioin. +> NOTE: See the following explanation for how to use Context > -> ``` -> const envKey = app.node.tryGetContext('environment'); -> const valArray = app.node.tryGetContext(envKey); -> const environment_name = valArray['envName']; -> ``` - -> Tips: How to Deploy stack with context parameters. (This command deploys `bin/blea-base-sa.ts`. It defined on cdk.json `app`) -> Use `--profile xxxxx` to specify AWS profile. Use `-c envrionment=xxxx` to specify parameters you defined in cdk.json. -> -> ``` -> cdk deploy "*" --profile prof_dev -c environment=dev -> cdk deploy "*" --profile prof_prod -c environment=prod -> ``` - -> Tips: If you don't want to block deploy process with approval, add an option `--require-approval never` (but be careful!). \ -> When you configure cdk.json like this, you don't need to specify `--require-approval never` on every deploy command. +> - [Manage personal environment by cdk.context.json](doc/HowTo.md#cdkcontextjson-Manage-personal-environment) > -> > ``` -> > "requireApproval": "never", -> > ``` - -# 6. Baseline and Sample templates - -We provide several guardrail templates and sample application templates. They are placed in `bin/` directory. - -## Base for ControlTower - -- blea-base-ct-audit.ts - - - Governance Base for ControlTower Audit Account. - -- blea-base-ct-guest.ts - - Guest Base(for each guest account). Setup log bucket, IAM User, Monitoring Chatbot for the account you specified. - -## Base for Santdalone +> - [Accessing context in application](doc/HowTo.md#accessing-context-in-application) -- blea-base-sa.ts - - Setup Governance Base for Standalone environment. +#### 4-2. Deploy a governance base -## Guest System samples +Build BLEA. -- blea-guest-ecsapp-sample.ts - - Sample app with ECS/Fargate+AuroraPostgreSQL -- blea-guest-asgapp-sample.ts - - Sample app with EC2 Autoscaling Group+AuroraPostgreSQL -- blea-guest-ec2app-sample.ts - - Sample app with EC2+AuroraPostgreSQL - -> These are sample code, so use one of these at the same time because each application uses the same name stack. (For example VPCs, Chatbot, Log, AuroraDB etc) -> When you deploy several applications simultaneously, the resource defined in the same name stack will be shared by each application. - -# 7. Deploying on Single Account Environment - -(If you want to deploy to ControlTower environment, go to step 8) - -## 1. Create new account - -Create new account using Organizations. (Or you can use just standalone account without Organizations). - -## 2. Setup Slack for AWS Chatbot - -See: `Appendix B` - -## 3. Deploy Governance Base for Standalone - -If this is a first time to use CDK on the account and region, you need to bootstrap CDK. - -``` -cdk bootstrap --app "npx ts-node bin/blea-base-sa.ts" -c environment=dev --profile prof_dev -``` - -Deploy Base stacks. - -``` -cdk deploy "*" --app "npx ts-node bin/blea-base-sa.ts" -c environment=dev --profile prof_dev -``` - -## 4. (Option) Other baseline setup - -AWS provide several operational baseline service. You can setup it if you need. - -### Setup AWS Systems Manager Quick Setup for managing EC2 - -You can setup several baseline EC2 management with AWS Systems Manager Quick Setup -How to setup: https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html - -Quick Setup provides below: - -- WS Identity and Access Management (IAM) instance profile roles for Systems Manager. -- A scheduled, bi-weekly update of SSM Agent. -- A scheduled collection of Inventory metadata every 30 minutes. -- A daily scan of your instances to identify missing patches. -- A one-time installation and configuration of the Amazon CloudWatch agent. -- A scheduled, monthly update of the CloudWatch agent. - -## 5. Deploy Application Stack - -Deploy Sample Application stacks. - -``` -cdk deploy "*" --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --profile prof_dev - -``` - -Now you finished to deploy AWS Baseline template on single account environment. - -# 8. Deploying on Multi-Account Environment - -## 1. Setup ControlTower - -Setup ControlTower. -See: https://docs.aws.amazon.com/controltower/latest/userguide/setting-up.html - -## 2. Setup Security services - -Setup SecurityHub, GuardDuty and IAM Access Analyzer for Organizations. You should specify deligate account to Audit account. - -SecurityHub - -- https://docs.aws.amazon.com/securityhub/latest/userguide/designate-orgs-admin-account.html -- https://docs.aws.amazon.com/securityhub/latest/userguide/accounts-orgs-auto-enable.html - -GuardDuty - -- https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_organizations.html - -IAM Access Analyzer - -- https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-settings.html#access-analyzer-delegated-administrator - -## 3. Deploy Governance Base for CT (to audit account) - -### Setup Slack for AWS Chatbot - -Setup Slack Workspace on Audit account. \ -See `Appendix B` - -### Deploy - -Login to Management Account with AWS SSO. - -> Audit account can configure only with AWSControlTowerExecution Role on Management Account - -``` -aws sso login --profile ct-management-sso -``` - -Bootstrap CDK bucket (first time only). - -``` -cdk bootstrap --app "npx ts-node bin/blea-base-ct-audit.ts" -c environment=ctaudit --profile ct-audit-exec -``` - -Deploy Audit Base. - -``` -cdk deploy "*" --app "npx ts-node bin/blea-base-ct-audit.ts" -c environment=ctaudit --profile ct-audit-exec -``` - -## 4. Create new account - -Create new account with Account Vending Machine provided by ControlTower. - -## 5. Deploy Guest Base for CT (to guest account) - -Login to Guest Account with AWS SO. - -``` -aws sso login --profile ct-guest-sso -``` - -Bootstrap CDK bucket (first time only). - -``` -cdk bootstrap --app "npx ts-node bin/blea-base-ct-guest.ts" -c environment=dev --profile ct-guest # First time only +```sh +cd usecases/base-standalone +npm run build ``` -Deploy Guest Base stacks. +If you are running a CDK for the first time, navigate to the target use case directory and bootstrap the CDK. This is required when you run the CDK for the first time with that account and region combination. +```sh +npx cdk bootstrap -c environment=dev --profile prof_dev ``` -cdk deploy "*" --app "npx ts-node bin/blea-base-ct-guest.ts" -c environment=dev --profile ct-guest -``` - -## 6. (Option) Other baseline setup (to guest account) - -AWS provide several operational baseline service. You can setup it if you need. -### Setup AWS Systems Manager Quick Setup for managing EC2 - -You can setup several baseline EC2 management with AWS Systems Manager Quick Setup -How to setup: https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html - -Quick Setup provides below: - -- AWS Identity and Access Management (IAM) instance profile roles for Systems Manager. -- A scheduled, bi-weekly update of SSM Agent. -- A scheduled collection of Inventory metadata every 30 minutes. -- A daily scan of your instances to identify missing patches. -- A one-time installation and configuration of the Amazon CloudWatch agent. -- A scheduled, monthly update of the CloudWatch agent. - -## 7. Deploy Application Stack (to guest account) +> NOTE: +> +> - Here we are using `npx` to use a local cdk installed in the BLEA environment. If you start the command directly from `cdk`, the globally installed cdk will be used. +> +> - There are options that are useful when using the cdk command. See [Skip Deployment Approvals and Don't Roll Back](doc/HowTo.md#skip-deployment-approvals-and-dont-roll-back). -Deploy Guest Application Sample stacks. +Deploy a governance baseline. +```sh +npx cdk deploy --all -c environment=dev --profile prof_dev ``` -cdk deploy "*" --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --profile ct-guest -``` - -Now you finished to deploy AWS Baseline template on multi account environment. - -# 9. Remediation - -Some SecurityHub benchmark report CRITICAL or HIGH level issues. You need take action for it manually. - -Option: You can also disable the security Hub controls (but not recommended). - -- https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-enable-disable-controls.html - -## 1. Set MFA to Root user - -You need to set MFA for root user manually. "root user" is a user using email address to login management console. -Security Hub controls related to MFA(CRITICAL level) +This will set up the following features -- [CIS.1.13] Ensure MFA is enabled for the "root" account - - https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-1.13 -- [CIS.1.14] Ensure hardware MFA is enabled for the "root" account - - https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-1.14 -- [IAM.6] Hardware MFA should be enabled for the root user - - https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-iam-6 +- API logging with CloudTrail +- Recording configuration changes with AWS Config +- Detect abnormal behavior with GuardDuty +- Detecting Deviations from Best Practices with SecurityHub (AWS Foundational Security Best Practice, CIS benchmark) +- Default security group blockage (auto repair in case of deviation) +- Notifications for AWS Health events +- Some notifications of security-impacting change actions +- Slack notifies you of security events -How to remediate: +#### 4-3. (Optional) Set up other baseline setups manually -1. Access to root user on Organizations member account. +In addition to setting up a governance base, AWS provides several operational baseline services. Set up these services as needed. -- https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html#orgs_manage_accounts_access-as-root +##### a. Perform AWS Systems Manager Quick Setup for EC2 Management -2. Enable hardware MFA for root user +If you use EC2, we recommend that you use SystemsManager to manage it. You can use AWS Systems Manager Quick Setup to automate the basic setup required to manage EC2. +See: [https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html] -- https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_physical.html#enable-hw-mfa-for-root +Quick Setup provides the following features: -## 2. Use IDMSv2 to access EC2 metadata +- Configure AWS Identity and Access Management (IAM) Instance Profile Roles Required by Systems Manager +- Auto-update of SSM Agent every other week +- Collect inventory metadata every 30 minutes +- Daily scans to detect instances that are out of patch +- Installing and configuring Amazon CloudWatch Agent for the first time only +- Monthly automatic updates of the CloudWatch agent -You need to use IDMSv2 only for EC2 instances. Take a look the document below for remediation. +##### b. Trusted Advisor Detection Results Report -- [EC2.8] EC2 instances should use IMDSv2 - - https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-ec2-8 +TrustedAdvisor provides advice for following AWS best practices. It is possible to receive the contents of the report regularly by e-mail. Please refer to the following document for details. -# Appendix. A: Deploy via CloudShell +- See: [https://docs.aws.amazon.com/awssupport/latest/user/get-started-with-aws-trusted-advisor.html#preferences-trusted-advisor-console] -Deploy BLEA via CloudShell on AWS Console. -Please note that CloudShell will delete environment if you do not use that for 120 days. -see: https://docs.aws.amazon.com/cloudshell/latest/userguide/limits.html +### 5. Deploy a sample guest application -## 1. Open CloudShell +Once the governance base is set up, deploy guest applications on top of it. +As an example of a guest application, this section provides instructions for deploying an ECS-based web application sample. -- Open CloudShell from [>_] icon on your AWS console (top right, near by account name) - ![OpenConsole](doc/images/CloudShell-OpenConsole.png) +#### 5-1. Set the Context for the guest application -## 2. Setup CDK prerequisities +Configure guest applications before deploying. +Navigate to `usecases/guest-webapp-sample` where the web application sample is located and edit cdk.json. -See: https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/getting_started.html +usecases/guest-webapp-sample/cdk.json -- Update npm - -``` -sudo npm -g install npm -``` - -- TypeScript 2.7 or later - -``` -sudo npm -g install typescript -``` - -- CDK 1.100.0 or later - -``` -sudo npm install -g aws-cdk -``` - -## 2. Upload and extract template files - -- Get BLEA source file from git repository and archive it -- Upload BLEA file from [Action]-[Upload File] Button - ![UploadFiles](doc/images/CloudShell-UploadFiles.png) - -- Extract and delete uploaded file - -``` -unzip baseline-environment-on-aws-vx.x.x.zip -rm baseline-environment-on-aws-vx.x.x.zip -``` - -## 3. Build - -``` -cd path-to-source -npm ci -npm install -npm run build +```json +{ + "app": "npx ts-node bin/blea-guest-ecsapp-sample.ts", + "context": { + "dev": { + "description": "Context samples for Dev - Anonymous account & region", + "envName": "Development", + "vpcCidr": "10.100.0.0/16", + "monitoringNotifyEmail": "notify-monitoring@example.com", + "dbUser": "dbadmin", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdMon": "C01YYYYYYYY" + }, + "domainName": "example.com", + "hostedZoneId": "Z0123456789", + "hostName": "www" + } + } +} ``` -if npm install doesn’t work, install ncu and update packages.json, remove package-lock.json and build. - -- Install ncu +The settings are as follows: -``` -npm install -g npm-check-updates -``` +| key | value | +| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| description | Comment on settings | +| envName | Environment name. This is set for each resource tag. | +| vpcCidr | CIDR of the VPC you want to create | +| monitoringNotifyEmail | Email address to which notifications about system monitoring are sent. The content is similar to Slack. | +| dbuser | Login username to AuroraDB | +| SlackNotifier.WorkspaceID | ID of Slack workspace set on AWS Chatbot | +| SlackNotifier.channelIdMon | The ID of the Slack channel that you configured for AWS Chatbot. You will be notified about system monitoring. Specify a channel that is different from the security channel. | -- Update modules +#### 5-2. Deploy a guest application +```sh +cd usecases/guest-webapp-sample +npx cdk deploy --all -c environment=dev --profile prof_dev ``` -cd path-to-source -rm -rf package-lock.json node_modules/ -ncu -u -npm install -npm run build -``` - -# Appendix.B Setup Slack for AWS Chatbot -To send alarms to slack, create BLEA-ChatbotSecurity and BLEA-ChatbotMonitor stack. -Before create these stack, you need to set up chat client for AWS Chatbot or stack creation will be failed. +This completes the baseline and sample application deployment for a single account. -Stack creating procedure is discribed below. - -## 1. Create your workspace and channel on Slack - -(This is an operation on Slack) Create workspace and channel you want to receive message. -Remember Slack channel ID (You can copy the channel ID with "Copy Link"). It looks like https://your-work-space.slack.com/archives/C01XXXXXXXX. `C01XXXXXXXX` is the channel ID. +> NOTE: +> +> It takes about 30 minutes to complete the deployment of all resources, including Aurora. If you want to deploy only some resources, specify the target stack name explicitly. The stack name is expressed in the application code (here bin/blea-guest-ecsapp-sample.ts) as `$ {pjPrefix} -ecsApp` . +> +> ```sh +> cd usecases/guest-webapp-sample +> npx cdk deploy "BLEA-ECSApp" --app "npx ts-node bin/blea-guest-asgapp-sample.ts" -c environment=dev --profile prof_dev +> ``` +> +> NOTE: +> guest-webapp-sample provides several variations under the bin directory. By default, the application specified in `app` in cdk.json (blea-guest-ecsapp-sample.ts) is deployed. If you want to deploy another application, you can do so by explicitly specifying `—app` in the cdk argument as follows: All contexts in cdk.json work with the same content within the same use case. +> +> ```sh +> cd usecases/guest-webapp-sample +> npx cdk deploy --all --app "npx ts-node bin/blea-guest-asgapp-sample.ts" -c environment=dev --profile prof_dev +> ``` -## 2. Setup chat client for AWS Chatbot +#### 5-3. Develop your own applications -- Follow the steps 1-4 of "Setting up AWS Chatbot with Slack". It just create Slack workspaces on AWS Chatbot. - - https://docs.aws.amazon.com/chatbot/latest/adminguide/getting-started.html +From now on, you will use this sample code as a starting point to develop applications tailored to your use case. Indicates information necessary for general development. -## 3. Edit your workspace ID and channel ID on context file +- [Development process](doc/HowTo.md#development-process) +- [Update package dependencies](doc/HowTo.md#update-dependencies) -cdk.json or cdk.context.json: +#### 5-4. Remediation of security issues -``` - "slackNotifier": { - "workspaceId": "T8XXXXXXX", - "channelIdSec": "C01XXXXXXXX", - "channelIdMon": "C01YYYYYYYY" - } -``` +Even after deploying a governance base, there are detections that are reported at a critical or high severity level in Security Hub benchmark reports . You will need to take action on these manually. If necessary, perform remediation. -- workspaceId: Copy from AWS Chatbot Workspace details -- channelIdSec: Copy from Your Slack App - Security Alarms -- channelIdMon: Copy from Your Slack App - Monitoring Alarms +- [Remediate Security Issues](doc/HowTo.md#remediate-security-issues) -# Security +## Security See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information. -# License +## License This library is licensed under the MIT-0 License. See the LICENSE file. diff --git a/README_ja.md b/README_ja.md index f511f12af..aeee5a318 100644 --- a/README_ja.md +++ b/README_ja.md @@ -4,489 +4,259 @@ Baseline Environment on AWS(BLEA) は 単独の AWS アカウントまたは ControlTower で管理されたマルチアカウント環境で、セキュアなベースラインを確立するための リファレンス CDK テンプレート群です。このテンプレート群は AWS のセキュリティサービスを活用して基本的かつ拡張可能なガードレールを提供します。また典型的なシステムアーキテクチャを実現するエンドツーエンドの CDK サンプルコードを提供します。この CDK テンプレートは用途に合わせてユーザが拡張して使うことを前提としており、拡張の参考となるコードやコメントを多く含んでいます。これによって AWS のアーキテクチャベストプラクティスや CDK コードのカスタマイズを習得しやすくすることを目的としています。 -Jump to | [Changelog](CHANGELOG.md) | [デプロイメントパイプライン](tools/cicd/README_ja.md) | [Standalone 版からマルチアカウント版への移行](doc/Standalone2ControlTower_ja.md) | +Jump to | [Changelog](CHANGELOG.md) | [HowTo](doc/HowTo_ja.md) | [マルチアカウント環境へのデプロイ](/doc/DeployToControlTower_ja.md) | [Standalone 版からマルチアカウント版への移行](doc/Standalone2ControlTower_ja.md) | [パイプラインによるデプロイ](tools/cicd/README_ja.md) | -# ガバナンスアーキテクチャ +## ガバナンスアーキテクチャ -## オペレーションパターン +### オペレーションパターン ![BLEA-OpsPatterns](doc/images/BLEA-OpsPatterns.png) -## マルチアカウント版 (ControlTower 利用) +### マルチアカウント版 (ControlTower 利用) ![BLEA-GovOverviewMultiAccount](doc/images/BLEA-GovOverviewMultiAccount.png) -## Standalone 版 (単一アカウント利用) +### Standalone 版 (単一アカウント利用) ![BLEA-GovOverviewSingleAccount](doc/images/BLEA-GovOverviewSingleAccount.png) -# ベースライン アーキテクチャ +## ベースライン アーキテクチャ -## マルチアカウント版 +### マルチアカウント版 ![BLEA-ArchMultiAccount](doc/images/BLEA-ArchMultiAccount.png) -## Standalone 版 +### Standalone 版 ![BLEA-ArchSingleAccount](doc/images/BLEA-ArchSingleAccount.png) -## CloudFormation スタック構成 (Standalone 版) +### CloudFormation スタック構成 (Standalone 版) ![BLEA-StackDependency](doc/images/BLEA-StackDependency.png) -# ゲストシステムのサンプルアーキテクチャ +## ガバナンスベース一覧 -## ECS システムサンプル +| ユースケース | フォルダ | +| ------------------------------------------------------ | -------------------------- | +| スタンドアローン版ガバナンスベース | `usecases/base-standalone` | +| ControlTower 版ガバナンスベース(ゲストアカウント用) | `usecases/base-ct-guest` | +| ControlTower 版 ガバナンスベース(Audit アカウント用) | `usecases/base-ct-audit` | -![BLEA-GuestSampleECS](doc/images/BLEA-GuestSampleECS.png) +## ゲストシステムのサンプルアーキテクチャ一覧 -## AutoSacling システムサンプル +| ユースケース | フォルダ | +| ---------------------------- | ------------------------------ | +| Web アプリケーションサンプル | `usecases/guest-webapp-sample` | +| API アプリケーションサンプル | `usecases/guest-apiapp-sample` | -![BLEA-GuestSampleASG](doc/images/BLEA-GuestSampleASG.png) +- Web アプリケーションサンプルでは異なる 4 つのオプションを提供しています -## EC2 システムサンプル + - ECS による Web アプリケーションのサンプル(デフォルト) + - Option: ECS Web アプリケーションの SSL 対応版サンプル + - Option: AutoScaling による Web アプリケーションのサンプル + - Option: EC2 による Web アプリケーションのサンプル -![BLEA-GuestSampleEC2](doc/images/BLEA-GuestSampleEC2.png) +- API アプリケーションサンプルでは異なる 2 つのオプションを提供しています + - NodeJS によるサーバーレスな API アプリケーションのサンプル(デフォルト) + - Option: 同アプリケーションの Python による実装 -# デプロイ +> NOTE: 各々のユースケースは独立してデプロイ可能ですが、同一ユースケース内の別オプションは一部のリソースを共用している場合があります。削除、変更時は依存関係をご確認ください。 -> Information: \ -> このデプロイ手順は AWS 認証情報(アクセスキー/シークレットキー)を手元の PC/Mac に保存します。認証情報を手元に保存しないために CloudShell を使う方法があります。詳しくはこのドキュメントの下部にある `Appendix A` を参照してください。 +## デプロイの流れ -# 1. CDK 実行環境のセットアップとコードのビルド +デプロイするステップについて記載します。デプロイだけ行う場合はエディタ環境の構築は必ずしも必要ありませんが、コードの変更が容易になりミスを減らすことができるため、エディタも含めた開発環境を用意することをお勧めします。 -参照: https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/getting_started.html +### 前提条件 -- TypeScript 2.7 or later のインストール +#### a. ランタイム -``` -npm -g install typescript -``` +以下のランタイムを使用します。各 OS ごとの手順に従いインストールしてください。 -- CDK 1.100.0 or later のインストール +- [Node.js](https://nodejs.org/) (>= `14.0.0`) + - `npm` (>= `7.0.0`) +- [Git](https://git-scm.com/) -``` -npm install -g aws-cdk -``` +npm は workspaces を使用するため 7.0.0 以上が必要です。最新バージョンは以下のようにしてインストールしてください。 -- ビルド - -``` -cd path-to-source -npm ci -npm run build +```sh +npm install -g npm ``` -## (オプション) 最新の CDK を使う場合 - -CDK のインストール後、ビルド工程で `npm ci` ではなく以下のコマンドを実行します。 +#### b. 開発環境 -- ncu のインストール +CDK コードを安全に編集するため、本格的な開発を行わない場合であっても開発環境のセットアップを推奨します。以下に VisualStudioCode のセットアップ手順を示します。 -``` -npm install -g npm-check-updates -``` +- [手順]: [VisualStudioCode のセットアップ手順](doc/HowTo_ja.md#VisualStudioCode-のセットアップ) -- モジュールのアップデート - -``` -cd path-to-source -rm -rf package-lock.json node_modules/ -ncu -u -npm install -``` +### 典型的な導入手順 -- ビルド +BLEA を使う場合の最も典型的な導入手順は次の通りです。ここでは単独のアカウントにガバナンスベースとゲストアプリケーションを導入する手順を示します。 -``` -npm run build -``` +1. 関連ライブラリのインストールとコードのビルド -# 3. AWS CLI および CDK の設定 +2. AWS CLI の認証情報の設定 -CDK をデプロイするために AWS 認証情報(API キー)が必要です。恒久的な認証情報を使用する方法と、AWS SSO を使用して一時的な認証情報を取得して使用する方法を紹介します。 +3. デプロイ対象のアカウント作成 -## オプション 1. AWS 認証情報を設定する (恒久的な認証情報を使用する場合) +4. ガバナンスベースをデプロイ -主に開発環境用として、デプロイ対象アカウントの IAM ユーザの認証情報を使うことができます。ここでは AWS CLI のプロファイルの例として、`prof_dev` と `prof_prod` の二つのアカウントを使う場合を考えます。 +5. ゲストアプリケーションサンプルをデプロイ -~/.aws/credentials +> NOTE: +> ここでは 単独アカウントに Standalone 版ガバナンスベースと Web アプリケーションサンプルの ECS 版を導入します。 +> ControlTower を使ったマルチアカウント版の導入手順については、[Deploy to ControlTower environment](/doc/DeployToControlTower_ja.md)を参照してください。 -``` -[prof_dev] -aws_access_key_id = XXXXXXXXXXXXXXX -aws_secret_access_key = YYYYYYYYYYYYYYY -rgion = ap-northeast-1 +## 導入手順 -[prof_prod] -aws_access_key_id = ZZZZZZZZZZZZZZZZ -aws_secret_access_key = PPPPPPPPPPPPPPPP -region = ap-northeast-1 -``` +ここでは最もシンプルな、単一アカウントへの Standalone 版導入を例にとって解説します。 -## オプション 2. AWS 認証情報を設定する (AWS SSO を使用する場合) +### 1. リポジトリの取得とプロジェクトの初期化 -通常は AWS SSO の利用を推奨します。マネジメントコンソールへのログインおよび AWS CLI - AWS SSO 統合による CLI の実行が可能です。 +#### 1-1. リポジトリの取得 -> Notes: AWS CLI - AWS SSO 統合を使うためには、AWS CLIv2 を使う必要があります \ -> See: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html +```sh +git clone https://github.com/aws-samples/baseline-environment-on-aws.git +cd baseline-environment-on-aws +``` -1. AWS CLI - AWS SSO 統合を CDK から使用する場合は、オープンソースのツールである aws2-wrap (https://github.com/linaro-its/aws2-wrap) を CDK を実行する環境にインストールする必要があります。 +#### 1-2. プロジェクトの初期化 -``` -pip3 install aws2-wrap +```sh +# install dependencies +npm ci ``` -2. Control Tower の Audit アカウントにデプロイするための CLI プロファイルを設定します。ここではマネジメントアカウントの ID を `1111111111111`, Audit アカウントの ID を `222222222222` としています。 +#### 1-3. Git の pre-commit hook のセットアップ -> Notes: ControlTower の仕様により、Audit アカウントにデプロイするためには、マネジメントアカウントの `AWSAdministratorAccess` ロールでログインし、Audit アカウントの`AWSControlTowerExecution`ロールにスイッチして処理を実行する必要があります。 +Git に Commit する際に Linter, Formatter, git-secrets によるチェックを行うための Hook を登録します。以下の手順に従ってセットアップしてください。デプロイするだけの場合は必須ではありませんが、よりセキュアに開発するためにセットアップを推奨します。 -~/.aws/config +- [手順] [Git の pre-commit hook のセットアップ](doc/HowTo_ja.md#Git-の-pre-commit-hook-のセットアップ) -``` -# for Management Account -[profile ct-management-sso] -sso_start_url = https://d-90xxxxxxxx.awsapps.com/start#/ -sso_region = ap-northeast-1 -sso_account_id = 1111111111111 -sso_role_name = AWSAdministratorAccess -region = ap-northeast-1 +### 2. AWS CLI の認証情報を設定する -# for AWSControlTowerExecution Role on Audit Account -[profile ct-audit-exec-role] -role_arn = arn:aws:iam::222222222222:role/AWSControlTowerExecution -source_profile = ct-management-sso -region = ap-northeast-1 - -# for CDK access to ct-audit-exec-role -[profile ct-audit-exec] -credential_process = aws2-wrap --process --profile ct-audit-exec-role -region = ap-northeast-1 -``` +CDK をデプロイするために AWS 認証情報(API キー)が必要です。ここでは最もシンプルな、恒久的な認証情報を使用する方法を紹介します。 -3. ゲストアカウントにデプロイするための CLI プロファイルを設定します。ここではゲストアカウントの ID を`123456789012`としています。 +これは主に開発環境用として利用する方式です。ここでは AWS CLI のプロファイルの例として、`prof_dev` と `prof_prod` の二つのアカウントを使う場合を考えます。 -~/.aws/config +~/.aws/credentials -``` -# for Guest Account -[profile ct-guest-sso] -sso_start_url = https://d-90xxxxxxxx.awsapps.com/start#/ -sso_region = ap-northeast-1 -sso_account_id = 123456789012 -sso_role_name = AWSAdministratorAccess +```text +[prof_dev] +aws_access_key_id = XXXXXXXXXXXXXXX +aws_secret_access_key = YYYYYYYYYYYYYYY region = ap-northeast-1 -# for CDK access to ct-guest-sso -[profile ct-guest] -credential_process = aws2-wrap --process --profile ct-guest-sso +[prof_prod] +aws_access_key_id = ZZZZZZZZZZZZZZZZ +aws_secret_access_key = PPPPPPPPPPPPPPPP region = ap-northeast-1 ``` -4. AWS SSO を使った CLI ログイン +### 3. デプロイ対象のアカウントを作成する -次のコマンドで AWS SSO にログインします。ここでは`ct-guest-sso`プロファイルでログインする例を示します。 +#### 3-1. 新しいアカウントを作成する -``` -aws sso login --profile ct-guest-sso -``` +Organizations を使って新しいアカウントを作成します。 +Organizations を使用しない単一のアカウントを利用することも可能ですが、後にマルチアカウント管理の環境に移行しやすくするため Organizations 配下のメンバーアカウント使用を推奨します。 -このコマンドによって ブラウザが起動し、AWS SSO のログイン画面が表示されます。ゲストアカウントの管理者ユーザー名(メールアドレス)とパスワードを正しく入力すると画面がターミナルに戻り、 AWS CLI で ゲストアカウントでの作業が可能になります。 +#### 3-2. AWS Chatbot 利用の事前準備として Slack を設定する -> Notes: `ct-guest`プロファイルは aws2-warp を経由した認証を行なっており、CDK を実行する場合に使用します。 +BLEA ではセキュリティイベントおよびモニタリングイベントを通知のためにそれぞれ Slack チャネルを使用します。Slack 上にチャネルを 2 つ作成し、以下の手順を参照して AWS Chatbot の初期設定を行ってください。 +設定が終わったら後の設定のため、ワークスペースの ID(1 つ)、通知先のチャネルの ID(2 つ)をメモしておきます。 -# 4. CDK Context にパラメータを指定する +- [手順] [AWSChatbot 用に Slack を設定する](doc/HowTo_ja.md#AWSChatbot-用に-Slack-を設定する) -デプロイのために CDK Context にパラメータを指定する必要があります。Context の値は cdk.json ファイルまたは cdk.context.json ファイルで指定します。(Context は CDK コマンドラインで -c オプションで指定することも可能ですが、 このソリューションでは -c に `environment` というパラメータのみを指定することとしています) +### 4. ガバナンスベースをデプロイする -- See: https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/context.html -- See: https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/get_context_var.html +#### 4-1. デプロイ情報(Context)を設定する -## 1. サンプルの cdk.json と cdk.context.json: +デプロイのため 各ユースケースの CDK Context (cdk.json) にパラメータを指定する必要があります。 Standalone 版のガバナンスベース用の設定ファイルはこちらです。 -このサンプルでは `dev`, `prod`, `ctaudit`, `my` という Context を定義しています。cdk.json ファイルは Git で管理されますが、cdk.context.json は Git の管理外としています(.gitignore に指定)。これによってチームで共有管理する本番環境などの定義は cdk.json に定義し、個人で使用する開発環境の定義は cdk.context.json に定義するといった使い分けが可能です。 +```sh +usecases/base-standalone/cdk.json +``` -Context の中で`env`プロパティはデプロイ対象となるアカウント ID やリージョンを指定します。これは CDK でスタックを作成する際に渡されます。`env`プロパティが指定されていない場合は、実行時点の CLI プロファイルで指定されているアカウントおよびリージョンの組み合わせにデプロイしますが、これは開発用途での利用に留めてください。誤った環境へのデプロイメントを防ぐため、本番環境のスタックは cdk.json で明示的に`env`プロパティを指定することを推奨します。 +このサンプルは `dev` という Context を定義する例です。同様の設定を検証、本番アカウントにもデプロイできるようにするには、`staging`や`prod`といった Context を用意します。Context 名は任意のアルファベットが利用可能です。 -cdk.json +usecases/base-standalone/cdk.json -``` +```json { "app": "npx ts-node bin/blea-base-sa.ts", "context": { "dev": { - "description": "Environment variables for blea-guest-*-samples.ts", + "description": "Environment variables for Governance base ", "envName": "Development", - "vpcCidr": "10.100.0.0/16", - "securityNotifyEmail": "notify-security@example.com", - "monitoringNotifyEmail": "notify-monitoring@example.com", - "dbUser": "dbadmin", - "slackNotifier": { - "workspaceId": "T8XXXXXXX", - "channelIdSec": "C01XXXXXXXX", - "channelIdMon": "C01YYYYYYYY" - } - }, - "prod": { - "description": "Environment variables for blea-guest-*-samples.ts", - "env": { - "account": "111111111111", - "region": "ap-northeast-1" - }, - "envName": "Production", - "vpcCidr": "10.110.0.0/16", "securityNotifyEmail": "notify-security@example.com", - "monitoringNotifyEmail": "notify-monitoring@example.com", - "dbUser": "dbadmin", - "slackNotifier": { - "workspaceId": "T8XXXXXXX", - "channelIdSec": "C01XXXXXXXX", - "channelIdMon": "C01YYYYYYYY" - } - }, - "ctaudit": { - "description": "Environment variables for blea-base-ct-audit.ts", - "env": { - "account": "222222222222", - "region": "ap-northeast-1" - }, "slackNotifier": { "workspaceId": "T8XXXXXXX", - "channelIdAgg": "C01ZZZZZZZZ" + "channelIdSec": "C01XXXXXXXX" } } } } ``` -cdk.context.json は自分のための開発環境のパラメータを指定するために有用です。このファイルは CDK によって自動的に作成されている場合があります。その場合は既存の設定を残したまま自分自身の Context 定義を追加してください。 - -cdk.context.json - -``` -{ - "@aws-cdk/core:enableStackNameDuplicates": "true", - "aws-cdk:enableDiffNoFail": "true", - "@aws-cdk/core:stackRelativeExports": "true", - "my": { - "description": "Personal Environment variables for blea-guest-*-samples.ts", - "envName": "Personal", - "vpcCidr": "10.100.0.0/16", - "securityNotifyEmail": "xxx@example.com", - "monitoringNotifyEmail": "zzz@example.com", - "dbUser": "personaluser", - "slackNotifier": { - "workspaceId": "T8XXXXXXXXX", - "channelIdSec": "C01YYYYYYYY", - "channelIdMon": "C02YYYYYYYY" - } - }, - "myaudit": { - "description": "Personal Environment variables for blea-base-ct-audit.ts", - "env": { - "account": "222222222222", - "region": "ap-northeast-1" - }, - "slackNotifier": { - "workspaceId": "T8XXXXXXX", - "channelIdAgg": "C01ZZZZZZZZ" - } - } -} -``` - -> Information: Context は CDK コード(bin/\*.ts)の中で次のようにアクセスします。 -> -> ``` -> const envKey = app.node.tryGetContext('environment'); -> const valArray = app.node.tryGetContext(envKey); -> const environment_name = valArray['envName']; -> ``` +この設定内容は以下の通りです。 -> Tips: Context パラメータを使ったデプロイメントの方法の例。(--app を指定しない場合は`bin/blea-base-sa.ts`がデプロイされます。対象の Application は cdk.json の `app` で指定しています) -> デプロイする際のプロファイル(認証情報)を指定するには `--profile xxxxx` を指定します。また、cdk.json で定義した Context パラメータを指定するには `-c envrionment=xxxx` を指定します。通常、profile で指定する認証情報と Context(の env)で指定するアカウント、リージョンは一致している必要があります。 -> -> ``` -> cdk deploy "*" --profile prof_dev -c environment=dev -> cdk deploy "*" --profile prof_prod -c environment=prod -> ``` +| key | value | +| -------------------------- | -------------------------------------------------------------------------------- | +| description | 設定についてのコメント | +| envName | 環境名。これが各々のリソースタグに設定されます | +| securityNotifyEmail | セキュリティに関する通知が送られるメールアドレス。内容は Slack と同様です | +| slackNotifier.workspaceId | AWS Chatbot に設定した Slack workspace の ID | +| slackNotifier.channelIdSec | AWS Chatbot に設定した Slack channel の ID。セキュリティに関する通知が行われます | -> Tips: 通常、CDK によるデプロイは承認を求めるプロンプトが表示されますが、 `--require-approval never` をコマンドに指定することで確認のプロンプトが表示されなくなります(ただし利用にはご注意ください!)。 \ -> 以下のような設定を cdk.json に追加することで、コマンドで都度設定する必要が無くなります。 +> NOTE: Context の使い方については以下の解説を参照してください > -> > ``` -> > "requireApproval": "never", -> > ``` - -# 6. ベースラインとサンプルテンプレート - -このテンプレートで提供する、ガバナンスベーステンプレートと、サンプルアプリケーションのテンプレートを紹介します。これらのコードは`bin/`ディレクトリにあります。 - -## ガバナンスベース(ControlTower 版) - -- blea-base-ct-audit.ts - - - ControlTower の Audit アカウントに対するガバナンスベース. - -- blea-base-ct-guest.ts - - ControlTower の各ゲストアカウントに設定するガバナンスベース。指定したアカウントに対してログバケット、IAM ユーザ、モニタリング用 Chatbot をセットアップする - -## ガバナンスベース(Santdalone 版) - -- blea-base-sa.ts - - 単一アカウントに対して、ガバナンスベースをセットアップする。 - -## ゲストシステムサンプル - -- blea-guest-ecsapp-sample.ts - - ECS/Fargate+AuroraPostgreSQL を使ったサンプルシステム -- blea-guest-asgapp-sample.ts - - EC2 Autoscaling Group+AuroraPostgreSQL を使ったサンプルシステム -- blea-guest-ec2app-sample.ts - - EC2+AuroraPostgreSQL を使ったサンプルシステム - -> これらのサンプルコードをデプロイする場合は一度に 1 つのサンプルだけを使用してください。各サンプルは VPC、Chatbot、Log、AuroraDB などで同じ名前のスタックを定義しているため、複数のサンプルを同時にデプロイした場合は後から実行した設定で上書きされます。スタックの名前を変えることで並列にデプロイすることも可能です。詳しくはそれぞれのサンプルのコードをご覧ください。 - -# 7. 単一アカウントへのデプロイ(Standalone 版) - -(マルチアカウント版のセットアップを行う場合は Step8 を参照してください) - -## 7.1. 新しいアカウントを作成する - -Orgnizations を使って新しいアカウントを作成する。(Organizations を使用しない単一のアカウントを利用することも可能ですが、後にマルチアカウント管理の環境に移行することが想定される場合は Organizations 配下のメンバーアカウント使用を推奨します) - -## 7.2. AWS Chatbot の事前準備として Slack workspaces の設定を行う - -参照: `Appendix B` - -## 7.3. ガバナンスベース(Standalone 版)をデプロイする - -対象のアカウントとリージョンの組み合わせで、初めて CDK を実行する場合、以下のように CDK を bootstrap する必要があります。 - -``` -cdk bootstrap --app "npx ts-node bin/blea-base-sa.ts" -c environment=dev --profile prof_dev -``` - -ガバナンスベースをデプロイします。 - -``` -cdk deploy "*" --app "npx ts-node bin/blea-base-sa.ts" -c environment=dev --profile prof_dev -``` - -## 7.4. (オプション) 他のベースラインセットアップ - -AWS はいくつかの運用上のベースラインサービスを提供しています。必要に応じてこれらのサービスのセットアップを行なってください。 - -### EC2 管理のため AWS Systems Manager Quick Setup を実施する - -AWS Systems Manager Quick Setup を使うことで、EC2 の管理に必要な基本的なセットアップを自動化できます。 -セットアップ手順: https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html - -Quick Setup は以下の機能を提供します: - -- Systems Manager で必要となる AWS Identity and Access Management (IAM) インスタンスプロファイルロールの設定 -- SSM Agent の隔週自動アップデート -- 30 分ごとのインベントリメタデータの収集 -- インスタンスのパッチ不足を検出するための日次スキャン -- 初回のみの、Amazon CloudWatch agent のインストールと設定 -- CloudWatch agent の月次自動アップデート - -## 7.5. サンプルアプリケーションのデプロイ - -サンプルアプリケーションのデプロイ(--app の指定を変更することで AutoScalingGroup や EC2 のデプロイも可能) - -``` -cdk deploy "*" --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --profile prof_dev - -``` - -以上で単一アカウントに対するベースラインおよびサンプルアプリケーションのデプロイが完了しました。 - -# 8. マルチアカウント環境へのデプロイ - -## 8.1. ControlTower のセットアップ - -ControlTower をセットアップします。 -See: https://docs.aws.amazon.com/controltower/latest/userguide/setting-up.html - -## 8.2. セキュリティサービスのセットアップ - -Organizations 全体に対し、SecurityHub, GuardDuty そして IAM Access Analyzer を有効化します。ここでは委任アカウントとして Audit アカウントを指定します。 - -1. SecurityHub - -- https://docs.aws.amazon.com/securityhub/latest/userguide/designate-orgs-admin-account.html -- https://docs.aws.amazon.com/securityhub/latest/userguide/accounts-orgs-auto-enable.html - -2. GuardDuty - -- https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_organizations.html - -3. IAM Access Analyzer - -- https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-settings.html#access-analyzer-delegated-administrator - -## 8.3. ガバナンスベースのデプロイ(Audit アカウントに対して) - -### AWS Chatbot 用の Slack セットアップ +> - [cdk.context.json による個人環境の管理](doc/HowTo_ja.md#cdkcontextjson-による個人環境の管理) +> - [アプリケーション内で Context にアクセスする仕組み](doc/HowTo_ja.md#アプリケーション内で-Context-にアクセスする仕組み) -Audit account の AWS Chatbot に Slack Workspace をセットアップする。 \ -`Appendix B` を参照。 +#### 4-2. ガバナンスベースをデプロイする -### デプロイ +BLEA をビルドします。 -AWS SSO を使ってマネジメントアカウントにログインする。 - -> Audit アカウントは マネジメントアカウントの `AWSControlTowerExecution` ロールでのみセットアップが可能です(ControlTower の仕様) - -``` -aws sso login --profile ct-management-sso -``` - -CDK 用バケットのブートストラップ(初回のみ) - -``` -cdk bootstrap --app "npx ts-node bin/blea-base-ct-audit.ts" -c environment=ctaudit --profile ct-audit-exec +```sh +cd usecases/base-standalone +npm run build ``` -Audit アカウントのガバナンスベースをデプロイ +初めて CDK を実行する場合は、対象のユースケースディレクトリへ移動し、CDK を bootstrap します。これは対象のアカウントとリージョンの組み合わせで初めて CDK を実行するときに必要です。 +```sh +npx cdk bootstrap -c environment=dev --profile prof_dev ``` -cdk deploy "*" --app "npx ts-node bin/blea-base-ct-audit.ts" -c environment=ctaudit --profile ct-audit-exec -``` - -## 8.4. 新規ゲストアカウントの作成 - -ControlTower の Account Vending Machine を使ってゲストアカウントを新規に作成する。 -## 8.5. ゲストカウントのガバナンスベースをデプロイ - -AWS SSO を使ってゲストアカウントにログイン - -``` -aws sso login --profile ct-guest-sso -``` +> NOTE: +> +> - ここでは BLEA 環境にインストールしたローカルの cdk を利用するため、`npx`を使用しています。直接`cdk`からコマンドを始めた場合は、グローバルインストールされた cdk が利用されます。 +> - cdk コマンドを利用するときに便利なオプションがあります。[デプロイ時の承認をスキップしロールバックさせない](doc/HowTo_ja.md#デプロイ時の承認をスキップしロールバックさせない)を参照してください。 -CDK 用バケットのブートストラップ(初回のみ) +ガバナンスベースをデプロイします。 -``` -cdk bootstrap --app "npx ts-node bin/blea-base-ct-guest.ts" -c environment=dev --profile ct-guest # First time only +```sh +npx cdk deploy --all -c environment=dev --profile prof_dev ``` -ゲストアカウントのガバナンスベースをデプロイ +これによって以下の機能がセットアップされます -``` -cdk deploy "*" --app "npx ts-node bin/blea-base-ct-guest.ts" -c environment=dev --profile ct-guest -``` +- CloudTrail による API のロギング +- AWS Config による構成変更の記録 +- GuardDuty による異常なふるまいの検知 +- SecurityHub によるベストプラクティスからの逸脱検知 (AWS Foundational Security Best Practice, CIS benchmark) +- デフォルトセキュリティグループの閉塞 (逸脱した場合自動修復) +- AWS Health イベントの通知 +- セキュリティに影響する変更操作の通知(一部) +- Slack によるセキュリティイベントの通知 -## 8.6. (オプション) 他のベースラインのセットアップ(ゲストアカウント) +#### 4-3. (オプション) 他のベースラインセットアップを手動でセットアップする -AWS はいくつかの運用上のベースラインサービスを提供しています。必要に応じてこれらのサービスのセットアップを行なってください。 +ガバナンスベースでセットアップする他に AWS はいくつかの運用上のベースラインサービスを提供しています。必要に応じてこれらのサービスのセットアップを行なってください。 -### EC2 管理のため AWS Systems Manager Quick Setup を実施する +##### a. EC2 管理のため AWS Systems Manager Quick Setup を実施する -AWS Systems Manager Quick Setup を使うことで、EC2 の管理に必要な基本的なセットアップを自動化できます。 -セットアップ手順: https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html +EC2 を利用する場合は SystemsManager を利用して管理することをお勧めします。AWS Systems Manager Quick Setup を使うことで、EC2 の管理に必要な基本的なセットアップを自動化できます。 +セットアップ手順: [https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html] Quick Setup は以下の機能を提供します: @@ -497,141 +267,101 @@ Quick Setup は以下の機能を提供します: - 初回のみの、Amazon CloudWatch agent のインストールと設定 - CloudWatch agent の月次自動アップデート -## 8.7. サンプルアプリケーションのデプロイ - -サンプルアプリケーションのデプロイ(--app の指定を変更することで AutoScalingGroup や EC2 のデプロイも可能) - -``` -cdk deploy "*" --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --profile ct-guest -``` - -以上でマルチアカウントに対するベースラインおよびサンプルアプリケーションのデプロイが完了しました。 - -# 9. 修復 - -ガバナンスベースをデプロイした後でも、Security Hub のベンチマークレポートで 重要度が CRITICAL あるいは HIGH のレベルでレポートされる問題(Issues)があります。これらに対して手動で対応が必要です。 - -> オプション: Security Hub の 検出項目を無効化することもできます(推奨しません。無効化する場合はセキュリティリスクを十分に評価した上で実施して下さい)。 +##### b. Trusted Advisor の検知結果レポート -- https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-enable-disable-controls.html +TrustedAdvisor は AWS のベストプラクティスをフォローするためのアドバイスを提供します。レポート内容を定期的にメールで受け取ることが可能です。詳細は下記ドキュメントを参照してください。 -## 9.1. ルートユーザに対して MFA を有効化する +- See: [https://docs.aws.amazon.com/awssupport/latest/user/get-started-with-aws-trusted-advisor.html#preferences-trusted-advisor-console] -ルートユーザに対する MFA の設定は手動で実施する必要があります。ルートユーザとはマネジメントコンソールにログインする際に、E メールアドレスを使ってログインするユーザのことです。 +### 5. ゲストアプリケーションのサンプルをデプロイする -MFA に関連する Security Hub コントロール(CRITICAL レベル) +ガバナンスベースの設定が完了したら、その上にゲストアプリケーションを導入します。 +ここではゲストアプリケーションの例として、ECS ベースの Web アプリケーションサンプルをデプロイする手順を示します。 -- [CIS.1.13] Ensure MFA is enabled for the "root" account - - https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-1.13 -- [CIS.1.14] Ensure hardware MFA is enabled for the "root" account - - https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-1.14 -- [IAM.6] Hardware MFA should be enabled for the root user - - https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-iam-6 +#### 5-1. ゲストアプリケーションの Context を設定する -修復方法: +デプロイする前にゲストアプリケーションの設定を行います。 +Web アプリケーションのサンプルが配置された `usecases/guest-webapp-sample` に移動して cdk.json を編集します。 -1. Organizations メンバアカウントのルートユーザにアクセスする +usecases/guest-webapp-sample/cdk.json -- https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html#orgs_manage_accounts_access-as-root - -2. ルートユーザに対してハードウェア MFA を有効化する - -- https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_physical.html#enable-hw-mfa-for-root - -## 9.2. EC2 のメタデータアクセスに IMDSv2 を使う - -EC2 インスタンスのメタデータアクセスには IDMSv2 のみを使用することが推奨されています。修復については以下のドキュメントを参照してください。 - -- [EC2.8] EC2 instances should use IMDSv2 - - https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-ec2-8 - -# Appendix. A: CloudShell によるデプロイメント - -CloudShell を使い、マネジメントコンソールからこのテンプレートをデプロイすることが可能です。 -ただし ClouShell は 120 日間使用しないとセットアップした環境のデータを削除することに注意してください。 - -see: https://docs.aws.amazon.com/cloudshell/latest/userguide/limits.html - -## A.1. CloudShell を起動する - -- AWS マネジメントコンソールの [>_] アイコンをクリックして CloudShell を起動する (画面右上のアカウント名の隣) - ![OpenConsole](doc/images/CloudShell-OpenConsole.png) - -## A.2. CDK の実行環境をセットアップする - -See: https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/getting_started.html - -- npm をアップデートする - -``` -sudo npm -g install npm -``` - -- TypeScript 2.7 or later をインストールする - -``` -sudo npm -g install typescript -``` - -- CDK 1.100.0 or later をインストールする - -``` -sudo npm install -g aws-cdk +```json +{ + "app": "npx ts-node bin/blea-guest-ecsapp-sample.ts", + "context": { + "dev": { + "description": "Context samples for Dev - Anonymous account & region", + "envName": "Development", + "vpcCidr": "10.100.0.0/16", + "monitoringNotifyEmail": "notify-monitoring@example.com", + "dbUser": "dbadmin", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdMon": "C01YYYYYYYY" + }, + "domainName": "example.com", + "hostedZoneId": "Z0123456789", + "hostName": "www" + } + } +} ``` -## A.3. CDK コードをアップロードする - -1. デプロイ対象の CDK コードをダウンロードし、zip 等でアーカイブする。 -2. CloudShell の画面から [Action]-[Upload File] をクリックし、アーカイブしたファイルをアップロードする - ![UploadFiles](doc/images/CloudShell-UploadFiles.png) - -3. アップロードしたファイルを展開する +設定内容は以下の通りです: -- CloudShell で git clone して CDK コードを取得してもよい +| key | value | +| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| description | 設定についてのコメント | +| envName | 環境名。これが各々のリソースタグに設定されます。 | +| vpcCidr | 作成する VPC の CIDR | +| monitoringNotifyEmail | システム監視についての通知が送られるメールアドレス。内容は Slack と同様です。 | +| dbUser | AuroraDB へのログインユーザ名 | +| slackNotifier.workspaceId | AWS Chatbot に設定した Slack workspace の ID | +| slackNotifier.channelIdMon | AWS Chatbot に設定した Slack channel の ID。システム監視についての通知が行われます。セキュリティのチャネルとは別のチャネルを指定してください。 | -## A.4. ビルド +#### 5-2. ゲストアプリケーションをデプロイする -``` -cd path-to-source -npm ci -npm run build +```sh +cd usecases/guest-webapp-sample +npx cdk deploy --all -c environment=dev --profile prof_dev ``` -# Appendix.B AWS Chatbot 用に Slack を設定する +以上で単一アカウントに対するベースラインおよびサンプルアプリケーションのデプロイが完了します。 -アラームを Slack に送るためには BLEA-ChatbotSecurity および BLEA-ChatbotMonitor stack をデプロイします。これらのスタックをデプロイする前に、AWS Chatbot に対してチャットクライアントのセットアップが必要です。この作業を行なっていないとスタックのデプロイは櫛比します。 -AWS Chatbot の設定手順は以下の通りです。 - -## B.1. Slack に workspace と channel を作る - -(この手順は Slack での操作です) workspace を作り、メッセージを受信したい Slack channel を作ります。Slack channel ID をメモしてください(channel ID はチャネル名を右クリックして"Copy Link"でコピーできます). このリンクは次のようになります。 https://your-work-space.slack.com/archives/C01XXXXXXXX. ここで、 `C01XXXXXXXX` が -そのチャネルの channel ID です。 +> NOTE: +> +> Aurora を含めた全てのリソースをデプロイ完了するまでには 30 分程度かかります。一部のリソースだけをデプロイしたい場合は対象のスタック名を明示的に指定してください。スタック名はアプリケーションコード(ここでは bin/blea-guest-ecsapp-sample.ts)の中で`${pjPrefix}-ECSApp`のように表現されています。 +> +> ```sh +> cd usecases/guest-webapp-sample +> npx cdk deploy "BLEA-ECSApp" --app "npx ts-node bin/blea-guest-asgapp-sample.ts" -c environment=dev --profile prof_dev +> ``` +> +> NOTE: +> guest-webapp-sample は bin ディレクトリ配下に複数のバリエーションを用意しています。デフォルトでは cdk.json の `app` に指定されたアプリケーション(blea-guest-ecsapp-sample.ts)がデプロイされます。 別のアプリケーションをデプロイしたい場合は、以下のように cdk の引数で明示的に `--app` を指定することで対応可能です。同一ユースケース内であれば cdk.json の Context はいずれも同じ内容で動作します。 +> +> ```sh +> cd usecases/guest-webapp-sample +> npx cdk deploy --all --app "npx ts-node bin/blea-guest-asgapp-sample.ts" -c environment=dev --profile prof_dev +> ``` -## B.2. AWS Chatbot でチャットクライアントをセットアップする +#### 5-3. 独自のアプリケーションを開発する -- 以下の手順の "Setting up AWS Chatbot with Slack" の 1〜4 にしたがって、Slack workspace を AWS Chatbot に作成してください。 - - https://docs.aws.amazon.com/chatbot/latest/adminguide/getting-started.html +以後はこのサンプルコードを起点にして、自分のユースケースに合わせたアプリケーションを開発していくことになります。一般的な開発に必要な情報を示します。 -## B.3. Context file に workspace ID と channel ID を設定する +- [通常の開発の流れ](doc/HowTo_ja.md#通常の開発の流れ) +- [依存パッケージの最新化](doc/HowTo_ja.md#依存パッケージの最新化) -cdk.json または cdk.context.json に次のように Slack workspace ID と Channel ID を設定します。セキュリティ用とモニタリング用で Channel は異なるものを指定してください: +#### 5-4. セキュリティ指摘事項の修復 -``` - "slackNotifier": { - "workspaceId": "T8XXXXXXX", - "channelIdSec": "C01XXXXXXXX", - "channelIdMon": "C01YYYYYYYY" - } -``` +ガバナンスベースをデプロイした後でも、Security Hub のベンチマークレポートで 重要度が CRITICAL あるいは HIGH のレベルでレポートされる検出項目があります。これらに対しては手動で対応が必要です。必要に応じて修復(Remediation)を実施してください。 -- workspaceId: AWS Chatbot の Workspace details からコピー -- channelIdSec: Slack App からコピー - セキュリティアラーム用 -- channelIdMon: Slack App からコピー - モニタリングアラーム用 +- [セキュリティ指摘事項の修復](doc/HowTo_ja.md#セキュリティ指摘事項の修復) -# Security +## Security See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information. -# License +## License This library is licensed under the MIT-0 License. See the LICENSE file. diff --git a/buildspec.yaml b/buildspec.yaml index 5fd059e7a..3a8cbeb18 100644 --- a/buildspec.yaml +++ b/buildspec.yaml @@ -3,13 +3,19 @@ version: 0.2 phases: install: commands: + # requires npm >7 - npm i -g npm - - npm -g install typescript aws-cdk pre_build: commands: - npm ci - - npm run build build: commands: - # You can specify CDK deployment commands. Usually, you may want to deploy all of resources in the app. If you want to do so, please specify `"*"` - - cdk deploy BLEA-GeneralLog --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --require-approval never + - npm audit + - npm run lint + - npm run build --workspace usecases/guest-webapp-sample + - npm run test --workspace usecases/guest-webapp-sample + # You can specify CDK deployment commands. + # Usually, you may want to deploy all of resources in the app. + # If you want to do so, please specify `"*"` + - cd usecases/guest-webapp-sample + - npx cdk deploy BLEA-MonitorAlarm -c environment=dev --require-approval never diff --git a/doc/DeployToControlTower.md b/doc/DeployToControlTower.md new file mode 100644 index 000000000..7578eeb19 --- /dev/null +++ b/doc/DeployToControlTower.md @@ -0,0 +1,502 @@ +# Deploy to ControlTower environment + +[View this page in Japanese (日本語)](DeployToControlTower_ja.md) | [Back to Repository README](../README.md) + +This section describes the procedure for deploying BLEA to ControlTower-managed accounts. + +## Deployment procedure + +The steps to deploy are as follows: If you're just deploying, you don't need to build a build environment, but it's a good idea to have a development environment that includes an editor to make code changes easier. + +### Prerequisites + +#### a. runtime + +- Runtime and other prerequisites are the same as in the Standalone version. [README](../README.md) +- Prerequisites for using AWS SSO + - Requires [Python3](https://www.python.org/) (>= `3.8`) to use `aws2-wrap`. + - For integration with AWS SSO, you need [AWS CLI version2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html). + +#### b. Development environment + +We recommend that you set up a development environment, even if you are not doing serious development, to ensure safe editing of CDK code. The following are the steps to set up VisualStudioCode. + +- [Instructions]: [VisualStudioCode Setup Instructions](doc/HowTo.md#VisualStudioCode-Setup-Instructions) + +### Implementation procedure under ControlTower + +This example explains how to deploy a sample application as a guest system with a multi-account governance base under ControlTower. Where `MC` indicates working in the management console and `Local` is working on your laptop. + +1. Set up ControlTower and Security Services (MC) + +2. Create a guest account for deployment in ControlTower (MC) + +3. Install Dependencies and Build Code (Local) + +4. Configure AWS CLI credentials for AWS SSO (Local) + +5. Set a baseline for notifications in the Audit account (Local) + +6. Deploy a governance base for guest accounts (Local) + +7. Deploy Guest Application Samples (Local) + +## Implementation steps + +### 1. Set up ControlTower and Security Services (MC) + +By using ControlTower, some governance-based features are automatically configured. Security services that are not supported by ControlTower can be bulk-enabled for Organizations so that they are automatically configured when new accounts are created It will be. + +Here we set up ControlTower, SecurityHub, GuardDuty and IAM Access for the entire Organizations Provides step-by-step instructions on how to enable Analyzer. Specify the Audit account as these delegate accounts. + +#### 1-1. ControlTower setup + +Set up ControlTower. +See: [https://docs.aws.amazon.com/controltower/latest/userguide/setting-up.html] + +#### 1-2. Set up SecurityHub + +- [https://docs.aws.amazon.com/securityhub/latest/userguide/designate-orgs-admin-account.html] +- [https://docs.aws.amazon.com/securityhub/latest/userguide/accounts-orgs-auto-enable.html] + +#### 1-3. Set up GuardDuty + +- [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_organizations.html] + +#### 1-4. Setting Up the IAM Access Analyzer + +- [https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-settings.html#access-analyzer-delegated-administrator] + +#### 1-5. Set up Trusted Advisor + +- [https://docs.aws.amazon.com/awssupport/latest/user/organizational-view.html] + +### 2. Create a guest account for deployment in ControlTower (MC) + +#### 2-1. Create a guest account + +Create a new account (guest account) using ControlTower. + +> See: [https://docs.aws.amazon.com/controltower/latest/userguide/account-factory.html#quick-account-provisioning] + +#### 2-2. Set up Slack workspaces in advance for AWS Chatbot + +Configure Slack integration settings for security and monitoring event notifications for guest accounts. Create a channel in Slack for security notifications, and a channel for system monitoring notifications, and follow these steps to configure Chatbot. When you are done, make a note of the ID of the workspace (1) and the ID of the channel you want to notify (2) for later settings. + +- [Instructions]: [Set up Slack for AWS ChatBot](doc/HowTo.md#set-up-slack-for-aws-chatbot) + +### 3. Install Dependencies and Build Code (Local) + +#### 3-1. Retrieving repositories + +```sh +git clone https://github.com/aws-samples/baseline-environment-on-aws.git +cd baseline-environment-on-aws +``` + +#### 3-2. Installing Dependent NPM Packages + +```sh +# install dependencies +npm ci +``` + +#### 3-3. Setting Up Git-Secrets + +Registers a hook to perform checks by Linter, Formatter, and Git-Secrets when committing to Git. Follow the steps below to set it up. It is not required if you are just deploying, but we recommend a setup for more secure development. + +- [Instructions]: [Git pre-commit hook setup](doc/HowTo.md#Git-pre-commit-hook-setup) + +### 4. Configure AWS CLI credentials for AWS SSO (Local) + +Permanent credentials are also available, but AWS SSO is recommended for ControlTower environments. AWS SSO allows you to log in to the Management Console and run the AWS CLI with SSO authentication. + +#### 4-1. Check the version of the AWS CLI + +AWS CLI - To use the AWS SSO integration, you must use AWS CLIv2. + +- See: [https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html] + +Check the CLI version as follows: + +```sh +aws --version +``` + +Verify that the output is version 2 or higher + +```sh +aws-cli/2.3.0 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off +``` + +#### 4-2. Introduce aws2-wrap + +AWS CLI - To use AWS SSO integration from a CDK, an open source tool, aws2-wrap ([https://github.com/linaro-its/aws2-wrap]) to the environment where you want to run the CDK + +```sh +pip3 install aws2-wrap +``` + +#### 4-3. Configure an AWS CLI Profile for Audit Account Deployment + +Next, configure a CLI profile for deploying to the Audit account in Control Tower. Here, the ID of the management account is `11111111111` and the ID of the Audit account is `2222222222`. + +~/.aws/config + +```text +# for Management Account Login +[profile ct-management-sso] +sso_start_url = https://d-90xxxxxxxx.awsapps.com/start#/ +sso_region = ap-northeast-1 +sso_account_id = 1111111111111 +sso_role_name = AWSAdministratorAccess +region = ap-northeast-1 + +# Accessing with AWSControlTowerExecution Role on Audit Account +[profile ct-audit-exec-role] +role_arn = arn:aws:iam::222222222222:role/AWSControlTowerExecution +source_profile = ct-management-sso +region = ap-northeast-1 + +# for CDK access to ct-audit-exec-role +[profile ct-audit-exec] +credential_process = aws2-wrap --process --profile ct-audit-exec-role +region = ap-northeast-1 +``` + +> NOTE: +> +> According to the ControlTower specification, in order to deploy to the Audit account, you must first use the `AWSAdministratorAccess` role of the management account You must log in and switch to the `AWSControlTowerExecution` role in the Audit account to perform the action. +> By SSO logging in with the `ct-management-sso`profile, you can use the `ct-audit-exec-role` profile to perform operations on the Audit account It's possible. To access this from the CDK, use the wrapped profile `ct-audit-exec`. + +#### 4-4. Configure an AWS CLI Profile for Guest Account Deployment + +Configure an AWS CLI profile for deploying to the guest account. Here, the ID of the guest account is `123456789012`. + +~/.aws/config + +```text +# for Guest Account Login +[profile ct-guest-sso] +sso_start_url = https://d-90xxxxxxxx.awsapps.com/start#/ +sso_region = ap-northeast-1 +sso_account_id = 123456789012 +sso_role_name = AWSAdministratorAccess +region = ap-northeast-1 + +# for CDK access to ct-guest-sso +[profile ct-guest] +credential_process = aws2-wrap --process --profile ct-guest-sso +region = ap-northeast-1 +``` + +> NOTE: +> +> SSO login to the guest account with the `ct-guest-sso` profile. To access this from the CDK, we use the wrapped profile `ct-guest`. + +#### 4-5. CLI login using AWS SSO + +Log in to AWS SSO with the following command: Here is an example of logging in with `ct-guest-sso`profile. + +```sh +aws sso login --profile ct-guest-sso +``` + +This command launches a browser and displays the AWS SSO login screen. If you have entered the guest account administrator username (email address) and password correctly, the screen will return to the terminal, where you can use the AWS CLI to work with the guest account. + +> Notes: The `ct-guest` profile authenticates via aws2-warp and is used when running a CDK. + +### 5. Set a baseline for notifications in the Audit account (Local) + +The Audit account has an SNS Topic created by ControlTower that sends all AWS Config change notifications. Set a baseline to notify Slack of this content. +Only setting up AWS Chatbot is done in the management console, and any further work is done locally. + +> NOTE: +> +> You don't need to set this baseline if you don't need AWS Config notifications. It does not affect the behavior of other accounts. + +#### 5-1. Slack setup for AWS Chatbot + +Log in to your Audit account in the management console and set up Slack Workspace on AWS Chatbot. We will only create one for the aggregation. Please refer to the steps below + +- [Instructions]: [Set up Slack for AWS ChatBot](doc/HowTo.md#set-up-slack-for-aws-chatbot) + +#### 5-2. Set deployment information (Context) + +Specify the parameters in the CDK Context (cdk.json) of the use case for the Audit account in ControlTower. The configuration file is here. By default, a context named dev-audit is set. + +```sh +usecases/base-ct-audit/cdk.json +``` + +usecases/base-ct-audit/cdk.json + +```json +{ + "app": "npx ts-node bin/blea-base-ct-audit.ts", + "context": { + "dev-audit": { + "description": "Context samples for ControlTower Audit Account - Specific account & region", + "env": { + "account": "333333333333", + "region": "ap-northeast-1" + }, + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdAgg": "C01ZZZZZZZZ" + } + } + } +} +``` + +The contents of this setting are as follows. + +| key | value | +| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| description | Comment on settings | +| envName | Environment name. This will be set for each resource tag | +| env.account | The account ID to deploy to. Must match the account specified in CLI profile | +| env.region | Region to deploy to. Must match the region specified in CLI profile | +| SlackNotifier.WorkspaceID | ID of Slack workspace set on AWS Chatbot | +| SlackNotifier.channelIDAGG | The ID of the Slack channel you set for AWS Chatbot. You will be notified of all AWS Config changes for accounts under ControlTower | + +> NOTE: See the following explanation for how to use Context +> +> - [Manage personal environment by cdk.context.json](doc/HowTo.md#cdkcontextjson-Manage-personal-environment) +> +> - [Accessing context in application](doc/HowTo.md#accessing-context-in-application) + +#### 5-3. Deploy a baseline for the Audit account + +Log in to your management account using AWS SSO with the following command: + +> Audit accounts can only be set up with the `AWSControlTowerExecution` role in the management account (ControlTower specification) + +```sh +aws sso login --profile ct-management-sso +``` + +Build Blea + +```sh +cd usecases/base-ct-audit +npm run build +``` + +Bootstrap a bucket for CDK to the Audit account (first time only) + +```sh +cd usecases/base-ct-audit +npx cdk bootstrap -c environment=dev-audit --profile ct-audit-exec +``` + +Deploy a governance base to the Audit account + +```sh +npx cdk deploy --all -c environment=dev-audit --profile ct-audit-exec +``` + +You should now be notified of all AWS Config change events for accounts managed by this ControlTower. + +> NOTE: +> +> - Here we are using `npx` to use a local cdk installed in the BLEA environment. If you start the command directly from `cdk`, the globally installed cdk will be used. +> +> - There are options that are useful when using the cdk command. See [Skip Deployment Approvals and Don't Roll Back](doc/HowTo.md#skip-deployment-approvals-and-dont-roll-back). + +### 6. Deploy a governance base for guest accounts (Local) + +#### 6-1. Set deployment information (Context) + +You must specify parameters in the CDK Context (cdk.json) for deployment. Here is the configuration file for the guest account governance base for ControlTower. + +```sh +usecases/base-ct-guest/cdk.json +``` + +This example shows an example of defining Contexts called `dev` and `staging`. To verify the same configuration and deploy it to a production account, prepare a Context such as `staging` or `prod`. + +> NOTE: +> +> If you want to explicitly specify the account to be deployed, specify `env`. This makes it impossible to deploy if the account-region specified in the CLI Profile does not match the one specified in `env`. You can ensure that you manage the parameters you set for your account and prevent them from deploying to the wrong account. It is recommended to also specify `env` as much as possible. + +usecases/base-ct-guest/cdk.json + +```json +{ + "app": "npx ts-node bin/blea-base-sa.ts", + "context": { + "dev": { + "description": "Context samples for Dev - Anonymous account & region", + "envName": "Development", + "securityNotifyEmail": "notify-security@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C00XXXXXXXX" + } + }, + "stage": { + "description": "Context samples for Staging - Specific account & region ", + "env": { + "account": "111111111111", + "region": "ap-northeast-1" + }, + "envName": "Staging", + "securityNotifyEmail": "notify-security@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C01XXXXXXXX" + } + } + } +} +``` + +The contents of this setting are as follows. + +| key | value | +| -------------------------- | --------------------------------------------------------------------------------------------------- | +| description | Comment on settings | +| env.account | The account ID to deploy to. Must match the account specified in CLI profile | +| env.region | Region to deploy to. Must match the region specified in CLI profile | +| envName | Environment name. This will be set for each resource tag | +| securityNotifyEmail | The email address to which security notifications will be sent. The content is similar to Slack | +| SlackNotifier.WorkspaceID | ID of Slack workspace set on AWS Chatbot | +| SlackNotifier.channelIDSec | The ID of the Slack channel that you configured on AWS Chatbot. You will be notified about security | + +#### 6-2. Governance-based deployment to guest accounts + +Log in to your guest account using AWS SSO. + +```sh +aws sso login --profile ct-guest-sso +``` + +Build Blea + +```sh +cd usecases/base-ct-guest +npm run build +``` + +Bootstrap a bucket for CDK (first time only). + +```sh +cd usecases/base-ct-guest +npx cdk bootstrap -c environment=dev --profile ct-guest +``` + +> NOTE: +> +> - Here we are using `npx` to use a local cdk installed in the BLEA environment. If you start the command directly from `cdk`, the globally installed cdk will be used. +> +> - There are options that are useful when using the cdk command. See [Skip Deployment Approvals and Don't Roll Back](doc/HowTo.md#skip-deployment-approvals-and-dont-roll-back). + +Deploy a governance base for guest accounts. + +```sh +npx cdk deploy --all -c environment=dev --profile ct-guest +``` + +This will set up the following features + +- Default security group blockage (auto repair in case of deviation) +- Notifications for AWS Health events +- Some notifications of security-impacting change actions +- Slack notifies you of security events + +The following settings that were set up in the Standalone version are configured by ControlTower and Security Services Organizations support. + +- API logging with CloudTrail +- Recording configuration changes with AWS Config +- Detect abnormal behavior with GuardDuty +- Detecting Deviations from Best Practices with SecurityHub (AWS Foundational Security Best Practice, CIS benchmark) + +#### 6-3. (Optional) Set up other baseline setups manually + +Besides setting up on a governance basis +AWS provides several operational baseline services. Set up these services as needed. + +##### a. Perform AWS Systems Manager Quick Setup for EC2 Management + +If you use EC2, we recommend that you use SystemsManager to manage it. You can use AWS Systems Manager Quick Setup to automate the basic setup required to manage EC2. +Setup steps: [https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html] + +Quick Setup provides the following features: + +- Configure AWS Identity and Access Management (IAM) Instance Profile Roles Required by Systems Manager +- Auto-update of SSM Agent every other week +- Collect inventory metadata every 30 minutes +- Daily scans to detect instances that are out of patch +- Installing and configuring Amazon CloudWatch Agent for the first time only +- Monthly automatic updates of the CloudWatch agent + +##### b. Trusted Advisor Detection Results Report + +TrustedAdvisor provides advice for following AWS best practices. It is possible to receive the contents of the report regularly by e-mail. Please refer to the following document for details. + +- See: [https://docs.aws.amazon.com/awssupport/latest/user/get-started-with-aws-trusted-advisor.html#preferences-trusted-advisor-console] + +### 7. Deploy Guest Application Samples (Local) + +Once the governance base is set, you can deploy the same guest application sample for both Standalone and ControlTower using the same steps. + +Here are the deployment steps from SSO authenticating to the guest account. + +#### 7-1. Set the Context for the guest application + +Configure the Context using the same steps as in the Standalone version. + +#### 7-2. Deploy a guest application + +(If you are not logged in) Log in to your guest account using AWS SSO. + +```sh +aws sso login --profile ct-guest-sso +``` + +Build Blea + +```sh +cd usecases/guest-webapp-sample +npm run build +``` + +Deploy a guest application. + +```sh +npx cdk deploy --all -c environment=dev --profile ct-guest +``` + +This completes the baseline and sample application deployment for a single account. + +> NOTE: +> +> It takes about 30 minutes to complete the deployment of all resources, including Aurora. If you want to deploy only some resources, specify the target stack name explicitly. The stack name is expressed in the application code (here bin/blea-guest-ecsapp-sample.ts) as `${pjPrefix}-ecsApp` . +> +> ```sh +> cd usecases/guest-webapp-sample +> npx cdk deploy "BLEA-ECSApp" --app "npx ts-node bin/blea-guest-asgapp-sample.ts" -c environment=dev --profile prof_dev +> ``` +> +> NOTE: +> guest-webapp-sample provides several variations under the bin directory. By default, the application specified in `app` in cdk.json (blea-guest-ecsapp-sample.ts) is deployed. If you want to deploy another application, you can do so by explicitly specifying `---app` in the cdk argument as follows: All contexts in cdk.json work with the same content within the same use case. +> +> ```sh +> cd usecases/guest-webapp-sample +> npx cdk deploy --all --app "npx ts-node bin/blea-guest-asgapp-sample.ts" -c environment=dev --profile prof_dev +> ``` + +#### 7-3. Develop your own applications + +From now on, you will use this sample code as a starting point to develop applications tailored to your use case. Indicates information necessary for general development. + +- [Development process](doc/HowTo.md#development-process) +- [Update package dependencies](doc/HowTo.md#update-dependencies) + +#### 7-4. Remediation of security issues + +Even after deploying a governance base, there are detections that are reported at a critical or high severity level in Security Hub benchmark reports . You will need to take action on these manually. If necessary, perform remediation. + +- [Remediate Security Issues](doc/HowTo.md#remediate-security-issues) diff --git a/doc/DeployToControlTower_ja.md b/doc/DeployToControlTower_ja.md new file mode 100644 index 000000000..c223acef0 --- /dev/null +++ b/doc/DeployToControlTower_ja.md @@ -0,0 +1,500 @@ +# Deploy to ControlTower environment + +[In English](DeployToControlTower.md) | [リポジトリの README に戻る](../README_ja.md) + +ここでは ControlTower 管理下のアカウントに BLEA を導入する手順について記述します。 + +## デプロイの流れ + +デプロイするステップは以下の通りです。デプロイするだけの場合ビルド環境の構築は必ずしも必要ありませんが、コードの変更を容易に行うため、エディタも含めた開発環境を用意することをお勧めします。 + +### 前提条件 + +#### a. ランタイム + +- ランタイム等の前提条件は Standalone 版と同様です。[README](../README_ja.md) をご覧ください +- AWS SSO を使うための前提条件 + - `aws2-wrap` を使用するため、 [Python3](https://www.python.org/) (>= `3.8`) が必要です。 + - AWS SSO との連携のため [AWS CLI version2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)が必要です。 + +#### b. 開発環境 + +CDK コードを安全に編集するため、本格的な開発を行わない場合であっても開発環境のセットアップを推奨します。以下に VisualStudioCode のセットアップ手順を示します。 + +- [手順]: [VisualStudioCode のセットアップ手順](HowTo_ja.md#VisualStudioCode-のセットアップ) + +### ControlTower 配下への導入手順 + +ControlTower の配下にマルチアカウント版のガバナンスベースを導入して、ゲストシステムとしてサンプルアプリケーションを導入する手順を例にとって解説します。ここで`MC`はマネジメントコンソールでの作業を、`Local`は手元環境での作業を示します。 + +1. ControlTower およびセキュリティサービスのセットアップ(MC) + +2. デプロイ対象のゲストアカウントを ControlTower で作成する(MC) + +3. 依存パッケージのインストールとコードのビルド(Local) + +4. AWS SSO に合わせて AWS CLI の認証情報を設定する(Local) + +5. Audit アカウントに通知用のベースラインを設定する(Local) + +6. ゲストアカウント用ガバナンスベースをデプロイする(Local) + +7. ゲストアプリケーションサンプルをデプロイする(Local) + +## 導入手順 + +### 1. ControlTower およびセキュリティサービスのセットアップ(MC) + +ControlTower を利用することで、ガバナンスベースの一部の機能は自動的に設定されます。ControlTower が対応していないセキュリティサービスは Organizations に対して一括有効化を行うことで、以後新しいアカウントが作られると自動的に設定されるようになります。 + +ここでは ControlTower をセットアップし、Organizations 全体に対して SecurityHub, GuardDuty そして IAM Access Analyzer を有効化する手順を示します。これらの委任アカウントとして Audit アカウントを指定します。 + +#### 1-1. ControlTower のセットアップ + +ControlTower をセットアップします。 +See: [https://docs.aws.amazon.com/controltower/latest/userguide/setting-up.html] + +#### 1-2. SecurityHub のセットアップ + +- [https://docs.aws.amazon.com/securityhub/latest/userguide/designate-orgs-admin-account.html] +- [https://docs.aws.amazon.com/securityhub/latest/userguide/accounts-orgs-auto-enable.html] + +#### 1-3. GuardDuty のセットアップ + +- [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_organizations.html] + +#### 1-4. IAM Access Analyzer のセットアップ + +- [https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-settings.html#access-analyzer-delegated-administrator] + +#### 1-5. Trusted Advisor のセットアップ + +- [https://docs.aws.amazon.com/awssupport/latest/user/organizational-view.html] + +### 2. デプロイ対象のゲストアカウントを ControlTower で作成する(MC) + +#### 2-1. ゲストアカウントを作成する + +ControlTower を使って新しいアカウント(ゲストアカウント)を作成します。 + +> See: [https://docs.aws.amazon.com/controltower/latest/userguide/account-factory.html#quick-account-provisioning] + +#### 2-2. AWS Chatbot の事前準備として Slack workspaces の設定を行う + +ゲストアカウントにおける、セキュリティイベントおよびモニタリングイベント通知のために Slack 連携用の設定を行います。セキュリティ通知のためのチャネル、システム監視通知のためのチャネルを Slack に作成し、以下の手順に従って Chatbot の設定を行います。設定が終わったら後の設定のため、ワークスペースの ID(1 つ)、通知先のチャネルの ID(2 つ)をメモしておきます。 + +- [手順] [AWSChatbot 用に Slack を設定する](HowTo_ja.md#AWSChatbot-用に-Slack-を設定する) + +### 3. 依存パッケージのインストールとコードのビルド(Local) + +#### 3-1. リポジトリの取得 + +```sh +git clone https://github.com/aws-samples/baseline-environment-on-aws.git +cd baseline-environment-on-aws +``` + +#### 3-2. 依存する NPM パッケージのインストール + +```sh +# install dependencies +npm ci +``` + +#### 3-3. git-secrets のセットアップ + +Git に Commit する際に Linter, Formatter, git-secrets によるチェックを行うための Hook を登録します。以下の手順に従ってセットアップしてください。デプロイするだけの場合は必須ではありませんが、よりセキュアに開発するためにセットアップを推奨します。 + +- [手順]: [Git の pre-commit hook のセットアップ](HowTo_ja.md#Git-の-pre-commit-hook-のセットアップ) + +### 4. AWS SSO に合わせて AWS CLI の認証情報を設定する(Local) + +恒久的な認証情報も利用可能ですが、ControlTower 環境では AWS SSO の利用を推奨します。AWS SSO によって、マネジメントコンソールへのログインおよび SSO 認証による AWS CLI の実行が可能です。 + +#### 4-1. AWS CLI のバージョンを確認する + +AWS CLI - AWS SSO 統合を使うためには、AWS CLIv2 を使う必要があります。 + +- See: [https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html] + +次のように CLI のバージョンを確認します: + +```sh +aws --version +``` + +出力結果がバージョン 2 以上であることを確認します + +```sh +aws-cli/2.3.0 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off +``` + +#### 4-2. aws2-wrap を導入する + +AWS CLI - AWS SSO 統合を CDK から使用するため、オープンソースのツールである aws2-wrap ([https://github.com/linaro-its/aws2-wrap]) を CDK を実行する環境にインストールします + +```sh +pip3 install aws2-wrap +``` + +#### 4-3. Audit アカウントデプロイ用の AWS CLI プロファイルを設定する + +次に、Control Tower の Audit アカウントにデプロイするための CLI プロファイルを設定します。ここではマネジメントアカウントの ID を `1111111111111`, Audit アカウントの ID を `222222222222` としています。 + +~/.aws/config + +```text +# for Management Account Login +[profile ct-management-sso] +sso_start_url = https://d-90xxxxxxxx.awsapps.com/start#/ +sso_region = ap-northeast-1 +sso_account_id = 1111111111111 +sso_role_name = AWSAdministratorAccess +region = ap-northeast-1 + +# Accessing with AWSControlTowerExecution Role on Audit Account +[profile ct-audit-exec-role] +role_arn = arn:aws:iam::222222222222:role/AWSControlTowerExecution +source_profile = ct-management-sso +region = ap-northeast-1 + +# for CDK access to ct-audit-exec-role +[profile ct-audit-exec] +credential_process = aws2-wrap --process --profile ct-audit-exec-role +region = ap-northeast-1 +``` + +> NOTE: +> +> ControlTower の仕様により、Audit アカウントにデプロイするためには、まずマネジメントアカウントの `AWSAdministratorAccess` ロールでログインし、Audit アカウントの`AWSControlTowerExecution`ロールにスイッチして処理を実行する必要があります。 +> +> `ct-management-sso`プロファイルで SSO ログインすることで、`ct-audit-exec-role`プロファイルを使って Audit アカウント上での操作が可能です。これに CDK からアクセスするため、ラッピングされたプロファイルである `ct-audit-exec` を使用します。 + +#### 4-4. ゲストアカウントデプロイ用の AWS CLI プロファイルを設定する + +ゲストアカウントにデプロイするための AWS CLI プロファイルを設定します。ここではゲストアカウントの ID を`123456789012`としています。 + +~/.aws/config + +```text +# for Guest Account Login +[profile ct-guest-sso] +sso_start_url = https://d-90xxxxxxxx.awsapps.com/start#/ +sso_region = ap-northeast-1 +sso_account_id = 123456789012 +sso_role_name = AWSAdministratorAccess +region = ap-northeast-1 + +# for CDK access to ct-guest-sso +[profile ct-guest] +credential_process = aws2-wrap --process --profile ct-guest-sso +region = ap-northeast-1 +``` + +> NOTE: +> +> `ct-guest-sso`プロファイルで ゲストアカウントに SSO ログインします。これに CDK からアクセスするため、ラッピングされたプロファイルである `ct-guest` を使用します。 + +#### 4-5. AWS SSO を使った CLI ログイン + +次のコマンドで AWS SSO にログインします。ここでは`ct-guest-sso`プロファイルでログインする例を示します。 + +```sh +aws sso login --profile ct-guest-sso +``` + +このコマンドによって ブラウザが起動し、AWS SSO のログイン画面が表示されます。ゲストアカウントの管理者ユーザー名(メールアドレス)とパスワードを正しく入力すると画面がターミナルに戻り、 AWS CLI で ゲストアカウントでの作業が可能になります。 + +> Notes: `ct-guest`プロファイルは aws2-warp を経由した認証を行なっており、CDK を実行する場合に使用します。 + +### 5. Audit アカウントに通知用のベースラインを設定する(Local) + +Audit アカウントには ControlTower が作成した、すべての AWS Config の変更通知が送られる SNS Topic があります。この内容を Slack に通知するようベースラインを設定します。 +AWS Chatbot のセットアップのみマネジメントコンソールで行い、以後の作業はローカルで行います。 + +> NOTE: +> +> AWS Config の通知が不要である場合はこのベースラインは設定しなくても構いません。他のアカウントの挙動には影響しません。 + +#### 5-1. AWS Chatbot 用の Slack セットアップ + +Audit account にマネジメントコンソールでログインして、 AWS Chatbot に Slack Workspace をセットアップします。ここでは Aggregation 用の 1 つだけを作成します。以下の手順を参照してください。 + +- [手順] [AWSChatbot 用に Slack を設定する](HowTo_ja.md#AWSChatbot-用に-Slack-を設定する) + +#### 5-2. デプロイ情報(Context)を設定する + +ControlTower の Audit アカウント用ユースケースの CDK Context (cdk.json) にパラメータを指定します。設定ファイルはこちらです。デフォルトでは dev-audit という名前の context が設定されています。 + +```sh +usecases/base-ct-audit/cdk.json +``` + +usecases/base-ct-audit/cdk.json + +```json +{ + "app": "npx ts-node bin/blea-base-ct-audit.ts", + "context": { + "dev-audit": { + "description": "Context samples for ControlTower Audit Account - Specific account & region", + "env": { + "account": "333333333333", + "region": "ap-northeast-1" + }, + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdAgg": "C01ZZZZZZZZ" + } + } + } +} +``` + +この設定内容は以下の通りです。 + +| key | value | +| -------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| description | 設定についてのコメント | +| envName | 環境名。これが各々のリソースタグに設定されます | +| env.account | デプロイ対象のアカウント ID。CLI の profile で指定するアカウントと一致している必要があります | +| env.region | デプロイ対象のリージョン。CLI の profile で指定するリージョンと一致している必要があります | +| slackNotifier.workspaceId | AWS Chatbot に設定した Slack workspace の ID | +| slackNotifier.channelIdAgg | AWS Chatbot に設定した Slack channel の ID。ControlTower 配下のアカウントの全ての AWS Config の変更が通知されます | + +> NOTE: Context の使い方については以下の解説を参照してください +> +> - [cdk.context.json による個人環境の管理](HowTo_ja.md#cdkcontextjson-による個人環境の管理) +> - [アプリケーション内で Context にアクセスする仕組み](HowTo_ja.md#アプリケーション内で-Context-にアクセスする仕組み) + +#### 5-3. Audit アカウント用のベースラインをデプロイ + +以下のコマンドで AWS SSO を使ってマネジメントアカウントにログインします。 + +> Audit アカウントは マネジメントアカウントの `AWSControlTowerExecution` ロールでのみセットアップが可能です(ControlTower の仕様) + +```sh +aws sso login --profile ct-management-sso +``` + +BLEA をビルドします。 + +```sh +cd usecases/base-ct-audit +npm run build +``` + +Audit アカウントに CDK 用バケットをブートストラップします(初回のみ) + +```sh +cd usecases/base-ct-audit +npx cdk bootstrap -c environment=dev-audit --profile ct-audit-exec +``` + +Audit アカウントにガバナンスベースをデプロイします + +```sh +npx cdk deploy --all -c environment=dev-audit --profile ct-audit-exec +``` + +以上で、この ControlTower 管理下にあるアカウントのすべての AWS Config 変更イベントが通知されるようになります。 + +> NOTE: +> +> - ここでは BLEA 環境にインストールしたローカルの cdk を利用するため、`npx`を使用しています。直接`cdk`からコマンドを始めた場合は、グローバルインストールされた cdk が利用されます。 +> - cdk コマンドを利用するときに便利なオプションがあります。[デプロイ時の承認をスキップしロールバックさせない](HowTo_ja.md#デプロイ時の承認をスキップしロールバックさせない)を参照してください。 + +### 6. ゲストアカウント用ガバナンスベースをデプロイする(Local) + +#### 6-1. デプロイ情報(Context)を設定する + +デプロイのため CDK Context (cdk.json) にパラメータを指定する必要があります。 ControlTower 版のゲストアカウント ガバナンスベースの設定ファイルはこちらです。 + +```sh +usecases/base-ct-guest/cdk.json +``` + +このサンプルは `dev`と`staging` という Context を定義する例です。同様の設定を検証、本番アカウントにもデプロイできるようにするには、`staging`や`prod`といった Context を用意します。 + +> NOTE: +> +> デプロイ対象のアカウントを明示的に指定したい場合は`env`を指定してください。これによって CLI Profile で指定するアカウント-リージョンと、`env`で指定するものが一致していないとデプロイできなくなります。アカウントに設定したパラメータを確実に管理し、誤ったアカウントにデプロイすることを防ぐことができます。できるだけ`env`も指定することをお勧めします。 + +usecases/base-ct-guest/cdk.json + +```json +{ + "app": "npx ts-node bin/blea-base-sa.ts", + "context": { + "dev": { + "description": "Context samples for Dev - Anonymous account & region", + "envName": "Development", + "securityNotifyEmail": "notify-security@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C00XXXXXXXX" + } + }, + "stage": { + "description": "Context samples for Staging - Specific account & region ", + "env": { + "account": "111111111111", + "region": "ap-northeast-1" + }, + "envName": "Staging", + "securityNotifyEmail": "notify-security@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C01XXXXXXXX" + } + } + } +} +``` + +この設定内容は以下の通りです。 + +| key | value | +| -------------------------- | -------------------------------------------------------------------------------------------- | +| description | 設定についてのコメント | +| env.account | デプロイ対象のアカウント ID。CLI の profile で指定するアカウントと一致している必要があります | +| env.region | デプロイ対象のリージョン。CLI の profile で指定するリージョンと一致している必要があります | +| envName | 環境名。これが各々のリソースタグに設定されます | +| securityNotifyEmail | セキュリティに関する通知が送られるメールアドレス。内容は Slack と同様です | +| slackNotifier.workspaceId | AWS Chatbot に設定した Slack workspace の ID | +| slackNotifier.channelIdSec | AWS Chatbot に設定した Slack channel の ID。セキュリティに関する通知が行われます | + +#### 6-2. ゲストアカウントにガバナンスベースデプロイする + +AWS SSO を使ってゲストアカウントにログインします。 + +```sh +aws sso login --profile ct-guest-sso +``` + +BLEA をビルドします。 + +```sh +cd usecases/base-ct-guest +npm run build +``` + +CDK 用バケットをブートストラップします(初回のみ)。 + +```sh +cd usecases/base-ct-guest +npx cdk bootstrap -c environment=dev --profile ct-guest +``` + +> NOTE: +> +> - ここでは BLEA 環境にインストールしたローカルの cdk を利用するため、`npx`を使用しています。直接`cdk`からコマンドを始めた場合は、グローバルインストールされた cdk が利用されます。 +> - cdk コマンドを利用するときに便利なオプションがあります。[デプロイ時の承認をスキップしロールバックさせない](HowTo_ja.md#デプロイ時の承認をスキップしロールバックさせない)を参照してください。 + +ゲストアカウントのガバナンスベースをデプロイします。 + +```sh +npx cdk deploy --all -c environment=dev --profile ct-guest +``` + +これによって以下の機能がセットアップされます + +- デフォルトセキュリティグループの閉塞 (逸脱した場合自動修復) +- AWS Health イベントの通知 +- セキュリティに影響する変更操作の通知(一部) +- Slack によるセキュリティイベントの通知 + +Standalone 版でセットアップされていた以下の内容は ControlTower およびセキュリティサービスの Organizations 対応により設定されます。 + +- CloudTrail による API のロギング +- AWS Config による構成変更の記録 +- GuardDuty による異常なふるまいの検知 +- SecurityHub によるベストプラクティスからの逸脱検知 (AWS Foundational Security Best Practice, CIS benchmark) + +#### 6-3. (オプション) 他のベースラインセットアップを手動でセットアップする + +ガバナンスベースでセットアップする他に +AWS はいくつかの運用上のベースラインサービスを提供しています。必要に応じてこれらのサービスのセットアップを行なってください。 + +##### a. EC2 管理のため AWS Systems Manager Quick Setup を実施する + +EC2 を利用する場合は SystemsManager を利用して管理することをお勧めします。AWS Systems Manager Quick Setup を使うことで、EC2 の管理に必要な基本的なセットアップを自動化できます。 +セットアップ手順: [https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html] + +Quick Setup は以下の機能を提供します: + +- Systems Manager で必要となる AWS Identity and Access Management (IAM) インスタンスプロファイルロールの設定 +- SSM Agent の隔週自動アップデート +- 30 分ごとのインベントリメタデータの収集 +- インスタンスのパッチ不足を検出するための日次スキャン +- 初回のみの、Amazon CloudWatch agent のインストールと設定 +- CloudWatch agent の月次自動アップデート + +##### b. Trusted Advisor の検知結果レポート + +TrustedAdvisor は AWS のベストプラクティスをフォローするためのアドバイスを提供します。レポート内容を定期的にメールで受け取ることが可能です。詳細は下記ドキュメントを参照してください。 + +- See: [https://docs.aws.amazon.com/awssupport/latest/user/get-started-with-aws-trusted-advisor.html#preferences-trusted-advisor-console] + +### 7. ゲストアプリケーションサンプルをデプロイする(Local) + +ガバナンスベースが設定された後は Standalone 版も ControlTower 版も同じ手順で同じゲストアプリケーションサンプルをデプロイできます。 + +ゲストアカウントに SSO で認証している状態からデプロイメントの手順を示します。 + +#### 7-1. ゲストアプリケーションの Context を設定する + +Standalone 版と同じ手順で Context を設定します。 + +#### 7-2. ゲストアプリケーションをデプロイする + +(ログインしていない場合)AWS SSO を使ってゲストアカウントにログインします。 + +```sh +aws sso login --profile ct-guest-sso +``` + +BLEA をビルドします。 + +```sh +cd usecases/guest-webapp-sample +npm run build +``` + +ゲストアプリケーションをデプロイします。 + +```sh +npx cdk deploy --all -c environment=dev --profile ct-guest +``` + +以上で単一アカウントに対するベースラインおよびサンプルアプリケーションのデプロイが完了します。 + +> NOTE: +> +> Aurora を含めた全てのリソースをデプロイ完了するまでには 30 分程度かかります。一部のリソースだけをデプロイしたい場合は対象のスタック名を明示的に指定してください。スタック名はアプリケーションコード(ここでは bin/blea-guest-ecsapp-sample.ts)の中で`${pjPrefix}-ECSApp`のように表現されています。 +> +> ```sh +> cd usecases/guest-webapp-sample +> npx cdk deploy "BLEA-ECSApp" --app "npx ts-node bin/blea-guest-asgapp-sample.ts" -c environment=dev --profile prof_dev +> ``` +> +> NOTE: +> guest-webapp-sample は bin ディレクトリ配下に複数のバリエーションを用意しています。デフォルトでは cdk.json の `app` に指定されたアプリケーション(blea-guest-ecsapp-sample.ts)がデプロイされます。 別のアプリケーションをデプロイしたい場合は、以下のように cdk の引数で明示的に `--app` を指定することで対応可能です。同一ユースケース内であれば cdk.json の Context はいずれも同じ内容で動作します。 +> +> ```sh +> cd usecases/guest-webapp-sample +> npx cdk deploy --all --app "npx ts-node bin/blea-guest-asgapp-sample.ts" -c environment=dev --profile prof_dev +> ``` + +#### 7-3. 独自のアプリケーションを開発する + +以後はこのサンプルコードを起点にして、自分のユースケースに合わせたアプリケーションを開発していくことになります。一般的な開発に必要な情報を示します。 + +- [通常の開発の流れ](HowTo_ja.md#通常の開発の流れ) +- [依存パッケージの最新化](HowTo_ja.md#依存パッケージの最新化) + +#### 7-4. セキュリティ指摘事項の修復 + +ガバナンスベースをデプロイした後でも、Security Hub のベンチマークレポートで 重要度が CRITICAL あるいは HIGH のレベルでレポートされる検出項目があります。これらに対しては手動で対応が必要です。必要に応じて修復(Remediation)を実施してください。 + +- [セキュリティ指摘事項の修復](HowTo_ja.md#セキュリティ指摘事項の修復) diff --git a/doc/HowTo.md b/doc/HowTo.md new file mode 100644 index 000000000..1658314ec --- /dev/null +++ b/doc/HowTo.md @@ -0,0 +1,419 @@ +# HowTo + +[View this page in Japanese (日本語)](HowTo_ja.md)| [Back to Repository README](../README.md) + +Here we will describe howTo for various settings. + +- [VisualStudioCode Setup Instructions](#VisualStudioCode-Setup-Instructions) +- [Git pre-commit hook setup](#Git-pre-commit-hook-setup) +- [Skip Deployment Approvals and Don't Roll Back](#skip-deployment-approvals-and-dont-roll-back) +- [Manage personal environment by cdk.context.json](#cdkcontextjson-Manage-personal-environment) +- [Set up Slack for AWS ChatBot](#set-up-slack-for-aws-chatbot) +- [Deployment with CloudShell](#deployment-with-cloudshell) +- [Update package dependencies](#update-dependencies) +- [Accessing context in application](#accessing-context-in-application) +- [Development process](#development-process) +- [Remediate Security Issues](#remediate-security-issues) + +--- + +## VisualStudioCode Setup Instructions + +The choice of a text editor is optional, but this section describes the setup steps for using VSCode. If you use another text editor, we strongly recommend that you use one that can work with the following tools: + +- [EditorConfig](https://editorconfig.org/) +- [Prettier](https://prettier.io/) +- [ESLint](https://eslint.org/) + +> NOTE: +> +> Code completion, jumping to definitions, and so on are implemented by [VSCode's built-in features](https://code.visualstudio.com/docs/languages/typescript). If you want to use the equivalent functionality in another text editor, consider using a text editor or its plugin support [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/). + +### Installing and Initializing VSCode + +Please install from [Visual Studio Code](https://code.visualstudio.com/) + +For macOS, select [Running Visual Studio Code on macOS](https://code.visualstudio.com/docs/setup/mac) so you can use `code` command to be executed from the shell. It is set automatically on Windows. + +### Installing the VSCode Extension + +If you clone this repository in a subsequent step and open it in VSCode, you will be prompted to install the recommended extension. Now click on _Install_. + +! [vscode-recommended-extensions](doc/images/VSCode-Recommended-Extensions.jpg) + +This recommended extension is defined in `.vscode/extensions.json`. For more information about this feature, see [Managing Extensions in Visual Studio Code](https://code.visualstudio.com/docs/editor/extension-marketplace#_workspace-recommended-extensions). + +### Configuring the VSCode Extension + +Press `Ctrl + Shift + p` (macOS: `Ctrl + Command + p`) to display the Command Palette and `Preferences:Open Select Settings (JSON)` Add the following settings: +This will allow the code to be linted, formatting, etc. at the time of saving. + +```json + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + }, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "prettier.useEditorConfig": true, +``` + +--- + +## Git pre-commit hook setup + +### Setting up simple-git-hooks + +Run the following command in the top directory of the BLEA source code: + +```sh +# in the top directory of BLEA +npx simple-git-hooks +``` + +Git hooks are set up (.git/hooks/pre-commit) so that lint-staged runs before committing. + +### Installing and Configuring Git-Secrets + +lint-staged is configured to perform checks by git-secrets in addition to eslint and prettier checks (package.json). + +Install [awslabs/git-secrets - GitHub](https://github.com/awslabs/git-secrets) according to the README Please Then run the following command to work with the git command: + +```sh +git secrets --register-aws --global +``` + +Next, register a list of credentials that are allowed as dummy values. Edit `~/.gitconfig` and look for the `[secrets]` section generated by the above command and add the following: These are the account IDs that you are using as dummies in the source code of BLEA. + +```text + # Fictitious AWS Account ID + allowed = 111122223333 + allowed = 444455556666 + allowed = 123456789012 + allowed = 777788889999 + allowed = 000000000000 + allowed = 111111111111 + allowed = 222222222222 + allowed = 333333333333 +``` + +> NOTE +> +> Do **not** run `git secrets install`. In this project, `simple-git-hooks` is used to hook pre-commit and call git-secrets from here. Running `git secrets install` causes hook conflicts. + +--- + +## Skip Deployment Approvals and Don't Roll Back + +You can control deployment behavior by specifying options in the cdk command. Here are some useful settings that are often used. + +- See: [https://docs.aws.amazon.com/cdk/latest/guide/cli.html#cli-deploy] + +### Skip approval when deploying + +Normally, when deploying with a CDK, you will be prompted for approval, but specify the `-—require-approval never` option on the cdk command line This will prevent the confirmation prompt from being displayed (but be careful!). + +### Do not roll back if deployment fails + +The CDK deploys using CloudFormation, but typically if an error occurs during deployment, the target stack is rolled back to the state it was in before the deployment started. If you specify the `-R` or `-—no-rollback` option on the cdk command line, the deployment process will not be rolled back when a deployment error occurs. Stops If you fix the error and deploy it again, the process will resume from the point where it stopped. This is useful for trial-and-error settings. + +### How to set cdk.json + +By setting `RequireApproval` and `Rollback` to cdk.json as follows, you do not need to set each time in the command. + +```json +{ + "app": "npx ts-node bin/blea-guest-ecsapp-sample.ts", + "requireApproval": "never", + "rollback": false, + "context": { + "dev": { +``` + +--- + +## Manage personal environment by cdk.context.json + +You can specify parameters for your development environment by placing cdk.context.json in the same directory as cdk.json. This file will not be committed to the repository. This file may have been created automatically by the CDK. In this case, keep the existing configuration and add your own Context definition. + +cdk.context.json example + +```json +{ + "@aws-cdk/core:enableStackNameDuplicates": "true", + "aws-cdk:enableDiffNoFail": "true", + "@aws-cdk/core:stackRelativeExports": "true", + "my": { + "description": "Personal Environment variables for blea-guest-*-samples.ts", + "envName": "Personal", + "vpcCidr": "10.100.0.0/16", + "monitoringNotifyEmail": "zzz@example.com", + "dbUser": "personaluser", + "slackNotifier": { + "workspaceId": "T8XXXXXXXXX", + "channelIdMon": "C02YYYYYYYY" + } + } +} +``` + +--- + +## Set up Slack for AWS ChatBot + +To send alarms to Slack, deploy the Blea-ChatbotSecurity and Blea-ChatbotMonitor stack. Before you can deploy these stacks, you must set up a chat client for AWS Chatbot. If you do not do this, the stack deployment will fail. +The steps to configure AWS Chatbot are as follows: + +### 1. Create a workspace and channel in Slack + +(This step is for Slack.) Create a workspace and create a Slack channel where you want to receive messages. Make a note of the Slack channel ID (you can copy the channel ID by right-clicking on the channel name and selecting “Copy Link”). This link looks like this: `https://your-work-space.slack.com/archives/C01XXXXXXXX`. where `C01XXXXXXXX` +The channel ID of that channel. + +### 2. Set up a chat client with AWS Chatbot + +Create a Slack workspace on AWS Chatbot by following steps 1-4 in Setting up AWS Chatbot with Slack in the following procedure Please + +- See: [https://docs.aws.amazon.com/chatbot/latest/adminguide/getting-started.html] + +Make a note of the ID of the Workspace you created. It looks like `T8XXXXXXX`. + +### 3. Set the workspace ID and channel ID in the Context file + +Set the Slack workspace ID and Channel ID for cdk.json or cdk.context.json as follows: Specify a different channel for security and monitoring: + +For security (governance baseline): + +```json + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C01XXXXXXXX", + } +``` + +For monitoring (sample application): + +```json + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdMon": "C01YYYYYYYY" + } +``` + +| key | value | +| ------------ | --------------------------------------------------------------------------------- | +| WorkspaceID | Copy from Workspace details in AWS Chatbot | +| ChannelIDSec | Copy from Slack App - For Security Alarms | +| ChannelIdMon | Copy from Slack App - For Monitoring Alarms | +| ChannelidaGG | Copy from Slack App - For alarms for aggregated information in your Audit account | + +--- + +## Deployment with CloudShell + +You can use CloudShell to deploy this template from the management console. +However, keep in mind that ClouShell deletes data from the environment you set up after 120 days of inuse. + +see: [https://docs.aws.amazon.com/cloudshell/latest/userguide/limits.html] + +### 1. Start CloudShell + +- Launch CloudShell by clicking the [>_] icon in the AWS Management Console (next to your account name in the top right corner of the screen) + ! [OpenConsole](doc/images/CloudShell-OpenConsole.png) + +### 2. Set up the CDK execution environment + +See: [https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/getting_started.html] + +- Update npm + +```sh +sudo npm -g install npm +``` + +### 3. Upload CDK code + +1. Download the CDK code to be deployed and archive it with zip, etc. +2. From the CloudShell screen, click [Action]-[Upload File] to upload the archived file + ![UploadFiles](doc/images/CloudShell-UploadFiles.png) + +3. Extract uploaded files + +- If you have access to a remote repository, you can also use CloudShell to git clone to get CDK code + +### 4. Build and deploy + +```sh +cd path/to/source +npm ci +# 全usecaseのbuild +npm run build --workspaces +cd usecases/guest-webapp-sample +npx cdk deploy --all -c environment=dev --profile prof_dev +``` + +--- + +## Update package dependencies + +If you want to use the latest CDK, you must update the dependent NPM packages. The procedure for updating is as follows: This is done in the top directory of BLEA. + +```sh +# in the top directory of BLEA +npm update --workspaces +``` + +> NOTE +> +> If a dependency package version inconsistency occurs here, fix package.json accordingly. For example, `jest` is listed as `devDependencies` in package.json because it is used as a testing tool for this project. `aws-cdk` also depends on `jest`, and `aws-cdk` is the version of `jest` listed in package.json by `ncu -u` There is a possibility that it will no longer match the version required by. + +--- + +## Accessing context in application + +Context specified in cdk.json or cdk.context.json is accessed as follows in CDK code (bin/\*.ts). + +```ts +const envKey = app.node.tryGetContext('environment'); +const valArray = app.node.tryGetContext(envKey); +const environment_name = valArray['envName']; +``` + +An example of how to deploy using the Context parameter. + +```sh +cdk deploy --all --profile prof_dev -c environment=dev +cdk deploy --all --profile prof_prod -c environment=prod +``` + +- If `—-app` is not specified, the Application specified in `app` of cdk.json will be deployed. + +- Specify `—-profile xxxxx` to specify a profile (credentials) for deployment + +- Specify `-c envrionment=xxxx` to specify the Context parameter defined in cdk.json. +- The account and region for the credentials specified in profile must match the account and region specified in env in the Context. This prevents you from deploying to the wrong account, and also keeps a record of which account you deployed with which context. It is recommended to specify `env` as much as possible in context. +- If the account used by each developer is different, such as in the development environment, there is a way to not specify `env` in context. If `env` is not set, it will be deployed to the account and region of the credentials specified in profile. + +- See: [https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/context.html] +- See: [https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/get_context_var.html] + +--- + +## Development process + +Once deployed, the flow of editing, building, and deploying the CDK code looks like this: + +### 1. Go to the use case directory + +> ```sh +> cd usecases/guest-webapp-sample +> ``` + +### 2. Clean up your environment + +> ```sh +> npm run clean +> ``` + +### 3. Edit CDK code + +Edit the CDK code in any editor. (Visutal Studio Code is recommended) + +### 4. Install additional packages if needed + +If your CDK code requires additional packages, install them as follows: Here we have `@aws -cdk/aws-kms` installed. + +> ```sh +> # Run in root directory on BLEA +> npm i -P @aws-cdk/aws-kms --workspace usecases/guest-webapp-sample +> ``` + +### 5. Build & test + +> ```sh +> # linting +> npm run lint +> # formatting +> npm run format +> # build +> npm run build +> # snapshot test +> npm run test +> ``` + +> NOTE: +> To build all use cases, run the following using workspaces: +> +> ```sh +> # Run in the root directory of BLEA +> npm ci +> npm run lint +> npm run format +> npm run clean --workspaces +> npm run build --workspaces +> npm run test --workspaces +> ``` +> +> To build an individual use case using workspaces: Note the difference between workspaces and workspaces. +> +> ```sh +> # Run in the root directory of BLEA +> npm run build --workspace usecases/guest-webapp-sample +> ``` + +### 6. Synth/Diff + +Create a CDK Asset and see the differences from the current environment. + +> ```sh +> npx cdk synth --all --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --profile prof_dev --require-approval never --no-rollback +> npx cdk diff --all --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --profile prof_dev --require-approval never --no-rollback +> ``` + +### 7. Deploy + +Deploy it. Here we have added an option to skip authorization and not roll back. + +> ```sh +> npx cdk deploy --all --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --profile prof_dev --require-approval never --no-rollback +> ``` + +--- + +## Remediate Security Issues + +Even after deploying a governance base, there are detections that are reported at a critical or high severity level in Security Hub benchmark reports . You will need to take action on these manually. + +> Optional: You can also disable Security Hub detections (not recommended. (If you want to disable it, please do so after fully evaluating the security risk.) + +- [https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-enable-disable-controls.html] + +### 1. Enable MFA for the root user + +You must manually configure MFA for the root user. A root user is a user who logs in with an email address when logging into the Management Console. + +Security Hub controls related to MFA (CRITICAL level) + +- [CIS.1.13] Ensure MFA is enabled for the “root” account + - [https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-1.13] +- [CIS.1.14] Ensure hardware MFA is enabled for the “root” account + - [https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-1.14] +- [IAM.6] Hardware MFA should be enabled for the root user + - [https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-iam-6] + +#### How to repair + +##### 1. Access the root user of an Organizations member account + +- [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html#orgs_manage_accounts_access-as-root] + +##### 2. Enable Hardware MFA for the Root User + +- [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_physical.html#enable-hw-mfa-for-root] + +### 2. Using IMDSv2 for EC2 metadata access + +It is recommended that you use IDMSv2 only for metadata access on EC2 instances. Refer to the following documents for remediation: + +- [EC2.8] EC2 instances should use IMDSv2 + - [https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-ec2-8] + +--- diff --git a/doc/HowTo_ja.md b/doc/HowTo_ja.md new file mode 100644 index 000000000..f7bf18c5d --- /dev/null +++ b/doc/HowTo_ja.md @@ -0,0 +1,420 @@ +# HowTo + +[In English](HowTo.md) | [リポジトリの README に戻る](../README_ja.md) + +ここでは各種設定の HowTo について記載します。 + +- [VisualStudioCode のセットアップ](#VisualStudioCode-のセットアップ) +- [Git の pre-commit hook のセットアップ](#Git-の-pre-commit-hook-のセットアップ) +- [デプロイ時の承認をスキップしロールバックさせない](#デプロイ時の承認をスキップしロールバックさせない) +- [cdk.context.json による個人環境の管理](#cdkcontextjson-による個人環境の管理) +- [AWSChatbot 用に Slack を設定する](#AWSChatbot-用に-Slack-を設定する) +- [CloudShell によるデプロイメント](#CloudShell-によるデプロイメント) +- [依存パッケージの最新化](#依存パッケージの最新化) +- [アプリケーション内で Context にアクセスする仕組み](#アプリケーション内で-Context-にアクセスする仕組み) +- [通常の開発の流れ](#通常の開発の流れ) +- [セキュリティ指摘事項の修復](#セキュリティ指摘事項の修復) + +--- + +## VisualStudioCode のセットアップ + +テキストエディタの選択は任意ですが、ここでは VSCode を使用した場合のセットアップ手順を記述します。他のテキストエディタを使用する場合、以下のツールと連携可能なものを使用することを強く推奨します。 + +- [EditorConfig](https://editorconfig.org/) +- [Prettier](https://prettier.io/) +- [ESLint](https://eslint.org/) + +> NOTE: +> +> コード補完や定義箇所へのジャンプなどは[VSCode のビルトイン機能](https://code.visualstudio.com/docs/languages/typescript)を使って実現されています。他のテキストエディタで同等の機能を使用したい場合は、 [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) をサポートするテキストエディタまたはそのプラグインの利用をご検討ください。 + +### VSCode のインストールと初期設定 + +[Visual Studio Code](https://code.visualstudio.com/) よりインストールしてください。 + +macOS の場合、 [Running Visual Studio Code on macOS](https://code.visualstudio.com/docs/setup/mac) の手順に従い、 `code` コマンドがシェルから実行できるように設定してください。Windows では自動で設定されます。 + +### VSCode Extension のインストール + +後続の手順でこのリポジトリを clone して VSCode で開くと、推奨 Extension のインストールを促されます。ここで _Install_ をクリックます。 + +![VSCode-Recommended-Extensions](doc/images/VSCode-Recommended-Extensions.jpg) + +この推奨 Extension は `.vscode/extensions.json` で定義されています。この機能の詳細は [Managing Extensions in Visual Studio Code](https://code.visualstudio.com/docs/editor/extension-marketplace#_workspace-recommended-extensions) をご参照ください。 + +### VSCode Extension の設定 + +`Ctrl + Shift + p` (macOS: `Ctrl + Command + p`) を押してコマンドパレットを表示し、 `Preferences: Open Settings (JSON)` を選択します。以下の設定を追加します。 +これによって保存時にコードの Linting、フォーマッティング等が行われるようになります。 + +```json + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + }, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "prettier.useEditorConfig": true, +``` + +--- + +## Git の pre-commit hook のセットアップ + +### simple-git-hooks のセットアップ + +BLEA ソースコードのトップディレクトリで以下のコマンドを実行します。 + +```sh +# BLEAのトップディレクトリで +npx simple-git-hooks +``` + +Git の hook が設定され(.git/hooks/pre-commit) コミット前に lint-staged が実行されるようになります。 + +### git-secrets のインストールと設定 + +lint-staged では eslint と prettier によるチェックに加え、git-secrets によるチェックが実行されるよう設定されています(package.json)。 + +[awslabs/git-secrets - GitHub](https://github.com/awslabs/git-secrets) を README に従いインストールしてください。その後、以下のコマンドを実行して git コマンドと連携させます。 + +```sh +git secrets --register-aws --global +``` + +次に、ダミーの値として許可される認証情報のリストを登録します。 `~/.gitconfig` を編集し、上述のコマンドによって生成された `[secrets]` セクションを探して以下を追記します。これらは BLEA のソースコード内でダミーとして使用しているアカウント ID です。 + +```text + # Fictitious AWS Account ID + allowed = 111122223333 + allowed = 444455556666 + allowed = 123456789012 + allowed = 777788889999 + allowed = 000000000000 + allowed = 111111111111 + allowed = 222222222222 + allowed = 333333333333 +``` + +> NOTE +> +> `git secrets install` は実行**しない**でください。本プロジェクトでは `simple-git-hooks`を使用して pre-commit をフックし、ここから git-secrets を呼び出しています。 `git secrets install` を実行するとフックが競合します。 + +--- + +## デプロイ時の承認をスキップしロールバックさせない + +cdk コマンドにオプションを指定することで、デプロイ時の挙動をコントロールできます。ここではよく利用される便利な設定について記載します。 + +- See: [https://docs.aws.amazon.com/cdk/latest/guide/cli.html#cli-deploy] + +### デプロイ時の承認をスキップする + +通常、CDK によるデプロイを行う場合、承認を求めるプロンプトが表示されますが、cdk のコマンドラインに `--require-approval never` オプションを指定することで確認のプロンプトが表示されなくなります(ただし利用にはご注意ください!)。 + +### デプロイに失敗してもロールバックさせない + +CDK は CloudFormation を使ってデプロイしますが、通常デプロイ時にエラーが発生すると対象スタックはロールバックされ、デプロイを開始する前の状態にまで戻ります。cdk のコマンドラインに`-R`または`--no-rollback`オプションを指定すると、デプロイエラーになったときもロールバックされず、エラーになった時点でデプロイの処理が停止します。エラー内容を修正して再度デプロイすると処理が停止した時点から再開されます。設定の試行錯誤を行う場合に便利です。 + +### cdk.json に設定する方法 + +以下のように`requireApproval`と`rollback`を cdk.json に設定することで、コマンドで都度設定する必要が無くなります。 + +```json +{ + "app": "npx ts-node bin/blea-guest-ecsapp-sample.ts", + "requireApproval": "never", + "rollback": false, + "context": { + "dev": { +``` + +--- + +## cdk.context.json による個人環境の管理 + +cdk.json と同じディレクトリに cdk.context.json を置くことで、自分の開発環境のパラメータを指定することができます。このファイルはリポジトリにはコミットされません。このファイルは CDK によって自動的に作成されている場合があります。その場合は既存の設定を残したまま自分自身の Context 定義を追加してください。 + +cdk.context.json の例 + +```json +{ + "@aws-cdk/core:enableStackNameDuplicates": "true", + "aws-cdk:enableDiffNoFail": "true", + "@aws-cdk/core:stackRelativeExports": "true", + "my": { + "description": "Personal Environment variables for blea-guest-*-samples.ts", + "envName": "Personal", + "vpcCidr": "10.100.0.0/16", + "monitoringNotifyEmail": "zzz@example.com", + "dbUser": "personaluser", + "slackNotifier": { + "workspaceId": "T8XXXXXXXXX", + "channelIdMon": "C02YYYYYYYY" + } + } +} +``` + +--- + +## AWSChatbot 用に Slack を設定する + +アラームを Slack に送るためには BLEA-ChatbotSecurity および BLEA-ChatbotMonitor stack をデプロイします。これらのスタックをデプロイする前に、AWS Chatbot に対してチャットクライアントのセットアップが必要です。この作業を行なっていないとスタックのデプロイに失敗します。 +AWS Chatbot の設定手順は以下の通りです。 + +### 1. Slack に workspace と channel を作る + +(この手順は Slack での操作です) workspace を作り、メッセージを受信したい Slack channel を作ります。Slack channel ID をメモしてください(channel ID はチャネル名を右クリックして"Copy Link"でコピーできます). このリンクは次のようになります。 `https://your-work-space.slack.com/archives/C01XXXXXXXX`. ここで、 `C01XXXXXXXX` が +そのチャネルの channel ID です。 + +### 2. AWS Chatbot でチャットクライアントをセットアップする + +以下の手順の "Setting up AWS Chatbot with Slack" の 1〜4 にしたがって、Slack workspace を AWS Chatbot に作成してください。 + +- See: [https://docs.aws.amazon.com/chatbot/latest/adminguide/getting-started.html] + +作成した Workspace の ID をメモしてください。`T8XXXXXXX`のようになります。 + +### 3. Context file に workspace ID と channel ID を設定する + +cdk.json または cdk.context.json に次のように Slack workspace ID と Channel ID を設定します。セキュリティ用とモニタリング用で Channel は異なるものを指定してください: + +セキュリティ用(ガバナンスベース): + +```json + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C01XXXXXXXX", + } +``` + +モニタリング用(サンプルアプリケーション): + +```json + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdMon": "C01YYYYYYYY" + } +``` + +| 設定項目 | 値の取得元 | +| ------------ | ------------------------------------------------------------------------- | +| workspaceId | AWS Chatbot の Workspace details からコピー | +| channelIdSec | Slack App からコピー - セキュリティアラーム用 | +| channelIdMon | Slack App からコピー - モニタリングアラーム用 | +| channelIdAgg | Slack App からコピー - Audit アカウントで集約された情報に対するアラーム用 | + +--- + +## CloudShell によるデプロイメント + +CloudShell を使い、マネジメントコンソールからこのテンプレートをデプロイすることが可能です。 +ただし ClouShell は 120 日間使用しないとセットアップした環境のデータを削除することに注意してください。 + +see: [https://docs.aws.amazon.com/cloudshell/latest/userguide/limits.html] + +### 1. CloudShell を起動する + +- AWS マネジメントコンソールの [>_] アイコンをクリックして CloudShell を起動する (画面右上のアカウント名の隣) + ![OpenConsole](doc/images/CloudShell-OpenConsole.png) + +### 2. CDK の実行環境をセットアップする + +See: [https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/getting_started.html] + +- npm をアップデートする + +```sh +sudo npm -g install npm +``` + +### 3. CDK コードをアップロードする + +1. デプロイ対象の CDK コードをダウンロードし、zip 等でアーカイブする。 +2. CloudShell の画面から [Action]-[Upload File] をクリックし、アーカイブしたファイルをアップロードする + ![UploadFiles](doc/images/CloudShell-UploadFiles.png) + +3. アップロードしたファイルを展開する + +- リモートリポジトリにアクセスできる場合は、CloudShell で git clone して CDK コードを取得することも可能です + +### 4. ビルドとデプロイ + +```sh +cd path/to/source +npm ci +# 全usecaseのbuild +npm run build --workspaces +cd usecases/guest-webapp-sample +npx cdk deploy --all -c environment=dev --profile prof_dev +``` + +--- + +## 依存パッケージの最新化 + +最新の CDK を使用する場合は、依存する NPM パッケージをアップデートする必要があります。アップデートの手順は次の通りです。これは BLEA のトップディレクトリで行います。 + +```sh +# BLEAのトップディレクトリで +npm update --workspaces +``` + +> NOTE +> +> ここで依存パッケージのバージョン不整合が発生した場合、適宜 package.json を修正します。例えば、`jest` はこのプロジェクトのテストツールとして使用されているため、 package.json に `devDependencies` として記載されています。`aws-cdk` も同様に `jest` に依存しており、 `ncu -u` によって package.json に記載された `jest` のバージョンが `aws-cdk` が必要とするバージョンと一致しなくなるおそれがあります。 + +--- + +## アプリケーション内で Context にアクセスする仕組み + +cdk.json や cdk.context.json で指定した Context は CDK コード(bin/\*.ts)の中で次のようにアクセスしています。 + +```ts +const envKey = app.node.tryGetContext('environment'); +const valArray = app.node.tryGetContext(envKey); +const environment_name = valArray['envName']; +``` + +Context パラメータを使ったデプロイメントの方法の例。 + +```sh +cdk deploy --all --profile prof_dev -c environment=dev +cdk deploy --all --profile prof_prod -c environment=prod +``` + +- `--app` を指定しない場合は cdk.json の `app` で指定している Application がデプロイされます。 + +- デプロイする際のプロファイル(認証情報)を指定するには `--profile xxxxx` を指定します + +- cdk.json で定義した Context パラメータを指定するには `-c envrionment=xxxx` を指定します。 +- profile で指定する認証情報のアカウントおよびリージョンと、 Context の env で指定する、アカウントおよびリージョンは一致している必要があります。これによって誤ったアカウントへデプロイすることを防ぐほか、どのアカウントにどの context でデプロイしたのかを記録しておくことにもなります。できるだけ context には`env`を指定することをお勧めします。 +- 開発環境のように開発者ごとに利用するアカウントが違う場合は、context で`env`を指定しない方法があります。`env`が設定されていない場合は、profile で指定する認証情報のアカウントおよびリージョンにデプロイされます。 + +- See: [https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/context.html] +- See: [https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/get_context_var.html] + +--- + +## 通常の開発の流れ + +一度デプロイしたあと、 CDK コードを編集してビルド、デプロイする流れは次のようになります。 + +### 1. ユースケースディレクトリに移動する + +> ```sh +> cd usecases/guest-webapp-sample +> ``` + +### 2. 手元の環境をクリーンナップする + +> ```sh +> npm run clean +> ``` + +### 3. CDK コードを編集する + +任意のエディタで CDK コードを編集します。(Visutal Studio Code を推奨します) + +### 4. 必要なら追加パッケージをインストールする + +CDK コードで追加のパッケージが必要になった場合は、以下のようにインストールします。ここでは `@aws-cdk/aws-kms` をインストールしています。 + +> ```sh +> # BLEAのルートディレクトリで実行 +> npm i -P @aws-cdk/aws-kms --workspace usecases/guest-webapp-sample +> ``` + +### 5. ビルド&テストする + +> ```sh +> # linting +> npm run lint +> # formatting +> npm run format +> # build +> npm run build +> # snapshot test +> npm run test +> ``` + +> NOTE: +> +> 全てのユースケースをビルドするには workspaces を使用して次のように実行します。 +> +> ```sh +> # BLEAのルートディレクトリで実行 +> npm ci +> npm run lint +> npm run format +> npm run clean --workspaces +> npm run build --workspaces +> npm run test --workspaces +> ``` +> +> 個別のユースケースを workspaces を使用してビルドするには次のように実行します。workspaces と workspace の違いに注意してください。 +> +> ```sh +> # BLEAのルートディレクトリで実行 +> npm run build --workspace usecases/base-standalone +> ``` + +### 6. Synth/Diff する + +CDK Asset を作成し、現在の環境との差分を確認します。 + +> ```sh +> npx cdk synth --all --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --profile prof_dev --require-approval never --no-rollback +> npx cdk diff --all --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --profile prof_dev --require-approval never --no-rollback +> ``` + +### 7. Deploy する + +デプロイします。ここでは承認をスキップし、ロールバックさせないオプションを追加しています。 + +> ```sh +> npx cdk deploy --all --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=dev --profile prof_dev --require-approval never --no-rollback +> ``` + +--- + +## セキュリティ指摘事項の修復 + +ガバナンスベースをデプロイした後でも、Security Hub のベンチマークレポートで 重要度が CRITICAL あるいは HIGH のレベルでレポートされる検出項目があります。これらに対しては手動で対応が必要です。 + +> オプション: Security Hub の 検出項目を無効化することもできます(推奨しません。無効化する場合はセキュリティリスクを十分に評価した上で実施して下さい)。 + +- [https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-enable-disable-controls.html] + +### 1. ルートユーザに対して MFA を有効化する + +ルートユーザに対する MFA の設定は手動で実施する必要があります。ルートユーザとはマネジメントコンソールにログインする際に、E メールアドレスを使ってログインするユーザのことです。 + +MFA に関連する Security Hub コントロール(CRITICAL レベル) + +- [CIS.1.13] Ensure MFA is enabled for the "root" account + - [https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-1.13] +- [CIS.1.14] Ensure hardware MFA is enabled for the "root" account + - [https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-1.14] +- [IAM.6] Hardware MFA should be enabled for the root user + - [https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-iam-6] + +#### 修復方法 + +##### 1. Organizations メンバアカウントのルートユーザにアクセスする + +- [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html#orgs_manage_accounts_access-as-root] + +##### 2. ルートユーザに対してハードウェア MFA を有効化する + +- [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_physical.html#enable-hw-mfa-for-root] + +### 2. EC2 のメタデータアクセスに IMDSv2 を使う + +EC2 インスタンスのメタデータアクセスには IDMSv2 のみを使用することが推奨されています。修復については以下のドキュメントを参照してください。 + +- [EC2.8] EC2 instances should use IMDSv2 + - [https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-ec2-8] + +--- diff --git a/doc/Standalone2ControlTower.md b/doc/Standalone2ControlTower.md index e15d007cf..945925bf7 100644 --- a/doc/Standalone2ControlTower.md +++ b/doc/Standalone2ControlTower.md @@ -19,7 +19,7 @@ On Management account, You need to have setup Baseline Environment on AWS with M 2. Enabled trusted access using the AWS CloudFormation Stacksets console - Refer: https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html + Refer: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html 3. Enabled Security Hub and automatically enabling new organization accounts diff --git a/doc/Standalone2ControlTower_ja.md b/doc/Standalone2ControlTower_ja.md index 3d3e0aaf8..e9252a6ac 100644 --- a/doc/Standalone2ControlTower_ja.md +++ b/doc/Standalone2ControlTower_ja.md @@ -1,6 +1,6 @@ -# Baseline Environment on AWS Standalone版管理下のアカウントを マルチアカウント版管理下へ移行する +# Baseline Environment on AWS Standalone 版管理下のアカウントを マルチアカウント版管理下へ移行する -[In English](Standalone2ControlTower.md) | [READMEに戻る](../README_ja.md) +[In English](Standalone2ControlTower.md) | [README に戻る](../README_ja.md) Baseline Environment on AWS の Standalone 版でセットアップしたアカウントを、マルチアカウント版(Control Tower)管理下へ移行することができます。 この手順を通して、Standalone 版でセットアップしたアカウントの Guest Base および Guest System は変更しませんが、Control Tower 管理下に入ることで Organizations Service Control Policy の影響を受ける点に注意して、十分なテストの上で移行を行なってください。 @@ -17,7 +17,7 @@ Baseline Environment on AWS の Standalone 版でセットアップしたアカ 2. AWS CloudFormation Stacksets で 信頼されたアクセスが有効化されている - 参照: https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html + 参照: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html 3. AWS Security Hub で 新しい組織アカウントが自動有効化されている diff --git a/doc/images/BLEA-ArchMultiAccount.png b/doc/images/BLEA-ArchMultiAccount.png index 38f6122f2..8ca9b7773 100644 Binary files a/doc/images/BLEA-ArchMultiAccount.png and b/doc/images/BLEA-ArchMultiAccount.png differ diff --git a/doc/images/BLEA-ArchSingleAccount.png b/doc/images/BLEA-ArchSingleAccount.png index 65ccc1c23..907e69117 100644 Binary files a/doc/images/BLEA-ArchSingleAccount.png and b/doc/images/BLEA-ArchSingleAccount.png differ diff --git a/doc/images/BLEA-GovOverviewMultiAccount.png b/doc/images/BLEA-GovOverviewMultiAccount.png index 4a2c6b61b..8dacc2207 100644 Binary files a/doc/images/BLEA-GovOverviewMultiAccount.png and b/doc/images/BLEA-GovOverviewMultiAccount.png differ diff --git a/doc/images/BLEA-GovOverviewSingleAccount.png b/doc/images/BLEA-GovOverviewSingleAccount.png index 9262c323f..4c8e2e194 100644 Binary files a/doc/images/BLEA-GovOverviewSingleAccount.png and b/doc/images/BLEA-GovOverviewSingleAccount.png differ diff --git a/doc/images/BLEA-OpsPatterns.png b/doc/images/BLEA-OpsPatterns.png index a526ebae7..665e17fde 100644 Binary files a/doc/images/BLEA-OpsPatterns.png and b/doc/images/BLEA-OpsPatterns.png differ diff --git a/doc/images/BLEA-StackDependency.png b/doc/images/BLEA-StackDependency.png index ee3af1428..da7d36cc6 100644 Binary files a/doc/images/BLEA-StackDependency.png and b/doc/images/BLEA-StackDependency.png differ diff --git a/doc/images/VSCode-Recommended-Extensions.jpg b/doc/images/VSCode-Recommended-Extensions.jpg new file mode 100644 index 000000000..52f1984ef Binary files /dev/null and b/doc/images/VSCode-Recommended-Extensions.jpg differ diff --git a/lib/blea-ecsapp-stack.ts b/lib/blea-ecsapp-stack.ts deleted file mode 100644 index 0acc8577b..000000000 --- a/lib/blea-ecsapp-stack.ts +++ /dev/null @@ -1,406 +0,0 @@ -import * as cdk from '@aws-cdk/core'; -import * as ec2 from '@aws-cdk/aws-ec2'; -import * as elbv2 from '@aws-cdk/aws-elasticloadbalancingv2'; -import * as s3 from '@aws-cdk/aws-s3'; -import * as iam from '@aws-cdk/aws-iam'; -import { Duration, RemovalPolicy } from '@aws-cdk/core'; -import * as kms from '@aws-cdk/aws-kms'; -import * as ecs_patterns from '@aws-cdk/aws-ecs-patterns'; -import * as ecs from '@aws-cdk/aws-ecs'; -import * as wafv2 from '@aws-cdk/aws-wafv2'; -import * as cloudfront from '@aws-cdk/aws-cloudfront'; -import * as origins from '@aws-cdk/aws-cloudfront-origins'; -import * as sns from '@aws-cdk/aws-sns'; -import * as cw from '@aws-cdk/aws-cloudwatch'; -import * as cw_actions from '@aws-cdk/aws-cloudwatch-actions'; -import * as ecr from '@aws-cdk/aws-ecr'; -import * as ri from '@aws-cdk/region-info'; - -export interface BLEAECSAppStackProps extends cdk.StackProps { - myVpc: ec2.Vpc; - logBucket: s3.Bucket; - appKey: kms.IKey; - repository: ecr.Repository; - imageTag: string; - alarmTopic: sns.Topic; -} - -export class BLEAECSAppStack extends cdk.Stack { - public readonly appServerSecurityGroup: ec2.SecurityGroup; - - constructor(scope: cdk.Construct, id: string, props: BLEAECSAppStackProps) { - super(scope, id, props); - - // CORS Allowed Domain - const allowdOrigins = ['https://example.com', 'https://www.example.com']; - - // --- Security Groups --- - - //Security Group of ALB for App - const securityGroupForAlb = new ec2.SecurityGroup(this, 'SgAlb', { - vpc: props.myVpc, - allowAllOutbound: false, - }); - securityGroupForAlb.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(80)); - securityGroupForAlb.addEgressRule(ec2.Peer.anyIpv4(), ec2.Port.allTcp()); - - // ------------ S3 Bucket for Web Contents --------------- - - const webContentBucket = new s3.Bucket(this, 'WebBucket', { - accessControl: s3.BucketAccessControl.PRIVATE, - lifecycleRules: [ - { - enabled: true, - expiration: Duration.days(2555), - transitions: [ - { - storageClass: s3.StorageClass.GLACIER, - transitionAfter: Duration.days(90), - }, - ], - }, - ], - removalPolicy: RemovalPolicy.RETAIN, - versioned: false, - // See Also: Encryption on CloudFront + S3 - // https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-rest-api-cloudfront-error-403/ - encryption: s3.BucketEncryption.S3_MANAGED, - cors: [ - { - allowedOrigins: allowdOrigins, - allowedMethods: [s3.HttpMethods.GET, s3.HttpMethods.HEAD], - }, - ], - blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, - }); - - // Prevent access without SSL - webContentBucket.addToResourcePolicy( - new iam.PolicyStatement({ - effect: iam.Effect.DENY, - principals: [new iam.AnyPrincipal()], - actions: ['s3:*'], - resources: [webContentBucket.bucketArn + '/*'], - conditions: { - Bool: { - 'aws:SecureTransport': 'false', - }, - }, - }), - ); - - // CloudFront Distrubution - // with CORS - new cloudfront.Distribution(this, 'Distribution', { - defaultBehavior: { - origin: new origins.S3Origin(webContentBucket), - originRequestPolicy: cloudfront.OriginRequestPolicy.CORS_S3_ORIGIN, - }, - defaultRootObject: 'index.html', // Need for SecurityHub Findings CloudFront.1 compliant - }); - - // ------------ Application LoadBalancer --------------- - - // S3 Bucket for ALB Logging (Needs SSE-S3) - // https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions - const albLogBucket = new s3.Bucket(this, 'alb-log-bucket', { - accessControl: s3.BucketAccessControl.PRIVATE, - encryption: s3.BucketEncryption.S3_MANAGED, - blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, - removalPolicy: cdk.RemovalPolicy.RETAIN, - }); - - // ALB for App Server - const lbForApp = new elbv2.ApplicationLoadBalancer(this, 'Alb', { - vpc: props.myVpc, - internetFacing: true, - securityGroup: securityGroupForAlb, - vpcSubnets: props.myVpc.selectSubnets({ - subnetGroupName: 'Public', - }), - }); - - // Enable ALB Access Logging - lbForApp.setAttribute('access_logs.s3.enabled', 'true'); - lbForApp.setAttribute('access_logs.s3.bucket', albLogBucket.bucketName); - - const regionInfo = ri.RegionInfo.get(this.region); - // Permissions for Access Logging - // Why don't use bForApp.logAccessLogs(albLogBucket); ? - // Because logAccessLogs add wider permission to other account (PutObject*). S3 will become Noncompliant on Security Hub [S3.6] - // See: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-s3-6 - // See: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions - albLogBucket.addToResourcePolicy( - new iam.PolicyStatement({ - effect: iam.Effect.ALLOW, - actions: ['s3:PutObject'], - principals: [new iam.AccountPrincipal(regionInfo.elbv2Account)], // ALB access logging needs S3 put permission from ALB service account for the region - resources: [albLogBucket.arnForObjects(`AWSLogs/${cdk.Stack.of(this).account}/*`)], - }), - ); - albLogBucket.addToResourcePolicy( - new iam.PolicyStatement({ - effect: iam.Effect.ALLOW, - actions: ['s3:PutObject'], - principals: [new iam.ServicePrincipal('delivery.logs.amazonaws.com')], - resources: [albLogBucket.arnForObjects(`AWSLogs/${cdk.Stack.of(this).account}/*`)], - conditions: { - StringEquals: { - 's3:x-amz-acl': 'bucket-owner-full-control', - }, - }, - }), - ); - albLogBucket.addToResourcePolicy( - new iam.PolicyStatement({ - effect: iam.Effect.ALLOW, - actions: ['s3:GetBucketAcl'], - principals: [new iam.ServicePrincipal('delivery.logs.amazonaws.com')], - resources: [albLogBucket.bucketArn], - }), - ); - - // --------------------- Fargate Cluster ---------------------------- - - // Roles - const executionRole = new iam.Role(this, 'EcsTaskExecutionRole', { - assumedBy: new iam.ServicePrincipal('ecs-tasks.amazonaws.com'), - managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonECSTaskExecutionRolePolicy')], - }); - - const serviceTaskRole = new iam.Role(this, 'EcsServiceTaskRole', { - assumedBy: new iam.ServicePrincipal('ecs-tasks.amazonaws.com'), - }); - - // SecurityGroups - const securityGroupForFargate = new ec2.SecurityGroup(this, 'SgFargate', { - vpc: props.myVpc, - allowAllOutbound: false, - }); - this.appServerSecurityGroup = securityGroupForFargate; - - // Cluster - const cluster = new ecs.Cluster(this, 'Cluster', { - vpc: props.myVpc, - containerInsights: true, - }); - - // Task definition & Service - const albFargate = new ecs_patterns.ApplicationLoadBalancedFargateService(this, 'EcsApp', { - cluster: cluster, - loadBalancer: lbForApp, - taskSubnets: props.myVpc.selectSubnets({ - subnetGroupName: 'Private', // For public DockerHub - // subnetGroupName: 'Protected' // For your ECR. Neet to use PrivateLinke for ECR - }), - securityGroups: [this.appServerSecurityGroup], - taskImageOptions: { - executionRole: executionRole, - taskRole: serviceTaskRole, - - // SAMPLE: if you want to use your ECR repository, you can use like this. - image: ecs.ContainerImage.fromEcrRepository(props.repository, props.imageTag), - - // SAMPLE: if you want to use DockerHub, you can use like this. - // image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample"), - }, - }); - - // How to set attibute to TargetGroup - example) Modify deregistration delay - albFargate.targetGroup.setAttribute('deregistration_delay.timeout_seconds', '30'); - - // ----------------------- Alarms for ECS ----------------------------- - albFargate.service - .metricCpuUtilization({ - period: cdk.Duration.minutes(1), - statistic: cw.Statistic.AVERAGE, - }) - .createAlarm(this, 'FargateCpuUtil', { - evaluationPeriods: 3, - datapointsToAlarm: 3, - threshold: 80, - comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, - actionsEnabled: true, - }) - .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); - - // RunningTaskCount - CloudWatch Container Insights metric (Custom metric) - // This is a sample of full set configuration for Metric and Alarm - // See: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarm-evaluation - new cw.Metric({ - metricName: 'RunningTaskCount', - namespace: 'ECS/ContainerInsights', - dimensions: { - ClusterName: cluster.clusterName, - ServiceName: albFargate.service.serviceName, - }, - period: cdk.Duration.minutes(1), - statistic: cw.Statistic.AVERAGE, - }) - .createAlarm(this, 'RunningTaskCount', { - evaluationPeriods: 3, - datapointsToAlarm: 2, - threshold: 1, - comparisonOperator: cw.ComparisonOperator.LESS_THAN_THRESHOLD, - actionsEnabled: true, - }) - .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); - - // ----------------------- Alarms for ALB ----------------------------- - - // Alarm for ALB - ResponseTime - lbForApp - .metricTargetResponseTime({ - period: cdk.Duration.minutes(1), - statistic: cw.Statistic.AVERAGE, - }) - .createAlarm(this, 'AlbResponseTime', { - evaluationPeriods: 3, - threshold: 100, - comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, - actionsEnabled: true, - }) - .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); - - // Alarm for ALB - HTTP 4XX Count - lbForApp - .metricHttpCodeElb(elbv2.HttpCodeElb.ELB_4XX_COUNT, { - period: cdk.Duration.minutes(1), - statistic: cw.Statistic.SUM, - }) - .createAlarm(this, 'AlbHttp4xx', { - evaluationPeriods: 3, - threshold: 10, - comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, - actionsEnabled: true, - }) - .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); - - // Alarm for ALB - HTTP 5XX Count - lbForApp - .metricHttpCodeElb(elbv2.HttpCodeElb.ELB_5XX_COUNT, { - period: cdk.Duration.minutes(1), - statistic: cw.Statistic.SUM, - }) - .createAlarm(this, 'AlbHttp5xx', { - evaluationPeriods: 3, - threshold: 10, - comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, - actionsEnabled: true, - }) - .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); - - // Alarm for ALB TargetGroup - HealthyHostCount - albFargate.targetGroup - .metricHealthyHostCount({ - period: cdk.Duration.minutes(1), - statistic: cw.Statistic.AVERAGE, - }) - .createAlarm(this, 'AlbTgHealthyHostCount', { - evaluationPeriods: 3, - threshold: 1, - comparisonOperator: cw.ComparisonOperator.LESS_THAN_THRESHOLD, - actionsEnabled: true, - }) - .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); - - // WAFv2 for ALB - const webAcl = new wafv2.CfnWebACL(this, 'WebAcl', { - defaultAction: { allow: {} }, - name: 'BLEAWebAcl', - scope: 'REGIONAL', - visibilityConfig: { - cloudWatchMetricsEnabled: true, - metricName: 'BLEAWebAcl', - sampledRequestsEnabled: true, - }, - rules: [ - { - priority: 1, - overrideAction: { count: {} }, - visibilityConfig: { - sampledRequestsEnabled: true, - cloudWatchMetricsEnabled: true, - metricName: 'AWS-AWSManagedRulesCommonRuleSet', - }, - name: 'AWSManagedRulesCommonRuleSet', - statement: { - managedRuleGroupStatement: { - vendorName: 'AWS', - name: 'AWSManagedRulesCommonRuleSet', - }, - }, - }, - { - priority: 2, - overrideAction: { count: {} }, - visibilityConfig: { - sampledRequestsEnabled: true, - cloudWatchMetricsEnabled: true, - metricName: 'AWS-AWSManagedRulesKnownBadInputsRuleSet', - }, - name: 'AWSManagedRulesKnownBadInputsRuleSet', - statement: { - managedRuleGroupStatement: { - vendorName: 'AWS', - name: 'AWSManagedRulesKnownBadInputsRuleSet', - }, - }, - }, - { - priority: 3, - overrideAction: { count: {} }, - visibilityConfig: { - sampledRequestsEnabled: true, - cloudWatchMetricsEnabled: true, - metricName: 'AWS-AWSManagedRulesAmazonIpReputationList', - }, - name: 'AWSManagedRulesAmazonIpReputationList', - statement: { - managedRuleGroupStatement: { - vendorName: 'AWS', - name: 'AWSManagedRulesAmazonIpReputationList', - }, - }, - }, - { - priority: 4, - overrideAction: { count: {} }, - visibilityConfig: { - sampledRequestsEnabled: true, - cloudWatchMetricsEnabled: true, - metricName: 'AWS-AWSManagedRulesLinuxRuleSet', - }, - name: 'AWSManagedRulesLinuxRuleSet', - statement: { - managedRuleGroupStatement: { - vendorName: 'AWS', - name: 'AWSManagedRulesLinuxRuleSet', - }, - }, - }, - { - priority: 5, - overrideAction: { count: {} }, - visibilityConfig: { - sampledRequestsEnabled: true, - cloudWatchMetricsEnabled: true, - metricName: 'AWS-AWSManagedRulesSQLiRuleSet', - }, - name: 'AWSManagedRulesSQLiRuleSet', - statement: { - managedRuleGroupStatement: { - vendorName: 'AWS', - name: 'AWSManagedRulesSQLiRuleSet', - }, - }, - }, - ], - }); - - new wafv2.CfnWebACLAssociation(this, 'BsWebAclAssociation', { - resourceArn: lbForApp.loadBalancerArn, - webAclArn: webAcl.attrArn, - }); - } -} diff --git a/lib/blea-flowlog-stack.ts b/lib/blea-flowlog-stack.ts deleted file mode 100644 index 06f5235ea..000000000 --- a/lib/blea-flowlog-stack.ts +++ /dev/null @@ -1,34 +0,0 @@ -import * as cdk from '@aws-cdk/core'; -import * as s3 from '@aws-cdk/aws-s3'; -import * as kms from '@aws-cdk/aws-kms'; -import * as iam from '@aws-cdk/aws-iam'; - -interface BLEAFlowLogStackProps extends cdk.StackProps { - kmsKey: kms.IKey; -} - -export class BLEAFlowLogStack extends cdk.Stack { - public readonly logBucket: s3.Bucket; - - constructor(scope: cdk.Construct, id: string, props: BLEAFlowLogStackProps) { - super(scope, id, props); - - //S3 bucket for VPC Flow log - const flowLogBucket = new s3.Bucket(this, 'FlowLogBucket', { - accessControl: s3.BucketAccessControl.PRIVATE, - encryptionKey: props.kmsKey, - encryption: s3.BucketEncryption.KMS, - blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, - removalPolicy: cdk.RemovalPolicy.RETAIN, - }); - this.logBucket = flowLogBucket; - - props.kmsKey.addToResourcePolicy( - new iam.PolicyStatement({ - actions: ['kms:Encrypt*', 'kms:Decrypt*', 'kms:ReEncrypt*', 'kms:GenerateDataKey*', 'kms:Describe*'], - principals: [new iam.ServicePrincipal('delivery.logs.amazonaws.com')], - resources: ['*'], - }), - ); - } -} diff --git a/lib/blea-generallog-stack.ts b/lib/blea-generallog-stack.ts deleted file mode 100644 index 40aa87755..000000000 --- a/lib/blea-generallog-stack.ts +++ /dev/null @@ -1,34 +0,0 @@ -import * as cdk from '@aws-cdk/core'; -import * as s3 from '@aws-cdk/aws-s3'; -import * as kms from '@aws-cdk/aws-kms'; -import * as iam from '@aws-cdk/aws-iam'; - -interface BLEAGeneralLogStackProps extends cdk.StackProps { - kmsKey: kms.IKey; -} - -export class BLEAGeneralLogStack extends cdk.Stack { - public readonly logBucket: s3.Bucket; - - constructor(scope: cdk.Construct, id: string, props: BLEAGeneralLogStackProps) { - super(scope, id, props); - - //S3 bucket for Application Logging - const LogBucket = new s3.Bucket(this, 'GeneralLogBucket', { - accessControl: s3.BucketAccessControl.PRIVATE, - encryptionKey: props.kmsKey, - encryption: s3.BucketEncryption.KMS, - blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, - removalPolicy: cdk.RemovalPolicy.RETAIN, - }); - this.logBucket = LogBucket; - - props.kmsKey.addToResourcePolicy( - new iam.PolicyStatement({ - actions: ['kms:Encrypt*', 'kms:Decrypt*', 'kms:ReEncrypt*', 'kms:GenerateDataKey*', 'kms:Describe*'], - principals: [new iam.ServicePrincipal('delivery.logs.amazonaws.com')], - resources: ['*'], - }), - ); - } -} diff --git a/package-lock.json b/package-lock.json index 8c9d4e6fc..b240fc35a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1952 +1,14544 @@ { "name": "baseline-environment-on-aws", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@aws-cdk/alexa-ask": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/alexa-ask/-/alexa-ask-1.107.0.tgz", - "integrity": "sha512-uI9Al0W4Ukwc2L0w+/8+hgIDVmh91J30tLjvpHCYyk1LmYb94utDpp6NKYgnVOfX5M0FMKUbAc2QcIbpzxCCDQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "packages": { + "": { + "name": "baseline-environment-on-aws", + "version": "1.0.0", + "license": "MIT-0", + "workspaces": [ + "usecases/*", + "tools/*" + ], + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "lint-staged": "^11.2.3", + "prettier": "^2.4.1", + "simple-git-hooks": "^2.6.1", + "typescript": "~4.4.4" + }, + "engines": { + "node": ">=14", + "npm": ">=7" + } + }, + "node_modules/@aws-cdk/alexa-ask": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/alexa-ask/-/alexa-ask-1.129.0.tgz", + "integrity": "sha512-Gws+afURLMNhdvaDSsz2UsVJ+KmAYqLO2G7SRMMW//s0qWC7JPfU2E0MvHcpLjxXb2bOtM5+c+4rz0+uvh6TFg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/assert": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.107.0.tgz", - "integrity": "sha512-tV+Nbvb3DOvZpgrLEYFoG4lsMk2zddtPSGDVdWN4A5xaIhYFcnh27+l2//2IuBlV9RSmeLAYPZtJV6Zn7nLegg==", - "dev": true, - "requires": { - "@aws-cdk/cloudformation-diff": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + "node_modules/@aws-cdk/assert": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.129.0.tgz", + "integrity": "sha512-d3IPScg+MnXfiDHF44mkWj/hWt0m4WUbcQrUKi5SBFKcnKkrZk2QiLuowOtwre/zhcAX0bCQYfuZI+yS0yVNHQ==", + "dependencies": { + "@aws-cdk/cloudformation-diff": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69", + "jest": ">=26.6.3" } }, - "@aws-cdk/assets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.107.0.tgz", - "integrity": "sha512-YIN57vqtfXwrOBUvMmIi5r9rEOt2JYvf+5BIbNG3ilMvmFDGl66buAFtAJjdEY95uJl0tPqJqC99VOGHGsY/iQ==", - "requires": { - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + "node_modules/@aws-cdk/assets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.129.0.tgz", + "integrity": "sha512-4WwTTTLl/phl69HBcP1oOVOLEn9oR3Tc3E0V8aabsjERaVF47CidnZZWcRPnxC40XJVc8CucKLlALsTPnZecFA==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-accessanalyzer": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-accessanalyzer/-/aws-accessanalyzer-1.107.0.tgz", - "integrity": "sha512-P0TQTgnmTl45iWNV+NFYFoKNbhmLT/oyDxUsfMzV7puVHxYH8+Yks4Hd+lPmJcs8i6+u+1BCYLMf8EYf1iGJzw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-accessanalyzer": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-accessanalyzer/-/aws-accessanalyzer-1.129.0.tgz", + "integrity": "sha512-1BvPrxrEgGXHobyC5Pa/84VcMYSqLfG0DfKG0QNqJ/2yyvIH7t3BawXAGlV9jAyabwc4x0tkdu/Wnlnld/FDUw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-acmpca": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-acmpca/-/aws-acmpca-1.107.0.tgz", - "integrity": "sha512-7h7z5lp71OvOk9HyOiphx8ni56pOz7OPc9MfvZCyITKgyLg4SE+hE+ZryCrMi2MwsYHtSofK07wU3pBWTUvuoA==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-acmpca": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-acmpca/-/aws-acmpca-1.129.0.tgz", + "integrity": "sha512-59n+tFV119Sqf6JJyGK6F14yeqk5/MvK1mBs/15wk5x4ykxTSk4wXzjE/hpi/ZE2OUnrFFeIsLbfMzHBa8NIug==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-amazonmq": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-amazonmq/-/aws-amazonmq-1.107.0.tgz", - "integrity": "sha512-T3D+L3fYXUvASQMo76eP2uJBahUyLULYKXgVL7XG65WUY0aU0RR/HFJ3WDxjCyFgqHIfuSWkPHWgUaBK3n1dFg==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-amazonmq": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-amazonmq/-/aws-amazonmq-1.129.0.tgz", + "integrity": "sha512-SX79dt8nHgR0zdP1AbmkJ5zSQdRrb2e2+pJnP4YYW38npza03Hye06wjXy7wcXqQMdD7CrvJBQnZAudSHNHQyQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-amplify": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-amplify/-/aws-amplify-1.107.0.tgz", - "integrity": "sha512-/XaOsAjQmPnNTsWPObRebG2iHG/7WcIwYRWSiZPH6/pCUp62qd9FP7P4JfWnWWDJAtDyADEQYIVmB85ahIO8+g==", - "requires": { - "@aws-cdk/aws-codebuild": "1.107.0", - "@aws-cdk/aws-codecommit": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-amplify": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-amplify/-/aws-amplify-1.129.0.tgz", + "integrity": "sha512-I5Xn5VjG86ikZZ2q06vutZKglzlu+blwOkviGuETKQFY74m7SSV+O29H0u7oWXCwwaAF6atBLh7MXTHGdHe6nQ==", + "dependencies": { + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-apigateway": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigateway/-/aws-apigateway-1.107.0.tgz", - "integrity": "sha512-qgVKLwRMkuDgzB6mkqIXjvGfhlgam79JTL0K9XsEpL2K/XEjDSQhyICenmPh0TLjFN/aB9X2qYRaH7BIU3u9wg==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-cognito": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + "node_modules/@aws-cdk/aws-apigateway": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigateway/-/aws-apigateway-1.129.0.tgz", + "integrity": "sha512-8gYFLo1TQscZ6S9Puh9UcqZfJ24LDvSEYbmiGRFQGnbYIh/d1Jvnj1kCWwHveIB6u+vr5l4XLByAsl9h+snziA==", + "dependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-apigatewayv2": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.107.0.tgz", - "integrity": "sha512-5HJ/o25yRFaGxmHJEGR9RyZhSrK4V5r7H6QLlCM6oBip1epiufu9bqOGQFqi4SJJ4RhS4vj0GtZL6qiW1DRYJQ==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-apigatewayv2": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.129.0.tgz", + "integrity": "sha512-mticPe0PMnmMg3VeortnlCx++qX0HQsiiewqlfctJZzr8QFePu7cWaeIVqceA7xnE/crBs21bi1wR4Oew5GZtg==", + "dependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-appconfig": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appconfig/-/aws-appconfig-1.107.0.tgz", - "integrity": "sha512-IXzyDjKrEUdGQ9W0nH8A4RoRLz+VdxYL+MzHPJkZrXXGfSfpxyL9NyDmgQUL3Z7Ih8fukxXDGmmoUO+LMnFHig==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-appconfig": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appconfig/-/aws-appconfig-1.129.0.tgz", + "integrity": "sha512-Bqr7wNoDNeFD2WAwsxyfJYuBofzCcHbvdCZQYV59NqDm1P1Tl3YIhD7gttJh8+i0+TmqEGmZJSCors0hjt36+Q==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-appflow": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appflow/-/aws-appflow-1.107.0.tgz", - "integrity": "sha512-h7QTOOcpoZ+K/BkGhNGEzVcZNEEd8+Cfbqy+oxYh0mI/vrpFIXNpJ/KnUMMDjuM4x6DnEoguxKbjjBojlUkvlg==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-appflow": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appflow/-/aws-appflow-1.129.0.tgz", + "integrity": "sha512-VBjGgco8oyMaOhHCs1GhOyTps+eoD7OqGOuXUg8cyl3wvjpxl7nl36/Ko7olbQXI0DhEIxzk4QjDBGVUWman4A==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-appintegrations": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appintegrations/-/aws-appintegrations-1.107.0.tgz", - "integrity": "sha512-60W76B485WouLOTEYM37gvO4xB4lDiMFC8m73rQRD5J2JeJzKEByiIob836qHgyiut6m6o2YAKk2RplfgauwKg==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-appintegrations": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appintegrations/-/aws-appintegrations-1.129.0.tgz", + "integrity": "sha512-tDm0JHTpgTNtv0VBzhlJ8wWCRr2rHg6Bo4mEilWWwW3WTPPSVkvpz26KZ5LeDuyP08CUFYJe46zT/O8oBtKkOw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-applicationautoscaling": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.107.0.tgz", - "integrity": "sha512-Qfp+4AOaTsEDkqGRhX1tiZJ0ywZoaClA02hO+R4qOYor+4kwI+lCpdAhwBP2zuChD+1vMmlMox5dpbgI51CnVA==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-applicationautoscaling": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.129.0.tgz", + "integrity": "sha512-YhKgkDRRtT4aMONUVaL97te/K2MkCvCrGNPQzBYJn9WlX/eshlBrlZ1i4eY5DtrXW3mxwT42ynC6Mqq4EfiC7g==", + "dependencies": { + "@aws-cdk/aws-autoscaling-common": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-autoscaling-common": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-applicationinsights": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationinsights/-/aws-applicationinsights-1.107.0.tgz", - "integrity": "sha512-65+xdYjCa7Qbnfq6gf5eaKVuFhQMTfnHiKyCd1ZAn+NcnIQuo1/es652IJ0c00QFMlFJ2cU+7EgScVf/d/flNw==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-applicationinsights": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationinsights/-/aws-applicationinsights-1.129.0.tgz", + "integrity": "sha512-E8rpcvULvG14jHiw173ygOMXuRGjoKKbvL4I3XAAj5PITmOIDuMHWfk/klIUdREk6I9ZfQTZuew9c0nL8iirwQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-appmesh": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appmesh/-/aws-appmesh-1.107.0.tgz", - "integrity": "sha512-5p1CxDkN0MnKGxNUuXQlPhAMeunZtDJoKFGfgnAgg/4Rl/jEsBVCTg48JWJn538X/irtgzXz9NQ9wdCD2d8hGQ==", - "requires": { - "@aws-cdk/aws-acmpca": "1.107.0", - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-servicediscovery": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-appmesh": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appmesh/-/aws-appmesh-1.129.0.tgz", + "integrity": "sha512-jlNHVKnahEn7dxk1lGy5YMiJIdrnyMU0hcXlp3zGCvnF6Qmlr3VN7jrv346rbALOwNo5MLDiznuBkFP10c0pbw==", + "dependencies": { + "@aws-cdk/aws-acmpca": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-servicediscovery": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-acmpca": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-servicediscovery": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-apprunner": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apprunner/-/aws-apprunner-1.107.0.tgz", - "integrity": "sha512-FjZSiQeBuTxoTsSNBIxVlfABkaOnLu79XA2bvLO3IA9tSNyMItBzEV09IpcebJaz0PQJDYRw562HksnQBs/jJg==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-apprunner": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apprunner/-/aws-apprunner-1.129.0.tgz", + "integrity": "sha512-3q5dOv5ff94dfDE8fvP97Y3u7M2TbsdhPd7eGfXbgdbfLGLmR2MH/xzuknB1+iHFGStupa5iI9dG60tEpRbhOw==", + "dependencies": { + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-appstream": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appstream/-/aws-appstream-1.107.0.tgz", - "integrity": "sha512-jpWIEm4KKLTSeFfDJxWOtyp4MK9svPd8puLdIe5i/EIgBrZepiHqcQNkoDtXU8l7lScIXJueMPau16LfNEuPUw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-appstream": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appstream/-/aws-appstream-1.129.0.tgz", + "integrity": "sha512-bExmyq99oVzMdtP/Yg7WPxkvCrtiLgHHYGtIz906vZubFv/7p82YwdU4MJXsecKcQ7npISd3GIu7i0nqUW3jEw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-appsync": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appsync/-/aws-appsync-1.107.0.tgz", - "integrity": "sha512-R4uJ4Z02Lb/neH4idyXN3zCbSc+Cjg6ZSx+wfMEXL5v8F/mINVDI8b5vByFmZfQQC8PU7zf6x2LSwlKf7P713Q==", - "requires": { - "@aws-cdk/aws-cognito": "1.107.0", - "@aws-cdk/aws-dynamodb": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticsearch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-rds": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-appsync": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appsync/-/aws-appsync-1.129.0.tgz", + "integrity": "sha512-Mkk8+o11dnXcabMHftWDNtdeo/QcTfbLngeuUhuy61bM2JiDJz9kjeGgDf/2hZlJL231vQI6pAP+Uy4gdlxfoA==", + "dependencies": { + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-dynamodb": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticsearch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-rds": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-dynamodb": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticsearch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-rds": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-athena": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-athena/-/aws-athena-1.107.0.tgz", - "integrity": "sha512-IF1OZ/KRbuVBPQ0a4MetI6ljP9S4ZDcSPFpVZa1H7k+Rg0pG/7taRbARA2z/Kh/jRcZt4FCPrp2BGLHmjZaEtQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-aps": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-aps/-/aws-aps-1.129.0.tgz", + "integrity": "sha512-S9xgEEvhjmocKuIbGipFD7dzoO6OsXPBQxBBbaeilnDJl/F4xdm+lgjibtuYKfl1eYZCB1QjvuJ66WSH0bC1GQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" + } + }, + "node_modules/@aws-cdk/aws-athena": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-athena/-/aws-athena-1.129.0.tgz", + "integrity": "sha512-GeZONPtgRIZv7Pqk3xqTJfskz4Xxmqs2bqfN1EPk59pceiyoiuS0P3hV2nVKcuV4HQMSxFvHZIqkW0cTNlAqew==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-auditmanager": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-auditmanager/-/aws-auditmanager-1.107.0.tgz", - "integrity": "sha512-fesN1R1PT5P5qX6MksqbcbWTo/TxCWAT1DKLcFMcRi3TU7OC2EJhSqt8Y9OLIV+87Isb6BqUrAICuyl5iOJtKw==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-auditmanager": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-auditmanager/-/aws-auditmanager-1.129.0.tgz", + "integrity": "sha512-A9EpZTFaBfsPTADkbPCqUcAXkRNmJm6a3ddwtFh2cL+acfABwBF4moa2NqrqmVUQP89rybM78Gz8Vd8+ZbLbQA==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-autoscaling": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.107.0.tgz", - "integrity": "sha512-NmphwpgU7lxTK+8zeN/9XuMnO0T+J8NvTlyH0QcqMbQeuJWFNXwAVwzQmPdmf7Bf/88xTUohP2RgH2MvLCGMBQ==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticloadbalancing": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-autoscaling": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.129.0.tgz", + "integrity": "sha512-JL20xl7AQnhQxbV7tB+x6dZ7LQeNZKJ4rP5CM4aOuBZL0AiTiC1Ca5mCJSXHkn7Ou01Eg0cQOW8ywoISEJTEpw==", + "dependencies": { + "@aws-cdk/aws-autoscaling-common": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-autoscaling-common": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-autoscaling-common": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.107.0.tgz", - "integrity": "sha512-dxAOPIFbzK+R+cJrfNmgsqxE1K9tAlgo9oc9Gruvxxzv1T4EF/aMW7VUGgxIOZkghCkq63QT9xpKSWmlQZdr9w==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-autoscaling-common": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.129.0.tgz", + "integrity": "sha512-KaCkT7j7vzW8UByZouJ3iU2VZul4BBx8PmptM+OeghNB9fZuwPohT5p2ZP9N9PJEA9k1T2JJshUFgjQcclofdQ==", + "dependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-autoscaling-hooktargets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.107.0.tgz", - "integrity": "sha512-nE57d6KUlqJGBHqs+QrRomCI4jmqrLd1klIv5hg1K8jHgB5PFd42pkmQYBMMsSrXY9vacT079/DneG+segrkKg==", - "requires": { - "@aws-cdk/aws-autoscaling": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/aws-sns-subscriptions": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-autoscaling-hooktargets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.129.0.tgz", + "integrity": "sha512-OHfMs0fh320ybdQiv9AFwd/OnMEeG48Jfw+LXkpUOzpPt0UYIIKajYzTk7RDwu7tprd9fxVoptYOpX8jGpeI+g==", + "dependencies": { + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sns-subscriptions": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sns-subscriptions": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-autoscalingplans": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscalingplans/-/aws-autoscalingplans-1.107.0.tgz", - "integrity": "sha512-R7IIrb0BG3cI/7happv2NhghrCXljnHDw1W1eqTbQhXoAiQNA/DWogfKTLBGGl4lfqHBpi/RtsmVNQtdpQPZ7w==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-autoscalingplans": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscalingplans/-/aws-autoscalingplans-1.129.0.tgz", + "integrity": "sha512-DyJvTMp95xBGudlDTr5N7rqYO7PR3ryy9GGpqvYNcBC+ARkETvVD+U+YSmUmwGk3FNZZ/wVJ/3QQZeyCQzVQzg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-backup": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-backup/-/aws-backup-1.107.0.tgz", - "integrity": "sha512-kVpo34rdEm0dJ7pHRPxaxuLOaZZnJOUfEinlEj4UD+LaYuMzI6iVOVAYi9NGhKKD634x1TA98orqRdAmnQN5Nw==", - "requires": { - "@aws-cdk/aws-dynamodb": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-efs": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-rds": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-backup": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-backup/-/aws-backup-1.129.0.tgz", + "integrity": "sha512-fkZmYqi+4WTSCIWmxtRTmuQNBMK9JZDucU9PpaiO1Rw/qO0AfUJzxBYHot0VlVMeRXu/xL9JJdwydoSZ4Ni+VA==", + "dependencies": { + "@aws-cdk/aws-dynamodb": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-rds": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-dynamodb": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-rds": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-batch": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-batch/-/aws-batch-1.107.0.tgz", - "integrity": "sha512-YT4HzR6KP0WI+ALfo/i7agRPIR5Xqu82+CXZRqzQ8+hGqYIAx40ZPykwSNEBlwaI3LUTILp9VtYppYbk3DBwGw==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-ecs": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/aws-ssm": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-batch": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-batch/-/aws-batch-1.129.0.tgz", + "integrity": "sha512-fmhFm1/OCt3CZPOpP8WVBu6vE+ILB8B2p/kaulSXVgAqGyLHn65D1TGtCJ6gC7j7+Z33ks89cHjZJwkNrW1PqA==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-budgets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-budgets/-/aws-budgets-1.107.0.tgz", - "integrity": "sha512-AoLYOUzf9/leh9R0O4+suk00xvCmNPe8H8I5I7of9F903e+VpiN+O/4eLEVTuirWkR7mkVTv49mYKNryY7WFYQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-budgets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-budgets/-/aws-budgets-1.129.0.tgz", + "integrity": "sha512-rB78MClghn8q+5hIkUymU7r+AnP1QLkkjSNxABxpBwRhUdPZIrlCcY2ISS31B+0FrptfcLldTnJFWRbUAYjv7A==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-cassandra": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cassandra/-/aws-cassandra-1.107.0.tgz", - "integrity": "sha512-y/H753MLnPe254nFGT2UbiSYf5L9IPXzteZGQd7//D+PSJ8Y2PZfuzw4RxUQUVNNk2mmg9zYQIDy8S+esX0j9Q==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-cassandra": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cassandra/-/aws-cassandra-1.129.0.tgz", + "integrity": "sha512-DvbxrepVAT3MowIC3+zH8lejLET2FBEXs89bUE71QEaZWOMddqsINFtl/IR5r1ULzspuxjkHmuMGfTwETaQgIQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-ce": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ce/-/aws-ce-1.107.0.tgz", - "integrity": "sha512-4OneTd5Lk4+KcRV+LTs9ekD77+0ysmRxRxzP9ZveMNqNRUMvan7TVidL0WWLrUQxvJ44HgCRU9wBGWOYcFD1uA==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-ce": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ce/-/aws-ce-1.129.0.tgz", + "integrity": "sha512-vhN7zgxHDy2jUEmiE6Vopo1evwzPRI7ToUUGiax7OBplvVooBR5go0xKK4ICkQUe8Bkr2W6jsi2n/IR0GxFHpA==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-certificatemanager": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.107.0.tgz", - "integrity": "sha512-pMeCF4CUOT0Zor7gbZF5NT54Fn50b+bTSXYTRzM9v8nXlIFpo3HJAsIpVJRGNnDdLwwEXXmRzgx7dIE4UVzouw==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-certificatemanager": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.129.0.tgz", + "integrity": "sha512-zEVcXGPlsMHDqblnfxDt1rZT6+Gx0fsUzWFenR8NwsGhEX0r8/dydS9HDjl9jJtqCs73C7RaKcGRH/K6UvV47g==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-chatbot": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-chatbot/-/aws-chatbot-1.107.0.tgz", - "integrity": "sha512-pmh72MnIiXyoAmEAIUc26mZrjzDSiaNCdmpaKWQ0+rrvO3JtBui0Y2s+4oYGKcCRfholIuWVIV2xqu0rBrsVFA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-chatbot": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-chatbot/-/aws-chatbot-1.129.0.tgz", + "integrity": "sha512-bftyJJr02h2fbydXRixVZ+NMSru/wRNLvEp4rhIL0kFRoP1LyOZP3Fuk5bloaMMzTkN8cm2bwx7i1jaBFw7qMg==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-cloud9": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloud9/-/aws-cloud9-1.107.0.tgz", - "integrity": "sha512-DG+Aa7gF+Xoqu2C4TkIUjIbJdQq6u4B5TNcOwUQh1VEkp7YDPyv7f+Cuwixt2Jek7O2yVfao5mlWOkm4zKdzGA==", - "requires": { - "@aws-cdk/aws-codecommit": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-cloud9": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloud9/-/aws-cloud9-1.129.0.tgz", + "integrity": "sha512-qzQyVYyOUvUjkrtnkjrUNmZmiWC/lg5j/UVnRTD9d5XUCrcDQ4HZRCcoBdWyJ9RBg9vR0Xb0nkbPe5uAeGFfZA==", + "dependencies": { + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-cloudformation": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.107.0.tgz", - "integrity": "sha512-n38WuGnt1vxJaKxqwALCZndlHoiO7tKD5tvI3AmEHGYt+IAjLl5cu37qVtqfNKqs9uo4cUXPrIfSMRb3/0d5CQ==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + "node_modules/@aws-cdk/aws-cloudformation": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.129.0.tgz", + "integrity": "sha512-e894qmNaXpflhlmygvb9p5d77FcDuhG7vZosgW8kVF6IvRYAwK1mQ83RhVpbWaaUi5S3HzLR+pJjnCa4zeCJrQ==", + "dependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-cloudfront": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.107.0.tgz", - "integrity": "sha512-92TRtZN46sQt4G8vTx7dPcUaUlLg0bLdnXSFErc2Rt0SybGPFMebu//woW79bGqYbU6Mpy0kerT3Ghk2tyizdA==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-ssm": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-cloudfront": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.129.0.tgz", + "integrity": "sha512-RzIEtCxSY+lKm0csEmJOKU2RVZ7+AvHI9Oo3+55yEmRG9ad7n7NlR/OmSzVRLWFJ5eAiAD9reuBLRGN5L5eVEA==", + "dependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-cloudfront-origins": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront-origins/-/aws-cloudfront-origins-1.107.0.tgz", - "integrity": "sha512-NLqFPPdc35HRXJV+3sybx3UpAhVNpUUJLJ7jgke1ToASxp4F9nl5s+ODfdA2+lq5QOhYj1sgx7N6PBqR0jyiSg==", - "requires": { - "@aws-cdk/aws-cloudfront": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-cloudfront-origins": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront-origins/-/aws-cloudfront-origins-1.129.0.tgz", + "integrity": "sha512-B94RcDO9YhaKbOm5rcJBAExQgk/cW9hWiY/oUTgZhjP10tu6yBZfEkpDsOTtNojVibm/3IDwB8odV9dFyjFFug==", + "dependencies": { + "@aws-cdk/aws-cloudfront": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudfront": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-cloudtrail": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudtrail/-/aws-cloudtrail-1.107.0.tgz", - "integrity": "sha512-0KqHf5+5Ww6m/cK237amZewdxFbAEnK3eTONouwZnwO7LikxBQR1qM7/+09s/mhTxhqgaaBaFZ0OOqGQ5FRM1A==", - "requires": { - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-cloudtrail": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudtrail/-/aws-cloudtrail-1.129.0.tgz", + "integrity": "sha512-e9SnKrxtjB1yLOreLQIGHkt7lR+i7awdxK0U0i8SEHoIW4bbn6vTc38o2XKzP+JBlySIHdvWFs3mnmNzKESjtQ==", + "dependencies": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-cloudwatch": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.107.0.tgz", - "integrity": "sha512-jyq7COuuqwUJS4gMmC7jKlI9+nTOnUgv2t7Ca7QHgPj8sTdZ5YJFfqEvscYXUCmib4PsKO8aZhvB/BD6x7bGWw==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-cloudwatch": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.129.0.tgz", + "integrity": "sha512-b5ZLfkbhMe6U36ESucV/4Eja5YIKShrVrSviDozsVFCK1TXAyEvcLCOqx+Uq3JCryytmAYhg/iAf70M+q5mKDQ==", + "dependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-cloudwatch-actions": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch-actions/-/aws-cloudwatch-actions-1.107.0.tgz", - "integrity": "sha512-rkGWRmsDHlddXaOB903CXwxl8ILx7p2B21zJewVvk/wt9IQ4rbtczrAxFjjgi5491DfsXmQHKcbIJ0/xE6SfsA==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.107.0", - "@aws-cdk/aws-autoscaling": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-cloudwatch-actions": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch-actions/-/aws-cloudwatch-actions-1.129.0.tgz", + "integrity": "sha512-gfgZ1QUW7VTLCaNNUh8Fz0T3rYw0USj8ItOe5McbzpN3bQBHcM4aDGMPVGcYKPLkMm84VEyKtlTslBRW1sN1bg==", + "dependencies": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-codeartifact": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeartifact/-/aws-codeartifact-1.107.0.tgz", - "integrity": "sha512-mZ+lRh5j2omZhP0elHYmET7dX6G+Qbboxes3AnsexZg+pdVvuEwKcaaiD/QWAKkd7PdXtQeDiVViMARErM6T2A==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-codeartifact": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeartifact/-/aws-codeartifact-1.129.0.tgz", + "integrity": "sha512-LBmnNUPYEWktvL7b8b5o3/rveIOPxTc/Uad1DRADnTIUA1JSluBi1HbwV6S/yqZw3RDqqWDby4N5giSx7HqlCA==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-codebuild": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codebuild/-/aws-codebuild-1.107.0.tgz", - "integrity": "sha512-gaMnTRPpTR7fcODgojDP9RH0vGniaz1wPfTK3oPhAVZfuQqcRrUsUa2zZECnik8mF3LFdd1mwuHtFdvzyPZi8Q==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-codecommit": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-ecr-assets": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/region-info": "1.107.0", + "node_modules/@aws-cdk/aws-codebuild": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codebuild/-/aws-codebuild-1.129.0.tgz", + "integrity": "sha512-ACYEmXJ8cyoEtnaNHsincDwT10RkNiVh8P6xnE28lr2eQhJR/vf2cr8GUqxfl1//IqPCj95jdNfS5RW0ncx0Zw==", + "bundleDependencies": [ + "yaml" + ], + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", "constructs": "^3.3.69", "yaml": "1.10.2" }, - "dependencies": { - "yaml": { - "version": "1.10.2", - "bundled": true - } - } - }, - "@aws-cdk/aws-codecommit": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codecommit/-/aws-codecommit-1.107.0.tgz", - "integrity": "sha512-k+KHuJTQ2bJXYmDTLY3V4vRmqzSly9Cf1MgKGFXoYYEOGaOHrMTdiBi3dBnTetOZlgArVI6QIRsRF4MQMmxMfg==", - "requires": { - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/assets": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-codedeploy": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codedeploy/-/aws-codedeploy-1.107.0.tgz", - "integrity": "sha512-oYD31xS/HMcog2tsw7hqt0AOyXCruM4DGdBvKLcXT8IwbLkjjtj/z3LfZk8CeE7tmfpAWUhHWlRFoRF2DyHYDg==", - "requires": { - "@aws-cdk/aws-autoscaling": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticloadbalancing": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-codebuild/node_modules/yaml": { + "version": "1.10.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" } }, - "@aws-cdk/aws-codeguruprofiler": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.107.0.tgz", - "integrity": "sha512-Wi6dTGnoroWJ8nzLucqhLdmE2tMKodaM1n3kmjkDWXkyPiBIp+k0sckrBBTKNXvf/xWwFJzjNH+bUfBxEYTpKg==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-codecommit": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codecommit/-/aws-codecommit-1.129.0.tgz", + "integrity": "sha512-AKF3HccuOKgM69+PZYsOt1dY1mBbHzq79Wn1Bh+Twkjh2iBOkZKf2hdnhT5rS7eCmAHIbSjBHRzkm5LEhaTSaQ==", + "dependencies": { + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-codegurureviewer": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codegurureviewer/-/aws-codegurureviewer-1.107.0.tgz", - "integrity": "sha512-HRn187y/kUAZhzwAdVAQ4ZEDhiJjas29CBDqHb3r3JRQsiSLyarFek9QtpIAJWqxEzoM7RJ8jNB+i2wYJMNSOw==", - "requires": { - "@aws-cdk/core": "1.107.0" - } - }, - "@aws-cdk/aws-codepipeline": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codepipeline/-/aws-codepipeline-1.107.0.tgz", - "integrity": "sha512-wIHpeOmErVsBZPpve1rDclx/e+UpE+CHzpuv9bSveeRmzHl46RhkqzL3zXde/mt99KB3A05Ei7ujKxdJGvXSYw==", - "requires": { - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-codestar": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestar/-/aws-codestar-1.107.0.tgz", - "integrity": "sha512-nkYOTzmXlZNk0bG3KR9mIeSTMqV5t5/WBI21IK+AgaAWJsElvDM0Fi9stfyNdBcDpbNabWRi8glYPDledFI3Jg==", - "requires": { - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-codedeploy": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codedeploy/-/aws-codedeploy-1.129.0.tgz", + "integrity": "sha512-DZ67pvUgselgEJBsst2Mcd9utdDT9hdCs2K+qEpMb/jrmVEMu07U8RkQ7IrCW0S/PkcKl/lcJD64b6p9BIttvA==", + "dependencies": { + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-codestarconnections": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestarconnections/-/aws-codestarconnections-1.107.0.tgz", - "integrity": "sha512-o5LCOPXPZdWQFNWjGOh6LaRqT9OK+IEuix4FyrvHqe6P7PozFTlDvr8KNBwJCFNg2lXVqFUQia/o5ZjtPprNSg==", - "requires": { - "@aws-cdk/core": "1.107.0" - } - }, - "@aws-cdk/aws-codestarnotifications": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestarnotifications/-/aws-codestarnotifications-1.107.0.tgz", - "integrity": "sha512-c3f0+q4M5txKI+emao0n2/otZCXpeWRw2qgss9kPUj1JPdB7th6g1PI/cFzG6oExhdnAHXB1gYD2c1gxhqzgbw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-codeguruprofiler": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.129.0.tgz", + "integrity": "sha512-G8ngfNI3UgmM7YRrbqrsd+mQ3F5w9meclDTOW23oNZlGHNsoPhp/vLcL1iyYrWZh9NLE3eMdJmGlZLgQfA/U9A==", + "dependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-cognito": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.107.0.tgz", - "integrity": "sha512-MSDyvWAn1ey7uIQnwplys11M1Pjz0y/YUJjzkxi2l/4CDnzYB6LDk8vc9VMkMUIoHzaXJf0RFZx1vF8fKM5Gtg==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "constructs": "^3.3.69", - "punycode": "^2.1.1" - }, + "node_modules/@aws-cdk/aws-codegurureviewer": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codegurureviewer/-/aws-codegurureviewer-1.129.0.tgz", + "integrity": "sha512-lbddmw5A4jtDXMPSGwKdVqlRe/Y4SMLkDgZTm90c/VHE+RImDpUNcZ9aQajpa0evzHxGZttIqvWOu1FbfifOJw==", "dependencies": { - "punycode": { - "version": "2.1.1", - "bundled": true - } + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-config": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-config/-/aws-config-1.107.0.tgz", - "integrity": "sha512-aCkBgeuOlVA31y3rQC+/wTF8XGexlDAmUEFSW3kh2NZ3OmozBQF9gpOByVGw3IFWPV1lBelcKl9pqq+yLsDcPA==", - "requires": { - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-codepipeline": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codepipeline/-/aws-codepipeline-1.129.0.tgz", + "integrity": "sha512-l+iKmT1d8VMF1qdJaAFF6f8d/zsj5R44WG6WC7nbVl1ZUNjjJx6Vgi7Wjww8STaUFTWO5w2Hf+Sh3CCrqe5OrQ==", + "dependencies": { + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-customerprofiles": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-customerprofiles/-/aws-customerprofiles-1.107.0.tgz", - "integrity": "sha512-kjX0m5E0VaGe3ExCJ/rDDTG4LOt79eMzYCYtVxBpYlRoygrtuKM7+dyx30Gacl6XF0Dqh+eC1sd4ZilVZKGWEw==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-codepipeline-actions": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codepipeline-actions/-/aws-codepipeline-actions-1.129.0.tgz", + "integrity": "sha512-N7OdOhUN5VvQRdLmRfeXrEsOFSOYHLC2OCjJFue9ZEI34iFtWGm3S1bqH/3V0hdH2zRCLSpJ8Z3zZ+jOTIIL6g==", + "bundleDependencies": [ + "case" + ], + "dependencies": { + "@aws-cdk/aws-cloudformation": "1.129.0", + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-codedeploy": "1.129.0", + "@aws-cdk/aws-codepipeline": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-events-targets": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sns-subscriptions": "1.129.0", + "@aws-cdk/aws-stepfunctions": "1.129.0", + "@aws-cdk/core": "1.129.0", + "case": "1.6.3", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudformation": "1.129.0", + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-codedeploy": "1.129.0", + "@aws-cdk/aws-codepipeline": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-events-targets": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sns-subscriptions": "1.129.0", + "@aws-cdk/aws-stepfunctions": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-databrew": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-databrew/-/aws-databrew-1.107.0.tgz", - "integrity": "sha512-CARaRWpM4Nca/P0/7TiXGwWYf8gwkjMyma1JQXZ99AHcTssbs3P2lxhSv+q6ApCANKl+EDRvRd3twFdaatyiow==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-codepipeline-actions/node_modules/case": { + "version": "1.6.3", + "inBundle": true, + "license": "(MIT OR GPL-3.0-or-later)", + "engines": { + "node": ">= 0.8.0" } }, - "@aws-cdk/aws-datapipeline": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-datapipeline/-/aws-datapipeline-1.107.0.tgz", - "integrity": "sha512-FQOlO9FZD2ZRDru3/VW2DoK4XerU+aJBDoEsq/Jm7DO80xW/8XLP/+ydBHuiRxtSd8d/hRNqtxVV726SAKI6+w==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-codestar": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestar/-/aws-codestar-1.129.0.tgz", + "integrity": "sha512-MK94m8L6RObFhj3KP/6OM88amWJQDcgGP5itE17hIbfxaVc/UrXVUVIphNl3rEZQmXUuZjx9YqweRFi2ZrxNPg==", + "dependencies": { + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-datasync": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-datasync/-/aws-datasync-1.107.0.tgz", - "integrity": "sha512-JmSr1DYdhwxpr/qANeMUDALnLLVSpzfgD+0T/FuY7sZwFQvbzq/3Fk2O8DRh4BjbMEGe1h80sR6cT1L2qcUH/A==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-codestarconnections": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestarconnections/-/aws-codestarconnections-1.129.0.tgz", + "integrity": "sha512-m1BY/Ah/syY73lZHUP0CSZKTMzxeGDZ8R9zteVBZ3BYH6ibEHptSFXKRl6fmcQXQSuxwkEKVQdJlcax8qzxU7Q==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-dax": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dax/-/aws-dax-1.107.0.tgz", - "integrity": "sha512-mdWcf4GaiO4RK2jVYYba2nLiVQ04wCwSqL/BGka1EdI2IrfX0v/Ls18hzKSMxpRMsCx/HdEMZtQ4drCjhdAwiw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-codestarnotifications": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestarnotifications/-/aws-codestarnotifications-1.129.0.tgz", + "integrity": "sha512-D1ZgvPSanMQbQxsu8DMOFJTzDVFTfGcbFhZTm5au6cRGiCGo+WR1zbADn1LaGYNvpGyAUintZvtQTin3asaHVg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-detective": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-detective/-/aws-detective-1.107.0.tgz", - "integrity": "sha512-tdIRKs3d3aQ4nrN+YJdRQ+aAwhbkuLPfCdwUi1l5Y2foRkhaTanInxuJLNFHfLmxFg+kJGKVMhxkbl+ZPJPD8g==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-cognito": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.129.0.tgz", + "integrity": "sha512-oNQaneEIfEM6ZSgV8mEQzEqdVmZCsVeT4ye4q11/lD69oSPy4pwXrQj8D0Yffg4iYJKDgfuJWIYNvO59Lw68mQ==", + "bundleDependencies": [ + "punycode" + ], + "dependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-devopsguru": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-devopsguru/-/aws-devopsguru-1.107.0.tgz", - "integrity": "sha512-wa2NevNQLrJquufkkOlJRphD70/fstumafW++1rzJTkQRAxxug889PbQbIcOVb8FZo9nbuUOuDYgoUw6w7LTMA==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-cognito/node_modules/punycode": { + "version": "2.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "@aws-cdk/aws-directoryservice": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-directoryservice/-/aws-directoryservice-1.107.0.tgz", - "integrity": "sha512-e2T/iGS76VDdzO5ixJHegpBA7D8GHmVNLn5Lb+ZsWD0ZTWjFOnwsT0JNz3peRvWYMzJZhIuyhvOAyagsh8DuhA==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-config": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-config/-/aws-config-1.129.0.tgz", + "integrity": "sha512-UX0CE97xfikc3v7jWUltP9ne8T3MPzbnpe685j6wB8e2Ad5/HepbvKKXXMwcnwUrJqTo7TX/pIEbIamPuZgPcg==", + "dependencies": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-dlm": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dlm/-/aws-dlm-1.107.0.tgz", - "integrity": "sha512-K7dh8KfRWNeU2z+Yl5dOx69BgK10Hlr+uuyAC7xT6PTXM+RCoTACLUfivpAGU5EfCqBf/Uf4wDoB12Tuni+ppA==", - "requires": { - "@aws-cdk/core": "1.107.0", + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-dms": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dms/-/aws-dms-1.107.0.tgz", - "integrity": "sha512-SGjnKmT9twNkEOqQ4JP6MKOQiwiI87PtV5s1XScefPSbx6YMp/McoaLZgLQfYdbSKnW0F0gXidGdnBXkwXEIhw==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-connect": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-connect/-/aws-connect-1.129.0.tgz", + "integrity": "sha512-VXVbd15g0vnDX1QPz2y07XiNFuKnokiOm2Dr5x/hPeuyvM+9cjzBu8fGaf7esQ+YY+MS0i6sS9UCHSBlpw33Dg==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-docdb": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-docdb/-/aws-docdb-1.107.0.tgz", - "integrity": "sha512-97R/FH3KOFqlGQl76My7TjH3MHl1dQYrIRZ13t5pWR6UIVy/m9xdoYsoIk5c8gAaKMcWtH7UWCyjPM+Mibbw6A==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-efs": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-cur": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cur/-/aws-cur-1.129.0.tgz", + "integrity": "sha512-Orl/7Iy5I5/XRD3K4cOwM4auenmP7X7IwPEJwyMVsiTqa9iK/Rq+QOiBnYNy7pGAVpd6ki2GCmtqbTIUomrtmQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-dynamodb": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.107.0.tgz", - "integrity": "sha512-mNVATiKGjXHwtiB8034SBdd03i5josSAg3Ouoeh4arY2OLVciFxpvd/kL5wnBe/BY31QY9Pn6q6WA2+USTJAdw==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-customerprofiles": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-customerprofiles/-/aws-customerprofiles-1.129.0.tgz", + "integrity": "sha512-d+bFkcdK9jbLvR4CDhKMMhxgYoQdMfY22aKggOwGqMNtvMtjtvrnQ6Hfqy470e5onVjMCh2J8i8rN0o4WQblUQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-ec2": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.107.0.tgz", - "integrity": "sha512-9+w6jEJJBD8U4S/OK7T67+OWFMyCCZA5XKZY3QRZjSEWizvf3dNmn2CW16l/tosJqxPFPYTJhGR0e9x7r+EEvA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/aws-ssm": "1.107.0", - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "@aws-cdk/region-info": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-databrew": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-databrew/-/aws-databrew-1.129.0.tgz", + "integrity": "sha512-x2QeeisbMin0zUv/48UuEJYdiJOdFlPLSJmWQsoHiJ+bmPK7aQrXxokc102zruVlvAhXS7+NPia26miw1r4gCw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-ecr": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.107.0.tgz", - "integrity": "sha512-CEalCKxFAIt2r50j0TdoFpOFt2EuV2dzUH6YLUCW8ywLva7RBH1wR/TlnPnqapQZqZM6ouwLQFnRgc88MTLONw==", - "requires": { - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-datapipeline": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-datapipeline/-/aws-datapipeline-1.129.0.tgz", + "integrity": "sha512-RBj5LEBwU+8KTDu2VDPFBZ8mBfHiwkymXUxZddMb7NxdP7BlAzfbntzJbUMQBskY5SOPMa2n+8fve7EVdB+okQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-ecr-assets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.107.0.tgz", - "integrity": "sha512-HFNmW12ow1FzBVdSmA76niV3lxOaowLPoS1LGRcRHTmMECZy6IpLPpY6oLK6UTvJnFWkVWtpyEnN+u6noz0w2A==", - "requires": { - "@aws-cdk/assets": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69", - "minimatch": "^3.0.4" - }, + "node_modules/@aws-cdk/aws-datasync": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-datasync/-/aws-datasync-1.129.0.tgz", + "integrity": "sha512-38azQLhUlI0+ujSRD4/dOz4AUKqp/742fTVPVLYVHYM6C/wN8cssoOjq7TyUMGs+ucHpsnbK2tfYkmT9gfJ1ZQ==", "dependencies": { - "balanced-match": { - "version": "1.0.2", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-ecs": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs/-/aws-ecs-1.107.0.tgz", - "integrity": "sha512-3e4y6K1ByiS3tpwNazJxyaK1WLsL5KZoxwL9ANI+aZG/UYLAU0i713CjSjnK28ms20Pp6vdz3HveOM2Kz7KHWQ==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.107.0", - "@aws-cdk/aws-autoscaling": "1.107.0", - "@aws-cdk/aws-autoscaling-hooktargets": "1.107.0", - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-ecr-assets": "1.107.0", - "@aws-cdk/aws-elasticloadbalancing": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/aws-route53-targets": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/aws-servicediscovery": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/aws-ssm": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-ecs-patterns": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs-patterns/-/aws-ecs-patterns-1.107.0.tgz", - "integrity": "sha512-Q0SegXmjU8ZUZGeZd8wlbf3guUPS6eZF01k/ICbslLQnsD+Ppu58mgvMkZpn9zjz5hpBL17O5bCpLa95Lx/Qyg==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.107.0", - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecs": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-events-targets": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/aws-route53-targets": "1.107.0", - "@aws-cdk/aws-servicediscovery": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + "node_modules/@aws-cdk/aws-dax": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dax/-/aws-dax-1.129.0.tgz", + "integrity": "sha512-qGgrQmIyXwLW2gxmwNWCSP9gd0RRRbF6WTPXvuZRGL5obkhahAB6Lwl2tj28iwbR3LnYenryPq/P05TUZdLzGw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-efs": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.107.0.tgz", - "integrity": "sha512-hrXsi5hZFYSp0PQr9V4UFBuFwLqMqupbpODJ79rhqBnvSzihd24h/njljyNIWT1ryoZjRhsCvYZu4xJXgoT5Lg==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-eks": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-eks/-/aws-eks-1.107.0.tgz", - "integrity": "sha512-nQ9qC3QpncGgXv3EAdpsGQXuMhEJy0P7kWTBENxBEpnEMG/aWX/l1tc2DiDnzhrjiwDN3pBAyftAGELZXKXTDg==", - "requires": { - "@aws-cdk/aws-autoscaling": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-ssm": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "@aws-cdk/lambda-layer-awscli": "1.107.0", - "@aws-cdk/lambda-layer-kubectl": "1.107.0", - "constructs": "^3.3.69", - "yaml": "1.10.2" - }, + "node_modules/@aws-cdk/aws-detective": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-detective/-/aws-detective-1.129.0.tgz", + "integrity": "sha512-KeJN3z6wHnhGUr6zURibw1UM+jWhMtSSGAoAHTXXZIMptIMUmUpLzFdiuy3VHeO2dsME5p2aJGZpK0L1SWDYRA==", "dependencies": { - "yaml": { - "version": "1.10.2", - "bundled": true - } + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-elasticache": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticache/-/aws-elasticache-1.107.0.tgz", - "integrity": "sha512-lVrJeK5r/zcKXJxqWj/omTsOR+I7dUbP43wXSAVEB8vigaTizRCBxu3KPZ32bWYopCCpuEvCXfgX0R7I5RCCIg==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-devopsguru": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-devopsguru/-/aws-devopsguru-1.129.0.tgz", + "integrity": "sha512-SCKJjHO47P0YvquaDnnMhrfx8H30BVBMX2Ku6iV4kCA3s0mhu7tFNGsTcznyy5KYBSEhRXo1xTW8dFEx2Ei18A==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-elasticbeanstalk": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticbeanstalk/-/aws-elasticbeanstalk-1.107.0.tgz", - "integrity": "sha512-zHWCLOEt94LB8OUeG8GLScexfUt/TuL5V285o4QYwjV2gB/HCYgImtj1lvthicTsmK8JchALiVV6tCJcyoodTQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-directoryservice": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-directoryservice/-/aws-directoryservice-1.129.0.tgz", + "integrity": "sha512-823bugQik44vp3pCRESFdDmwJrGlX/9SdZIfyTWh9BP4SWCK47tk1noO/nRalQGi3kMMxblEMbBrRh4Ue8yd5A==", + "dependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-elasticloadbalancing": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.107.0.tgz", - "integrity": "sha512-lQd6N82e52JviMhJXcI0/q8LJmMtlg3Z9Pk+cdGxi3fj5bWIOLYqWb0SPCQbm/0jkCI9BCD71suwxj04kMiI4g==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/core": "1.107.0", + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-elasticloadbalancingv2": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.107.0.tgz", - "integrity": "sha512-j1XhQvywQGvgRpTGpdMQHRcS0USWwTvp9/B39h0ehUBbyV7jzONDd2h6Pvq9De0NHfLMPJsDTXLg116XYYI+8w==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "@aws-cdk/region-info": "1.107.0", + "node_modules/@aws-cdk/aws-dlm": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dlm/-/aws-dlm-1.129.0.tgz", + "integrity": "sha512-j4WzbCNPVkIKnYQAXDHHtjUN1GgPdad1CPfZEELRjvXj0QtFN2qgYKnEAnWVFcAAnZgy3IWU9mFp4MZY3Dpsgg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-elasticsearch": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticsearch/-/aws-elasticsearch-1.107.0.tgz", - "integrity": "sha512-/ZyWL3NNjhTUCcAyCiOBl1sH6ggDO6YDlV0HMxdyjfAH6Io4AkG6K3n1MZYndpkuTZsFkQvKPIQYFlw6m+0yMQ==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", + "node_modules/@aws-cdk/aws-dms": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dms/-/aws-dms-1.129.0.tgz", + "integrity": "sha512-eQpoqE6qkNCAb2aoCd6ZRBGts4eSYs4Emp6+4qRjd3J2rLL5bJlLGyRuT+hj8h0WqDcQ7k1g47LhsPxBMN3guw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-emr": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-emr/-/aws-emr-1.107.0.tgz", - "integrity": "sha512-V9KUAs7U2dglATvdtrnGAChOkr3Z3Ncwz5+8aJ5R72SwODQPWnuGhzAdGetjzuAa+aX8ivHRhnPWA2DhaWO8KQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-docdb": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-docdb/-/aws-docdb-1.129.0.tgz", + "integrity": "sha512-odPmEg07pFHsijKGCGc5bAD2ugykfXnisA8k/BpcRF/6QJNiMnn2YM/U8S/OKNFuf7BN7vK15JbEgIgSIlwRVQ==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-emrcontainers": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-emrcontainers/-/aws-emrcontainers-1.107.0.tgz", - "integrity": "sha512-CMkcHPLE2wjRpe2KNNEZknWyjMrVVMwlc2DUiezUD3Cogo5tACRxZ9P7CJrCk5K/oEcs8IxhsDCAuLxI424xyw==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-dynamodb": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.129.0.tgz", + "integrity": "sha512-5dXLRbeRTUUIVeVousEcyrS0sed5WxAVrRavUTnStx9fp+19PZ3ehRsMCBfnBOkv8BqVPxhyeEMEYG6mB2u1oQ==", + "dependencies": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-events": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.107.0.tgz", - "integrity": "sha512-TRFuVYNbZmECPBKGO9SiAV3r0K7H4AQPEUuw3Uo34QCNPgkXMdBmjVjYIh1I9Q3TI9zC0zWsp8npKyp8raqBcA==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-ec2": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.129.0.tgz", + "integrity": "sha512-7yLLW4ubbxWOYc+Dwd/Rc6OYNU07DMqgXnWChNjqoQ6dzKo4M8N52OGqVl06Eq7gqtCM+DOVQv3uID/y1Ym/1A==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-events-targets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events-targets/-/aws-events-targets-1.107.0.tgz", - "integrity": "sha512-PPuW/DdrV0PEfAGu9CRFEnGoulU2DBrC86XZb+nmA29ReVbWIFsMWiHbkhf93WYFdp6ieQUOlfeHA2N80b2FpQ==", - "requires": { - "@aws-cdk/aws-apigateway": "1.107.0", - "@aws-cdk/aws-codebuild": "1.107.0", - "@aws-cdk/aws-codepipeline": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecs": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kinesis": "1.107.0", - "@aws-cdk/aws-kinesisfirehose": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/aws-sns-subscriptions": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/aws-stepfunctions": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", + "node_modules/@aws-cdk/aws-ecr": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.129.0.tgz", + "integrity": "sha512-hUiYepHCmvC3u9XphsvZpo2ygiH7AczUOmDbE16kc9U+oPBV/pjfTkBWpkzOcapsU2pfBUm/kc2WMu1DEFU7OQ==", + "dependencies": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-eventschemas": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-eventschemas/-/aws-eventschemas-1.107.0.tgz", - "integrity": "sha512-6VDDHtWRq9EJryMiz6z/p+K55mXDG+fEopZmZojY7+C2Mcqr3NTp194VoL7V5ALGcnAPum0BgSBqbD2hnh+Qcw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-ecr-assets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.129.0.tgz", + "integrity": "sha512-ejw7e3Pj8IICZxnD8PbHzDUOSKoA9mMtyU+E5VhhgqP0trQQBfYrRm4IL90dPK6ZMepw63vqxaHjklhIAHx53g==", + "bundleDependencies": [ + "minimatch" + ], + "dependencies": { + "@aws-cdk/assets": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/assets": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-finspace": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-finspace/-/aws-finspace-1.107.0.tgz", - "integrity": "sha512-SPvZ8lMzmFt8UGVntfr3et/w/z0uySeGxRzkesn39Aw3t+3pDE6ohTYZI4OVOV2BBd+2aTdH5ExrqYesfKm/8g==", - "requires": { - "@aws-cdk/core": "1.107.0" - } + "node_modules/@aws-cdk/aws-ecr-assets/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" }, - "@aws-cdk/aws-fis": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-fis/-/aws-fis-1.107.0.tgz", - "integrity": "sha512-vVnJRdvagY/ZoAOKeeegGlvsUhPytdff+Uai6sF8wpbtc005MgG2qRquYa/fD4ep+0y5njjWHYAOtnI2PVD6eQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-ecr-assets/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@aws-cdk/aws-fms": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-fms/-/aws-fms-1.107.0.tgz", - "integrity": "sha512-EAMj/G+P+9HJDu9auoOIab9f+A/H4ubthxJlPi0FTfyYca0KCtp1YWL7pAOuMj4trLz85B4TICt0/HTUKKMFWQ==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } + "node_modules/@aws-cdk/aws-ecr-assets/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" }, - "@aws-cdk/aws-frauddetector": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-frauddetector/-/aws-frauddetector-1.107.0.tgz", - "integrity": "sha512-dUTgAt3zLFGifm50IZ0qNAgaiawULq6vTfihrCL3S+hn7S7eTnvZ2slzd1iYvSnZE5mJRdf/hFAu5aWdiuv/og==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-ecr-assets/node_modules/minimatch": { + "version": "3.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@aws-cdk/aws-fsx": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-fsx/-/aws-fsx-1.107.0.tgz", - "integrity": "sha512-TceAgaHfrnae5qeOuugwJGzvtDRLO6SQDoon65WCMcUOxnl1PZT/zpk3pFBEoYprxO49ig137RbWc2pJzV/zEw==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-ecs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs/-/aws-ecs-1.129.0.tgz", + "integrity": "sha512-cf2tvdGqt6vQQlo7D0QS14hi+Pn3uEb3OWXFxYPu1EkU85ld/pIRMGKhRKRpzGfzKh34WGkogevYt/e7cvUBNQ==", + "dependencies": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-autoscaling-hooktargets": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-route53-targets": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/aws-servicediscovery": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-gamelift": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-gamelift/-/aws-gamelift-1.107.0.tgz", - "integrity": "sha512-TiAAnnTAa+CPD00g3QliCX8t3gab0i5337BOMgFDdkyMz4dw00lBvJjgTlN/h1Yx445L+XwEQyMjHLmCeW6itA==", - "requires": { - "@aws-cdk/core": "1.107.0", + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-autoscaling-hooktargets": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-route53-targets": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/aws-servicediscovery": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-globalaccelerator": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-globalaccelerator/-/aws-globalaccelerator-1.107.0.tgz", - "integrity": "sha512-mfARBd1HVA4q9Rq+bOFYrL11n8V3Dsy9mncAynuems6WN1+goF3rkWOSTYq69QtMWj4xkH9LtThs4f366WaSXg==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-glue": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-glue/-/aws-glue-1.107.0.tgz", - "integrity": "sha512-z1hq5Ud44NYUxoipQqpQtkXsxZ46tKNriDFo+73vHUA1nf0L9TMtj2I4oo1qReGNehcu/3Zrxp+tVyus5QWB0Q==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-efs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.129.0.tgz", + "integrity": "sha512-L0FxdInKOZQunUskJWT+fGbyUiBvu8IhSRwiWLEg+KjZhkI+vOUIvY57u1nb+U1Ig7rd6vUjKRIPPpqzErjBww==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-greengrass": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-greengrass/-/aws-greengrass-1.107.0.tgz", - "integrity": "sha512-RFeMxpRM69PiyEF3EZc0KaG9HtxulHViWXOnevFvAgblhv6VYe/JeR9+OD8gAFsezU3vxbC3gQiEdRBb19gFoA==", - "requires": { - "@aws-cdk/core": "1.107.0", + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-greengrassv2": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-greengrassv2/-/aws-greengrassv2-1.107.0.tgz", - "integrity": "sha512-xmy+zj+0AoIRPuFlA7bqxAVVb3fF5vFl0lil11156rXRzyOXxHkAphwyNouNyJ/bY7EMbruQrNFSrPjRBvPRJQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-eks": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-eks/-/aws-eks-1.129.0.tgz", + "integrity": "sha512-NUKojLM/lc0a/lz+aoxnqKLVlKnoxUptQ42JFrgtOmSBfCTfVKZCcK0Y8eqg63gxSu4ay/X+U3q7V3TIklFO2g==", + "bundleDependencies": [ + "yaml" + ], + "dependencies": { + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-lambda-nodejs": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "@aws-cdk/lambda-layer-awscli": "1.129.0", + "@aws-cdk/lambda-layer-kubectl": "1.129.0", + "@aws-cdk/lambda-layer-node-proxy-agent": "1.129.0", + "constructs": "^3.3.69", + "yaml": "1.10.2" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-lambda-nodejs": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "@aws-cdk/lambda-layer-awscli": "1.129.0", + "@aws-cdk/lambda-layer-kubectl": "1.129.0", + "@aws-cdk/lambda-layer-node-proxy-agent": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-groundstation": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-groundstation/-/aws-groundstation-1.107.0.tgz", - "integrity": "sha512-/AbM/7u6f2ekdu5SI+MzpMQFlw+ZD9WDs3p+Jmo6x0L6iP1uP8NyxQteiNSyBUabOvVP0x2zrl0Z2KO7ZY2JJQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-eks/node_modules/yaml": { + "version": "1.10.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" } }, - "@aws-cdk/aws-guardduty": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-guardduty/-/aws-guardduty-1.107.0.tgz", - "integrity": "sha512-0I1QxVYTq8li10jXbHZqqzJdms1lDLNYJ6y+zFcxP59cWO1+ZciyfCi149wWzkcc7N/ClQVNufGX/3KM6dcosw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-elasticache": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticache/-/aws-elasticache-1.129.0.tgz", + "integrity": "sha512-Lo6gWsE/U+YQpuqbVeT6gkezFPmpD+c2V9F31omQSqTyDFRhygG3qjbUWU5yRw2jwNQIWKlTQgJyzVT62oMb/g==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-iam": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.107.0.tgz", - "integrity": "sha512-ZSULS+IdMK82VjcxNyLATlnYN1bQVD1om8MXGYxAkFuQLb3XL+uAa7NLVeHZtEKkPYqr8BcYlCXpB1JvGImJkA==", - "requires": { - "@aws-cdk/core": "1.107.0", - "@aws-cdk/region-info": "1.107.0", + "node_modules/@aws-cdk/aws-elasticbeanstalk": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticbeanstalk/-/aws-elasticbeanstalk-1.129.0.tgz", + "integrity": "sha512-TbEaIDUaEjFb4HTPbz5QiJjBfZGJlClwBcgIvK1uCbhi1m/T+fQnF6WPz+ngGQ/8PNFP9ju9edIto0c0/xf/Iw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-imagebuilder": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-imagebuilder/-/aws-imagebuilder-1.107.0.tgz", - "integrity": "sha512-myBiOlccJCUhgZI8KxCeC3vdE6lFYKrR3ZZRRjetWwAjdrh9ageI34r9+WG/vNmksJAuidC/3vGpJmUuPI6xgA==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-elasticloadbalancing": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.129.0.tgz", + "integrity": "sha512-5p9SsPN+weL4a23FDOvZnQ3hk1fgY1G3ajiE3meIjy17LTEWWuibaJNGXT+ixYGUbGgw0SE0zobr435ad2Ewdg==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-inspector": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-inspector/-/aws-inspector-1.107.0.tgz", - "integrity": "sha512-jVcval6k3KHDowIfF+/CzXPcfldnzs4+lBedJzKPwo7BIwgIAcwx7av3n260OMcp4/ETKQvfDh/t0KPIvtAZ5Q==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-elasticloadbalancingv2": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.129.0.tgz", + "integrity": "sha512-by+Wjp4FbZnLSkydHetPj1gg5AyNYBL/wEiY1aE+ioybKtnTVb5FxVjeZ3ctwh9xOTRnepcIwfQuZqDA12A8zg==", + "dependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-iot": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iot/-/aws-iot-1.107.0.tgz", - "integrity": "sha512-dmZmhjCiJiPv5HNQR7bC/nA3oudj/rkjhkoXbXBDQFCFYwnF24njWmjC3iE+8q0zmpZUBqLwR1Gw0lh5ndd3FA==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-elasticloadbalancingv2-targets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2-targets/-/aws-elasticloadbalancingv2-targets-1.129.0.tgz", + "integrity": "sha512-US/uDMHgI840DuySrG60p7pGQV8KZmXiC+0RpPCWeUhnbODUP72Fun/8D+4fX+mxIEA/H+1RSwz9hHWGfk0+Hg==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-iot1click": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iot1click/-/aws-iot1click-1.107.0.tgz", - "integrity": "sha512-fvnOulWtRTIiwtkccA4L7MRdR87HN1yQLuvCMi8WDln0UNN9yCfvoK3qu3qe1O+2+dVt+c8nipRUt3l7mIIz4w==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-elasticsearch": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticsearch/-/aws-elasticsearch-1.129.0.tgz", + "integrity": "sha512-yELBAAPlWATb8I7Lg+1nZAGTdAhvWGv9ArvbdV8fosOshd5O83BmFxjxSfGqzXo+FXtCWcyyaEzxC2qPSjmtfA==", + "dependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-iotanalytics": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotanalytics/-/aws-iotanalytics-1.107.0.tgz", - "integrity": "sha512-v0z8CexwNDPHx/Xtr738r+ibnxLWpkSTWE8PNpEkHvDlf3W83ZqTS2IsEEygz7FWoonmBUhcRQt0pY2M0orYYg==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-emr": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-emr/-/aws-emr-1.129.0.tgz", + "integrity": "sha512-k2MQT4XimebiTQL4Mz9CaGXH+4xbgu45802SF3p4oOLWRYSHG52b/JFFe7s6OHHMC9a9rNWcahLZW1zqIDlbyg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-iotcoredeviceadvisor": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotcoredeviceadvisor/-/aws-iotcoredeviceadvisor-1.107.0.tgz", - "integrity": "sha512-mHCqqdASARIU11FwNJTQ51Dvkx52sTruk52oa7NWeYkyNCmFA6VB023xkh88UH3cW9tx6rBukL+ifwW0bWO7tQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-emrcontainers": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-emrcontainers/-/aws-emrcontainers-1.129.0.tgz", + "integrity": "sha512-I6qZS8XtqJ0gDAiBML2rcUq4USAZDwjVz3Z9Rgh01C0JqPU6QOofhxetIRttEjILZ4D1b7lSe3FpsCIsioxvqw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-iotevents": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotevents/-/aws-iotevents-1.107.0.tgz", - "integrity": "sha512-HjvIG4/mr0tfBy2QySjTtyhxtte9L7HARt7pC+Y54OvncmFpHO2Kyz+rIndJ2WTr5nRgE4Dffx8HgeURiYa6kA==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-events": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.129.0.tgz", + "integrity": "sha512-q4+g4ugQV1maomOZ+HpQynBxw5NcMJGjIRHkfgxa4xl0/LQ4W5ReEHXz73gD5h7tSwCJUsVys9DpQG793R/CSA==", + "dependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-iotfleethub": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotfleethub/-/aws-iotfleethub-1.107.0.tgz", - "integrity": "sha512-I3wnTfB1oBBEJl9Yx6FiwiS5/zg50SO/0qlTI7hGU+n5z8rG0TMKwwSEOjfVEO5AufUdaaHoNjmWO8V3u52ytQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-events-targets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events-targets/-/aws-events-targets-1.129.0.tgz", + "integrity": "sha512-annYEhTW7hU/GeC4gurXQvFWuJsSHD+cU7LjkkaBR2n2PHYb3w7hCdmt6ebKRAmmra+sYqeWTx3pkqAlHTNhvw==", + "dependencies": { + "@aws-cdk/aws-apigateway": "1.129.0", + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codepipeline": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kinesisfirehose": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sns-subscriptions": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/aws-stepfunctions": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-apigateway": "1.129.0", + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codepipeline": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kinesisfirehose": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sns-subscriptions": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/aws-stepfunctions": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-iotsitewise": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotsitewise/-/aws-iotsitewise-1.107.0.tgz", - "integrity": "sha512-rAac63s+RIk3/+5uL89uAVn3bQZ3cu6xpamRIEJyf0Xoce8BYYoi1VKWR8iAEfUnMxq1D2MoF/A6qqx3yfGMzQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-eventschemas": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-eventschemas/-/aws-eventschemas-1.129.0.tgz", + "integrity": "sha512-djkBj10sdjjHz0Y7Kr7YCxoX8qMeSE3i/QFWifd2WoHWH3Cc6Pu1TWXa0uIGJbXU20hdC/SYkAhWh4Y/hX2VsQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-iotthingsgraph": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotthingsgraph/-/aws-iotthingsgraph-1.107.0.tgz", - "integrity": "sha512-lNOOKyIOpnl7alGNm1Fde6nDouMtGwp+lD+/n9o3L7rG5AffoX8bulDfNMKL4mqBU/47P80dLnRKi5Sg1vtI6w==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-finspace": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-finspace/-/aws-finspace-1.129.0.tgz", + "integrity": "sha512-FwOFTfMh0YqUmVmZICWLfvARuIWobXFRfhImI2RUtUhmH17Q8BGqA3xB7O0p9nvOWLrQ4qBg3ikhgU1KdUwnNw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-iotwireless": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotwireless/-/aws-iotwireless-1.107.0.tgz", - "integrity": "sha512-r0uEcXY0PZWvPe0ziMI73uUAaU8g5nmqgjSHx1LQPkmndI/KFDUfU6IGB5L8+qpsIdd9T2ho0rH/dRb/Vv8PUw==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-fis": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-fis/-/aws-fis-1.129.0.tgz", + "integrity": "sha512-mt8/0O1lbjztVBBj+nR7SRu6PtUQp/4+kZOm3G2f/8Af8vaW+brwTiZD9fKUH1clQL5YZilDfxEXJpiH+sZ+Mw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-ivs": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ivs/-/aws-ivs-1.107.0.tgz", - "integrity": "sha512-Qi9Mujmpj3iAAjtibumhmPQdQyYG+r/wtXhI7WFSG1MiEcDMaiPJR7vHdXAFTjFuGVGF9OktyqRsTpZg+ELZUA==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-fms": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-fms/-/aws-fms-1.129.0.tgz", + "integrity": "sha512-mx2oOGKBKW1zNUVvNdEdyWt3MFbgKmm+4BQnjSQ4DwuecTC2YZJ3xL0m5Is3TfNzpscTKMyyTIbilTCfiCfwUw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-kendra": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kendra/-/aws-kendra-1.107.0.tgz", - "integrity": "sha512-ltR+tm/1yAkTtYeOhxxqUbQ8/KSxPGDgljrc6VUcBkrH2XECuRXN3hqxVnpx1ikN0WgOCppQSg2sXMeCBCR3mQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-frauddetector": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-frauddetector/-/aws-frauddetector-1.129.0.tgz", + "integrity": "sha512-SuLL4wqriEJEEJMH/7jp5VVITmRZwwqaPfa3UdVPhQjUIZkrWESYb4UlFX10BTO63PRT+4TJWySjKBrwzMxvpw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-kinesis": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesis/-/aws-kinesis-1.107.0.tgz", - "integrity": "sha512-ubWyaLmqK54WZvMUUgvMJ+AsRKzX7EG5xjvnoj5wYvN9bILeXUKV/I3yHMU47WluKKaDOk12wbUANK2H+sbwZg==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-fsx": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-fsx/-/aws-fsx-1.129.0.tgz", + "integrity": "sha512-m6y1uM5NlotrWas0A3LpVeR3TZ4ttAIHgvzdBySLJkWRXYPtkngEIJKpENJKxMxRFUZqNPl5IsgJyN5+f9mLTw==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-kinesisanalytics": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesisanalytics/-/aws-kinesisanalytics-1.107.0.tgz", - "integrity": "sha512-sJO0O+mXyIHYd8IijJXQUOHHoR2Ky8T1Boyj/uF507qmbJKefO6EO1qIcxEU5Y6cdhEcStuwCLvRI57z1m0Qeg==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-gamelift": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-gamelift/-/aws-gamelift-1.129.0.tgz", + "integrity": "sha512-fwOP5/4o5BDNodPX/fOStC7jxoNWf1Ik9hPb7v3OO48kGbsxdMbNavekp5wfPaDcsJCn7qFeS/YqZhbIAJ4xYg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-kinesisfirehose": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesisfirehose/-/aws-kinesisfirehose-1.107.0.tgz", - "integrity": "sha512-Pccnj7M1HSeLRsMYnnSULwYw1rPtDegqPhAoj8bDRIJMZ3/vtfeGaq6wpPd4X1eP8GtvvbRtqbQkw6w3DKYMJg==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-globalaccelerator": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-globalaccelerator/-/aws-globalaccelerator-1.129.0.tgz", + "integrity": "sha512-qtviM7J0dtS8cQniuDGTYluYazoOYhzrhshobjvySQ0ZPPqkImawKPLmhSBD3l8mq2Tcodl/szUd4f5MoigwBQ==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-kms": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.107.0.tgz", - "integrity": "sha512-+b1j/GOeHh76lG92vRhPiyriW96e4TiZ9XVXv5sxv4zJkGD+X5oBVL82RouYJ2gw/onGiiWsobz8J/R1/h14pA==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + "node_modules/@aws-cdk/aws-glue": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-glue/-/aws-glue-1.129.0.tgz", + "integrity": "sha512-8wORcgQmh1pyVw52652+2DoD2uN8d8vQDjU7CBMAQ1Pmd7FS45y2oH9FsQUzlJJ4TgxjYO1CCg/qx0u3rEC/eg==", + "dependencies": { + "@aws-cdk/assets": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/assets": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-lakeformation": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lakeformation/-/aws-lakeformation-1.107.0.tgz", - "integrity": "sha512-E5MnU/WHCOPpVhUEFj3D2QLdNK1jA9YIZADF8gqz8XVTZkkcUtUurtd+BZ2dKrYqscmW4q8tJMCyaMF9sV7T5A==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-greengrass": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-greengrass/-/aws-greengrass-1.129.0.tgz", + "integrity": "sha512-qChL/GnKvjbHoNx1/nIBxg/xQH+EIp1YXxWAP/cKOlcL5mFa1e76C8TMtppwmHSWTPOTjihXpPr4dfAlRrvkDg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-lambda": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.107.0.tgz", - "integrity": "sha512-McoQ3rjFtXDHUaq4ovU/ARwBJgQz3iq2cBogv0zg4g8AMw9doGVZnXjIYNFiCBXCQD1IUAlrLi7YhpXBDnygRA==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-codeguruprofiler": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-ecr-assets": "1.107.0", - "@aws-cdk/aws-efs": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/aws-signer": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + "node_modules/@aws-cdk/aws-greengrassv2": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-greengrassv2/-/aws-greengrassv2-1.129.0.tgz", + "integrity": "sha512-b+lXbfkkW3vckAh2lh1Ro2oF5tv182GCUegFR6+PoakAI8sOuQWDzB2thy5qs4SHxophhyJ9drqitjNArNHcVw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-licensemanager": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-licensemanager/-/aws-licensemanager-1.107.0.tgz", - "integrity": "sha512-VqETTwZA10TOURsVtmQiRipuuDtaE0otxxWDkOoWIvSalZOUvK6tGxPpYjjoHvCmZNTADYn4Vd+6J94NvzpISQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-groundstation": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-groundstation/-/aws-groundstation-1.129.0.tgz", + "integrity": "sha512-woQyDNVJwBrmxTJs7vNU0sHZxsCgZCuQsoQF+XfL7E5IOXBdMnpzF834TzQtLWhSSkj2R/ipgwkTcUrj7yIRjg==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-logs": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.107.0.tgz", - "integrity": "sha512-CNZHb4B2+KSmaIgC4rNFAXs+rlHRt5F4Nen/c2TtP9/E9WVZLz4WpYQWQSbV61mFEWFH0vHbihGxP8/pY44AnA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-guardduty": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-guardduty/-/aws-guardduty-1.129.0.tgz", + "integrity": "sha512-pbCSNsMJl/u4EBv4q4krk6OP7uEgpcit+Tpi97/cZNHKD0N+r1IQp9GSu2Nb2yMC7bMepuIoLNlO987SU7zpCw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-lookoutmetrics": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lookoutmetrics/-/aws-lookoutmetrics-1.107.0.tgz", - "integrity": "sha512-YyjU7ERo0pNK7scVruF+tDILFIgq2RnlX6PCvdebRxK5gRTQBtwf1OfXuoc+X3JkbemXy8twkQymMFHiltZp2A==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-healthlake": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-healthlake/-/aws-healthlake-1.129.0.tgz", + "integrity": "sha512-e04uwvokm9Ib1C53UXmLQa1vQrbKKZ4ACHCQ/qf/wb4GpimmwsUecY/YaxW40o1NKJUCT7oa03DFJeVx1u9G8w==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-lookoutvision": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lookoutvision/-/aws-lookoutvision-1.107.0.tgz", - "integrity": "sha512-5mMCDnSn8lGsW8Y8eo8fMZiKmU8pi/OeUwj0V9kxJ8Y77K3UnDSZCMtNtS1yxga290KgdVnqsDeda9ru1xuJQA==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-iam": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.129.0.tgz", + "integrity": "sha512-SjLrFldOpPYogldJOtJROudcy3ttHaKu49u4cr6MYq3U9dbYmYfQTz2pkKGoAErN9jj2yIpuN5locNBmVzpIcA==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-macie": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-macie/-/aws-macie-1.107.0.tgz", - "integrity": "sha512-ZXx1dVgqTtMCrQCHVbMJtpmvWs0Pa1tcj3K56Al71l+mnTzV8YTcdFGD1h/FVbk6Z/cMwIYJEWx6OF1TNB6aWQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-imagebuilder": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-imagebuilder/-/aws-imagebuilder-1.129.0.tgz", + "integrity": "sha512-M/OwBjF9uv/vAXPV8aG1CCprZmE8+4r6vkqm9j7Lj0v2AQ6DvRysvvgezYA23ohCBKt5Ml+y9pzIFbNiAVNM8w==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-managedblockchain": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-managedblockchain/-/aws-managedblockchain-1.107.0.tgz", - "integrity": "sha512-uMPyUlOOF6fp2WmhKeIYpmFz80AP61YrSdw5NOUysBKC7RPWiH+e8kD2U5+Hci2NsVzhlz5O34tSUHLYCdV6ZQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-inspector": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-inspector/-/aws-inspector-1.129.0.tgz", + "integrity": "sha512-vPXNh5HaCfvhlnns98PQNvcreROEei2Il6QVExSSEjMqJwzcHpPhExNbDe/IJXndhSwmR+oPwRXx2dWhs/dIVQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-mediaconnect": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediaconnect/-/aws-mediaconnect-1.107.0.tgz", - "integrity": "sha512-thD+umJNuujX9WJQIsZcqXCqiRjT6nZuIgDzqxwbG8+I1quAOjoJrig0DZb+/QBdiE2Ya35Kz7kgdO3gC6AqMw==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-iot": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iot/-/aws-iot-1.129.0.tgz", + "integrity": "sha512-zc04BQVn2xL3V0idxNupgRna8JOAIblXtMZkZF3yAZwVfNWjiopvo7u9oFZUbIRamNYWVR3qDr+osQwe0hu+Zg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-mediaconvert": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediaconvert/-/aws-mediaconvert-1.107.0.tgz", - "integrity": "sha512-f0e2j73dI18ZZ/BvjsexPAq3UPcRSPDed8sDTSwWfoixBK8BDqssxh2BRC/JkoWe/5dKrzjMtaxRVeH3Cd+Axw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-iot1click": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iot1click/-/aws-iot1click-1.129.0.tgz", + "integrity": "sha512-4cZgC0AYvk8uGzRh8Sg/hYv/S94uIeVGbFVlj/SBhaB6f50JafDi9hsd4veVu4q4UpR7GvdY8X7DNnrGHDpXFg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-medialive": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-medialive/-/aws-medialive-1.107.0.tgz", - "integrity": "sha512-0w3SJFvjxaWemfPEWvPpfVTP1Z66E+GAsVpO0rismD2TKvO6kXv3x4+hGY5w6HvlW1gZmebHXpqeVuWyNAMW0w==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-iotanalytics": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotanalytics/-/aws-iotanalytics-1.129.0.tgz", + "integrity": "sha512-0WstyATvHw/WAzNbmKPpg5aBC+IZ/W6VNITTV62343BHpYXPavD1yN4TLwygTSIAwuYOwOnqefBfx3eV5EuccQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-mediapackage": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediapackage/-/aws-mediapackage-1.107.0.tgz", - "integrity": "sha512-G3HaKxTRBPTh0GGaejBn7uW9dAlYcFNhg6dAdNNigUluwnfreGFgW1zW4QmRfXfbu59s7LNzF4iyeWBmu+A7cQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-iotcoredeviceadvisor": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotcoredeviceadvisor/-/aws-iotcoredeviceadvisor-1.129.0.tgz", + "integrity": "sha512-YeF51HL5QpYjfR5c0xSCdSCqtCnwBlYo049a91taVikaGxNPBTYnoQ3G+3yrEGBrVfTqmcbvhbePLCgPmHRx/A==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-mediastore": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediastore/-/aws-mediastore-1.107.0.tgz", - "integrity": "sha512-A3TcyiRSgChNcgScjI5lW2/ahxSMn8wxq9Uw4cMkqEQc0UU6G9QSc49wG4C1D54bO+WVbTOzSFwhE7d0z7bBBg==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-iotevents": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotevents/-/aws-iotevents-1.129.0.tgz", + "integrity": "sha512-TFsqd306QKSOTfPi9FdjoXsxNUNf7wD2n8onNP1CR0ccBYu5RQerBopKvo6Uvu1XfLO+8f6G3dR+HvLhmgLZzg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-msk": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-msk/-/aws-msk-1.107.0.tgz", - "integrity": "sha512-T0J+NQSuArQSXJZakdZpq3fXcxsiDBFRaTya+O1LP1TQq+HEfn+ljIBuq0q8jhd84lUpzoCFict62hVDxa/siQ==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-iotfleethub": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotfleethub/-/aws-iotfleethub-1.129.0.tgz", + "integrity": "sha512-yMsVomjaEQ4lp7KJijwrcb4oZ5cfkYvc2B6d3QATPJ9K/O1/CxrAkdYxX0p9oOW5W/Mo608UW3KmSYDelr8NHQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-mwaa": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mwaa/-/aws-mwaa-1.107.0.tgz", - "integrity": "sha512-BIIPLEsVyVO5K+5YDtlIUrSLjukK0JtMCR/rHtGr9wM6mXHC6hFTE60wpmxBcPfw77UL+rCIl1p70WPHbjYxAg==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-iotsitewise": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotsitewise/-/aws-iotsitewise-1.129.0.tgz", + "integrity": "sha512-9SzkMlXNZgb8dzAbur6/UToF4uzldlwXnoIvtfk3NAnlkFqt2vhBtpDERcLHjasnfjanhs3AbNs+UfAuee8TCA==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-neptune": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-neptune/-/aws-neptune-1.107.0.tgz", - "integrity": "sha512-sUZSTx037/CYAdDSL9w6PIPYps+ocNFa5Xp/3NkbpGFNghBmvy8OJY7P9Wj2XLleZrLNX0x0FigZ9JIj/9OFAg==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-iotthingsgraph": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotthingsgraph/-/aws-iotthingsgraph-1.129.0.tgz", + "integrity": "sha512-DaTbrn+B/JcqoyErIEomLye8t2019s9O+ZckA3OxIqGIvQVNJ7zHGpToXBCeBUW2Rc7LdnAaw+O2QQV0oNXxRg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-networkfirewall": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-networkfirewall/-/aws-networkfirewall-1.107.0.tgz", - "integrity": "sha512-BOGMtyZdPPJMTjh4uOBuNjoYv8Pz84boV8P72B6U1bTW4sdSxMJ1ccRidO2nEmOIE0cbPEq4c9kWIq9w+ZqAog==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-iotwireless": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotwireless/-/aws-iotwireless-1.129.0.tgz", + "integrity": "sha512-XlYQzythHX0wjxnxE3YBsK/zs2AqEm7T6a4FtVxoTBjLbH1JTjQt4C41rMgz32egFDhZ6PnLfxb3QT83msPrkw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-networkmanager": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-networkmanager/-/aws-networkmanager-1.107.0.tgz", - "integrity": "sha512-TCn6bvNys8CU64B6GUk+dxwL5lJP5e+Wq9NsjhJJGGJNSHwnrt+nfW8ZwI9sO9HG8WfN3uGWL/2tfoGBjL2S3w==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-ivs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ivs/-/aws-ivs-1.129.0.tgz", + "integrity": "sha512-z6dUwuA07hao+0/Gf/xpbYIUGWuaMolX5m5oCZexVrnkMHZ3SaDaY4FoUZJf+Y8CAsq1AWLHnc7XDVS9he1z3w==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-nimblestudio": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-nimblestudio/-/aws-nimblestudio-1.107.0.tgz", - "integrity": "sha512-QhdHiCcN7wymZw2svh0MpaO9n1CwxZOyqDAHpPFxchfrXn3BvCJ6CZ5gariY4m3ygz/8oSnPjVYZNRdoBCXbTw==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-kendra": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kendra/-/aws-kendra-1.129.0.tgz", + "integrity": "sha512-G3mZjSKjFUQRHmFV4ZHXVD+8uso0TECACmjL85PBc2w2qEbDBci/2zxArWxRO4/aVEIKKHPqVN5vNuNm0WQ2hQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-opsworks": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-opsworks/-/aws-opsworks-1.107.0.tgz", - "integrity": "sha512-2qV6mg+oftYthQ6UOemmkqkQ0DBb0UhPpR7cYiA3WAEe3nY4NWj/vraLWpVuIUlXEmHf+HRJrRBfLyo+BkFgGQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-kinesis": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesis/-/aws-kinesis-1.129.0.tgz", + "integrity": "sha512-MC2wR2udouSrf1BZcl/nfCNgqzPF5TC8DmsODMbs2uYvW9qLFv8L6qcgR3NasyS9p6K8MBjf/5i1Y+5jiAOhPw==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-opsworkscm": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-opsworkscm/-/aws-opsworkscm-1.107.0.tgz", - "integrity": "sha512-pT3lSaKbYZ3j+RIVwI5xS4a4qRM5Z87wSiRx48UHb3Jm8Dz+5VuDdFwmmk4/WKgHpBs7gORhKNxVqK1YIlTmtw==", - "requires": { - "@aws-cdk/core": "1.107.0", + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-pinpoint": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-pinpoint/-/aws-pinpoint-1.107.0.tgz", - "integrity": "sha512-CZG6HLI2ugOkGnhd92j2zenKGAYF8xG7UMm9ZBIRAhRC8nMKQt6BytiR+Hd7vpxgNGG7kNORdpACZaK6q7Gwbg==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-kinesisanalytics": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesisanalytics/-/aws-kinesisanalytics-1.129.0.tgz", + "integrity": "sha512-lGRA9//W7vITHGSgh6VDF/aQ0xkiEQLqxlq0kZ2p67Azw+wG3LUAIpBWy0U0mTbxWgS/AwV1AJildDhCmF6NRQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-pinpointemail": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-pinpointemail/-/aws-pinpointemail-1.107.0.tgz", - "integrity": "sha512-01yHMVqAai2ZfvWQkjDmbReSX79KbWF3JypEKS60wnyCICEyvFWge2ye1AA3oS2ZnXZggU8CQ7YiBqZvfSgHzw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-kinesisfirehose": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesisfirehose/-/aws-kinesisfirehose-1.129.0.tgz", + "integrity": "sha512-AOP8yWg1cfoK7WLFkEQN7Y5bJSvDIcJrjl+hZFMkcaCVcfi1ym8HY4vF6N4PE4iFkBEHiqDOxibogjjSwv6Okg==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-qldb": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-qldb/-/aws-qldb-1.107.0.tgz", - "integrity": "sha512-ycRPVCsrQI1y3Qjc4IsIdO9ntW9lNsr02I7gc2SLKLQ1FUV9JFf+s76t9FpLWD7gge9H2tqHqazIq58OVeA67w==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-kms": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.129.0.tgz", + "integrity": "sha512-rscNj7cikIAEtmW3W/5REmTotXvPsm6MtgRMHvd68m87wTbEezdwnx5lgbtqCDZ0pg+v699OsvMWT+kGtNoDXw==", + "dependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-quicksight": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-quicksight/-/aws-quicksight-1.107.0.tgz", - "integrity": "sha512-L5liBsKbPaBiu3Fqaa3JwOZoRbxJ7ojqLpIV6nOybSWHTd0rVbnX9Tg8pA4BHOZIBZbadG7eBhfh0czm/v2Xgg==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-lakeformation": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lakeformation/-/aws-lakeformation-1.129.0.tgz", + "integrity": "sha512-qC3FgpNJGz4tHPLSykaGz6BbMHmsH51Zz9kl4Tut8Url0xw02pyF6DMcaZc7gViEp7gHvRn5aG/CMxRn49pdDg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-ram": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ram/-/aws-ram-1.107.0.tgz", - "integrity": "sha512-zLjDfjFBEbI+WeBKr7gNEbJD0OzVprNvJbE3awXQcVKoZnCClHn8XQI9pBFDFsGZr1qkcBhxeWfsEhUNQPtkMw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-lambda": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.129.0.tgz", + "integrity": "sha512-h15c2QUF86fTAPDxobgqojcyyrOxWZjMTLVtwkxrhGlUC7l/989/W5QflILJgxCPq1x6716+6epY3eerUnbGZQ==", + "dependencies": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codeguruprofiler": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-signer": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codeguruprofiler": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-signer": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-rds": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-rds/-/aws-rds-1.107.0.tgz", - "integrity": "sha512-1Qmj63V8bDRh4e++PxHkTUVlIXJAq1aCr4G4dtkLI0imskTCVghduvt+pTEODpYHkRri7DIevxLAE6C0SkP1uQ==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + "node_modules/@aws-cdk/aws-lambda-nodejs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.129.0.tgz", + "integrity": "sha512-53Rrt9bdAgkhAWLBRmrQcPx/ZAQeGiFAFxezXixbAlu4ONPzDqYafACen4Kmt5j3WIpLuwFCMurVdCmMw9s62g==", + "dependencies": { + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-redshift": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-redshift/-/aws-redshift-1.107.0.tgz", - "integrity": "sha512-a0T/YPTfHswS2YDSuojJQDCaOh+dcuCRhrobVdyd4zuK7+HYZUHcvRyR6D13P44fZ7JofTdLF/fMm/DB3f9urA==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-licensemanager": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-licensemanager/-/aws-licensemanager-1.129.0.tgz", + "integrity": "sha512-5V77fFoIIRcFeuxBLOzraFvaPsxJujLmNMWlnUHkLj9Izk+is6jqQdLO7mWhmg5zh52tDnPHhSQtZ946pMjgUg==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-resourcegroups": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-resourcegroups/-/aws-resourcegroups-1.107.0.tgz", - "integrity": "sha512-GSFgm+E8DxLazmHgGsOu8JGkdZRnEPzUjjXvVq60I1uwLhtks9YnxlJz/kGb9ephK35A0GMabnrwfI7WoiWpiA==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-lightsail": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lightsail/-/aws-lightsail-1.129.0.tgz", + "integrity": "sha512-dCT1ZUOFUwf5XAYTvHCTq7ki+3b+OhXgAwar27sNWwEhyW+HYiKA1YnJ1iDNnZ1jSAidpA4ABwzptiuv8G97XQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-robomaker": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-robomaker/-/aws-robomaker-1.107.0.tgz", - "integrity": "sha512-vmKRtlsUa34Arudg7NCSzSn7v+3Hr3cTTnypMUA9q0pS1y2WF2+vo/v7+OhdCN3ajOhifK9DZC8VN8V2oxnKsA==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-location": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-location/-/aws-location-1.129.0.tgz", + "integrity": "sha512-QA/CxYvPjgBUPqaitUAYlax/Ul38Grba088LHZ20HCCpk4Ds7ALXGxglTs55e5xq5lXrIWGshtwi7goMdrTfvA==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-route53": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.107.0.tgz", - "integrity": "sha512-gvWD9VsmZV6m+7Phu4DAGpIPy8hf0rZQJIZhvLuffBpICenlDbiW2eH1h1/3O5d6/SBSYLxQ/NbZX18e/RFDGw==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", + "node_modules/@aws-cdk/aws-logs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.129.0.tgz", + "integrity": "sha512-E/N9Aj1Xxz6y0r48g1v4BrRK/uhtRjN1poc6xCN+GzIPXrSuiEDV71N9ShqpH38LtapJQSGCq3ou2lvjX7hH0g==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-route53-targets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.107.0.tgz", - "integrity": "sha512-9NUUZj3fLwz+sKcGS/OplZreuzrkEEuXJBn2+zPUIB5sI1NWsRY+R/rLSKy2PchEYsN66pnLSlRlzqDKfO4pgA==", - "requires": { - "@aws-cdk/aws-apigateway": "1.107.0", - "@aws-cdk/aws-cloudfront": "1.107.0", - "@aws-cdk/aws-cognito": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticloadbalancing": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-globalaccelerator": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/region-info": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-lookoutequipment": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lookoutequipment/-/aws-lookoutequipment-1.129.0.tgz", + "integrity": "sha512-BdRnOZxIQllVxhIyKooCPv0fKUGTZJ4qQGdH2mgONELWdLOWbtcCcwshumo0RgL72w4bCbnJxYiONiMOmcqCWQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-route53resolver": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53resolver/-/aws-route53resolver-1.107.0.tgz", - "integrity": "sha512-8snYhrRQ3zHilCXjsyB/P/vdwZwQbhKaLAKWcbu80rAf/CicTaZD4a0JujqLJaHRVVKUCUg/XoHZkDo4lQZKCQ==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-lookoutmetrics": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lookoutmetrics/-/aws-lookoutmetrics-1.129.0.tgz", + "integrity": "sha512-xNWutFn+BBpIwzcOz+7oKpGUvY7Io0le9FNQ3L9BRfupcpq5fbtBlhYgspfjfpH6DopM1SjyfNTpKKbtWkFkkA==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-s3": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.107.0.tgz", - "integrity": "sha512-BjH9S+ZlFHoqRDRT/I8m3MFB+80F6mHASMnKHuyXoMfUs8qMos7R8XEJAprx/dMf5EwAMfFYS0IFZH21CpBlxw==", - "requires": { - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-lookoutvision": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lookoutvision/-/aws-lookoutvision-1.129.0.tgz", + "integrity": "sha512-8Y9k2o5GLvIYjmN2/WmwNhVye/yNLaOz9VVKDLYWW+8EDhFhI5kLigYJwTz3X2gvXJaNLEKIvzoBmf1Pz6VNlg==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-s3-assets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.107.0.tgz", - "integrity": "sha512-9P4d5ADJr7XxaXdB3G4fMcEjhj7GQM3NDtikchH1XMLje8gz4Eagv6ApaqDkHaRzRe3l9VBeoc6fQHIQlWtSHQ==", - "requires": { - "@aws-cdk/assets": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-macie": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-macie/-/aws-macie-1.129.0.tgz", + "integrity": "sha512-Q4Eslz24XCbfh7QooEmF5wTpPpUyEoUwIU4zQ4aZc4HtUhAVXfLl8eJPM9Da16Lvn0/fyby62PtPiIekJA4Ymw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-s3objectlambda": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3objectlambda/-/aws-s3objectlambda-1.107.0.tgz", - "integrity": "sha512-StZ6KXEwoH/i0EVoLW+CUiU+8ftCL+R1KPL16eH+mWF8RU61vUwE4iR3/oryzEbb3+prkscPqO4tt7QRx7pLYQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-managedblockchain": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-managedblockchain/-/aws-managedblockchain-1.129.0.tgz", + "integrity": "sha512-DBJx+Zfj+I/RbpL4Mww9Fc3XaWjSTN3zQOhCs0Y0bcrwMWusiF6pRrV3D9iWPhGvA/eHGf/w6Zv0LK7fJV6c2g==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-s3outposts": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3outposts/-/aws-s3outposts-1.107.0.tgz", - "integrity": "sha512-/gH2UGoHivVdoqiF8CSsP8/15+avu256CdUYbKeSUbFE+PCCUKuOKiyklZ7GgrqOyurh/Hh/tjVY6wl5OOhb0Q==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-mediaconnect": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediaconnect/-/aws-mediaconnect-1.129.0.tgz", + "integrity": "sha512-quvBhCxMpUej2qif/y8CL9HRsxg6u/ebrN8EOUdsNVS4s3CSzEjupZjVfoj7i4kBJgcvFDMLzssft/uUWamK/A==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-sagemaker": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sagemaker/-/aws-sagemaker-1.107.0.tgz", - "integrity": "sha512-86QjTqzolWBaq72H8cFwfHbgUDbvmGZ3ttKK9p1l5d1mioE6MDnKpDsDkUwKK1EcAmccsnTk7w3gtJszsR80PQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-mediaconvert": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediaconvert/-/aws-mediaconvert-1.129.0.tgz", + "integrity": "sha512-IxqJtjXoScXTP/rlh2c1lR8y8cQmutRUoKihoLDphxj2npqJm7OEwCZsEBz/wc0t7yqOk3FjektoNxGDmXcaOQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-sam": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.107.0.tgz", - "integrity": "sha512-P1YSJKmWB56p3tRDhXIa1ooFAmBbOenDUQh+QVJRChCewolaXM+pf9+bHveiHtVsur++ZptEzyR4d00DVSFeMQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-medialive": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-medialive/-/aws-medialive-1.129.0.tgz", + "integrity": "sha512-X1OGfQwgIgquYllQFGw+sfDOXVXwW/gngSxck4Ps0M75LVWN4CD+2mKLTuim5s4Ik3E/epTCXRQM7URr7GkXag==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-sdb": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sdb/-/aws-sdb-1.107.0.tgz", - "integrity": "sha512-vtQDD2BT0ILCbSJkqrzYK6p48EREzJOwZwefAJJ2dXMn/XX7vtJy7daWRqXOgRLjMFRcdvfwIrqRTbcRhwZdkg==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-mediapackage": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediapackage/-/aws-mediapackage-1.129.0.tgz", + "integrity": "sha512-hz4jkExBq3Pci1BS/ALYpoyEW0rMY4DPClxvMLYRzJel4PFA0HwPtvnyr5iiCPMpPvsTW1ka5ve1HBCuNi9eiQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-secretsmanager": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.107.0.tgz", - "integrity": "sha512-Bl2fgAPKXMMcWNlJ+BBrtGLIb+EyF1ybOOb1wfKiofKNl1b/jHrH/g7mani79x5IY0NVa7pBR5IZNqlBm98GkA==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-sam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + "node_modules/@aws-cdk/aws-mediastore": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediastore/-/aws-mediastore-1.129.0.tgz", + "integrity": "sha512-oApQfM/whtbZ7AcZjTc28y8dCOotUSt7pDJn266xGjP8vTSQl+i5khhlMpWBIBsEDOclnGPHyKKiD4PgwGQnwQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-securityhub": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-securityhub/-/aws-securityhub-1.107.0.tgz", - "integrity": "sha512-jpDjc2pqk8Ice2OhiaPbv/wDzpmMBdOaPVK5ECLkDXYenf15BiZR83ls2+1g8xDQhbAU93wRA0YuaIYvGe+WJQ==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-memorydb": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-memorydb/-/aws-memorydb-1.129.0.tgz", + "integrity": "sha512-iX2NyeIVdrCfJ+qBEvuTpXHv4pYIqNOUCU/OVBdL+ZK1DdMsFn2eOe2DO6KCldYobNQQCZADoB04G7LZdJS8tQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-servicecatalog": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicecatalog/-/aws-servicecatalog-1.107.0.tgz", - "integrity": "sha512-MxOKJ852os3djuhh8hCEn+8+ysHsqFnWQou85HBufXRWzKvvbeRYbv+ClHFn1Pcljjzvin2svBducCLeFqcOtw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-msk": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-msk/-/aws-msk-1.129.0.tgz", + "integrity": "sha512-TdN7H+XwnDnE4OAgrJlDEq3VO0v4bS/VN4XwewPwBs0nfXRowxubU2F8v67g8kJXR88DRI7HnLjYEd4JVcXl7Q==", + "dependencies": { + "@aws-cdk/aws-acmpca": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-acmpca": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-servicecatalogappregistry": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicecatalogappregistry/-/aws-servicecatalogappregistry-1.107.0.tgz", - "integrity": "sha512-lYKnfkT6zxguqetbcXWVOpwCTqbTt2blgqxwz/0uRdVuiioGg69gJrhHesjyS3tHR0Piy0hpOxTta6jnAAJ0pA==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-mwaa": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mwaa/-/aws-mwaa-1.129.0.tgz", + "integrity": "sha512-5FKkJ73lkbDg7yYjEoX1q35ByrBr8P6GJUtm+toWd/oDa9IcI9EPhQIFO6Bahr3EqvSkEE4FeQNM3sujnO1cSg==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-servicediscovery": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.107.0.tgz", - "integrity": "sha512-o2+oLurX2tEFBbyhAKXe7xboeC5rBaprbDPZWUddlZMZPHuX0KggmV3qUOqMtuiATghOw0xDBGz83AwFc/lXTA==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-neptune": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-neptune/-/aws-neptune-1.129.0.tgz", + "integrity": "sha512-D9DBwA5LaIUFfNrtkqOy4aL6ireVyTDoq0WHVd/AKIIiwj+Tkd7pw2OlQkOak5xW9XmURA3XN87oi1FplW1V0A==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-ses": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ses/-/aws-ses-1.107.0.tgz", - "integrity": "sha512-HfnoW6j/wDaznoYAfii6Z/CrhFBm9bi2aQJCluFhjGhdoeHuBds4V/3MuVZCn/hRavl65iocW6LZivBFgCF0jA==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-networkfirewall": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-networkfirewall/-/aws-networkfirewall-1.129.0.tgz", + "integrity": "sha512-cp0Bk5V+jHSgvukpq8t4w9gMVMYVgWVBrge3VXP62GoGFMfW29IcJFNGjio/iOR6AVyPazSiT5XpUEeH/2Ta5A==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-signer": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-signer/-/aws-signer-1.107.0.tgz", - "integrity": "sha512-1n23akqOg8osrcPcrzoZybVyA9fgWV/VzFcaSOLTUh3zxrtb5UvKdeIwMLMEaNXoyOb1PsdEwfr+0B7GB5+l3g==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-networkmanager": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-networkmanager/-/aws-networkmanager-1.129.0.tgz", + "integrity": "sha512-Ip0X7h7drm5RPhScxD0uvdztXsAm5SZYPF+RH3ASBSzv4IESls4EexWdFoGBznpBQwgyaEfGq0jhLrBu+G4Nag==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-sns": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.107.0.tgz", - "integrity": "sha512-EjRmqiP+xNbP3tZDOSOw2CtiZ56liaaFuJhccLOJTtfDKxhNN5reUdjlsU7GbteJt0ssSN2u/iU3jRXOFX8KHQ==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-nimblestudio": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-nimblestudio/-/aws-nimblestudio-1.129.0.tgz", + "integrity": "sha512-K7XnwXfgaHPi9fvYJunQ/zq85Ci5DQr5Q59IOuZRVJzfUUKRW5oG0J1fuSLoPLgmezzcDlZNak1iulgOh8QjIw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" + } + }, + "node_modules/@aws-cdk/aws-opensearchservice": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-opensearchservice/-/aws-opensearchservice-1.129.0.tgz", + "integrity": "sha512-Qu4I7i5biiq3HeLsbaK+43OFAsaFrSakzhSGR7lEh5D0GF9pAWbnEtmBTBmqQ6UjJXPwvtqNa2KfG6TZ71l3yA==", + "dependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-sns-subscriptions": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.107.0.tgz", - "integrity": "sha512-6ez7EMXmxip6YxT1JmE9obbF6wzgxCAUGCJkZZQId0jT320CX+oiEdCtxut1MWC2CV6ggLYNSDs+5GJVb030kQ==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-opsworks": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-opsworks/-/aws-opsworks-1.129.0.tgz", + "integrity": "sha512-wGieXhsnby8SEvfxQmHsRv0CFzRaXCzlH81BLeuFc5EVzNtthK6GBp/ueLqjyMEKumeZcolybaIeffuO4bD6aA==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-sqs": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.107.0.tgz", - "integrity": "sha512-dcap+XhKRd/5TGy8GWSlZ+vj5iXDrYrlQROnlW5026bXCQDFvYpBO3VoSY8Pyai3VjHJUEU7DKfpkbjl7rxUpA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-opsworkscm": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-opsworkscm/-/aws-opsworkscm-1.129.0.tgz", + "integrity": "sha512-YM8xY9acre4UdMvoDYdZ1VXz5C4lGfPoIJU6OyJQPkqJlFYAfuqPaDN2Aw0SjXxIwN8LbOF8P5tQhKrBT6UGRw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-ssm": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.107.0.tgz", - "integrity": "sha512-nhRLAVt8IxRAiUiTj8V9YsDRkykuwq1QlKvXglgChFkd7wtWx7JSBragp5q8rKsLzCYqqWNJ/Ofd7CQlEQamPQ==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-pinpoint": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-pinpoint/-/aws-pinpoint-1.129.0.tgz", + "integrity": "sha512-cTj+pmiSjhgfcG65jzsm/N4seo07TIop6ubWogkuxk59cNkqtoKBgs+QkhA5uW2zvr05mh5+rDcQQDltwR0uBQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-ssmcontacts": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssmcontacts/-/aws-ssmcontacts-1.107.0.tgz", - "integrity": "sha512-PCYlv9NCPvTmPDvlNIqhuawS5CznY+01zXIraINxW1bb/fY7zL5xNGroXgoph0Rpf7GN3O1X1ELpYnr2wNDrOg==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-pinpointemail": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-pinpointemail/-/aws-pinpointemail-1.129.0.tgz", + "integrity": "sha512-vbVJIgBH4dQPGNlGHO7f4GKQo/4JFll52Vokt9ULkq8GAdP5WOT6uEuSLTNaPQWIGA18LaV1WJmYl/lTtS0UNQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-ssmincidents": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssmincidents/-/aws-ssmincidents-1.107.0.tgz", - "integrity": "sha512-K5HaWw4vJ4isjVELuPCQsDPHpm8DS+IvxdBpDIEVheD36uPqVr1XcN0klqOO21L1tR7YfyYE7rsEiZogYrtpEA==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-qldb": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-qldb/-/aws-qldb-1.129.0.tgz", + "integrity": "sha512-YV5FfqHtYU6+rpz8t9aPbk4RpZXxWIX51FX+qZT+/la9mlHu8h/Csi/uwMutrWCtstKfpnlR6FCYJoWy1ZI/eg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-sso": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sso/-/aws-sso-1.107.0.tgz", - "integrity": "sha512-yABcNqtoMsznSlrnGhzPPr2RSp6aalYS0bVrKMZ0/4KvWz/kCmffLg9FB5XKoy+ThoEAh5hrz+ZJbEtmX15s/A==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-quicksight": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-quicksight/-/aws-quicksight-1.129.0.tgz", + "integrity": "sha512-+COCy3UDRTogCZCIBrpvx41q1kBuHtCTgRoxjrC9oA0Z9OK5CbzfcYTrNG1hYrjuAC+J8a/63vLkQ2Zzc1HxtQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-stepfunctions": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.107.0.tgz", - "integrity": "sha512-BxH+DRKLI/5JJZXuUWVrycnscW9I42mZZtiOyiAtEK0Fuuva4fhDt3u9Xn0j+s6Ehc4TG5r5EPC1PG32HzLFXA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-ram": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ram/-/aws-ram-1.129.0.tgz", + "integrity": "sha512-xKpw3J+GeKZG4f5z3X7vhb9VhOK/fTNY7214Hl+3x71UaunU0zQv6DuFd8YUhQUu2MdXn28FWDJl6N2tQftfRQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-synthetics": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-synthetics/-/aws-synthetics-1.107.0.tgz", - "integrity": "sha512-JhZHMH5o8Omuk7b6qsQicteqDuymeO1WYOuJ6phMfr4mNN3K/L+pbeNevvaO5C5v6lXWVHd2X9hxQgn0kNgWOA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-rds": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-rds/-/aws-rds-1.129.0.tgz", + "integrity": "sha512-Vuvxkg3Ga7UfaEQ2iFxYCNKOWv0vwxjFiHqw+4Hc/lB4yq8Mq3OhBlfsQQySgnN3x0TdT+MIVWOibW5HzVgT3g==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-timestream": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-timestream/-/aws-timestream-1.107.0.tgz", - "integrity": "sha512-2cotGqu+VFtOzYDXgAfCp9Is1snMWQub+mtkFEl2QwIohkF3V91G0hqhVuvhaUJGJ9zv3pPV3fYiq6sPebJVVQ==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-redshift": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-redshift/-/aws-redshift-1.129.0.tgz", + "integrity": "sha512-kgpcaCDYMnOf9LriE2QSFnGssNzHsOk8qYAoJqL99cP1cmvx35biE1VH6xERV4kMeQigFNKAcrkhrPBcAliTLQ==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" } }, - "@aws-cdk/aws-transfer": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-transfer/-/aws-transfer-1.107.0.tgz", - "integrity": "sha512-EiXJvz5iOvXjfvaOEoj0GN9Moew4xJ9KM+QgAEdFjxpDnVKk1m7UKr5+uwo8yer89bzRhdLIfD6u8mzwSE4j9w==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-resourcegroups": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-resourcegroups/-/aws-resourcegroups-1.129.0.tgz", + "integrity": "sha512-+5mllKzZ0VXIPt8VZbnxYb/ps9kjJIPkO1RlyaZIEGYbjyJhhL+VnCc/fB92y0Pr6B/Q4l24nKCn2sRvoiF+Mw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-waf": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-waf/-/aws-waf-1.107.0.tgz", - "integrity": "sha512-xAyJFOnPxITGlUVkiQeVI69cJ0Co2SYio+S+iP0xo1MOO6BSlsbqTaiJ4PoraVnQhVfIkKt9FH/cOWI8czaMHQ==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-robomaker": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-robomaker/-/aws-robomaker-1.129.0.tgz", + "integrity": "sha512-7ysjniB33YW5QKeuVN9bbxJvxRnIHZTHZZWwjh0zws3M5wG+ZCbGYez+JO1hBSBbgLQT/dG5eP5h8h4aRixkHg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-wafregional": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-wafregional/-/aws-wafregional-1.107.0.tgz", - "integrity": "sha512-FnnsuurUsHOMYNU3k+u6/blH0H83NwzMwbC1W1r9P65wBrkBtdck6NgLTl861qURYvzF6vt+8qKIMumm9bgQvw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-route53": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.129.0.tgz", + "integrity": "sha512-ogAqoOTFV5ppk/S6lYmgTLw6ds1kLZZxKy9a9t32RqHCdSJpzuRKkW4jLutNVK605DBqiK3mXBuKRGCz19Z67Q==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-wafv2": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-wafv2/-/aws-wafv2-1.107.0.tgz", - "integrity": "sha512-c2ji+yihHf5Rp0KgOuVh7x7bIY/GnEzrydjevAu9kbW54t5XSFhFAXvK1qU2WNOqpfiRZm4LvFVU856APWs4lw==", - "requires": { - "@aws-cdk/core": "1.107.0", + "node_modules/@aws-cdk/aws-route53-targets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.129.0.tgz", + "integrity": "sha512-O5ZWusz7593VEBb2WaUZvtwaUof5Cwf2AdmQDz9yyD/hBFw+2YlC2uVwqoeuZIyQ6ildSkgSU3f+g8IhYt7cXQ==", + "dependencies": { + "@aws-cdk/aws-apigateway": "1.129.0", + "@aws-cdk/aws-cloudfront": "1.129.0", + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-globalaccelerator": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-apigateway": "1.129.0", + "@aws-cdk/aws-cloudfront": "1.129.0", + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-globalaccelerator": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", "constructs": "^3.3.69" } }, - "@aws-cdk/aws-workspaces": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-workspaces/-/aws-workspaces-1.107.0.tgz", - "integrity": "sha512-TvTqCcNfpv58nMjQK8E5JOJ+K91SR3TL+lUPC4Wv92nCxJR0VJoahqVSl8An9clsRJrico4l8fYxJQhFShVlmA==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" + "node_modules/@aws-cdk/aws-route53recoverycontrol": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53recoverycontrol/-/aws-route53recoverycontrol-1.129.0.tgz", + "integrity": "sha512-bRZ7vUS5QC/z+oMOj8n05r1Mdx7s7omI7ySqbAr3ZWwu/34qu3pK4swXdbT1w58yGBGHzo44To29JCa6sU0ehQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" } }, - "@aws-cdk/aws-xray": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-xray/-/aws-xray-1.107.0.tgz", - "integrity": "sha512-Hal723YSeKXBQbLz+1zsniC2A3FSt6bD93VnZq5MBRoOCms1XCmpjDIkmbvqZICIkI33otaW+DfOhgaBxI1COw==", - "requires": { - "@aws-cdk/core": "1.107.0" + "node_modules/@aws-cdk/aws-route53recoveryreadiness": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53recoveryreadiness/-/aws-route53recoveryreadiness-1.129.0.tgz", + "integrity": "sha512-fNF7rUaOOCsi7ejZMLl/yt9/xKqTJagApTOIcMM1Ef8bqio6IUdgdXWd+pcNumzLUZy8JstSWeBHGfLlZp/fKQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" + } + }, + "node_modules/@aws-cdk/aws-route53resolver": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53resolver/-/aws-route53resolver-1.129.0.tgz", + "integrity": "sha512-0XZbLniyTHIeCPIKNp3GuPQmS4KcfSeyHfvoE8mE6WhcPaZu/WhpfAsg+enPjuSVFhlWOkvdqYFA6nUa6tHCwA==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-s3": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.129.0.tgz", + "integrity": "sha512-8Ql9P16HfR1qeWcSp+I5eScD6q/gOtcioQqPlRowFOany5E563w01x9ghKurGQLVgYOZWQKvYWHxFs0vDeXPUw==", + "dependencies": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-s3-assets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.129.0.tgz", + "integrity": "sha512-klFuPAaSQs6qC7EB3QN7lqHu8MN4H6JxNcCl21ce3/jwQvqMDsNObrv5nPt2aQkiLlbCcr4ukZC5EsMA4+mguA==", + "dependencies": { + "@aws-cdk/assets": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/assets": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-s3objectlambda": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3objectlambda/-/aws-s3objectlambda-1.129.0.tgz", + "integrity": "sha512-aXuVpBD4cm04A2Lmmmb065jim5bmt69SjW2Lm3yU42XZGhj5y14PcjpKZTJ3rgVd3/OzQo50h4DwmAmuVwgW2w==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" + } + }, + "node_modules/@aws-cdk/aws-s3outposts": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3outposts/-/aws-s3outposts-1.129.0.tgz", + "integrity": "sha512-oIIaGj954VuNJ/SBzzYZKGC96yADy8yzOUqkpSKPs4niz+y5dr03qZly0UaztSa80fwaTL6zCzF9uso/UqX8NA==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" + } + }, + "node_modules/@aws-cdk/aws-sagemaker": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sagemaker/-/aws-sagemaker-1.129.0.tgz", + "integrity": "sha512-fQvtriSgIYt0kGrHV7mIWAsaQseQqbh+VBrSdPx+1ygF28zsGUo/r1dzKOqnNnqZ7De6PC906MBy4s9FoXdejQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-sam": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.129.0.tgz", + "integrity": "sha512-Rwc/btRuitpYov6no2LU07CzLVSrTEy+O59Wz+hriXz5NVdyv0qg9GjnyFvyOGuFHjrduZS/Mij+u1kgK7/Mcw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-sdb": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sdb/-/aws-sdb-1.129.0.tgz", + "integrity": "sha512-lSaQmjli6TisFzbcSIfGWiXNddSjUyvQqQNNeT97kNLpZUpHb0gfyTh3ijSD/xIh8kq0GHqN4/j/XZTkp6gRRw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-secretsmanager": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.129.0.tgz", + "integrity": "sha512-CTh52Haq0mKbVIWe2jJU2LkTq0ZQnKfvtatzv25W/Y+g3HktX4Aj6V+ph9c0hnT/uZRQpZ2Y3HdZw2ZdsrfWLw==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-securityhub": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-securityhub/-/aws-securityhub-1.129.0.tgz", + "integrity": "sha512-cne3LGNKBGunEc/Fh3MMajnHTHUPBhYal7+v0S5tVlx1xoGX/9dEXZ45NWz5RRe4K9dAgdXIKvG2/f53pTG2VQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-servicecatalog": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicecatalog/-/aws-servicecatalog-1.129.0.tgz", + "integrity": "sha512-fdhJ7g98Rdaw8L8xU1JmqNPjeRgoX0H+2J19Kw4YN7yWtE7GLuY8+EP5GoGAd97MIoRuBuIJqaE68wF1SNqTmg==", + "dependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-servicecatalogappregistry": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicecatalogappregistry/-/aws-servicecatalogappregistry-1.129.0.tgz", + "integrity": "sha512-NNyfEHm/NFJQe5TW153Z+MIqjWsV3dkXzJNnZU6GI6rKjE/pvStl/yRqDdRvUBBLN5PYtIdPWwxc1pLuyU2HeA==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-servicediscovery": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.129.0.tgz", + "integrity": "sha512-sZ3PuQx14ZJXpYiC+3QLxXnb4x7eptShavERptMxZXAhHsS9K6NDJ6idSPfaNwp0jMglAanLMVeKxbjl6fIfLg==", + "dependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-ses": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ses/-/aws-ses-1.129.0.tgz", + "integrity": "sha512-mj3UBRovPTmTgMtA8TXVBtFW4YsAJ4FJ5hKMVR06uWC3K+JfTNunlTKrHVtu7MCfAnTjvfs5lra8dNPjyUs7Jg==", + "dependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-signer": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-signer/-/aws-signer-1.129.0.tgz", + "integrity": "sha512-5ocJJQO06u9k9Q6NHDOko8rVGLwNi90Sv7RYNd3wA8NFNpS+kI5W65XqVPcAS7NtjKlAr4VYMSpbCpGRfisEOg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-sns": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.129.0.tgz", + "integrity": "sha512-17TiuAYY8ELrlPfrkEhJH7BPvviIADLWd3SuU6ViXTNXA89DkRVw7j5SWb5xeTgcN1PwP6tBgOekGKsr6W+6lw==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-sns-subscriptions": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.129.0.tgz", + "integrity": "sha512-YxkpWrARLi3/3t6Ogcwi1d+6z7F1w97v+k5adfDzG173j8r68U0qMpwsv2lSpmw6cPJOpDTCZ/pXXAXESVkgcg==", + "dependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-sqs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.129.0.tgz", + "integrity": "sha512-DyqQr1RbviDvXqOjtKr1bM0cBrmv05PvQf7U5GNw+BRsFIy7S97F58FFaKrVF1RhVPD9P/DwY3s2LJ/K0/13fA==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-ssm": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.129.0.tgz", + "integrity": "sha512-cderNJdbnomX3QqNuEANtBVJVqlPL2tLvwjfimrkWXl6iWllt69sm8QHscclUKuWv+DsescdGShVFY9DzViBYg==", + "dependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-ssmcontacts": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssmcontacts/-/aws-ssmcontacts-1.129.0.tgz", + "integrity": "sha512-Ro2M3ovYcBAI2K8C5FTwaR4FGh48fBvPW0dZP1AHo177B7uBw/D4rYA6Ce1Ynat7RhbBkgSGw3XVlEDtLiEYiw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" + } + }, + "node_modules/@aws-cdk/aws-ssmincidents": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssmincidents/-/aws-ssmincidents-1.129.0.tgz", + "integrity": "sha512-vqft1KmN78nGFwsHuVnk0gO40Y4A/Uui+kPBisDWUTgsbi2IeNj66fcyL5YRP1VpJrGpfeGeAD+T28WpldSfJg==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" + } + }, + "node_modules/@aws-cdk/aws-sso": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sso/-/aws-sso-1.129.0.tgz", + "integrity": "sha512-vh1KEjHEE98efjZHzoYfT2Zp3UB552y6nNHpZN70JaGgiAfQaKzQqEalM/UEoVZZWrKh2iQbiPNwEZO6qSc56A==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" + } + }, + "node_modules/@aws-cdk/aws-stepfunctions": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.129.0.tgz", + "integrity": "sha512-8OdzcUd1pIE1Xqj8rya5ninPum/SqlxVigwkTEVjDNMA9tJJ1fqVzXS6OgaP27FESjZT5o4WbCGIvmUyIuTH2w==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-synthetics": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-synthetics/-/aws-synthetics-1.129.0.tgz", + "integrity": "sha512-B6q47HkXX2SAGFjz1JVu0JnU4Vfb50q5JdrAx1Jt/Zxj4Wa2pvSWX/2i4NenAbrXvGhxQbr+1jv73jTry+l/dA==", + "dependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-timestream": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-timestream/-/aws-timestream-1.129.0.tgz", + "integrity": "sha512-VI6ye/PTBAhtLsJsD5QijAkgLHbW+2HDOydtyOZlStzfW2wJh0Cq+SI+6pKADp3d2Lt+saVSxlYjfYkS2nCsAQ==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" + } + }, + "node_modules/@aws-cdk/aws-transfer": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-transfer/-/aws-transfer-1.129.0.tgz", + "integrity": "sha512-sPr5ztZbqINgImB4ASsAM9mgz5J4C0f2O5QuTf2D9tBv33HUIufTdb2KotGwhHiWvZjX7kC1dpr/jqGzEh9uEA==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-waf": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-waf/-/aws-waf-1.129.0.tgz", + "integrity": "sha512-j/3SOLSisvIwjC2p3nBttlxuf+rqg1aFhBZwWkMl45gl/aYRHPFG1x9AAjJbUME39Hij63UHgAGpue+CICJP5A==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-wafregional": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-wafregional/-/aws-wafregional-1.129.0.tgz", + "integrity": "sha512-Ha0Z+ENMizko8cn8iPBiieKHZfuNhEzWkqhA3ilRfIJvAsy0BG77ziEeOSdlxJ3RDTWjSocf7R4XRYlC5eo8fw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-wafv2": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-wafv2/-/aws-wafv2-1.129.0.tgz", + "integrity": "sha512-j8zvAUEVX0npXfTx7kUc9cCSaqUClep9YcOKxCJPy336Y/4IufogoQp0GCzwTcTDQ/bGFAqj7NUHSP2RMtu9tw==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-workspaces": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-workspaces/-/aws-workspaces-1.129.0.tgz", + "integrity": "sha512-hrQYpDXnOsWpPN+V4rHIu72uYKers5yNgrV8apZUtm0MCeFoiSi/RNCsN4IZA1N8wUcOHqF1gKNdo6BeswVubg==", + "dependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/aws-xray": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-xray/-/aws-xray-1.129.0.tgz", + "integrity": "sha512-TgTjDaWU2iiCAeECH2gialcK4Ogcx0NAE2UHEXjaZJ6ttwXipPoZOxZlillrS6o7G8xX6n6L3yEq0cb3HJ3Kuw==", + "dependencies": { + "@aws-cdk/core": "1.129.0" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/core": "1.129.0" + } + }, + "node_modules/@aws-cdk/cfnspec": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.129.0.tgz", + "integrity": "sha512-0WsNvuF0Lem/TpcjxvVN4VrZpvdXPJQVI38qVvm6+tiKj2h6qaOaY0luxZntccTbX43S7wo54tHy5qOl8lDBMw==", + "dependencies": { + "fs-extra": "^9.1.0", + "md5": "^2.3.0" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.129.0.tgz", + "integrity": "sha512-1GRxfRrC6p+Jafl12ALkzJ+sV47pM3V8MMQNDQS5XFl7M3+x7kScwYBSNptjC0H6VxywVksN5AMzlY4FXEyV1Q==", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "dependencies": { + "jsonschema": "^1.4.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { + "version": "1.4.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { + "version": "7.3.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/@aws-cdk/cloudformation-diff": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.129.0.tgz", + "integrity": "sha512-1Wbp03YLXnkFyVafjhwYWUJa+qlkdBuzzKJKbTz6gjApl4+0uUPI2m0IeqgOVEmqyAuSErvcTPWSI8ZmjzjQ5g==", + "dependencies": { + "@aws-cdk/cfnspec": "1.129.0", + "@types/node": "^10.17.60", + "colors": "^1.4.0", + "diff": "^5.0.0", + "fast-deep-equal": "^3.1.3", + "string-width": "^4.2.3", + "table": "^6.7.2" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + } + }, + "node_modules/@aws-cdk/cloudformation-diff/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, + "node_modules/@aws-cdk/cloudformation-include": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-include/-/cloudformation-include-1.129.0.tgz", + "integrity": "sha512-WgK2bmmV/aW3EdBj+6UWqklhBnYGvphbthKdf55kmgjb6q2kkskxw2Em0Rs4bMTVkFxJ7YpcWMWDnvGgpi1JRA==", + "bundleDependencies": [ + "yaml" + ], + "dependencies": { + "@aws-cdk/alexa-ask": "1.129.0", + "@aws-cdk/aws-accessanalyzer": "1.129.0", + "@aws-cdk/aws-acmpca": "1.129.0", + "@aws-cdk/aws-amazonmq": "1.129.0", + "@aws-cdk/aws-amplify": "1.129.0", + "@aws-cdk/aws-apigateway": "1.129.0", + "@aws-cdk/aws-apigatewayv2": "1.129.0", + "@aws-cdk/aws-appconfig": "1.129.0", + "@aws-cdk/aws-appflow": "1.129.0", + "@aws-cdk/aws-appintegrations": "1.129.0", + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-applicationinsights": "1.129.0", + "@aws-cdk/aws-appmesh": "1.129.0", + "@aws-cdk/aws-apprunner": "1.129.0", + "@aws-cdk/aws-appstream": "1.129.0", + "@aws-cdk/aws-appsync": "1.129.0", + "@aws-cdk/aws-aps": "1.129.0", + "@aws-cdk/aws-athena": "1.129.0", + "@aws-cdk/aws-auditmanager": "1.129.0", + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-autoscalingplans": "1.129.0", + "@aws-cdk/aws-backup": "1.129.0", + "@aws-cdk/aws-batch": "1.129.0", + "@aws-cdk/aws-budgets": "1.129.0", + "@aws-cdk/aws-cassandra": "1.129.0", + "@aws-cdk/aws-ce": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-chatbot": "1.129.0", + "@aws-cdk/aws-cloud9": "1.129.0", + "@aws-cdk/aws-cloudfront": "1.129.0", + "@aws-cdk/aws-cloudtrail": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codeartifact": "1.129.0", + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-codedeploy": "1.129.0", + "@aws-cdk/aws-codeguruprofiler": "1.129.0", + "@aws-cdk/aws-codegurureviewer": "1.129.0", + "@aws-cdk/aws-codepipeline": "1.129.0", + "@aws-cdk/aws-codestar": "1.129.0", + "@aws-cdk/aws-codestarconnections": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-config": "1.129.0", + "@aws-cdk/aws-connect": "1.129.0", + "@aws-cdk/aws-cur": "1.129.0", + "@aws-cdk/aws-customerprofiles": "1.129.0", + "@aws-cdk/aws-databrew": "1.129.0", + "@aws-cdk/aws-datapipeline": "1.129.0", + "@aws-cdk/aws-datasync": "1.129.0", + "@aws-cdk/aws-dax": "1.129.0", + "@aws-cdk/aws-detective": "1.129.0", + "@aws-cdk/aws-devopsguru": "1.129.0", + "@aws-cdk/aws-directoryservice": "1.129.0", + "@aws-cdk/aws-dlm": "1.129.0", + "@aws-cdk/aws-dms": "1.129.0", + "@aws-cdk/aws-docdb": "1.129.0", + "@aws-cdk/aws-dynamodb": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-eks": "1.129.0", + "@aws-cdk/aws-elasticache": "1.129.0", + "@aws-cdk/aws-elasticbeanstalk": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-elasticsearch": "1.129.0", + "@aws-cdk/aws-emr": "1.129.0", + "@aws-cdk/aws-emrcontainers": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-eventschemas": "1.129.0", + "@aws-cdk/aws-finspace": "1.129.0", + "@aws-cdk/aws-fis": "1.129.0", + "@aws-cdk/aws-fms": "1.129.0", + "@aws-cdk/aws-frauddetector": "1.129.0", + "@aws-cdk/aws-fsx": "1.129.0", + "@aws-cdk/aws-gamelift": "1.129.0", + "@aws-cdk/aws-globalaccelerator": "1.129.0", + "@aws-cdk/aws-glue": "1.129.0", + "@aws-cdk/aws-greengrass": "1.129.0", + "@aws-cdk/aws-greengrassv2": "1.129.0", + "@aws-cdk/aws-groundstation": "1.129.0", + "@aws-cdk/aws-guardduty": "1.129.0", + "@aws-cdk/aws-healthlake": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-imagebuilder": "1.129.0", + "@aws-cdk/aws-inspector": "1.129.0", + "@aws-cdk/aws-iot": "1.129.0", + "@aws-cdk/aws-iot1click": "1.129.0", + "@aws-cdk/aws-iotanalytics": "1.129.0", + "@aws-cdk/aws-iotcoredeviceadvisor": "1.129.0", + "@aws-cdk/aws-iotevents": "1.129.0", + "@aws-cdk/aws-iotfleethub": "1.129.0", + "@aws-cdk/aws-iotsitewise": "1.129.0", + "@aws-cdk/aws-iotthingsgraph": "1.129.0", + "@aws-cdk/aws-iotwireless": "1.129.0", + "@aws-cdk/aws-ivs": "1.129.0", + "@aws-cdk/aws-kendra": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kinesisanalytics": "1.129.0", + "@aws-cdk/aws-kinesisfirehose": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lakeformation": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-licensemanager": "1.129.0", + "@aws-cdk/aws-lightsail": "1.129.0", + "@aws-cdk/aws-location": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-lookoutequipment": "1.129.0", + "@aws-cdk/aws-lookoutmetrics": "1.129.0", + "@aws-cdk/aws-lookoutvision": "1.129.0", + "@aws-cdk/aws-macie": "1.129.0", + "@aws-cdk/aws-managedblockchain": "1.129.0", + "@aws-cdk/aws-mediaconnect": "1.129.0", + "@aws-cdk/aws-mediaconvert": "1.129.0", + "@aws-cdk/aws-medialive": "1.129.0", + "@aws-cdk/aws-mediapackage": "1.129.0", + "@aws-cdk/aws-mediastore": "1.129.0", + "@aws-cdk/aws-memorydb": "1.129.0", + "@aws-cdk/aws-msk": "1.129.0", + "@aws-cdk/aws-mwaa": "1.129.0", + "@aws-cdk/aws-neptune": "1.129.0", + "@aws-cdk/aws-networkfirewall": "1.129.0", + "@aws-cdk/aws-networkmanager": "1.129.0", + "@aws-cdk/aws-nimblestudio": "1.129.0", + "@aws-cdk/aws-opensearchservice": "1.129.0", + "@aws-cdk/aws-opsworks": "1.129.0", + "@aws-cdk/aws-opsworkscm": "1.129.0", + "@aws-cdk/aws-pinpoint": "1.129.0", + "@aws-cdk/aws-pinpointemail": "1.129.0", + "@aws-cdk/aws-qldb": "1.129.0", + "@aws-cdk/aws-quicksight": "1.129.0", + "@aws-cdk/aws-ram": "1.129.0", + "@aws-cdk/aws-rds": "1.129.0", + "@aws-cdk/aws-redshift": "1.129.0", + "@aws-cdk/aws-resourcegroups": "1.129.0", + "@aws-cdk/aws-robomaker": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-route53recoverycontrol": "1.129.0", + "@aws-cdk/aws-route53recoveryreadiness": "1.129.0", + "@aws-cdk/aws-route53resolver": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3objectlambda": "1.129.0", + "@aws-cdk/aws-s3outposts": "1.129.0", + "@aws-cdk/aws-sagemaker": "1.129.0", + "@aws-cdk/aws-sam": "1.129.0", + "@aws-cdk/aws-sdb": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/aws-securityhub": "1.129.0", + "@aws-cdk/aws-servicecatalog": "1.129.0", + "@aws-cdk/aws-servicecatalogappregistry": "1.129.0", + "@aws-cdk/aws-servicediscovery": "1.129.0", + "@aws-cdk/aws-ses": "1.129.0", + "@aws-cdk/aws-signer": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/aws-ssmcontacts": "1.129.0", + "@aws-cdk/aws-ssmincidents": "1.129.0", + "@aws-cdk/aws-sso": "1.129.0", + "@aws-cdk/aws-stepfunctions": "1.129.0", + "@aws-cdk/aws-synthetics": "1.129.0", + "@aws-cdk/aws-timestream": "1.129.0", + "@aws-cdk/aws-transfer": "1.129.0", + "@aws-cdk/aws-waf": "1.129.0", + "@aws-cdk/aws-wafregional": "1.129.0", + "@aws-cdk/aws-wafv2": "1.129.0", + "@aws-cdk/aws-workspaces": "1.129.0", + "@aws-cdk/aws-xray": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69", + "yaml": "1.10.2" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/alexa-ask": "1.129.0", + "@aws-cdk/aws-accessanalyzer": "1.129.0", + "@aws-cdk/aws-acmpca": "1.129.0", + "@aws-cdk/aws-amazonmq": "1.129.0", + "@aws-cdk/aws-amplify": "1.129.0", + "@aws-cdk/aws-apigateway": "1.129.0", + "@aws-cdk/aws-apigatewayv2": "1.129.0", + "@aws-cdk/aws-appconfig": "1.129.0", + "@aws-cdk/aws-appflow": "1.129.0", + "@aws-cdk/aws-appintegrations": "1.129.0", + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-applicationinsights": "1.129.0", + "@aws-cdk/aws-appmesh": "1.129.0", + "@aws-cdk/aws-apprunner": "1.129.0", + "@aws-cdk/aws-appstream": "1.129.0", + "@aws-cdk/aws-appsync": "1.129.0", + "@aws-cdk/aws-aps": "1.129.0", + "@aws-cdk/aws-athena": "1.129.0", + "@aws-cdk/aws-auditmanager": "1.129.0", + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-autoscalingplans": "1.129.0", + "@aws-cdk/aws-backup": "1.129.0", + "@aws-cdk/aws-batch": "1.129.0", + "@aws-cdk/aws-budgets": "1.129.0", + "@aws-cdk/aws-cassandra": "1.129.0", + "@aws-cdk/aws-ce": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-chatbot": "1.129.0", + "@aws-cdk/aws-cloud9": "1.129.0", + "@aws-cdk/aws-cloudfront": "1.129.0", + "@aws-cdk/aws-cloudtrail": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codeartifact": "1.129.0", + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-codedeploy": "1.129.0", + "@aws-cdk/aws-codeguruprofiler": "1.129.0", + "@aws-cdk/aws-codegurureviewer": "1.129.0", + "@aws-cdk/aws-codepipeline": "1.129.0", + "@aws-cdk/aws-codestar": "1.129.0", + "@aws-cdk/aws-codestarconnections": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-config": "1.129.0", + "@aws-cdk/aws-connect": "1.129.0", + "@aws-cdk/aws-cur": "1.129.0", + "@aws-cdk/aws-customerprofiles": "1.129.0", + "@aws-cdk/aws-databrew": "1.129.0", + "@aws-cdk/aws-datapipeline": "1.129.0", + "@aws-cdk/aws-datasync": "1.129.0", + "@aws-cdk/aws-dax": "1.129.0", + "@aws-cdk/aws-detective": "1.129.0", + "@aws-cdk/aws-devopsguru": "1.129.0", + "@aws-cdk/aws-directoryservice": "1.129.0", + "@aws-cdk/aws-dlm": "1.129.0", + "@aws-cdk/aws-dms": "1.129.0", + "@aws-cdk/aws-docdb": "1.129.0", + "@aws-cdk/aws-dynamodb": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-eks": "1.129.0", + "@aws-cdk/aws-elasticache": "1.129.0", + "@aws-cdk/aws-elasticbeanstalk": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-elasticsearch": "1.129.0", + "@aws-cdk/aws-emr": "1.129.0", + "@aws-cdk/aws-emrcontainers": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-eventschemas": "1.129.0", + "@aws-cdk/aws-finspace": "1.129.0", + "@aws-cdk/aws-fis": "1.129.0", + "@aws-cdk/aws-fms": "1.129.0", + "@aws-cdk/aws-frauddetector": "1.129.0", + "@aws-cdk/aws-fsx": "1.129.0", + "@aws-cdk/aws-gamelift": "1.129.0", + "@aws-cdk/aws-globalaccelerator": "1.129.0", + "@aws-cdk/aws-glue": "1.129.0", + "@aws-cdk/aws-greengrass": "1.129.0", + "@aws-cdk/aws-greengrassv2": "1.129.0", + "@aws-cdk/aws-groundstation": "1.129.0", + "@aws-cdk/aws-guardduty": "1.129.0", + "@aws-cdk/aws-healthlake": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-imagebuilder": "1.129.0", + "@aws-cdk/aws-inspector": "1.129.0", + "@aws-cdk/aws-iot": "1.129.0", + "@aws-cdk/aws-iot1click": "1.129.0", + "@aws-cdk/aws-iotanalytics": "1.129.0", + "@aws-cdk/aws-iotcoredeviceadvisor": "1.129.0", + "@aws-cdk/aws-iotevents": "1.129.0", + "@aws-cdk/aws-iotfleethub": "1.129.0", + "@aws-cdk/aws-iotsitewise": "1.129.0", + "@aws-cdk/aws-iotthingsgraph": "1.129.0", + "@aws-cdk/aws-iotwireless": "1.129.0", + "@aws-cdk/aws-ivs": "1.129.0", + "@aws-cdk/aws-kendra": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kinesisanalytics": "1.129.0", + "@aws-cdk/aws-kinesisfirehose": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lakeformation": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-licensemanager": "1.129.0", + "@aws-cdk/aws-lightsail": "1.129.0", + "@aws-cdk/aws-location": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-lookoutequipment": "1.129.0", + "@aws-cdk/aws-lookoutmetrics": "1.129.0", + "@aws-cdk/aws-lookoutvision": "1.129.0", + "@aws-cdk/aws-macie": "1.129.0", + "@aws-cdk/aws-managedblockchain": "1.129.0", + "@aws-cdk/aws-mediaconnect": "1.129.0", + "@aws-cdk/aws-mediaconvert": "1.129.0", + "@aws-cdk/aws-medialive": "1.129.0", + "@aws-cdk/aws-mediapackage": "1.129.0", + "@aws-cdk/aws-mediastore": "1.129.0", + "@aws-cdk/aws-memorydb": "1.129.0", + "@aws-cdk/aws-msk": "1.129.0", + "@aws-cdk/aws-mwaa": "1.129.0", + "@aws-cdk/aws-neptune": "1.129.0", + "@aws-cdk/aws-networkfirewall": "1.129.0", + "@aws-cdk/aws-networkmanager": "1.129.0", + "@aws-cdk/aws-nimblestudio": "1.129.0", + "@aws-cdk/aws-opensearchservice": "1.129.0", + "@aws-cdk/aws-opsworks": "1.129.0", + "@aws-cdk/aws-opsworkscm": "1.129.0", + "@aws-cdk/aws-pinpoint": "1.129.0", + "@aws-cdk/aws-pinpointemail": "1.129.0", + "@aws-cdk/aws-qldb": "1.129.0", + "@aws-cdk/aws-quicksight": "1.129.0", + "@aws-cdk/aws-ram": "1.129.0", + "@aws-cdk/aws-rds": "1.129.0", + "@aws-cdk/aws-redshift": "1.129.0", + "@aws-cdk/aws-resourcegroups": "1.129.0", + "@aws-cdk/aws-robomaker": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-route53recoverycontrol": "1.129.0", + "@aws-cdk/aws-route53recoveryreadiness": "1.129.0", + "@aws-cdk/aws-route53resolver": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3objectlambda": "1.129.0", + "@aws-cdk/aws-s3outposts": "1.129.0", + "@aws-cdk/aws-sagemaker": "1.129.0", + "@aws-cdk/aws-sam": "1.129.0", + "@aws-cdk/aws-sdb": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/aws-securityhub": "1.129.0", + "@aws-cdk/aws-servicecatalog": "1.129.0", + "@aws-cdk/aws-servicecatalogappregistry": "1.129.0", + "@aws-cdk/aws-servicediscovery": "1.129.0", + "@aws-cdk/aws-ses": "1.129.0", + "@aws-cdk/aws-signer": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/aws-ssmcontacts": "1.129.0", + "@aws-cdk/aws-ssmincidents": "1.129.0", + "@aws-cdk/aws-sso": "1.129.0", + "@aws-cdk/aws-stepfunctions": "1.129.0", + "@aws-cdk/aws-synthetics": "1.129.0", + "@aws-cdk/aws-timestream": "1.129.0", + "@aws-cdk/aws-transfer": "1.129.0", + "@aws-cdk/aws-waf": "1.129.0", + "@aws-cdk/aws-wafregional": "1.129.0", + "@aws-cdk/aws-wafv2": "1.129.0", + "@aws-cdk/aws-workspaces": "1.129.0", + "@aws-cdk/aws-xray": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/cloudformation-include/node_modules/yaml": { + "version": "1.10.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@aws-cdk/core": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.129.0.tgz", + "integrity": "sha512-dv+IhyqPbyvgBWGtc1PboCO318PW54llRVyenItt1KxnE5PiGgj/9UFdFi4on+yogRr9GWlNes6OzaLq8+T0xw==", + "bundleDependencies": [ + "fs-extra", + "minimatch", + "@balena/dockerignore", + "ignore" + ], + "dependencies": { + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "@balena/dockerignore": "^1.0.2", + "constructs": "^3.3.69", + "fs-extra": "^9.1.0", + "ignore": "^5.1.8", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/core/node_modules/@balena/dockerignore": { + "version": "1.0.2", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/@aws-cdk/core/node_modules/at-least-node": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@aws-cdk/core/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-cdk/core/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@aws-cdk/core/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-cdk/core/node_modules/fs-extra": { + "version": "9.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-cdk/core/node_modules/graceful-fs": { + "version": "4.2.8", + "inBundle": true, + "license": "ISC" + }, + "node_modules/@aws-cdk/core/node_modules/ignore": { + "version": "5.1.8", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@aws-cdk/core/node_modules/jsonfile": { + "version": "6.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@aws-cdk/core/node_modules/minimatch": { + "version": "3.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@aws-cdk/core/node_modules/universalify": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-cdk/custom-resources": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.129.0.tgz", + "integrity": "sha512-s0lGYzc5/bVOgiLV1rot9p40ZCFuLxwLl7MJjpD36J0OBPsKwO5Wkp86zAyo5bwYzR7SIbqslbma7ZyGmA5Jaw==", + "dependencies": { + "@aws-cdk/aws-cloudformation": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-cloudformation": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/cx-api": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.129.0.tgz", + "integrity": "sha512-3orTh2xAYh2OFtPyabXNKWpyke49Qk7jLjVaT8ZasUL1yJYi9fvqVOcA1sZLtag66l1x+JAheYheTeD7WudjGw==", + "bundleDependencies": [ + "semver" + ], + "dependencies": { + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/cloud-assembly-schema": "1.129.0" + } + }, + "node_modules/@aws-cdk/cx-api/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-cdk/cx-api/node_modules/semver": { + "version": "7.3.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-cdk/cx-api/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/@aws-cdk/lambda-layer-awscli": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-awscli/-/lambda-layer-awscli-1.129.0.tgz", + "integrity": "sha512-Ch6Zc0y4AFT4FhM2GYnzN3jL3vwU7ZkLUTGYifdJEMXlBoqEKyEcuYp9t3ouwgY+35s37jVKIkyqDoeHyc5s9Q==", + "dependencies": { + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/lambda-layer-kubectl": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl/-/lambda-layer-kubectl-1.129.0.tgz", + "integrity": "sha512-9MrXt6gk10uLcWCTU0zLVhKtFPp+KP4m9RPmMP/Qv/bCPd4ebTaHOb4QGwhiE9z5tVuk2vVaysGzl1zCSiT+Fg==", + "dependencies": { + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/lambda-layer-node-proxy-agent": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-node-proxy-agent/-/lambda-layer-node-proxy-agent-1.129.0.tgz", + "integrity": "sha512-VKdFjj0o9Qx5NTimLQ4srEFHbbUVPeNrRB0j4YhhSbguxWAScpKd7Mcv43EACohzTv15h0uHpDaVWQgfd34Gfg==", + "dependencies": { + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + }, + "peerDependencies": { + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "node_modules/@aws-cdk/region-info": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.129.0.tgz", + "integrity": "sha512-4GMx9ipgdDsf8PXR3Jw3vqiFdhdKVEz9oYOjQVfja7zcpOv7ol1WISVG1CBa0vU7QiZk/NpGxArTAs1G1ViKRg==", + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + } + }, + "node_modules/@aws-sdk/service-error-classification": { + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.38.0.tgz", + "integrity": "sha512-/lWkibTVZz2+/CwembYJ+ETMVlwFWF7UBKdwa6xRIbE+sp74c1li1L6d/PU83PolAt86bLTXaKpdpMsj+d1WAg==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.38.0.tgz", + "integrity": "sha512-Opux3HLwMlWb7GIJxERsOnmbHrT2A1gsd8aF5zHapWPPH5Z0rYsgTIq64qgim896XlKlOw6/YzhD5CdyNjlQWg==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "dependencies": { + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "dependencies": { + "@babel/types": "^7.15.6", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", + "dependencies": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "dependencies": { + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "devOptional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "devOptional": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", + "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.0.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz", + "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==", + "dependencies": { + "@jest/types": "^27.2.5", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.3.1", + "jest-util": "^27.3.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz", + "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==", + "dependencies": { + "@jest/console": "^27.3.1", + "@jest/reporters": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.3.0", + "jest-config": "^27.3.1", + "jest-haste-map": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.3.1", + "jest-resolve-dependencies": "^27.3.1", + "jest-runner": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", + "jest-watcher": "^27.3.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz", + "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==", + "dependencies": { + "@jest/fake-timers": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", + "jest-mock": "^27.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz", + "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==", + "dependencies": { + "@jest/types": "^27.2.5", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.3.1", + "jest-mock": "^27.3.0", + "jest-util": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz", + "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==", + "dependencies": { + "@jest/environment": "^27.3.1", + "@jest/types": "^27.2.5", + "expect": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz", + "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^27.3.1", + "jest-resolve": "^27.3.1", + "jest-util": "^27.3.1", + "jest-worker": "^27.3.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/source-map": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", + "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz", + "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==", + "dependencies": { + "@jest/console": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz", + "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==", + "dependencies": { + "@jest/test-result": "^27.3.1", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.3.1", + "jest-runtime": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz", + "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.2.5", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.3.1", + "jest-regex-util": "^27.0.6", + "jest-util": "^27.3.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz", + "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "devOptional": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "devOptional": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "devOptional": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "devOptional": true + }, + "node_modules/@types/babel__core": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cls-hooked": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.3.tgz", + "integrity": "sha512-gNstDTb/ty5h6gJd6YpSPgsLX9LmRpaKJqGFp7MRlYxhwp4vXXKlJ9+bt1TZ9KbVNXE+Mbxy2AYXcpY21DDtJw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz", + "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", + "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", + "dev": true, + "dependencies": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "node_modules/@types/mysql": { + "version": "2.15.19", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.19.tgz", + "integrity": "sha512-wSRg2QZv14CWcZXkgdvHbbV2ACufNy5EgI8mBBxnJIptchv7DBy/h53VMa2jDhyo0C9MO4iowE6z9vF8Ja1DkQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "16.11.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.2.tgz", + "integrity": "sha512-w34LtBB0OkDTs19FQHXy4Ig/TOXI4zqvXS2Kk1PAsRKZ0I+nik7LlMYxckW0tSNGtvWmzB+mrCTbuEjuB9DVsw==" + }, + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.1.0.tgz", + "integrity": "sha512-bekODL3Tqf36Yz8u+ilha4zGxL9mdB6LIsIoMAvvC5FAuWo4NpZYXtCbv7B2CeR1LhI/lLtLk+q4tbtxuoVuCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.1.0", + "@typescript-eslint/scope-manager": "5.1.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.1.0.tgz", + "integrity": "sha512-ovE9qUiZMOMgxQAESZsdBT+EXIfx/YUYAbwGUI6V03amFdOOxI9c6kitkgRvLkJaLusgMZ2xBhss+tQ0Y1HWxA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.1.0", + "@typescript-eslint/types": "5.1.0", + "@typescript-eslint/typescript-estree": "5.1.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.1.0.tgz", + "integrity": "sha512-vx1P+mhCtYw3+bRHmbalq/VKP2Y3gnzNgxGxfEWc6OFpuEL7iQdAeq11Ke3Rhy8NjgB+AHsIWEwni3e+Y7djKA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.1.0", + "@typescript-eslint/types": "5.1.0", + "@typescript-eslint/typescript-estree": "5.1.0", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.1.0.tgz", + "integrity": "sha512-yYlyVjvn5lvwCL37i4hPsa1s0ORsjkauhTqbb8MnpvUs7xykmcjGqwlNZ2Q5QpoqkJ1odlM2bqHqJwa28qV6Tw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.1.0", + "@typescript-eslint/visitor-keys": "5.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.1.0.tgz", + "integrity": "sha512-sEwNINVxcB4ZgC6Fe6rUyMlvsB2jvVdgxjZEjQUQVlaSPMNamDOwO6/TB98kFt4sYYfNhdhTPBEQqNQZjMMswA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.1.0.tgz", + "integrity": "sha512-SSz+l9YrIIsW4s0ZqaEfnjl156XQ4VRmJsbA0ZE1XkXrD3cRpzuZSVCyqeCMR3EBjF27IisWakbBDGhGNIOvfQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.1.0", + "@typescript-eslint/visitor-keys": "5.1.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.1.0.tgz", + "integrity": "sha512-uqNXepKBg81JVwjuqAxYrXa1Ql/YDzM+8g/pS+TCPxba0wZttl8m5DkrasbfnmJGHs4lQ2jTbcZ5azGhI7kK+w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.1.0", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + }, + "node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/async-hook-jl": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", + "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", + "dependencies": { + "stack-chain": "^1.3.7" + }, + "engines": { + "node": "^4.7 || >=6.9 || >=7.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atomic-batcher": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", + "integrity": "sha1-0WkB0QzOxZUWwZe5zNiTBom4E7Q=" + }, + "node_modules/aws-cdk": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.129.0.tgz", + "integrity": "sha512-9Se35i7mtRB2m0gbrdgQmDjFS6NeI+72wsXaOJQg0xMIX+vnl5mXdmCy7SDJEtYUBTz/Db7wcuXJ46t0+rRLyA==", + "dev": true, + "hasShrinkwrap": true, + "dependencies": { + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cloudformation-diff": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "@jsii/check-node": "1.40.0", + "archiver": "^5.3.0", + "aws-sdk": "^2.979.0", + "camelcase": "^6.2.0", + "cdk-assets": "1.129.0", + "colors": "^1.4.0", + "decamelize": "^5.0.1", + "fs-extra": "^9.1.0", + "glob": "^7.2.0", + "json-diff": "^0.5.4", + "minimatch": ">=3.0", + "promptly": "^3.2.0", + "proxy-agent": "^5.0.0", + "semver": "^7.3.5", + "source-map-support": "^0.5.20", + "table": "^6.7.2", + "uuid": "^8.3.2", + "wrap-ansi": "^7.0.0", + "yaml": "1.10.2", + "yargs": "^16.2.0" + }, + "bin": { + "cdk": "bin/cdk" + }, + "engines": { + "node": ">= 10.13.0 <13 || >=13.7.0" + } + }, + "node_modules/aws-cdk/node_modules/@aws-cdk/cfnspec": { + "version": "1.129.0", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0", + "md5": "^2.3.0" + } + }, + "node_modules/aws-cdk/node_modules/@aws-cdk/cloud-assembly-schema": { + "version": "1.129.0", + "dev": true, + "dependencies": { + "jsonschema": "^1.4.0", + "semver": "^7.3.5" + } + }, + "node_modules/aws-cdk/node_modules/@aws-cdk/cloudformation-diff": { + "version": "1.129.0", + "dev": true, + "dependencies": { + "@aws-cdk/cfnspec": "1.129.0", + "@types/node": "^10.17.60", + "colors": "^1.4.0", + "diff": "^5.0.0", + "fast-deep-equal": "^3.1.3", + "string-width": "^4.2.3", + "table": "^6.7.2" + } + }, + "node_modules/aws-cdk/node_modules/@aws-cdk/cx-api": { + "version": "1.129.0", + "dev": true, + "dependencies": { + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "semver": "^7.3.5" + } + }, + "node_modules/aws-cdk/node_modules/@aws-cdk/region-info": { + "version": "1.129.0", + "dev": true + }, + "node_modules/aws-cdk/node_modules/@jsii/check-node": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@jsii/check-node/-/check-node-1.40.0.tgz#49882a61ad1b3a37cd35c35fa1a2301955f1c058", + "integrity": "sha512-rk0hFXxFQR8rDGUfsZT9ua6OufOpnLQWsNFyFU86AvpoKQ0ciw2KlGdWs7OYFnzPq8sQGhSS+iuBrUboaHW3jg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "semver": "^7.3.5" + } + }, + "node_modules/aws-cdk/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + } + }, + "node_modules/aws-cdk/node_modules/ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/aws-cdk/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + } + }, + "node_modules/aws-cdk/node_modules/archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + } + }, + "node_modules/aws-cdk/node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + } + }, + "node_modules/aws-cdk/node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/aws-cdk/node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + } + }, + "node_modules/aws-cdk/node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/async": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8", + "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/aws-sdk": { + "version": "2.1006.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1006.0.tgz#fc2f7e267d19a6297f732e19449461bb944682af", + "integrity": "sha512-lwXAy706+1HVQqMnHaahdeBZZbdu6TWrtTY0ydeG0qanwldTFNMLczwnETTZWYsqNAU+wjl1VzmFdMO4gePLNQ==", + "dev": true, + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, + "node_modules/aws-cdk/node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-cdk/node_modules/aws-sdk/node_modules/buffer/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/aws-sdk/node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/aws-cdk/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/aws-cdk/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/aws-cdk/node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/cdk-assets": { + "version": "1.129.0", + "dev": true, + "dependencies": { + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "archiver": "^5.3.0", + "aws-sdk": "^2.848.0", + "glob": "^7.2.0", + "mime": "^2.5.2", + "yargs": "^16.2.0" + } + }, + "node_modules/aws-cdk/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "node_modules/aws-cdk/node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/cli-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347", + "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=", + "dev": true, + "dependencies": { + "es5-ext": "0.8.x" + } + }, + "node_modules/aws-cdk/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/aws-cdk/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + } + }, + "node_modules/aws-cdk/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/aws-cdk/node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "dev": true, + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "node_modules/aws-cdk/node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + } + }, + "node_modules/aws-cdk/node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + } + }, + "node_modules/aws-cdk/node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/degenerator": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.1.tgz#7ef78ec0c8577a544477308ddf1d2d6e88d51f5b", + "integrity": "sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==", + "dev": true, + "dependencies": { + "ast-types": "^0.13.2", + "escodegen": "^1.8.1", + "esprima": "^4.0.0", + "vm2": "^3.9.3" + } + }, + "node_modules/aws-cdk/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e", + "integrity": "sha1-teMDYabbAjF21WKJLbhZQKcY9H4=", + "dev": true, + "dependencies": { + "heap": ">= 0.2.0" + } + }, + "node_modules/aws-cdk/node_modules/dreamopt": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b", + "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=", + "dev": true, + "dependencies": { + "wordwrap": ">=0.0.2" + } + }, + "node_modules/aws-cdk/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/aws-cdk/node_modules/es5-ext": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab", + "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + } + }, + "node_modules/aws-cdk/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/file-uri-to-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba", + "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "node_modules/aws-cdk/node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "dev": true, + "dependencies": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + } + }, + "node_modules/aws-cdk/node_modules/ftp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/ftp/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/aws-cdk/node_modules/ftp/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/get-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c", + "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "data-uri-to-buffer": "3", + "debug": "4", + "file-uri-to-path": "2", + "fs-extra": "^8.1.0", + "ftp": "^0.3.10" + } + }, + "node_modules/aws-cdk/node_modules/get-uri/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/aws-cdk/node_modules/get-uri/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/get-uri/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "node_modules/aws-cdk/node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/heap": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac", + "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "node_modules/aws-cdk/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "node_modules/aws-cdk/node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + } + }, + "node_modules/aws-cdk/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "node_modules/aws-cdk/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/aws-cdk/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/json-diff": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a", + "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==", + "dev": true, + "dependencies": { + "cli-color": "~0.1.6", + "difflib": "~0.2.1", + "dreamopt": "~0.6.0" + } + }, + "node_modules/aws-cdk/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + } + }, + "node_modules/aws-cdk/node_modules/jsonschema": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2", + "integrity": "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + } + }, + "node_modules/aws-cdk/node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/aws-cdk/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "node_modules/aws-cdk/node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + } + }, + "node_modules/aws-cdk/node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/aws-cdk/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + } + }, + "node_modules/aws-cdk/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/aws-cdk/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "node_modules/aws-cdk/node_modules/pac-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e", + "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4", + "get-uri": "3", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "5", + "pac-resolver": "^5.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "5" + } + }, + "node_modules/aws-cdk/node_modules/pac-resolver": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz#1d717a127b3d7a9407a16d6e1b012b13b9ba8dc0", + "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", + "dev": true, + "dependencies": { + "degenerator": "^3.0.1", + "ip": "^1.1.5", + "netmask": "^2.0.1" + } + }, + "node_modules/aws-cdk/node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/promptly": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8", + "integrity": "sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug==", + "dev": true, + "dependencies": { + "read": "^1.0.4" + } + }, + "node_modules/aws-cdk/node_modules/proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b", + "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.0", + "debug": "4", + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "lru-cache": "^5.1.1", + "pac-proxy-agent": "^5.0.0", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^5.0.0" + } + }, + "node_modules/aws-cdk/node_modules/proxy-agent/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/aws-cdk/node_modules/proxy-agent/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "node_modules/aws-cdk/node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + } + }, + "node_modules/aws-cdk/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "node_modules/aws-cdk/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/aws-cdk/node_modules/readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/aws-cdk/node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + } + }, + "node_modules/aws-cdk/node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "node_modules/aws-cdk/node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "node_modules/aws-cdk/node_modules/socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + } + }, + "node_modules/aws-cdk/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/aws-cdk/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/aws-cdk/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/aws-cdk/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + } + }, + "node_modules/aws-cdk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + } + }, + "node_modules/aws-cdk/node_modules/table": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz#a8d39b9f5966693ca8b0feba270a78722cbaf3b0", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/aws-cdk/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "node_modules/aws-cdk/node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + } + }, + "node_modules/aws-cdk/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/aws-cdk/node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/aws-cdk/node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/vm2": { + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.4.tgz#2e118290fefe7bd8ea09ebe2f5faf53730dbddaa", + "integrity": "sha512-sOdharrJ7KEePIpHekiWaY1DwgueuiBeX/ZBJUPgETsVlJsXuEx0K0/naATq2haFvJrvZnRiORQRubR0b7Ye6g==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/aws-cdk/node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/aws-cdk/node_modules/xml2js/node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "dev": true + }, + "node_modules/aws-cdk/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "node_modules/aws-cdk/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "node_modules/aws-cdk/node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/aws-sdk": { + "version": "2.1013.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1013.0.tgz", + "integrity": "sha512-TXxkp/meAdofpC15goFpNuur7fvh/mcMRfHJoP1jYzTtD0wcoB4FK16GLcny0uDYgkQgZuiO9QYv3Rq5bhGCqQ==", + "hasInstallScript": true, + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/aws-xray-sdk": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/aws-xray-sdk/-/aws-xray-sdk-3.3.3.tgz", + "integrity": "sha512-bGO/HolPGW8N39wUuERbn0GPlwgAmDrgt7nKYXR2ecRq2YauKQOHS8K+kD4aZ6QSZnlP5CrYMmtU6BnMkt3DUQ==", + "dependencies": { + "aws-xray-sdk-core": "3.3.3", + "aws-xray-sdk-express": "3.3.3", + "aws-xray-sdk-mysql": "3.3.3", + "aws-xray-sdk-postgres": "3.3.3" + }, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/aws-xray-sdk-core": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-3.3.3.tgz", + "integrity": "sha512-S8o+ZY12wEnDQolC5RGQ8RHZqezHeV3l/ODqrYOJAlRjT92FDutQkQqTfr+hD1Ia+puIXzL9U7eyVSsKmoI+1w==", + "dependencies": { + "@aws-sdk/service-error-classification": "^3.4.1", + "@aws-sdk/types": "^3.4.1", + "@types/cls-hooked": "^4.3.3", + "atomic-batcher": "^1.0.2", + "cls-hooked": "^4.2.2", + "semver": "^5.3.0" + }, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/aws-xray-sdk-core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/aws-xray-sdk-express": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-express/-/aws-xray-sdk-express-3.3.3.tgz", + "integrity": "sha512-VLDfpWWlYUEqA/f3OWaPHk6lAlONrAbG8ECcCPKT3skhWe8LL3bCDFZJOs08V+3ZgBCjm8iMStlXxnNu+XHevw==", + "dependencies": { + "@types/express": "*" + }, + "engines": { + "node": ">= 10.x" + }, + "peerDependencies": { + "aws-xray-sdk-core": "^3.3.3" + } + }, + "node_modules/aws-xray-sdk-mysql": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-mysql/-/aws-xray-sdk-mysql-3.3.3.tgz", + "integrity": "sha512-BkwrT5Zu+og1nT+g0FgQRpdidKr3g9snTFHsirwbJATO0pmGNuuUjBUMTFyydTTSwa7ocqL9wPsmOmqY9kPZig==", + "dependencies": { + "@types/mysql": "*" + }, + "engines": { + "node": ">= 10.x" + }, + "peerDependencies": { + "aws-xray-sdk-core": "^3.3.3" + } + }, + "node_modules/aws-xray-sdk-postgres": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-postgres/-/aws-xray-sdk-postgres-3.3.3.tgz", + "integrity": "sha512-Fu6+XpkiOgyFiivKj3kppXdYzwGIoijiq1q9FJb/tbxfOLSTHunJpS5WzTuNdzOUJdvTtPDimcE4jjqS+4a5FQ==", + "dependencies": { + "@types/pg": "*" + }, + "engines": { + "node": ">= 10.x" + }, + "peerDependencies": { + "aws-xray-sdk-core": "^3.3.3" + } + }, + "node_modules/babel-jest": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz", + "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==", + "dependencies": { + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^27.2.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.0.4.tgz", + "integrity": "sha512-W6jJF9rLGEISGoCyXRqa/JCGQGmmxPO10TMu7izaUTynxvBvTjqzAIIGCK9USBmIbQAaSWD6XJPrM9Pv5INknw==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", + "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", + "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", + "dependencies": { + "babel-plugin-jest-hoist": "^27.2.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/blea-base-ct-audit": { + "resolved": "usecases/base-ct-audit", + "link": true + }, + "node_modules/blea-base-ct-guest": { + "resolved": "usecases/base-ct-guest", + "link": true + }, + "node_modules/blea-base-standalone": { + "resolved": "usecases/base-standalone", + "link": true + }, + "node_modules/blea-guest-apiapp-sample": { + "resolved": "usecases/guest-apiapp-sample", + "link": true + }, + "node_modules/blea-guest-ecsapp-sample": { + "resolved": "usecases/guest-webapp-sample", + "link": true + }, + "node_modules/bleadeploy": { + "resolved": "tools/cicd", + "link": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browserslist": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz", + "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==", + "dependencies": { + "caniuse-lite": "^1.0.30001271", + "electron-to-chromium": "^1.3.878", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001271", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", + "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "engines": { + "node": "*" + } + }, + "node_modules/ci-info": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==" + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cls-hooked": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", + "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", + "dependencies": { + "async-hook-jl": "^1.7.6", + "emitter-listener": "^1.0.1", + "semver": "^5.4.1" + }, + "engines": { + "node": "^4.7 || >=6.9 || >=7.3 || >=8.2.1" + } + }, + "node_modules/cls-hooked/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/constructs": { + "version": "3.3.161", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.3.161.tgz", + "integrity": "sha512-/27vW3fo0iyb3py4vKI1BduEYmv8vv8uJgLXvI+5F0Jbnn0/E+As2wkGMa7bumhzCd0Ckv/USkAXstGYVXTYQA==", + "engines": { + "node": ">= 12.7.0" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "engines": { + "node": "*" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.878", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz", + "integrity": "sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==" + }, + "node_modules/emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", + "dependencies": { + "shimmer": "^1.2.0" + } + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/esbuild": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.9.tgz", + "integrity": "sha512-8bYcckmisXjGvBMeylp1PRtu21uOoCDFAgXGGF2BR241zYQDN6ZLNvcmQlnQ7olG0p6PRWmJI8WVH3ca8viPuw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.13.9", + "esbuild-darwin-64": "0.13.9", + "esbuild-darwin-arm64": "0.13.9", + "esbuild-freebsd-64": "0.13.9", + "esbuild-freebsd-arm64": "0.13.9", + "esbuild-linux-32": "0.13.9", + "esbuild-linux-64": "0.13.9", + "esbuild-linux-arm": "0.13.9", + "esbuild-linux-arm64": "0.13.9", + "esbuild-linux-mips64le": "0.13.9", + "esbuild-linux-ppc64le": "0.13.9", + "esbuild-netbsd-64": "0.13.9", + "esbuild-openbsd-64": "0.13.9", + "esbuild-sunos-64": "0.13.9", + "esbuild-windows-32": "0.13.9", + "esbuild-windows-64": "0.13.9", + "esbuild-windows-arm64": "0.13.9" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.9.tgz", + "integrity": "sha512-Ty0hKldtjJVLHwUwbKR4GFPiXBo5iQ3aE1OLBar9lh3myaRkUGEb+Ypl74LEKa0+t/9lS3Ev1N5+5P2Sq6UvNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/esbuild-darwin-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.9.tgz", + "integrity": "sha512-Ay0/b98v0oYp3ApXNQ7QPbaSkCT9WjBU6h8bMB1SYrQ/PmHgwph91fb9V0pfOLKK1rYWypfrNbI0MyT2tWN+rQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.9.tgz", + "integrity": "sha512-nJB8chaJdWathCe6EyIiMIqfyEzbuXPyNsPlL3bYRB1zFCF8feXT874D4IHbJ/w8B6BpY3sM1Clr/I/DK8E4ow==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.9.tgz", + "integrity": "sha512-ktaBujf12XLkVXLGx7WjFcmh1tt34tm7gP4pHkhvbzbHrq+BbXwcl4EsW+5JT9VNKl7slOGf4Qnua/VW7ZcnIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.9.tgz", + "integrity": "sha512-vVa5zps4dmwpXwv/amxVpIWvFJuUPWQkpV+PYtZUW9lqjXsQ3LBHP51Q1cXZZBIrqwszLsEyJPa5GuDOY15hzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-linux-32": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.9.tgz", + "integrity": "sha512-HxoW9QNqhO8VW1l7aBiYQH4lobeHq85+blZ4nlZ7sg5CNhGRRwnMlV6S08VYKz6V0YKnHb5OqJxx2HZuTZ7tgQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.9.tgz", + "integrity": "sha512-L+eAR8o1lAUr9g64RXnBLuWZjAItAOWSUpvkchpa6QvSnXFA/nG6PgGsOBEqhDXl9qYEpGI0ReDrFkf8ByapvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.9.tgz", + "integrity": "sha512-DT0S+ufCVXatPZHjkCaBgZSFIV8FzY4GEHz/BlkitTWzUvT1dIUXjPIRPnqBUVa+0AyS1bZSfHzv9hTT4LHz7A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.9.tgz", + "integrity": "sha512-IjbhZpW5VQYK4nVI4dj/mLvH5oXAIf57OI8BYVkCqrdVXJwR8nVrSqux3zJSY+ElrkOK3DtG9iTPpmqvBXaU0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.9.tgz", + "integrity": "sha512-ec9RgAM4r+fe1ZmG16qeMwEHdcIvqeW8tpnpkfSQu9T4487KtQF6lg3TQasTarrLLEe7Qpy+E+r4VwC8eeZySQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.9.tgz", + "integrity": "sha512-7b2/wg8T1n/L1BgCWlMSez0aXfGkNjFuOqMBQdnTti3LRuUwzGJcrhRf/FdZGJ5/evML9mqu60vLRuXW1TdXCg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.9.tgz", + "integrity": "sha512-PiZu3h4+Szj0iZPgvuD2Y0isOXnlNetmF6jMcOwW54BScwynW24/baE+z7PfDyNFgjV04Ga2THdcpbKBDhgWQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ] + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.9.tgz", + "integrity": "sha512-SJKN4Ez+ilY7mu+1gAdGQ9N6dktBfbEkiOAvw+hT7xHrNnTnrTGH0FT4qx9dazB9HX6D04L4PXmVOyynqi+oEQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/esbuild-sunos-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.9.tgz", + "integrity": "sha512-9N0RjZ7cElE8ifrS0nBrLQgBMQNPiIIKO2GzLXy7Ms8AM3KjfLiV2G2+9O0B9paXjRAHchIwazTeOyeWb1vyWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ] + }, + "node_modules/esbuild-windows-32": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.9.tgz", + "integrity": "sha512-awxWs1kns+RfjhqBbTbdlePjqZrAE2XMaAQJNg9dtu+C7ghC3QKsqXbu0C26OuF5YeAdJcq9q+IdG6WPLjvj9w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.9.tgz", + "integrity": "sha512-VmA9GQMCzOr8rFfD72Dum1+AWhJui7ZO6sYwp6rBHYu4vLmWITTSUsd/zgXXmZuHBPkkvxLJLF8XsKFCRKflJA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.9.tgz", + "integrity": "sha512-P/jPY2JwmTpgEPh9BkXpCe690tcDSSo0K9BHTniSeEAEz26kPpqldVa4XDm0R+hNnFA7ecEgNskr4QAxE1ry0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", + "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.3", + "@humanwhocodes/config-array": "^0.6.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^6.0.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz", + "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==", + "dependencies": { + "@jest/types": "^27.2.5", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-regex-util": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz", + "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==", + "dependencies": { + "@jest/core": "^27.3.1", + "import-local": "^3.0.2", + "jest-cli": "^27.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.3.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz", + "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==", + "dependencies": { + "@jest/types": "^27.2.5", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz", + "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==", + "dependencies": { + "@jest/environment": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.3.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "pretty-format": "^27.3.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz", + "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==", + "dependencies": { + "@jest/core": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz", + "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^27.3.1", + "@jest/types": "^27.2.5", + "babel-jest": "^27.3.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-circus": "^27.3.1", + "jest-environment-jsdom": "^27.3.1", + "jest-environment-node": "^27.3.1", + "jest-get-type": "^27.3.1", + "jest-jasmine2": "^27.3.1", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.3.1", + "jest-runner": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", + "micromatch": "^4.0.4", + "pretty-format": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", + "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", + "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz", + "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==", + "dependencies": { + "@jest/types": "^27.2.5", + "chalk": "^4.0.0", + "jest-get-type": "^27.3.1", + "jest-util": "^27.3.1", + "pretty-format": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz", + "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==", + "dependencies": { + "@jest/environment": "^27.3.1", + "@jest/fake-timers": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", + "jest-mock": "^27.3.0", + "jest-util": "^27.3.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz", + "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==", + "dependencies": { + "@jest/environment": "^27.3.1", + "@jest/fake-timers": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", + "jest-mock": "^27.3.0", + "jest-util": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", + "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz", + "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==", + "dependencies": { + "@jest/types": "^27.2.5", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.3.1", + "jest-worker": "^27.3.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz", + "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==", + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^27.3.1", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.3.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "pretty-format": "^27.3.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz", + "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==", + "dependencies": { + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz", + "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.3.1", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz", + "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.2.5", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "pretty-format": "^27.3.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.3.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz", + "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==", + "dependencies": { + "@jest/types": "^27.2.5", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", + "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz", + "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==", + "dependencies": { + "@jest/types": "^27.2.5", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.3.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz", + "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==", + "dependencies": { + "@jest/types": "^27.2.5", + "jest-regex-util": "^27.0.6", + "jest-snapshot": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz", + "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==", + "dependencies": { + "@jest/console": "^27.3.1", + "@jest/environment": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.0.6", + "jest-environment-jsdom": "^27.3.1", + "jest-environment-node": "^27.3.1", + "jest-haste-map": "^27.3.1", + "jest-leak-detector": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-resolve": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-util": "^27.3.1", + "jest-worker": "^27.3.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz", + "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==", + "dependencies": { + "@jest/console": "^27.3.1", + "@jest/environment": "^27.3.1", + "@jest/globals": "^27.3.1", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-mock": "^27.3.0", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^16.2.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", + "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz", + "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.3.1", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.3.1", + "jest-get-type": "^27.3.1", + "jest-haste-map": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-resolve": "^27.3.1", + "jest-util": "^27.3.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.3.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz", + "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==", + "dependencies": { + "@jest/types": "^27.2.5", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz", + "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==", + "dependencies": { + "@jest/types": "^27.2.5", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.3.1", + "leven": "^3.1.0", + "pretty-format": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz", + "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==", + "dependencies": { + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.3.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lint-staged": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.4.tgz", + "integrity": "sha512-aTUqcPDSV05EyKlMT4N5h7tmnevKfAxI3xZkRb+DHfmcFaoCxfxVvpqlLMCVGy3EYle9JYER2nA5zc4eNTkZVQ==", + "dev": true, + "dependencies": { + "cli-truncate": "2.1.0", + "colorette": "^1.4.0", + "commander": "^8.2.0", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "execa": "^5.1.1", + "js-yaml": "^4.1.0", + "lilconfig": "^2.0.3", + "listr2": "^3.12.2", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "3.3.0", + "supports-color": "8.1.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.1.tgz", + "integrity": "sha512-pk4YBDA2cxtpM8iLHbz6oEsfZieJKHf6Pt19NlKaHZZVpqHyVs/Wqr7RfBBCeAFCJchGO7WQHVkUPZTvJMHk8w==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.7", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + } + }, + "node_modules/listr2/node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "dependencies": { + "mime-db": "1.50.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", + "dependencies": { + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + }, + "node_modules/simple-git-hooks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/simple-git-hooks/-/simple-git-hooks-2.6.1.tgz", + "integrity": "sha512-nvqaNfgvcjN3cGSYJSdjwB+tP8YKRCyvuUvQ24luIjIpGhUCPpZDTJ+p+hcJiwc0lZlTCl0NayfBVDoIMG7Jpg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "simple-git-hooks": "cli.js" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/stack-chain": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", + "integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU=" + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/table": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-jest": { + "version": "27.0.7", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.7.tgz", + "integrity": "sha512-O41shibMqzdafpuP+CkrOL7ykbmLh+FqQrXEmV9CydQ5JBk0Sj0uAEF5TNNe94fZWKm3yYvWa/IbyV4Yg1zK2Q==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + } + } + }, + "node_modules/ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "devOptional": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "devOptional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "tools/cicd": { + "version": "1.0.0", + "license": "MIT-0", + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-codebuild": "^1.129.0", + "@aws-cdk/aws-codepipeline": "^1.129.0", + "@aws-cdk/aws-codepipeline-actions": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "source-map-support": "^0.5.19" + }, + "bin": { + "bleadeploy": "bin/bleadeploy.js" + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "aws-cdk": "^1.129.0", + "jest": "^27.0.4", + "ts-jest": "^27.0.3", + "ts-node": "^10.0.0", + "typescript": "~4.4.4" + } + }, + "usecases/base-ct-audit": { + "version": "1.0.0", + "license": "MIT-0", + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/core": "^1.129.0" + }, + "bin": { + "blea-base-ct-audit": "bin/blea-base-ct-audit.js" + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + } + }, + "usecases/base-ct-guest": { + "version": "1.0.0", + "license": "MIT-0", + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-config": "^1.129.0", + "@aws-cdk/aws-events": "^1.129.0", + "@aws-cdk/aws-events-targets": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/core": "^1.129.0" + }, + "bin": { + "blea-base-ct-guest": "bin/blea-base-ct-guest.js" + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + } + }, + "usecases/base-standalone": { + "version": "1.0.0", + "license": "MIT-0", + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudtrail": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-config": "^1.129.0", + "@aws-cdk/aws-events": "^1.129.0", + "@aws-cdk/aws-events-targets": "^1.129.0", + "@aws-cdk/aws-guardduty": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-kms": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-s3": "^1.129.0", + "@aws-cdk/aws-securityhub": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/cloudformation-include": "^1.129.0", + "@aws-cdk/core": "^1.129.0" + }, + "bin": { + "blea-base-sa": "bin/blea-base-sa.js" + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + } + }, + "usecases/guest-apiapp-sample": { + "version": "1.0.0", + "license": "MIT-0", + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-apigateway": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-dynamodb": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-kms": "^1.129.0", + "@aws-cdk/aws-lambda": "^1.129.0", + "@aws-cdk/aws-lambda-nodejs": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "aws-sdk": "^2.1012.0", + "aws-xray-sdk": "^3.3.3" + }, + "bin": { + "blea-guest-apiapp-nodejs-sample": "bin/blea-guest-apiapp-nodejs-sample.js" + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "esbuild": "^0.13.8", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + } + }, + "usecases/guest-webapp-sample": { + "version": "1.0.0", + "license": "MIT-0", + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-autoscaling": "^1.129.0", + "@aws-cdk/aws-certificatemanager": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudfront": "^1.129.0", + "@aws-cdk/aws-cloudfront-origins": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-codebuild": "^1.129.0", + "@aws-cdk/aws-ec2": "^1.129.0", + "@aws-cdk/aws-ecr": "^1.129.0", + "@aws-cdk/aws-ecs": "^1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "^1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2-targets": "^1.129.0", + "@aws-cdk/aws-events": "^1.129.0", + "@aws-cdk/aws-events-targets": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-kms": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-rds": "^1.129.0", + "@aws-cdk/aws-route53": "^1.129.0", + "@aws-cdk/aws-route53-targets": "^1.129.0", + "@aws-cdk/aws-s3": "^1.129.0", + "@aws-cdk/aws-s3-assets": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/aws-synthetics": "^1.129.0", + "@aws-cdk/aws-wafv2": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "@aws-cdk/custom-resources": "^1.129.0", + "@aws-cdk/region-info": "^1.129.0" + }, + "bin": { + "blea-guest-ecsapp-sample": "bin/blea-guest-ecsapp-sample.js" + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + } + } + }, + "dependencies": { + "@aws-cdk/alexa-ask": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/alexa-ask/-/alexa-ask-1.129.0.tgz", + "integrity": "sha512-Gws+afURLMNhdvaDSsz2UsVJ+KmAYqLO2G7SRMMW//s0qWC7JPfU2E0MvHcpLjxXb2bOtM5+c+4rz0+uvh6TFg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/assert": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.129.0.tgz", + "integrity": "sha512-d3IPScg+MnXfiDHF44mkWj/hWt0m4WUbcQrUKi5SBFKcnKkrZk2QiLuowOtwre/zhcAX0bCQYfuZI+yS0yVNHQ==", + "requires": { + "@aws-cdk/cloudformation-diff": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/assets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.129.0.tgz", + "integrity": "sha512-4WwTTTLl/phl69HBcP1oOVOLEn9oR3Tc3E0V8aabsjERaVF47CidnZZWcRPnxC40XJVc8CucKLlALsTPnZecFA==", + "requires": { + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-accessanalyzer": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-accessanalyzer/-/aws-accessanalyzer-1.129.0.tgz", + "integrity": "sha512-1BvPrxrEgGXHobyC5Pa/84VcMYSqLfG0DfKG0QNqJ/2yyvIH7t3BawXAGlV9jAyabwc4x0tkdu/Wnlnld/FDUw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-acmpca": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-acmpca/-/aws-acmpca-1.129.0.tgz", + "integrity": "sha512-59n+tFV119Sqf6JJyGK6F14yeqk5/MvK1mBs/15wk5x4ykxTSk4wXzjE/hpi/ZE2OUnrFFeIsLbfMzHBa8NIug==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-amazonmq": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-amazonmq/-/aws-amazonmq-1.129.0.tgz", + "integrity": "sha512-SX79dt8nHgR0zdP1AbmkJ5zSQdRrb2e2+pJnP4YYW38npza03Hye06wjXy7wcXqQMdD7CrvJBQnZAudSHNHQyQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-amplify": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-amplify/-/aws-amplify-1.129.0.tgz", + "integrity": "sha512-I5Xn5VjG86ikZZ2q06vutZKglzlu+blwOkviGuETKQFY74m7SSV+O29H0u7oWXCwwaAF6atBLh7MXTHGdHe6nQ==", + "requires": { + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-apigateway": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigateway/-/aws-apigateway-1.129.0.tgz", + "integrity": "sha512-8gYFLo1TQscZ6S9Puh9UcqZfJ24LDvSEYbmiGRFQGnbYIh/d1Jvnj1kCWwHveIB6u+vr5l4XLByAsl9h+snziA==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-apigatewayv2": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.129.0.tgz", + "integrity": "sha512-mticPe0PMnmMg3VeortnlCx++qX0HQsiiewqlfctJZzr8QFePu7cWaeIVqceA7xnE/crBs21bi1wR4Oew5GZtg==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-appconfig": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appconfig/-/aws-appconfig-1.129.0.tgz", + "integrity": "sha512-Bqr7wNoDNeFD2WAwsxyfJYuBofzCcHbvdCZQYV59NqDm1P1Tl3YIhD7gttJh8+i0+TmqEGmZJSCors0hjt36+Q==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-appflow": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appflow/-/aws-appflow-1.129.0.tgz", + "integrity": "sha512-VBjGgco8oyMaOhHCs1GhOyTps+eoD7OqGOuXUg8cyl3wvjpxl7nl36/Ko7olbQXI0DhEIxzk4QjDBGVUWman4A==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-appintegrations": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appintegrations/-/aws-appintegrations-1.129.0.tgz", + "integrity": "sha512-tDm0JHTpgTNtv0VBzhlJ8wWCRr2rHg6Bo4mEilWWwW3WTPPSVkvpz26KZ5LeDuyP08CUFYJe46zT/O8oBtKkOw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-applicationautoscaling": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.129.0.tgz", + "integrity": "sha512-YhKgkDRRtT4aMONUVaL97te/K2MkCvCrGNPQzBYJn9WlX/eshlBrlZ1i4eY5DtrXW3mxwT42ynC6Mqq4EfiC7g==", + "requires": { + "@aws-cdk/aws-autoscaling-common": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-applicationinsights": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationinsights/-/aws-applicationinsights-1.129.0.tgz", + "integrity": "sha512-E8rpcvULvG14jHiw173ygOMXuRGjoKKbvL4I3XAAj5PITmOIDuMHWfk/klIUdREk6I9ZfQTZuew9c0nL8iirwQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-appmesh": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appmesh/-/aws-appmesh-1.129.0.tgz", + "integrity": "sha512-jlNHVKnahEn7dxk1lGy5YMiJIdrnyMU0hcXlp3zGCvnF6Qmlr3VN7jrv346rbALOwNo5MLDiznuBkFP10c0pbw==", + "requires": { + "@aws-cdk/aws-acmpca": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-servicediscovery": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-apprunner": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apprunner/-/aws-apprunner-1.129.0.tgz", + "integrity": "sha512-3q5dOv5ff94dfDE8fvP97Y3u7M2TbsdhPd7eGfXbgdbfLGLmR2MH/xzuknB1+iHFGStupa5iI9dG60tEpRbhOw==", + "requires": { + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-appstream": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appstream/-/aws-appstream-1.129.0.tgz", + "integrity": "sha512-bExmyq99oVzMdtP/Yg7WPxkvCrtiLgHHYGtIz906vZubFv/7p82YwdU4MJXsecKcQ7npISd3GIu7i0nqUW3jEw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-appsync": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-appsync/-/aws-appsync-1.129.0.tgz", + "integrity": "sha512-Mkk8+o11dnXcabMHftWDNtdeo/QcTfbLngeuUhuy61bM2JiDJz9kjeGgDf/2hZlJL231vQI6pAP+Uy4gdlxfoA==", + "requires": { + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-dynamodb": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticsearch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-rds": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-aps": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-aps/-/aws-aps-1.129.0.tgz", + "integrity": "sha512-S9xgEEvhjmocKuIbGipFD7dzoO6OsXPBQxBBbaeilnDJl/F4xdm+lgjibtuYKfl1eYZCB1QjvuJ66WSH0bC1GQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-athena": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-athena/-/aws-athena-1.129.0.tgz", + "integrity": "sha512-GeZONPtgRIZv7Pqk3xqTJfskz4Xxmqs2bqfN1EPk59pceiyoiuS0P3hV2nVKcuV4HQMSxFvHZIqkW0cTNlAqew==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-auditmanager": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-auditmanager/-/aws-auditmanager-1.129.0.tgz", + "integrity": "sha512-A9EpZTFaBfsPTADkbPCqUcAXkRNmJm6a3ddwtFh2cL+acfABwBF4moa2NqrqmVUQP89rybM78Gz8Vd8+ZbLbQA==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-autoscaling": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.129.0.tgz", + "integrity": "sha512-JL20xl7AQnhQxbV7tB+x6dZ7LQeNZKJ4rP5CM4aOuBZL0AiTiC1Ca5mCJSXHkn7Ou01Eg0cQOW8ywoISEJTEpw==", + "requires": { + "@aws-cdk/aws-autoscaling-common": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-autoscaling-common": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.129.0.tgz", + "integrity": "sha512-KaCkT7j7vzW8UByZouJ3iU2VZul4BBx8PmptM+OeghNB9fZuwPohT5p2ZP9N9PJEA9k1T2JJshUFgjQcclofdQ==", + "requires": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-autoscaling-hooktargets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.129.0.tgz", + "integrity": "sha512-OHfMs0fh320ybdQiv9AFwd/OnMEeG48Jfw+LXkpUOzpPt0UYIIKajYzTk7RDwu7tprd9fxVoptYOpX8jGpeI+g==", + "requires": { + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sns-subscriptions": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-autoscalingplans": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscalingplans/-/aws-autoscalingplans-1.129.0.tgz", + "integrity": "sha512-DyJvTMp95xBGudlDTr5N7rqYO7PR3ryy9GGpqvYNcBC+ARkETvVD+U+YSmUmwGk3FNZZ/wVJ/3QQZeyCQzVQzg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-backup": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-backup/-/aws-backup-1.129.0.tgz", + "integrity": "sha512-fkZmYqi+4WTSCIWmxtRTmuQNBMK9JZDucU9PpaiO1Rw/qO0AfUJzxBYHot0VlVMeRXu/xL9JJdwydoSZ4Ni+VA==", + "requires": { + "@aws-cdk/aws-dynamodb": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-rds": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-batch": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-batch/-/aws-batch-1.129.0.tgz", + "integrity": "sha512-fmhFm1/OCt3CZPOpP8WVBu6vE+ILB8B2p/kaulSXVgAqGyLHn65D1TGtCJ6gC7j7+Z33ks89cHjZJwkNrW1PqA==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-budgets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-budgets/-/aws-budgets-1.129.0.tgz", + "integrity": "sha512-rB78MClghn8q+5hIkUymU7r+AnP1QLkkjSNxABxpBwRhUdPZIrlCcY2ISS31B+0FrptfcLldTnJFWRbUAYjv7A==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-cassandra": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cassandra/-/aws-cassandra-1.129.0.tgz", + "integrity": "sha512-DvbxrepVAT3MowIC3+zH8lejLET2FBEXs89bUE71QEaZWOMddqsINFtl/IR5r1ULzspuxjkHmuMGfTwETaQgIQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-ce": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ce/-/aws-ce-1.129.0.tgz", + "integrity": "sha512-vhN7zgxHDy2jUEmiE6Vopo1evwzPRI7ToUUGiax7OBplvVooBR5go0xKK4ICkQUe8Bkr2W6jsi2n/IR0GxFHpA==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-certificatemanager": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.129.0.tgz", + "integrity": "sha512-zEVcXGPlsMHDqblnfxDt1rZT6+Gx0fsUzWFenR8NwsGhEX0r8/dydS9HDjl9jJtqCs73C7RaKcGRH/K6UvV47g==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-chatbot": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-chatbot/-/aws-chatbot-1.129.0.tgz", + "integrity": "sha512-bftyJJr02h2fbydXRixVZ+NMSru/wRNLvEp4rhIL0kFRoP1LyOZP3Fuk5bloaMMzTkN8cm2bwx7i1jaBFw7qMg==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-cloud9": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloud9/-/aws-cloud9-1.129.0.tgz", + "integrity": "sha512-qzQyVYyOUvUjkrtnkjrUNmZmiWC/lg5j/UVnRTD9d5XUCrcDQ4HZRCcoBdWyJ9RBg9vR0Xb0nkbPe5uAeGFfZA==", + "requires": { + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-cloudformation": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.129.0.tgz", + "integrity": "sha512-e894qmNaXpflhlmygvb9p5d77FcDuhG7vZosgW8kVF6IvRYAwK1mQ83RhVpbWaaUi5S3HzLR+pJjnCa4zeCJrQ==", + "requires": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-cloudfront": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.129.0.tgz", + "integrity": "sha512-RzIEtCxSY+lKm0csEmJOKU2RVZ7+AvHI9Oo3+55yEmRG9ad7n7NlR/OmSzVRLWFJ5eAiAD9reuBLRGN5L5eVEA==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-cloudfront-origins": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront-origins/-/aws-cloudfront-origins-1.129.0.tgz", + "integrity": "sha512-B94RcDO9YhaKbOm5rcJBAExQgk/cW9hWiY/oUTgZhjP10tu6yBZfEkpDsOTtNojVibm/3IDwB8odV9dFyjFFug==", + "requires": { + "@aws-cdk/aws-cloudfront": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-cloudtrail": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudtrail/-/aws-cloudtrail-1.129.0.tgz", + "integrity": "sha512-e9SnKrxtjB1yLOreLQIGHkt7lR+i7awdxK0U0i8SEHoIW4bbn6vTc38o2XKzP+JBlySIHdvWFs3mnmNzKESjtQ==", + "requires": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-cloudwatch": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.129.0.tgz", + "integrity": "sha512-b5ZLfkbhMe6U36ESucV/4Eja5YIKShrVrSviDozsVFCK1TXAyEvcLCOqx+Uq3JCryytmAYhg/iAf70M+q5mKDQ==", + "requires": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-cloudwatch-actions": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch-actions/-/aws-cloudwatch-actions-1.129.0.tgz", + "integrity": "sha512-gfgZ1QUW7VTLCaNNUh8Fz0T3rYw0USj8ItOe5McbzpN3bQBHcM4aDGMPVGcYKPLkMm84VEyKtlTslBRW1sN1bg==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-codeartifact": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeartifact/-/aws-codeartifact-1.129.0.tgz", + "integrity": "sha512-LBmnNUPYEWktvL7b8b5o3/rveIOPxTc/Uad1DRADnTIUA1JSluBi1HbwV6S/yqZw3RDqqWDby4N5giSx7HqlCA==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-codebuild": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codebuild/-/aws-codebuild-1.129.0.tgz", + "integrity": "sha512-ACYEmXJ8cyoEtnaNHsincDwT10RkNiVh8P6xnE28lr2eQhJR/vf2cr8GUqxfl1//IqPCj95jdNfS5RW0ncx0Zw==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69", + "yaml": "1.10.2" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "bundled": true + } + } + }, + "@aws-cdk/aws-codecommit": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codecommit/-/aws-codecommit-1.129.0.tgz", + "integrity": "sha512-AKF3HccuOKgM69+PZYsOt1dY1mBbHzq79Wn1Bh+Twkjh2iBOkZKf2hdnhT5rS7eCmAHIbSjBHRzkm5LEhaTSaQ==", + "requires": { + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-codedeploy": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codedeploy/-/aws-codedeploy-1.129.0.tgz", + "integrity": "sha512-DZ67pvUgselgEJBsst2Mcd9utdDT9hdCs2K+qEpMb/jrmVEMu07U8RkQ7IrCW0S/PkcKl/lcJD64b6p9BIttvA==", + "requires": { + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-codeguruprofiler": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.129.0.tgz", + "integrity": "sha512-G8ngfNI3UgmM7YRrbqrsd+mQ3F5w9meclDTOW23oNZlGHNsoPhp/vLcL1iyYrWZh9NLE3eMdJmGlZLgQfA/U9A==", + "requires": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-codegurureviewer": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codegurureviewer/-/aws-codegurureviewer-1.129.0.tgz", + "integrity": "sha512-lbddmw5A4jtDXMPSGwKdVqlRe/Y4SMLkDgZTm90c/VHE+RImDpUNcZ9aQajpa0evzHxGZttIqvWOu1FbfifOJw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-codepipeline": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codepipeline/-/aws-codepipeline-1.129.0.tgz", + "integrity": "sha512-l+iKmT1d8VMF1qdJaAFF6f8d/zsj5R44WG6WC7nbVl1ZUNjjJx6Vgi7Wjww8STaUFTWO5w2Hf+Sh3CCrqe5OrQ==", + "requires": { + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-codepipeline-actions": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codepipeline-actions/-/aws-codepipeline-actions-1.129.0.tgz", + "integrity": "sha512-N7OdOhUN5VvQRdLmRfeXrEsOFSOYHLC2OCjJFue9ZEI34iFtWGm3S1bqH/3V0hdH2zRCLSpJ8Z3zZ+jOTIIL6g==", + "requires": { + "@aws-cdk/aws-cloudformation": "1.129.0", + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-codedeploy": "1.129.0", + "@aws-cdk/aws-codepipeline": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-events-targets": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sns-subscriptions": "1.129.0", + "@aws-cdk/aws-stepfunctions": "1.129.0", + "@aws-cdk/core": "1.129.0", + "case": "1.6.3", + "constructs": "^3.3.69" + }, + "dependencies": { + "case": { + "version": "1.6.3", + "bundled": true + } + } + }, + "@aws-cdk/aws-codestar": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestar/-/aws-codestar-1.129.0.tgz", + "integrity": "sha512-MK94m8L6RObFhj3KP/6OM88amWJQDcgGP5itE17hIbfxaVc/UrXVUVIphNl3rEZQmXUuZjx9YqweRFi2ZrxNPg==", + "requires": { + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-codestarconnections": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestarconnections/-/aws-codestarconnections-1.129.0.tgz", + "integrity": "sha512-m1BY/Ah/syY73lZHUP0CSZKTMzxeGDZ8R9zteVBZ3BYH6ibEHptSFXKRl6fmcQXQSuxwkEKVQdJlcax8qzxU7Q==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-codestarnotifications": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codestarnotifications/-/aws-codestarnotifications-1.129.0.tgz", + "integrity": "sha512-D1ZgvPSanMQbQxsu8DMOFJTzDVFTfGcbFhZTm5au6cRGiCGo+WR1zbADn1LaGYNvpGyAUintZvtQTin3asaHVg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-cognito": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.129.0.tgz", + "integrity": "sha512-oNQaneEIfEM6ZSgV8mEQzEqdVmZCsVeT4ye4q11/lD69oSPy4pwXrQj8D0Yffg4iYJKDgfuJWIYNvO59Lw68mQ==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "bundled": true + } + } + }, + "@aws-cdk/aws-config": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-config/-/aws-config-1.129.0.tgz", + "integrity": "sha512-UX0CE97xfikc3v7jWUltP9ne8T3MPzbnpe685j6wB8e2Ad5/HepbvKKXXMwcnwUrJqTo7TX/pIEbIamPuZgPcg==", + "requires": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-connect": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-connect/-/aws-connect-1.129.0.tgz", + "integrity": "sha512-VXVbd15g0vnDX1QPz2y07XiNFuKnokiOm2Dr5x/hPeuyvM+9cjzBu8fGaf7esQ+YY+MS0i6sS9UCHSBlpw33Dg==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-cur": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cur/-/aws-cur-1.129.0.tgz", + "integrity": "sha512-Orl/7Iy5I5/XRD3K4cOwM4auenmP7X7IwPEJwyMVsiTqa9iK/Rq+QOiBnYNy7pGAVpd6ki2GCmtqbTIUomrtmQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-customerprofiles": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-customerprofiles/-/aws-customerprofiles-1.129.0.tgz", + "integrity": "sha512-d+bFkcdK9jbLvR4CDhKMMhxgYoQdMfY22aKggOwGqMNtvMtjtvrnQ6Hfqy470e5onVjMCh2J8i8rN0o4WQblUQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-databrew": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-databrew/-/aws-databrew-1.129.0.tgz", + "integrity": "sha512-x2QeeisbMin0zUv/48UuEJYdiJOdFlPLSJmWQsoHiJ+bmPK7aQrXxokc102zruVlvAhXS7+NPia26miw1r4gCw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-datapipeline": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-datapipeline/-/aws-datapipeline-1.129.0.tgz", + "integrity": "sha512-RBj5LEBwU+8KTDu2VDPFBZ8mBfHiwkymXUxZddMb7NxdP7BlAzfbntzJbUMQBskY5SOPMa2n+8fve7EVdB+okQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-datasync": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-datasync/-/aws-datasync-1.129.0.tgz", + "integrity": "sha512-38azQLhUlI0+ujSRD4/dOz4AUKqp/742fTVPVLYVHYM6C/wN8cssoOjq7TyUMGs+ucHpsnbK2tfYkmT9gfJ1ZQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-dax": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dax/-/aws-dax-1.129.0.tgz", + "integrity": "sha512-qGgrQmIyXwLW2gxmwNWCSP9gd0RRRbF6WTPXvuZRGL5obkhahAB6Lwl2tj28iwbR3LnYenryPq/P05TUZdLzGw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-detective": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-detective/-/aws-detective-1.129.0.tgz", + "integrity": "sha512-KeJN3z6wHnhGUr6zURibw1UM+jWhMtSSGAoAHTXXZIMptIMUmUpLzFdiuy3VHeO2dsME5p2aJGZpK0L1SWDYRA==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-devopsguru": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-devopsguru/-/aws-devopsguru-1.129.0.tgz", + "integrity": "sha512-SCKJjHO47P0YvquaDnnMhrfx8H30BVBMX2Ku6iV4kCA3s0mhu7tFNGsTcznyy5KYBSEhRXo1xTW8dFEx2Ei18A==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-directoryservice": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-directoryservice/-/aws-directoryservice-1.129.0.tgz", + "integrity": "sha512-823bugQik44vp3pCRESFdDmwJrGlX/9SdZIfyTWh9BP4SWCK47tk1noO/nRalQGi3kMMxblEMbBrRh4Ue8yd5A==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-dlm": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dlm/-/aws-dlm-1.129.0.tgz", + "integrity": "sha512-j4WzbCNPVkIKnYQAXDHHtjUN1GgPdad1CPfZEELRjvXj0QtFN2qgYKnEAnWVFcAAnZgy3IWU9mFp4MZY3Dpsgg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-dms": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dms/-/aws-dms-1.129.0.tgz", + "integrity": "sha512-eQpoqE6qkNCAb2aoCd6ZRBGts4eSYs4Emp6+4qRjd3J2rLL5bJlLGyRuT+hj8h0WqDcQ7k1g47LhsPxBMN3guw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-docdb": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-docdb/-/aws-docdb-1.129.0.tgz", + "integrity": "sha512-odPmEg07pFHsijKGCGc5bAD2ugykfXnisA8k/BpcRF/6QJNiMnn2YM/U8S/OKNFuf7BN7vK15JbEgIgSIlwRVQ==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-dynamodb": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.129.0.tgz", + "integrity": "sha512-5dXLRbeRTUUIVeVousEcyrS0sed5WxAVrRavUTnStx9fp+19PZ3ehRsMCBfnBOkv8BqVPxhyeEMEYG6mB2u1oQ==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-ec2": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.129.0.tgz", + "integrity": "sha512-7yLLW4ubbxWOYc+Dwd/Rc6OYNU07DMqgXnWChNjqoQ6dzKo4M8N52OGqVl06Eq7gqtCM+DOVQv3uID/y1Ym/1A==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-ecr": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.129.0.tgz", + "integrity": "sha512-hUiYepHCmvC3u9XphsvZpo2ygiH7AczUOmDbE16kc9U+oPBV/pjfTkBWpkzOcapsU2pfBUm/kc2WMu1DEFU7OQ==", + "requires": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-ecr-assets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.129.0.tgz", + "integrity": "sha512-ejw7e3Pj8IICZxnD8PbHzDUOSKoA9mMtyU+E5VhhgqP0trQQBfYrRm4IL90dPK6ZMepw63vqxaHjklhIAHx53g==", + "requires": { + "@aws-cdk/assets": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69", + "minimatch": "^3.0.4" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.2", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "@aws-cdk/aws-ecs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs/-/aws-ecs-1.129.0.tgz", + "integrity": "sha512-cf2tvdGqt6vQQlo7D0QS14hi+Pn3uEb3OWXFxYPu1EkU85ld/pIRMGKhRKRpzGfzKh34WGkogevYt/e7cvUBNQ==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-autoscaling-hooktargets": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-route53-targets": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/aws-servicediscovery": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-efs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.129.0.tgz", + "integrity": "sha512-L0FxdInKOZQunUskJWT+fGbyUiBvu8IhSRwiWLEg+KjZhkI+vOUIvY57u1nb+U1Ig7rd6vUjKRIPPpqzErjBww==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-eks": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-eks/-/aws-eks-1.129.0.tgz", + "integrity": "sha512-NUKojLM/lc0a/lz+aoxnqKLVlKnoxUptQ42JFrgtOmSBfCTfVKZCcK0Y8eqg63gxSu4ay/X+U3q7V3TIklFO2g==", + "requires": { + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-lambda-nodejs": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "@aws-cdk/lambda-layer-awscli": "1.129.0", + "@aws-cdk/lambda-layer-kubectl": "1.129.0", + "@aws-cdk/lambda-layer-node-proxy-agent": "1.129.0", + "constructs": "^3.3.69", + "yaml": "1.10.2" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "bundled": true + } + } + }, + "@aws-cdk/aws-elasticache": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticache/-/aws-elasticache-1.129.0.tgz", + "integrity": "sha512-Lo6gWsE/U+YQpuqbVeT6gkezFPmpD+c2V9F31omQSqTyDFRhygG3qjbUWU5yRw2jwNQIWKlTQgJyzVT62oMb/g==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-elasticbeanstalk": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticbeanstalk/-/aws-elasticbeanstalk-1.129.0.tgz", + "integrity": "sha512-TbEaIDUaEjFb4HTPbz5QiJjBfZGJlClwBcgIvK1uCbhi1m/T+fQnF6WPz+ngGQ/8PNFP9ju9edIto0c0/xf/Iw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-elasticloadbalancing": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.129.0.tgz", + "integrity": "sha512-5p9SsPN+weL4a23FDOvZnQ3hk1fgY1G3ajiE3meIjy17LTEWWuibaJNGXT+ixYGUbGgw0SE0zobr435ad2Ewdg==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-elasticloadbalancingv2": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.129.0.tgz", + "integrity": "sha512-by+Wjp4FbZnLSkydHetPj1gg5AyNYBL/wEiY1aE+ioybKtnTVb5FxVjeZ3ctwh9xOTRnepcIwfQuZqDA12A8zg==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-elasticloadbalancingv2-targets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2-targets/-/aws-elasticloadbalancingv2-targets-1.129.0.tgz", + "integrity": "sha512-US/uDMHgI840DuySrG60p7pGQV8KZmXiC+0RpPCWeUhnbODUP72Fun/8D+4fX+mxIEA/H+1RSwz9hHWGfk0+Hg==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-elasticsearch": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticsearch/-/aws-elasticsearch-1.129.0.tgz", + "integrity": "sha512-yELBAAPlWATb8I7Lg+1nZAGTdAhvWGv9ArvbdV8fosOshd5O83BmFxjxSfGqzXo+FXtCWcyyaEzxC2qPSjmtfA==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-emr": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-emr/-/aws-emr-1.129.0.tgz", + "integrity": "sha512-k2MQT4XimebiTQL4Mz9CaGXH+4xbgu45802SF3p4oOLWRYSHG52b/JFFe7s6OHHMC9a9rNWcahLZW1zqIDlbyg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-emrcontainers": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-emrcontainers/-/aws-emrcontainers-1.129.0.tgz", + "integrity": "sha512-I6qZS8XtqJ0gDAiBML2rcUq4USAZDwjVz3Z9Rgh01C0JqPU6QOofhxetIRttEjILZ4D1b7lSe3FpsCIsioxvqw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-events": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.129.0.tgz", + "integrity": "sha512-q4+g4ugQV1maomOZ+HpQynBxw5NcMJGjIRHkfgxa4xl0/LQ4W5ReEHXz73gD5h7tSwCJUsVys9DpQG793R/CSA==", + "requires": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-events-targets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events-targets/-/aws-events-targets-1.129.0.tgz", + "integrity": "sha512-annYEhTW7hU/GeC4gurXQvFWuJsSHD+cU7LjkkaBR2n2PHYb3w7hCdmt6ebKRAmmra+sYqeWTx3pkqAlHTNhvw==", + "requires": { + "@aws-cdk/aws-apigateway": "1.129.0", + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codepipeline": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kinesisfirehose": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sns-subscriptions": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/aws-stepfunctions": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-eventschemas": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-eventschemas/-/aws-eventschemas-1.129.0.tgz", + "integrity": "sha512-djkBj10sdjjHz0Y7Kr7YCxoX8qMeSE3i/QFWifd2WoHWH3Cc6Pu1TWXa0uIGJbXU20hdC/SYkAhWh4Y/hX2VsQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-finspace": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-finspace/-/aws-finspace-1.129.0.tgz", + "integrity": "sha512-FwOFTfMh0YqUmVmZICWLfvARuIWobXFRfhImI2RUtUhmH17Q8BGqA3xB7O0p9nvOWLrQ4qBg3ikhgU1KdUwnNw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-fis": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-fis/-/aws-fis-1.129.0.tgz", + "integrity": "sha512-mt8/0O1lbjztVBBj+nR7SRu6PtUQp/4+kZOm3G2f/8Af8vaW+brwTiZD9fKUH1clQL5YZilDfxEXJpiH+sZ+Mw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-fms": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-fms/-/aws-fms-1.129.0.tgz", + "integrity": "sha512-mx2oOGKBKW1zNUVvNdEdyWt3MFbgKmm+4BQnjSQ4DwuecTC2YZJ3xL0m5Is3TfNzpscTKMyyTIbilTCfiCfwUw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-frauddetector": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-frauddetector/-/aws-frauddetector-1.129.0.tgz", + "integrity": "sha512-SuLL4wqriEJEEJMH/7jp5VVITmRZwwqaPfa3UdVPhQjUIZkrWESYb4UlFX10BTO63PRT+4TJWySjKBrwzMxvpw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-fsx": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-fsx/-/aws-fsx-1.129.0.tgz", + "integrity": "sha512-m6y1uM5NlotrWas0A3LpVeR3TZ4ttAIHgvzdBySLJkWRXYPtkngEIJKpENJKxMxRFUZqNPl5IsgJyN5+f9mLTw==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-gamelift": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-gamelift/-/aws-gamelift-1.129.0.tgz", + "integrity": "sha512-fwOP5/4o5BDNodPX/fOStC7jxoNWf1Ik9hPb7v3OO48kGbsxdMbNavekp5wfPaDcsJCn7qFeS/YqZhbIAJ4xYg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-globalaccelerator": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-globalaccelerator/-/aws-globalaccelerator-1.129.0.tgz", + "integrity": "sha512-qtviM7J0dtS8cQniuDGTYluYazoOYhzrhshobjvySQ0ZPPqkImawKPLmhSBD3l8mq2Tcodl/szUd4f5MoigwBQ==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-glue": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-glue/-/aws-glue-1.129.0.tgz", + "integrity": "sha512-8wORcgQmh1pyVw52652+2DoD2uN8d8vQDjU7CBMAQ1Pmd7FS45y2oH9FsQUzlJJ4TgxjYO1CCg/qx0u3rEC/eg==", + "requires": { + "@aws-cdk/assets": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-greengrass": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-greengrass/-/aws-greengrass-1.129.0.tgz", + "integrity": "sha512-qChL/GnKvjbHoNx1/nIBxg/xQH+EIp1YXxWAP/cKOlcL5mFa1e76C8TMtppwmHSWTPOTjihXpPr4dfAlRrvkDg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-greengrassv2": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-greengrassv2/-/aws-greengrassv2-1.129.0.tgz", + "integrity": "sha512-b+lXbfkkW3vckAh2lh1Ro2oF5tv182GCUegFR6+PoakAI8sOuQWDzB2thy5qs4SHxophhyJ9drqitjNArNHcVw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-groundstation": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-groundstation/-/aws-groundstation-1.129.0.tgz", + "integrity": "sha512-woQyDNVJwBrmxTJs7vNU0sHZxsCgZCuQsoQF+XfL7E5IOXBdMnpzF834TzQtLWhSSkj2R/ipgwkTcUrj7yIRjg==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-guardduty": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-guardduty/-/aws-guardduty-1.129.0.tgz", + "integrity": "sha512-pbCSNsMJl/u4EBv4q4krk6OP7uEgpcit+Tpi97/cZNHKD0N+r1IQp9GSu2Nb2yMC7bMepuIoLNlO987SU7zpCw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-healthlake": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-healthlake/-/aws-healthlake-1.129.0.tgz", + "integrity": "sha512-e04uwvokm9Ib1C53UXmLQa1vQrbKKZ4ACHCQ/qf/wb4GpimmwsUecY/YaxW40o1NKJUCT7oa03DFJeVx1u9G8w==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-iam": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.129.0.tgz", + "integrity": "sha512-SjLrFldOpPYogldJOtJROudcy3ttHaKu49u4cr6MYq3U9dbYmYfQTz2pkKGoAErN9jj2yIpuN5locNBmVzpIcA==", + "requires": { + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-imagebuilder": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-imagebuilder/-/aws-imagebuilder-1.129.0.tgz", + "integrity": "sha512-M/OwBjF9uv/vAXPV8aG1CCprZmE8+4r6vkqm9j7Lj0v2AQ6DvRysvvgezYA23ohCBKt5Ml+y9pzIFbNiAVNM8w==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-inspector": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-inspector/-/aws-inspector-1.129.0.tgz", + "integrity": "sha512-vPXNh5HaCfvhlnns98PQNvcreROEei2Il6QVExSSEjMqJwzcHpPhExNbDe/IJXndhSwmR+oPwRXx2dWhs/dIVQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-iot": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iot/-/aws-iot-1.129.0.tgz", + "integrity": "sha512-zc04BQVn2xL3V0idxNupgRna8JOAIblXtMZkZF3yAZwVfNWjiopvo7u9oFZUbIRamNYWVR3qDr+osQwe0hu+Zg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-iot1click": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iot1click/-/aws-iot1click-1.129.0.tgz", + "integrity": "sha512-4cZgC0AYvk8uGzRh8Sg/hYv/S94uIeVGbFVlj/SBhaB6f50JafDi9hsd4veVu4q4UpR7GvdY8X7DNnrGHDpXFg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-iotanalytics": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotanalytics/-/aws-iotanalytics-1.129.0.tgz", + "integrity": "sha512-0WstyATvHw/WAzNbmKPpg5aBC+IZ/W6VNITTV62343BHpYXPavD1yN4TLwygTSIAwuYOwOnqefBfx3eV5EuccQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-iotcoredeviceadvisor": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotcoredeviceadvisor/-/aws-iotcoredeviceadvisor-1.129.0.tgz", + "integrity": "sha512-YeF51HL5QpYjfR5c0xSCdSCqtCnwBlYo049a91taVikaGxNPBTYnoQ3G+3yrEGBrVfTqmcbvhbePLCgPmHRx/A==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-iotevents": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotevents/-/aws-iotevents-1.129.0.tgz", + "integrity": "sha512-TFsqd306QKSOTfPi9FdjoXsxNUNf7wD2n8onNP1CR0ccBYu5RQerBopKvo6Uvu1XfLO+8f6G3dR+HvLhmgLZzg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-iotfleethub": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotfleethub/-/aws-iotfleethub-1.129.0.tgz", + "integrity": "sha512-yMsVomjaEQ4lp7KJijwrcb4oZ5cfkYvc2B6d3QATPJ9K/O1/CxrAkdYxX0p9oOW5W/Mo608UW3KmSYDelr8NHQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-iotsitewise": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotsitewise/-/aws-iotsitewise-1.129.0.tgz", + "integrity": "sha512-9SzkMlXNZgb8dzAbur6/UToF4uzldlwXnoIvtfk3NAnlkFqt2vhBtpDERcLHjasnfjanhs3AbNs+UfAuee8TCA==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-iotthingsgraph": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotthingsgraph/-/aws-iotthingsgraph-1.129.0.tgz", + "integrity": "sha512-DaTbrn+B/JcqoyErIEomLye8t2019s9O+ZckA3OxIqGIvQVNJ7zHGpToXBCeBUW2Rc7LdnAaw+O2QQV0oNXxRg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-iotwireless": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iotwireless/-/aws-iotwireless-1.129.0.tgz", + "integrity": "sha512-XlYQzythHX0wjxnxE3YBsK/zs2AqEm7T6a4FtVxoTBjLbH1JTjQt4C41rMgz32egFDhZ6PnLfxb3QT83msPrkw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-ivs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ivs/-/aws-ivs-1.129.0.tgz", + "integrity": "sha512-z6dUwuA07hao+0/Gf/xpbYIUGWuaMolX5m5oCZexVrnkMHZ3SaDaY4FoUZJf+Y8CAsq1AWLHnc7XDVS9he1z3w==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-kendra": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kendra/-/aws-kendra-1.129.0.tgz", + "integrity": "sha512-G3mZjSKjFUQRHmFV4ZHXVD+8uso0TECACmjL85PBc2w2qEbDBci/2zxArWxRO4/aVEIKKHPqVN5vNuNm0WQ2hQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-kinesis": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesis/-/aws-kinesis-1.129.0.tgz", + "integrity": "sha512-MC2wR2udouSrf1BZcl/nfCNgqzPF5TC8DmsODMbs2uYvW9qLFv8L6qcgR3NasyS9p6K8MBjf/5i1Y+5jiAOhPw==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-kinesisanalytics": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesisanalytics/-/aws-kinesisanalytics-1.129.0.tgz", + "integrity": "sha512-lGRA9//W7vITHGSgh6VDF/aQ0xkiEQLqxlq0kZ2p67Azw+wG3LUAIpBWy0U0mTbxWgS/AwV1AJildDhCmF6NRQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-kinesisfirehose": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesisfirehose/-/aws-kinesisfirehose-1.129.0.tgz", + "integrity": "sha512-AOP8yWg1cfoK7WLFkEQN7Y5bJSvDIcJrjl+hZFMkcaCVcfi1ym8HY4vF6N4PE4iFkBEHiqDOxibogjjSwv6Okg==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-kms": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.129.0.tgz", + "integrity": "sha512-rscNj7cikIAEtmW3W/5REmTotXvPsm6MtgRMHvd68m87wTbEezdwnx5lgbtqCDZ0pg+v699OsvMWT+kGtNoDXw==", + "requires": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-lakeformation": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lakeformation/-/aws-lakeformation-1.129.0.tgz", + "integrity": "sha512-qC3FgpNJGz4tHPLSykaGz6BbMHmsH51Zz9kl4Tut8Url0xw02pyF6DMcaZc7gViEp7gHvRn5aG/CMxRn49pdDg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-lambda": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.129.0.tgz", + "integrity": "sha512-h15c2QUF86fTAPDxobgqojcyyrOxWZjMTLVtwkxrhGlUC7l/989/W5QflILJgxCPq1x6716+6epY3eerUnbGZQ==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codeguruprofiler": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecr-assets": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-signer": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-lambda-nodejs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda-nodejs/-/aws-lambda-nodejs-1.129.0.tgz", + "integrity": "sha512-53Rrt9bdAgkhAWLBRmrQcPx/ZAQeGiFAFxezXixbAlu4ONPzDqYafACen4Kmt5j3WIpLuwFCMurVdCmMw9s62g==", + "requires": { + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-licensemanager": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-licensemanager/-/aws-licensemanager-1.129.0.tgz", + "integrity": "sha512-5V77fFoIIRcFeuxBLOzraFvaPsxJujLmNMWlnUHkLj9Izk+is6jqQdLO7mWhmg5zh52tDnPHhSQtZ946pMjgUg==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-lightsail": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lightsail/-/aws-lightsail-1.129.0.tgz", + "integrity": "sha512-dCT1ZUOFUwf5XAYTvHCTq7ki+3b+OhXgAwar27sNWwEhyW+HYiKA1YnJ1iDNnZ1jSAidpA4ABwzptiuv8G97XQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-location": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-location/-/aws-location-1.129.0.tgz", + "integrity": "sha512-QA/CxYvPjgBUPqaitUAYlax/Ul38Grba088LHZ20HCCpk4Ds7ALXGxglTs55e5xq5lXrIWGshtwi7goMdrTfvA==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-logs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.129.0.tgz", + "integrity": "sha512-E/N9Aj1Xxz6y0r48g1v4BrRK/uhtRjN1poc6xCN+GzIPXrSuiEDV71N9ShqpH38LtapJQSGCq3ou2lvjX7hH0g==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-lookoutequipment": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lookoutequipment/-/aws-lookoutequipment-1.129.0.tgz", + "integrity": "sha512-BdRnOZxIQllVxhIyKooCPv0fKUGTZJ4qQGdH2mgONELWdLOWbtcCcwshumo0RgL72w4bCbnJxYiONiMOmcqCWQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-lookoutmetrics": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lookoutmetrics/-/aws-lookoutmetrics-1.129.0.tgz", + "integrity": "sha512-xNWutFn+BBpIwzcOz+7oKpGUvY7Io0le9FNQ3L9BRfupcpq5fbtBlhYgspfjfpH6DopM1SjyfNTpKKbtWkFkkA==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-lookoutvision": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lookoutvision/-/aws-lookoutvision-1.129.0.tgz", + "integrity": "sha512-8Y9k2o5GLvIYjmN2/WmwNhVye/yNLaOz9VVKDLYWW+8EDhFhI5kLigYJwTz3X2gvXJaNLEKIvzoBmf1Pz6VNlg==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-macie": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-macie/-/aws-macie-1.129.0.tgz", + "integrity": "sha512-Q4Eslz24XCbfh7QooEmF5wTpPpUyEoUwIU4zQ4aZc4HtUhAVXfLl8eJPM9Da16Lvn0/fyby62PtPiIekJA4Ymw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-managedblockchain": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-managedblockchain/-/aws-managedblockchain-1.129.0.tgz", + "integrity": "sha512-DBJx+Zfj+I/RbpL4Mww9Fc3XaWjSTN3zQOhCs0Y0bcrwMWusiF6pRrV3D9iWPhGvA/eHGf/w6Zv0LK7fJV6c2g==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-mediaconnect": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediaconnect/-/aws-mediaconnect-1.129.0.tgz", + "integrity": "sha512-quvBhCxMpUej2qif/y8CL9HRsxg6u/ebrN8EOUdsNVS4s3CSzEjupZjVfoj7i4kBJgcvFDMLzssft/uUWamK/A==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-mediaconvert": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediaconvert/-/aws-mediaconvert-1.129.0.tgz", + "integrity": "sha512-IxqJtjXoScXTP/rlh2c1lR8y8cQmutRUoKihoLDphxj2npqJm7OEwCZsEBz/wc0t7yqOk3FjektoNxGDmXcaOQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-medialive": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-medialive/-/aws-medialive-1.129.0.tgz", + "integrity": "sha512-X1OGfQwgIgquYllQFGw+sfDOXVXwW/gngSxck4Ps0M75LVWN4CD+2mKLTuim5s4Ik3E/epTCXRQM7URr7GkXag==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-mediapackage": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediapackage/-/aws-mediapackage-1.129.0.tgz", + "integrity": "sha512-hz4jkExBq3Pci1BS/ALYpoyEW0rMY4DPClxvMLYRzJel4PFA0HwPtvnyr5iiCPMpPvsTW1ka5ve1HBCuNi9eiQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-mediastore": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mediastore/-/aws-mediastore-1.129.0.tgz", + "integrity": "sha512-oApQfM/whtbZ7AcZjTc28y8dCOotUSt7pDJn266xGjP8vTSQl+i5khhlMpWBIBsEDOclnGPHyKKiD4PgwGQnwQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-memorydb": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-memorydb/-/aws-memorydb-1.129.0.tgz", + "integrity": "sha512-iX2NyeIVdrCfJ+qBEvuTpXHv4pYIqNOUCU/OVBdL+ZK1DdMsFn2eOe2DO6KCldYobNQQCZADoB04G7LZdJS8tQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-msk": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-msk/-/aws-msk-1.129.0.tgz", + "integrity": "sha512-TdN7H+XwnDnE4OAgrJlDEq3VO0v4bS/VN4XwewPwBs0nfXRowxubU2F8v67g8kJXR88DRI7HnLjYEd4JVcXl7Q==", + "requires": { + "@aws-cdk/aws-acmpca": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-mwaa": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-mwaa/-/aws-mwaa-1.129.0.tgz", + "integrity": "sha512-5FKkJ73lkbDg7yYjEoX1q35ByrBr8P6GJUtm+toWd/oDa9IcI9EPhQIFO6Bahr3EqvSkEE4FeQNM3sujnO1cSg==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-neptune": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-neptune/-/aws-neptune-1.129.0.tgz", + "integrity": "sha512-D9DBwA5LaIUFfNrtkqOy4aL6ireVyTDoq0WHVd/AKIIiwj+Tkd7pw2OlQkOak5xW9XmURA3XN87oi1FplW1V0A==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-networkfirewall": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-networkfirewall/-/aws-networkfirewall-1.129.0.tgz", + "integrity": "sha512-cp0Bk5V+jHSgvukpq8t4w9gMVMYVgWVBrge3VXP62GoGFMfW29IcJFNGjio/iOR6AVyPazSiT5XpUEeH/2Ta5A==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-networkmanager": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-networkmanager/-/aws-networkmanager-1.129.0.tgz", + "integrity": "sha512-Ip0X7h7drm5RPhScxD0uvdztXsAm5SZYPF+RH3ASBSzv4IESls4EexWdFoGBznpBQwgyaEfGq0jhLrBu+G4Nag==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-nimblestudio": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-nimblestudio/-/aws-nimblestudio-1.129.0.tgz", + "integrity": "sha512-K7XnwXfgaHPi9fvYJunQ/zq85Ci5DQr5Q59IOuZRVJzfUUKRW5oG0J1fuSLoPLgmezzcDlZNak1iulgOh8QjIw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-opensearchservice": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-opensearchservice/-/aws-opensearchservice-1.129.0.tgz", + "integrity": "sha512-Qu4I7i5biiq3HeLsbaK+43OFAsaFrSakzhSGR7lEh5D0GF9pAWbnEtmBTBmqQ6UjJXPwvtqNa2KfG6TZ71l3yA==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-opsworks": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-opsworks/-/aws-opsworks-1.129.0.tgz", + "integrity": "sha512-wGieXhsnby8SEvfxQmHsRv0CFzRaXCzlH81BLeuFc5EVzNtthK6GBp/ueLqjyMEKumeZcolybaIeffuO4bD6aA==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-opsworkscm": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-opsworkscm/-/aws-opsworkscm-1.129.0.tgz", + "integrity": "sha512-YM8xY9acre4UdMvoDYdZ1VXz5C4lGfPoIJU6OyJQPkqJlFYAfuqPaDN2Aw0SjXxIwN8LbOF8P5tQhKrBT6UGRw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-pinpoint": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-pinpoint/-/aws-pinpoint-1.129.0.tgz", + "integrity": "sha512-cTj+pmiSjhgfcG65jzsm/N4seo07TIop6ubWogkuxk59cNkqtoKBgs+QkhA5uW2zvr05mh5+rDcQQDltwR0uBQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-pinpointemail": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-pinpointemail/-/aws-pinpointemail-1.129.0.tgz", + "integrity": "sha512-vbVJIgBH4dQPGNlGHO7f4GKQo/4JFll52Vokt9ULkq8GAdP5WOT6uEuSLTNaPQWIGA18LaV1WJmYl/lTtS0UNQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-qldb": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-qldb/-/aws-qldb-1.129.0.tgz", + "integrity": "sha512-YV5FfqHtYU6+rpz8t9aPbk4RpZXxWIX51FX+qZT+/la9mlHu8h/Csi/uwMutrWCtstKfpnlR6FCYJoWy1ZI/eg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-quicksight": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-quicksight/-/aws-quicksight-1.129.0.tgz", + "integrity": "sha512-+COCy3UDRTogCZCIBrpvx41q1kBuHtCTgRoxjrC9oA0Z9OK5CbzfcYTrNG1hYrjuAC+J8a/63vLkQ2Zzc1HxtQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-ram": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ram/-/aws-ram-1.129.0.tgz", + "integrity": "sha512-xKpw3J+GeKZG4f5z3X7vhb9VhOK/fTNY7214Hl+3x71UaunU0zQv6DuFd8YUhQUu2MdXn28FWDJl6N2tQftfRQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-rds": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-rds/-/aws-rds-1.129.0.tgz", + "integrity": "sha512-Vuvxkg3Ga7UfaEQ2iFxYCNKOWv0vwxjFiHqw+4Hc/lB4yq8Mq3OhBlfsQQySgnN3x0TdT+MIVWOibW5HzVgT3g==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-redshift": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-redshift/-/aws-redshift-1.129.0.tgz", + "integrity": "sha512-kgpcaCDYMnOf9LriE2QSFnGssNzHsOk8qYAoJqL99cP1cmvx35biE1VH6xERV4kMeQigFNKAcrkhrPBcAliTLQ==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-resourcegroups": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-resourcegroups/-/aws-resourcegroups-1.129.0.tgz", + "integrity": "sha512-+5mllKzZ0VXIPt8VZbnxYb/ps9kjJIPkO1RlyaZIEGYbjyJhhL+VnCc/fB92y0Pr6B/Q4l24nKCn2sRvoiF+Mw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-robomaker": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-robomaker/-/aws-robomaker-1.129.0.tgz", + "integrity": "sha512-7ysjniB33YW5QKeuVN9bbxJvxRnIHZTHZZWwjh0zws3M5wG+ZCbGYez+JO1hBSBbgLQT/dG5eP5h8h4aRixkHg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-route53": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.129.0.tgz", + "integrity": "sha512-ogAqoOTFV5ppk/S6lYmgTLw6ds1kLZZxKy9a9t32RqHCdSJpzuRKkW4jLutNVK605DBqiK3mXBuKRGCz19Z67Q==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/custom-resources": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-route53-targets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.129.0.tgz", + "integrity": "sha512-O5ZWusz7593VEBb2WaUZvtwaUof5Cwf2AdmQDz9yyD/hBFw+2YlC2uVwqoeuZIyQ6ildSkgSU3f+g8IhYt7cXQ==", + "requires": { + "@aws-cdk/aws-apigateway": "1.129.0", + "@aws-cdk/aws-cloudfront": "1.129.0", + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-globalaccelerator": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-route53recoverycontrol": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53recoverycontrol/-/aws-route53recoverycontrol-1.129.0.tgz", + "integrity": "sha512-bRZ7vUS5QC/z+oMOj8n05r1Mdx7s7omI7ySqbAr3ZWwu/34qu3pK4swXdbT1w58yGBGHzo44To29JCa6sU0ehQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-route53recoveryreadiness": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53recoveryreadiness/-/aws-route53recoveryreadiness-1.129.0.tgz", + "integrity": "sha512-fNF7rUaOOCsi7ejZMLl/yt9/xKqTJagApTOIcMM1Ef8bqio6IUdgdXWd+pcNumzLUZy8JstSWeBHGfLlZp/fKQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-route53resolver": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53resolver/-/aws-route53resolver-1.129.0.tgz", + "integrity": "sha512-0XZbLniyTHIeCPIKNp3GuPQmS4KcfSeyHfvoE8mE6WhcPaZu/WhpfAsg+enPjuSVFhlWOkvdqYFA6nUa6tHCwA==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-s3": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.129.0.tgz", + "integrity": "sha512-8Ql9P16HfR1qeWcSp+I5eScD6q/gOtcioQqPlRowFOany5E563w01x9ghKurGQLVgYOZWQKvYWHxFs0vDeXPUw==", + "requires": { + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-s3-assets": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.129.0.tgz", + "integrity": "sha512-klFuPAaSQs6qC7EB3QN7lqHu8MN4H6JxNcCl21ce3/jwQvqMDsNObrv5nPt2aQkiLlbCcr4ukZC5EsMA4+mguA==", + "requires": { + "@aws-cdk/assets": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-s3objectlambda": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3objectlambda/-/aws-s3objectlambda-1.129.0.tgz", + "integrity": "sha512-aXuVpBD4cm04A2Lmmmb065jim5bmt69SjW2Lm3yU42XZGhj5y14PcjpKZTJ3rgVd3/OzQo50h4DwmAmuVwgW2w==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-s3outposts": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3outposts/-/aws-s3outposts-1.129.0.tgz", + "integrity": "sha512-oIIaGj954VuNJ/SBzzYZKGC96yADy8yzOUqkpSKPs4niz+y5dr03qZly0UaztSa80fwaTL6zCzF9uso/UqX8NA==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-sagemaker": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sagemaker/-/aws-sagemaker-1.129.0.tgz", + "integrity": "sha512-fQvtriSgIYt0kGrHV7mIWAsaQseQqbh+VBrSdPx+1ygF28zsGUo/r1dzKOqnNnqZ7De6PC906MBy4s9FoXdejQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-sam": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.129.0.tgz", + "integrity": "sha512-Rwc/btRuitpYov6no2LU07CzLVSrTEy+O59Wz+hriXz5NVdyv0qg9GjnyFvyOGuFHjrduZS/Mij+u1kgK7/Mcw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-sdb": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sdb/-/aws-sdb-1.129.0.tgz", + "integrity": "sha512-lSaQmjli6TisFzbcSIfGWiXNddSjUyvQqQNNeT97kNLpZUpHb0gfyTh3ijSD/xIh8kq0GHqN4/j/XZTkp6gRRw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-secretsmanager": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.129.0.tgz", + "integrity": "sha512-CTh52Haq0mKbVIWe2jJU2LkTq0ZQnKfvtatzv25W/Y+g3HktX4Aj6V+ph9c0hnT/uZRQpZ2Y3HdZw2ZdsrfWLw==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sam": "1.129.0", + "@aws-cdk/core": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-securityhub": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-securityhub/-/aws-securityhub-1.129.0.tgz", + "integrity": "sha512-cne3LGNKBGunEc/Fh3MMajnHTHUPBhYal7+v0S5tVlx1xoGX/9dEXZ45NWz5RRe4K9dAgdXIKvG2/f53pTG2VQ==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-servicecatalog": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicecatalog/-/aws-servicecatalog-1.129.0.tgz", + "integrity": "sha512-fdhJ7g98Rdaw8L8xU1JmqNPjeRgoX0H+2J19Kw4YN7yWtE7GLuY8+EP5GoGAd97MIoRuBuIJqaE68wF1SNqTmg==", + "requires": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-servicecatalogappregistry": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicecatalogappregistry/-/aws-servicecatalogappregistry-1.129.0.tgz", + "integrity": "sha512-NNyfEHm/NFJQe5TW153Z+MIqjWsV3dkXzJNnZU6GI6rKjE/pvStl/yRqDdRvUBBLN5PYtIdPWwxc1pLuyU2HeA==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-servicediscovery": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.129.0.tgz", + "integrity": "sha512-sZ3PuQx14ZJXpYiC+3QLxXnb4x7eptShavERptMxZXAhHsS9K6NDJ6idSPfaNwp0jMglAanLMVeKxbjl6fIfLg==", + "requires": { + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-ses": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ses/-/aws-ses-1.129.0.tgz", + "integrity": "sha512-mj3UBRovPTmTgMtA8TXVBtFW4YsAJ4FJ5hKMVR06uWC3K+JfTNunlTKrHVtu7MCfAnTjvfs5lra8dNPjyUs7Jg==", + "requires": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-signer": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-signer/-/aws-signer-1.129.0.tgz", + "integrity": "sha512-5ocJJQO06u9k9Q6NHDOko8rVGLwNi90Sv7RYNd3wA8NFNpS+kI5W65XqVPcAS7NtjKlAr4VYMSpbCpGRfisEOg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-sns": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.129.0.tgz", + "integrity": "sha512-17TiuAYY8ELrlPfrkEhJH7BPvviIADLWd3SuU6ViXTNXA89DkRVw7j5SWb5xeTgcN1PwP6tBgOekGKsr6W+6lw==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-sns-subscriptions": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.129.0.tgz", + "integrity": "sha512-YxkpWrARLi3/3t6Ogcwi1d+6z7F1w97v+k5adfDzG173j8r68U0qMpwsv2lSpmw6cPJOpDTCZ/pXXAXESVkgcg==", + "requires": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-sqs": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.129.0.tgz", + "integrity": "sha512-DyqQr1RbviDvXqOjtKr1bM0cBrmv05PvQf7U5GNw+BRsFIy7S97F58FFaKrVF1RhVPD9P/DwY3s2LJ/K0/13fA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-ssm": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.129.0.tgz", + "integrity": "sha512-cderNJdbnomX3QqNuEANtBVJVqlPL2tLvwjfimrkWXl6iWllt69sm8QHscclUKuWv+DsescdGShVFY9DzViBYg==", + "requires": { + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-ssmcontacts": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssmcontacts/-/aws-ssmcontacts-1.129.0.tgz", + "integrity": "sha512-Ro2M3ovYcBAI2K8C5FTwaR4FGh48fBvPW0dZP1AHo177B7uBw/D4rYA6Ce1Ynat7RhbBkgSGw3XVlEDtLiEYiw==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-ssmincidents": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssmincidents/-/aws-ssmincidents-1.129.0.tgz", + "integrity": "sha512-vqft1KmN78nGFwsHuVnk0gO40Y4A/Uui+kPBisDWUTgsbi2IeNj66fcyL5YRP1VpJrGpfeGeAD+T28WpldSfJg==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-sso": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sso/-/aws-sso-1.129.0.tgz", + "integrity": "sha512-vh1KEjHEE98efjZHzoYfT2Zp3UB552y6nNHpZN70JaGgiAfQaKzQqEalM/UEoVZZWrKh2iQbiPNwEZO6qSc56A==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-stepfunctions": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.129.0.tgz", + "integrity": "sha512-8OdzcUd1pIE1Xqj8rya5ninPum/SqlxVigwkTEVjDNMA9tJJ1fqVzXS6OgaP27FESjZT5o4WbCGIvmUyIuTH2w==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-synthetics": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-synthetics/-/aws-synthetics-1.129.0.tgz", + "integrity": "sha512-B6q47HkXX2SAGFjz1JVu0JnU4Vfb50q5JdrAx1Jt/Zxj4Wa2pvSWX/2i4NenAbrXvGhxQbr+1jv73jTry+l/dA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3-assets": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-timestream": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-timestream/-/aws-timestream-1.129.0.tgz", + "integrity": "sha512-VI6ye/PTBAhtLsJsD5QijAkgLHbW+2HDOydtyOZlStzfW2wJh0Cq+SI+6pKADp3d2Lt+saVSxlYjfYkS2nCsAQ==", + "requires": { + "@aws-cdk/core": "1.129.0" + } + }, + "@aws-cdk/aws-transfer": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-transfer/-/aws-transfer-1.129.0.tgz", + "integrity": "sha512-sPr5ztZbqINgImB4ASsAM9mgz5J4C0f2O5QuTf2D9tBv33HUIufTdb2KotGwhHiWvZjX7kC1dpr/jqGzEh9uEA==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-waf": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-waf/-/aws-waf-1.129.0.tgz", + "integrity": "sha512-j/3SOLSisvIwjC2p3nBttlxuf+rqg1aFhBZwWkMl45gl/aYRHPFG1x9AAjJbUME39Hij63UHgAGpue+CICJP5A==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-wafregional": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-wafregional/-/aws-wafregional-1.129.0.tgz", + "integrity": "sha512-Ha0Z+ENMizko8cn8iPBiieKHZfuNhEzWkqhA3ilRfIJvAsy0BG77ziEeOSdlxJ3RDTWjSocf7R4XRYlC5eo8fw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-wafv2": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-wafv2/-/aws-wafv2-1.129.0.tgz", + "integrity": "sha512-j8zvAUEVX0npXfTx7kUc9cCSaqUClep9YcOKxCJPy336Y/4IufogoQp0GCzwTcTDQ/bGFAqj7NUHSP2RMtu9tw==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-workspaces": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-workspaces/-/aws-workspaces-1.129.0.tgz", + "integrity": "sha512-hrQYpDXnOsWpPN+V4rHIu72uYKers5yNgrV8apZUtm0MCeFoiSi/RNCsN4IZA1N8wUcOHqF1gKNdo6BeswVubg==", + "requires": { + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/aws-xray": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-xray/-/aws-xray-1.129.0.tgz", + "integrity": "sha512-TgTjDaWU2iiCAeECH2gialcK4Ogcx0NAE2UHEXjaZJ6ttwXipPoZOxZlillrS6o7G8xX6n6L3yEq0cb3HJ3Kuw==", + "requires": { + "@aws-cdk/core": "1.129.0" } }, "@aws-cdk/cfnspec": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.107.0.tgz", - "integrity": "sha512-GzA5jyInk8V7cNeUa3DutPnSGLxNezQ2IKZsnYDh8MZnBnZQ/OiRuLm1B5RIJMQpWIFWJzJ4D0Qnez8N0O3+PQ==", - "dev": true, + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.129.0.tgz", + "integrity": "sha512-0WsNvuF0Lem/TpcjxvVN4VrZpvdXPJQVI38qVvm6+tiKj2h6qaOaY0luxZntccTbX43S7wo54tHy5qOl8lDBMw==", "requires": { + "fs-extra": "^9.1.0", "md5": "^2.3.0" } }, "@aws-cdk/cloud-assembly-schema": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.107.0.tgz", - "integrity": "sha512-z1WdnHrHGR6VF7p7Xv6MAwlr4sCGsFGGRJmk4WmvcFosOclLFKfSsxFE2w5RMmuyxLxdJmarSYF3AKOwm9mHng==", + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.129.0.tgz", + "integrity": "sha512-1GRxfRrC6p+Jafl12ALkzJ+sV47pM3V8MMQNDQS5XFl7M3+x7kScwYBSNptjC0H6VxywVksN5AMzlY4FXEyV1Q==", "requires": { "jsonschema": "^1.4.0", "semver": "^7.3.5" @@ -1977,237 +14569,202 @@ } }, "@aws-cdk/cloudformation-diff": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.107.0.tgz", - "integrity": "sha512-/FpJfrLHKNWUKOQ9a0yde42jo2s7+0W3XQnTWal1fN4f1n84KB2xLp/ZSI/7TAhHECQxlQDLtTUciDNuzd9qTg==", - "dev": true, + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.129.0.tgz", + "integrity": "sha512-1Wbp03YLXnkFyVafjhwYWUJa+qlkdBuzzKJKbTz6gjApl4+0uUPI2m0IeqgOVEmqyAuSErvcTPWSI8ZmjzjQ5g==", "requires": { - "@aws-cdk/cfnspec": "1.107.0", + "@aws-cdk/cfnspec": "1.129.0", "@types/node": "^10.17.60", "colors": "^1.4.0", "diff": "^5.0.0", "fast-deep-equal": "^3.1.3", - "string-width": "^4.2.2", - "table": "^6.7.1" + "string-width": "^4.2.3", + "table": "^6.7.2" }, "dependencies": { "@types/node": { "version": "10.17.60", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" } } }, "@aws-cdk/cloudformation-include": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-include/-/cloudformation-include-1.107.0.tgz", - "integrity": "sha512-iBkfln3V4ej1xtmV/LXGkTA0VuolNTHHJo8s8dL5Y+WHUQgko6c4EXr8OxtbofiDR7y2e6PwRWwW8wq8kvK27Q==", - "requires": { - "@aws-cdk/alexa-ask": "1.107.0", - "@aws-cdk/aws-accessanalyzer": "1.107.0", - "@aws-cdk/aws-acmpca": "1.107.0", - "@aws-cdk/aws-amazonmq": "1.107.0", - "@aws-cdk/aws-amplify": "1.107.0", - "@aws-cdk/aws-apigateway": "1.107.0", - "@aws-cdk/aws-apigatewayv2": "1.107.0", - "@aws-cdk/aws-appconfig": "1.107.0", - "@aws-cdk/aws-appflow": "1.107.0", - "@aws-cdk/aws-appintegrations": "1.107.0", - "@aws-cdk/aws-applicationautoscaling": "1.107.0", - "@aws-cdk/aws-applicationinsights": "1.107.0", - "@aws-cdk/aws-appmesh": "1.107.0", - "@aws-cdk/aws-apprunner": "1.107.0", - "@aws-cdk/aws-appstream": "1.107.0", - "@aws-cdk/aws-appsync": "1.107.0", - "@aws-cdk/aws-athena": "1.107.0", - "@aws-cdk/aws-auditmanager": "1.107.0", - "@aws-cdk/aws-autoscaling": "1.107.0", - "@aws-cdk/aws-autoscalingplans": "1.107.0", - "@aws-cdk/aws-backup": "1.107.0", - "@aws-cdk/aws-batch": "1.107.0", - "@aws-cdk/aws-budgets": "1.107.0", - "@aws-cdk/aws-cassandra": "1.107.0", - "@aws-cdk/aws-ce": "1.107.0", - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-chatbot": "1.107.0", - "@aws-cdk/aws-cloud9": "1.107.0", - "@aws-cdk/aws-cloudfront": "1.107.0", - "@aws-cdk/aws-cloudtrail": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-codeartifact": "1.107.0", - "@aws-cdk/aws-codebuild": "1.107.0", - "@aws-cdk/aws-codecommit": "1.107.0", - "@aws-cdk/aws-codedeploy": "1.107.0", - "@aws-cdk/aws-codeguruprofiler": "1.107.0", - "@aws-cdk/aws-codegurureviewer": "1.107.0", - "@aws-cdk/aws-codepipeline": "1.107.0", - "@aws-cdk/aws-codestar": "1.107.0", - "@aws-cdk/aws-codestarconnections": "1.107.0", - "@aws-cdk/aws-codestarnotifications": "1.107.0", - "@aws-cdk/aws-cognito": "1.107.0", - "@aws-cdk/aws-config": "1.107.0", - "@aws-cdk/aws-customerprofiles": "1.107.0", - "@aws-cdk/aws-databrew": "1.107.0", - "@aws-cdk/aws-datapipeline": "1.107.0", - "@aws-cdk/aws-datasync": "1.107.0", - "@aws-cdk/aws-dax": "1.107.0", - "@aws-cdk/aws-detective": "1.107.0", - "@aws-cdk/aws-devopsguru": "1.107.0", - "@aws-cdk/aws-directoryservice": "1.107.0", - "@aws-cdk/aws-dlm": "1.107.0", - "@aws-cdk/aws-dms": "1.107.0", - "@aws-cdk/aws-docdb": "1.107.0", - "@aws-cdk/aws-dynamodb": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-ecs": "1.107.0", - "@aws-cdk/aws-efs": "1.107.0", - "@aws-cdk/aws-eks": "1.107.0", - "@aws-cdk/aws-elasticache": "1.107.0", - "@aws-cdk/aws-elasticbeanstalk": "1.107.0", - "@aws-cdk/aws-elasticloadbalancing": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-elasticsearch": "1.107.0", - "@aws-cdk/aws-emr": "1.107.0", - "@aws-cdk/aws-emrcontainers": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-eventschemas": "1.107.0", - "@aws-cdk/aws-finspace": "1.107.0", - "@aws-cdk/aws-fis": "1.107.0", - "@aws-cdk/aws-fms": "1.107.0", - "@aws-cdk/aws-frauddetector": "1.107.0", - "@aws-cdk/aws-fsx": "1.107.0", - "@aws-cdk/aws-gamelift": "1.107.0", - "@aws-cdk/aws-globalaccelerator": "1.107.0", - "@aws-cdk/aws-glue": "1.107.0", - "@aws-cdk/aws-greengrass": "1.107.0", - "@aws-cdk/aws-greengrassv2": "1.107.0", - "@aws-cdk/aws-groundstation": "1.107.0", - "@aws-cdk/aws-guardduty": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-imagebuilder": "1.107.0", - "@aws-cdk/aws-inspector": "1.107.0", - "@aws-cdk/aws-iot": "1.107.0", - "@aws-cdk/aws-iot1click": "1.107.0", - "@aws-cdk/aws-iotanalytics": "1.107.0", - "@aws-cdk/aws-iotcoredeviceadvisor": "1.107.0", - "@aws-cdk/aws-iotevents": "1.107.0", - "@aws-cdk/aws-iotfleethub": "1.107.0", - "@aws-cdk/aws-iotsitewise": "1.107.0", - "@aws-cdk/aws-iotthingsgraph": "1.107.0", - "@aws-cdk/aws-iotwireless": "1.107.0", - "@aws-cdk/aws-ivs": "1.107.0", - "@aws-cdk/aws-kendra": "1.107.0", - "@aws-cdk/aws-kinesis": "1.107.0", - "@aws-cdk/aws-kinesisanalytics": "1.107.0", - "@aws-cdk/aws-kinesisfirehose": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lakeformation": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-licensemanager": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-lookoutmetrics": "1.107.0", - "@aws-cdk/aws-lookoutvision": "1.107.0", - "@aws-cdk/aws-macie": "1.107.0", - "@aws-cdk/aws-managedblockchain": "1.107.0", - "@aws-cdk/aws-mediaconnect": "1.107.0", - "@aws-cdk/aws-mediaconvert": "1.107.0", - "@aws-cdk/aws-medialive": "1.107.0", - "@aws-cdk/aws-mediapackage": "1.107.0", - "@aws-cdk/aws-mediastore": "1.107.0", - "@aws-cdk/aws-msk": "1.107.0", - "@aws-cdk/aws-mwaa": "1.107.0", - "@aws-cdk/aws-neptune": "1.107.0", - "@aws-cdk/aws-networkfirewall": "1.107.0", - "@aws-cdk/aws-networkmanager": "1.107.0", - "@aws-cdk/aws-nimblestudio": "1.107.0", - "@aws-cdk/aws-opsworks": "1.107.0", - "@aws-cdk/aws-opsworkscm": "1.107.0", - "@aws-cdk/aws-pinpoint": "1.107.0", - "@aws-cdk/aws-pinpointemail": "1.107.0", - "@aws-cdk/aws-qldb": "1.107.0", - "@aws-cdk/aws-quicksight": "1.107.0", - "@aws-cdk/aws-ram": "1.107.0", - "@aws-cdk/aws-rds": "1.107.0", - "@aws-cdk/aws-redshift": "1.107.0", - "@aws-cdk/aws-resourcegroups": "1.107.0", - "@aws-cdk/aws-robomaker": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/aws-route53resolver": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3objectlambda": "1.107.0", - "@aws-cdk/aws-s3outposts": "1.107.0", - "@aws-cdk/aws-sagemaker": "1.107.0", - "@aws-cdk/aws-sam": "1.107.0", - "@aws-cdk/aws-sdb": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/aws-securityhub": "1.107.0", - "@aws-cdk/aws-servicecatalog": "1.107.0", - "@aws-cdk/aws-servicecatalogappregistry": "1.107.0", - "@aws-cdk/aws-servicediscovery": "1.107.0", - "@aws-cdk/aws-ses": "1.107.0", - "@aws-cdk/aws-signer": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/aws-ssm": "1.107.0", - "@aws-cdk/aws-ssmcontacts": "1.107.0", - "@aws-cdk/aws-ssmincidents": "1.107.0", - "@aws-cdk/aws-sso": "1.107.0", - "@aws-cdk/aws-stepfunctions": "1.107.0", - "@aws-cdk/aws-synthetics": "1.107.0", - "@aws-cdk/aws-timestream": "1.107.0", - "@aws-cdk/aws-transfer": "1.107.0", - "@aws-cdk/aws-waf": "1.107.0", - "@aws-cdk/aws-wafregional": "1.107.0", - "@aws-cdk/aws-wafv2": "1.107.0", - "@aws-cdk/aws-workspaces": "1.107.0", - "@aws-cdk/aws-xray": "1.107.0", - "@aws-cdk/core": "1.107.0", + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-include/-/cloudformation-include-1.129.0.tgz", + "integrity": "sha512-WgK2bmmV/aW3EdBj+6UWqklhBnYGvphbthKdf55kmgjb6q2kkskxw2Em0Rs4bMTVkFxJ7YpcWMWDnvGgpi1JRA==", + "requires": { + "@aws-cdk/alexa-ask": "1.129.0", + "@aws-cdk/aws-accessanalyzer": "1.129.0", + "@aws-cdk/aws-acmpca": "1.129.0", + "@aws-cdk/aws-amazonmq": "1.129.0", + "@aws-cdk/aws-amplify": "1.129.0", + "@aws-cdk/aws-apigateway": "1.129.0", + "@aws-cdk/aws-apigatewayv2": "1.129.0", + "@aws-cdk/aws-appconfig": "1.129.0", + "@aws-cdk/aws-appflow": "1.129.0", + "@aws-cdk/aws-appintegrations": "1.129.0", + "@aws-cdk/aws-applicationautoscaling": "1.129.0", + "@aws-cdk/aws-applicationinsights": "1.129.0", + "@aws-cdk/aws-appmesh": "1.129.0", + "@aws-cdk/aws-apprunner": "1.129.0", + "@aws-cdk/aws-appstream": "1.129.0", + "@aws-cdk/aws-appsync": "1.129.0", + "@aws-cdk/aws-aps": "1.129.0", + "@aws-cdk/aws-athena": "1.129.0", + "@aws-cdk/aws-auditmanager": "1.129.0", + "@aws-cdk/aws-autoscaling": "1.129.0", + "@aws-cdk/aws-autoscalingplans": "1.129.0", + "@aws-cdk/aws-backup": "1.129.0", + "@aws-cdk/aws-batch": "1.129.0", + "@aws-cdk/aws-budgets": "1.129.0", + "@aws-cdk/aws-cassandra": "1.129.0", + "@aws-cdk/aws-ce": "1.129.0", + "@aws-cdk/aws-certificatemanager": "1.129.0", + "@aws-cdk/aws-chatbot": "1.129.0", + "@aws-cdk/aws-cloud9": "1.129.0", + "@aws-cdk/aws-cloudfront": "1.129.0", + "@aws-cdk/aws-cloudtrail": "1.129.0", + "@aws-cdk/aws-cloudwatch": "1.129.0", + "@aws-cdk/aws-codeartifact": "1.129.0", + "@aws-cdk/aws-codebuild": "1.129.0", + "@aws-cdk/aws-codecommit": "1.129.0", + "@aws-cdk/aws-codedeploy": "1.129.0", + "@aws-cdk/aws-codeguruprofiler": "1.129.0", + "@aws-cdk/aws-codegurureviewer": "1.129.0", + "@aws-cdk/aws-codepipeline": "1.129.0", + "@aws-cdk/aws-codestar": "1.129.0", + "@aws-cdk/aws-codestarconnections": "1.129.0", + "@aws-cdk/aws-codestarnotifications": "1.129.0", + "@aws-cdk/aws-cognito": "1.129.0", + "@aws-cdk/aws-config": "1.129.0", + "@aws-cdk/aws-connect": "1.129.0", + "@aws-cdk/aws-cur": "1.129.0", + "@aws-cdk/aws-customerprofiles": "1.129.0", + "@aws-cdk/aws-databrew": "1.129.0", + "@aws-cdk/aws-datapipeline": "1.129.0", + "@aws-cdk/aws-datasync": "1.129.0", + "@aws-cdk/aws-dax": "1.129.0", + "@aws-cdk/aws-detective": "1.129.0", + "@aws-cdk/aws-devopsguru": "1.129.0", + "@aws-cdk/aws-directoryservice": "1.129.0", + "@aws-cdk/aws-dlm": "1.129.0", + "@aws-cdk/aws-dms": "1.129.0", + "@aws-cdk/aws-docdb": "1.129.0", + "@aws-cdk/aws-dynamodb": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-ecr": "1.129.0", + "@aws-cdk/aws-ecs": "1.129.0", + "@aws-cdk/aws-efs": "1.129.0", + "@aws-cdk/aws-eks": "1.129.0", + "@aws-cdk/aws-elasticache": "1.129.0", + "@aws-cdk/aws-elasticbeanstalk": "1.129.0", + "@aws-cdk/aws-elasticloadbalancing": "1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.129.0", + "@aws-cdk/aws-elasticsearch": "1.129.0", + "@aws-cdk/aws-emr": "1.129.0", + "@aws-cdk/aws-emrcontainers": "1.129.0", + "@aws-cdk/aws-events": "1.129.0", + "@aws-cdk/aws-eventschemas": "1.129.0", + "@aws-cdk/aws-finspace": "1.129.0", + "@aws-cdk/aws-fis": "1.129.0", + "@aws-cdk/aws-fms": "1.129.0", + "@aws-cdk/aws-frauddetector": "1.129.0", + "@aws-cdk/aws-fsx": "1.129.0", + "@aws-cdk/aws-gamelift": "1.129.0", + "@aws-cdk/aws-globalaccelerator": "1.129.0", + "@aws-cdk/aws-glue": "1.129.0", + "@aws-cdk/aws-greengrass": "1.129.0", + "@aws-cdk/aws-greengrassv2": "1.129.0", + "@aws-cdk/aws-groundstation": "1.129.0", + "@aws-cdk/aws-guardduty": "1.129.0", + "@aws-cdk/aws-healthlake": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-imagebuilder": "1.129.0", + "@aws-cdk/aws-inspector": "1.129.0", + "@aws-cdk/aws-iot": "1.129.0", + "@aws-cdk/aws-iot1click": "1.129.0", + "@aws-cdk/aws-iotanalytics": "1.129.0", + "@aws-cdk/aws-iotcoredeviceadvisor": "1.129.0", + "@aws-cdk/aws-iotevents": "1.129.0", + "@aws-cdk/aws-iotfleethub": "1.129.0", + "@aws-cdk/aws-iotsitewise": "1.129.0", + "@aws-cdk/aws-iotthingsgraph": "1.129.0", + "@aws-cdk/aws-iotwireless": "1.129.0", + "@aws-cdk/aws-ivs": "1.129.0", + "@aws-cdk/aws-kendra": "1.129.0", + "@aws-cdk/aws-kinesis": "1.129.0", + "@aws-cdk/aws-kinesisanalytics": "1.129.0", + "@aws-cdk/aws-kinesisfirehose": "1.129.0", + "@aws-cdk/aws-kms": "1.129.0", + "@aws-cdk/aws-lakeformation": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-licensemanager": "1.129.0", + "@aws-cdk/aws-lightsail": "1.129.0", + "@aws-cdk/aws-location": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-lookoutequipment": "1.129.0", + "@aws-cdk/aws-lookoutmetrics": "1.129.0", + "@aws-cdk/aws-lookoutvision": "1.129.0", + "@aws-cdk/aws-macie": "1.129.0", + "@aws-cdk/aws-managedblockchain": "1.129.0", + "@aws-cdk/aws-mediaconnect": "1.129.0", + "@aws-cdk/aws-mediaconvert": "1.129.0", + "@aws-cdk/aws-medialive": "1.129.0", + "@aws-cdk/aws-mediapackage": "1.129.0", + "@aws-cdk/aws-mediastore": "1.129.0", + "@aws-cdk/aws-memorydb": "1.129.0", + "@aws-cdk/aws-msk": "1.129.0", + "@aws-cdk/aws-mwaa": "1.129.0", + "@aws-cdk/aws-neptune": "1.129.0", + "@aws-cdk/aws-networkfirewall": "1.129.0", + "@aws-cdk/aws-networkmanager": "1.129.0", + "@aws-cdk/aws-nimblestudio": "1.129.0", + "@aws-cdk/aws-opensearchservice": "1.129.0", + "@aws-cdk/aws-opsworks": "1.129.0", + "@aws-cdk/aws-opsworkscm": "1.129.0", + "@aws-cdk/aws-pinpoint": "1.129.0", + "@aws-cdk/aws-pinpointemail": "1.129.0", + "@aws-cdk/aws-qldb": "1.129.0", + "@aws-cdk/aws-quicksight": "1.129.0", + "@aws-cdk/aws-ram": "1.129.0", + "@aws-cdk/aws-rds": "1.129.0", + "@aws-cdk/aws-redshift": "1.129.0", + "@aws-cdk/aws-resourcegroups": "1.129.0", + "@aws-cdk/aws-robomaker": "1.129.0", + "@aws-cdk/aws-route53": "1.129.0", + "@aws-cdk/aws-route53recoverycontrol": "1.129.0", + "@aws-cdk/aws-route53recoveryreadiness": "1.129.0", + "@aws-cdk/aws-route53resolver": "1.129.0", + "@aws-cdk/aws-s3": "1.129.0", + "@aws-cdk/aws-s3objectlambda": "1.129.0", + "@aws-cdk/aws-s3outposts": "1.129.0", + "@aws-cdk/aws-sagemaker": "1.129.0", + "@aws-cdk/aws-sam": "1.129.0", + "@aws-cdk/aws-sdb": "1.129.0", + "@aws-cdk/aws-secretsmanager": "1.129.0", + "@aws-cdk/aws-securityhub": "1.129.0", + "@aws-cdk/aws-servicecatalog": "1.129.0", + "@aws-cdk/aws-servicecatalogappregistry": "1.129.0", + "@aws-cdk/aws-servicediscovery": "1.129.0", + "@aws-cdk/aws-ses": "1.129.0", + "@aws-cdk/aws-signer": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/aws-sqs": "1.129.0", + "@aws-cdk/aws-ssm": "1.129.0", + "@aws-cdk/aws-ssmcontacts": "1.129.0", + "@aws-cdk/aws-ssmincidents": "1.129.0", + "@aws-cdk/aws-sso": "1.129.0", + "@aws-cdk/aws-stepfunctions": "1.129.0", + "@aws-cdk/aws-synthetics": "1.129.0", + "@aws-cdk/aws-timestream": "1.129.0", + "@aws-cdk/aws-transfer": "1.129.0", + "@aws-cdk/aws-waf": "1.129.0", + "@aws-cdk/aws-wafregional": "1.129.0", + "@aws-cdk/aws-wafv2": "1.129.0", + "@aws-cdk/aws-workspaces": "1.129.0", + "@aws-cdk/aws-xray": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69", "yaml": "1.10.2" }, @@ -2219,13 +14776,13 @@ } }, "@aws-cdk/core": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.107.0.tgz", - "integrity": "sha512-yE0yU341HZWd7ee0SsMOToqz4xC3PoaDerSklxWWdgw3rgVatwP4pqrml5ZOE+q6vhPseESvNRjfZizKc7xK7w==", + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.129.0.tgz", + "integrity": "sha512-dv+IhyqPbyvgBWGtc1PboCO318PW54llRVyenItt1KxnE5PiGgj/9UFdFi4on+yogRr9GWlNes6OzaLq8+T0xw==", "requires": { - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "@aws-cdk/region-info": "1.107.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", "@balena/dockerignore": "^1.0.2", "constructs": "^3.3.69", "fs-extra": "^9.1.0", @@ -2268,7 +14825,7 @@ } }, "graceful-fs": { - "version": "4.2.6", + "version": "4.2.8", "bundled": true }, "ignore": { @@ -2297,26 +14854,26 @@ } }, "@aws-cdk/custom-resources": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.107.0.tgz", - "integrity": "sha512-VTf1eHmNaKEl/xuf4/wUxikRZecVbp+G+NDzW1rwxvGgWl4itd5aYhIvWeW0jO99d9VyXesrxRmdiA28ahXu7g==", - "requires": { - "@aws-cdk/aws-cloudformation": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.129.0.tgz", + "integrity": "sha512-s0lGYzc5/bVOgiLV1rot9p40ZCFuLxwLl7MJjpD36J0OBPsKwO5Wkp86zAyo5bwYzR7SIbqslbma7ZyGmA5Jaw==", + "requires": { + "@aws-cdk/aws-cloudformation": "1.129.0", + "@aws-cdk/aws-ec2": "1.129.0", + "@aws-cdk/aws-iam": "1.129.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/aws-logs": "1.129.0", + "@aws-cdk/aws-sns": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, "@aws-cdk/cx-api": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.107.0.tgz", - "integrity": "sha512-nNfdagY9MVrvvDGPjmdCpBaLGZeMxGAGOOUxFpWbkE7PoDRWcESVf0s2BERsIRLglPEab4eJOQ8PNIBTThSkPQ==", + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.129.0.tgz", + "integrity": "sha512-3orTh2xAYh2OFtPyabXNKWpyke49Qk7jLjVaT8ZasUL1yJYi9fvqVOcA1sZLtag66l1x+JAheYheTeD7WudjGw==", "requires": { - "@aws-cdk/cloud-assembly-schema": "1.107.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", "semver": "^7.3.5" }, "dependencies": { @@ -2341,60 +14898,77 @@ } }, "@aws-cdk/lambda-layer-awscli": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-awscli/-/lambda-layer-awscli-1.107.0.tgz", - "integrity": "sha512-GdhmCbBRgdzGtqoOEk6iioiQvWQ4gN9lsxTyvDLxfTt15qykj0vmRM/r3Umh9e8yVEaIBkOuRUmz6AXUrYst0A==", + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-awscli/-/lambda-layer-awscli-1.129.0.tgz", + "integrity": "sha512-Ch6Zc0y4AFT4FhM2GYnzN3jL3vwU7ZkLUTGYifdJEMXlBoqEKyEcuYp9t3ouwgY+35s37jVKIkyqDoeHyc5s9Q==", "requires": { - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/core": "1.107.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, "@aws-cdk/lambda-layer-kubectl": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl/-/lambda-layer-kubectl-1.107.0.tgz", - "integrity": "sha512-MMvaLoVPVLg8W088bMVHHSevr6SM0l7QAIN4bklf0rFQwlyUYeTZg2CNHghHEkuSOokid5sXQPBzwsEHtHHobQ==", + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl/-/lambda-layer-kubectl-1.129.0.tgz", + "integrity": "sha512-9MrXt6gk10uLcWCTU0zLVhKtFPp+KP4m9RPmMP/Qv/bCPd4ebTaHOb4QGwhiE9z5tVuk2vVaysGzl1zCSiT+Fg==", "requires": { - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/core": "1.107.0", + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", + "constructs": "^3.3.69" + } + }, + "@aws-cdk/lambda-layer-node-proxy-agent": { + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/lambda-layer-node-proxy-agent/-/lambda-layer-node-proxy-agent-1.129.0.tgz", + "integrity": "sha512-VKdFjj0o9Qx5NTimLQ4srEFHbbUVPeNrRB0j4YhhSbguxWAScpKd7Mcv43EACohzTv15h0uHpDaVWQgfd34Gfg==", + "requires": { + "@aws-cdk/aws-lambda": "1.129.0", + "@aws-cdk/core": "1.129.0", "constructs": "^3.3.69" } }, "@aws-cdk/region-info": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.107.0.tgz", - "integrity": "sha512-7ucj+0W+JfGxVyVnsYCCJUr0rBGciOJQq/7fp+Ntp76oTjJTsglC7mGiF3b0Gn65BTiJtPiZayX2L50mlJTPpA==" + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.129.0.tgz", + "integrity": "sha512-4GMx9ipgdDsf8PXR3Jw3vqiFdhdKVEz9oYOjQVfja7zcpOv7ol1WISVG1CBa0vU7QiZk/NpGxArTAs1G1ViKRg==" + }, + "@aws-sdk/service-error-classification": { + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.38.0.tgz", + "integrity": "sha512-/lWkibTVZz2+/CwembYJ+ETMVlwFWF7UBKdwa6xRIbE+sp74c1li1L6d/PU83PolAt86bLTXaKpdpMsj+d1WAg==" + }, + "@aws-sdk/types": { + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.38.0.tgz", + "integrity": "sha512-Opux3HLwMlWb7GIJxERsOnmbHrT2A1gsd8aF5zHapWPPH5Z0rYsgTIq64qgim896XlKlOw6/YzhD5CdyNjlQWg==" }, "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" } }, "@babel/compat-data": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", - "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", - "dev": true + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==" }, "@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "requires": { + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -2403,36 +14977,24 @@ "source-map": "^0.5.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "dev": true, + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", "requires": { - "@babel/types": "^7.14.2", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -2440,19 +15002,17 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, "@babel/helper-compilation-targets": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", - "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "requires": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-validator-option": "^7.12.17", + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" }, @@ -2460,140 +15020,133 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.15.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", - "dev": true, + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.15.4" } }, "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, "@babel/helper-replace-supers": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", - "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.4" + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.15.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.15.4" } }, "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" }, "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" }, "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -2602,7 +15155,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -2611,7 +15163,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2622,7 +15173,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -2630,26 +15180,22 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -2657,16 +15203,14 @@ } }, "@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", - "dev": true + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -2675,7 +15219,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -2684,7 +15227,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } @@ -2693,7 +15235,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -2702,7 +15243,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -2711,7 +15251,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -2720,7 +15259,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -2729,7 +15267,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -2738,7 +15275,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -2747,7 +15283,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -2756,109 +15291,97 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", - "dev": true, + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - } + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" } } }, "@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", - "dev": true, + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" } }, "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "devOptional": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "devOptional": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } }, "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", + "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.0.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", @@ -2891,20 +15414,30 @@ "argparse": "^1.0.7", "esprima": "^4.0.0" } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true } } }, + "@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, "requires": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -2917,312 +15450,124 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" } } }, "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, "@jest/console": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz", - "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz", + "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==", "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.0.2", - "jest-util": "^27.0.2", + "jest-message-util": "^27.3.1", + "jest-util": "^27.3.1", "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "@jest/core": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.4.tgz", - "integrity": "sha512-+dsmV8VUs1h/Szb+rEWk8xBM1fp1I///uFy9nk3wXGvRsF2lBp8EVPmtWc+QFRb3MY2b7u2HbkGF1fzoDzQTLA==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/reporters": "^27.0.4", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz", + "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==", + "requires": { + "@jest/console": "^27.3.1", + "@jest/reporters": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.2", - "jest-config": "^27.0.4", - "jest-haste-map": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.4", - "jest-resolve-dependencies": "^27.0.4", - "jest-runner": "^27.0.4", - "jest-runtime": "^27.0.4", - "jest-snapshot": "^27.0.4", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "jest-watcher": "^27.0.2", + "jest-changed-files": "^27.3.0", + "jest-config": "^27.3.1", + "jest-haste-map": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.3.1", + "jest-resolve-dependencies": "^27.3.1", + "jest-runner": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", + "jest-watcher": "^27.3.1", "micromatch": "^4.0.4", - "p-each-series": "^2.1.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "@jest/environment": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.3.tgz", - "integrity": "sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz", + "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==", "requires": { - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", + "@jest/fake-timers": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", - "jest-mock": "^27.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "jest-mock": "^27.3.0" } }, "@jest/fake-timers": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.3.tgz", - "integrity": "sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz", + "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==", "requires": { - "@jest/types": "^27.0.2", - "@sinonjs/fake-timers": "^7.0.2", + "@jest/types": "^27.2.5", + "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "jest-message-util": "^27.3.1", + "jest-mock": "^27.3.0", + "jest-util": "^27.3.1" } }, "@jest/globals": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.3.tgz", - "integrity": "sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz", + "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==", "requires": { - "@jest/environment": "^27.0.3", - "@jest/types": "^27.0.2", - "expect": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "@jest/environment": "^27.3.1", + "@jest/types": "^27.2.5", + "expect": "^27.3.1" } }, "@jest/reporters": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.4.tgz", - "integrity": "sha512-Xa90Nm3JnV0xCe4M6A10M9WuN9krb+WFKxV1A98Y4ePCw40n++r7uxFUNU7DT1i9Behj7fjrAIju9oU0t1QtCg==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz", + "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==", "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.2", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/console": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", + "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", @@ -3233,46 +15578,21 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.2", - "jest-resolve": "^27.0.4", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "jest-haste-map": "^27.3.1", + "jest-resolve": "^27.3.1", + "jest-util": "^27.3.1", + "jest-worker": "^27.3.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "v8-to-istanbul": "^8.1.0" } }, "@jest/source-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", - "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", - "dev": true, + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", + "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", "requires": { "callsites": "^3.0.0", "graceful-fs": "^4.2.4", @@ -3280,110 +15600,58 @@ } }, "@jest/test-result": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz", - "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz", + "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==", "requires": { - "@jest/console": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/console": "^27.3.1", + "@jest/types": "^27.2.5", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "@jest/test-sequencer": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.4.tgz", - "integrity": "sha512-6UFEVwdmxYdyNffBxVVZxmXEdBE4riSddXYSnFNH0ELFQFk/bvagizim8WfgJTqF4EKd+j1yFxvhb8BMHfOjSQ==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz", + "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==", "requires": { - "@jest/test-result": "^27.0.2", + "@jest/test-result": "^27.3.1", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-runtime": "^27.0.4" + "jest-haste-map": "^27.3.1", + "jest-runtime": "^27.3.1" } }, "@jest/transform": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.2.tgz", - "integrity": "sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz", + "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==", "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-util": "^27.0.2", + "jest-haste-map": "^27.3.1", + "jest-regex-util": "^27.0.6", + "jest-util": "^27.3.1", "micromatch": "^4.0.4", "pirates": "^4.0.1", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, @@ -3391,6 +15659,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3399,140 +15668,68 @@ "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, - "@npmcli/git": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.9.tgz", - "integrity": "sha512-hTMbMryvOqGLwnmMBKs5usbPsJtyEsMsgXwJbmNrsEuQQh1LAIMDU77IoOrwkCg+NgQWl+ySlarJASwM3SutCA==", - "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/node-gyp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", - "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==" - }, - "@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", - "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", - "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "infer-owner": "^1.0.4", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", - "dev": true, + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz", + "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==", "requires": { "@sinonjs/commons": "^1.7.0" } }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, "@tsconfig/node10": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.7.tgz", - "integrity": "sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ==", - "dev": true + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "devOptional": true }, "@tsconfig/node12": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.7.tgz", - "integrity": "sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==", - "dev": true + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "devOptional": true }, - "@tsconfig/node14": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.0.tgz", - "integrity": "sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ==", - "dev": true + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "devOptional": true }, "@tsconfig/node16": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", - "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "devOptional": true }, "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", - "dev": true, + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", @@ -3542,38 +15739,80 @@ } }, "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "dev": true, + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", - "dev": true, + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "requires": { "@babel/types": "^7.3.0" } }, + "@types/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/cls-hooked": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.3.tgz", + "integrity": "sha512-gNstDTb/ty5h6gJd6YpSPgsLX9LmRpaKJqGFp7MRlYxhwp4vXXKlJ9+bt1TZ9KbVNXE+Mbxy2AYXcpY21DDtJw==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz", + "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, "requires": { "@types/node": "*" } @@ -3581,14 +15820,12 @@ "@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -3597,193 +15834,216 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, "@types/jest": { - "version": "26.0.23", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", - "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", + "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", "dev": true, "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" } }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "@types/mysql": { + "version": "2.15.19", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.19.tgz", + "integrity": "sha512-wSRg2QZv14CWcZXkgdvHbbV2ACufNy5EgI8mBBxnJIptchv7DBy/h53VMa2jDhyo0C9MO4iowE6z9vF8Ja1DkQ==", + "requires": { + "@types/node": "*" + } }, "@types/node": { - "version": "15.12.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz", - "integrity": "sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==", - "dev": true + "version": "16.11.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.2.tgz", + "integrity": "sha512-w34LtBB0OkDTs19FQHXy4Ig/TOXI4zqvXS2Kk1PAsRKZ0I+nik7LlMYxckW0tSNGtvWmzB+mrCTbuEjuB9DVsw==" }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "requires": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } }, "@types/prettier": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", - "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", - "dev": true + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } }, "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", - "dev": true, + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", - "dev": true + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "@typescript-eslint/eslint-plugin": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz", - "integrity": "sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.1.0.tgz", + "integrity": "sha512-bekODL3Tqf36Yz8u+ilha4zGxL9mdB6LIsIoMAvvC5FAuWo4NpZYXtCbv7B2CeR1LhI/lLtLk+q4tbtxuoVuCg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.26.0", - "@typescript-eslint/scope-manager": "4.26.0", - "debug": "^4.3.1", + "@typescript-eslint/experimental-utils": "5.1.0", + "@typescript-eslint/scope-manager": "5.1.0", + "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.21", - "regexpp": "^3.1.0", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, "@typescript-eslint/experimental-utils": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz", - "integrity": "sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.1.0.tgz", + "integrity": "sha512-ovE9qUiZMOMgxQAESZsdBT+EXIfx/YUYAbwGUI6V03amFdOOxI9c6kitkgRvLkJaLusgMZ2xBhss+tQ0Y1HWxA==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.26.0", - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/typescript-estree": "4.26.0", + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.1.0", + "@typescript-eslint/types": "5.1.0", + "@typescript-eslint/typescript-estree": "5.1.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.26.0.tgz", - "integrity": "sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.1.0.tgz", + "integrity": "sha512-vx1P+mhCtYw3+bRHmbalq/VKP2Y3gnzNgxGxfEWc6OFpuEL7iQdAeq11Ke3Rhy8NjgB+AHsIWEwni3e+Y7djKA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.26.0", - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/typescript-estree": "4.26.0", - "debug": "^4.3.1" + "@typescript-eslint/scope-manager": "5.1.0", + "@typescript-eslint/types": "5.1.0", + "@typescript-eslint/typescript-estree": "5.1.0", + "debug": "^4.3.2" } }, "@typescript-eslint/scope-manager": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz", - "integrity": "sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.1.0.tgz", + "integrity": "sha512-yYlyVjvn5lvwCL37i4hPsa1s0ORsjkauhTqbb8MnpvUs7xykmcjGqwlNZ2Q5QpoqkJ1odlM2bqHqJwa28qV6Tw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/visitor-keys": "4.26.0" + "@typescript-eslint/types": "5.1.0", + "@typescript-eslint/visitor-keys": "5.1.0" } }, "@typescript-eslint/types": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.26.0.tgz", - "integrity": "sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.1.0.tgz", + "integrity": "sha512-sEwNINVxcB4ZgC6Fe6rUyMlvsB2jvVdgxjZEjQUQVlaSPMNamDOwO6/TB98kFt4sYYfNhdhTPBEQqNQZjMMswA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz", - "integrity": "sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.1.0.tgz", + "integrity": "sha512-SSz+l9YrIIsW4s0ZqaEfnjl156XQ4VRmJsbA0ZE1XkXrD3cRpzuZSVCyqeCMR3EBjF27IisWakbBDGhGNIOvfQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.26.0", - "@typescript-eslint/visitor-keys": "4.26.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", + "@typescript-eslint/types": "5.1.0", + "@typescript-eslint/visitor-keys": "5.1.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz", - "integrity": "sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.1.0.tgz", + "integrity": "sha512-uqNXepKBg81JVwjuqAxYrXa1Ql/YDzM+8g/pS+TCPxba0wZttl8m5DkrasbfnmJGHs4lQ2jTbcZ5azGhI7kK+w==", "dev": true, "requires": { - "@typescript-eslint/types": "4.26.0", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.1.0", + "eslint-visitor-keys": "^3.0.0" } }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==" }, "acorn-globals": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, "requires": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } } }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, "agent-base": { "version": "6.0.2", @@ -3793,20 +16053,11 @@ "debug": "4" } }, - "agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -3816,6 +16067,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3823,44 +16075,6 @@ "uri-js": "^4.2.2" } }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -3871,7 +16085,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "requires": { "type-fest": "^0.21.3" }, @@ -3879,15 +16092,14 @@ "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -3901,115 +16113,83 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "devOptional": true }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "async-hook-jl": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", + "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", + "requires": { + "stack-chain": "^1.3.7" + } }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "atomic-batcher": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/atomic-batcher/-/atomic-batcher-1.0.2.tgz", + "integrity": "sha1-0WkB0QzOxZUWwZe5zNiTBom4E7Q=" + }, "aws-cdk": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.107.0.tgz", - "integrity": "sha512-OOcmb8cHZ/NGkI/dEE02dZPrrWcpanWfK6JRIxAFB2VoBv49ijFvvTt+S2vuBxboNzBr4Dr4gEIq5SabY9co6w==", + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.129.0.tgz", + "integrity": "sha512-9Se35i7mtRB2m0gbrdgQmDjFS6NeI+72wsXaOJQg0xMIX+vnl5mXdmCy7SDJEtYUBTz/Db7wcuXJ46t0+rRLyA==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/cloudformation-diff": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "@aws-cdk/region-info": "1.107.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cloudformation-diff": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", + "@aws-cdk/region-info": "1.129.0", + "@jsii/check-node": "1.40.0", "archiver": "^5.3.0", - "aws-sdk": "^2.848.0", + "aws-sdk": "^2.979.0", "camelcase": "^6.2.0", - "cdk-assets": "1.107.0", + "cdk-assets": "1.129.0", "colors": "^1.4.0", - "decamelize": "^5.0.0", + "decamelize": "^5.0.1", "fs-extra": "^9.1.0", - "glob": "^7.1.7", + "glob": "^7.2.0", "json-diff": "^0.5.4", "minimatch": ">=3.0", "promptly": "^3.2.0", - "proxy-agent": "^4.0.1", + "proxy-agent": "^5.0.0", "semver": "^7.3.5", - "source-map-support": "^0.5.19", - "table": "^6.7.1", + "source-map-support": "^0.5.20", + "table": "^6.7.2", "uuid": "^8.3.2", "wrap-ansi": "^7.0.0", "yaml": "1.10.2", @@ -4017,18 +16197,15 @@ }, "dependencies": { "@aws-cdk/cfnspec": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.107.0.tgz", - "integrity": "sha512-GzA5jyInk8V7cNeUa3DutPnSGLxNezQ2IKZsnYDh8MZnBnZQ/OiRuLm1B5RIJMQpWIFWJzJ4D0Qnez8N0O3+PQ==", + "version": "1.129.0", "dev": true, "requires": { + "fs-extra": "^9.1.0", "md5": "^2.3.0" } }, "@aws-cdk/cloud-assembly-schema": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.107.0.tgz", - "integrity": "sha512-z1WdnHrHGR6VF7p7Xv6MAwlr4sCGsFGGRJmk4WmvcFosOclLFKfSsxFE2w5RMmuyxLxdJmarSYF3AKOwm9mHng==", + "version": "1.129.0", "dev": true, "requires": { "jsonschema": "^1.4.0", @@ -4036,51 +16213,55 @@ } }, "@aws-cdk/cloudformation-diff": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.107.0.tgz", - "integrity": "sha512-/FpJfrLHKNWUKOQ9a0yde42jo2s7+0W3XQnTWal1fN4f1n84KB2xLp/ZSI/7TAhHECQxlQDLtTUciDNuzd9qTg==", + "version": "1.129.0", "dev": true, "requires": { - "@aws-cdk/cfnspec": "1.107.0", + "@aws-cdk/cfnspec": "1.129.0", "@types/node": "^10.17.60", "colors": "^1.4.0", "diff": "^5.0.0", "fast-deep-equal": "^3.1.3", - "string-width": "^4.2.2", - "table": "^6.7.1" + "string-width": "^4.2.3", + "table": "^6.7.2" } }, "@aws-cdk/cx-api": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.107.0.tgz", - "integrity": "sha512-nNfdagY9MVrvvDGPjmdCpBaLGZeMxGAGOOUxFpWbkE7PoDRWcESVf0s2BERsIRLglPEab4eJOQ8PNIBTThSkPQ==", + "version": "1.129.0", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.107.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", "semver": "^7.3.5" } }, "@aws-cdk/region-info": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.107.0.tgz", - "integrity": "sha512-7ucj+0W+JfGxVyVnsYCCJUr0rBGciOJQq/7fp+Ntp76oTjJTsglC7mGiF3b0Gn65BTiJtPiZayX2L50mlJTPpA==", + "version": "1.129.0", "dev": true }, + "@jsii/check-node": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@jsii/check-node/-/check-node-1.40.0.tgz#49882a61ad1b3a37cd35c35fa1a2301955f1c058", + "integrity": "sha512-rk0hFXxFQR8rDGUfsZT9ua6OufOpnLQWsNFyFU86AvpoKQ0ciw2KlGdWs7OYFnzPq8sQGhSS+iuBrUboaHW3jg==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "semver": "^7.3.5" + } + }, "@tootallnate/once": { "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, "@types/node": { "version": "10.17.60", - "resolved": "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b", "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", "dev": true }, "agent-base": { "version": "6.0.2", - "resolved": "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { @@ -4088,9 +16269,9 @@ } }, "ajv": { - "version": "8.3.0", - "resolved": "https://registry.yarnpkg.com/ajv/-/ajv-8.3.0.tgz#25ee7348e32cdc4a1dbb38256bf6bdc451dd577c", - "integrity": "sha512-RYE7B5An83d7eWnDR8kbdaIFqmKCNsP16ay1hDbJEU+sa0e3H9SebskCt0Uufem6cfAVu7Col6ubcn/W+Sm8/Q==", + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -4100,14 +16281,14 @@ } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { @@ -4116,7 +16297,7 @@ }, "archiver": { "version": "5.3.0", - "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba", "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", "dev": true, "requires": { @@ -4131,7 +16312,7 @@ }, "archiver-utils": { "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dev": true, "requires": { @@ -4149,7 +16330,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { @@ -4166,7 +16347,7 @@ }, "ast-types": { "version": "0.13.4", - "resolved": "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782", "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, "requires": { @@ -4175,26 +16356,26 @@ }, "astral-regex": { "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { - "version": "3.2.0", - "resolved": "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8", + "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==", "dev": true }, "at-least-node": { "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, "aws-sdk": { - "version": "2.903.0", - "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.903.0.tgz#4c8252723370ebbdaffe69f4dfddc5973b1dab4a", - "integrity": "sha512-BP/giYLP8QJ63Jta59kph1F76oPITxRt/wNr3BdoEs9BtshWlGKk149UaseDB4wJtI+0TER5jtzBIUBcP6E+wA==", + "version": "2.1006.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1006.0.tgz#fc2f7e267d19a6297f732e19449461bb944682af", + "integrity": "sha512-lwXAy706+1HVQqMnHaahdeBZZbdu6TWrtTY0ydeG0qanwldTFNMLczwnETTZWYsqNAU+wjl1VzmFdMO4gePLNQ==", "dev": true, "requires": { "buffer": "4.9.2", @@ -4210,7 +16391,7 @@ "dependencies": { "buffer": { "version": "4.9.2", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { @@ -4221,7 +16402,7 @@ "dependencies": { "ieee754": { "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true } @@ -4229,13 +16410,13 @@ }, "ieee754": { "version": "1.1.13", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "uuid": { "version": "3.3.2", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true } @@ -4243,19 +16424,19 @@ }, "balanced-match": { "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base64-js": { "version": "1.5.1", - "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "bl": { "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "requires": { @@ -4266,7 +16447,7 @@ }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { @@ -4276,7 +16457,7 @@ }, "buffer": { "version": "5.7.1", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { @@ -4286,51 +16467,60 @@ }, "buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "bytes": { "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, "camelcase": { "version": "6.2.0", - "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "cdk-assets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.107.0.tgz", - "integrity": "sha512-Haqs+k8PDxY1Ppfcwt4paQTuTWlm6ulb3OESQ5aOpkCvpWa3e5TsCoCadAgjpRHDjM7fvUj8vgWx8C1+HQlH3A==", + "version": "1.129.0", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", + "@aws-cdk/cloud-assembly-schema": "1.129.0", + "@aws-cdk/cx-api": "1.129.0", "archiver": "^5.3.0", "aws-sdk": "^2.848.0", - "glob": "^7.1.7", + "glob": "^7.2.0", + "mime": "^2.5.2", "yargs": "^16.2.0" } }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "charenc": { "version": "0.0.2", - "resolved": "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667", "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", "dev": true }, "cli-color": { "version": "0.1.7", - "resolved": "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347", "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=", "dev": true, "requires": { @@ -4339,7 +16529,7 @@ }, "cliui": { "version": "7.0.4", - "resolved": "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { @@ -4350,7 +16540,7 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { @@ -4359,43 +16549,43 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "colors": { "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, "compress-commons": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.0.tgz#25ec7a4528852ccd1d441a7d4353cd0ece11371b", - "integrity": "sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "dev": true, "requires": { "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.1", + "crc32-stream": "^4.0.2", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" } }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "crc-32": { "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208", "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", "dev": true, "requires": { @@ -4405,7 +16595,7 @@ }, "crc32-stream": { "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007", "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "dev": true, "requires": { @@ -4415,63 +16605,64 @@ }, "crypt": { "version": "0.0.2", - "resolved": "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b", "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", "dev": true }, "data-uri-to-buffer": { "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636", "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", "dev": true }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "decamelize": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.0.tgz#88358157b010ef133febfd27c18994bd80c6215b", - "integrity": "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", "dev": true }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "degenerator": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254", - "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.1.tgz#7ef78ec0c8577a544477308ddf1d2d6e88d51f5b", + "integrity": "sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==", "dev": true, "requires": { "ast-types": "^0.13.2", "escodegen": "^1.8.1", - "esprima": "^4.0.0" + "esprima": "^4.0.0", + "vm2": "^3.9.3" } }, "depd": { "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, "diff": { "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "difflib": { "version": "0.2.4", - "resolved": "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e", "integrity": "sha1-teMDYabbAjF21WKJLbhZQKcY9H4=", "dev": true, "requires": { @@ -4480,7 +16671,7 @@ }, "dreamopt": { "version": "0.6.0", - "resolved": "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b", + "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b", "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=", "dev": true, "requires": { @@ -4489,13 +16680,13 @@ }, "emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { @@ -4504,86 +16695,85 @@ }, "es5-ext": { "version": "0.8.2", - "resolved": "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab", "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=", "dev": true }, "escalade": { "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escodegen": { "version": "1.14.3", - "resolved": "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503", "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "optionator": "^0.8.1" } }, "esprima": { "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "estraverse": { "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { "version": "2.0.3", - "resolved": "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "events": { "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, "exit-on-epipe": { "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692", "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", "dev": true }, "fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "file-uri-to-path": { "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba", "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", "dev": true }, "fs-constants": { "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "fs-extra": { "version": "9.1.0", - "resolved": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { @@ -4595,13 +16785,13 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "ftp": { "version": "0.3.10", - "resolved": "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d", "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", "dev": true, "requires": { @@ -4611,13 +16801,13 @@ "dependencies": { "isarray": { "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -4629,7 +16819,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -4637,13 +16827,13 @@ }, "get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-uri": { "version": "3.0.2", - "resolved": "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c", "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", "dev": true, "requires": { @@ -4657,7 +16847,7 @@ "dependencies": { "fs-extra": { "version": "8.1.0", - "resolved": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { @@ -4668,25 +16858,22 @@ }, "jsonfile": { "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } + "dev": true }, "universalify": { "version": "0.1.2", - "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true } } }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4698,20 +16885,26 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "heap": { "version": "0.2.6", - "resolved": "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac", "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=", "dev": true }, "http-errors": { "version": "1.7.3", - "resolved": "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06", "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", "dev": true, "requires": { @@ -4724,7 +16917,7 @@ }, "http-proxy-agent": { "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { @@ -4735,7 +16928,7 @@ }, "https-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { @@ -4745,7 +16938,7 @@ }, "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { @@ -4754,13 +16947,13 @@ }, "ieee754": { "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { @@ -4770,43 +16963,43 @@ }, "inherits": { "version": "2.0.4", - "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "ip": { "version": "1.1.5", - "resolved": "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a", "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, "is-buffer": { "version": "1.1.6", - "resolved": "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "jmespath": { "version": "0.15.0", - "resolved": "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", "dev": true }, "json-diff": { "version": "0.5.4", - "resolved": "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a", + "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a", "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==", "dev": true, "requires": { @@ -4817,29 +17010,28 @@ }, "json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, "jsonfile": { "version": "6.1.0", - "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6", "universalify": "^2.0.0" } }, "jsonschema": { "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2", "integrity": "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==", "dev": true }, "lazystream": { "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { @@ -4848,7 +17040,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { @@ -4865,7 +17057,7 @@ }, "levn": { "version": "0.3.0", - "resolved": "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { @@ -4875,49 +17067,49 @@ }, "lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, "lodash.defaults": { "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", "dev": true }, "lodash.difference": { "version": "4.5.0", - "resolved": "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c", "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", "dev": true }, "lodash.flatten": { "version": "4.4.0", - "resolved": "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f", "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, "lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, "lodash.truncate": { "version": "4.4.2", - "resolved": "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193", "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, "lodash.union": { "version": "4.6.0", - "resolved": "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", "dev": true }, "lru-cache": { "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { @@ -4926,7 +17118,7 @@ }, "md5": { "version": "2.3.0", - "resolved": "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f", "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, "requires": { @@ -4935,9 +17127,15 @@ "is-buffer": "~1.1.6" } }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true + }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { @@ -4946,31 +17144,31 @@ }, "ms": { "version": "2.1.2", - "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "mute-stream": { "version": "0.0.8", - "resolved": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "netmask": { "version": "2.0.2", - "resolved": "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7", "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true }, "normalize-path": { "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "once": { "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { @@ -4979,7 +17177,7 @@ }, "optionator": { "version": "0.8.3", - "resolved": "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { @@ -4992,9 +17190,9 @@ } }, "pac-proxy-agent": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb", - "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e", + "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", "dev": true, "requires": { "@tootallnate/once": "1", @@ -5003,49 +17201,49 @@ "get-uri": "3", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "5", - "pac-resolver": "^4.1.0", + "pac-resolver": "^5.0.0", "raw-body": "^2.2.0", "socks-proxy-agent": "5" } }, "pac-resolver": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd", - "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz#1d717a127b3d7a9407a16d6e1b012b13b9ba8dc0", + "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", "dev": true, "requires": { - "degenerator": "^2.2.0", + "degenerator": "^3.0.1", "ip": "^1.1.5", "netmask": "^2.0.1" } }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "prelude-ls": { "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, "printj": { "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222", "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", "dev": true }, "process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "promptly": { "version": "3.2.0", - "resolved": "https://registry.yarnpkg.com/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8", + "resolved": "https://registry.npmjs.org/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8", "integrity": "sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug==", "dev": true, "requires": { @@ -5053,9 +17251,9 @@ } }, "proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c", - "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b", + "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", "dev": true, "requires": { "agent-base": "^6.0.0", @@ -5063,14 +17261,14 @@ "http-proxy-agent": "^4.0.0", "https-proxy-agent": "^5.0.0", "lru-cache": "^5.1.1", - "pac-proxy-agent": "^4.1.0", + "pac-proxy-agent": "^5.0.0", "proxy-from-env": "^1.0.0", "socks-proxy-agent": "^5.0.0" }, "dependencies": { "lru-cache": { "version": "5.1.1", - "resolved": "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { @@ -5079,7 +17277,7 @@ }, "yallist": { "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } @@ -5087,25 +17285,25 @@ }, "proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, "punycode": { "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "querystring": { "version": "0.2.0", - "resolved": "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, "raw-body": { "version": "2.4.1", - "resolved": "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c", "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", "dev": true, "requires": { @@ -5117,7 +17315,7 @@ }, "read": { "version": "1.0.7", - "resolved": "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4", "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "dev": true, "requires": { @@ -5126,7 +17324,7 @@ }, "readable-stream": { "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { @@ -5137,13 +17335,13 @@ "dependencies": { "safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, "string_decoder": { "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { @@ -5154,7 +17352,7 @@ }, "readdir-glob": { "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4", "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", "dev": true, "requires": { @@ -5163,37 +17361,37 @@ }, "require-directory": { "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-from-string": { "version": "2.0.2", - "resolved": "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "sax": { "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a", "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", "dev": true }, "semver": { "version": "7.3.5", - "resolved": "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { @@ -5202,13 +17400,13 @@ }, "setprototypeof": { "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { @@ -5218,14 +17416,14 @@ } }, "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true }, "socks": { "version": "2.6.1", - "resolved": "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e", "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", "dev": true, "requires": { @@ -5234,26 +17432,26 @@ } }, "socks-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60", - "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", "dev": true, "requires": { - "agent-base": "6", + "agent-base": "^6.0.2", "debug": "4", "socks": "^2.3.3" } }, "source-map": { "version": "0.6.1", - "resolved": "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -5262,56 +17460,65 @@ }, "statuses": { "version": "1.5.0", - "resolved": "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "ansi-regex": "^5.0.1" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "has-flag": "^4.0.0" } }, "table": { - "version": "6.7.1", - "resolved": "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz#a8d39b9f5966693ca8b0feba270a78722cbaf3b0", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", "dev": true, "requires": { "ajv": "^8.0.1", "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" } }, "tar-stream": { "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "requires": { @@ -5324,19 +17531,19 @@ }, "toidentifier": { "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, "tslib": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true }, "type-check": { "version": "0.3.2", - "resolved": "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { @@ -5345,19 +17552,19 @@ }, "universalify": { "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, "uri-js": { "version": "4.4.1", - "resolved": "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { @@ -5366,7 +17573,7 @@ }, "url": { "version": "0.10.3", - "resolved": "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64", "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", "dev": true, "requires": { @@ -5376,7 +17583,7 @@ "dependencies": { "punycode": { "version": "1.3.2", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true } @@ -5384,31 +17591,37 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "uuid": { "version": "8.3.2", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, + "vm2": { + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.4.tgz#2e118290fefe7bd8ea09ebe2f5faf53730dbddaa", + "integrity": "sha512-sOdharrJ7KEePIpHekiWaY1DwgueuiBeX/ZBJUPgETsVlJsXuEx0K0/naATq2haFvJrvZnRiORQRubR0b7Ye6g==", + "dev": true + }, "word-wrap": { "version": "1.2.3", - "resolved": "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wordwrap": { "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, "wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { @@ -5419,13 +17632,13 @@ }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "xml2js": { "version": "0.4.19", - "resolved": "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, "requires": { @@ -5435,7 +17648,7 @@ "dependencies": { "sax": { "version": "1.2.4", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true } @@ -5443,37 +17656,37 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", "dev": true }, "xregexp": { "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943", "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", "dev": true }, "y18n": { "version": "5.0.8", - "resolved": "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yaml": { "version": "1.10.2", - "resolved": "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { "version": "16.2.0", - "resolved": "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { @@ -5487,14 +17700,14 @@ } }, "yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, "zip-stream": { "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79", "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "dev": true, "requires": { @@ -5505,74 +17718,127 @@ } } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "aws-sdk": { + "version": "2.1013.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1013.0.tgz", + "integrity": "sha512-TXxkp/meAdofpC15goFpNuur7fvh/mcMRfHJoP1jYzTtD0wcoB4FK16GLcny0uDYgkQgZuiO9QYv3Rq5bhGCqQ==", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, + "aws-xray-sdk": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/aws-xray-sdk/-/aws-xray-sdk-3.3.3.tgz", + "integrity": "sha512-bGO/HolPGW8N39wUuERbn0GPlwgAmDrgt7nKYXR2ecRq2YauKQOHS8K+kD4aZ6QSZnlP5CrYMmtU6BnMkt3DUQ==", + "requires": { + "aws-xray-sdk-core": "3.3.3", + "aws-xray-sdk-express": "3.3.3", + "aws-xray-sdk-mysql": "3.3.3", + "aws-xray-sdk-postgres": "3.3.3" + } + }, + "aws-xray-sdk-core": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-3.3.3.tgz", + "integrity": "sha512-S8o+ZY12wEnDQolC5RGQ8RHZqezHeV3l/ODqrYOJAlRjT92FDutQkQqTfr+hD1Ia+puIXzL9U7eyVSsKmoI+1w==", + "requires": { + "@aws-sdk/service-error-classification": "^3.4.1", + "@aws-sdk/types": "^3.4.1", + "@types/cls-hooked": "^4.3.3", + "atomic-batcher": "^1.0.2", + "cls-hooked": "^4.2.2", + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "aws-xray-sdk-express": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-express/-/aws-xray-sdk-express-3.3.3.tgz", + "integrity": "sha512-VLDfpWWlYUEqA/f3OWaPHk6lAlONrAbG8ECcCPKT3skhWe8LL3bCDFZJOs08V+3ZgBCjm8iMStlXxnNu+XHevw==", + "requires": { + "@types/express": "*" + } }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "aws-xray-sdk-mysql": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-mysql/-/aws-xray-sdk-mysql-3.3.3.tgz", + "integrity": "sha512-BkwrT5Zu+og1nT+g0FgQRpdidKr3g9snTFHsirwbJATO0pmGNuuUjBUMTFyydTTSwa7ocqL9wPsmOmqY9kPZig==", + "requires": { + "@types/mysql": "*" + } + }, + "aws-xray-sdk-postgres": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-postgres/-/aws-xray-sdk-postgres-3.3.3.tgz", + "integrity": "sha512-Fu6+XpkiOgyFiivKj3kppXdYzwGIoijiq1q9FJb/tbxfOLSTHunJpS5WzTuNdzOUJdvTtPDimcE4jjqS+4a5FQ==", + "requires": { + "@types/pg": "*" + } }, "babel-jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.2.tgz", - "integrity": "sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz", + "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==", "requires": { - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.1", + "babel-preset-jest": "^27.2.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.0.4.tgz", + "integrity": "sha512-W6jJF9rLGEISGoCyXRqa/JCGQGmmxPO10TMu7izaUTynxvBvTjqzAIIGCK9USBmIbQAaSWD6XJPrM9Pv5INknw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, "babel-plugin-jest-hoist": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", - "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", - "dev": true, + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", + "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -5584,7 +17850,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -5601,12 +17866,11 @@ } }, "babel-preset-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", - "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", - "dev": true, + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", + "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", "requires": { - "babel-plugin-jest-hoist": "^27.0.1", + "babel-plugin-jest-hoist": "^27.2.0", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -5615,62 +17879,191 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "blea-base-ct-audit": { + "version": "file:usecases/base-ct-audit", + "requires": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + } + }, + "blea-base-ct-guest": { + "version": "file:usecases/base-ct-guest", + "requires": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-config": "^1.129.0", + "@aws-cdk/aws-events": "^1.129.0", + "@aws-cdk/aws-events-targets": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + } + }, + "blea-base-standalone": { + "version": "file:usecases/base-standalone", + "requires": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudtrail": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-config": "^1.129.0", + "@aws-cdk/aws-events": "^1.129.0", + "@aws-cdk/aws-events-targets": "^1.129.0", + "@aws-cdk/aws-guardduty": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-kms": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-s3": "^1.129.0", + "@aws-cdk/aws-securityhub": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/cloudformation-include": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + } + }, + "blea-guest-apiapp-sample": { + "version": "file:usecases/guest-apiapp-sample", + "requires": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-apigateway": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-dynamodb": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-kms": "^1.129.0", + "@aws-cdk/aws-lambda": "^1.129.0", + "@aws-cdk/aws-lambda-nodejs": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "aws-sdk": "^2.1012.0", + "aws-xray-sdk": "^3.3.3", + "esbuild": "^0.13.8", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + } + }, + "blea-guest-ecsapp-sample": { + "version": "file:usecases/guest-webapp-sample", + "requires": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-autoscaling": "^1.129.0", + "@aws-cdk/aws-certificatemanager": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudfront": "^1.129.0", + "@aws-cdk/aws-cloudfront-origins": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-codebuild": "^1.129.0", + "@aws-cdk/aws-ec2": "^1.129.0", + "@aws-cdk/aws-ecr": "^1.129.0", + "@aws-cdk/aws-ecs": "^1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "^1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2-targets": "^1.129.0", + "@aws-cdk/aws-events": "^1.129.0", + "@aws-cdk/aws-events-targets": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-kms": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-rds": "^1.129.0", + "@aws-cdk/aws-route53": "^1.129.0", + "@aws-cdk/aws-route53-targets": "^1.129.0", + "@aws-cdk/aws-s3": "^1.129.0", + "@aws-cdk/aws-s3-assets": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/aws-synthetics": "^1.129.0", + "@aws-cdk/aws-wafv2": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "@aws-cdk/custom-resources": "^1.129.0", + "@aws-cdk/region-info": "^1.129.0", + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + } + }, + "bleadeploy": { + "version": "file:tools/cicd", + "requires": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-codebuild": "^1.129.0", + "@aws-cdk/aws-codepipeline": "^1.129.0", + "@aws-cdk/aws-codepipeline-actions": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "aws-cdk": "^1.129.0", + "jest": "^27.0.4", + "source-map-support": "^0.5.19", + "ts-jest": "^27.0.3", + "ts-node": "^10.0.0", + "typescript": "~4.4.4" } }, "brace-expansion": { @@ -5693,20 +18086,18 @@ "browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz", + "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==", "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001271", + "electron-to-chromium": "^1.3.878", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" } }, "bs-logger": { @@ -5722,110 +18113,44 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, "requires": { "node-int64": "^0.4.0" } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" - }, - "cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { - "version": "1.0.30001235", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz", - "integrity": "sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "version": "1.0.30001271", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", + "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==" }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5834,45 +18159,28 @@ "char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" }, "charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/cint/-/cint-8.2.1.tgz", - "integrity": "sha1-cDhrG0jidz0NYxZqVa/5TvRFahI=" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==" }, "cjs-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", - "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", - "dev": true + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true }, "cli-cursor": { "version": "3.1.0", @@ -5883,14 +18191,6 @@ "restore-cursor": "^3.1.0" } }, - "cli-table": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz", - "integrity": "sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ==", - "requires": { - "colors": "1.0.3" - } - }, "cli-truncate": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", @@ -5899,134 +18199,44 @@ "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "cls-hooked": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", + "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", "requires": { - "mimic-response": "^1.0.0" + "async-hook-jl": "^1.7.6", + "emitter-listener": "^1.0.1", + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" }, "color-convert": { "version": "2.0.1", @@ -6042,15 +18252,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "dev": true }, "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "combined-stream": { "version": "1.0.8", @@ -6061,90 +18271,39 @@ } }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, "constructs": { - "version": "3.3.75", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.3.75.tgz", - "integrity": "sha512-q10foASSSfDWmS99OQLfnWDXCzqLvoORISAVWPFg0AmIGlBv2ZdDOtXxLqrJARPxVlOldmW2JzWzdRI+4+0/ZA==" + "version": "3.3.161", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.3.161.tgz", + "integrity": "sha512-/27vW3fo0iyb3py4vKI1BduEYmv8vv8uJgLXvI+5F0Jbnn0/E+As2wkGMa7bumhzCd0Ckv/USkAXstGYVXTYQA==" }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "requires": { "safe-buffer": "~5.1.1" } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "dependencies": { - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - } - } - }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "devOptional": true }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6154,25 +18313,17 @@ "crypt": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" }, "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" }, "cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, "requires": { "cssom": "~0.3.6" }, @@ -6180,24 +18331,14 @@ "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" } } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, "requires": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", @@ -6205,101 +18346,58 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } }, "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" }, "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==" }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "requires": { "path-type": "^4.0.0" } @@ -6317,7 +18415,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, "requires": { "webidl-conversions": "^5.0.0" }, @@ -6325,66 +18422,32 @@ "webidl-conversions": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" } } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "electron-to-chromium": { + "version": "1.3.878", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz", + "integrity": "sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==" }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "shimmer": "^1.2.0" } }, - "electron-to-chromium": { - "version": "1.3.749", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz", - "integrity": "sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A==", - "dev": true - }, "emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "enquirer": { "version": "2.3.6", @@ -6395,70 +18458,154 @@ "ansi-colors": "^4.1.1" } }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "esbuild": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.9.tgz", + "integrity": "sha512-8bYcckmisXjGvBMeylp1PRtu21uOoCDFAgXGGF2BR241zYQDN6ZLNvcmQlnQ7olG0p6PRWmJI8WVH3ca8viPuw==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.13.9", + "esbuild-darwin-64": "0.13.9", + "esbuild-darwin-arm64": "0.13.9", + "esbuild-freebsd-64": "0.13.9", + "esbuild-freebsd-arm64": "0.13.9", + "esbuild-linux-32": "0.13.9", + "esbuild-linux-64": "0.13.9", + "esbuild-linux-arm": "0.13.9", + "esbuild-linux-arm64": "0.13.9", + "esbuild-linux-mips64le": "0.13.9", + "esbuild-linux-ppc64le": "0.13.9", + "esbuild-netbsd-64": "0.13.9", + "esbuild-openbsd-64": "0.13.9", + "esbuild-sunos-64": "0.13.9", + "esbuild-windows-32": "0.13.9", + "esbuild-windows-64": "0.13.9", + "esbuild-windows-arm64": "0.13.9" + } + }, + "esbuild-android-arm64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.9.tgz", + "integrity": "sha512-Ty0hKldtjJVLHwUwbKR4GFPiXBo5iQ3aE1OLBar9lh3myaRkUGEb+Ypl74LEKa0+t/9lS3Ev1N5+5P2Sq6UvNQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.9.tgz", + "integrity": "sha512-Ay0/b98v0oYp3ApXNQ7QPbaSkCT9WjBU6h8bMB1SYrQ/PmHgwph91fb9V0pfOLKK1rYWypfrNbI0MyT2tWN+rQ==", + "dev": true, + "optional": true }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "esbuild-darwin-arm64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.9.tgz", + "integrity": "sha512-nJB8chaJdWathCe6EyIiMIqfyEzbuXPyNsPlL3bYRB1zFCF8feXT874D4IHbJ/w8B6BpY3sM1Clr/I/DK8E4ow==", + "dev": true, + "optional": true }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "esbuild-freebsd-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.9.tgz", + "integrity": "sha512-ktaBujf12XLkVXLGx7WjFcmh1tt34tm7gP4pHkhvbzbHrq+BbXwcl4EsW+5JT9VNKl7slOGf4Qnua/VW7ZcnIw==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } + "optional": true }, - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "esbuild-freebsd-arm64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.9.tgz", + "integrity": "sha512-vVa5zps4dmwpXwv/amxVpIWvFJuUPWQkpV+PYtZUW9lqjXsQ3LBHP51Q1cXZZBIrqwszLsEyJPa5GuDOY15hzQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } + "optional": true }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "esbuild-linux-32": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.9.tgz", + "integrity": "sha512-HxoW9QNqhO8VW1l7aBiYQH4lobeHq85+blZ4nlZ7sg5CNhGRRwnMlV6S08VYKz6V0YKnHb5OqJxx2HZuTZ7tgQ==", "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } + "optional": true + }, + "esbuild-linux-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.9.tgz", + "integrity": "sha512-L+eAR8o1lAUr9g64RXnBLuWZjAItAOWSUpvkchpa6QvSnXFA/nG6PgGsOBEqhDXl9qYEpGI0ReDrFkf8ByapvQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.9.tgz", + "integrity": "sha512-DT0S+ufCVXatPZHjkCaBgZSFIV8FzY4GEHz/BlkitTWzUvT1dIUXjPIRPnqBUVa+0AyS1bZSfHzv9hTT4LHz7A==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.9.tgz", + "integrity": "sha512-IjbhZpW5VQYK4nVI4dj/mLvH5oXAIf57OI8BYVkCqrdVXJwR8nVrSqux3zJSY+ElrkOK3DtG9iTPpmqvBXaU0g==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.9.tgz", + "integrity": "sha512-ec9RgAM4r+fe1ZmG16qeMwEHdcIvqeW8tpnpkfSQu9T4487KtQF6lg3TQasTarrLLEe7Qpy+E+r4VwC8eeZySQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.9.tgz", + "integrity": "sha512-7b2/wg8T1n/L1BgCWlMSez0aXfGkNjFuOqMBQdnTti3LRuUwzGJcrhRf/FdZGJ5/evML9mqu60vLRuXW1TdXCg==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.9.tgz", + "integrity": "sha512-PiZu3h4+Szj0iZPgvuD2Y0isOXnlNetmF6jMcOwW54BScwynW24/baE+z7PfDyNFgjV04Ga2THdcpbKBDhgWQw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.9.tgz", + "integrity": "sha512-SJKN4Ez+ilY7mu+1gAdGQ9N6dktBfbEkiOAvw+hT7xHrNnTnrTGH0FT4qx9dazB9HX6D04L4PXmVOyynqi+oEQ==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.9.tgz", + "integrity": "sha512-9N0RjZ7cElE8ifrS0nBrLQgBMQNPiIIKO2GzLXy7Ms8AM3KjfLiV2G2+9O0B9paXjRAHchIwazTeOyeWb1vyWA==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.9.tgz", + "integrity": "sha512-awxWs1kns+RfjhqBbTbdlePjqZrAE2XMaAQJNg9dtu+C7ghC3QKsqXbu0C26OuF5YeAdJcq9q+IdG6WPLjvj9w==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.9.tgz", + "integrity": "sha512-VmA9GQMCzOr8rFfD72Dum1+AWhJui7ZO6sYwp6rBHYu4vLmWITTSUsd/zgXXmZuHBPkkvxLJLF8XsKFCRKflJA==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.9.tgz", + "integrity": "sha512-P/jPY2JwmTpgEPh9BkXpCe690tcDSSo0K9BHTniSeEAEz26kPpqldVa4XDm0R+hNnFA7ecEgNskr4QAxE1ry0w==", + "dev": true, + "optional": true }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-string-regexp": { "version": "4.0.0", @@ -6470,7 +18617,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -6482,14 +18628,12 @@ "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -6499,7 +18643,6 @@ "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -6512,14 +18655,12 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -6527,36 +18668,36 @@ } }, "eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz", + "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", + "@eslint/eslintrc": "^1.0.3", + "@humanwhocodes/config-array": "^0.6.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "eslint-scope": "^6.0.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", + "glob-parent": "^6.0.1", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -6564,307 +18705,44 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^3.1.0", + "regexpp": "^3.2.0", "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "strip-ansi": { + "eslint-scope": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true - }, - "eslint-config-standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", - "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", - "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.23.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", - "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.1", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.4.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.3", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "requires": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true } } }, - "eslint-plugin-promise": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz", - "integrity": "sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng==", - "dev": true + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} }, "eslint-scope": { "version": "5.1.1", @@ -6883,38 +18761,37 @@ "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", "dev": true }, "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", "dev": true, "requires": { - "acorn": "^7.4.0", + "acorn": "^8.5.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "eslint-visitor-keys": "^3.0.0" } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.4.0", @@ -6959,14 +18836,17 @@ "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -6977,98 +18857,60 @@ "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - } } }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, "expect": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz", - "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz", + "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==", "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.1", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1" + "jest-get-type": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-regex-util": "^27.0.6" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { @@ -7079,13 +18921,13 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, "requires": { "reusify": "^1.0.4" } @@ -7094,16 +18936,10 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, "requires": { "bser": "2.1.1" } }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -7122,11 +18958,11 @@ } }, "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { - "locate-path": "^6.0.0", + "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, @@ -7141,37 +18977,30 @@ } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, - "fp-and-or": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.3.tgz", - "integrity": "sha512-wJaE62fLaB3jCYvY2ZHjZvmKK2iiLiiehX38rz5QZxtdN8fVPJDeZUiVvJrHStdTc+23LHlyZuSEKgFc0pxi2g==" - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "requires": { - "minipass": "^3.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs.realpath": { @@ -7183,14 +19012,12 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -7198,43 +19025,15 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-own-enumerable-property-symbols": { "version": "3.0.2", @@ -7245,34 +19044,17 @@ "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==" + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7283,41 +19065,28 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - } + "is-glob": "^4.0.3" } }, "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -7327,92 +19096,28 @@ "slash": "^3.0.0" } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "requires": { - "lru-cache": "^6.0.0" - } - }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, "requires": { "whatwg-encoding": "^1.0.5" } @@ -7420,13 +19125,7 @@ "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" }, "http-proxy-agent": { "version": "4.0.1", @@ -7438,16 +19137,6 @@ "debug": "4" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -7460,39 +19149,26 @@ "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "requires": { - "ms": "^2.0.0" - } + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "requires": { - "minimatch": "^3.0.4" - } - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -7503,67 +19179,13 @@ "resolve-from": "^4.0.0" } }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } } }, "imurmurhash": { @@ -7574,12 +19196,8 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "inflight": { "version": "1.0.6", @@ -7595,160 +19213,59 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true - }, - "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "requires": { "has": "^1.0.3" } }, - "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=" - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true - }, "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, "is-regexp": { "version": "1.0.0", @@ -7757,42 +19274,15 @@ "dev": true }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -7803,22 +19293,15 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" }, "istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, "requires": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", @@ -7829,8 +19312,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -7838,7 +19320,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", @@ -7846,10 +19327,9 @@ } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -7857,1045 +19337,373 @@ } }, "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "jest": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.4.tgz", - "integrity": "sha512-Px1iKFooXgGSkk1H8dJxxBIrM3tsc5SIuI4kfKYK2J+4rvCvPGr/cXktxh0e9zIPQ5g09kOMNfHQEmusBUf/ZA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz", + "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==", "requires": { - "@jest/core": "^27.0.4", + "@jest/core": "^27.3.1", "import-local": "^3.0.2", - "jest-cli": "^27.0.4" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-cli": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.4.tgz", - "integrity": "sha512-E0T+/i2lxsWAzV7LKYd0SB7HUAvePqaeIh5vX43/G5jXLhv1VzjYzJAGEkTfvxV774ll9cyE2ljcL73PVMEOXQ==", - "dev": true, - "requires": { - "@jest/core": "^27.0.4", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.0.4", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "prompts": "^2.0.1", - "yargs": "^16.0.3" - } - } + "jest-cli": "^27.3.1" } }, "jest-changed-files": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz", - "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==", - "dev": true, + "version": "27.3.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz", + "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==", "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "execa": "^5.0.0", "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-circus": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.4.tgz", - "integrity": "sha512-QD+eblDiRphta630WRKewuASLs/oY1Zki2G4bccntRvrTHQ63ljwFR5TLduuK4Zg0ZPzW0+8o6AP7KRd1yKOjw==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz", + "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==", "requires": { - "@jest/environment": "^27.0.3", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.0.2", + "expect": "^27.3.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.4", - "jest-snapshot": "^27.0.4", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", + "jest-each": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "pretty-format": "^27.3.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } + } + }, + "jest-cli": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz", + "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==", + "requires": { + "@jest/core": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" } }, "jest-config": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.4.tgz", - "integrity": "sha512-VkQFAHWnPQefdvHU9A+G3H/Z3NrrTKqWpvxgQz3nkUdkDTWeKJE6e//BL+R7z79dXOMVksYgM/z6ndtN0hfChg==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz", + "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==", "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.4", - "@jest/types": "^27.0.2", - "babel-jest": "^27.0.2", + "@jest/test-sequencer": "^27.3.1", + "@jest/types": "^27.2.5", + "babel-jest": "^27.3.1", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.0.4", - "jest-environment-jsdom": "^27.0.3", - "jest-environment-node": "^27.0.3", - "jest-get-type": "^27.0.1", - "jest-jasmine2": "^27.0.4", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.4", - "jest-runner": "^27.0.4", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-circus": "^27.3.1", + "jest-environment-jsdom": "^27.3.1", + "jest-environment-node": "^27.3.1", + "jest-get-type": "^27.3.1", + "jest-jasmine2": "^27.3.1", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.3.1", + "jest-runner": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", "micromatch": "^4.0.4", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", - "dev": true, - "requires": { - "ci-info": "^3.1.1" - } - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } + "pretty-format": "^27.3.1" } }, "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", + "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", "requires": { "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" } }, "jest-docblock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", - "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", - "dev": true, + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", + "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz", - "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz", + "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==", "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } + "jest-get-type": "^27.3.1", + "jest-util": "^27.3.1", + "pretty-format": "^27.3.1" } }, "jest-environment-jsdom": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz", - "integrity": "sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz", + "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==", "requires": { - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.3.1", + "@jest/fake-timers": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2", + "jest-mock": "^27.3.0", + "jest-util": "^27.3.1", "jsdom": "^16.6.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-environment-node": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.3.tgz", - "integrity": "sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz", + "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==", "requires": { - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.3.1", + "@jest/fake-timers": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "jest-mock": "^27.3.0", + "jest-util": "^27.3.1" } }, "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", + "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==" }, "jest-haste-map": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.2.tgz", - "integrity": "sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz", + "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==", "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.1", - "jest-serializer": "^27.0.1", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.3.1", + "jest-worker": "^27.3.1", "micromatch": "^4.0.4", "walker": "^1.0.7" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-jasmine2": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.4.tgz", - "integrity": "sha512-yj3WrjjquZwkJw+eA4c9yucHw4/+EHndHWSqgHbHGQfT94ihaaQsa009j1a0puU8CNxPDk0c1oAPeOpdJUElwA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz", + "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==", "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.3", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/environment": "^27.3.1", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.0.2", + "expect": "^27.3.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.4", - "jest-snapshot": "^27.0.4", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", + "jest-each": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "pretty-format": "^27.3.1", "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } } }, "jest-leak-detector": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz", - "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==", - "dev": true, - "requires": { - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz", + "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==", + "requires": { + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" } }, "jest-matcher-utils": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz", - "integrity": "sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz", + "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==", "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", - "dev": true - }, - "jest-diff": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", - "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - } - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } + "jest-diff": "^27.3.1", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" } }, "jest-message-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz", - "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz", + "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==", "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.4", - "pretty-format": "^27.0.2", + "pretty-format": "^27.3.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } } }, "jest-mock": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz", - "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==", - "dev": true, + "version": "27.3.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz", + "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==", "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true + "requires": {} }, "jest-regex-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", - "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", - "dev": true + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", + "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==" }, "jest-resolve": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.4.tgz", - "integrity": "sha512-BcfyK2i3cG79PDb/6gB6zFeFQlcqLsQjGBqznFCpA0L/3l1L/oOsltdUjs5eISAWA9HS9qtj8v2PSZr/yWxONQ==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz", + "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==", "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "chalk": "^4.0.0", - "escalade": "^3.1.1", "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.3.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-resolve-dependencies": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.4.tgz", - "integrity": "sha512-F33UPfw1YGWCV2uxJl7wD6TvcQn5IC0LtguwY3r4L7R6H4twpLkp5Q2ZfzRx9A2I3G8feiy0O0sqcn/Qoym71A==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz", + "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==", "requires": { - "@jest/types": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-snapshot": "^27.0.4" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "@jest/types": "^27.2.5", + "jest-regex-util": "^27.0.6", + "jest-snapshot": "^27.3.1" } }, "jest-runner": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.4.tgz", - "integrity": "sha512-NfmvSYLCsCJk2AG8Ar2NAh4PhsJJpO+/r+g4bKR5L/5jFzx/indUpnVBdrfDvuqhGLLAvrKJ9FM/Nt8o1dsqxg==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.3", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz", + "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==", + "requires": { + "@jest/console": "^27.3.1", + "@jest/environment": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.1", - "jest-environment-jsdom": "^27.0.3", - "jest-environment-node": "^27.0.3", - "jest-haste-map": "^27.0.2", - "jest-leak-detector": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.4", - "jest-runtime": "^27.0.4", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", + "jest-docblock": "^27.0.6", + "jest-environment-jsdom": "^27.3.1", + "jest-environment-node": "^27.3.1", + "jest-haste-map": "^27.3.1", + "jest-leak-detector": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-resolve": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-util": "^27.3.1", + "jest-worker": "^27.3.1", "source-map-support": "^0.5.6", "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-runtime": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.4.tgz", - "integrity": "sha512-voJB4xbAjS/qYPboV+e+gmg3jfvHJJY4CagFWBOM9dQKtlaiTjcpD2tWwla84Z7PtXSQPeIpXY0qksA9Dum29A==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/globals": "^27.0.3", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz", + "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==", + "requires": { + "@jest/console": "^27.3.1", + "@jest/environment": "^27.3.1", + "@jest/globals": "^27.3.1", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.3.1", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", "@types/yargs": "^16.0.0", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.4", - "jest-snapshot": "^27.0.4", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", + "jest-haste-map": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-mock": "^27.3.0", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.3.1", + "jest-snapshot": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", "slash": "^3.0.0", "strip-bom": "^4.0.0", - "yargs": "^16.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - } + "yargs": "^16.2.0" } }, "jest-serializer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", - "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", - "dev": true, + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", + "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", "requires": { "@types/node": "*", "graceful-fs": "^4.2.4" } }, "jest-snapshot": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.4.tgz", - "integrity": "sha512-hnjrvpKGdSMvKfbHyaG5Kul7pDJGZvjVy0CKpzhu28MmAssDXS6GpynhXzgst1wBQoKD8c9b2VS2a5yhDLQRCA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz", + "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==", "requires": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", @@ -8903,263 +19711,77 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/transform": "^27.3.1", + "@jest/types": "^27.2.5", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.0.2", + "expect": "^27.3.1", "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "jest-haste-map": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.4", - "jest-util": "^27.0.2", + "jest-diff": "^27.3.1", + "jest-get-type": "^27.3.1", + "jest-haste-map": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-resolve": "^27.3.1", + "jest-util": "^27.3.1", "natural-compare": "^1.4.0", - "pretty-format": "^27.0.2", + "pretty-format": "^27.3.1", "semver": "^7.3.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", - "dev": true - }, - "jest-diff": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", - "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - } - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } } }, "jest-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz", - "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz", + "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==", "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "@types/node": "*", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", "picomatch": "^2.2.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", - "dev": true, - "requires": { - "ci-info": "^3.1.1" - } - } } }, "jest-validate": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz", - "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz", + "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==", "requires": { - "@jest/types": "^27.0.2", + "@jest/types": "^27.2.5", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", + "jest-get-type": "^27.3.1", "leven": "^3.1.0", - "pretty-format": "^27.0.2" + "pretty-format": "^27.3.1" }, "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" } } }, "jest-watcher": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz", - "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz", + "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==", "requires": { - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.0.2", + "jest-util": "^27.3.1", "string-length": "^4.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } } }, "jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", - "dev": true, + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -9170,42 +19792,35 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, - "jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=" + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "requires": { "argparse": "^2.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", - "dev": true, + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "requires": { "abab": "^2.0.5", "acorn": "^8.2.4", @@ -9232,79 +19847,20 @@ "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", - "ws": "^7.4.5", + "ws": "^7.4.6", "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - } } }, "jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-parse-helpfulerror": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", - "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", - "requires": { - "jju": "^1.1.0" - } - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -9312,11 +19868,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -9325,33 +19876,13 @@ "minimist": "^1.2.5" } }, - "jsonlines": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsonlines/-/jsonlines-0.1.1.tgz", - "integrity": "sha1-T80kbcXQ44aRkHxEqwAveC0dlMw=" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "json-buffer": "3.0.0" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "kleur": { @@ -9359,19 +19890,10 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" - } - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, "levn": { "version": "0.4.1", @@ -9383,126 +19905,75 @@ "type-check": "~0.4.0" } }, - "libnpmconfig": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", - "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", - "requires": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "lilconfig": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", "dev": true }, "lint-staged": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.0.0.tgz", - "integrity": "sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.4.tgz", + "integrity": "sha512-aTUqcPDSV05EyKlMT4N5h7tmnevKfAxI3xZkRb+DHfmcFaoCxfxVvpqlLMCVGy3EYle9JYER2nA5zc4eNTkZVQ==", "dev": true, "requires": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "dedent": "^0.7.0", + "cli-truncate": "2.1.0", + "colorette": "^1.4.0", + "commander": "^8.2.0", + "debug": "^4.3.2", "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", + "execa": "^5.1.1", + "js-yaml": "^4.1.0", + "lilconfig": "^2.0.3", + "listr2": "^3.12.2", "micromatch": "^4.0.4", "normalize-path": "^3.0.0", "please-upgrade-node": "^3.2.0", "string-argv": "0.3.1", - "stringify-object": "^3.3.0" + "stringify-object": "3.3.0", + "supports-color": "8.1.1" }, "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, "listr2": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.9.0.tgz", - "integrity": "sha512-+JxQt7Vi4WEWgJsxmOEX9lDbCumrb3mrEYIeE1VI7I4lf2rXE4v9pq3RMVNp+a9s6mCgc/IsF0ppHsLrx2BEAw==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.1.tgz", + "integrity": "sha512-pk4YBDA2cxtpM8iLHbz6oEsfZieJKHf6Pt19NlKaHZZVpqHyVs/Wqr7RfBBCeAFCJchGO7WQHVkUPZTvJMHk8w==", "dev": true, "requires": { "cli-truncate": "^2.1.0", - "colorette": "^1.2.2", + "colorette": "^2.0.16", "log-update": "^4.0.0", "p-map": "^4.0.0", "rxjs": "^6.6.7", "through": "^2.3.8", "wrap-ansi": "^7.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + }, + "dependencies": { + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + } } }, "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "p-locate": "^5.0.0" + "p-locate": "^4.1.0" } }, "lodash": { @@ -9513,7 +19984,12 @@ "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, "lodash.merge": { @@ -9525,18 +20001,7 @@ "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" }, "log-update": { "version": "4.0.0", @@ -9550,42 +20015,15 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, "wrap-ansi": { @@ -9601,11 +20039,6 @@ } } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -9633,78 +20066,36 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "make-fetch-happen": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.2.tgz", - "integrity": "sha512-UkAWAuXPXSSlVviTjH2We20mtj1NnZW2Qq/oTY2dyMbRQ5CR3Xed3akCDMnM7j6axrMY80lhgM7loNE132PfAw==", - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - } + "devOptional": true }, "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "requires": { - "p-defer": "^1.0.0" + "tmpl": "1.0.5" } }, "md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, "requires": { "charenc": "0.0.2", "crypt": "0.0.2", "is-buffer": "~1.1.6" } }, - "mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - } - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true }, "micromatch": { "version": "4.0.4", @@ -9716,27 +20107,22 @@ } }, "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "requires": { - "mime-db": "1.48.0" + "mime-db": "1.50.0" } }, "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "minimatch": { "version": "3.0.4", @@ -9751,80 +20137,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", - "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -9833,269 +20145,40 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - } + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" }, "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", - "dev": true - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-check-updates": { - "version": "11.6.0", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-11.6.0.tgz", - "integrity": "sha512-/l4S7Gh+8+Rg5itWsqFya5RRSHtPzw5neyAlbWNJfBfEeRX6lYVxKgs85QFBOKrZj3eL5MGBaUW8228TmjMhrw==", - "requires": { - "chalk": "^4.1.1", - "cint": "^8.2.1", - "cli-table": "^0.3.6", - "commander": "^6.2.1", - "find-up": "5.0.0", - "fp-and-or": "^0.1.3", - "get-stdin": "^8.0.0", - "globby": "^11.0.3", - "hosted-git-info": "^4.0.2", - "json-parse-helpfulerror": "^1.0.3", - "jsonlines": "^0.1.1", - "libnpmconfig": "^1.2.1", - "lodash": "^4.17.21", - "mem": "^8.1.1", - "minimatch": "^3.0.4", - "p-map": "^4.0.0", - "pacote": "^11.3.3", - "parse-github-url": "^1.0.2", - "progress": "^2.0.3", - "prompts": "^2.4.1", - "rc-config-loader": "^4.0.0", - "remote-git-tags": "^3.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "semver-utils": "^1.1.4", - "spawn-please": "^1.0.0", - "update-notifier": "^5.1.0" - } - }, - "npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "npm-package-arg": { - "version": "8.1.4", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.4.tgz", - "integrity": "sha512-xLokoCFqj/rPdr3LvcdDL6Kj6ipXGEDHD/QGpzwU6/pibYUOXmp5DBmg76yukFyx4ZDbrXNOTn+BPyd8TD4Jlw==", - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "requires": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, "requires": { "path-key": "^3.0.0" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" }, "once": { "version": "1.4.0", @@ -10109,17 +20192,8 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "requires": { - "mimic-fn": "^2.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - } + "mimic-fn": "^2.1.0" } }, "optionator": { @@ -10136,42 +20210,27 @@ "word-wrap": "^1.2.3" } }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { - "yocto-queue": "^0.1.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { - "p-limit": "^3.0.2" + "p-limit": "^2.2.0" } }, "p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "requires": { "aggregate-error": "^3.0.0" } @@ -10181,50 +20240,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "pacote": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.4.tgz", - "integrity": "sha512-RfahPCunM9GI7ryJV/zY0bWQiokZyLqaSNHXtbNSoLb7bwTvBbJBEyCJ01KWs4j1Gj7GmX8crYXQ1sNX6P2VKA==", - "requires": { - "@npmcli/git": "^2.0.1", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -10234,26 +20249,10 @@ "callsites": "^3.0.0" } }, - "parse-github-url": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", - "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==" - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "path-exists": { "version": "4.0.0", @@ -10268,474 +20267,180 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-protocol": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "prettier": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "rc-config-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.0.0.tgz", - "integrity": "sha512-//LRTblJEcqbmmro1GCmZ39qZXD+JqzuD8Y5/IZU3Dhp3A1Yr0Xn68ks8MQ6qKfKvYCWDveUmRDKDA40c+sCXw==", - "requires": { - "debug": "^4.1.1", - "js-yaml": "^4.0.0", - "json5": "^2.1.2", - "require-from-string": "^2.0.2" - } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "read-package-json-fast": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", - "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - } - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "requires": { + "node-modules-regexp": "^1.0.0" } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "find-up": "^4.0.0" } }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "requires": { - "rc": "^1.2.8" + "xtend": "^4.0.0" } }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true + }, + "pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", "requires": { - "rc": "^1.2.8" + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } } }, - "remote-git-tags": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remote-git-tags/-/remote-git-tags-3.0.0.tgz", - "integrity": "sha512-C9hAO4eoEsX+OXA4rla66pXZQ+TLQ8T9dttgQj18yuKlPMTVkIkdYXvlMC55IuUsIkV6DpmQYi10JKFLaU+l7w==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" } }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-from-string": { "version": "2.0.2", @@ -10746,7 +20451,6 @@ "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -10756,7 +20460,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, "requires": { "resolve-from": "^5.0.0" }, @@ -10764,8 +20467,7 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" } } }, @@ -10775,13 +20477,10 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" }, "restore-cursor": { "version": "3.1.0", @@ -10793,15 +20492,11 @@ "signal-exit": "^3.0.2" } }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true }, "rimraf": { "version": "3.0.2", @@ -10815,6 +20510,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "requires": { "queue-microtask": "^1.2.2" } @@ -10838,11 +20534,15 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, "requires": { "xmlchars": "^2.2.0" } @@ -10861,36 +20561,10 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "semver-utils": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/semver-utils/-/semver-utils-1.1.4.tgz", - "integrity": "sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -10898,18 +20572,22 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" }, "simple-git-hooks": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/simple-git-hooks/-/simple-git-hooks-2.4.1.tgz", - "integrity": "sha512-LFdiF7O0Hg96vS1mO8gtBiDXLkCrLhqpU7O3gMZVO90Uf+/VFY4C5VJITyXPbHNX6OnlFmiFR0YnV4XbfguZHA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/simple-git-hooks/-/simple-git-hooks-2.6.1.tgz", + "integrity": "sha512-nvqaNfgvcjN3cGSYJSdjwB+tP8YKRCyvuUvQ24luIjIpGhUCPpZDTJ+p+hcJiwc0lZlTCl0NayfBVDoIMG7Jpg==", "dev": true }, "sisteransi": { @@ -10923,46 +20601,14 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - } - } - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" - }, - "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", - "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", - "requires": { - "agent-base": "6", - "debug": "4", - "socks": "^2.3.3" } }, "source-map": { @@ -10971,86 +20617,28 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "spawn-please": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-please/-/spawn-please-1.0.0.tgz", - "integrity": "sha512-Kz33ip6NRNKuyTRo3aDWyWxeGeM0ORDO552Fs6E1nj4pLWPkl37SrRtTnq+MEopVaqgmaO6bAvVS+v64BJ5M/A==" - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", - "dev": true - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "requires": { - "minipass": "^3.1.1" - } + "stack-chain": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", + "integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU=" }, "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "requires": { "escape-string-regexp": "^2.0.0" }, @@ -11058,8 +20646,7 @@ "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" } } }, @@ -11073,65 +20660,19 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "safe-buffer": "~5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "stringify-object": { @@ -11143,40 +20684,31 @@ "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - } } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "supports-color": { "version": "7.2.0", @@ -11190,7 +20722,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -11199,99 +20730,53 @@ "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", "requires": { "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } } } }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, "requires": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -11301,7 +20786,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -11317,8 +20801,7 @@ "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" }, "through": { "version": "2.3.8", @@ -11327,21 +20810,14 @@ "dev": true }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-regex-range": { "version": "5.0.1", @@ -11352,87 +20828,77 @@ } }, "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "dependencies": { + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } } }, "tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, "requires": { "punycode": "^2.1.1" } }, "ts-jest": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.3.tgz", - "integrity": "sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw==", + "version": "27.0.7", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.7.tgz", + "integrity": "sha512-O41shibMqzdafpuP+CkrOL7ykbmLh+FqQrXEmV9CydQ5JBk0Sj0uAEF5TNNe94fZWKm3yYvWa/IbyV4Yg1zK2Q==", "dev": true, "requires": { "bs-logger": "0.x", - "buffer-from": "1.x", "fast-json-stable-stringify": "2.x", "jest-util": "^27.0.0", "json5": "2.x", - "lodash": "4.x", + "lodash.memoize": "4.x", "make-error": "1.x", - "mkdirp": "1.x", "semver": "7.x", "yargs-parser": "20.x" } }, "ts-node": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.0.0.tgz", - "integrity": "sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg==", - "dev": true, + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "devOptional": true, "requires": { + "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.1", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "source-map-support": "^0.5.17", "yn": "3.1.1" }, "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "devOptional": true + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } + "devOptional": true } } }, @@ -11451,19 +20917,6 @@ "tslib": "^1.8.1" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11476,13 +20929,13 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", @@ -11493,73 +20946,15 @@ } }, "typescript": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", - "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "devOptional": true }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "uri-js": { "version": "4.4.1", @@ -11569,23 +20964,26 @@ "punycode": "^2.1.0" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", "requires": { - "prepend-http": "^2.0.0" + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "v8-compile-cache": { "version": "2.3.0", @@ -11594,10 +20992,9 @@ "dev": true }, "v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "requires": { "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", @@ -11607,44 +21004,14 @@ "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" } } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "requires": { - "builtins": "^1.0.3" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, "requires": { "browser-process-hrtime": "^1.0.0" } @@ -11653,60 +21020,43 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, "requires": { "xml-name-validator": "^3.0.0" } }, "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "requires": { - "makeerror": "1.0.x" + "makeerror": "1.0.12" } }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" }, "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, "requires": { "iconv-lite": "0.4.24" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" }, "whatwg-url": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", - "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", - "dev": true, + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "requires": { "lodash": "^4.7.0", - "tr46": "^2.0.2", + "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } }, @@ -11718,75 +21068,10 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrap-ansi": { "version": "7.0.0", @@ -11796,41 +21081,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "wrappy": { @@ -11850,50 +21100,54 @@ } }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "requires": {} }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -11902,64 +21156,18 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", - "dev": true + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "devOptional": true } } } diff --git a/package.json b/package.json index 71f7ab642..e869a01e7 100644 --- a/package.json +++ b/package.json @@ -1,53 +1,47 @@ { + "private": true, "name": "baseline-environment-on-aws", "version": "1.0.0", - "bin": { - "baseline-environment-on-aws": "bin/blea-base-sa.js" + "description": "Baseline Environment on AWS", + "repository": { + "type": "git", + "url": "https://github.com/aws-samples/baseline-environment-on-aws.git" }, + "license": "MIT-0", + "engines": { + "node": ">=14", + "npm": ">=7" + }, + "workspaces": [ + "usecases/*", + "tools/*" + ], "scripts": { - "build": "tsc", - "watch": "tsc -w", - "test": "jest", - "cdk": "cdk" + "lint": "eslint --fix .", + "format": "prettier --write ." }, "devDependencies": { - "@aws-cdk/assert": "1.107.0", - "@types/jest": "^26.0.23", - "@types/node": "15.12.1", - "@typescript-eslint/eslint-plugin": "^4.26.0", - "@typescript-eslint/parser": "^4.26.0", - "aws-cdk": "^1.107.0", - "eslint": "^7.28.0", + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^8.0.1", "eslint-config-prettier": "^8.3.0", - "eslint-config-standard": "^16.0.3", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^5.1.0", - "jest": "^27.0.4", - "lint-staged": "^11.0.0", - "prettier": "^2.3.1", - "simple-git-hooks": "^2.4.1", - "ts-jest": "^27.0.3", - "ts-node": "^10.0.0", - "typescript": "~4.3.2" - }, - "dependencies": { - "@aws-cdk/aws-cloudfront-origins": "^1.107.0", - "@aws-cdk/aws-cloudwatch-actions": "^1.107.0", - "@aws-cdk/aws-ecs-patterns": "^1.107.0", - "@aws-cdk/aws-events": "^1.107.0", - "@aws-cdk/cloudformation-include": "^1.107.0", - "@aws-cdk/core": "1.107.0", - "npm-check-updates": "^11.6.0", - "source-map-support": "^0.5.19" + "lint-staged": "^11.2.3", + "prettier": "^2.4.1", + "simple-git-hooks": "^2.6.1", + "typescript": "~4.4.4" }, "simple-git-hooks": { "pre-commit": "npx lint-staged" }, "lint-staged": { - "{bin,lib}/*.ts": [ - "npx prettier --write", - "npx eslint --fix" + "*": [ + "git-secrets --scan" + ], + "*.ts": [ + "npx eslint --fix", + "npx prettier --write" ] } } diff --git a/tools/cicd/README.md b/tools/cicd/README.md index 9cc17a5d4..7bc349e6d 100644 --- a/tools/cicd/README.md +++ b/tools/cicd/README.md @@ -75,14 +75,14 @@ Update tools/cicd/cdk.json so CodePipeline can access your BLEA repository and s cd tools/cicd/ npm ci npm run build -cdk bootstrap -c environment=prodpipeline --profile your_profile_name # If you haven't bootstrapped target account -cdk deploy -c environment=prodpipeline --profile your_profile_name +npx cdk bootstrap -c environment=prodpipeline --profile your_profile_name # If you haven't bootstrapped target account +npx cdk deploy -c environment=prodpipeline --profile your_profile_name ``` ## 4. Update buildspec.yaml You need to specify CDK deploy command on buildspec.yaml. -This is example, when you want to deploy `BLEA-GeneralLog` stack with `prod` environment variables on cdk.json. This is not in this directory but in root directory of Baseline Environment on AWS. your buildspec.yaml will be like this. +This is example, when you want to deploy `BLEA-MonitorAlarm` stack with `prod` environment variables on cdk.json. This is not in this directory but in root directory of Baseline Environment on AWS. your buildspec.yaml will be like this. ``` version: 0.2 @@ -90,15 +90,22 @@ version: 0.2 phases: install: commands: + # requires npm >7 - npm i -g npm - - npm -g install typescript aws-cdk pre_build: commands: - npm ci - - npm run build build: commands: - - cdk deploy BLEA-GeneralLog --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=prod --require-approval never + - npm audit + - npm run lint + - npm run build --workspace usecases/guest-webapp-sample + - npm run test --workspace usecases/guest-webapp-sample + # You can specify CDK deployment commands. + # Usually, you may want to deploy all of resources in the app. + # If you want to do so, please specify `"*"` + - cd usecases/guest-webapp-sample + - npx cdk deploy BLEA-MonitorAlarm -c environment=dev --require-approval never ``` > Notes: You can add another commands to build stage for deploying another stacks. diff --git a/tools/cicd/README_ja.md b/tools/cicd/README_ja.md index d7b3e8cc3..0883d62ca 100644 --- a/tools/cicd/README_ja.md +++ b/tools/cicd/README_ja.md @@ -75,14 +75,14 @@ CodePipeline が自身の BLEA リポジトリの対象ブランチにアクセ cd tools/cicd/ npm ci npm run build -cdk bootstrap -c environment=prodpipeline --profile your_profile_name # If you haven't bootstrapped target account -cdk deploy -c environment=prodpipeline --profile your_profile_name +npx cdk bootstrap -c environment=prodpipeline --profile your_profile_name # If you haven't bootstrapped target account +npx cdk deploy -c environment=prodpipeline --profile your_profile_name ``` ## 4. buildspec.yaml のアップデート buildspec.yaml で CDK のデプロイコマンドを指定します。 -例えば、cdk.json で定義した `prod` 環境へ、スタック`BLEA-GeneralLog`をデプロイしたい場合の例を示します。 +例えば、cdk.json で定義した `prod` 環境へ、スタック`BLEA-MonitorAlarm`をデプロイしたい場合の例を示します。 buildspec.yaml はこのディレクトリではなく、BLEA ソースコードのルートディレクトリにあります。 ``` @@ -91,15 +91,22 @@ version: 0.2 phases: install: commands: + # requires npm >7 - npm i -g npm - - npm -g install typescript aws-cdk pre_build: commands: - npm ci - - npm run build build: commands: - - cdk deploy BLEA-GeneralLog --app "npx ts-node bin/blea-guest-ecsapp-sample.ts" -c environment=prod --require-approval never + - npm audit + - npm run lint + - npm run build --workspace usecases/guest-webapp-sample + - npm run test --workspace usecases/guest-webapp-sample + # You can specify CDK deployment commands. + # Usually, you may want to deploy all of resources in the app. + # If you want to do so, please specify `"*"` + - cd usecases/guest-webapp-sample + - npx cdk deploy BLEA-MonitorAlarm -c environment=dev --require-approval never ``` > Notes: 他のスタックをデプロイしたい場合は build フェーズに他のコマンドを追加することができます。 diff --git a/tools/cicd/cdk.json b/tools/cicd/cdk.json index df3a2c550..7b0b856b4 100644 --- a/tools/cicd/cdk.json +++ b/tools/cicd/cdk.json @@ -9,7 +9,16 @@ "@aws-cdk/aws-kms:defaultKeyPolicies": true, "@aws-cdk/aws-s3:grantWriteWithoutAcl": true, "@aws-cdk/aws-ecs-patterns:removeDefaultDesiredCount": true, - "stagepipeline": { + "dev": { + "description": "Context samples for Dev - Anonymous account & region", + "envName": "Development", + "githubRepositoryOwner": "ownername", + "githubRepositoryName": "repositoryname", + "githubTargetBranch": "staging", + "codestarConnectionArn": "arn:aws:codestar-connections:ap-northeast-1:xxxxxxxxxxxx:connection/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + }, + "stage": { + "description": "Context samples for Staging - Specific account & region ", "env": { "account": "111111111111", "region": "ap-northeast-1" @@ -20,7 +29,8 @@ "githubTargetBranch": "staging", "codestarConnectionArn": "arn:aws:codestar-connections:ap-northeast-1:xxxxxxxxxxxx:connection/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, - "prodpipeline": { + "prod": { + "description": "Context samples for Production - Specific account & region ", "env": { "account": "222222222222", "region": "ap-northeast-1" diff --git a/tools/cicd/lib/bleadeploy-stack.ts b/tools/cicd/lib/bleadeploy-stack.ts index fc25cfb81..0239d33f6 100644 --- a/tools/cicd/lib/bleadeploy-stack.ts +++ b/tools/cicd/lib/bleadeploy-stack.ts @@ -44,7 +44,7 @@ export class BLEAdeployStack extends cdk.Stack { projectName: `${id}-CodeBuildProject`, role: deployRole, environment: { - buildImage: LinuxBuildImage.STANDARD_3_0, + buildImage: codebuild.LinuxBuildImage.AMAZON_LINUX_2_3, environmentVariables: { AWS_DEFAULT_REGION: { type: codebuild.BuildEnvironmentVariableType.PLAINTEXT, @@ -69,6 +69,5 @@ export class BLEAdeployStack extends cdk.Stack { stageName: 'Build', actions: [buildAction], }); - } } diff --git a/tools/cicd/package-lock.json b/tools/cicd/package-lock.json deleted file mode 100644 index d65d35167..000000000 --- a/tools/cicd/package-lock.json +++ /dev/null @@ -1,6708 +0,0 @@ -{ - "name": "bleadeploy", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@aws-cdk/assert": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.107.0.tgz", - "integrity": "sha512-tV+Nbvb3DOvZpgrLEYFoG4lsMk2zddtPSGDVdWN4A5xaIhYFcnh27+l2//2IuBlV9RSmeLAYPZtJV6Zn7nLegg==", - "dev": true, - "requires": { - "@aws-cdk/cloudformation-diff": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/assets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.107.0.tgz", - "integrity": "sha512-YIN57vqtfXwrOBUvMmIi5r9rEOt2JYvf+5BIbNG3ilMvmFDGl66buAFtAJjdEY95uJl0tPqJqC99VOGHGsY/iQ==", - "requires": { - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-apigateway": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigateway/-/aws-apigateway-1.107.0.tgz", - "integrity": "sha512-qgVKLwRMkuDgzB6mkqIXjvGfhlgam79JTL0K9XsEpL2K/XEjDSQhyICenmPh0TLjFN/aB9X2qYRaH7BIU3u9wg==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-cognito": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-applicationautoscaling": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.107.0.tgz", - "integrity": "sha512-Qfp+4AOaTsEDkqGRhX1tiZJ0ywZoaClA02hO+R4qOYor+4kwI+lCpdAhwBP2zuChD+1vMmlMox5dpbgI51CnVA==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-autoscaling": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.107.0.tgz", - "integrity": "sha512-NmphwpgU7lxTK+8zeN/9XuMnO0T+J8NvTlyH0QcqMbQeuJWFNXwAVwzQmPdmf7Bf/88xTUohP2RgH2MvLCGMBQ==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticloadbalancing": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-autoscaling-common": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.107.0.tgz", - "integrity": "sha512-dxAOPIFbzK+R+cJrfNmgsqxE1K9tAlgo9oc9Gruvxxzv1T4EF/aMW7VUGgxIOZkghCkq63QT9xpKSWmlQZdr9w==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-autoscaling-hooktargets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.107.0.tgz", - "integrity": "sha512-nE57d6KUlqJGBHqs+QrRomCI4jmqrLd1klIv5hg1K8jHgB5PFd42pkmQYBMMsSrXY9vacT079/DneG+segrkKg==", - "requires": { - "@aws-cdk/aws-autoscaling": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/aws-sns-subscriptions": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-certificatemanager": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.107.0.tgz", - "integrity": "sha512-pMeCF4CUOT0Zor7gbZF5NT54Fn50b+bTSXYTRzM9v8nXlIFpo3HJAsIpVJRGNnDdLwwEXXmRzgx7dIE4UVzouw==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-cloudformation": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.107.0.tgz", - "integrity": "sha512-n38WuGnt1vxJaKxqwALCZndlHoiO7tKD5tvI3AmEHGYt+IAjLl5cu37qVtqfNKqs9uo4cUXPrIfSMRb3/0d5CQ==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-cloudfront": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.107.0.tgz", - "integrity": "sha512-92TRtZN46sQt4G8vTx7dPcUaUlLg0bLdnXSFErc2Rt0SybGPFMebu//woW79bGqYbU6Mpy0kerT3Ghk2tyizdA==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-ssm": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-cloudwatch": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.107.0.tgz", - "integrity": "sha512-jyq7COuuqwUJS4gMmC7jKlI9+nTOnUgv2t7Ca7QHgPj8sTdZ5YJFfqEvscYXUCmib4PsKO8aZhvB/BD6x7bGWw==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-codebuild": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codebuild/-/aws-codebuild-1.107.0.tgz", - "integrity": "sha512-gaMnTRPpTR7fcODgojDP9RH0vGniaz1wPfTK3oPhAVZfuQqcRrUsUa2zZECnik8mF3LFdd1mwuHtFdvzyPZi8Q==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-codecommit": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-ecr-assets": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/region-info": "1.107.0", - "constructs": "^3.3.69", - "yaml": "1.10.2" - }, - "dependencies": { - "yaml": { - "version": "1.10.2", - "bundled": true - } - } - }, - "@aws-cdk/aws-codecommit": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codecommit/-/aws-codecommit-1.107.0.tgz", - "integrity": "sha512-k+KHuJTQ2bJXYmDTLY3V4vRmqzSly9Cf1MgKGFXoYYEOGaOHrMTdiBi3dBnTetOZlgArVI6QIRsRF4MQMmxMfg==", - "requires": { - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-codedeploy": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codedeploy/-/aws-codedeploy-1.107.0.tgz", - "integrity": "sha512-oYD31xS/HMcog2tsw7hqt0AOyXCruM4DGdBvKLcXT8IwbLkjjtj/z3LfZk8CeE7tmfpAWUhHWlRFoRF2DyHYDg==", - "requires": { - "@aws-cdk/aws-autoscaling": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticloadbalancing": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-codeguruprofiler": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.107.0.tgz", - "integrity": "sha512-Wi6dTGnoroWJ8nzLucqhLdmE2tMKodaM1n3kmjkDWXkyPiBIp+k0sckrBBTKNXvf/xWwFJzjNH+bUfBxEYTpKg==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-codepipeline": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codepipeline/-/aws-codepipeline-1.107.0.tgz", - "integrity": "sha512-wIHpeOmErVsBZPpve1rDclx/e+UpE+CHzpuv9bSveeRmzHl46RhkqzL3zXde/mt99KB3A05Ei7ujKxdJGvXSYw==", - "requires": { - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-codepipeline-actions": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codepipeline-actions/-/aws-codepipeline-actions-1.107.0.tgz", - "integrity": "sha512-YlJvrFEWufrPUcSH+1p2PPrHS6TDykowvdvon44FWizHqy56zt5kIbdg+Wei76IZmZb1B11btxwybJKD1W7k+Q==", - "requires": { - "@aws-cdk/aws-cloudformation": "1.107.0", - "@aws-cdk/aws-codebuild": "1.107.0", - "@aws-cdk/aws-codecommit": "1.107.0", - "@aws-cdk/aws-codedeploy": "1.107.0", - "@aws-cdk/aws-codepipeline": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-ecs": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-events-targets": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/aws-sns-subscriptions": "1.107.0", - "@aws-cdk/aws-stepfunctions": "1.107.0", - "@aws-cdk/core": "1.107.0", - "case": "1.6.3", - "constructs": "^3.3.69" - }, - "dependencies": { - "case": { - "version": "1.6.3", - "bundled": true - } - } - }, - "@aws-cdk/aws-cognito": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.107.0.tgz", - "integrity": "sha512-MSDyvWAn1ey7uIQnwplys11M1Pjz0y/YUJjzkxi2l/4CDnzYB6LDk8vc9VMkMUIoHzaXJf0RFZx1vF8fKM5Gtg==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "constructs": "^3.3.69", - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "bundled": true - } - } - }, - "@aws-cdk/aws-ec2": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.107.0.tgz", - "integrity": "sha512-9+w6jEJJBD8U4S/OK7T67+OWFMyCCZA5XKZY3QRZjSEWizvf3dNmn2CW16l/tosJqxPFPYTJhGR0e9x7r+EEvA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/aws-ssm": "1.107.0", - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "@aws-cdk/region-info": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-ecr": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.107.0.tgz", - "integrity": "sha512-CEalCKxFAIt2r50j0TdoFpOFt2EuV2dzUH6YLUCW8ywLva7RBH1wR/TlnPnqapQZqZM6ouwLQFnRgc88MTLONw==", - "requires": { - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-ecr-assets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.107.0.tgz", - "integrity": "sha512-HFNmW12ow1FzBVdSmA76niV3lxOaowLPoS1LGRcRHTmMECZy6IpLPpY6oLK6UTvJnFWkVWtpyEnN+u6noz0w2A==", - "requires": { - "@aws-cdk/assets": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69", - "minimatch": "^3.0.4" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.2", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "@aws-cdk/aws-ecs": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs/-/aws-ecs-1.107.0.tgz", - "integrity": "sha512-3e4y6K1ByiS3tpwNazJxyaK1WLsL5KZoxwL9ANI+aZG/UYLAU0i713CjSjnK28ms20Pp6vdz3HveOM2Kz7KHWQ==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.107.0", - "@aws-cdk/aws-autoscaling": "1.107.0", - "@aws-cdk/aws-autoscaling-hooktargets": "1.107.0", - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-ecr-assets": "1.107.0", - "@aws-cdk/aws-elasticloadbalancing": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/aws-route53-targets": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/aws-secretsmanager": "1.107.0", - "@aws-cdk/aws-servicediscovery": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/aws-ssm": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-efs": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-efs/-/aws-efs-1.107.0.tgz", - "integrity": "sha512-hrXsi5hZFYSp0PQr9V4UFBuFwLqMqupbpODJ79rhqBnvSzihd24h/njljyNIWT1ryoZjRhsCvYZu4xJXgoT5Lg==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-elasticloadbalancing": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.107.0.tgz", - "integrity": "sha512-lQd6N82e52JviMhJXcI0/q8LJmMtlg3Z9Pk+cdGxi3fj5bWIOLYqWb0SPCQbm/0jkCI9BCD71suwxj04kMiI4g==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-elasticloadbalancingv2": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.107.0.tgz", - "integrity": "sha512-j1XhQvywQGvgRpTGpdMQHRcS0USWwTvp9/B39h0ehUBbyV7jzONDd2h6Pvq9De0NHfLMPJsDTXLg116XYYI+8w==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "@aws-cdk/region-info": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-events": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.107.0.tgz", - "integrity": "sha512-TRFuVYNbZmECPBKGO9SiAV3r0K7H4AQPEUuw3Uo34QCNPgkXMdBmjVjYIh1I9Q3TI9zC0zWsp8npKyp8raqBcA==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-events-targets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events-targets/-/aws-events-targets-1.107.0.tgz", - "integrity": "sha512-PPuW/DdrV0PEfAGu9CRFEnGoulU2DBrC86XZb+nmA29ReVbWIFsMWiHbkhf93WYFdp6ieQUOlfeHA2N80b2FpQ==", - "requires": { - "@aws-cdk/aws-apigateway": "1.107.0", - "@aws-cdk/aws-codebuild": "1.107.0", - "@aws-cdk/aws-codepipeline": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecs": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kinesis": "1.107.0", - "@aws-cdk/aws-kinesisfirehose": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/aws-sns-subscriptions": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/aws-stepfunctions": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-globalaccelerator": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-globalaccelerator/-/aws-globalaccelerator-1.107.0.tgz", - "integrity": "sha512-mfARBd1HVA4q9Rq+bOFYrL11n8V3Dsy9mncAynuems6WN1+goF3rkWOSTYq69QtMWj4xkH9LtThs4f366WaSXg==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-iam": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.107.0.tgz", - "integrity": "sha512-ZSULS+IdMK82VjcxNyLATlnYN1bQVD1om8MXGYxAkFuQLb3XL+uAa7NLVeHZtEKkPYqr8BcYlCXpB1JvGImJkA==", - "requires": { - "@aws-cdk/core": "1.107.0", - "@aws-cdk/region-info": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-kinesis": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesis/-/aws-kinesis-1.107.0.tgz", - "integrity": "sha512-ubWyaLmqK54WZvMUUgvMJ+AsRKzX7EG5xjvnoj5wYvN9bILeXUKV/I3yHMU47WluKKaDOk12wbUANK2H+sbwZg==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-kinesisfirehose": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesisfirehose/-/aws-kinesisfirehose-1.107.0.tgz", - "integrity": "sha512-Pccnj7M1HSeLRsMYnnSULwYw1rPtDegqPhAoj8bDRIJMZ3/vtfeGaq6wpPd4X1eP8GtvvbRtqbQkw6w3DKYMJg==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-kms": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.107.0.tgz", - "integrity": "sha512-+b1j/GOeHh76lG92vRhPiyriW96e4TiZ9XVXv5sxv4zJkGD+X5oBVL82RouYJ2gw/onGiiWsobz8J/R1/h14pA==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-lambda": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.107.0.tgz", - "integrity": "sha512-McoQ3rjFtXDHUaq4ovU/ARwBJgQz3iq2cBogv0zg4g8AMw9doGVZnXjIYNFiCBXCQD1IUAlrLi7YhpXBDnygRA==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.107.0", - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-codeguruprofiler": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-ecr": "1.107.0", - "@aws-cdk/aws-ecr-assets": "1.107.0", - "@aws-cdk/aws-efs": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/aws-signer": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-logs": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.107.0.tgz", - "integrity": "sha512-CNZHb4B2+KSmaIgC4rNFAXs+rlHRt5F4Nen/c2TtP9/E9WVZLz4WpYQWQSbV61mFEWFH0vHbihGxP8/pY44AnA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-s3-assets": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-route53": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.107.0.tgz", - "integrity": "sha512-gvWD9VsmZV6m+7Phu4DAGpIPy8hf0rZQJIZhvLuffBpICenlDbiW2eH1h1/3O5d6/SBSYLxQ/NbZX18e/RFDGw==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/custom-resources": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-route53-targets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.107.0.tgz", - "integrity": "sha512-9NUUZj3fLwz+sKcGS/OplZreuzrkEEuXJBn2+zPUIB5sI1NWsRY+R/rLSKy2PchEYsN66pnLSlRlzqDKfO4pgA==", - "requires": { - "@aws-cdk/aws-apigateway": "1.107.0", - "@aws-cdk/aws-cloudfront": "1.107.0", - "@aws-cdk/aws-cognito": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticloadbalancing": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-globalaccelerator": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/region-info": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-s3": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.107.0.tgz", - "integrity": "sha512-BjH9S+ZlFHoqRDRT/I8m3MFB+80F6mHASMnKHuyXoMfUs8qMos7R8XEJAprx/dMf5EwAMfFYS0IFZH21CpBlxw==", - "requires": { - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-s3-assets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.107.0.tgz", - "integrity": "sha512-9P4d5ADJr7XxaXdB3G4fMcEjhj7GQM3NDtikchH1XMLje8gz4Eagv6ApaqDkHaRzRe3l9VBeoc6fQHIQlWtSHQ==", - "requires": { - "@aws-cdk/assets": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-sam": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.107.0.tgz", - "integrity": "sha512-P1YSJKmWB56p3tRDhXIa1ooFAmBbOenDUQh+QVJRChCewolaXM+pf9+bHveiHtVsur++ZptEzyR4d00DVSFeMQ==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-secretsmanager": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.107.0.tgz", - "integrity": "sha512-Bl2fgAPKXMMcWNlJ+BBrtGLIb+EyF1ybOOb1wfKiofKNl1b/jHrH/g7mani79x5IY0NVa7pBR5IZNqlBm98GkA==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-sam": "1.107.0", - "@aws-cdk/core": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-servicediscovery": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.107.0.tgz", - "integrity": "sha512-o2+oLurX2tEFBbyhAKXe7xboeC5rBaprbDPZWUddlZMZPHuX0KggmV3qUOqMtuiATghOw0xDBGz83AwFc/lXTA==", - "requires": { - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.107.0", - "@aws-cdk/aws-route53": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-signer": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-signer/-/aws-signer-1.107.0.tgz", - "integrity": "sha512-1n23akqOg8osrcPcrzoZybVyA9fgWV/VzFcaSOLTUh3zxrtb5UvKdeIwMLMEaNXoyOb1PsdEwfr+0B7GB5+l3g==", - "requires": { - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-sns": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.107.0.tgz", - "integrity": "sha512-EjRmqiP+xNbP3tZDOSOw2CtiZ56liaaFuJhccLOJTtfDKxhNN5reUdjlsU7GbteJt0ssSN2u/iU3jRXOFX8KHQ==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-sns-subscriptions": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.107.0.tgz", - "integrity": "sha512-6ez7EMXmxip6YxT1JmE9obbF6wzgxCAUGCJkZZQId0jT320CX+oiEdCtxut1MWC2CV6ggLYNSDs+5GJVb030kQ==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/aws-sqs": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-sqs": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.107.0.tgz", - "integrity": "sha512-dcap+XhKRd/5TGy8GWSlZ+vj5iXDrYrlQROnlW5026bXCQDFvYpBO3VoSY8Pyai3VjHJUEU7DKfpkbjl7rxUpA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-ssm": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.107.0.tgz", - "integrity": "sha512-nhRLAVt8IxRAiUiTj8V9YsDRkykuwq1QlKvXglgChFkd7wtWx7JSBragp5q8rKsLzCYqqWNJ/Ofd7CQlEQamPQ==", - "requires": { - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-kms": "1.107.0", - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/aws-stepfunctions": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.107.0.tgz", - "integrity": "sha512-BxH+DRKLI/5JJZXuUWVrycnscW9I42mZZtiOyiAtEK0Fuuva4fhDt3u9Xn0j+s6Ehc4TG5r5EPC1PG32HzLFXA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.107.0", - "@aws-cdk/aws-events": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-s3": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/cfnspec": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.107.0.tgz", - "integrity": "sha512-GzA5jyInk8V7cNeUa3DutPnSGLxNezQ2IKZsnYDh8MZnBnZQ/OiRuLm1B5RIJMQpWIFWJzJ4D0Qnez8N0O3+PQ==", - "dev": true, - "requires": { - "md5": "^2.3.0" - } - }, - "@aws-cdk/cloud-assembly-schema": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.107.0.tgz", - "integrity": "sha512-z1WdnHrHGR6VF7p7Xv6MAwlr4sCGsFGGRJmk4WmvcFosOclLFKfSsxFE2w5RMmuyxLxdJmarSYF3AKOwm9mHng==", - "requires": { - "jsonschema": "^1.4.0", - "semver": "^7.3.5" - }, - "dependencies": { - "jsonschema": { - "version": "1.4.0", - "bundled": true - }, - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.5", - "bundled": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "bundled": true - } - } - }, - "@aws-cdk/cloudformation-diff": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.107.0.tgz", - "integrity": "sha512-/FpJfrLHKNWUKOQ9a0yde42jo2s7+0W3XQnTWal1fN4f1n84KB2xLp/ZSI/7TAhHECQxlQDLtTUciDNuzd9qTg==", - "dev": true, - "requires": { - "@aws-cdk/cfnspec": "1.107.0", - "@types/node": "^10.17.60", - "colors": "^1.4.0", - "diff": "^5.0.0", - "fast-deep-equal": "^3.1.3", - "string-width": "^4.2.2", - "table": "^6.7.1" - }, - "dependencies": { - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true - } - } - }, - "@aws-cdk/core": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.107.0.tgz", - "integrity": "sha512-yE0yU341HZWd7ee0SsMOToqz4xC3PoaDerSklxWWdgw3rgVatwP4pqrml5ZOE+q6vhPseESvNRjfZizKc7xK7w==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "@aws-cdk/region-info": "1.107.0", - "@balena/dockerignore": "^1.0.2", - "constructs": "^3.3.69", - "fs-extra": "^9.1.0", - "ignore": "^5.1.8", - "minimatch": "^3.0.4" - }, - "dependencies": { - "@balena/dockerignore": { - "version": "1.0.2", - "bundled": true - }, - "at-least-node": { - "version": "1.0.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "fs-extra": { - "version": "9.1.0", - "bundled": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.6", - "bundled": true - }, - "ignore": { - "version": "5.1.8", - "bundled": true - }, - "jsonfile": { - "version": "6.1.0", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "universalify": { - "version": "2.0.0", - "bundled": true - } - } - }, - "@aws-cdk/custom-resources": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.107.0.tgz", - "integrity": "sha512-VTf1eHmNaKEl/xuf4/wUxikRZecVbp+G+NDzW1rwxvGgWl4itd5aYhIvWeW0jO99d9VyXesrxRmdiA28ahXu7g==", - "requires": { - "@aws-cdk/aws-cloudformation": "1.107.0", - "@aws-cdk/aws-ec2": "1.107.0", - "@aws-cdk/aws-iam": "1.107.0", - "@aws-cdk/aws-lambda": "1.107.0", - "@aws-cdk/aws-logs": "1.107.0", - "@aws-cdk/aws-sns": "1.107.0", - "@aws-cdk/core": "1.107.0", - "constructs": "^3.3.69" - } - }, - "@aws-cdk/cx-api": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.107.0.tgz", - "integrity": "sha512-nNfdagY9MVrvvDGPjmdCpBaLGZeMxGAGOOUxFpWbkE7PoDRWcESVf0s2BERsIRLglPEab4eJOQ8PNIBTThSkPQ==", - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "semver": "^7.3.5" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.5", - "bundled": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "bundled": true - } - } - }, - "@aws-cdk/region-info": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.107.0.tgz", - "integrity": "sha512-7ucj+0W+JfGxVyVnsYCCJUr0rBGciOJQq/7fp+Ntp76oTjJTsglC7mGiF3b0Gn65BTiJtPiZayX2L50mlJTPpA==" - }, - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/compat-data": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", - "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", - "dev": true - }, - "@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", - "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", - "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz", - "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.0.2", - "jest-util": "^27.0.2", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/core": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.4.tgz", - "integrity": "sha512-+dsmV8VUs1h/Szb+rEWk8xBM1fp1I///uFy9nk3wXGvRsF2lBp8EVPmtWc+QFRb3MY2b7u2HbkGF1fzoDzQTLA==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/reporters": "^27.0.4", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.2", - "jest-config": "^27.0.4", - "jest-haste-map": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.4", - "jest-resolve-dependencies": "^27.0.4", - "jest-runner": "^27.0.4", - "jest-runtime": "^27.0.4", - "jest-snapshot": "^27.0.4", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "jest-watcher": "^27.0.2", - "micromatch": "^4.0.4", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/environment": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.3.tgz", - "integrity": "sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", - "@types/node": "*", - "jest-mock": "^27.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/fake-timers": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.3.tgz", - "integrity": "sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@sinonjs/fake-timers": "^7.0.2", - "@types/node": "*", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/globals": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.3.tgz", - "integrity": "sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.0.3", - "@jest/types": "^27.0.2", - "expect": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/reporters": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.4.tgz", - "integrity": "sha512-Xa90Nm3JnV0xCe4M6A10M9WuN9krb+WFKxV1A98Y4ePCw40n++r7uxFUNU7DT1i9Behj7fjrAIju9oU0t1QtCg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.2", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.2", - "jest-resolve": "^27.0.4", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/source-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", - "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz", - "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/test-sequencer": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.4.tgz", - "integrity": "sha512-6UFEVwdmxYdyNffBxVVZxmXEdBE4riSddXYSnFNH0ELFQFk/bvagizim8WfgJTqF4EKd+j1yFxvhb8BMHfOjSQ==", - "dev": true, - "requires": { - "@jest/test-result": "^27.0.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-runtime": "^27.0.4" - } - }, - "@jest/transform": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.2.tgz", - "integrity": "sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.0.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-util": "^27.0.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.7.tgz", - "integrity": "sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.7.tgz", - "integrity": "sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.0.tgz", - "integrity": "sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", - "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "26.0.23", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", - "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", - "dev": true, - "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "@types/node": { - "version": "15.12.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz", - "integrity": "sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==", - "dev": true - }, - "@types/prettier": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", - "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", - "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-cdk": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.107.0.tgz", - "integrity": "sha512-OOcmb8cHZ/NGkI/dEE02dZPrrWcpanWfK6JRIxAFB2VoBv49ijFvvTt+S2vuBxboNzBr4Dr4gEIq5SabY9co6w==", - "dev": true, - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/cloudformation-diff": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "@aws-cdk/region-info": "1.107.0", - "archiver": "^5.3.0", - "aws-sdk": "^2.848.0", - "camelcase": "^6.2.0", - "cdk-assets": "1.107.0", - "colors": "^1.4.0", - "decamelize": "^5.0.0", - "fs-extra": "^9.1.0", - "glob": "^7.1.7", - "json-diff": "^0.5.4", - "minimatch": ">=3.0", - "promptly": "^3.2.0", - "proxy-agent": "^4.0.1", - "semver": "^7.3.5", - "source-map-support": "^0.5.19", - "table": "^6.7.1", - "uuid": "^8.3.2", - "wrap-ansi": "^7.0.0", - "yaml": "1.10.2", - "yargs": "^16.2.0" - }, - "dependencies": { - "@aws-cdk/cfnspec": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.107.0.tgz", - "integrity": "sha512-GzA5jyInk8V7cNeUa3DutPnSGLxNezQ2IKZsnYDh8MZnBnZQ/OiRuLm1B5RIJMQpWIFWJzJ4D0Qnez8N0O3+PQ==", - "dev": true, - "requires": { - "md5": "^2.3.0" - } - }, - "@aws-cdk/cloud-assembly-schema": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.107.0.tgz", - "integrity": "sha512-z1WdnHrHGR6VF7p7Xv6MAwlr4sCGsFGGRJmk4WmvcFosOclLFKfSsxFE2w5RMmuyxLxdJmarSYF3AKOwm9mHng==", - "dev": true, - "requires": { - "jsonschema": "^1.4.0", - "semver": "^7.3.5" - } - }, - "@aws-cdk/cloudformation-diff": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.107.0.tgz", - "integrity": "sha512-/FpJfrLHKNWUKOQ9a0yde42jo2s7+0W3XQnTWal1fN4f1n84KB2xLp/ZSI/7TAhHECQxlQDLtTUciDNuzd9qTg==", - "dev": true, - "requires": { - "@aws-cdk/cfnspec": "1.107.0", - "@types/node": "^10.17.60", - "colors": "^1.4.0", - "diff": "^5.0.0", - "fast-deep-equal": "^3.1.3", - "string-width": "^4.2.2", - "table": "^6.7.1" - } - }, - "@aws-cdk/cx-api": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.107.0.tgz", - "integrity": "sha512-nNfdagY9MVrvvDGPjmdCpBaLGZeMxGAGOOUxFpWbkE7PoDRWcESVf0s2BERsIRLglPEab4eJOQ8PNIBTThSkPQ==", - "dev": true, - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "semver": "^7.3.5" - } - }, - "@aws-cdk/region-info": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.107.0.tgz", - "integrity": "sha512-7ucj+0W+JfGxVyVnsYCCJUr0rBGciOJQq/7fp+Ntp76oTjJTsglC7mGiF3b0Gn65BTiJtPiZayX2L50mlJTPpA==", - "dev": true - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "8.3.0", - "resolved": "https://registry.yarnpkg.com/ajv/-/ajv-8.3.0.tgz#25ee7348e32cdc4a1dbb38256bf6bdc451dd577c", - "integrity": "sha512-RYE7B5An83d7eWnDR8kbdaIFqmKCNsP16ay1hDbJEU+sa0e3H9SebskCt0Uufem6cfAVu7Col6ubcn/W+Sm8/Q==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "archiver": { - "version": "5.3.0", - "resolved": "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "ast-types": { - "version": "0.13.4", - "resolved": "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "aws-sdk": { - "version": "2.903.0", - "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.903.0.tgz#4c8252723370ebbdaffe69f4dfddc5973b1dab4a", - "integrity": "sha512-BP/giYLP8QJ63Jta59kph1F76oPITxRt/wNr3BdoEs9BtshWlGKk149UaseDB4wJtI+0TER5jtzBIUBcP6E+wA==", - "dev": true, - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - } - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "cdk-assets": { - "version": "1.107.0", - "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.107.0.tgz", - "integrity": "sha512-Haqs+k8PDxY1Ppfcwt4paQTuTWlm6ulb3OESQ5aOpkCvpWa3e5TsCoCadAgjpRHDjM7fvUj8vgWx8C1+HQlH3A==", - "dev": true, - "requires": { - "@aws-cdk/cloud-assembly-schema": "1.107.0", - "@aws-cdk/cx-api": "1.107.0", - "archiver": "^5.3.0", - "aws-sdk": "^2.848.0", - "glob": "^7.1.7", - "yargs": "^16.2.0" - } - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "cli-color": { - "version": "0.1.7", - "resolved": "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347", - "integrity": "sha1-rcMgD6RxzCEbDaf1ZrcemLnWc0c=", - "dev": true, - "requires": { - "es5-ext": "0.8.x" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "compress-commons": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.0.tgz#25ec7a4528852ccd1d441a7d4353cd0ece11371b", - "integrity": "sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "dev": true, - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, - "crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.0.tgz#88358157b010ef133febfd27c18994bd80c6215b", - "integrity": "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "degenerator": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254", - "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", - "dev": true, - "requires": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "difflib": { - "version": "0.2.4", - "resolved": "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e", - "integrity": "sha1-teMDYabbAjF21WKJLbhZQKcY9H4=", - "dev": true, - "requires": { - "heap": ">= 0.2.0" - } - }, - "dreamopt": { - "version": "0.6.0", - "resolved": "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b", - "integrity": "sha1-2BPM2sjTnYrVJndVFKE92mZNa0s=", - "dev": true, - "requires": { - "wordwrap": ">=0.0.2" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "es5-ext": { - "version": "0.8.2", - "resolved": "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab", - "integrity": "sha1-q6jZ4ZQ6iVrJaDemKjmz9V7NlKs=", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", - "dev": true - }, - "fs-constants": { - "version": "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==", - "dev": true - }, - "fs-extra": { - "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==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dev": true, - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-uri": { - "version": "3.0.2", - "resolved": "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "heap": { - "version": "0.2.6", - "resolved": "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=", - "dev": true - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", - "dev": true - }, - "json-diff": { - "version": "0.5.4", - "resolved": "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.4.tgz#7bc8198c441756632aab66c7d9189d365a7a035a", - "integrity": "sha512-q5Xmx9QXNOzOzIlMoYtLrLiu4Jl/Ce2bn0CNcv54PhyH89CI4GWlGVDye8ei2Ijt9R3U+vsWPsXpLUNob8bs8Q==", - "dev": true, - "requires": { - "cli-color": "~0.1.6", - "difflib": "~0.2.1", - "dreamopt": "~0.6.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonschema": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2", - "integrity": "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "netmask": { - "version": "2.0.2", - "resolved": "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "pac-proxy-agent": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb", - "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^4.1.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" - } - }, - "pac-resolver": { - "version": "4.2.0", - "resolved": "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd", - "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", - "dev": true, - "requires": { - "degenerator": "^2.2.0", - "ip": "^1.1.5", - "netmask": "^2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promptly": { - "version": "3.2.0", - "resolved": "https://registry.yarnpkg.com/promptly/-/promptly-3.2.0.tgz#a5517fbbf59bd31c1751d4e1d9bef1714f42b9d8", - "integrity": "sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug==", - "dev": true, - "requires": { - "read": "^1.0.4" - } - }, - "proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c", - "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", - "dev": true, - "requires": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^4.1.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", - "dev": true - }, - "socks": { - "version": "2.6.1", - "resolved": "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60", - "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4", - "socks": "^2.3.3" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - }, - "dependencies": { - "sax": { - "version": "1.2.4", - "resolved": "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - } - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", - "dev": true - }, - "zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - } - } - } - }, - "babel-jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.2.tgz", - "integrity": "sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q==", - "dev": true, - "requires": { - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", - "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", - "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.0.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001235", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz", - "integrity": "sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", - "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "constructs": { - "version": "3.3.75", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.3.75.tgz", - "integrity": "sha512-q10foASSSfDWmS99OQLfnWDXCzqLvoORISAVWPFg0AmIGlBv2ZdDOtXxLqrJARPxVlOldmW2JzWzdRI+4+0/ZA==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "electron-to-chromium": { - "version": "1.3.749", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz", - "integrity": "sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A==", - "dev": true - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expect": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz", - "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.1", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", - "dev": true, - "requires": { - "ci-info": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.4.tgz", - "integrity": "sha512-Px1iKFooXgGSkk1H8dJxxBIrM3tsc5SIuI4kfKYK2J+4rvCvPGr/cXktxh0e9zIPQ5g09kOMNfHQEmusBUf/ZA==", - "dev": true, - "requires": { - "@jest/core": "^27.0.4", - "import-local": "^3.0.2", - "jest-cli": "^27.0.4" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-cli": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.4.tgz", - "integrity": "sha512-E0T+/i2lxsWAzV7LKYd0SB7HUAvePqaeIh5vX43/G5jXLhv1VzjYzJAGEkTfvxV774ll9cyE2ljcL73PVMEOXQ==", - "dev": true, - "requires": { - "@jest/core": "^27.0.4", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.0.4", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "prompts": "^2.0.1", - "yargs": "^16.0.3" - } - } - } - }, - "jest-changed-files": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz", - "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-circus": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.4.tgz", - "integrity": "sha512-QD+eblDiRphta630WRKewuASLs/oY1Zki2G4bccntRvrTHQ63ljwFR5TLduuK4Zg0ZPzW0+8o6AP7KRd1yKOjw==", - "dev": true, - "requires": { - "@jest/environment": "^27.0.3", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.0.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.4", - "jest-snapshot": "^27.0.4", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-config": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.4.tgz", - "integrity": "sha512-VkQFAHWnPQefdvHU9A+G3H/Z3NrrTKqWpvxgQz3nkUdkDTWeKJE6e//BL+R7z79dXOMVksYgM/z6ndtN0hfChg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.4", - "@jest/types": "^27.0.2", - "babel-jest": "^27.0.2", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.0.4", - "jest-environment-jsdom": "^27.0.3", - "jest-environment-node": "^27.0.3", - "jest-get-type": "^27.0.1", - "jest-jasmine2": "^27.0.4", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.4", - "jest-runner": "^27.0.4", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "micromatch": "^4.0.4", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-docblock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", - "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz", - "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz", - "integrity": "sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA==", - "dev": true, - "requires": { - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", - "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2", - "jsdom": "^16.6.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-environment-node": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.3.tgz", - "integrity": "sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg==", - "dev": true, - "requires": { - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/types": "^27.0.2", - "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jest-haste-map": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.2.tgz", - "integrity": "sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.1", - "jest-serializer": "^27.0.1", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-jasmine2": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.4.tgz", - "integrity": "sha512-yj3WrjjquZwkJw+eA4c9yucHw4/+EHndHWSqgHbHGQfT94ihaaQsa009j1a0puU8CNxPDk0c1oAPeOpdJUElwA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.3", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.0.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.4", - "jest-snapshot": "^27.0.4", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-leak-detector": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz", - "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==", - "dev": true, - "requires": { - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-matcher-utils": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz", - "integrity": "sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", - "dev": true - }, - "jest-diff": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", - "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - } - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-message-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz", - "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-mock": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz", - "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true - }, - "jest-regex-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", - "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", - "dev": true - }, - "jest-resolve": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.4.tgz", - "integrity": "sha512-BcfyK2i3cG79PDb/6gB6zFeFQlcqLsQjGBqznFCpA0L/3l1L/oOsltdUjs5eISAWA9HS9qtj8v2PSZr/yWxONQ==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "escalade": "^3.1.1", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "resolve": "^1.20.0", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.4.tgz", - "integrity": "sha512-F33UPfw1YGWCV2uxJl7wD6TvcQn5IC0LtguwY3r4L7R6H4twpLkp5Q2ZfzRx9A2I3G8feiy0O0sqcn/Qoym71A==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-snapshot": "^27.0.4" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-runner": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.4.tgz", - "integrity": "sha512-NfmvSYLCsCJk2AG8Ar2NAh4PhsJJpO+/r+g4bKR5L/5jFzx/indUpnVBdrfDvuqhGLLAvrKJ9FM/Nt8o1dsqxg==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.3", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.1", - "jest-environment-jsdom": "^27.0.3", - "jest-environment-node": "^27.0.3", - "jest-haste-map": "^27.0.2", - "jest-leak-detector": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.4", - "jest-runtime": "^27.0.4", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-runtime": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.4.tgz", - "integrity": "sha512-voJB4xbAjS/qYPboV+e+gmg3jfvHJJY4CagFWBOM9dQKtlaiTjcpD2tWwla84Z7PtXSQPeIpXY0qksA9Dum29A==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.3", - "@jest/fake-timers": "^27.0.3", - "@jest/globals": "^27.0.3", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.4", - "jest-snapshot": "^27.0.4", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-serializer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", - "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "27.0.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.4.tgz", - "integrity": "sha512-hnjrvpKGdSMvKfbHyaG5Kul7pDJGZvjVy0CKpzhu28MmAssDXS6GpynhXzgst1wBQoKD8c9b2VS2a5yhDLQRCA==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.0.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "jest-haste-map": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.4", - "jest-util": "^27.0.2", - "natural-compare": "^1.4.0", - "pretty-format": "^27.0.2", - "semver": "^7.3.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", - "dev": true - }, - "jest-diff": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", - "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - } - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "jest-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz", - "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "picomatch": "^2.2.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-validate": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz", - "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "leven": "^3.1.0", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-watcher": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz", - "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==", - "dev": true, - "requires": { - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.0.2", - "string-length": "^4.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.5", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dev": true, - "requires": { - "mime-db": "1.48.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "ts-jest": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.3.tgz", - "integrity": "sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "mkdirp": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "ts-node": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.0.0.tgz", - "integrity": "sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg==", - "dev": true, - "requires": { - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", - "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", - "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", - "dev": true - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/tools/cicd/package.json b/tools/cicd/package.json index cc4433a78..c16665668 100644 --- a/tools/cicd/package.json +++ b/tools/cicd/package.json @@ -1,30 +1,38 @@ { + "private": true, "name": "bleadeploy", "version": "1.0.0", + "description": "Pipelines for BLEA", "bin": { "bleadeploy": "bin/bleadeploy.js" }, + "license": "MIT-0", "scripts": { - "build": "tsc", + "synth:dev": "npx cdk synth -c environment=dev", + "depcheck": "npx depcheck --ignore-dirs cdk.out", + "build": "tsc --build", + "clean": "tsc --build --clean && rm -rf cdk.out", "watch": "tsc -w", "test": "jest", - "cdk": "cdk" + "lint": "eslint --fix .", + "format": "prettier --write ." }, "devDependencies": { - "@aws-cdk/assert": "1.107.0", - "@types/jest": "^26.0.23", - "@types/node": "15.12.1", - "aws-cdk": "1.107.0", + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "aws-cdk": "^1.129.0", "jest": "^27.0.4", "ts-jest": "^27.0.3", "ts-node": "^10.0.0", - "typescript": "~4.3.2" + "typescript": "~4.4.4" }, "dependencies": { - "@aws-cdk/aws-codebuild": "^1.107.0", - "@aws-cdk/aws-codepipeline": "^1.107.0", - "@aws-cdk/aws-codepipeline-actions": "^1.107.0", - "@aws-cdk/core": "1.107.0", + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-codebuild": "^1.129.0", + "@aws-cdk/aws-codepipeline": "^1.129.0", + "@aws-cdk/aws-codepipeline-actions": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/core": "^1.129.0", "source-map-support": "^0.5.19" } } diff --git a/tools/cicd/test/__snapshots__/bleadeploy.test.ts.snap b/tools/cicd/test/__snapshots__/bleadeploy.test.ts.snap index 94be4f431..766caf680 100644 --- a/tools/cicd/test/__snapshots__/bleadeploy.test.ts.snap +++ b/tools/cicd/test/__snapshots__/bleadeploy.test.ts.snap @@ -43,7 +43,15 @@ Object { Object { "Ref": "AWS::Partition", }, - ":logs:ap-northeast-1:111111111111:log-group:/aws/codebuild/", + ":logs:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":log-group:/aws/codebuild/", Object { "Ref": "DeployStackCodeBuildProject9086D16F", }, @@ -58,7 +66,15 @@ Object { Object { "Ref": "AWS::Partition", }, - ":logs:ap-northeast-1:111111111111:log-group:/aws/codebuild/", + ":logs:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":log-group:/aws/codebuild/", Object { "Ref": "DeployStackCodeBuildProject9086D16F", }, @@ -85,7 +101,15 @@ Object { Object { "Ref": "AWS::Partition", }, - ":codebuild:ap-northeast-1:111111111111:report-group/", + ":codebuild:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":report-group/", Object { "Ref": "DeployStackCodeBuildProject9086D16F", }, @@ -181,10 +205,12 @@ Object { Object { "Name": "AWS_DEFAULT_REGION", "Type": "PLAINTEXT", - "Value": "ap-northeast-1", + "Value": Object { + "Ref": "AWS::Region", + }, }, ], - "Image": "aws/codebuild/standard:3.0", + "Image": "aws/codebuild/amazonlinux2-x86_64-standard:3.0", "ImagePullCredentialsType": "CODEBUILD", "PrivilegedMode": false, "Type": "LINUX_CONTAINER", @@ -277,7 +303,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":iam::111111111111:root", + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":root", ], ], }, @@ -379,7 +409,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":iam::111111111111:root", + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":root", ], ], }, @@ -722,7 +756,11 @@ Object { Object { "Ref": "AWS::Partition", }, - ":iam::111111111111:root", + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":root", ], ], }, diff --git a/tools/cicd/test/bleadeploy.test.ts b/tools/cicd/test/bleadeploy.test.ts index 4a02ef61c..fa6f42e70 100644 --- a/tools/cicd/test/bleadeploy.test.ts +++ b/tools/cicd/test/bleadeploy.test.ts @@ -5,9 +5,14 @@ import * as BLEAdeploy from '../lib/bleadeploy-stack'; // Load cdk.json to get context parameters import * as cdk_json from '../cdk.json'; +const procEnv = { + account: process.env.CDK_DEFAULT_ACCOUNT, + region: process.env.CDK_DEFAULT_REGION, +}; + const pjPrefix = 'BLEA'; const app = new cdk.App(); -const envKey = 'stagepipeline'; +const envKey = 'dev'; const envVals = cdk_json['context'][envKey]; describe(`${pjPrefix} Stacks`, () => { @@ -17,7 +22,7 @@ describe(`${pjPrefix} Stacks`, () => { githubRepositoryName: envVals['githubRepositoryName'], githubTargetBranch: envVals['githubTargetBranch'], codestarConnectionArn: envVals['codestarConnectionArn'], - env: envVals['env'], + env: procEnv, }); // test with snapshot diff --git a/tools/cicd/tsconfig.json b/tools/cicd/tsconfig.json index 19a2f2a52..6b477d407 100644 --- a/tools/cicd/tsconfig.json +++ b/tools/cicd/tsconfig.json @@ -1,24 +1,7 @@ { + "extends": "../../tsconfig.base.json", "compilerOptions": { - "target": "ES2018", - "module": "commonjs", - "lib": ["es2018"], - "declaration": true, - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "alwaysStrict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": false, - "inlineSourceMap": true, - "inlineSources": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false, - "typeRoots": ["./node_modules/@types"], - "resolveJsonModule": true + "baseUrl": "./" }, - "exclude": ["cdk.out"] + "include": ["bin/**/*.ts", "lib/**/*.ts", "test/**/*.ts"] } diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 000000000..b689483b2 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "lib": ["es2018"], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "resolveJsonModule": true + } +} diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json deleted file mode 100644 index 8d203f74f..000000000 --- a/tsconfig.eslint.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": [ - "bin/*.ts", - "lib/*.ts", - ".eslintrc.json" - ], - "exclude": [ - "node_modules", - "dist" - ] -} diff --git a/tsconfig.json b/tsconfig.json index 9e7dd534b..84f3ea711 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,24 +1,4 @@ { - "compilerOptions": { - "target": "ES2018", - "module": "commonjs", - "lib": ["es2018"], - "declaration": true, - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "alwaysStrict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": false, - "inlineSourceMap": true, - "inlineSources": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false, - "typeRoots": ["./node_modules/@types"], - "resolveJsonModule": true - }, - "exclude": ["cdk.out", "tools"] + "extends": "./tsconfig.base.json", + "exclude": ["cdk.out"] } diff --git a/usecases/base-ct-audit/.gitignore b/usecases/base-ct-audit/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/bin/blea-base-ct-audit.ts b/usecases/base-ct-audit/bin/blea-base-ct-audit.ts similarity index 100% rename from bin/blea-base-ct-audit.ts rename to usecases/base-ct-audit/bin/blea-base-ct-audit.ts diff --git a/usecases/base-ct-audit/cdk.json b/usecases/base-ct-audit/cdk.json new file mode 100644 index 000000000..bfa1d9f69 --- /dev/null +++ b/usecases/base-ct-audit/cdk.json @@ -0,0 +1,16 @@ +{ + "app": "npx ts-node bin/blea-base-ct-audit.ts", + "context": { + "dev-audit": { + "description": "Context samples for ControlTower Audit Account - Specific account & region", + "env": { + "account": "333333333333", + "region": "ap-northeast-1" + }, + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdAgg": "C01ZZZZZZZZ" + } + } + } +} diff --git a/jest.config.js b/usecases/base-ct-audit/jest.config.js similarity index 73% rename from jest.config.js rename to usecases/base-ct-audit/jest.config.js index 772f97490..98bd8c9e5 100644 --- a/jest.config.js +++ b/usecases/base-ct-audit/jest.config.js @@ -2,6 +2,6 @@ module.exports = { roots: ['/test'], testMatch: ['**/*.test.ts'], transform: { - '^.+\\.tsx?$': 'ts-jest' - } + '^.+\\.tsx?$': 'ts-jest', + }, }; diff --git a/usecases/base-ct-audit/lib/blea-chatbot-stack.ts b/usecases/base-ct-audit/lib/blea-chatbot-stack.ts new file mode 100644 index 000000000..24a6c255b --- /dev/null +++ b/usecases/base-ct-audit/lib/blea-chatbot-stack.ts @@ -0,0 +1,35 @@ +import * as cdk from '@aws-cdk/core'; +import * as cb from '@aws-cdk/aws-chatbot'; +import * as iam from '@aws-cdk/aws-iam'; + +export interface BLEAChatbotStackProps extends cdk.StackProps { + topicArn: string; + channelId: string; + workspaceId: string; +} + +// NOTICE: AWS Chatbot can send events from supported services only. +// See: https://docs.aws.amazon.com/chatbot/latest/adminguide/related-services.html +export class BLEAChatbotStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props: BLEAChatbotStackProps) { + super(scope, id, props); + + // AWS Chatbot configuration for sending message + const chatbotRole = new iam.Role(this, 'ChatbotRole', { + assumedBy: new iam.ServicePrincipal('chatbot.amazonaws.com'), + managedPolicies: [ + iam.ManagedPolicy.fromAwsManagedPolicyName('ReadOnlyAccess'), + iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchReadOnlyAccess'), + ], + }); + + // !!! Create SlackChannel and add aws chatbot app to the room + new cb.CfnSlackChannelConfiguration(this, 'ChatbotChannel', { + configurationName: `${id}-${props.workspaceId}`, + slackChannelId: props.channelId, + iamRoleArn: chatbotRole.roleArn, + slackWorkspaceId: props.workspaceId, + snsTopicArns: [props.topicArn], + }); + } +} diff --git a/usecases/base-ct-audit/package.json b/usecases/base-ct-audit/package.json new file mode 100644 index 000000000..69467be98 --- /dev/null +++ b/usecases/base-ct-audit/package.json @@ -0,0 +1,40 @@ +{ + "private": true, + "name": "blea-base-ct-audit", + "version": "1.0.0", + "description": "Baseline for AWS Control Tower audit account", + "license": "MIT-0", + "bin": { + "blea-base-ct-audit": "bin/blea-base-ct-audit.js" + }, + "scripts": { + "synth:dev": "npx cdk synth -c environment=dev-audit", + "depcheck": "npx depcheck --ignore-dirs cdk.out", + "build": "tsc --build", + "clean": "tsc --build --clean && rm -rf cdk.out", + "watch": "tsc -w", + "test": "jest", + "lint": "eslint --fix .", + "format": "prettier --write ." + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + }, + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/core": "^1.129.0" + } +} diff --git a/test/__snapshots__/blea-base-ct-audit.test.ts.snap b/usecases/base-ct-audit/test/__snapshots__/blea-base-ct-audit.test.ts.snap similarity index 100% rename from test/__snapshots__/blea-base-ct-audit.test.ts.snap rename to usecases/base-ct-audit/test/__snapshots__/blea-base-ct-audit.test.ts.snap diff --git a/test/blea-base-ct-audit.test.ts b/usecases/base-ct-audit/test/blea-base-ct-audit.test.ts similarity index 97% rename from test/blea-base-ct-audit.test.ts rename to usecases/base-ct-audit/test/blea-base-ct-audit.test.ts index 48764c4d4..5854a3496 100644 --- a/test/blea-base-ct-audit.test.ts +++ b/usecases/base-ct-audit/test/blea-base-ct-audit.test.ts @@ -8,7 +8,7 @@ import * as cdk_json from '../cdk.json'; const pjPrefix = 'BLEA'; const app = new cdk.App(); -const envKey = 'ctaudit'; +const envKey = 'dev-audit'; const envVals = cdk_json['context'][envKey]; describe(`${pjPrefix} ControlTower Stacks`, () => { diff --git a/usecases/base-ct-audit/tsconfig.json b/usecases/base-ct-audit/tsconfig.json new file mode 100644 index 000000000..6b477d407 --- /dev/null +++ b/usecases/base-ct-audit/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "./" + }, + "include": ["bin/**/*.ts", "lib/**/*.ts", "test/**/*.ts"] +} diff --git a/usecases/base-ct-guest/.gitignore b/usecases/base-ct-guest/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/bin/blea-base-ct-guest.ts b/usecases/base-ct-guest/bin/blea-base-ct-guest.ts similarity index 100% rename from bin/blea-base-ct-guest.ts rename to usecases/base-ct-guest/bin/blea-base-ct-guest.ts diff --git a/usecases/base-ct-guest/cdk.json b/usecases/base-ct-guest/cdk.json new file mode 100644 index 000000000..fd62be7c4 --- /dev/null +++ b/usecases/base-ct-guest/cdk.json @@ -0,0 +1,40 @@ +{ + "app": "npx ts-node bin/blea-base-ct-guest.ts", + "context": { + "dev": { + "description": "Context samples for Dev - Anonymous account & region", + "envName": "Development", + "securityNotifyEmail": "notify-security@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C00XXXXXXXX" + } + }, + "stage": { + "description": "Context samples for Staging - Specific account & region ", + "env": { + "account": "111111111111", + "region": "ap-northeast-1" + }, + "envName": "Staging", + "securityNotifyEmail": "notify-security@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C01XXXXXXXX" + } + }, + "prod": { + "description": "Context samples for Production - Specific account & region ", + "env": { + "account": "222222222222", + "region": "ap-northeast-1" + }, + "envName": "Production", + "securityNotifyEmail": "notify-security@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C02XXXXXXXX" + } + } + } +} diff --git a/usecases/base-ct-guest/jest.config.js b/usecases/base-ct-guest/jest.config.js new file mode 100644 index 000000000..98bd8c9e5 --- /dev/null +++ b/usecases/base-ct-guest/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + roots: ['/test'], + testMatch: ['**/*.test.ts'], + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, +}; diff --git a/lib/blea-chatbot-stack.ts b/usecases/base-ct-guest/lib/blea-chatbot-stack.ts similarity index 100% rename from lib/blea-chatbot-stack.ts rename to usecases/base-ct-guest/lib/blea-chatbot-stack.ts diff --git a/lib/blea-config-rules-stack.ts b/usecases/base-ct-guest/lib/blea-config-rules-stack.ts similarity index 98% rename from lib/blea-config-rules-stack.ts rename to usecases/base-ct-guest/lib/blea-config-rules-stack.ts index c33fbef52..18ea213c5 100644 --- a/lib/blea-config-rules-stack.ts +++ b/usecases/base-ct-guest/lib/blea-config-rules-stack.ts @@ -13,7 +13,7 @@ export class BLEAConfigRulesStack extends cdk.Stack { const ruleDefaultSgClosed = new config.ManagedRule(this, 'BLEARuleDefaultSecurityGroupClosed', { identifier: config.ManagedRuleIdentifiers.VPC_DEFAULT_SECURITY_GROUP_CLOSED, ruleScope: config.RuleScope.fromResources([config.ResourceType.EC2_SECURITY_GROUP]), - configRuleName: 'gc-default-security-group-closed', + configRuleName: 'bb-default-security-group-closed', description: 'Checks that the default security group of any Amazon Virtual Private Cloud (VPC) does not allow inbound or outbound traffic. The rule is non-compliant if the default security group has one or more inbound or outbound traffic.', }); diff --git a/lib/blea-iam-stack.ts b/usecases/base-ct-guest/lib/blea-iam-stack.ts similarity index 100% rename from lib/blea-iam-stack.ts rename to usecases/base-ct-guest/lib/blea-iam-stack.ts diff --git a/usecases/base-ct-guest/lib/blea-security-alarm-stack.ts b/usecases/base-ct-guest/lib/blea-security-alarm-stack.ts new file mode 100644 index 000000000..430d51f50 --- /dev/null +++ b/usecases/base-ct-guest/lib/blea-security-alarm-stack.ts @@ -0,0 +1,307 @@ +import * as cdk from '@aws-cdk/core'; +import * as iam from '@aws-cdk/aws-iam'; +import * as sns from '@aws-cdk/aws-sns'; +import * as cw from '@aws-cdk/aws-cloudwatch'; +import * as cwa from '@aws-cdk/aws-cloudwatch-actions'; +import * as cwe from '@aws-cdk/aws-events'; +import * as cwl from '@aws-cdk/aws-logs'; +import * as cwet from '@aws-cdk/aws-events-targets'; + +interface BLEASecurityAlarmStackProps extends cdk.StackProps { + notifyEmail: string; + cloudTrailLogGroupName: string; +} + +export class BLEASecurityAlarmStack extends cdk.Stack { + public readonly alarmTopic: sns.Topic; + + constructor(scope: cdk.Construct, id: string, props: BLEASecurityAlarmStackProps) { + super(scope, id, props); + + // SNS Topic for Security Alarm + const secTopic = new sns.Topic(this, 'SecurityAlarmTopic'); + new sns.Subscription(this, 'SecurityAlarmEmail', { + endpoint: props.notifyEmail, + protocol: sns.SubscriptionProtocol.EMAIL, + topic: secTopic, + }); + this.alarmTopic = secTopic; + + // Allow to publish message from CloudWatch + secTopic.addToResourcePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + principals: [new iam.ServicePrincipal('cloudwatch.amazonaws.com')], + actions: ['sns:Publish'], + resources: [secTopic.topicArn], + }), + ); + + // --------------- ConfigRule Compliance Change Notification ----------------- + // ConfigRule - Compliance Change + // See: https://docs.aws.amazon.com/config/latest/developerguide/monitor-config-with-cloudwatchevents.html + // See: https://aws.amazon.com/premiumsupport/knowledge-center/config-resource-non-compliant/?nc1=h_ls + // If you want to add rules to notify, add rule name text string to "configRuleName" array. + // Sample Rule 'bb-default-security-group-closed' is defined at lib/blea-config-rules-stack.ts + new cwe.Rule(this, 'BLEARuleConfigRules', { + description: 'CloudWatch Event Rule to send notification on Config Rule compliance changes.', + enabled: true, + eventPattern: { + source: ['aws.config'], + detailType: ['Config Rules Compliance Change'], + detail: { + configRuleName: ['bb-default-security-group-closed'], + newEvaluationResult: { + complianceType: ['NON_COMPLIANT'], + }, + }, + }, + targets: [new cwet.SnsTopic(secTopic)], + }); + + // ------------------------ AWS Health Notification --------------------------- + + // AWS Health - Notify any events on AWS Health + // See: https://aws.amazon.com/premiumsupport/knowledge-center/cloudwatch-notification-scheduled-events/?nc1=h_ls + new cwe.Rule(this, 'BLEARuleAwsHealth', { + description: 'Notify AWS Health event', + enabled: true, + eventPattern: { + source: ['aws.health'], + detailType: ['AWS Health Event'], + }, + targets: [new cwet.SnsTopic(secTopic)], + }); + + // ------------ Detective guardrails from NIST standard template ---------------- + // See: https://aws.amazon.com/quickstart/architecture/compliance-nist/?nc1=h_ls + + // Security Groups Change Notification + // See: https://aws.amazon.com/premiumsupport/knowledge-center/monitor-security-group-changes-ec2/?nc1=h_ls + // from NIST template + new cwe.Rule(this, 'BLEARuleSecurityGroupChange', { + description: 'Notify to create, update or delete a Security Group.', + enabled: true, + eventPattern: { + source: ['aws.ec2'], + detailType: ['AWS API Call via CloudTrail'], + detail: { + eventSource: ['ec2.amazonaws.com'], + eventName: [ + 'AuthorizeSecurityGroupIngress', + 'AuthorizeSecurityGroupEgress', + 'RevokeSecurityGroupIngress', + 'RevokeSecurityGroupEgress', + ], + }, + }, + targets: [new cwet.SnsTopic(secTopic)], + }); + + // Network ACL Change Notification + // from NIST template + new cwe.Rule(this, 'BLEARuleNetworkAclChange', { + description: 'Notify to create, update or delete a Network ACL.', + enabled: true, + eventPattern: { + source: ['aws.ec2'], + detailType: ['AWS API Call via CloudTrail'], + detail: { + eventSource: ['ec2.amazonaws.com'], + eventName: [ + 'CreateNetworkAcl', + 'CreateNetworkAclEntry', + 'DeleteNetworkAcl', + 'DeleteNetworkAclEntry', + 'ReplaceNetworkAclEntry', + 'ReplaceNetworkAclAssociation', + ], + }, + }, + targets: [new cwet.SnsTopic(secTopic)], + }); + + // CloudTrail Change + // from NIST template + new cwe.Rule(this, 'BLEARuleCloudTrailChange', { + description: 'Notify to change on CloudTrail log configuration', + enabled: true, + eventPattern: { + detailType: ['AWS API Call via CloudTrail'], + detail: { + eventSource: ['cloudtrail.amazonaws.com'], + eventName: ['StopLogging', 'DeleteTrail', 'UpdateTrail'], + }, + }, + targets: [new cwet.SnsTopic(secTopic)], + }); + + // LogGroup Construct for CloudTrail + // Use LogGroup.fromLogGroupName() because... + // On ControlTower environment, it created by not BLEA but ControlTower. So we need to refer existent LogGroup. + // When you use BLEA Standalone version, the LogGroup is created by BLEA. + // + // Note: + // MetricFilter-based detection may delay for several minutes because of latency on CloudTrail Log delivery to CloudWatchLogs + // Use CloudWatch Events if you can, it deliver CloudTrail event faster. + // IAM event occur in us-east-1 region so if you want to detect it, you need to use MetrifFilter-based detection + // See: https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-aws-console-sign-in-events.html + // + const cloudTrailLogGroup = cwl.LogGroup.fromLogGroupName(this, 'CloudTrailLogGroup', props.cloudTrailLogGroupName); + + // IAM Policy Change Notification + // from NIST template + const mfIAMPolicyChange = new cwl.MetricFilter(this, 'IAMPolicyChange', { + logGroup: cloudTrailLogGroup, + filterPattern: { + logPatternString: + '{($.eventName=DeleteGroupPolicy)||($.eventName=DeleteRolePolicy)||($.eventName=DeleteUserPolicy)||($.eventName=PutGroupPolicy)||($.eventName=PutRolePolicy)||($.eventName=PutUserPolicy)||($.eventName=CreatePolicy)||($.eventName=DeletePolicy)||($.eventName=CreatePolicyVersion)||($.eventName=DeletePolicyVersion)||($.eventName=AttachRolePolicy)||($.eventName=DetachRolePolicy)||($.eventName=AttachUserPolicy)||($.eventName=DetachUserPolicy)||($.eventName=AttachGroupPolicy)||($.eventName=DetachGroupPolicy)}', + }, + metricNamespace: 'CloudTrailMetrics', + metricName: 'IAMPolicyEventCount', + metricValue: '1', + }); + + new cw.Alarm(this, 'IAMPolicyChangeAlarm', { + metric: mfIAMPolicyChange.metric({ + period: cdk.Duration.seconds(300), + }), + evaluationPeriods: 1, + datapointsToAlarm: 1, + threshold: 1, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + alarmDescription: 'IAM Configuration changes detected!', + actionsEnabled: true, + statistic: cw.Statistic.SUM, + }).addAlarmAction(new cwa.SnsAction(secTopic)); + + // Unauthorized Attempts + // from NIST template + const mfUnauthorizedAttempts = new cwl.MetricFilter(this, 'UnauthorizedAttempts', { + logGroup: cloudTrailLogGroup, + filterPattern: { + logPatternString: '{($.errorCode=AccessDenied)||($.errorCode=UnauthorizedOperation)}', + }, + metricNamespace: 'CloudTrailMetrics', + metricName: 'UnauthorizedAttemptsEventCount', + metricValue: '1', + }); + + new cw.Alarm(this, 'UnauthorizedAttemptsAlarm', { + metric: mfUnauthorizedAttempts.metric({ + period: cdk.Duration.seconds(300), + }), + evaluationPeriods: 1, + datapointsToAlarm: 1, + threshold: 5, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + alarmDescription: 'Multiple unauthorized actions or logins attempted!', + actionsEnabled: true, + statistic: cw.Statistic.SUM, + }).addAlarmAction(new cwa.SnsAction(secTopic)); + + // NewAccessKeyCreated + // from NIST template + const mfNewAccessKeyCreated = new cwl.MetricFilter(this, 'NewAccessKeyCreated', { + logGroup: cloudTrailLogGroup, + filterPattern: { + logPatternString: '{($.eventName=CreateAccessKey)}', + }, + metricNamespace: 'CloudTrailMetrics', + metricName: 'NewAccessKeyCreatedEventCount', + metricValue: '1', + }); + + new cw.Alarm(this, 'NewAccessKeyCreatedAlarm', { + metric: mfNewAccessKeyCreated.metric({ + period: cdk.Duration.seconds(300), + }), + evaluationPeriods: 1, + datapointsToAlarm: 1, + threshold: 1, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + alarmDescription: 'Warning: New IAM access Eey was created. Please be sure this action was neccessary.', + actionsEnabled: true, + statistic: cw.Statistic.SUM, + }).addAlarmAction(new cwa.SnsAction(secTopic)); + + // Detect Root Activity from CloudTrail Log (For SecurityHub CIS 1.1) + // See: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-standards-cis-controls-1.1 + // See: https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail-additional-examples.html + const mfRooUserPolicy = new cwl.MetricFilter(this, 'RootUserPolicyEventCount', { + logGroup: cloudTrailLogGroup, + filterPattern: { + logPatternString: + '{$.userIdentity.type="Root" && $.userIdentity.invokedBy NOT EXISTS && $.eventType !="AwsServiceEvent"}', + }, + metricNamespace: 'CloudTrailMetrics', + metricName: 'RootUserPolicyEventCount', + metricValue: '1', + }); + + new cw.Alarm(this, 'RootUserPolicyEventCountAlarm', { + metric: mfRooUserPolicy.metric({ + period: cdk.Duration.seconds(300), + }), + evaluationPeriods: 1, + datapointsToAlarm: 1, + threshold: 1, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + alarmDescription: 'Root user activity detected!', + actionsEnabled: true, + statistic: cw.Statistic.SUM, + }).addAlarmAction(new cwa.SnsAction(secTopic)); + + // ------------------- Other security services integration ---------------------- + + // SecurityHub - Imported + // Security Hub automatically sends all new findings and all updates to existing findings to EventBridge as Security Hub Findings - Imported events. + // See: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cwe-integration-types.html + // + // Security Hub Finding format + // See: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format.html + new cwe.Rule(this, 'BLEARuleSecurityHub', { + description: 'CloudWatch Event Rule to send notification on SecurityHub all new findings and all updates.', + enabled: true, + eventPattern: { + source: ['aws.securityhub'], + detailType: ['Security Hub Findings - Imported'], + detail: { + findings: { + Severity: { + Label: ['CRITICAL', 'HIGH'], + }, + Compliance: { + Status: ['FAILED'], + }, + Workflow: { + Status: ['NEW', 'NOTIFIED'], + }, + RecordState: ['ACTIVE'], + }, + }, + }, + targets: [new cwet.SnsTopic(secTopic)], + }); + + // GuardDutyFindings + // Will alert for any Medium to High finding. + // See: https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings_cloudwatch.html + new cwe.Rule(this, 'BLEARuleGuardDuty', { + description: 'CloudWatch Event Rule to send notification on GuardDuty findings.', + enabled: true, + eventPattern: { + source: ['aws.guardduty'], + detailType: ['GuardDuty Finding'], + detail: { + severity: [ + 4, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, + 6.0, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 8, + 8.0, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9, + ], + }, + }, + targets: [new cwet.SnsTopic(secTopic)], + }); + } +} diff --git a/usecases/base-ct-guest/package.json b/usecases/base-ct-guest/package.json new file mode 100644 index 000000000..50b1d089d --- /dev/null +++ b/usecases/base-ct-guest/package.json @@ -0,0 +1,47 @@ +{ + "private": true, + "name": "blea-base-ct-guest", + "version": "1.0.0", + "description": "Baseline for AWS Control Tower guest accounts", + "license": "MIT-0", + "bin": { + "blea-base-ct-guest": "bin/blea-base-ct-guest.js" + }, + "scripts": { + "synth:dev": "npx cdk synth -c environment=dev", + "depcheck": "npx depcheck --ignore-dirs cdk.out", + "build": "tsc --build", + "clean": "tsc --build --clean && rm -rf cdk.out", + "watch": "tsc -w", + "test": "jest", + "lint": "eslint --fix .", + "format": "prettier --write ." + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + }, + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-config": "^1.129.0", + "@aws-cdk/aws-events": "^1.129.0", + "@aws-cdk/aws-events-targets": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/core": "^1.129.0" + } +} diff --git a/test/__snapshots__/blea-base-ct-guest.test.ts.snap b/usecases/base-ct-guest/test/__snapshots__/blea-base-ct-guest.test.ts.snap similarity index 99% rename from test/__snapshots__/blea-base-ct-guest.test.ts.snap rename to usecases/base-ct-guest/test/__snapshots__/blea-base-ct-guest.test.ts.snap index 35217ba6f..69094b42d 100644 --- a/test/__snapshots__/blea-base-ct-guest.test.ts.snap +++ b/usecases/base-ct-guest/test/__snapshots__/blea-base-ct-guest.test.ts.snap @@ -5,7 +5,7 @@ Object { "Resources": Object { "BLEARuleDefaultSecurityGroupClosed456A269D": Object { "Properties": Object { - "ConfigRuleName": "gc-default-security-group-closed", + "ConfigRuleName": "bb-default-security-group-closed", "Description": "Checks that the default security group of any Amazon Virtual Private Cloud (VPC) does not allow inbound or outbound traffic. The rule is non-compliant if the default security group has one or more inbound or outbound traffic.", "Scope": Object { "ComplianceResourceTypes": Array [ @@ -629,6 +629,9 @@ Object { "Description": "CloudWatch Event Rule to send notification on Config Rule compliance changes.", "EventPattern": Object { "detail": Object { + "configRuleName": Array [ + "bb-default-security-group-closed", + ], "newEvaluationResult": Object { "complianceType": Array [ "NON_COMPLIANT", @@ -817,6 +820,9 @@ Object { "FAILED", ], }, + "RecordState": Array [ + "ACTIVE", + ], "Severity": Object { "Label": Array [ "CRITICAL", @@ -1060,7 +1066,7 @@ Object { "Arn", ], }, - "SlackChannelId": "C01XXXXXXXX", + "SlackChannelId": "C00XXXXXXXX", "SlackWorkspaceId": "T8XXXXXXX", "SnsTopicArns": Array [ Object { diff --git a/test/blea-base-ct-guest.test.ts b/usecases/base-ct-guest/test/blea-base-ct-guest.test.ts similarity index 100% rename from test/blea-base-ct-guest.test.ts rename to usecases/base-ct-guest/test/blea-base-ct-guest.test.ts diff --git a/usecases/base-ct-guest/tsconfig.json b/usecases/base-ct-guest/tsconfig.json new file mode 100644 index 000000000..6b477d407 --- /dev/null +++ b/usecases/base-ct-guest/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "./" + }, + "include": ["bin/**/*.ts", "lib/**/*.ts", "test/**/*.ts"] +} diff --git a/usecases/base-standalone/.gitignore b/usecases/base-standalone/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/bin/blea-base-sa.ts b/usecases/base-standalone/bin/blea-base-sa.ts similarity index 88% rename from bin/blea-base-sa.ts rename to usecases/base-standalone/bin/blea-base-sa.ts index b5c1d4d6d..747dfb44c 100644 --- a/bin/blea-base-sa.ts +++ b/usecases/base-standalone/bin/blea-base-sa.ts @@ -1,10 +1,10 @@ #!/usr/bin/env node import * as cdk from '@aws-cdk/core'; -import { BLEAConfigCtGuardrailStack } from '../lib/standalone-base/blea-config-ct-guardrail-stack'; -import { BLEAGuarddutyStack } from '../lib/standalone-base/blea-guardduty-stack'; -import { BLEATrailStack } from '../lib/standalone-base/blea-trail-stack'; -import { BLEASecurityHubStack } from '../lib/standalone-base/blea-security-hub-stack'; -import { BLEAConfigStack } from '../lib/standalone-base/blea-config-stack'; +import { BLEAConfigCtGuardrailStack } from '../lib/blea-config-ct-guardrail-stack'; +import { BLEAGuarddutyStack } from '../lib/blea-guardduty-stack'; +import { BLEATrailStack } from '../lib/blea-trail-stack'; +import { BLEASecurityHubStack } from '../lib/blea-security-hub-stack'; +import { BLEAConfigStack } from '../lib/blea-config-stack'; import { BLEAIamStack } from '../lib/blea-iam-stack'; import { BLEAConfigRulesStack } from '../lib/blea-config-rules-stack'; import { BLEASecurityAlarmStack } from '../lib/blea-security-alarm-stack'; diff --git a/usecases/base-standalone/cdk.json b/usecases/base-standalone/cdk.json new file mode 100644 index 000000000..8eaf01be1 --- /dev/null +++ b/usecases/base-standalone/cdk.json @@ -0,0 +1,40 @@ +{ + "app": "npx ts-node bin/blea-base-sa.ts", + "context": { + "dev": { + "description": "Context samples for Dev - Anonymous account & region", + "envName": "Development", + "securityNotifyEmail": "notify-security@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C00XXXXXXXX" + } + }, + "stage": { + "description": "Context samples for Staging - Specific account & region ", + "env": { + "account": "111111111111", + "region": "ap-northeast-1" + }, + "envName": "Staging", + "securityNotifyEmail": "notify-security@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C01XXXXXXXX" + } + }, + "prod": { + "description": "Context samples for Production - Specific account & region ", + "env": { + "account": "222222222222", + "region": "ap-northeast-1" + }, + "envName": "Production", + "securityNotifyEmail": "notify-security@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdSec": "C02XXXXXXXX" + } + } + } +} diff --git a/cfn/AWS-Control-Tower-Detective-Guardrails.yaml b/usecases/base-standalone/cfn/AWS-Control-Tower-Detective-Guardrails.yaml similarity index 100% rename from cfn/AWS-Control-Tower-Detective-Guardrails.yaml rename to usecases/base-standalone/cfn/AWS-Control-Tower-Detective-Guardrails.yaml diff --git a/usecases/base-standalone/jest.config.js b/usecases/base-standalone/jest.config.js new file mode 100644 index 000000000..98bd8c9e5 --- /dev/null +++ b/usecases/base-standalone/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + roots: ['/test'], + testMatch: ['**/*.test.ts'], + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, +}; diff --git a/usecases/base-standalone/lib/blea-chatbot-stack.ts b/usecases/base-standalone/lib/blea-chatbot-stack.ts new file mode 100644 index 000000000..c9de87b5b --- /dev/null +++ b/usecases/base-standalone/lib/blea-chatbot-stack.ts @@ -0,0 +1,35 @@ +import * as cdk from '@aws-cdk/core'; +import * as cb from '@aws-cdk/aws-chatbot'; +import * as iam from '@aws-cdk/aws-iam'; + +export interface BLEAChatbotStackProps extends cdk.StackProps { + topicArn: string; + channelId: string; + workspaceId: string; +} + +// NOTICE: AWS Chatbot can send events from supported services only. +// See: https://docs.aws.amazon.com/ja_jp/chatbot/latest/adminguide/related-services.html +export class BLEAChatbotStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props: BLEAChatbotStackProps) { + super(scope, id, props); + + // AWS Chatbot configuration for sending message + const chatbotRole = new iam.Role(this, 'ChatbotRole', { + assumedBy: new iam.ServicePrincipal('chatbot.amazonaws.com'), + managedPolicies: [ + iam.ManagedPolicy.fromAwsManagedPolicyName('ReadOnlyAccess'), + iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchReadOnlyAccess'), + ], + }); + + // !!! Create SlackChannel and add aws chatbot app to the room + new cb.CfnSlackChannelConfiguration(this, 'ChatbotChannel', { + configurationName: `${id}-${props.workspaceId}`, + slackChannelId: props.channelId, + iamRoleArn: chatbotRole.roleArn, + slackWorkspaceId: props.workspaceId, + snsTopicArns: [props.topicArn], + }); + } +} diff --git a/lib/standalone-base/blea-config-ct-guardrail-stack.ts b/usecases/base-standalone/lib/blea-config-ct-guardrail-stack.ts similarity index 100% rename from lib/standalone-base/blea-config-ct-guardrail-stack.ts rename to usecases/base-standalone/lib/blea-config-ct-guardrail-stack.ts diff --git a/usecases/base-standalone/lib/blea-config-rules-stack.ts b/usecases/base-standalone/lib/blea-config-rules-stack.ts new file mode 100644 index 000000000..18ea213c5 --- /dev/null +++ b/usecases/base-standalone/lib/blea-config-rules-stack.ts @@ -0,0 +1,72 @@ +import * as cdk from '@aws-cdk/core'; +import * as config from '@aws-cdk/aws-config'; +import * as iam from '@aws-cdk/aws-iam'; + +export class BLEAConfigRulesStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { + super(scope, id, props); + + // ConfigRule for Default Security Group is closed (Same as SecurityHub - need this for auto remediation) + // + // See: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-cis-controls.html#securityhub-cis-controls-4.3 + // See: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html + const ruleDefaultSgClosed = new config.ManagedRule(this, 'BLEARuleDefaultSecurityGroupClosed', { + identifier: config.ManagedRuleIdentifiers.VPC_DEFAULT_SECURITY_GROUP_CLOSED, + ruleScope: config.RuleScope.fromResources([config.ResourceType.EC2_SECURITY_GROUP]), + configRuleName: 'bb-default-security-group-closed', + description: + 'Checks that the default security group of any Amazon Virtual Private Cloud (VPC) does not allow inbound or outbound traffic. The rule is non-compliant if the default security group has one or more inbound or outbound traffic.', + }); + + // Role for auto remediation + const rmDefaultSgRole = new iam.Role(this, 'RemoveSecGroupRemediationRole', { + assumedBy: new iam.ServicePrincipal('ssm.amazonaws.com'), + path: '/', + managedPolicies: [{ managedPolicyArn: 'arn:aws:iam::aws:policy/service-role/AmazonSSMAutomationRole' }], + }); + rmDefaultSgRole.addToPolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['ec2:RevokeSecurityGroupIngress', 'ec2:RevokeSecurityGroupEgress', 'ec2:DescribeSecurityGroups'], + resources: ['*'], + }), + ); + rmDefaultSgRole.addToPolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['iam:PassRole'], + resources: [rmDefaultSgRole.roleArn], + }), + ); + rmDefaultSgRole.addToPolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['ssm:StartAutomationExecution'], + resources: ['arn:aws:ssm:::automation-definition/AWSConfigRemediation-RemoveVPCDefaultSecurityGroupRules'], + }), + ); + + // Remediation for Remove VPC Default SecurityGroup Rules by SSM Automation + new config.CfnRemediationConfiguration(this, 'RmDefaultSg', { + configRuleName: ruleDefaultSgClosed.configRuleName, + targetType: 'SSM_DOCUMENT', + targetId: 'AWSConfigRemediation-RemoveVPCDefaultSecurityGroupRules', + targetVersion: '1', + parameters: { + AutomationAssumeRole: { + StaticValue: { + Values: [rmDefaultSgRole.roleArn], + }, + }, + GroupId: { + ResourceValue: { + Value: 'RESOURCE_ID', + }, + }, + }, + automatic: true, + maximumAutomaticAttempts: 5, + retryAttemptSeconds: 60, + }); + } +} diff --git a/lib/standalone-base/blea-config-stack.ts b/usecases/base-standalone/lib/blea-config-stack.ts similarity index 100% rename from lib/standalone-base/blea-config-stack.ts rename to usecases/base-standalone/lib/blea-config-stack.ts diff --git a/lib/standalone-base/blea-guardduty-stack.ts b/usecases/base-standalone/lib/blea-guardduty-stack.ts similarity index 100% rename from lib/standalone-base/blea-guardduty-stack.ts rename to usecases/base-standalone/lib/blea-guardduty-stack.ts diff --git a/usecases/base-standalone/lib/blea-iam-stack.ts b/usecases/base-standalone/lib/blea-iam-stack.ts new file mode 100644 index 000000000..201d60611 --- /dev/null +++ b/usecases/base-standalone/lib/blea-iam-stack.ts @@ -0,0 +1,259 @@ +import * as cdk from '@aws-cdk/core'; +import * as iam from '@aws-cdk/aws-iam'; + +export class BLEAIamStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { + super(scope, id, props); + + // SysAdmin + const sysAdminPolicyJSON = { + Version: '2012-10-17', + Statement: [ + { + Condition: { + Bool: { + 'aws:MultiFactorAuthPresent': 'true', + }, + }, + Resource: '*', + Effect: 'Allow', + NotAction: 'iam:*', + }, + { + Action: 'aws-portal:*Billing', + Resource: '*', + Effect: 'Deny', + }, + { + Action: ['cloudtrail:DeleteTrail', 'cloudtrail:StopLogging', 'cloudtrail:UpdateTrail'], + Resource: '*', + Effect: 'Deny', + }, + { + Action: [ + 'kms:Create*', + 'kms:Revoke*', + 'kms:Enable*', + 'kms:Get*', + 'kms:Disable*', + 'kms:Delete*', + 'kms:Put*', + 'kms:Update*', + ], + Resource: '*', + Effect: 'Deny', + }, + ], + }; + + const SysAdminManagedPolicy = new iam.ManagedPolicy(this, 'SysAdminPolicy', { + document: iam.PolicyDocument.fromJson(sysAdminPolicyJSON), + }); + + new iam.Role(this, 'SysAdminRole', { + assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'), + }).addManagedPolicy(SysAdminManagedPolicy); + + new iam.Group(this, 'SysAdminGroup').addManagedPolicy(SysAdminManagedPolicy); + + // IAM Admin + const iamAdminPolicyJSON = { + Version: '2012-10-17', + Statement: [ + { + Condition: { + Bool: { + 'aws:MultiFactorAuthPresent': 'true', + }, + }, + Action: 'iam:*', + Resource: '*', + Effect: 'Allow', + }, + { + Action: 'aws-portal:*Billing', + Resource: '*', + Effect: 'Deny', + }, + ], + }; + const iamAdminManagedPolicy = new iam.ManagedPolicy(this, 'IamAdminPolicy', { + document: iam.PolicyDocument.fromJson(iamAdminPolicyJSON), + }); + + new iam.Role(this, 'IamAdminRole', { + assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'), + }).addManagedPolicy(iamAdminManagedPolicy); + + new iam.Group(this, 'IamAdminGroup').addManagedPolicy(iamAdminManagedPolicy); + + // InstanceOps + const instanceOpsPolicyJSON = { + Version: '2012-10-17', + Statement: [ + { + Action: 'ec2:*', + Resource: '*', + Effect: 'Allow', + }, + { + Action: 'elasticloadbalancing:*', + Resource: '*', + Effect: 'Allow', + }, + { + Action: 'cloudwatch:*', + Resource: '*', + Effect: 'Allow', + }, + { + Action: 'autoscaling:*', + Resource: '*', + Effect: 'Allow', + }, + { + Action: [ + 'ec2:CreateVpc*', + 'ec2:DeleteVpc*', + 'ec2:ModifyVpc*', + 'ec2:CreateSubnet*', + 'ec2:DeleteSubnet*', + 'ec2:ModifySubnet*', + 'ec2:Create*Route*', + 'ec2:DeleteRoute*', + 'ec2:AssociateRoute*', + 'ec2:ReplaceRoute*', + 'ec2:CreateVpn*', + 'ec2:DeleteVpn*', + 'ec2:AttachVpn*', + 'ec2:DetachVpn*', + 'ec2:CreateNetworkAcl*', + 'ec2:DeleteNetworkAcl*', + 'ec2:ReplaceNetworkAcl*', + 'ec2:*Gateway*', + 'ec2:*PeeringConnection*', + ], + Resource: '*', + Effect: 'Deny', + }, + { + Action: 'aws-portal:*Billing', + Resource: '*', + Effect: 'Deny', + }, + { + Action: [ + 'kms:Create*', + 'kms:Revoke*', + 'kms:Enable*', + 'kms:Get*', + 'kms:Disable*', + 'kms:Delete*', + 'kms:Put*', + 'kms:Update*', + ], + Resource: '*', + Effect: 'Deny', + }, + ], + }; + + const instanceOpsManagedPolicy = new iam.ManagedPolicy(this, 'InstanceOpsPolicy', { + document: iam.PolicyDocument.fromJson(instanceOpsPolicyJSON), + }); + + new iam.Role(this, 'InstanceOpsRole', { + assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'), + }).addManagedPolicy(instanceOpsManagedPolicy); + + new iam.Group(this, 'InstanceOpsGroup').addManagedPolicy(instanceOpsManagedPolicy); + + // readOnlyAdmin + const readOnlyAdminPolicyJSON = { + Version: '2012-10-17', + Statement: [ + { + Action: [ + 'appstream:Get*', + 'autoscaling:Describe*', + 'cloudformation:DescribeStacks', + 'cloudformation:DescribeStackEvents', + 'cloudformation:DescribeStackResource', + 'cloudformation:DescribeStackResources', + 'cloudformation:GetTemplate', + 'cloudformation:List*', + 'cloudfront:Get*', + 'cloudfront:List*', + 'cloudtrail:DescribeTrails', + 'cloudtrail:GetTrailStatus', + 'cloudwatch:Describe*', + 'cloudwatch:Get*', + 'cloudwatch:List*', + 'directconnect:Describe*', + 'dynamodb:GetItem', + 'dynamodb:BatchGetItem', + 'dynamodb:Query', + 'dynamodb:Scan', + 'dynamodb:DescribeTable', + 'dynamodb:ListTables', + 'ec2:Describe*', + 'elasticache:Describe*', + 'elasticbeanstalk:Check*', + 'elasticbeanstalk:Describe*', + 'elasticbeanstalk:List*', + 'elasticbeanstalk:RequestEnvironmentInfo', + 'elasticbeanstalk:RetrieveEnvironmentInfo', + 'elasticloadbalancing:Describe*', + 'elastictranscoder:Read*', + 'elastictranscoder:List*', + 'iam:List*', + 'iam:Get*', + 'kinesis:Describe*', + 'kinesis:Get*', + 'kinesis:List*', + 'opsworks:Describe*', + 'opsworks:Get*', + 'route53:Get*', + 'route53:List*', + 'redshift:Describe*', + 'redshift:ViewQueriesInConsole', + 'rds:Describe*', + 'rds:ListTagsForResource', + 's3:Get*', + 's3:List*', + 'sdb:GetAttributes', + 'sdb:List*', + 'sdb:Select*', + 'ses:Get*', + 'ses:List*', + 'sns:Get*', + 'sns:List*', + 'sqs:GetQueueAttributes', + 'sqs:ListQueues', + 'sqs:ReceiveMessage', + 'storagegateway:List*', + 'storagegateway:Describe*', + 'trustedadvisor:Describe*', + ], + Resource: '*', + Effect: 'Allow', + }, + { + Action: 'aws-portal:*Billing', + Resource: '*', + Effect: 'Deny', + }, + ], + }; + + const readOnlyAdminManagedPolicy = new iam.ManagedPolicy(this, 'ReadOnlyAdminPolicy', { + document: iam.PolicyDocument.fromJson(readOnlyAdminPolicyJSON), + }); + + new iam.Role(this, 'ReadOnlyAdminRole', { + assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'), + }).addManagedPolicy(readOnlyAdminManagedPolicy); + + new iam.Group(this, 'ReadOnlyAdminGroup').addManagedPolicy(readOnlyAdminManagedPolicy); + } +} diff --git a/lib/blea-security-alarm-stack.ts b/usecases/base-standalone/lib/blea-security-alarm-stack.ts similarity index 92% rename from lib/blea-security-alarm-stack.ts rename to usecases/base-standalone/lib/blea-security-alarm-stack.ts index a2613e472..6cee4cabb 100644 --- a/lib/blea-security-alarm-stack.ts +++ b/usecases/base-standalone/lib/blea-security-alarm-stack.ts @@ -41,6 +41,8 @@ export class BLEASecurityAlarmStack extends cdk.Stack { // ConfigRule - Compliance Change // See: https://docs.aws.amazon.com/config/latest/developerguide/monitor-config-with-cloudwatchevents.html // See: https://aws.amazon.com/premiumsupport/knowledge-center/config-resource-non-compliant/?nc1=h_ls + // If you want to add rules to notify, add rule name text string to "configRuleName" array. + // Sample Rule 'bb-default-security-group-closed' is defined at lib/blea-config-rules-stack.ts new cwe.Rule(this, 'BLEARuleConfigRules', { description: 'CloudWatch Event Rule to send notification on Config Rule compliance changes.', enabled: true, @@ -48,6 +50,7 @@ export class BLEASecurityAlarmStack extends cdk.Stack { source: ['aws.config'], detailType: ['Config Rules Compliance Change'], detail: { + configRuleName: ['bb-default-security-group-closed'], newEvaluationResult: { complianceType: ['NON_COMPLIANT'], }, @@ -274,6 +277,7 @@ export class BLEASecurityAlarmStack extends cdk.Stack { Workflow: { Status: ['NEW', 'NOTIFIED'], }, + RecordState: ['ACTIVE'], }, }, }, @@ -291,61 +295,9 @@ export class BLEASecurityAlarmStack extends cdk.Stack { detailType: ['GuardDuty Finding'], detail: { severity: [ - 4, - 4.0, - 4.1, - 4.2, - 4.3, - 4.4, - 4.5, - 4.6, - 4.7, - 4.8, - 4.9, - 5, - 5.0, - 5.1, - 5.2, - 5.3, - 5.4, - 5.5, - 5.6, - 5.7, - 5.8, - 5.9, - 6, - 6.0, - 6.1, - 6.2, - 6.3, - 6.4, - 6.5, - 6.6, - 6.7, - 6.8, - 6.9, - 7, - 7.0, - 7.1, - 7.2, - 7.3, - 7.4, - 7.5, - 7.6, - 7.7, - 7.8, - 7.9, - 8, - 8.0, - 8.1, - 8.2, - 8.3, - 8.4, - 8.5, - 8.6, - 8.7, - 8.8, - 8.9, + 4, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, + 6.0, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 8, + 8.0, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9, ], }, }, diff --git a/lib/standalone-base/blea-security-hub-stack.ts b/usecases/base-standalone/lib/blea-security-hub-stack.ts similarity index 100% rename from lib/standalone-base/blea-security-hub-stack.ts rename to usecases/base-standalone/lib/blea-security-hub-stack.ts diff --git a/lib/standalone-base/blea-trail-stack.ts b/usecases/base-standalone/lib/blea-trail-stack.ts similarity index 94% rename from lib/standalone-base/blea-trail-stack.ts rename to usecases/base-standalone/lib/blea-trail-stack.ts index 49abe65af..2b004f68d 100644 --- a/lib/standalone-base/blea-trail-stack.ts +++ b/usecases/base-standalone/lib/blea-trail-stack.ts @@ -113,15 +113,6 @@ export class BLEATrailStack extends cdk.Stack { encryptionKey: cloudTrailKey, sendToCloudWatchLogs: true, }); - - // ----------- - - // EC2 Role for Manage CloudTrail Logs - const cloudTrailRole = new iam.Role(this, 'CloudTrailRole', { - assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'), - }); - cloudTrailBucket.grantPut(cloudTrailRole); - cloudTrailBucket.grantRead(cloudTrailRole); } // Add base BucketPolicy for CloudTrail diff --git a/usecases/base-standalone/package.json b/usecases/base-standalone/package.json new file mode 100644 index 000000000..7d5eafd15 --- /dev/null +++ b/usecases/base-standalone/package.json @@ -0,0 +1,53 @@ +{ + "private": true, + "name": "blea-base-standalone", + "version": "1.0.0", + "description": "Baseline for standalone accounts", + "license": "MIT-0", + "bin": { + "blea-base-sa": "bin/blea-base-sa.js" + }, + "scripts": { + "synth:dev": "npx cdk synth -c environment=dev", + "depcheck": "npx depcheck --ignore-dirs cdk.out", + "build": "tsc --build", + "clean": "tsc --build --clean && rm -rf cdk.out", + "watch": "tsc -w", + "test": "jest", + "lint": "eslint --fix .", + "format": "prettier --write ." + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + }, + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudtrail": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-config": "^1.129.0", + "@aws-cdk/aws-events": "^1.129.0", + "@aws-cdk/aws-events-targets": "^1.129.0", + "@aws-cdk/aws-guardduty": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-kms": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-s3": "^1.129.0", + "@aws-cdk/aws-securityhub": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/cloudformation-include": "^1.129.0", + "@aws-cdk/core": "^1.129.0" + } +} diff --git a/test/__snapshots__/blea-base-sa.test.ts.snap b/usecases/base-standalone/test/__snapshots__/blea-base-sa.test.ts.snap similarity index 95% rename from test/__snapshots__/blea-base-sa.test.ts.snap rename to usecases/base-standalone/test/__snapshots__/blea-base-sa.test.ts.snap index c3b90bb4c..3a8fc359b 100644 --- a/test/__snapshots__/blea-base-sa.test.ts.snap +++ b/usecases/base-standalone/test/__snapshots__/blea-base-sa.test.ts.snap @@ -97,7 +97,9 @@ Object { }, }, "Effect": "Deny", - "Principal": "*", + "Principal": Object { + "AWS": "*", + }, "Resource": Object { "Fn::Join": Array [ "", @@ -117,7 +119,9 @@ Object { Object { "Action": "s3:Delete*", "Effect": "Deny", - "Principal": "*", + "Principal": Object { + "AWS": "*", + }, "Resource": Object { "Fn::Join": Array [ "", @@ -214,7 +218,9 @@ Object { }, }, "Effect": "Deny", - "Principal": "*", + "Principal": Object { + "AWS": "*", + }, "Resource": Object { "Fn::Join": Array [ "", @@ -234,7 +240,9 @@ Object { Object { "Action": "s3:Delete*", "Effect": "Deny", - "Principal": "*", + "Principal": Object { + "AWS": "*", + }, "Resource": Object { "Fn::Join": Array [ "", @@ -421,7 +429,9 @@ Object { }, }, "Effect": "Allow", - "Principal": "*", + "Principal": Object { + "AWS": "*", + }, "Resource": "*", }, Object { @@ -535,100 +545,6 @@ Object { }, "Type": "AWS::IAM::Policy", }, - "CloudTrailRole9EE963D2": Object { - "Properties": Object { - "AssumeRolePolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": Object { - "Service": Object { - "Fn::Join": Array [ - "", - Array [ - "ec2.", - Object { - "Ref": "AWS::URLSuffix", - }, - ], - ], - }, - }, - }, - ], - "Version": "2012-10-17", - }, - }, - "Type": "AWS::IAM::Role", - }, - "CloudTrailRoleDefaultPolicy5FF2FCDE": Object { - "Properties": Object { - "PolicyDocument": Object { - "Statement": Array [ - Object { - "Action": Array [ - "s3:PutObject*", - "s3:Abort*", - ], - "Effect": "Allow", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "CloudTrailBucket98B0BFE1", - "Arn", - ], - }, - "/*", - ], - ], - }, - }, - Object { - "Action": Array [ - "s3:GetObject*", - "s3:GetBucket*", - "s3:List*", - ], - "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::GetAtt": Array [ - "CloudTrailBucket98B0BFE1", - "Arn", - ], - }, - Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "CloudTrailBucket98B0BFE1", - "Arn", - ], - }, - "/*", - ], - ], - }, - ], - }, - ], - "Version": "2012-10-17", - }, - "PolicyName": "CloudTrailRoleDefaultPolicy5FF2FCDE", - "Roles": Array [ - Object { - "Ref": "CloudTrailRole9EE963D2", - }, - ], - }, - "Type": "AWS::IAM::Policy", - }, }, } `; @@ -1431,7 +1347,7 @@ Object { "Resources": Object { "BLEARuleDefaultSecurityGroupClosed456A269D": Object { "Properties": Object { - "ConfigRuleName": "gc-default-security-group-closed", + "ConfigRuleName": "bb-default-security-group-closed", "Description": "Checks that the default security group of any Amazon Virtual Private Cloud (VPC) does not allow inbound or outbound traffic. The rule is non-compliant if the default security group has one or more inbound or outbound traffic.", "Scope": Object { "ComplianceResourceTypes": Array [ @@ -1555,7 +1471,7 @@ Object { "Arn", ], }, - "SlackChannelId": "C01XXXXXXXX", + "SlackChannelId": "C00XXXXXXXX", "SlackWorkspaceId": "T8XXXXXXX", "SnsTopicArns": Array [ Object { @@ -1683,6 +1599,9 @@ Object { "Description": "CloudWatch Event Rule to send notification on Config Rule compliance changes.", "EventPattern": Object { "detail": Object { + "configRuleName": Array [ + "bb-default-security-group-closed", + ], "newEvaluationResult": Object { "complianceType": Array [ "NON_COMPLIANT", @@ -1871,6 +1790,9 @@ Object { "FAILED", ], }, + "RecordState": Array [ + "ACTIVE", + ], "Severity": Object { "Label": Array [ "CRITICAL", diff --git a/test/blea-base-sa.test.ts b/usecases/base-standalone/test/blea-base-sa.test.ts similarity index 86% rename from test/blea-base-sa.test.ts rename to usecases/base-standalone/test/blea-base-sa.test.ts index 6e2c8d6a3..f6b01acd1 100644 --- a/test/blea-base-sa.test.ts +++ b/usecases/base-standalone/test/blea-base-sa.test.ts @@ -3,11 +3,11 @@ import { SynthUtils } from '@aws-cdk/assert'; import { BLEAIamStack } from '../lib/blea-iam-stack'; import { BLEAConfigRulesStack } from '../lib/blea-config-rules-stack'; -import { BLEAConfigCtGuardrailStack } from '../lib/standalone-base/blea-config-ct-guardrail-stack'; -import { BLEAGuarddutyStack } from '../lib/standalone-base/blea-guardduty-stack'; -import { BLEATrailStack } from '../lib/standalone-base/blea-trail-stack'; -import { BLEASecurityHubStack } from '../lib/standalone-base/blea-security-hub-stack'; -import { BLEAConfigStack } from '../lib/standalone-base/blea-config-stack'; +import { BLEAConfigCtGuardrailStack } from '../lib/blea-config-ct-guardrail-stack'; +import { BLEAGuarddutyStack } from '../lib/blea-guardduty-stack'; +import { BLEATrailStack } from '../lib/blea-trail-stack'; +import { BLEASecurityHubStack } from '../lib/blea-security-hub-stack'; +import { BLEAConfigStack } from '../lib/blea-config-stack'; import { BLEASecurityAlarmStack } from '../lib/blea-security-alarm-stack'; import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; diff --git a/usecases/base-standalone/tsconfig.json b/usecases/base-standalone/tsconfig.json new file mode 100644 index 000000000..6b477d407 --- /dev/null +++ b/usecases/base-standalone/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "./" + }, + "include": ["bin/**/*.ts", "lib/**/*.ts", "test/**/*.ts"] +} diff --git a/usecases/guest-apiapp-sample/.gitignore b/usecases/guest-apiapp-sample/.gitignore new file mode 100644 index 000000000..512a4156e --- /dev/null +++ b/usecases/guest-apiapp-sample/.gitignore @@ -0,0 +1,2 @@ +!/lambda/nodejs/*.js + diff --git a/usecases/guest-apiapp-sample/bin/blea-guest-apiapp-nodejs-sample.ts b/usecases/guest-apiapp-sample/bin/blea-guest-apiapp-nodejs-sample.ts new file mode 100644 index 000000000..7c292c078 --- /dev/null +++ b/usecases/guest-apiapp-sample/bin/blea-guest-apiapp-nodejs-sample.ts @@ -0,0 +1,95 @@ +#!/usr/bin/env node +import * as cdk from '@aws-cdk/core'; + +import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; +import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; +import { BLEADbDynamoDbStack } from '../lib/blea-db-dynamodb-stack'; +import { BLEALambdaNodejsStack } from '../lib/blea-lambda-nodejs-stack'; +import { BLEARestApiStack } from '../lib/blea-restapi-stack'; +import { BLEAKeyApiappStack } from '../lib/blea-key-apiapp-stack'; + +const pjPrefix = 'BLEA'; + +const app = new cdk.App(); + +// ----------------------- Load context variables ------------------------------ +// This context need to be specified in args +const argContext = 'environment'; +const envKey = app.node.tryGetContext(argContext); +if (envKey == undefined) + throw new Error(`Please specify environment with context option. ex) cdk deploy -c ${argContext}=dev`); +const envVals = app.node.tryGetContext(envKey); +if (envVals == undefined) throw new Error('Invalid environment.'); + +// ----------------------- Environment variables for stack ------------------------------ +// Default enviroment +const procEnvDefault = { + account: process.env.CDK_DEFAULT_ACCOUNT, + region: process.env.CDK_DEFAULT_REGION, +}; + +// Define account id and region from context. +// If "env" isn't defined on the environment variable in context, use account and region specified by "--profile". +function getProcEnv() { + if (envVals['env'] && envVals['env']['account'] && envVals['env']['region']) { + return { account: envVals['env']['account'], region: envVals['env']['region'] }; + } else { + return procEnvDefault; + } +} + +// ----------------------- Guest System Stacks ----------------------------- +// Slack Notifier +const workspaceId = envVals['slackNotifier']['workspaceId']; +const channelIdMon = envVals['slackNotifier']['channelIdMon']; + +// Topic for monitoring guest system +const monitorAlarm = new BLEAMonitorAlarmStack(app, `${pjPrefix}-MonitorAlarm`, { + notifyEmail: envVals['monitoringNotifyEmail'], + env: getProcEnv(), +}); + +// Chatbot +new BLEAChatbotStack(app, `${pjPrefix}-ChatbotMonitor`, { + topicArn: monitorAlarm.alarmTopic.topicArn, + workspaceId: workspaceId, + channelId: channelIdMon, + env: getProcEnv(), +}); + +// KMS CMK for Api App +const appKey = new BLEAKeyApiappStack(app, `${pjPrefix}-AppKeyNodejs`, { + env: getProcEnv(), +}); + +// DynamoDB +const dynamoDb = new BLEADbDynamoDbStack(app, `${pjPrefix}-DBDynamoDbNodejs`, { + alarmTopic: monitorAlarm.alarmTopic, + appKey: appKey.kmsKey, + env: getProcEnv(), +}); +dynamoDb.addDependency(appKey); + +// Lambda +const lambda = new BLEALambdaNodejsStack(app, `${pjPrefix}-LambdaNodejs`, { + alarmTopic: monitorAlarm.alarmTopic, + table: dynamoDb.table, + appKey: appKey.kmsKey, + env: getProcEnv(), +}); +lambda.addDependency(dynamoDb); + +//REST Api +const restApi = new BLEARestApiStack(app, `${pjPrefix}-RestApiNodejs`, { + alarmTopic: monitorAlarm.alarmTopic, + getItemFunction: lambda.getItemFunction, + listItemsFunction: lambda.listItemsFunction, + putItemFunction: lambda.putItemFunction, + env: getProcEnv(), +}); +restApi.addDependency(lambda); +// --------------------------------- Tagging ------------------------------------- + +// Tagging "Environment" tag to all resources in this app +const envTagName = 'Environment'; +cdk.Tags.of(app).add(envTagName, envVals['envName']); diff --git a/usecases/guest-apiapp-sample/bin/blea-guest-apiapp-python-sample.ts b/usecases/guest-apiapp-sample/bin/blea-guest-apiapp-python-sample.ts new file mode 100644 index 000000000..bba6469ee --- /dev/null +++ b/usecases/guest-apiapp-sample/bin/blea-guest-apiapp-python-sample.ts @@ -0,0 +1,95 @@ +#!/usr/bin/env node +import * as cdk from '@aws-cdk/core'; + +import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; +import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; +import { BLEADbDynamoDbStack } from '../lib/blea-db-dynamodb-stack'; +import { BLEALambdaPythonStack } from '../lib/blea-lambda-python-stack'; +import { BLEARestApiStack } from '../lib/blea-restapi-stack'; +import { BLEAKeyApiappStack } from '../lib/blea-key-apiapp-stack'; + +const pjPrefix = 'BLEA'; + +const app = new cdk.App(); + +// ----------------------- Load context variables ------------------------------ +// This context need to be specified in args +const argContext = 'environment'; +const envKey = app.node.tryGetContext(argContext); +if (envKey == undefined) + throw new Error(`Please specify environment with context option. ex) cdk deploy -c ${argContext}=dev`); +const envVals = app.node.tryGetContext(envKey); +if (envVals == undefined) throw new Error('Invalid environment.'); + +// ----------------------- Environment variables for stack ------------------------------ +// Default enviroment +const procEnvDefault = { + account: process.env.CDK_DEFAULT_ACCOUNT, + region: process.env.CDK_DEFAULT_REGION, +}; + +// Define account id and region from context. +// If "env" isn't defined on the environment variable in context, use account and region specified by "--profile". +function getProcEnv() { + if (envVals['env'] && envVals['env']['account'] && envVals['env']['region']) { + return { account: envVals['env']['account'], region: envVals['env']['region'] }; + } else { + return procEnvDefault; + } +} + +// ----------------------- Guest System Stacks ----------------------------- +// Slack Notifier +const workspaceId = envVals['slackNotifier']['workspaceId']; +const channelIdMon = envVals['slackNotifier']['channelIdMon']; + +// Topic for monitoring guest system +const monitorAlarm = new BLEAMonitorAlarmStack(app, `${pjPrefix}-MonitorAlarm`, { + notifyEmail: envVals['monitoringNotifyEmail'], + env: getProcEnv(), +}); + +// Chatbot +new BLEAChatbotStack(app, `${pjPrefix}-ChatbotMonitor`, { + topicArn: monitorAlarm.alarmTopic.topicArn, + workspaceId: workspaceId, + channelId: channelIdMon, + env: getProcEnv(), +}); + +// KMS CMK for Api App +const appKey = new BLEAKeyApiappStack(app, `${pjPrefix}-AppKeyPython`, { + env: getProcEnv(), +}); + +// DynamoDB +const dynamoDb = new BLEADbDynamoDbStack(app, `${pjPrefix}-DBDynamoDbPython`, { + alarmTopic: monitorAlarm.alarmTopic, + appKey: appKey.kmsKey, + env: getProcEnv(), +}); +dynamoDb.addDependency(appKey); + +// Lambda +const lambda = new BLEALambdaPythonStack(app, `${pjPrefix}-LambdaPython`, { + alarmTopic: monitorAlarm.alarmTopic, + table: dynamoDb.table, + appKey: appKey.kmsKey, + env: getProcEnv(), +}); +lambda.addDependency(dynamoDb); + +//REST Api +const restApi = new BLEARestApiStack(app, `${pjPrefix}-RestApiPython`, { + alarmTopic: monitorAlarm.alarmTopic, + getItemFunction: lambda.getItemFunction, + listItemsFunction: lambda.listItemsFunction, + putItemFunction: lambda.putItemFunction, + env: getProcEnv(), +}); +restApi.addDependency(lambda); +// --------------------------------- Tagging ------------------------------------- + +// Tagging "Environment" tag to all resources in this app +const envTagName = 'Environment'; +cdk.Tags.of(app).add(envTagName, envVals['envName']); diff --git a/usecases/guest-apiapp-sample/cdk.json b/usecases/guest-apiapp-sample/cdk.json new file mode 100644 index 000000000..01abc7359 --- /dev/null +++ b/usecases/guest-apiapp-sample/cdk.json @@ -0,0 +1,40 @@ +{ + "app": "npx ts-node bin/blea-guest-apiapp-nodejs-sample.ts", + "context": { + "dev": { + "description": "Context samples for Dev - Anonymous account & region", + "envName": "Development", + "monitoringNotifyEmail": "notify-monitoring@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdMon": "C01YYYYYYYY" + } + }, + "stage": { + "description": "Context samples for Staging - Specific account & region ", + "env": { + "account": "111111111111", + "region": "ap-northeast-1" + }, + "envName": "Staging", + "monitoringNotifyEmail": "notify-monitoring@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdMon": "C01YYYYYYYY" + } + }, + "prod": { + "description": "Context samples for Production - Specific account & region ", + "env": { + "account": "222222222222", + "region": "ap-northeast-1" + }, + "envName": "Production", + "monitoringNotifyEmail": "notify-monitoring@example.com", + "slackNotifier": { + "workspaceId": "T8XXXXXXX", + "channelIdMon": "C01YYYYYYYY" + } + } + } +} diff --git a/usecases/guest-apiapp-sample/jest.config.js b/usecases/guest-apiapp-sample/jest.config.js new file mode 100644 index 000000000..98bd8c9e5 --- /dev/null +++ b/usecases/guest-apiapp-sample/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + roots: ['/test'], + testMatch: ['**/*.test.ts'], + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, +}; diff --git a/usecases/guest-apiapp-sample/lambda/nodejs/getItem.js b/usecases/guest-apiapp-sample/lambda/nodejs/getItem.js new file mode 100644 index 000000000..ec6d0b816 --- /dev/null +++ b/usecases/guest-apiapp-sample/lambda/nodejs/getItem.js @@ -0,0 +1,34 @@ +'use strict'; +const AWSXRay = require('aws-xray-sdk'); +const AWS = AWSXRay.captureAWS(require('aws-sdk')); +const ddb = new AWS.DynamoDB(); + +const tableName = process.env.DDB_TABLE; +module.exports.getItem = (event, context, callback) => { + var params = { + KeyConditionExpression: 'title = :title', + ExpressionAttributeValues: { + ':title': { S: event.pathParameters.title.toString() }, + }, + TableName: tableName, + }; + console.log(params); + + ddb.query(params, (error, result) => { + if (error) { + console.error(error); + const response = { + statusCode: error.statusCode, + body: error.message, + }; + callback(null, response); + } else { + console.log('Success', result.Items); + const response = { + statusCode: 200, + body: JSON.stringify(result.Items), + }; + callback(null, response); + } + }); +}; diff --git a/usecases/guest-apiapp-sample/lambda/nodejs/listItems.js b/usecases/guest-apiapp-sample/lambda/nodejs/listItems.js new file mode 100644 index 000000000..02ea61409 --- /dev/null +++ b/usecases/guest-apiapp-sample/lambda/nodejs/listItems.js @@ -0,0 +1,28 @@ +'use strict'; + +const AWSXRay = require('aws-xray-sdk'); +const AWS = AWSXRay.captureAWS(require('aws-sdk')); +const ddb = new AWS.DynamoDB(); +const params = { + TableName: process.env.DDB_TABLE, +}; + +module.exports.listItems = (event, context, callback) => { + ddb.scan(params, (error, result) => { + if (error) { + console.error(error); + const response = { + statusCode: error.statusCode, + body: error.message, + }; + callback(null, response); + } else { + console.log('Success', result.Items); + const response = { + statusCode: 200, + body: JSON.stringify(result.Items), + }; + callback(null, response); + } + }); +}; diff --git a/usecases/guest-apiapp-sample/lambda/nodejs/putItem.js b/usecases/guest-apiapp-sample/lambda/nodejs/putItem.js new file mode 100644 index 000000000..2eb05a1e4 --- /dev/null +++ b/usecases/guest-apiapp-sample/lambda/nodejs/putItem.js @@ -0,0 +1,31 @@ +'use strict'; + +const AWSXRay = require('aws-xray-sdk'); +const AWS = AWSXRay.captureAWS(require('aws-sdk')); +const ddb = new AWS.DynamoDB(); + +module.exports.putItem = (event, context, callback) => { + var datetime = new Date(Date.now()).toString(); + const request = JSON.parse(event.body); + const params = { + TableName: process.env.DDB_TABLE, + Item: { + title: { S: request.title }, + content: { S: request.content }, + created_at: { S: datetime }, + }, + }; + ddb.putItem(params, (error, result) => { + console.log(params); + if (error) { + console.error(error); + } else { + console.log('Success', result); + const response = { + statusCode: 200, + body: JSON.stringify('Success to putItem to the DynamoDB'), + }; + callback(null, response); + } + }); +}; diff --git a/usecases/guest-apiapp-sample/lambda/python/getItem/getItem.py b/usecases/guest-apiapp-sample/lambda/python/getItem/getItem.py new file mode 100644 index 000000000..2fd805066 --- /dev/null +++ b/usecases/guest-apiapp-sample/lambda/python/getItem/getItem.py @@ -0,0 +1,35 @@ +import json +import os +import boto3 +from botocore.exceptions import ClientError +from typing import Any, Dict +from aws_lambda_powertools import Logger, Tracer +from aws_lambda_powertools.utilities.typing import LambdaContext +from aws_lambda_powertools.utilities.data_classes import APIGatewayProxyEvent +from boto3.dynamodb.conditions import Key, Attr + +logger = Logger() +tracer = Tracer() + +dynamodb = boto3.resource("dynamodb") +table = dynamodb.Table(os.environ["DDB_TABLE"]) + +@logger.inject_lambda_context(log_event=True) +@tracer.capture_lambda_handler + +def lambda_handler(event: APIGatewayProxyEvent, context: LambdaContext) -> Dict[str, Any]: + logger.info('info') + logger.debug('debug') + + try: + response = table.query( + KeyConditionExpression=Key('title').eq(event['pathParameters']['title']), + ) + print(response) + except ClientError as e: + print(e.response['Error']['Message']) + else: + return { + "statusCode": 200, + "body" : json.dumps(response["Items"]) + } \ No newline at end of file diff --git a/usecases/guest-apiapp-sample/lambda/python/listItems/listItems.py b/usecases/guest-apiapp-sample/lambda/python/listItems/listItems.py new file mode 100644 index 000000000..ae465fe9e --- /dev/null +++ b/usecases/guest-apiapp-sample/lambda/python/listItems/listItems.py @@ -0,0 +1,33 @@ +import json +import os +import boto3 +from typing import Any, Dict +from aws_lambda_powertools import Logger, Tracer +from aws_lambda_powertools.utilities.typing import LambdaContext +from aws_lambda_powertools.utilities.data_classes import APIGatewayProxyEvent +from botocore.exceptions import ClientError + + +logger = Logger() +tracer = Tracer() + +dynamodb = boto3.resource("dynamodb") +table = dynamodb.Table(os.environ["DDB_TABLE"]) + +@logger.inject_lambda_context(log_event=True) +@tracer.capture_lambda_handler + +def lambda_handler(event: APIGatewayProxyEvent, context: LambdaContext) -> Dict[str, Any]: + logger.info('info') + logger.debug('debug') + + try: + response = table.scan() + print(response) + except ClientError as e: + print(e.response['Error']['Message']) + else: + return { + "statusCode": 200, + "body" : json.dumps(response["Items"]) + } \ No newline at end of file diff --git a/usecases/guest-apiapp-sample/lambda/python/putItem/putItem.py b/usecases/guest-apiapp-sample/lambda/python/putItem/putItem.py new file mode 100644 index 000000000..0f804a793 --- /dev/null +++ b/usecases/guest-apiapp-sample/lambda/python/putItem/putItem.py @@ -0,0 +1,41 @@ +import json +import os +import datetime +import boto3 +from botocore.exceptions import ClientError +from typing import Any, Dict +from aws_lambda_powertools.utilities.typing import LambdaContext +from aws_lambda_powertools.utilities.data_classes import APIGatewayProxyEvent +from aws_lambda_powertools import Logger, Tracer + +logger = Logger() +tracer = Tracer() + +dynamodb = boto3.resource("dynamodb") +table = dynamodb.Table(os.environ["DDB_TABLE"]) + +@logger.inject_lambda_context(log_event=True) +@tracer.capture_lambda_handler + +def lambda_handler(event: APIGatewayProxyEvent, context: LambdaContext) -> Dict[str, Any]: + logger.info('info') + logger.debug('debug') + + date = str(datetime.datetime.now()) + payload = json.loads(event['body']) + + try: + response = table.put_item( + Item = { + 'title': payload['title'], + 'content': payload['content'], + 'created_at': date + } + ) + except ClientError as e: + print(e.response['Error']['Message']) + else: + return { + "statusCode": 200, + "body" : json.dumps({'Success':'Success to putItem to the DynamoDB'}) + } \ No newline at end of file diff --git a/usecases/guest-apiapp-sample/lib/blea-chatbot-stack.ts b/usecases/guest-apiapp-sample/lib/blea-chatbot-stack.ts new file mode 100644 index 000000000..c9de87b5b --- /dev/null +++ b/usecases/guest-apiapp-sample/lib/blea-chatbot-stack.ts @@ -0,0 +1,35 @@ +import * as cdk from '@aws-cdk/core'; +import * as cb from '@aws-cdk/aws-chatbot'; +import * as iam from '@aws-cdk/aws-iam'; + +export interface BLEAChatbotStackProps extends cdk.StackProps { + topicArn: string; + channelId: string; + workspaceId: string; +} + +// NOTICE: AWS Chatbot can send events from supported services only. +// See: https://docs.aws.amazon.com/ja_jp/chatbot/latest/adminguide/related-services.html +export class BLEAChatbotStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props: BLEAChatbotStackProps) { + super(scope, id, props); + + // AWS Chatbot configuration for sending message + const chatbotRole = new iam.Role(this, 'ChatbotRole', { + assumedBy: new iam.ServicePrincipal('chatbot.amazonaws.com'), + managedPolicies: [ + iam.ManagedPolicy.fromAwsManagedPolicyName('ReadOnlyAccess'), + iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchReadOnlyAccess'), + ], + }); + + // !!! Create SlackChannel and add aws chatbot app to the room + new cb.CfnSlackChannelConfiguration(this, 'ChatbotChannel', { + configurationName: `${id}-${props.workspaceId}`, + slackChannelId: props.channelId, + iamRoleArn: chatbotRole.roleArn, + slackWorkspaceId: props.workspaceId, + snsTopicArns: [props.topicArn], + }); + } +} diff --git a/usecases/guest-apiapp-sample/lib/blea-db-dynamodb-stack.ts b/usecases/guest-apiapp-sample/lib/blea-db-dynamodb-stack.ts new file mode 100644 index 000000000..145311880 --- /dev/null +++ b/usecases/guest-apiapp-sample/lib/blea-db-dynamodb-stack.ts @@ -0,0 +1,66 @@ +import * as cdk from '@aws-cdk/core'; +import * as dynamodb from '@aws-cdk/aws-dynamodb'; +import * as sns from '@aws-cdk/aws-sns'; +import * as kms from '@aws-cdk/aws-kms'; +import * as cw from '@aws-cdk/aws-cloudwatch'; +import * as cw_actions from '@aws-cdk/aws-cloudwatch-actions'; + +export interface BLEADbDynamoDbStackProps extends cdk.StackProps { + alarmTopic: sns.Topic; + appKey: kms.Key; +} +export class BLEADbDynamoDbStack extends cdk.Stack { + public readonly table: dynamodb.Table; + constructor(scope: cdk.Construct, id: string, props: BLEADbDynamoDbStackProps) { + super(scope, id, props); + + // Create table + const table = new dynamodb.Table(this, 'DynamoDB', { + billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, + partitionKey: { + name: 'title', + type: dynamodb.AttributeType.STRING, + }, + sortKey: { + name: 'content', + type: dynamodb.AttributeType.STRING, + }, + encryption: dynamodb.TableEncryption.CUSTOMER_MANAGED, + encryptionKey: props.appKey, + removalPolicy: cdk.RemovalPolicy.RETAIN, + }); + + // Create LSI + table.addLocalSecondaryIndex({ + indexName: 'SampleIndex', + sortKey: { + name: 'createdAt', + type: dynamodb.AttributeType.STRING, + }, + projectionType: dynamodb.ProjectionType.ALL, + }); + + // Sample metrics and alarm + table.metricSystemErrorsForOperations({ + period: cdk.Duration.minutes(5), + statistic: cw.Statistic.AVERAGE, + dimensionsMap: { + Operation: 'GetItem', + }, + }); + table + .metricConsumedReadCapacityUnits({ + period: cdk.Duration.minutes(5), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'DynamoConsumedReadCapacityUnit', { + evaluationPeriods: 3, + datapointsToAlarm: 3, + threshold: 90, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + this.table = table; + } +} diff --git a/lib/blea-generallog-key-stack.ts b/usecases/guest-apiapp-sample/lib/blea-key-apiapp-stack.ts similarity index 60% rename from lib/blea-generallog-key-stack.ts rename to usecases/guest-apiapp-sample/lib/blea-key-apiapp-stack.ts index 0367d8e9e..d819c8293 100644 --- a/lib/blea-generallog-key-stack.ts +++ b/usecases/guest-apiapp-sample/lib/blea-key-apiapp-stack.ts @@ -1,17 +1,17 @@ import * as cdk from '@aws-cdk/core'; import * as kms from '@aws-cdk/aws-kms'; -export class BLEAGeneralLogKeyStack extends cdk.Stack { +export class BLEAKeyApiappStack extends cdk.Stack { public readonly kmsKey: kms.Key; constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); - // CMK - const kmsKey = new kms.Key(this, 'Key', { + // KMS CMK + const kmsKey = new kms.Key(this, 'KeyApiapp', { enableKeyRotation: true, - description: 'for General Logs', - alias: `${id}-for-generallog`, + description: 'for Apiapp', + alias: `${id}-for-apiapp`, }); this.kmsKey = kmsKey; } diff --git a/usecases/guest-apiapp-sample/lib/blea-lambda-nodejs-stack.ts b/usecases/guest-apiapp-sample/lib/blea-lambda-nodejs-stack.ts new file mode 100644 index 000000000..7f11d31d4 --- /dev/null +++ b/usecases/guest-apiapp-sample/lib/blea-lambda-nodejs-stack.ts @@ -0,0 +1,319 @@ +import * as cdk from '@aws-cdk/core'; +import * as dynamodb from '@aws-cdk/aws-dynamodb'; +import * as kms from '@aws-cdk/aws-kms'; +import * as iam from '@aws-cdk/aws-iam'; +import * as lambda from '@aws-cdk/aws-lambda'; +import * as node_lambda from '@aws-cdk/aws-lambda-nodejs'; +import * as sns from '@aws-cdk/aws-sns'; +import * as logs from '@aws-cdk/aws-logs'; +import * as cw from '@aws-cdk/aws-cloudwatch'; +import * as cw_actions from '@aws-cdk/aws-cloudwatch-actions'; +import * as path from 'path'; + +export interface BLEALambdaNodejsStackProps extends cdk.StackProps { + alarmTopic: sns.Topic; + table: dynamodb.Table; + appKey: kms.Key; +} + +export class BLEALambdaNodejsStack extends cdk.Stack { + public readonly getItemFunction: lambda.Function; + public readonly listItemsFunction: lambda.Function; + public readonly putItemFunction: lambda.Function; + + constructor(scope: cdk.Construct, id: string, props: BLEALambdaNodejsStackProps) { + super(scope, id, props); + + // Custom Policy for App Key + props.appKey.addToResourcePolicy( + new iam.PolicyStatement({ + actions: ['kms:*'], + principals: [new iam.AccountRootPrincipal()], + resources: ['*'], + }), + ); + props.appKey.addToResourcePolicy( + new iam.PolicyStatement({ + actions: ['kms:Encrypt*', 'kms:Decrypt*', 'kms:ReEncrypt*', 'kms:GenerateDataKey*', 'kms:Describe*'], + principals: [ + new iam.AnyPrincipal().withConditions({ + ArnLike: { + 'aws:PrincipalArn': `arn:aws:iam::${cdk.Stack.of(this).account}:role/BLEA-LambdaNodejs-*`, + }, + }), + ], + resources: ['*'], + }), + ); + + // Policy operating KMS CMK for Lambda + const kmsPolicy = new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['kms:Encrypt*', 'kms:Decrypt*', 'kms:ReEncrypt*', 'kms:GenerateDataKey*', 'kms:Describe*'], + resources: [props.appKey.keyArn], + }); + + // Using Lambda Node.js Library + // See: https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html + + // GetItem Function + const getItemFunction = new node_lambda.NodejsFunction(this, 'getItem', { + runtime: lambda.Runtime.NODEJS_14_X, + entry: path.join(__dirname, '../lambda/nodejs/getItem.js'), + handler: 'getItem', + memorySize: 256, + timeout: cdk.Duration.seconds(25), + tracing: lambda.Tracing.ACTIVE, + insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_98_0, + environment: { + DDB_TABLE: props.table.tableName, + }, + environmentEncryption: props.appKey, + logRetention: logs.RetentionDays.THREE_MONTHS, + }); + getItemFunction.addToRolePolicy(kmsPolicy); + getItemFunction.addToRolePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['dynamodb:Query', 'dynamodb:GetItem'], + resources: [props.table.tableArn, props.table.tableArn + '/index/*'], + }), + ); + this.getItemFunction = getItemFunction; + + // Sample metrics and alarm + // See: https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/best-practices.html + getItemFunction + .metricErrors({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'getItemErrorsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + getItemFunction + .metricDuration({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'getItemDurationAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + new cw.Metric({ + namespace: 'AWS/Lambda', + metricName: 'ConcurrentExecutions', + period: cdk.Duration.minutes(5), + statistic: cw.Statistic.MAXIMUM, + dimensionsMap: { + FunctionName: getItemFunction.functionName, + }, + }) + .createAlarm(this, 'getItemConcurrentExecutionsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + getItemFunction + .metricThrottles({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'getItemThrottlesAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // ListItem Function + const listItemsFunction = new node_lambda.NodejsFunction(this, 'listItems', { + runtime: lambda.Runtime.NODEJS_14_X, + entry: path.join(__dirname, '../lambda/nodejs/listItems.js'), + handler: 'listItems', + timeout: cdk.Duration.seconds(25), + memorySize: 256, + tracing: lambda.Tracing.ACTIVE, + insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_98_0, + environment: { + DDB_TABLE: props.table.tableName, + }, + environmentEncryption: props.appKey, + logRetention: logs.RetentionDays.THREE_MONTHS, + }); + listItemsFunction.addToRolePolicy(kmsPolicy); + listItemsFunction.addToRolePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['dynamodb:Query', 'dynamodb:Scan'], + resources: [props.table.tableArn, props.table.tableArn + '/index/*'], + }), + ); + this.listItemsFunction = listItemsFunction; + + // Sample metrics and alarm + // See: https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/best-practices.html + listItemsFunction + .metricErrors({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'listItemsErrorsExecutionsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + listItemsFunction + .metricDuration({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'listItemsDurationAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + new cw.Metric({ + namespace: 'AWS/Lambda', + metricName: 'ConcurrentExecutions', + period: cdk.Duration.minutes(5), + statistic: cw.Statistic.MAXIMUM, + dimensionsMap: { + FunctionName: listItemsFunction.functionName, + }, + }) + .createAlarm(this, 'listItemsConcurrentExecutionsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + listItemsFunction + .metricThrottles({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'listItemsThrottlesAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // PutItem Function + const putItemFunction = new node_lambda.NodejsFunction(this, 'putItem', { + runtime: lambda.Runtime.NODEJS_14_X, + entry: path.join(__dirname, '../lambda/nodejs/putItem.js'), + handler: 'putItem', + timeout: cdk.Duration.seconds(25), + memorySize: 256, + tracing: lambda.Tracing.ACTIVE, + insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_98_0, + environment: { + DDB_TABLE: props.table.tableName, + }, + environmentEncryption: props.appKey, + logRetention: logs.RetentionDays.THREE_MONTHS, + }); + putItemFunction.addToRolePolicy(kmsPolicy); + putItemFunction.addToRolePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['dynamodb:PutItem'], + resources: [props.table.tableArn, props.table.tableArn + '/index/*'], + }), + ); + this.putItemFunction = putItemFunction; + + // Sample metrics and alarm + // See: https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/best-practices.html + putItemFunction + .metricErrors({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'putItemErrorsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + putItemFunction + .metricDuration({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'putItemDurationAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + new cw.Metric({ + namespace: 'AWS/Lambda', + metricName: 'ConcurrentExecutions', + period: cdk.Duration.minutes(5), + statistic: cw.Statistic.MAXIMUM, + dimensionsMap: { + FunctionName: putItemFunction.functionName, + }, + }) + .createAlarm(this, 'putItemConcurrentExecutionsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + putItemFunction + .metricThrottles({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'putItemThrottlesAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + } +} diff --git a/usecases/guest-apiapp-sample/lib/blea-lambda-python-stack.ts b/usecases/guest-apiapp-sample/lib/blea-lambda-python-stack.ts new file mode 100644 index 000000000..b81989c66 --- /dev/null +++ b/usecases/guest-apiapp-sample/lib/blea-lambda-python-stack.ts @@ -0,0 +1,333 @@ +import * as cdk from '@aws-cdk/core'; +import * as dynamodb from '@aws-cdk/aws-dynamodb'; +import * as lambda from '@aws-cdk/aws-lambda'; +import * as kms from '@aws-cdk/aws-kms'; +import * as iam from '@aws-cdk/aws-iam'; +import * as sns from '@aws-cdk/aws-sns'; +import * as logs from '@aws-cdk/aws-logs'; +import * as cw from '@aws-cdk/aws-cloudwatch'; +import * as cw_actions from '@aws-cdk/aws-cloudwatch-actions'; +import * as path from 'path'; + +export interface BLEALambdaPythonStackProps extends cdk.StackProps { + alarmTopic: sns.Topic; + table: dynamodb.Table; + appKey: kms.Key; +} +export class BLEALambdaPythonStack extends cdk.Stack { + public readonly getItemFunction: lambda.Function; + public readonly listItemsFunction: lambda.Function; + public readonly putItemFunction: lambda.Function; + + constructor(scope: cdk.Construct, id: string, props: BLEALambdaPythonStackProps) { + super(scope, id, props); + + // Custom Policy for App Key + props.appKey.addToResourcePolicy( + new iam.PolicyStatement({ + actions: ['kms:*'], + principals: [new iam.AccountRootPrincipal()], + resources: ['*'], + }), + ); + props.appKey.addToResourcePolicy( + new iam.PolicyStatement({ + actions: ['kms:Encrypt*', 'kms:Decrypt*', 'kms:ReEncrypt*', 'kms:GenerateDataKey*', 'kms:Describe*'], + principals: [ + new iam.AnyPrincipal().withConditions({ + ArnLike: { + 'aws:PrincipalArn': `arn:aws:iam::${cdk.Stack.of(this).account}:role/BLEA-LambdaPython-*`, + }, + }), + ], + resources: ['*'], + }), + ); + + // Policy operating KMS CMK for Lambda + const kmsPolicy = new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['kms:Encrypt*', 'kms:Decrypt*', 'kms:ReEncrypt*', 'kms:GenerateDataKey*', 'kms:Describe*'], + resources: [props.appKey.keyArn], + }); + + // Using Lambda Python Library + // + // !!!! CAUTION !!!! + // Lambda Python Library is experimental. This implementation might be changed. + // See: https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-python-readme.html + // + + // Lambda layer for Lambda Powertools + // For install instruction, See: https://awslabs.github.io/aws-lambda-powertools-python/latest/#install + const lambdaPowertools = lambda.LayerVersion.fromLayerVersionArn( + this, + 'lambda-powertools', + `arn:aws:lambda:${cdk.Stack.of(this).region}:017000801446:layer:AWSLambdaPowertoolsPython:3`, + ); + + // GetItem Function + const getItemFunction = new lambda.Function(this, 'getItem', { + runtime: lambda.Runtime.PYTHON_3_7, + code: lambda.Code.fromAsset(path.join(__dirname, '../lambda/python/getItem')), + handler: 'getItem.lambda_handler', + memorySize: 256, + timeout: cdk.Duration.seconds(25), + tracing: lambda.Tracing.ACTIVE, + insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_98_0, + layers: [lambdaPowertools], + environment: { + DDB_TABLE: props.table.tableName, + }, + environmentEncryption: props.appKey, + logRetention: logs.RetentionDays.THREE_MONTHS, + }); + getItemFunction.addToRolePolicy(kmsPolicy); + getItemFunction.addToRolePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['dynamodb:Query', 'dynamodb:GetItem'], + resources: [props.table.tableArn, props.table.tableArn + '/index/*'], + }), + ); + this.getItemFunction = getItemFunction; + + // Sample metrics and alarm + // See: https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/best-practices.html + getItemFunction + .metricErrors({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'getItemErrorsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + getItemFunction + .metricDuration({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'getItemDurationAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + new cw.Metric({ + namespace: 'AWS/Lambda', + metricName: 'ConcurrentExecutions', + period: cdk.Duration.minutes(5), + statistic: cw.Statistic.MAXIMUM, + dimensionsMap: { + FunctionName: getItemFunction.functionName, + }, + }) + .createAlarm(this, 'getItemConcurrentExecutionsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + getItemFunction + .metricThrottles({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'getItemThrottlesAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // ListItem Function + const listItemsFunction = new lambda.Function(this, 'listItems', { + runtime: lambda.Runtime.PYTHON_3_7, + code: lambda.Code.fromAsset(path.join(__dirname, '../lambda/python/listItems')), + handler: 'listItems.lambda_handler', + timeout: cdk.Duration.seconds(25), + memorySize: 2048, + tracing: lambda.Tracing.ACTIVE, + insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_98_0, + layers: [lambdaPowertools], + environment: { + DDB_TABLE: props.table.tableName, + }, + environmentEncryption: props.appKey, + logRetention: logs.RetentionDays.THREE_MONTHS, + }); + listItemsFunction.addToRolePolicy(kmsPolicy); + listItemsFunction.addToRolePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['dynamodb:Query', 'dynamodb:Scan'], + resources: [props.table.tableArn, props.table.tableArn + '/index/*'], + }), + ); + this.listItemsFunction = listItemsFunction; + + // Sample metrics and alarm + // See: https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/best-practices.html + listItemsFunction + .metricErrors({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'listItemsErrorsExecutionsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + listItemsFunction + .metricDuration({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'listItemsDurationAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + new cw.Metric({ + namespace: 'AWS/Lambda', + metricName: 'ConcurrentExecutions', + period: cdk.Duration.minutes(5), + statistic: cw.Statistic.MAXIMUM, + dimensionsMap: { + FunctionName: listItemsFunction.functionName, + }, + }) + .createAlarm(this, 'listItemsConcurrentExecutionsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + listItemsFunction + .metricThrottles({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'listItemsThrottlesAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // PutItem Function + const putItemFunction = new lambda.Function(this, 'putItem', { + runtime: lambda.Runtime.PYTHON_3_7, + code: lambda.Code.fromAsset(path.join(__dirname, '../lambda/python/putItem')), + handler: 'putItem.lambda_handler', + timeout: cdk.Duration.seconds(25), + memorySize: 256, + tracing: lambda.Tracing.ACTIVE, + insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_98_0, + layers: [lambdaPowertools], + environment: { + DDB_TABLE: props.table.tableName, + }, + environmentEncryption: props.appKey, + logRetention: logs.RetentionDays.THREE_MONTHS, + }); + putItemFunction.addToRolePolicy(kmsPolicy); + putItemFunction.addToRolePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['dynamodb:PutItem'], + resources: [props.table.tableArn, props.table.tableArn + '/index/*'], + }), + ); + this.putItemFunction = putItemFunction; + + // Sample metrics and alarm + // See: https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/best-practices.html + putItemFunction + .metricErrors({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'putItemErrorsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + putItemFunction + .metricDuration({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'putItemDurationAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + new cw.Metric({ + namespace: 'AWS/Lambda', + metricName: 'ConcurrentExecutions', + period: cdk.Duration.minutes(5), + statistic: cw.Statistic.MAXIMUM, + dimensionsMap: { + FunctionName: putItemFunction.functionName, + }, + }) + .createAlarm(this, 'putItemConcurrentExecutionsAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + putItemFunction + .metricThrottles({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'putItemThrottlesAlarm', { + evaluationPeriods: 3, + threshold: 80, + datapointsToAlarm: 3, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + } +} diff --git a/lib/blea-monitor-alarm-stack.ts b/usecases/guest-apiapp-sample/lib/blea-monitor-alarm-stack.ts similarity index 100% rename from lib/blea-monitor-alarm-stack.ts rename to usecases/guest-apiapp-sample/lib/blea-monitor-alarm-stack.ts diff --git a/usecases/guest-apiapp-sample/lib/blea-restapi-stack.ts b/usecases/guest-apiapp-sample/lib/blea-restapi-stack.ts new file mode 100644 index 000000000..607480eb2 --- /dev/null +++ b/usecases/guest-apiapp-sample/lib/blea-restapi-stack.ts @@ -0,0 +1,80 @@ +import * as cdk from '@aws-cdk/core'; +import * as lambda from '@aws-cdk/aws-lambda'; +import * as apigateway from '@aws-cdk/aws-apigateway'; +import * as sns from '@aws-cdk/aws-sns'; +import * as cw from '@aws-cdk/aws-cloudwatch'; +import * as cw_logs from '@aws-cdk/aws-logs'; +import * as cw_actions from '@aws-cdk/aws-cloudwatch-actions'; + +export interface BLEARestApiStackProps extends cdk.StackProps { + alarmTopic: sns.Topic; + getItemFunction: lambda.Function; + listItemsFunction: lambda.Function; + putItemFunction: lambda.Function; +} + +export class BLEARestApiStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props: BLEARestApiStackProps) { + super(scope, id, props); + + // Sample log group for API Gateway + const apiGatewayLogGroup = new cw_logs.LogGroup(this, 'ApiGatewayLogGroup', { + retention: cw_logs.RetentionDays.ONE_MONTH, + }); + + // REST API + // + // Note: Enable Metrics, Logging(info level), Tracing(X-Ray), + // See: https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-monitor.html + // + const restApi = new apigateway.RestApi(this, 'RestApi', { + deployOptions: { + accessLogDestination: new apigateway.LogGroupLogDestination(apiGatewayLogGroup), + accessLogFormat: apigateway.AccessLogFormat.jsonWithStandardFields(), + loggingLevel: apigateway.MethodLoggingLevel.INFO, + tracingEnabled: true, // Enable X-ray tracing + metricsEnabled: true, // Enable Metrics for this method + // cachingEnabled: true, // Please unncomment if you want to use cache + }, + + // CORS Prefilight Options sample + // See: https://docs.aws.amazon.com/cdk/api/latest/docs/aws-apigateway-readme.html#cross-origin-resource-sharing-cors + // defaultCorsPreflightOptions: { + // allowOrigins: apigateway.Cors.ALL_ORIGINS, + // allowMethods: apigateway.Cors.ALL_METHODS, + // allowHeaders: apigateway.Cors.DEFAULT_HEADERS, + // }, + }); + + // Sample metrics as for API Gateway + + // Alarms for API Gateway + // See: https://docs.aws.amazon.com/apigateway/latest/developerguide/monitoring-cloudwatch.html + // + restApi + .metricCount({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'APIGatewayInvocationCount', { + evaluationPeriods: 3, + datapointsToAlarm: 3, + threshold: 70, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // Defining Lambda-backed APIs + // See: https://docs.aws.amazon.com/cdk/api/latest/docs/aws-apigateway-readme.html#aws-lambda-backed-apis + // + const lists = restApi.root.addResource('list'); + lists.addMethod('GET', new apigateway.LambdaIntegration(props.listItemsFunction)); + + const items = restApi.root.addResource('item'); + items.addMethod('POST', new apigateway.LambdaIntegration(props.putItemFunction)); + + const titles = items.addResource('{title}'); + titles.addMethod('GET', new apigateway.LambdaIntegration(props.getItemFunction)); + } +} diff --git a/usecases/guest-apiapp-sample/package.json b/usecases/guest-apiapp-sample/package.json new file mode 100644 index 000000000..603969406 --- /dev/null +++ b/usecases/guest-apiapp-sample/package.json @@ -0,0 +1,52 @@ +{ + "private": true, + "name": "blea-guest-apiapp-sample", + "version": "1.0.0", + "description": "Sample servlerless application with BLEA", + "license": "MIT-0", + "bin": { + "blea-guest-apiapp-nodejs-sample": "bin/blea-guest-apiapp-nodejs-sample.js" + }, + "scripts": { + "synth:dev": "npx cdk synth -c environment=dev", + "depcheck": "npx depcheck --ignore-dirs cdk.out", + "build": "tsc --build", + "clean": "tsc --build --clean && rm -rf cdk.out", + "watch": "tsc -w", + "test": "jest", + "lint": "eslint --fix .", + "format": "prettier --write ." + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "esbuild": "^0.13.8", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + }, + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-apigateway": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-dynamodb": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-kms": "^1.129.0", + "@aws-cdk/aws-lambda": "^1.129.0", + "@aws-cdk/aws-lambda-nodejs": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "aws-sdk": "^2.1012.0", + "aws-xray-sdk": "^3.3.3" + } +} diff --git a/usecases/guest-apiapp-sample/test/__snapshots__/blea-guest-apiapp-nodejs-sample.test.ts.snap b/usecases/guest-apiapp-sample/test/__snapshots__/blea-guest-apiapp-nodejs-sample.test.ts.snap new file mode 100644 index 000000000..b98b62677 --- /dev/null +++ b/usecases/guest-apiapp-sample/test/__snapshots__/blea-guest-apiapp-nodejs-sample.test.ts.snap @@ -0,0 +1,2214 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 1`] = ` +Object { + "Outputs": Object { + "ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821": Object { + "Export": Object { + "Name": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + "Value": Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + }, + }, + "Resources": Object { + "MonitorAlarmEmail9C782A25": Object { + "Properties": Object { + "Endpoint": "notify-monitoring@example.com", + "Protocol": "email", + "TopicArn": Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + }, + "Type": "AWS::SNS::Subscription", + }, + "MonitorAlarmTopic9C746E8C": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::SNS::Topic", + }, + "MonitorAlarmTopicPolicy7BD5FCD1": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sns:Publish", + "Effect": "Allow", + "Principal": Object { + "Service": "cloudwatch.amazonaws.com", + }, + "Resource": Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + "Sid": "0", + }, + ], + "Version": "2012-10-17", + }, + "Topics": Array [ + Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + ], + }, + "Type": "AWS::SNS::TopicPolicy", + }, + }, +} +`; + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 2`] = ` +Object { + "Resources": Object { + "ChatbotChannel": Object { + "Properties": Object { + "ConfigurationName": "BLEA-ChatbotMonitor-T8XXXXXXX", + "IamRoleArn": Object { + "Fn::GetAtt": Array [ + "ChatbotRole8A87AA1F", + "Arn", + ], + }, + "SlackChannelId": "C01YYYYYYYY", + "SlackWorkspaceId": "T8XXXXXXX", + "SnsTopicArns": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + }, + "Type": "AWS::Chatbot::SlackChannelConfiguration", + }, + "ChatbotRole8A87AA1F": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "chatbot.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/ReadOnlyAccess", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/CloudWatchReadOnlyAccess", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + }, +} +`; + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 3`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392": Object { + "Export": Object { + "Name": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "KeyApiapp4E3354CA", + "Arn", + ], + }, + }, + }, + "Resources": Object { + "KeyApiapp4E3354CA": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "Description": "for Apiapp", + "EnableKeyRotation": true, + "KeyPolicy": Object { + "Statement": Array [ + Object { + "Action": Array [ + "kms:Create*", + "kms:Describe*", + "kms:Enable*", + "kms:List*", + "kms:Put*", + "kms:Update*", + "kms:Revoke*", + "kms:Disable*", + "kms:Get*", + "kms:Delete*", + "kms:ScheduleKeyDeletion", + "kms:CancelKeyDeletion", + "kms:GenerateDataKey", + "kms:TagResource", + "kms:UntagResource", + ], + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":root", + ], + ], + }, + }, + "Resource": "*", + }, + Object { + "Action": "kms:*", + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":root", + ], + ], + }, + }, + "Resource": "*", + }, + Object { + "Action": Array [ + "kms:Encrypt*", + "kms:Decrypt*", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Describe*", + ], + "Condition": Object { + "ArnLike": Object { + "aws:PrincipalArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:aws:iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":role/BLEA-LambdaNodejs-*", + ], + ], + }, + }, + }, + "Effect": "Allow", + "Principal": Object { + "AWS": "*", + }, + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::KMS::Key", + "UpdateReplacePolicy": "Retain", + }, + "KeyApiappAlias0706058C": Object { + "Properties": Object { + "AliasName": "alias/BLEA-AppKeyNodejs-for-apiapp", + "TargetKeyId": Object { + "Fn::GetAtt": Array [ + "KeyApiapp4E3354CA", + "Arn", + ], + }, + }, + "Type": "AWS::KMS::Alias", + }, + }, +} +`; + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 4`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9": Object { + "Export": Object { + "Name": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "DynamoDB25F6E66C", + "Arn", + ], + }, + }, + "ExportsOutputRefDynamoDB25F6E66C6BBEA39C": Object { + "Export": Object { + "Name": "BLEA-DBDynamoDb:ExportsOutputRefDynamoDB25F6E66C6BBEA39C", + }, + "Value": Object { + "Ref": "DynamoDB25F6E66C", + }, + }, + }, + "Resources": Object { + "DynamoConsumedReadCapacityUnit9947468B": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "TableName", + "Value": Object { + "Ref": "DynamoDB25F6E66C", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "ConsumedReadCapacityUnits", + "Namespace": "AWS/DynamoDB", + "Period": 300, + "Statistic": "Average", + "Threshold": 90, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "DynamoDB25F6E66C": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AttributeDefinitions": Array [ + Object { + "AttributeName": "title", + "AttributeType": "S", + }, + Object { + "AttributeName": "content", + "AttributeType": "S", + }, + Object { + "AttributeName": "createdAt", + "AttributeType": "S", + }, + ], + "BillingMode": "PAY_PER_REQUEST", + "KeySchema": Array [ + Object { + "AttributeName": "title", + "KeyType": "HASH", + }, + Object { + "AttributeName": "content", + "KeyType": "RANGE", + }, + ], + "LocalSecondaryIndexes": Array [ + Object { + "IndexName": "SampleIndex", + "KeySchema": Array [ + Object { + "AttributeName": "title", + "KeyType": "HASH", + }, + Object { + "AttributeName": "createdAt", + "KeyType": "RANGE", + }, + ], + "Projection": Object { + "ProjectionType": "ALL", + }, + }, + ], + "SSESpecification": Object { + "KMSMasterKeyId": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + "SSEEnabled": true, + "SSEType": "KMS", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::DynamoDB::Table", + "UpdateReplacePolicy": "Retain", + }, + }, +} +`; + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 5`] = ` +Object { + "Mappings": Object { + "LambdaInsightsVersions10980": Object { + "af-south-1": Object { + "arn": "arn:aws:lambda:af-south-1:012438385374:layer:LambdaInsightsExtension:8", + }, + "ap-east-1": Object { + "arn": "arn:aws:lambda:ap-east-1:519774774795:layer:LambdaInsightsExtension:8", + }, + "ap-northeast-1": Object { + "arn": "arn:aws:lambda:ap-northeast-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "ap-northeast-2": Object { + "arn": "arn:aws:lambda:ap-northeast-2:580247275435:layer:LambdaInsightsExtension:14", + }, + "ap-south-1": Object { + "arn": "arn:aws:lambda:ap-south-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "ap-southeast-1": Object { + "arn": "arn:aws:lambda:ap-southeast-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "ap-southeast-2": Object { + "arn": "arn:aws:lambda:ap-southeast-2:580247275435:layer:LambdaInsightsExtension:14", + }, + "ca-central-1": Object { + "arn": "arn:aws:lambda:ca-central-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "cn-north-1": Object { + "arn": "arn:aws-cn:lambda:cn-north-1:488211338238:layer:LambdaInsightsExtension:8", + }, + "cn-northwest-1": Object { + "arn": "arn:aws-cn:lambda:cn-northwest-1:488211338238:layer:LambdaInsightsExtension:8", + }, + "eu-central-1": Object { + "arn": "arn:aws:lambda:eu-central-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "eu-north-1": Object { + "arn": "arn:aws:lambda:eu-north-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "eu-south-1": Object { + "arn": "arn:aws:lambda:eu-south-1:339249233099:layer:LambdaInsightsExtension:8", + }, + "eu-west-1": Object { + "arn": "arn:aws:lambda:eu-west-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "eu-west-2": Object { + "arn": "arn:aws:lambda:eu-west-2:580247275435:layer:LambdaInsightsExtension:14", + }, + "eu-west-3": Object { + "arn": "arn:aws:lambda:eu-west-3:580247275435:layer:LambdaInsightsExtension:14", + }, + "me-south-1": Object { + "arn": "arn:aws:lambda:me-south-1:285320876703:layer:LambdaInsightsExtension:8", + }, + "sa-east-1": Object { + "arn": "arn:aws:lambda:sa-east-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "us-east-1": Object { + "arn": "arn:aws:lambda:us-east-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "us-east-2": Object { + "arn": "arn:aws:lambda:us-east-2:580247275435:layer:LambdaInsightsExtension:14", + }, + "us-west-1": Object { + "arn": "arn:aws:lambda:us-west-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "us-west-2": Object { + "arn": "arn:aws:lambda:us-west-2:580247275435:layer:LambdaInsightsExtension:14", + }, + }, + }, + "Outputs": Object { + "ExportsOutputFnGetAttgetItem89554DD9Arn253A3888": Object { + "Export": Object { + "Name": "BLEA-LambdaNodejs:ExportsOutputFnGetAttgetItem89554DD9Arn253A3888", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "getItem89554DD9", + "Arn", + ], + }, + }, + "ExportsOutputFnGetAttlistItemsF3CB59CFArnAE16A8D7": Object { + "Export": Object { + "Name": "BLEA-LambdaNodejs:ExportsOutputFnGetAttlistItemsF3CB59CFArnAE16A8D7", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "listItemsF3CB59CF", + "Arn", + ], + }, + }, + "ExportsOutputFnGetAttputItemEAA1A834Arn80CDE58C": Object { + "Export": Object { + "Name": "BLEA-LambdaNodejs:ExportsOutputFnGetAttputItemEAA1A834Arn80CDE58C", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "putItemEAA1A834", + "Arn", + ], + }, + }, + }, + "Parameters": Object { + "AssetParameters4cf56171781b4ca623a6615507787ea079f07c78c3a65ebfed6bcf64966c2d2fArtifactHash2E3CE94D": Object { + "Description": "Artifact hash for asset \\"4cf56171781b4ca623a6615507787ea079f07c78c3a65ebfed6bcf64966c2d2f\\"", + "Type": "String", + }, + "AssetParameters4cf56171781b4ca623a6615507787ea079f07c78c3a65ebfed6bcf64966c2d2fS3BucketB94C9B22": Object { + "Description": "S3 bucket for asset \\"4cf56171781b4ca623a6615507787ea079f07c78c3a65ebfed6bcf64966c2d2f\\"", + "Type": "String", + }, + "AssetParameters4cf56171781b4ca623a6615507787ea079f07c78c3a65ebfed6bcf64966c2d2fS3VersionKey9DD8632A": Object { + "Description": "S3 key for asset version \\"4cf56171781b4ca623a6615507787ea079f07c78c3a65ebfed6bcf64966c2d2f\\"", + "Type": "String", + }, + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827ArtifactHash1355580A": Object { + "Description": "Artifact hash for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A": Object { + "Description": "S3 bucket for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3": Object { + "Description": "S3 key for asset version \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + "AssetParametersb74b95cb93b2a0e0ae551df2ba1ef59e408a57891811c704c4fe12bac59b3626ArtifactHash365663D4": Object { + "Description": "Artifact hash for asset \\"b74b95cb93b2a0e0ae551df2ba1ef59e408a57891811c704c4fe12bac59b3626\\"", + "Type": "String", + }, + "AssetParametersb74b95cb93b2a0e0ae551df2ba1ef59e408a57891811c704c4fe12bac59b3626S3BucketA0C6F6A9": Object { + "Description": "S3 bucket for asset \\"b74b95cb93b2a0e0ae551df2ba1ef59e408a57891811c704c4fe12bac59b3626\\"", + "Type": "String", + }, + "AssetParametersb74b95cb93b2a0e0ae551df2ba1ef59e408a57891811c704c4fe12bac59b3626S3VersionKey5FC32570": Object { + "Description": "S3 key for asset version \\"b74b95cb93b2a0e0ae551df2ba1ef59e408a57891811c704c4fe12bac59b3626\\"", + "Type": "String", + }, + "AssetParametersecf601678cc1f5654e65e7489e5c05b2bdf5dbfafe57f86382d8f00e4202b55cArtifactHash7396E24D": Object { + "Description": "Artifact hash for asset \\"ecf601678cc1f5654e65e7489e5c05b2bdf5dbfafe57f86382d8f00e4202b55c\\"", + "Type": "String", + }, + "AssetParametersecf601678cc1f5654e65e7489e5c05b2bdf5dbfafe57f86382d8f00e4202b55cS3BucketFFA24BA6": Object { + "Description": "S3 bucket for asset \\"ecf601678cc1f5654e65e7489e5c05b2bdf5dbfafe57f86382d8f00e4202b55c\\"", + "Type": "String", + }, + "AssetParametersecf601678cc1f5654e65e7489e5c05b2bdf5dbfafe57f86382d8f00e4202b55cS3VersionKeyF089218A": Object { + "Description": "S3 key for asset version \\"ecf601678cc1f5654e65e7489e5c05b2bdf5dbfafe57f86382d8f00e4202b55c\\"", + "Type": "String", + }, + }, + "Resources": Object { + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": Object { + "DependsOn": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "Arn", + ], + }, + "Runtime": "nodejs14.x", + }, + "Type": "AWS::Lambda::Function", + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": 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": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "logs:PutRetentionPolicy", + "logs:DeleteRetentionPolicy", + ], + "Effect": "Allow", + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "Roles": Array [ + Object { + "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "getItem89554DD9": Object { + "DependsOn": Array [ + "getItemServiceRoleDefaultPolicyD8A4C868", + "getItemServiceRoleB6E9117D", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParametersecf601678cc1f5654e65e7489e5c05b2bdf5dbfafe57f86382d8f00e4202b55cS3BucketFFA24BA6", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersecf601678cc1f5654e65e7489e5c05b2bdf5dbfafe57f86382d8f00e4202b55cS3VersionKeyF089218A", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersecf601678cc1f5654e65e7489e5c05b2bdf5dbfafe57f86382d8f00e4202b55cS3VersionKeyF089218A", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Environment": Object { + "Variables": Object { + "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1", + "DDB_TABLE": Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputRefDynamoDB25F6E66C6BBEA39C", + }, + }, + }, + "Handler": "index.getItem", + "KmsKeyArn": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + "Layers": Array [ + Object { + "Fn::FindInMap": Array [ + "LambdaInsightsVersions10980", + Object { + "Ref": "AWS::Region", + }, + "arn", + ], + }, + ], + "MemorySize": 256, + "Role": Object { + "Fn::GetAtt": Array [ + "getItemServiceRoleB6E9117D", + "Arn", + ], + }, + "Runtime": "nodejs14.x", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "Timeout": 25, + "TracingConfig": Object { + "Mode": "Active", + }, + }, + "Type": "AWS::Lambda::Function", + }, + "getItemConcurrentExecutionsAlarm4C0F6BCA": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "getItem89554DD9", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "ConcurrentExecutions", + "Namespace": "AWS/Lambda", + "Period": 300, + "Statistic": "Maximum", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "getItemDurationAlarm43D494E5": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "getItem89554DD9", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Duration", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "getItemErrorsAlarm77E011D9": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "getItem89554DD9", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Errors", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "getItemLogRetention0B69BE3A": Object { + "Properties": Object { + "LogGroupName": Object { + "Fn::Join": Array [ + "", + Array [ + "/aws/lambda/", + Object { + "Ref": "getItem89554DD9", + }, + ], + ], + }, + "RetentionInDays": 90, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn", + ], + }, + }, + "Type": "Custom::LogRetention", + }, + "getItemServiceRoleB6E9117D": 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", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "getItemServiceRoleDefaultPolicyD8A4C868": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "kms:Encrypt*", + "kms:Decrypt*", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Describe*", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + }, + Object { + "Action": Array [ + "dynamodb:Query", + "dynamodb:GetItem", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + "/index/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "getItemServiceRoleDefaultPolicyD8A4C868", + "Roles": Array [ + Object { + "Ref": "getItemServiceRoleB6E9117D", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "getItemThrottlesAlarm20B2A0CD": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "getItem89554DD9", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Throttles", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "listItemsConcurrentExecutionsAlarm971573A2": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "listItemsF3CB59CF", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "ConcurrentExecutions", + "Namespace": "AWS/Lambda", + "Period": 300, + "Statistic": "Maximum", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "listItemsDurationAlarmD2F4214E": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "listItemsF3CB59CF", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Duration", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "listItemsErrorsExecutionsAlarmEBA22F80": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "listItemsF3CB59CF", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Errors", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "listItemsF3CB59CF": Object { + "DependsOn": Array [ + "listItemsServiceRoleDefaultPolicy7D628D20", + "listItemsServiceRole8352DC49", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParametersb74b95cb93b2a0e0ae551df2ba1ef59e408a57891811c704c4fe12bac59b3626S3BucketA0C6F6A9", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersb74b95cb93b2a0e0ae551df2ba1ef59e408a57891811c704c4fe12bac59b3626S3VersionKey5FC32570", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersb74b95cb93b2a0e0ae551df2ba1ef59e408a57891811c704c4fe12bac59b3626S3VersionKey5FC32570", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Environment": Object { + "Variables": Object { + "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1", + "DDB_TABLE": Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputRefDynamoDB25F6E66C6BBEA39C", + }, + }, + }, + "Handler": "index.listItems", + "KmsKeyArn": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + "Layers": Array [ + Object { + "Fn::FindInMap": Array [ + "LambdaInsightsVersions10980", + Object { + "Ref": "AWS::Region", + }, + "arn", + ], + }, + ], + "MemorySize": 256, + "Role": Object { + "Fn::GetAtt": Array [ + "listItemsServiceRole8352DC49", + "Arn", + ], + }, + "Runtime": "nodejs14.x", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "Timeout": 25, + "TracingConfig": Object { + "Mode": "Active", + }, + }, + "Type": "AWS::Lambda::Function", + }, + "listItemsLogRetentionA50925B9": Object { + "Properties": Object { + "LogGroupName": Object { + "Fn::Join": Array [ + "", + Array [ + "/aws/lambda/", + Object { + "Ref": "listItemsF3CB59CF", + }, + ], + ], + }, + "RetentionInDays": 90, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn", + ], + }, + }, + "Type": "Custom::LogRetention", + }, + "listItemsServiceRole8352DC49": 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", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "listItemsServiceRoleDefaultPolicy7D628D20": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "kms:Encrypt*", + "kms:Decrypt*", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Describe*", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + }, + Object { + "Action": Array [ + "dynamodb:Query", + "dynamodb:Scan", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + "/index/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "listItemsServiceRoleDefaultPolicy7D628D20", + "Roles": Array [ + Object { + "Ref": "listItemsServiceRole8352DC49", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "listItemsThrottlesAlarm3614D851": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "listItemsF3CB59CF", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Throttles", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "putItemConcurrentExecutionsAlarmE4D1D001": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "putItemEAA1A834", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "ConcurrentExecutions", + "Namespace": "AWS/Lambda", + "Period": 300, + "Statistic": "Maximum", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "putItemDurationAlarmD129A876": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "putItemEAA1A834", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Duration", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "putItemEAA1A834": Object { + "DependsOn": Array [ + "putItemServiceRoleDefaultPolicyF1E2D1A4", + "putItemServiceRoleD85646F9", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters4cf56171781b4ca623a6615507787ea079f07c78c3a65ebfed6bcf64966c2d2fS3BucketB94C9B22", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters4cf56171781b4ca623a6615507787ea079f07c78c3a65ebfed6bcf64966c2d2fS3VersionKey9DD8632A", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters4cf56171781b4ca623a6615507787ea079f07c78c3a65ebfed6bcf64966c2d2fS3VersionKey9DD8632A", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Environment": Object { + "Variables": Object { + "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1", + "DDB_TABLE": Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputRefDynamoDB25F6E66C6BBEA39C", + }, + }, + }, + "Handler": "index.putItem", + "KmsKeyArn": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + "Layers": Array [ + Object { + "Fn::FindInMap": Array [ + "LambdaInsightsVersions10980", + Object { + "Ref": "AWS::Region", + }, + "arn", + ], + }, + ], + "MemorySize": 256, + "Role": Object { + "Fn::GetAtt": Array [ + "putItemServiceRoleD85646F9", + "Arn", + ], + }, + "Runtime": "nodejs14.x", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "Timeout": 25, + "TracingConfig": Object { + "Mode": "Active", + }, + }, + "Type": "AWS::Lambda::Function", + }, + "putItemErrorsAlarmAD31549F": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "putItemEAA1A834", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Errors", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "putItemLogRetention04F036D0": Object { + "Properties": Object { + "LogGroupName": Object { + "Fn::Join": Array [ + "", + Array [ + "/aws/lambda/", + Object { + "Ref": "putItemEAA1A834", + }, + ], + ], + }, + "RetentionInDays": 90, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn", + ], + }, + }, + "Type": "Custom::LogRetention", + }, + "putItemServiceRoleD85646F9": 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", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "putItemServiceRoleDefaultPolicyF1E2D1A4": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "kms:Encrypt*", + "kms:Decrypt*", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Describe*", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + }, + Object { + "Action": "dynamodb:PutItem", + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + "/index/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "putItemServiceRoleDefaultPolicyF1E2D1A4", + "Roles": Array [ + Object { + "Ref": "putItemServiceRoleD85646F9", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "putItemThrottlesAlarmB284CAE3": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "putItemEAA1A834", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Throttles", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + }, +} +`; + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 6`] = ` +Object { + "Outputs": Object { + "RestApiEndpoint0551178A": Object { + "Value": Object { + "Fn::Join": Array [ + "", + Array [ + "https://", + Object { + "Ref": "RestApi0C43BF4B", + }, + ".execute-api.", + Object { + "Ref": "AWS::Region", + }, + ".", + Object { + "Ref": "AWS::URLSuffix", + }, + "/", + Object { + "Ref": "RestApiDeploymentStageprod3855DE66", + }, + "/", + ], + ], + }, + }, + }, + "Resources": Object { + "APIGatewayInvocationCountB2089961": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "ApiName", + "Value": "RestApi", + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Count", + "Namespace": "AWS/ApiGateway", + "Period": 60, + "Statistic": "Average", + "Threshold": 70, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "ApiGatewayLogGroupA9770429": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "RetentionInDays": 30, + }, + "Type": "AWS::Logs::LogGroup", + "UpdateReplacePolicy": "Retain", + }, + "RestApi0C43BF4B": Object { + "Properties": Object { + "Name": "RestApi", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::ApiGateway::RestApi", + }, + "RestApiAccount7C83CF5A": Object { + "DependsOn": Array [ + "RestApi0C43BF4B", + ], + "Properties": Object { + "CloudWatchRoleArn": Object { + "Fn::GetAtt": Array [ + "RestApiCloudWatchRoleE3ED6605", + "Arn", + ], + }, + }, + "Type": "AWS::ApiGateway::Account", + }, + "RestApiCloudWatchRoleE3ED6605": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "apigateway.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "RestApiDeployment180EC503f39295634a49e357a9a5301a97f5823d": Object { + "DependsOn": Array [ + "RestApiitemtitleGETC210C7B3", + "RestApiitemtitle7F8F6831", + "RestApiitemPOST45451C84", + "RestApiitemCBE60B4E", + "RestApilistGETE778C3E2", + "RestApilistA2EDBAC4", + ], + "Properties": Object { + "Description": "Automatically created by the RestApi construct", + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Deployment", + }, + "RestApiDeploymentStageprod3855DE66": Object { + "Properties": Object { + "AccessLogSetting": Object { + "DestinationArn": Object { + "Fn::GetAtt": Array [ + "ApiGatewayLogGroupA9770429", + "Arn", + ], + }, + "Format": "{\\"requestId\\":\\"$context.requestId\\",\\"ip\\":\\"$context.identity.sourceIp\\",\\"user\\":\\"$context.identity.user\\",\\"caller\\":\\"$context.identity.caller\\",\\"requestTime\\":\\"$context.requestTime\\",\\"httpMethod\\":\\"$context.httpMethod\\",\\"resourcePath\\":\\"$context.resourcePath\\",\\"status\\":\\"$context.status\\",\\"protocol\\":\\"$context.protocol\\",\\"responseLength\\":\\"$context.responseLength\\"}", + }, + "DeploymentId": Object { + "Ref": "RestApiDeployment180EC503f39295634a49e357a9a5301a97f5823d", + }, + "MethodSettings": Array [ + Object { + "HttpMethod": "*", + "LoggingLevel": "INFO", + "MetricsEnabled": true, + "ResourcePath": "/*", + }, + ], + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + "StageName": "prod", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "TracingEnabled": true, + }, + "Type": "AWS::ApiGateway::Stage", + }, + "RestApiitemCBE60B4E": Object { + "Properties": Object { + "ParentId": Object { + "Fn::GetAtt": Array [ + "RestApi0C43BF4B", + "RootResourceId", + ], + }, + "PathPart": "item", + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "RestApiitemPOST45451C84": Object { + "Properties": Object { + "AuthorizationType": "NONE", + "HttpMethod": "POST", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:", + Object { + "Ref": "AWS::Region", + }, + ":lambda:path/2015-03-31/functions/", + Object { + "Fn::ImportValue": "BLEA-LambdaNodejs:ExportsOutputFnGetAttputItemEAA1A834Arn80CDE58C", + }, + "/invocations", + ], + ], + }, + }, + "ResourceId": Object { + "Ref": "RestApiitemCBE60B4E", + }, + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "RestApiitemPOSTApiPermissionBLEARestApiC1A160FDPOSTitem63B4DBB5": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaNodejs:ExportsOutputFnGetAttputItemEAA1A834Arn80CDE58C", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/", + Object { + "Ref": "RestApiDeploymentStageprod3855DE66", + }, + "/POST/item", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApiitemPOSTApiPermissionTestBLEARestApiC1A160FDPOSTitem7A9D7F67": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaNodejs:ExportsOutputFnGetAttputItemEAA1A834Arn80CDE58C", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/test-invoke-stage/POST/item", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApiitemtitle7F8F6831": Object { + "Properties": Object { + "ParentId": Object { + "Ref": "RestApiitemCBE60B4E", + }, + "PathPart": "{title}", + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "RestApiitemtitleGETApiPermissionBLEARestApiC1A160FDGETitemtitle72F4E7B9": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaNodejs:ExportsOutputFnGetAttgetItem89554DD9Arn253A3888", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/", + Object { + "Ref": "RestApiDeploymentStageprod3855DE66", + }, + "/GET/item/*", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApiitemtitleGETApiPermissionTestBLEARestApiC1A160FDGETitemtitle854D35A6": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaNodejs:ExportsOutputFnGetAttgetItem89554DD9Arn253A3888", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/test-invoke-stage/GET/item/*", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApiitemtitleGETC210C7B3": Object { + "Properties": Object { + "AuthorizationType": "NONE", + "HttpMethod": "GET", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:", + Object { + "Ref": "AWS::Region", + }, + ":lambda:path/2015-03-31/functions/", + Object { + "Fn::ImportValue": "BLEA-LambdaNodejs:ExportsOutputFnGetAttgetItem89554DD9Arn253A3888", + }, + "/invocations", + ], + ], + }, + }, + "ResourceId": Object { + "Ref": "RestApiitemtitle7F8F6831", + }, + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "RestApilistA2EDBAC4": Object { + "Properties": Object { + "ParentId": Object { + "Fn::GetAtt": Array [ + "RestApi0C43BF4B", + "RootResourceId", + ], + }, + "PathPart": "list", + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "RestApilistGETApiPermissionBLEARestApiC1A160FDGETlist339FC084": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaNodejs:ExportsOutputFnGetAttlistItemsF3CB59CFArnAE16A8D7", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/", + Object { + "Ref": "RestApiDeploymentStageprod3855DE66", + }, + "/GET/list", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApilistGETApiPermissionTestBLEARestApiC1A160FDGETlistAEF1AA1E": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaNodejs:ExportsOutputFnGetAttlistItemsF3CB59CFArnAE16A8D7", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/test-invoke-stage/GET/list", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApilistGETE778C3E2": Object { + "Properties": Object { + "AuthorizationType": "NONE", + "HttpMethod": "GET", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:", + Object { + "Ref": "AWS::Region", + }, + ":lambda:path/2015-03-31/functions/", + Object { + "Fn::ImportValue": "BLEA-LambdaNodejs:ExportsOutputFnGetAttlistItemsF3CB59CFArnAE16A8D7", + }, + "/invocations", + ], + ], + }, + }, + "ResourceId": Object { + "Ref": "RestApilistA2EDBAC4", + }, + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + }, +} +`; diff --git a/usecases/guest-apiapp-sample/test/__snapshots__/blea-guest-apiapp-python-sample.test.ts.snap b/usecases/guest-apiapp-sample/test/__snapshots__/blea-guest-apiapp-python-sample.test.ts.snap new file mode 100644 index 000000000..2c288be09 --- /dev/null +++ b/usecases/guest-apiapp-sample/test/__snapshots__/blea-guest-apiapp-python-sample.test.ts.snap @@ -0,0 +1,2247 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 1`] = ` +Object { + "Outputs": Object { + "ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821": Object { + "Export": Object { + "Name": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + "Value": Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + }, + }, + "Resources": Object { + "MonitorAlarmEmail9C782A25": Object { + "Properties": Object { + "Endpoint": "notify-monitoring@example.com", + "Protocol": "email", + "TopicArn": Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + }, + "Type": "AWS::SNS::Subscription", + }, + "MonitorAlarmTopic9C746E8C": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::SNS::Topic", + }, + "MonitorAlarmTopicPolicy7BD5FCD1": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sns:Publish", + "Effect": "Allow", + "Principal": Object { + "Service": "cloudwatch.amazonaws.com", + }, + "Resource": Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + "Sid": "0", + }, + ], + "Version": "2012-10-17", + }, + "Topics": Array [ + Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + ], + }, + "Type": "AWS::SNS::TopicPolicy", + }, + }, +} +`; + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 2`] = ` +Object { + "Resources": Object { + "ChatbotChannel": Object { + "Properties": Object { + "ConfigurationName": "BLEA-ChatbotMonitor-T8XXXXXXX", + "IamRoleArn": Object { + "Fn::GetAtt": Array [ + "ChatbotRole8A87AA1F", + "Arn", + ], + }, + "SlackChannelId": "C01YYYYYYYY", + "SlackWorkspaceId": "T8XXXXXXX", + "SnsTopicArns": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + }, + "Type": "AWS::Chatbot::SlackChannelConfiguration", + }, + "ChatbotRole8A87AA1F": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "chatbot.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/ReadOnlyAccess", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/CloudWatchReadOnlyAccess", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + }, +} +`; + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 3`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392": Object { + "Export": Object { + "Name": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "KeyApiapp4E3354CA", + "Arn", + ], + }, + }, + }, + "Resources": Object { + "KeyApiapp4E3354CA": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "Description": "for Apiapp", + "EnableKeyRotation": true, + "KeyPolicy": Object { + "Statement": Array [ + Object { + "Action": Array [ + "kms:Create*", + "kms:Describe*", + "kms:Enable*", + "kms:List*", + "kms:Put*", + "kms:Update*", + "kms:Revoke*", + "kms:Disable*", + "kms:Get*", + "kms:Delete*", + "kms:ScheduleKeyDeletion", + "kms:CancelKeyDeletion", + "kms:GenerateDataKey", + "kms:TagResource", + "kms:UntagResource", + ], + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":root", + ], + ], + }, + }, + "Resource": "*", + }, + Object { + "Action": "kms:*", + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":root", + ], + ], + }, + }, + "Resource": "*", + }, + Object { + "Action": Array [ + "kms:Encrypt*", + "kms:Decrypt*", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Describe*", + ], + "Condition": Object { + "ArnLike": Object { + "aws:PrincipalArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:aws:iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":role/BLEA-LambdaPython-*", + ], + ], + }, + }, + }, + "Effect": "Allow", + "Principal": Object { + "AWS": "*", + }, + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::KMS::Key", + "UpdateReplacePolicy": "Retain", + }, + "KeyApiappAlias0706058C": Object { + "Properties": Object { + "AliasName": "alias/BLEA-AppKeyNodejs-for-apiapp", + "TargetKeyId": Object { + "Fn::GetAtt": Array [ + "KeyApiapp4E3354CA", + "Arn", + ], + }, + }, + "Type": "AWS::KMS::Alias", + }, + }, +} +`; + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 4`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9": Object { + "Export": Object { + "Name": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "DynamoDB25F6E66C", + "Arn", + ], + }, + }, + "ExportsOutputRefDynamoDB25F6E66C6BBEA39C": Object { + "Export": Object { + "Name": "BLEA-DBDynamoDb:ExportsOutputRefDynamoDB25F6E66C6BBEA39C", + }, + "Value": Object { + "Ref": "DynamoDB25F6E66C", + }, + }, + }, + "Resources": Object { + "DynamoConsumedReadCapacityUnit9947468B": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "TableName", + "Value": Object { + "Ref": "DynamoDB25F6E66C", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "ConsumedReadCapacityUnits", + "Namespace": "AWS/DynamoDB", + "Period": 300, + "Statistic": "Average", + "Threshold": 90, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "DynamoDB25F6E66C": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AttributeDefinitions": Array [ + Object { + "AttributeName": "title", + "AttributeType": "S", + }, + Object { + "AttributeName": "content", + "AttributeType": "S", + }, + Object { + "AttributeName": "createdAt", + "AttributeType": "S", + }, + ], + "BillingMode": "PAY_PER_REQUEST", + "KeySchema": Array [ + Object { + "AttributeName": "title", + "KeyType": "HASH", + }, + Object { + "AttributeName": "content", + "KeyType": "RANGE", + }, + ], + "LocalSecondaryIndexes": Array [ + Object { + "IndexName": "SampleIndex", + "KeySchema": Array [ + Object { + "AttributeName": "title", + "KeyType": "HASH", + }, + Object { + "AttributeName": "createdAt", + "KeyType": "RANGE", + }, + ], + "Projection": Object { + "ProjectionType": "ALL", + }, + }, + ], + "SSESpecification": Object { + "KMSMasterKeyId": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + "SSEEnabled": true, + "SSEType": "KMS", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::DynamoDB::Table", + "UpdateReplacePolicy": "Retain", + }, + }, +} +`; + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 5`] = ` +Object { + "Mappings": Object { + "LambdaInsightsVersions10980": Object { + "af-south-1": Object { + "arn": "arn:aws:lambda:af-south-1:012438385374:layer:LambdaInsightsExtension:8", + }, + "ap-east-1": Object { + "arn": "arn:aws:lambda:ap-east-1:519774774795:layer:LambdaInsightsExtension:8", + }, + "ap-northeast-1": Object { + "arn": "arn:aws:lambda:ap-northeast-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "ap-northeast-2": Object { + "arn": "arn:aws:lambda:ap-northeast-2:580247275435:layer:LambdaInsightsExtension:14", + }, + "ap-south-1": Object { + "arn": "arn:aws:lambda:ap-south-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "ap-southeast-1": Object { + "arn": "arn:aws:lambda:ap-southeast-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "ap-southeast-2": Object { + "arn": "arn:aws:lambda:ap-southeast-2:580247275435:layer:LambdaInsightsExtension:14", + }, + "ca-central-1": Object { + "arn": "arn:aws:lambda:ca-central-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "cn-north-1": Object { + "arn": "arn:aws-cn:lambda:cn-north-1:488211338238:layer:LambdaInsightsExtension:8", + }, + "cn-northwest-1": Object { + "arn": "arn:aws-cn:lambda:cn-northwest-1:488211338238:layer:LambdaInsightsExtension:8", + }, + "eu-central-1": Object { + "arn": "arn:aws:lambda:eu-central-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "eu-north-1": Object { + "arn": "arn:aws:lambda:eu-north-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "eu-south-1": Object { + "arn": "arn:aws:lambda:eu-south-1:339249233099:layer:LambdaInsightsExtension:8", + }, + "eu-west-1": Object { + "arn": "arn:aws:lambda:eu-west-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "eu-west-2": Object { + "arn": "arn:aws:lambda:eu-west-2:580247275435:layer:LambdaInsightsExtension:14", + }, + "eu-west-3": Object { + "arn": "arn:aws:lambda:eu-west-3:580247275435:layer:LambdaInsightsExtension:14", + }, + "me-south-1": Object { + "arn": "arn:aws:lambda:me-south-1:285320876703:layer:LambdaInsightsExtension:8", + }, + "sa-east-1": Object { + "arn": "arn:aws:lambda:sa-east-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "us-east-1": Object { + "arn": "arn:aws:lambda:us-east-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "us-east-2": Object { + "arn": "arn:aws:lambda:us-east-2:580247275435:layer:LambdaInsightsExtension:14", + }, + "us-west-1": Object { + "arn": "arn:aws:lambda:us-west-1:580247275435:layer:LambdaInsightsExtension:14", + }, + "us-west-2": Object { + "arn": "arn:aws:lambda:us-west-2:580247275435:layer:LambdaInsightsExtension:14", + }, + }, + }, + "Outputs": Object { + "ExportsOutputFnGetAttgetItem89554DD9Arn253A3888": Object { + "Export": Object { + "Name": "BLEA-LambdaPython:ExportsOutputFnGetAttgetItem89554DD9Arn253A3888", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "getItem89554DD9", + "Arn", + ], + }, + }, + "ExportsOutputFnGetAttlistItemsF3CB59CFArnAE16A8D7": Object { + "Export": Object { + "Name": "BLEA-LambdaPython:ExportsOutputFnGetAttlistItemsF3CB59CFArnAE16A8D7", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "listItemsF3CB59CF", + "Arn", + ], + }, + }, + "ExportsOutputFnGetAttputItemEAA1A834Arn80CDE58C": Object { + "Export": Object { + "Name": "BLEA-LambdaPython:ExportsOutputFnGetAttputItemEAA1A834Arn80CDE58C", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "putItemEAA1A834", + "Arn", + ], + }, + }, + }, + "Parameters": Object { + "AssetParameters6c6248559cf324952895870a3b546cf7cbfbafe0cce9e4a60bc61e6ec8eef051ArtifactHashE3A8111A": Object { + "Description": "Artifact hash for asset \\"6c6248559cf324952895870a3b546cf7cbfbafe0cce9e4a60bc61e6ec8eef051\\"", + "Type": "String", + }, + "AssetParameters6c6248559cf324952895870a3b546cf7cbfbafe0cce9e4a60bc61e6ec8eef051S3Bucket21947BF8": Object { + "Description": "S3 bucket for asset \\"6c6248559cf324952895870a3b546cf7cbfbafe0cce9e4a60bc61e6ec8eef051\\"", + "Type": "String", + }, + "AssetParameters6c6248559cf324952895870a3b546cf7cbfbafe0cce9e4a60bc61e6ec8eef051S3VersionKeyFE350D86": Object { + "Description": "S3 key for asset version \\"6c6248559cf324952895870a3b546cf7cbfbafe0cce9e4a60bc61e6ec8eef051\\"", + "Type": "String", + }, + "AssetParameters9935294482ff6ee39a0af20cfbf740c113a6d493e51300bfd6e98e85e6e9f360ArtifactHashC67E1EEB": Object { + "Description": "Artifact hash for asset \\"9935294482ff6ee39a0af20cfbf740c113a6d493e51300bfd6e98e85e6e9f360\\"", + "Type": "String", + }, + "AssetParameters9935294482ff6ee39a0af20cfbf740c113a6d493e51300bfd6e98e85e6e9f360S3Bucket423BBE30": Object { + "Description": "S3 bucket for asset \\"9935294482ff6ee39a0af20cfbf740c113a6d493e51300bfd6e98e85e6e9f360\\"", + "Type": "String", + }, + "AssetParameters9935294482ff6ee39a0af20cfbf740c113a6d493e51300bfd6e98e85e6e9f360S3VersionKey9EE2FEA5": Object { + "Description": "S3 key for asset version \\"9935294482ff6ee39a0af20cfbf740c113a6d493e51300bfd6e98e85e6e9f360\\"", + "Type": "String", + }, + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827ArtifactHash1355580A": Object { + "Description": "Artifact hash for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A": Object { + "Description": "S3 bucket for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3": Object { + "Description": "S3 key for asset version \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + "AssetParametersdc0a332c2c8fb4d4e7977a51466ff04fda2926977fd3f496acfa00722ded9563ArtifactHash79F7C6B4": Object { + "Description": "Artifact hash for asset \\"dc0a332c2c8fb4d4e7977a51466ff04fda2926977fd3f496acfa00722ded9563\\"", + "Type": "String", + }, + "AssetParametersdc0a332c2c8fb4d4e7977a51466ff04fda2926977fd3f496acfa00722ded9563S3BucketB8F45183": Object { + "Description": "S3 bucket for asset \\"dc0a332c2c8fb4d4e7977a51466ff04fda2926977fd3f496acfa00722ded9563\\"", + "Type": "String", + }, + "AssetParametersdc0a332c2c8fb4d4e7977a51466ff04fda2926977fd3f496acfa00722ded9563S3VersionKeyC3144BEA": Object { + "Description": "S3 key for asset version \\"dc0a332c2c8fb4d4e7977a51466ff04fda2926977fd3f496acfa00722ded9563\\"", + "Type": "String", + }, + }, + "Resources": Object { + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": Object { + "DependsOn": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "Arn", + ], + }, + "Runtime": "nodejs14.x", + }, + "Type": "AWS::Lambda::Function", + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": 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": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "logs:PutRetentionPolicy", + "logs:DeleteRetentionPolicy", + ], + "Effect": "Allow", + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "Roles": Array [ + Object { + "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "getItem89554DD9": Object { + "DependsOn": Array [ + "getItemServiceRoleDefaultPolicyD8A4C868", + "getItemServiceRoleB6E9117D", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters6c6248559cf324952895870a3b546cf7cbfbafe0cce9e4a60bc61e6ec8eef051S3Bucket21947BF8", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters6c6248559cf324952895870a3b546cf7cbfbafe0cce9e4a60bc61e6ec8eef051S3VersionKeyFE350D86", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters6c6248559cf324952895870a3b546cf7cbfbafe0cce9e4a60bc61e6ec8eef051S3VersionKeyFE350D86", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Environment": Object { + "Variables": Object { + "DDB_TABLE": Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputRefDynamoDB25F6E66C6BBEA39C", + }, + }, + }, + "Handler": "getItem.lambda_handler", + "KmsKeyArn": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + "Layers": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:aws:lambda:", + Object { + "Ref": "AWS::Region", + }, + ":017000801446:layer:AWSLambdaPowertoolsPython:3", + ], + ], + }, + Object { + "Fn::FindInMap": Array [ + "LambdaInsightsVersions10980", + Object { + "Ref": "AWS::Region", + }, + "arn", + ], + }, + ], + "MemorySize": 256, + "Role": Object { + "Fn::GetAtt": Array [ + "getItemServiceRoleB6E9117D", + "Arn", + ], + }, + "Runtime": "python3.7", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "Timeout": 25, + "TracingConfig": Object { + "Mode": "Active", + }, + }, + "Type": "AWS::Lambda::Function", + }, + "getItemConcurrentExecutionsAlarm4C0F6BCA": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "getItem89554DD9", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "ConcurrentExecutions", + "Namespace": "AWS/Lambda", + "Period": 300, + "Statistic": "Maximum", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "getItemDurationAlarm43D494E5": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "getItem89554DD9", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Duration", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "getItemErrorsAlarm77E011D9": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "getItem89554DD9", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Errors", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "getItemLogRetention0B69BE3A": Object { + "Properties": Object { + "LogGroupName": Object { + "Fn::Join": Array [ + "", + Array [ + "/aws/lambda/", + Object { + "Ref": "getItem89554DD9", + }, + ], + ], + }, + "RetentionInDays": 90, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn", + ], + }, + }, + "Type": "Custom::LogRetention", + }, + "getItemServiceRoleB6E9117D": 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", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "getItemServiceRoleDefaultPolicyD8A4C868": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "kms:Encrypt*", + "kms:Decrypt*", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Describe*", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + }, + Object { + "Action": Array [ + "dynamodb:Query", + "dynamodb:GetItem", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + "/index/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "getItemServiceRoleDefaultPolicyD8A4C868", + "Roles": Array [ + Object { + "Ref": "getItemServiceRoleB6E9117D", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "getItemThrottlesAlarm20B2A0CD": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "getItem89554DD9", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Throttles", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "listItemsConcurrentExecutionsAlarm971573A2": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "listItemsF3CB59CF", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "ConcurrentExecutions", + "Namespace": "AWS/Lambda", + "Period": 300, + "Statistic": "Maximum", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "listItemsDurationAlarmD2F4214E": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "listItemsF3CB59CF", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Duration", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "listItemsErrorsExecutionsAlarmEBA22F80": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "listItemsF3CB59CF", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Errors", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "listItemsF3CB59CF": Object { + "DependsOn": Array [ + "listItemsServiceRoleDefaultPolicy7D628D20", + "listItemsServiceRole8352DC49", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters9935294482ff6ee39a0af20cfbf740c113a6d493e51300bfd6e98e85e6e9f360S3Bucket423BBE30", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters9935294482ff6ee39a0af20cfbf740c113a6d493e51300bfd6e98e85e6e9f360S3VersionKey9EE2FEA5", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters9935294482ff6ee39a0af20cfbf740c113a6d493e51300bfd6e98e85e6e9f360S3VersionKey9EE2FEA5", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Environment": Object { + "Variables": Object { + "DDB_TABLE": Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputRefDynamoDB25F6E66C6BBEA39C", + }, + }, + }, + "Handler": "listItems.lambda_handler", + "KmsKeyArn": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + "Layers": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:aws:lambda:", + Object { + "Ref": "AWS::Region", + }, + ":017000801446:layer:AWSLambdaPowertoolsPython:3", + ], + ], + }, + Object { + "Fn::FindInMap": Array [ + "LambdaInsightsVersions10980", + Object { + "Ref": "AWS::Region", + }, + "arn", + ], + }, + ], + "MemorySize": 2048, + "Role": Object { + "Fn::GetAtt": Array [ + "listItemsServiceRole8352DC49", + "Arn", + ], + }, + "Runtime": "python3.7", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "Timeout": 25, + "TracingConfig": Object { + "Mode": "Active", + }, + }, + "Type": "AWS::Lambda::Function", + }, + "listItemsLogRetentionA50925B9": Object { + "Properties": Object { + "LogGroupName": Object { + "Fn::Join": Array [ + "", + Array [ + "/aws/lambda/", + Object { + "Ref": "listItemsF3CB59CF", + }, + ], + ], + }, + "RetentionInDays": 90, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn", + ], + }, + }, + "Type": "Custom::LogRetention", + }, + "listItemsServiceRole8352DC49": 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", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "listItemsServiceRoleDefaultPolicy7D628D20": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "kms:Encrypt*", + "kms:Decrypt*", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Describe*", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + }, + Object { + "Action": Array [ + "dynamodb:Query", + "dynamodb:Scan", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + "/index/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "listItemsServiceRoleDefaultPolicy7D628D20", + "Roles": Array [ + Object { + "Ref": "listItemsServiceRole8352DC49", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "listItemsThrottlesAlarm3614D851": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "listItemsF3CB59CF", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Throttles", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "putItemConcurrentExecutionsAlarmE4D1D001": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "putItemEAA1A834", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "ConcurrentExecutions", + "Namespace": "AWS/Lambda", + "Period": 300, + "Statistic": "Maximum", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "putItemDurationAlarmD129A876": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "putItemEAA1A834", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Duration", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "putItemEAA1A834": Object { + "DependsOn": Array [ + "putItemServiceRoleDefaultPolicyF1E2D1A4", + "putItemServiceRoleD85646F9", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParametersdc0a332c2c8fb4d4e7977a51466ff04fda2926977fd3f496acfa00722ded9563S3BucketB8F45183", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersdc0a332c2c8fb4d4e7977a51466ff04fda2926977fd3f496acfa00722ded9563S3VersionKeyC3144BEA", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersdc0a332c2c8fb4d4e7977a51466ff04fda2926977fd3f496acfa00722ded9563S3VersionKeyC3144BEA", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Environment": Object { + "Variables": Object { + "DDB_TABLE": Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputRefDynamoDB25F6E66C6BBEA39C", + }, + }, + }, + "Handler": "putItem.lambda_handler", + "KmsKeyArn": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + "Layers": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:aws:lambda:", + Object { + "Ref": "AWS::Region", + }, + ":017000801446:layer:AWSLambdaPowertoolsPython:3", + ], + ], + }, + Object { + "Fn::FindInMap": Array [ + "LambdaInsightsVersions10980", + Object { + "Ref": "AWS::Region", + }, + "arn", + ], + }, + ], + "MemorySize": 256, + "Role": Object { + "Fn::GetAtt": Array [ + "putItemServiceRoleD85646F9", + "Arn", + ], + }, + "Runtime": "python3.7", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "Timeout": 25, + "TracingConfig": Object { + "Mode": "Active", + }, + }, + "Type": "AWS::Lambda::Function", + }, + "putItemErrorsAlarmAD31549F": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "putItemEAA1A834", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Errors", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "putItemLogRetention04F036D0": Object { + "Properties": Object { + "LogGroupName": Object { + "Fn::Join": Array [ + "", + Array [ + "/aws/lambda/", + Object { + "Ref": "putItemEAA1A834", + }, + ], + ], + }, + "RetentionInDays": 90, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn", + ], + }, + }, + "Type": "Custom::LogRetention", + }, + "putItemServiceRoleD85646F9": 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", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "putItemServiceRoleDefaultPolicyF1E2D1A4": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "xray:PutTraceSegments", + "xray:PutTelemetryRecords", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "kms:Encrypt*", + "kms:Decrypt*", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Describe*", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::ImportValue": "BLEA-AppKeyNodejs:ExportsOutputFnGetAttKeyApiapp4E3354CAArn94D89392", + }, + }, + Object { + "Action": "dynamodb:PutItem", + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::ImportValue": "BLEA-DBDynamoDb:ExportsOutputFnGetAttDynamoDB25F6E66CArn715D1DA9", + }, + "/index/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "putItemServiceRoleDefaultPolicyF1E2D1A4", + "Roles": Array [ + Object { + "Ref": "putItemServiceRoleD85646F9", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "putItemThrottlesAlarmB284CAE3": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "FunctionName", + "Value": Object { + "Ref": "putItemEAA1A834", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Throttles", + "Namespace": "AWS/Lambda", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + }, +} +`; + +exports[`BLEA Guest Stack GuestAccount Serverless App Stacks 6`] = ` +Object { + "Outputs": Object { + "RestApiEndpoint0551178A": Object { + "Value": Object { + "Fn::Join": Array [ + "", + Array [ + "https://", + Object { + "Ref": "RestApi0C43BF4B", + }, + ".execute-api.", + Object { + "Ref": "AWS::Region", + }, + ".", + Object { + "Ref": "AWS::URLSuffix", + }, + "/", + Object { + "Ref": "RestApiDeploymentStageprod3855DE66", + }, + "/", + ], + ], + }, + }, + }, + "Resources": Object { + "APIGatewayInvocationCountB2089961": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "ApiName", + "Value": "RestApi", + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Count", + "Namespace": "AWS/ApiGateway", + "Period": 60, + "Statistic": "Average", + "Threshold": 70, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "ApiGatewayLogGroupA9770429": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "RetentionInDays": 30, + }, + "Type": "AWS::Logs::LogGroup", + "UpdateReplacePolicy": "Retain", + }, + "RestApi0C43BF4B": Object { + "Properties": Object { + "Name": "RestApi", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::ApiGateway::RestApi", + }, + "RestApiAccount7C83CF5A": Object { + "DependsOn": Array [ + "RestApi0C43BF4B", + ], + "Properties": Object { + "CloudWatchRoleArn": Object { + "Fn::GetAtt": Array [ + "RestApiCloudWatchRoleE3ED6605", + "Arn", + ], + }, + }, + "Type": "AWS::ApiGateway::Account", + }, + "RestApiCloudWatchRoleE3ED6605": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "apigateway.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "RestApiDeployment180EC503a456e1534aa2786db1e21962ec8ef95e": Object { + "DependsOn": Array [ + "RestApiitemtitleGETC210C7B3", + "RestApiitemtitle7F8F6831", + "RestApiitemPOST45451C84", + "RestApiitemCBE60B4E", + "RestApilistGETE778C3E2", + "RestApilistA2EDBAC4", + ], + "Properties": Object { + "Description": "Automatically created by the RestApi construct", + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Deployment", + }, + "RestApiDeploymentStageprod3855DE66": Object { + "Properties": Object { + "AccessLogSetting": Object { + "DestinationArn": Object { + "Fn::GetAtt": Array [ + "ApiGatewayLogGroupA9770429", + "Arn", + ], + }, + "Format": "{\\"requestId\\":\\"$context.requestId\\",\\"ip\\":\\"$context.identity.sourceIp\\",\\"user\\":\\"$context.identity.user\\",\\"caller\\":\\"$context.identity.caller\\",\\"requestTime\\":\\"$context.requestTime\\",\\"httpMethod\\":\\"$context.httpMethod\\",\\"resourcePath\\":\\"$context.resourcePath\\",\\"status\\":\\"$context.status\\",\\"protocol\\":\\"$context.protocol\\",\\"responseLength\\":\\"$context.responseLength\\"}", + }, + "DeploymentId": Object { + "Ref": "RestApiDeployment180EC503a456e1534aa2786db1e21962ec8ef95e", + }, + "MethodSettings": Array [ + Object { + "HttpMethod": "*", + "LoggingLevel": "INFO", + "MetricsEnabled": true, + "ResourcePath": "/*", + }, + ], + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + "StageName": "prod", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "TracingEnabled": true, + }, + "Type": "AWS::ApiGateway::Stage", + }, + "RestApiitemCBE60B4E": Object { + "Properties": Object { + "ParentId": Object { + "Fn::GetAtt": Array [ + "RestApi0C43BF4B", + "RootResourceId", + ], + }, + "PathPart": "item", + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "RestApiitemPOST45451C84": Object { + "Properties": Object { + "AuthorizationType": "NONE", + "HttpMethod": "POST", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:", + Object { + "Ref": "AWS::Region", + }, + ":lambda:path/2015-03-31/functions/", + Object { + "Fn::ImportValue": "BLEA-LambdaPython:ExportsOutputFnGetAttputItemEAA1A834Arn80CDE58C", + }, + "/invocations", + ], + ], + }, + }, + "ResourceId": Object { + "Ref": "RestApiitemCBE60B4E", + }, + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "RestApiitemPOSTApiPermissionBLEARestApiC1A160FDPOSTitem63B4DBB5": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaPython:ExportsOutputFnGetAttputItemEAA1A834Arn80CDE58C", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/", + Object { + "Ref": "RestApiDeploymentStageprod3855DE66", + }, + "/POST/item", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApiitemPOSTApiPermissionTestBLEARestApiC1A160FDPOSTitem7A9D7F67": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaPython:ExportsOutputFnGetAttputItemEAA1A834Arn80CDE58C", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/test-invoke-stage/POST/item", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApiitemtitle7F8F6831": Object { + "Properties": Object { + "ParentId": Object { + "Ref": "RestApiitemCBE60B4E", + }, + "PathPart": "{title}", + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "RestApiitemtitleGETApiPermissionBLEARestApiC1A160FDGETitemtitle72F4E7B9": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaPython:ExportsOutputFnGetAttgetItem89554DD9Arn253A3888", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/", + Object { + "Ref": "RestApiDeploymentStageprod3855DE66", + }, + "/GET/item/*", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApiitemtitleGETApiPermissionTestBLEARestApiC1A160FDGETitemtitle854D35A6": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaPython:ExportsOutputFnGetAttgetItem89554DD9Arn253A3888", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/test-invoke-stage/GET/item/*", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApiitemtitleGETC210C7B3": Object { + "Properties": Object { + "AuthorizationType": "NONE", + "HttpMethod": "GET", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:", + Object { + "Ref": "AWS::Region", + }, + ":lambda:path/2015-03-31/functions/", + Object { + "Fn::ImportValue": "BLEA-LambdaPython:ExportsOutputFnGetAttgetItem89554DD9Arn253A3888", + }, + "/invocations", + ], + ], + }, + }, + "ResourceId": Object { + "Ref": "RestApiitemtitle7F8F6831", + }, + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + "RestApilistA2EDBAC4": Object { + "Properties": Object { + "ParentId": Object { + "Fn::GetAtt": Array [ + "RestApi0C43BF4B", + "RootResourceId", + ], + }, + "PathPart": "list", + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Resource", + }, + "RestApilistGETApiPermissionBLEARestApiC1A160FDGETlist339FC084": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaPython:ExportsOutputFnGetAttlistItemsF3CB59CFArnAE16A8D7", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/", + Object { + "Ref": "RestApiDeploymentStageprod3855DE66", + }, + "/GET/list", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApilistGETApiPermissionTestBLEARestApiC1A160FDGETlistAEF1AA1E": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::ImportValue": "BLEA-LambdaPython:ExportsOutputFnGetAttlistItemsF3CB59CFArnAE16A8D7", + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "RestApi0C43BF4B", + }, + "/test-invoke-stage/GET/list", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RestApilistGETE778C3E2": Object { + "Properties": Object { + "AuthorizationType": "NONE", + "HttpMethod": "GET", + "Integration": Object { + "IntegrationHttpMethod": "POST", + "Type": "AWS_PROXY", + "Uri": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":apigateway:", + Object { + "Ref": "AWS::Region", + }, + ":lambda:path/2015-03-31/functions/", + Object { + "Fn::ImportValue": "BLEA-LambdaPython:ExportsOutputFnGetAttlistItemsF3CB59CFArnAE16A8D7", + }, + "/invocations", + ], + ], + }, + }, + "ResourceId": Object { + "Ref": "RestApilistA2EDBAC4", + }, + "RestApiId": Object { + "Ref": "RestApi0C43BF4B", + }, + }, + "Type": "AWS::ApiGateway::Method", + }, + }, +} +`; diff --git a/usecases/guest-apiapp-sample/test/blea-guest-apiapp-nodejs-sample.test.ts b/usecases/guest-apiapp-sample/test/blea-guest-apiapp-nodejs-sample.test.ts new file mode 100644 index 000000000..3e6337284 --- /dev/null +++ b/usecases/guest-apiapp-sample/test/blea-guest-apiapp-nodejs-sample.test.ts @@ -0,0 +1,88 @@ +import * as cdk from '@aws-cdk/core'; +import { SynthUtils } from '@aws-cdk/assert'; + +// Load cdk.json to get context parameters +import * as cdk_json from '../cdk.json'; +import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; +import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; +import { BLEAKeyApiappStack } from '../lib/blea-key-apiapp-stack'; +import { BLEADbDynamoDbStack } from '../lib/blea-db-dynamodb-stack'; +import { BLEALambdaNodejsStack } from '../lib/blea-lambda-nodejs-stack'; +import { BLEARestApiStack } from '../lib/blea-restapi-stack'; + +const procEnv = { + account: process.env.CDK_DEFAULT_ACCOUNT, + region: process.env.CDK_DEFAULT_REGION, +}; + +const pjPrefix = 'BLEA'; +const app = new cdk.App(); +const envKey = 'dev'; +const envVals = cdk_json['context'][envKey]; + +describe(`${pjPrefix} Guest Stack`, () => { + test('GuestAccount Serverless App Stacks', () => { + // Slack Notifier + const workspaceId = envVals['slackNotifier']['workspaceId']; + const channelIdMon = envVals['slackNotifier']['channelIdMon']; + + // Topic for monitoring guest system + const monitorAlarm = new BLEAMonitorAlarmStack(app, `${pjPrefix}-MonitorAlarm`, { + notifyEmail: envVals['monitoringNotifyEmail'], + env: procEnv, + }); + + // Chatbot + const chatbotMonitor = new BLEAChatbotStack(app, `${pjPrefix}-ChatbotMonitor`, { + topicArn: monitorAlarm.alarmTopic.topicArn, + workspaceId: workspaceId, + channelId: channelIdMon, + env: procEnv, + }); + + // KMS CMK for Api App + const appKey = new BLEAKeyApiappStack(app, `${pjPrefix}-AppKeyNodejs`, { + env: procEnv, + }); + + // DynamoDB + const dynamoDb = new BLEADbDynamoDbStack(app, `${pjPrefix}-DBDynamoDb`, { + alarmTopic: monitorAlarm.alarmTopic, + appKey: appKey.kmsKey, + env: procEnv, + }); + dynamoDb.addDependency(appKey); + + // Lambda + const lambda = new BLEALambdaNodejsStack(app, `${pjPrefix}-LambdaNodejs`, { + alarmTopic: monitorAlarm.alarmTopic, + table: dynamoDb.table, + appKey: appKey.kmsKey, + env: procEnv, + }); + lambda.addDependency(dynamoDb); + + //REST Api + const restApi = new BLEARestApiStack(app, `${pjPrefix}-RestApi`, { + alarmTopic: monitorAlarm.alarmTopic, + getItemFunction: lambda.getItemFunction, + listItemsFunction: lambda.listItemsFunction, + putItemFunction: lambda.putItemFunction, + env: procEnv, + }); + restApi.addDependency(lambda); + + // Tagging "Environment" tag to all resources in this app + const envTagName = 'Environment'; + cdk.Tags.of(app).add(envTagName, envVals['envName']); + + // Test with snapshot + expect(SynthUtils.toCloudFormation(monitorAlarm)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(chatbotMonitor)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(appKey)).toMatchSnapshot(); + + expect(SynthUtils.toCloudFormation(dynamoDb)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(lambda)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(restApi)).toMatchSnapshot(); + }); +}); diff --git a/usecases/guest-apiapp-sample/test/blea-guest-apiapp-python-sample.test.ts b/usecases/guest-apiapp-sample/test/blea-guest-apiapp-python-sample.test.ts new file mode 100644 index 000000000..3a1cf7e1e --- /dev/null +++ b/usecases/guest-apiapp-sample/test/blea-guest-apiapp-python-sample.test.ts @@ -0,0 +1,88 @@ +import * as cdk from '@aws-cdk/core'; +import { SynthUtils } from '@aws-cdk/assert'; + +// Load cdk.json to get context parameters +import * as cdk_json from '../cdk.json'; +import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; +import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; +import { BLEAKeyApiappStack } from '../lib/blea-key-apiapp-stack'; +import { BLEADbDynamoDbStack } from '../lib/blea-db-dynamodb-stack'; +import { BLEALambdaPythonStack } from '../lib/blea-lambda-python-stack'; +import { BLEARestApiStack } from '../lib/blea-restapi-stack'; + +const procEnv = { + account: process.env.CDK_DEFAULT_ACCOUNT, + region: process.env.CDK_DEFAULT_REGION, +}; + +const pjPrefix = 'BLEA'; +const app = new cdk.App(); +const envKey = 'dev'; +const envVals = cdk_json['context'][envKey]; + +describe(`${pjPrefix} Guest Stack`, () => { + test('GuestAccount Serverless App Stacks', () => { + // Slack Notifier + const workspaceId = envVals['slackNotifier']['workspaceId']; + const channelIdMon = envVals['slackNotifier']['channelIdMon']; + + // Topic for monitoring guest system + const monitorAlarm = new BLEAMonitorAlarmStack(app, `${pjPrefix}-MonitorAlarm`, { + notifyEmail: envVals['monitoringNotifyEmail'], + env: procEnv, + }); + + // Chatbot + const chatbotMonitor = new BLEAChatbotStack(app, `${pjPrefix}-ChatbotMonitor`, { + topicArn: monitorAlarm.alarmTopic.topicArn, + workspaceId: workspaceId, + channelId: channelIdMon, + env: procEnv, + }); + + // KMS CMK for Api App + const appKey = new BLEAKeyApiappStack(app, `${pjPrefix}-AppKeyNodejs`, { + env: procEnv, + }); + + // DynamoDB + const dynamoDb = new BLEADbDynamoDbStack(app, `${pjPrefix}-DBDynamoDb`, { + alarmTopic: monitorAlarm.alarmTopic, + appKey: appKey.kmsKey, + env: procEnv, + }); + dynamoDb.addDependency(appKey); + + // Lambda + const lambda = new BLEALambdaPythonStack(app, `${pjPrefix}-LambdaPython`, { + alarmTopic: monitorAlarm.alarmTopic, + table: dynamoDb.table, + appKey: appKey.kmsKey, + env: procEnv, + }); + lambda.addDependency(dynamoDb); + + //REST Api + const restApi = new BLEARestApiStack(app, `${pjPrefix}-RestApi`, { + alarmTopic: monitorAlarm.alarmTopic, + getItemFunction: lambda.getItemFunction, + listItemsFunction: lambda.listItemsFunction, + putItemFunction: lambda.putItemFunction, + env: procEnv, + }); + restApi.addDependency(lambda); + + // Tagging "Environment" tag to all resources in this app + const envTagName = 'Environment'; + cdk.Tags.of(app).add(envTagName, envVals['envName']); + + // Test with snapshot + expect(SynthUtils.toCloudFormation(monitorAlarm)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(chatbotMonitor)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(appKey)).toMatchSnapshot(); + + expect(SynthUtils.toCloudFormation(dynamoDb)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(lambda)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(restApi)).toMatchSnapshot(); + }); +}); diff --git a/usecases/guest-apiapp-sample/tsconfig.json b/usecases/guest-apiapp-sample/tsconfig.json new file mode 100644 index 000000000..6b477d407 --- /dev/null +++ b/usecases/guest-apiapp-sample/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "./" + }, + "include": ["bin/**/*.ts", "lib/**/*.ts", "test/**/*.ts"] +} diff --git a/usecases/guest-webapp-sample/.gitignore b/usecases/guest-webapp-sample/.gitignore new file mode 100644 index 000000000..42197bd2a --- /dev/null +++ b/usecases/guest-webapp-sample/.gitignore @@ -0,0 +1,2 @@ +!/lambda/canary-app/nodejs/node_modules +!/lambda/canary-app/nodejs/node_modules/*.js diff --git a/usecases/guest-webapp-sample/README_ja.md b/usecases/guest-webapp-sample/README_ja.md new file mode 100644 index 000000000..b7fc679ef --- /dev/null +++ b/usecases/guest-webapp-sample/README_ja.md @@ -0,0 +1,22 @@ +### ECS システムサンプル + +![BLEA-GuestSampleECS](doc/images/BLEA-GuestSampleECS.png) + +- bin/blea-guest-ecsapp-sample.ts + - ECS/Fargate+AuroraPostgreSQL を使ったサンプルシステム + + + +### AutoSacling システムサンプル + +![BLEA-GuestSampleASG](doc/images/BLEA-GuestSampleASG.png) + +- bin/blea-guest-asgapp-sample.ts + - EC2 Autoscaling Group+AuroraPostgreSQL を使ったサンプルシステム + +### EC2 システムサンプル + +![BLEA-GuestSampleEC2](doc/images/BLEA-GuestSampleEC2.png) + +- bin/blea-guest-ec2app-sample.ts + - EC2+AuroraPostgreSQL を使ったサンプルシステム diff --git a/bin/blea-guest-asgapp-sample.ts b/usecases/guest-webapp-sample/bin/blea-guest-asgapp-sample.ts similarity index 75% rename from bin/blea-guest-asgapp-sample.ts rename to usecases/guest-webapp-sample/bin/blea-guest-asgapp-sample.ts index 554698677..3c119a9dd 100644 --- a/bin/blea-guest-asgapp-sample.ts +++ b/usecases/guest-webapp-sample/bin/blea-guest-asgapp-sample.ts @@ -1,10 +1,7 @@ #!/usr/bin/env node import * as cdk from '@aws-cdk/core'; import { BLEAVpcStack } from '../lib/blea-vpc-stack'; -import { BLEAFlowLogKeyStack } from '../lib/blea-flowlog-key-stack'; -import { BLEAFlowLogStack } from '../lib/blea-flowlog-stack'; -import { BLEAGeneralLogKeyStack } from '../lib/blea-generallog-key-stack'; -import { BLEAGeneralLogStack } from '../lib/blea-generallog-stack'; +import { BLEAKeyAppStack } from '../lib/blea-key-app-stack'; import { BLEADbAuroraPgStack } from '../lib/blea-db-aurora-pg-stack'; import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; @@ -59,37 +56,20 @@ new BLEAChatbotStack(app, `${pjPrefix}-ChatbotMonitor`, { env: getProcEnv(), }); -// CMK for General logs -const generalLogKey = new BLEAGeneralLogKeyStack(app, `${pjPrefix}-GeneralLogKey`, { env: getProcEnv() }); - -// Logging Bucket for General logs -const generalLog = new BLEAGeneralLogStack(app, `${pjPrefix}-GeneralLog`, { - kmsKey: generalLogKey.kmsKey, - env: getProcEnv(), -}); - -// CMK for VPC Flow logs -const flowLogKey = new BLEAFlowLogKeyStack(app, `${pjPrefix}-FlowlogKey`, { env: getProcEnv() }); - -// Logging Bucket for VPC Flow log -const flowLog = new BLEAFlowLogStack(app, `${pjPrefix}-FlowLog`, { - kmsKey: flowLogKey.kmsKey, - env: getProcEnv(), -}); +// CMK for Apps +const appKey = new BLEAKeyAppStack(app, `${pjPrefix}-AppKey`, { env: getProcEnv() }); // Networking const myVpcCidr = envVals['vpcCidr']; const prodVpc = new BLEAVpcStack(app, `${pjPrefix}-Vpc`, { myVpcCidr: myVpcCidr, - vpcFlowLogsBucket: flowLog.logBucket, env: getProcEnv(), }); // Application Stack (LoadBalancer + AutoScaling AP Servers) const asgApp = new BLEAASGAppStack(app, `${pjPrefix}-ASGApp`, { myVpc: prodVpc.myVpc, - logBucket: generalLog.logBucket, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, env: getProcEnv(), }); @@ -103,7 +83,7 @@ new BLEADbAuroraPgStack(app, `${pjPrefix}-DBAuroraPg`, { subnetGroupName: 'Protected', }), appServerSecurityGroup: asgApp.appServerSecurityGroup, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, alarmTopic: monitorAlarm.alarmTopic, env: getProcEnv(), }); diff --git a/bin/blea-guest-ec2app-sample.ts b/usecases/guest-webapp-sample/bin/blea-guest-ec2app-sample.ts similarity index 76% rename from bin/blea-guest-ec2app-sample.ts rename to usecases/guest-webapp-sample/bin/blea-guest-ec2app-sample.ts index f95e1007c..2daece9fa 100644 --- a/bin/blea-guest-ec2app-sample.ts +++ b/usecases/guest-webapp-sample/bin/blea-guest-ec2app-sample.ts @@ -1,10 +1,7 @@ #!/usr/bin/env node import * as cdk from '@aws-cdk/core'; import { BLEAVpcStack } from '../lib/blea-vpc-stack'; -import { BLEAFlowLogKeyStack } from '../lib/blea-flowlog-key-stack'; -import { BLEAFlowLogStack } from '../lib/blea-flowlog-stack'; -import { BLEAGeneralLogKeyStack } from '../lib/blea-generallog-key-stack'; -import { BLEAGeneralLogStack } from '../lib/blea-generallog-stack'; +import { BLEAKeyAppStack } from '../lib/blea-key-app-stack'; import { BLEADbAuroraPgStack } from '../lib/blea-db-aurora-pg-stack'; import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; import { BLEAInvestigationInstanceStack } from '../lib/blea-investigation-instance-stack'; @@ -60,37 +57,20 @@ new BLEAChatbotStack(app, `${pjPrefix}-ChatbotMonitor`, { env: getProcEnv(), }); -// CMK for General logs -const generalLogKey = new BLEAGeneralLogKeyStack(app, `${pjPrefix}-GeneralLogKey`, { env: getProcEnv() }); - -// Logging Bucket for General logs -const generalLog = new BLEAGeneralLogStack(app, `${pjPrefix}-GeneralLog`, { - kmsKey: generalLogKey.kmsKey, - env: getProcEnv(), -}); - -// CMK for VPC Flow logs -const flowLogKey = new BLEAFlowLogKeyStack(app, `${pjPrefix}-FlowlogKey`, { env: getProcEnv() }); - -// Logging Bucket for VPC Flow log -const flowLog = new BLEAFlowLogStack(app, `${pjPrefix}-FlowLog`, { - kmsKey: flowLogKey.kmsKey, - env: getProcEnv(), -}); +// CMK for Apps +const appKey = new BLEAKeyAppStack(app, `${pjPrefix}-AppKey`, { env: getProcEnv() }); // Networking const myVpcCidr = envVals['vpcCidr']; const prodVpc = new BLEAVpcStack(app, `${pjPrefix}-Vpc`, { myVpcCidr: myVpcCidr, - vpcFlowLogsBucket: flowLog.logBucket, env: getProcEnv(), }); // Application Stack (LoadBalancer + EC2 AP Servers) const ec2App = new BLEAEC2AppStack(app, `${pjPrefix}-EC2App`, { myVpc: prodVpc.myVpc, - logBucket: generalLog.logBucket, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, env: getProcEnv(), }); @@ -104,7 +84,7 @@ new BLEADbAuroraPgStack(app, `${pjPrefix}-DBAuroraPg`, { subnetGroupName: 'Protected', }), appServerSecurityGroup: ec2App.appServerSecurityGroup, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, alarmTopic: monitorAlarm.alarmTopic, env: getProcEnv(), }); diff --git a/bin/blea-guest-ecsapp-sample.ts b/usecases/guest-webapp-sample/bin/blea-guest-ecsapp-sample.ts similarity index 65% rename from bin/blea-guest-ecsapp-sample.ts rename to usecases/guest-webapp-sample/bin/blea-guest-ecsapp-sample.ts index 77b994bc2..a8a187e66 100644 --- a/bin/blea-guest-ecsapp-sample.ts +++ b/usecases/guest-webapp-sample/bin/blea-guest-ecsapp-sample.ts @@ -1,16 +1,17 @@ #!/usr/bin/env node import * as cdk from '@aws-cdk/core'; import { BLEAVpcStack } from '../lib/blea-vpc-stack'; -import { BLEAFlowLogKeyStack } from '../lib/blea-flowlog-key-stack'; -import { BLEAFlowLogStack } from '../lib/blea-flowlog-stack'; -import { BLEAGeneralLogKeyStack } from '../lib/blea-generallog-key-stack'; -import { BLEAGeneralLogStack } from '../lib/blea-generallog-stack'; +import { BLEAKeyAppStack } from '../lib/blea-key-app-stack'; import { BLEADbAuroraPgStack } from '../lib/blea-db-aurora-pg-stack'; import { BLEAECSAppStack } from '../lib/blea-ecsapp-stack'; import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; import { BLEABuildContainerStack } from '../lib/blea-build-container-stack'; import { BLEAECRStack } from '../lib/blea-ecr-stack'; +import { BLEAWafStack } from '../lib/blea-waf-stack'; +import { BLEAFrontendSimpleStack } from '../lib/blea-frontend-simple-stack'; +import { BLEADashboardStack } from '../lib/blea-dashboard-stack'; +import { BLEACanaryStack } from '../lib/blea-canary-stack'; const pjPrefix = 'BLEA'; @@ -61,29 +62,34 @@ new BLEAChatbotStack(app, `${pjPrefix}-ChatbotMonitor`, { env: getProcEnv(), }); -// CMK for General logs -const generalLogKey = new BLEAGeneralLogKeyStack(app, `${pjPrefix}-GeneralLogKey`, { env: getProcEnv() }); +// CMK for Apps +const appKey = new BLEAKeyAppStack(app, `${pjPrefix}-AppKey`, { env: getProcEnv() }); -// Logging Bucket for General logs -const generalLog = new BLEAGeneralLogStack(app, `${pjPrefix}-GeneralLog`, { - kmsKey: generalLogKey.kmsKey, +// Networking +const myVpcCidr = envVals['vpcCidr']; +const prodVpc = new BLEAVpcStack(app, `${pjPrefix}-Vpc`, { + myVpcCidr: myVpcCidr, env: getProcEnv(), }); -// CMK for VPC Flow logs -const flowLogKey = new BLEAFlowLogKeyStack(app, `${pjPrefix}-FlowlogKey`, { env: getProcEnv() }); - -// Logging Bucket for VPC Flow log -const flowLog = new BLEAFlowLogStack(app, `${pjPrefix}-FlowLog`, { - kmsKey: flowLogKey.kmsKey, +// WebACL for ALB +// Note: +// For CloudFront, you can create WebACL with these options. +// But currently this code doesn't work. As CDK don't provide cross-stack reference for corss environment. +// { scope: 'CLOUDFRONT', +// env: { +// account: getProcEnv().account, +// region: 'us-east-1', +// }} +const waf = new BLEAWafStack(app, `${pjPrefix}-Waf`, { + scope: 'REGIONAL', env: getProcEnv(), }); -// Networking -const myVpcCidr = envVals['vpcCidr']; -const prodVpc = new BLEAVpcStack(app, `${pjPrefix}-Vpc`, { - myVpcCidr: myVpcCidr, - vpcFlowLogsBucket: flowLog.logBucket, +// Simple CloudFront FrontEnd +const front = new BLEAFrontendSimpleStack(app, `${pjPrefix}-SimpleFrontStack`, { + myVpc: prodVpc.myVpc, + webAcl: waf.webAcl, env: getProcEnv(), }); @@ -104,17 +110,17 @@ const build_container = new BLEABuildContainerStack(app, `${pjPrefix}-ContainerI // Application Stack (LoadBalancer + Fargate) const ecsApp = new BLEAECSAppStack(app, `${pjPrefix}-ECSApp`, { myVpc: prodVpc.myVpc, - logBucket: generalLog.logBucket, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, repository: ecr.repository, imageTag: build_container.imageTag, alarmTopic: monitorAlarm.alarmTopic, + webFront: front, env: getProcEnv(), }); ecsApp.addDependency(build_container); // Aurora -new BLEADbAuroraPgStack(app, `${pjPrefix}-DBAuroraPg`, { +const dbCluster = new BLEADbAuroraPgStack(app, `${pjPrefix}-DBAuroraPg`, { myVpc: prodVpc.myVpc, dbName: 'mydbname', dbUser: envVals['dbUser'], @@ -123,8 +129,30 @@ new BLEADbAuroraPgStack(app, `${pjPrefix}-DBAuroraPg`, { subnetGroupName: 'Protected', }), appServerSecurityGroup: ecsApp.appServerSecurityGroup, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, + alarmTopic: monitorAlarm.alarmTopic, + env: getProcEnv(), +}); + +// Monitoring +const appCanary = new BLEACanaryStack(app, `${pjPrefix}-ECSAppCanary`, { alarmTopic: monitorAlarm.alarmTopic, + appEndpoint: front.cfDistribution.domainName, + env: getProcEnv(), +}); + +new BLEADashboardStack(app, `${pjPrefix}-ECSAppDashboard`, { + dashboardName: `${pjPrefix}-ECSApp`, + webFront: front, + ecsClusterName: ecsApp.ecsClusterName, + ecsServiceName: ecsApp.ecsServiceName, + appTargetGroupName: ecsApp.appTargetGroupName, + dbClusterName: dbCluster.dbClusterName, + albTgUnHealthyHostCountAlarm: ecsApp.albTgUnHealthyHostCountAlarm, + ecsScaleOnRequestCount: ecsApp.ecsScaleOnRequestCount, + ecsTargetUtilizationPercent: ecsApp.ecsTargetUtilizationPercent, + canaryDurationAlarm: appCanary.canaryDurationAlarm, + canaryFailedAlarm: appCanary.canaryFailedAlarm, env: getProcEnv(), }); diff --git a/usecases/guest-webapp-sample/bin/blea-guest-ecsapp-ssl-sample.ts b/usecases/guest-webapp-sample/bin/blea-guest-ecsapp-ssl-sample.ts new file mode 100644 index 000000000..f6541fb8b --- /dev/null +++ b/usecases/guest-webapp-sample/bin/blea-guest-ecsapp-ssl-sample.ts @@ -0,0 +1,166 @@ +#!/usr/bin/env node +import * as cdk from '@aws-cdk/core'; +import { BLEAVpcStack } from '../lib/blea-vpc-stack'; +import { BLEAKeyAppStack } from '../lib/blea-key-app-stack'; +import { BLEADbAuroraPgStack } from '../lib/blea-db-aurora-pg-stack'; +import { BLEAECSAppStack } from '../lib/blea-ecsapp-stack'; +import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; +import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; +import { BLEABuildContainerStack } from '../lib/blea-build-container-stack'; +import { BLEAECRStack } from '../lib/blea-ecr-stack'; +import { BLEAWafStack } from '../lib/blea-waf-stack'; +import { BLEAFrontendSslStack } from '../lib/blea-frontend-ssl-stack'; +import { BLEADashboardStack } from '../lib/blea-dashboard-stack'; +import { BLEACanaryStack } from '../lib/blea-canary-stack'; + +const pjPrefix = 'BLEA'; + +const app = new cdk.App(); + +// ----------------------- Load context variables ------------------------------ +// This context need to be specified in args +const argContext = 'environment'; +const envKey = app.node.tryGetContext(argContext); +if (envKey == undefined) + throw new Error(`Please specify environment with context option. ex) cdk deploy -c ${argContext}=dev`); +const envVals = app.node.tryGetContext(envKey); +if (envVals == undefined) throw new Error('Invalid environment.'); + +// ----------------------- Environment variables for stack ------------------------------ +// Default enviroment +const procEnvDefault = { + account: process.env.CDK_DEFAULT_ACCOUNT, + region: process.env.CDK_DEFAULT_REGION, +}; + +// Define account id and region from context. +// If "env" isn't defined on the environment variable in context, use account and region specified by "--profile". +function getProcEnv() { + if (envVals['env'] && envVals['env']['account'] && envVals['env']['region']) { + return { account: envVals['env']['account'], region: envVals['env']['region'] }; + } else { + return procEnvDefault; + } +} + +// ----------------------- Guest System Stacks ------------------------------ + +// Slack Notifier +const workspaceId = envVals['slackNotifier']['workspaceId']; +const channelIdMon = envVals['slackNotifier']['channelIdMon']; + +// Topic for monitoring guest system +const monitorAlarm = new BLEAMonitorAlarmStack(app, `${pjPrefix}-MonitorAlarm`, { + notifyEmail: envVals['monitoringNotifyEmail'], + env: getProcEnv(), +}); + +new BLEAChatbotStack(app, `${pjPrefix}-ChatbotMonitor`, { + topicArn: monitorAlarm.alarmTopic.topicArn, + workspaceId: workspaceId, + channelId: channelIdMon, + env: getProcEnv(), +}); + +// CMK for Apps +const appKey = new BLEAKeyAppStack(app, `${pjPrefix}-AppKey`, { env: getProcEnv() }); + +// Networking +const myVpcCidr = envVals['vpcCidr']; +const prodVpc = new BLEAVpcStack(app, `${pjPrefix}-Vpc`, { + myVpcCidr: myVpcCidr, + env: getProcEnv(), +}); + +// WebACL for ALB +// Note: +// For CloudFront, you can create WebACL with these options. +// But currently this code doesn't work. As CDK don't provide cross-stack reference for corss environment. +// { scope: 'CLOUDFRONT', +// env: { +// account: getProcEnv().account, +// region: 'us-east-1', +// }} +const waf = new BLEAWafStack(app, `${pjPrefix}-Waf`, { + scope: 'REGIONAL', + env: getProcEnv(), +}); + +// My Domain FrontEnd +const front = new BLEAFrontendSslStack(app, `${pjPrefix}-SSLFrontStack`, { + myVpc: prodVpc.myVpc, + hostedZoneId: envVals['hostedZoneId'], + domainName: envVals['domainName'], + hostName: envVals['hostName'], + webAcl: waf.webAcl, + env: getProcEnv(), +}); + +// Container Repository +const ecr = new BLEAECRStack(app, `${pjPrefix}-ECR`, { + // TODO: will get "repositoryName" from parameters + repositoryName: 'apprepo', + alarmTopic: monitorAlarm.alarmTopic, + env: getProcEnv(), +}); + +// Build Container Image +const build_container = new BLEABuildContainerStack(app, `${pjPrefix}-ContainerImage`, { + ecrRepository: ecr.repository, + env: getProcEnv(), +}); + +// Application Stack (LoadBalancer + Fargate) +const ecsApp = new BLEAECSAppStack(app, `${pjPrefix}-ECSAppSSL`, { + myVpc: prodVpc.myVpc, + appKey: appKey.kmsKey, + repository: ecr.repository, + imageTag: build_container.imageTag, + alarmTopic: monitorAlarm.alarmTopic, + webFront: front, + env: getProcEnv(), +}); +ecsApp.addDependency(build_container); + +// Aurora +const dbCluster = new BLEADbAuroraPgStack(app, `${pjPrefix}-DBAuroraPg`, { + myVpc: prodVpc.myVpc, + dbName: 'mydbname', + dbUser: envVals['dbUser'], + dbAllocatedStorage: 25, + vpcSubnets: prodVpc.myVpc.selectSubnets({ + subnetGroupName: 'Protected', + }), + appServerSecurityGroup: ecsApp.appServerSecurityGroup, + appKey: appKey.kmsKey, + alarmTopic: monitorAlarm.alarmTopic, + env: getProcEnv(), +}); + +// Monitoring +const appCanary = new BLEACanaryStack(app, `${pjPrefix}-ECSAppSSLCanary`, { + alarmTopic: monitorAlarm.alarmTopic, + appEndpoint: [envVals['hostName'], envVals['domainName']].join('.'), + env: getProcEnv(), +}); + +new BLEADashboardStack(app, `${pjPrefix}-ECSAppSSLDashboard`, { + dashboardName: `${pjPrefix}-ECSAppSSL`, + webFront: front, + ecsClusterName: ecsApp.ecsClusterName, + ecsServiceName: ecsApp.ecsServiceName, + appTargetGroupName: ecsApp.appTargetGroupName, + dbClusterName: dbCluster.dbClusterName, + albTgUnHealthyHostCountAlarm: ecsApp.albTgUnHealthyHostCountAlarm, + ecsScaleOnRequestCount: ecsApp.ecsScaleOnRequestCount, + ecsTargetUtilizationPercent: ecsApp.ecsTargetUtilizationPercent, + canaryDurationAlarm: appCanary.canaryDurationAlarm, + canaryFailedAlarm: appCanary.canaryFailedAlarm, + env: getProcEnv(), +}); + +// --------------------------------- Tagging ------------------------------------- + +// Tagging "Environment" tag to all resources in this app +const envTagName = 'Environment'; +cdk.Tags.of(app).add(envTagName, envVals['envName']); diff --git a/cdk.json b/usecases/guest-webapp-sample/cdk.json similarity index 54% rename from cdk.json rename to usecases/guest-webapp-sample/cdk.json index 0406aadb3..3122c4ef0 100644 --- a/cdk.json +++ b/usecases/guest-webapp-sample/cdk.json @@ -1,63 +1,55 @@ { - "app": "npx ts-node bin/blea-base-sa.ts", + "app": "npx ts-node bin/blea-guest-ecsapp-sample.ts", "context": { "dev": { - "description": "Environment variables for blea-guest-*-samples.ts", + "description": "Context samples for Dev - Anonymous account & region", "envName": "Development", "vpcCidr": "10.100.0.0/16", - "securityNotifyEmail": "notify-security@example.com", "monitoringNotifyEmail": "notify-monitoring@example.com", "dbUser": "dbadmin", "slackNotifier": { "workspaceId": "T8XXXXXXX", - "channelIdSec": "C01XXXXXXXX", "channelIdMon": "C01YYYYYYYY" - } + }, + "domainName": "example.com", + "hostedZoneId": "Z0123456789", + "hostName": "www" }, "stage": { - "description": "Environment variables for blea-guest-*-samples.ts", + "description": "Context samples for Staging - Specific account & region ", "env": { "account": "111111111111", "region": "ap-northeast-1" }, "envName": "Staging", "vpcCidr": "10.110.0.0/16", - "securityNotifyEmail": "notify-security@example.com", "monitoringNotifyEmail": "notify-monitoring@example.com", "dbUser": "dbadmin", "slackNotifier": { "workspaceId": "T8XXXXXXX", - "channelIdSec": "C01XXXXXXXX", "channelIdMon": "C01YYYYYYYY" - } + }, + "domainName": "example.com", + "hostedZoneId": "Z0123456789", + "hostName": "www" }, "prod": { - "description": "Environment variables for blea-guest-*-samples.ts", + "description": "Context samples for Production - Specific account & region ", "env": { "account": "222222222222", "region": "ap-northeast-1" }, "envName": "Production", "vpcCidr": "10.120.0.0/16", - "securityNotifyEmail": "notify-security@example.com", "monitoringNotifyEmail": "notify-monitoring@example.com", "dbUser": "dbadmin", "slackNotifier": { "workspaceId": "T8XXXXXXX", - "channelIdSec": "C01XXXXXXXX", "channelIdMon": "C01YYYYYYYY" - } - }, - "ctaudit": { - "description": "Environment variables for blea-base-ct-audit.ts", - "env": { - "account": "333333333333", - "region": "ap-northeast-1" }, - "slackNotifier": { - "workspaceId": "T8XXXXXXX", - "channelIdAgg": "C01ZZZZZZZZ" - } + "domainName": "example.com", + "hostedZoneId": "Z0123456789", + "hostName": "www" } } } diff --git a/assets/sample-app/Dockerfile b/usecases/guest-webapp-sample/container/sample-ecs-app/Dockerfile similarity index 100% rename from assets/sample-app/Dockerfile rename to usecases/guest-webapp-sample/container/sample-ecs-app/Dockerfile diff --git a/assets/sample-app/buildspec.yml b/usecases/guest-webapp-sample/container/sample-ecs-app/buildspec.yml similarity index 99% rename from assets/sample-app/buildspec.yml rename to usecases/guest-webapp-sample/container/sample-ecs-app/buildspec.yml index 3257c1ef3..0b14172a7 100644 --- a/assets/sample-app/buildspec.yml +++ b/usecases/guest-webapp-sample/container/sample-ecs-app/buildspec.yml @@ -16,4 +16,3 @@ phases: - echo Build completed on `date` - echo Pushing the Docker image... - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG - diff --git a/usecases/guest-webapp-sample/jest.config.js b/usecases/guest-webapp-sample/jest.config.js new file mode 100644 index 000000000..98bd8c9e5 --- /dev/null +++ b/usecases/guest-webapp-sample/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + roots: ['/test'], + testMatch: ['**/*.test.ts'], + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, +}; diff --git a/usecases/guest-webapp-sample/lambda/canary-app/nodejs/node_modules/index.js b/usecases/guest-webapp-sample/lambda/canary-app/nodejs/node_modules/index.js new file mode 100644 index 000000000..0c91c35eb --- /dev/null +++ b/usecases/guest-webapp-sample/lambda/canary-app/nodejs/node_modules/index.js @@ -0,0 +1,55 @@ +var synthetics = require('Synthetics'); +const log = require('SyntheticsLogger'); + +const apiCanaryBlueprint = async function () { + + // Handle validation for positive scenario + const validateSuccessful = async function(res) { + return new Promise((resolve, reject) => { + if (res.statusCode < 200 || res.statusCode > 299) { + throw res.statusCode + ' ' + res.statusMessage; + } + + let responseBody = ''; + res.on('data', (d) => { + responseBody += d; + }); + + res.on('end', () => { + // Add validation on 'responseBody' here if required. + resolve(); + }); + }); + }; + + + // Set request option for Verify /locations + let requestOptionsStep1 = { + hostname: process.env.TARGETHOST, + method: 'GET', + path: process.env.TARGETPATH, + port: '443', + protocol: 'https:', + body: "", + headers: {} + }; + requestOptionsStep1['headers']['User-Agent'] = [synthetics.getCanaryUserAgentString(), requestOptionsStep1['headers']['User-Agent']].join(' '); + + // Set step config option for Verify /locations + let stepConfig1 = { + includeRequestHeaders: true, + includeResponseHeaders: true, + includeRequestBody: true, + includeResponseBody: true, + restrictedHeaders: [], + continueOnHttpStepFailure: true + }; + + await synthetics.executeHttpStep('Verify /locations', requestOptionsStep1, validateSuccessful, stepConfig1); + + +}; + +exports.handler = async () => { + return await apiCanaryBlueprint(); +}; diff --git a/lib/blea-asgapp-stack.ts b/usecases/guest-webapp-sample/lib/blea-asgapp-stack.ts similarity index 82% rename from lib/blea-asgapp-stack.ts rename to usecases/guest-webapp-sample/lib/blea-asgapp-stack.ts index 22333c550..ca270860e 100644 --- a/lib/blea-asgapp-stack.ts +++ b/usecases/guest-webapp-sample/lib/blea-asgapp-stack.ts @@ -4,12 +4,11 @@ import * as autoscaling from '@aws-cdk/aws-autoscaling'; import * as elbv2 from '@aws-cdk/aws-elasticloadbalancingv2'; import * as s3 from '@aws-cdk/aws-s3'; import * as iam from '@aws-cdk/aws-iam'; -import { Duration, Tags } from '@aws-cdk/core'; import * as kms from '@aws-cdk/aws-kms'; +import * as ri from '@aws-cdk/region-info'; export interface BLEAASGAppStackProps extends cdk.StackProps { myVpc: ec2.Vpc; - logBucket: s3.Bucket; appKey: kms.IKey; } @@ -26,7 +25,6 @@ export class BLEAASGAppStack extends cdk.Stack { vpc: props.myVpc, allowAllOutbound: false, }); - securityGroupForAlb.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(80)); securityGroupForAlb.addEgressRule(ec2.Peer.anyIpv4(), ec2.Port.allTcp()); //Security Group for Instance of App @@ -38,14 +36,6 @@ export class BLEAASGAppStack extends cdk.Stack { securityGroupForApp.addEgressRule(ec2.Peer.anyIpv4(), ec2.Port.allTcp()); this.appServerSecurityGroup = securityGroupForApp; - //Security Group for RDS - // const securityGroupForRDS = new ec2.SecurityGroup(this, 'SgRds', { - // vpc: props.myVpc, - // allowAllOutbound: false, - // }); - // securityGroupForRDS.addIngressRule(securityGroupForApp, ec2.Port.tcp(3306)); - // securityGroupForRDS.addEgressRule(securityGroupForApp, ec2.Port.allTcp()); - // ------------ AppServers (AutoScaling) --------------- // InstanceProfile for AppServers @@ -92,7 +82,7 @@ export class BLEAASGAppStack extends cdk.Stack { role: ssmInstanceRole, userData: userDataForApp, healthCheck: autoscaling.HealthCheck.elb({ - grace: Duration.seconds(60), + grace: cdk.Duration.seconds(60), }), }); @@ -102,22 +92,13 @@ export class BLEAASGAppStack extends cdk.Stack { }); // Tags for AppServers - Tags.of(fleetForApp).add('Name', 'AppServer', { applyToLaunchedInstances: true }); - Tags.of(fleetForApp).add('Role', 'FRA_AppServer', { applyToLaunchedInstances: true }); + cdk.Tags.of(fleetForApp).add('Name', 'AppServer', { applyToLaunchedInstances: true }); + cdk.Tags.of(fleetForApp).add('Role', 'FRA_AppServer', { applyToLaunchedInstances: true }); // ------------ Application LoadBalancer --------------- - // S3 Bucket for ALB Logging (Needs SSE-S3) - // https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions - const albLogBucket = new s3.Bucket(this, 'AlbLogBucket', { - accessControl: s3.BucketAccessControl.PRIVATE, - encryption: s3.BucketEncryption.S3_MANAGED, - blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, - removalPolicy: cdk.RemovalPolicy.RETAIN, - }); - // ALB for App Server - const lbForApp = new elbv2.ApplicationLoadBalancer(this, 'AlbApp', { + const lbForApp = new elbv2.ApplicationLoadBalancer(this, 'AsgAlb', { vpc: props.myVpc, internetFacing: true, securityGroup: securityGroupForAlb, @@ -127,6 +108,14 @@ export class BLEAASGAppStack extends cdk.Stack { }); // Enable ALB Access Logging + const albLogBucket = new s3.Bucket(this, 'alb-log-bucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + encryption: s3.BucketEncryption.S3_MANAGED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + removalPolicy: cdk.RemovalPolicy.RETAIN, + enforceSSL: true, + }); + lbForApp.setAttribute('access_logs.s3.enabled', 'true'); lbForApp.setAttribute('access_logs.s3.bucket', albLogBucket.bucketName); @@ -139,7 +128,8 @@ export class BLEAASGAppStack extends cdk.Stack { new iam.PolicyStatement({ effect: iam.Effect.ALLOW, actions: ['s3:PutObject'], - principals: [new iam.AccountPrincipal('582318560864')], // ALB Account for ap-northeast-1 + // ALB access logging needs S3 put permission from ALB service account for the region + principals: [new iam.AccountPrincipal(ri.RegionInfo.get(cdk.Stack.of(this).region).elbv2Account)], resources: [albLogBucket.arnForObjects(`AWSLogs/${cdk.Stack.of(this).account}/*`)], }), ); @@ -166,7 +156,7 @@ export class BLEAASGAppStack extends cdk.Stack { ); // TargetGroup for App Server - const tgForApp = new elbv2.ApplicationTargetGroup(this, 'TgApp', { + const tgForApp = new elbv2.ApplicationTargetGroup(this, 'TgAsgApp', { vpc: props.myVpc, port: 80, protocol: elbv2.ApplicationProtocol.HTTP, @@ -175,13 +165,12 @@ export class BLEAASGAppStack extends cdk.Stack { enabled: true, path: '/index.html', }, - deregistrationDelay: Duration.seconds(60), + deregistrationDelay: cdk.Duration.seconds(60), }); // ALB Listener - TargetGroup - lbForApp.addListener('Listerner', { + lbForApp.addListener('AsgListerner', { port: 80, - open: true, defaultTargetGroups: [tgForApp], }); diff --git a/lib/blea-build-container-stack.ts b/usecases/guest-webapp-sample/lib/blea-build-container-stack.ts similarity index 96% rename from lib/blea-build-container-stack.ts rename to usecases/guest-webapp-sample/lib/blea-build-container-stack.ts index 6f3bdd964..5f33edd68 100644 --- a/lib/blea-build-container-stack.ts +++ b/usecases/guest-webapp-sample/lib/blea-build-container-stack.ts @@ -17,13 +17,13 @@ export class BLEABuildContainerStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props: BLEABuildContainerStackProps) { super(scope, id, props); - const appName = 'sample-app'; + const appName = 'sample-ecs-app'; this.imageTag = appName; // Upload Dockerfile and buildspec.yml to s3 const asset = new s3assets.Asset(this, 'app-asset', { - path: path.join(__dirname, '../assets/sample-app'), + path: path.join(__dirname, '../container/sample-ecs-app'), }); // CodeBuild project diff --git a/usecases/guest-webapp-sample/lib/blea-canary-stack.ts b/usecases/guest-webapp-sample/lib/blea-canary-stack.ts new file mode 100644 index 000000000..77f04dd1a --- /dev/null +++ b/usecases/guest-webapp-sample/lib/blea-canary-stack.ts @@ -0,0 +1,101 @@ +import * as cdk from '@aws-cdk/core'; +import * as iam from '@aws-cdk/aws-iam'; +import * as sns from '@aws-cdk/aws-sns'; +import * as s3 from '@aws-cdk/aws-s3'; +import * as synthetics from '@aws-cdk/aws-synthetics'; +import * as path from 'path'; +import * as cw from '@aws-cdk/aws-cloudwatch'; +import * as cw_actions from '@aws-cdk/aws-cloudwatch-actions'; + +interface BLEACanaryStackProps extends cdk.StackProps { + alarmTopic: sns.Topic; + appEndpoint: string; +} + +// !!! This is implemented by developer preview feature !!! +// CDK APIs might be changed +// - https://docs.aws.amazon.com/cdk/api/latest/docs/aws-synthetics-readme.html + +export class BLEACanaryStack extends cdk.Stack { + public readonly canaryDurationAlarm: cw.Alarm; + public readonly canaryFailedAlarm: cw.Alarm; + + constructor(scope: cdk.Construct, id: string, props: BLEACanaryStackProps) { + super(scope, id, props); + + // ---------------------------------------------------------------------------- + // App Canary + // + + // Create artifact bucket and apply some security settings. + const canaryS3Bucket = new s3.Bucket(this, `canaryArtifact`, { + accessControl: s3.BucketAccessControl.PRIVATE, + encryption: s3.BucketEncryption.S3_MANAGED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + removalPolicy: cdk.RemovalPolicy.RETAIN, + enforceSSL: true, + }); + + // Create canary + const appCanary = new synthetics.Canary(this, 'BLEACanaryApp', { + schedule: synthetics.Schedule.rate(cdk.Duration.minutes(1)), + test: synthetics.Test.custom({ + code: synthetics.Code.fromAsset(path.join(__dirname, '../lambda/canary-app')), + handler: 'index.handler', + }), + // It's recommended that use the latest runtime version. + // See: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html + runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_2, + environmentVariables: { + TARGETHOST: props.appEndpoint, + TARGETPATH: '/', + }, + artifactsBucketLocation: { bucket: canaryS3Bucket }, + }); + + // Fixed for UnauthorizedAttemptsAlarm + // See: https://github.com/aws/aws-cdk/issues/13572 + appCanary.role.attachInlinePolicy( + new iam.Policy(this, 'appCanalyPolicyToS3', { + statements: [ + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['s3:GetBucketLocation'], + resources: [appCanary.artifactsBucket.bucketArn], + }), + ], + }), + ); + + // Create duration alarm + this.canaryDurationAlarm = appCanary + .metricDuration({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'canaryDuration', { + evaluationPeriods: 2, + datapointsToAlarm: 2, + threshold: 400, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }); + this.canaryDurationAlarm.addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // Create failed run alarm + this.canaryFailedAlarm = appCanary + .metricFailed({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'canaryFailed', { + evaluationPeriods: 3, + datapointsToAlarm: 3, + threshold: 0.5, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + treatMissingData: cw.TreatMissingData.NOT_BREACHING, + }); + this.canaryFailedAlarm.addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + } +} diff --git a/usecases/guest-webapp-sample/lib/blea-chatbot-stack.ts b/usecases/guest-webapp-sample/lib/blea-chatbot-stack.ts new file mode 100644 index 000000000..c9de87b5b --- /dev/null +++ b/usecases/guest-webapp-sample/lib/blea-chatbot-stack.ts @@ -0,0 +1,35 @@ +import * as cdk from '@aws-cdk/core'; +import * as cb from '@aws-cdk/aws-chatbot'; +import * as iam from '@aws-cdk/aws-iam'; + +export interface BLEAChatbotStackProps extends cdk.StackProps { + topicArn: string; + channelId: string; + workspaceId: string; +} + +// NOTICE: AWS Chatbot can send events from supported services only. +// See: https://docs.aws.amazon.com/ja_jp/chatbot/latest/adminguide/related-services.html +export class BLEAChatbotStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props: BLEAChatbotStackProps) { + super(scope, id, props); + + // AWS Chatbot configuration for sending message + const chatbotRole = new iam.Role(this, 'ChatbotRole', { + assumedBy: new iam.ServicePrincipal('chatbot.amazonaws.com'), + managedPolicies: [ + iam.ManagedPolicy.fromAwsManagedPolicyName('ReadOnlyAccess'), + iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchReadOnlyAccess'), + ], + }); + + // !!! Create SlackChannel and add aws chatbot app to the room + new cb.CfnSlackChannelConfiguration(this, 'ChatbotChannel', { + configurationName: `${id}-${props.workspaceId}`, + slackChannelId: props.channelId, + iamRoleArn: chatbotRole.roleArn, + slackWorkspaceId: props.workspaceId, + snsTopicArns: [props.topicArn], + }); + } +} diff --git a/usecases/guest-webapp-sample/lib/blea-dashboard-stack.ts b/usecases/guest-webapp-sample/lib/blea-dashboard-stack.ts new file mode 100644 index 000000000..f1eb18217 --- /dev/null +++ b/usecases/guest-webapp-sample/lib/blea-dashboard-stack.ts @@ -0,0 +1,794 @@ +import * as cdk from '@aws-cdk/core'; +import * as cw from '@aws-cdk/aws-cloudwatch'; +import { IBLEAFrontend } from './blea-frontend-interface'; + +interface BLEADashboardStackProps extends cdk.StackProps { + dashboardName: string; + webFront: IBLEAFrontend; + ecsClusterName: string; + ecsServiceName: string; + appTargetGroupName: string; + dbClusterName: string; + albTgUnHealthyHostCountAlarm: cw.Alarm; + ecsTargetUtilizationPercent: number; + ecsScaleOnRequestCount: number; + canaryDurationAlarm: cw.Alarm; + canaryFailedAlarm: cw.Alarm; +} + +export class BLEADashboardStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props: BLEADashboardStackProps) { + super(scope, id, props); + + /* + * + * Metrics definition + * Note: These definitions do not create any resource. Just dashboard widget refer to these metrics. + * + */ + + // CloudFront + // Available metrics: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/programming-cloudwatch-metrics.html + const cfRequests = new cw.Metric({ + namespace: 'AWS/CloudFront', + metricName: 'Requests', + dimensions: { + Region: 'Global', + DistributionId: props.webFront.cfDistribution.distributionId, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.NONE, + region: 'us-east-1', // cloudfront defined on us-east-1 + }); + const cf5xxErrorRate = new cw.Metric({ + namespace: 'AWS/CloudFront', + metricName: '5xxErrorRate', + dimensions: { + Region: 'Global', + DistributionId: props.webFront.cfDistribution.distributionId, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.PERCENT, + region: 'us-east-1', // cloudfront defined on us-east-1 + }); + const cf4xxErrorRate = new cw.Metric({ + namespace: 'AWS/CloudFront', + metricName: '4xxErrorRate', + dimensions: { + Region: 'Global', + DistributionId: props.webFront.cfDistribution.distributionId, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.PERCENT, + region: 'us-east-1', // cloudfront defined on us-east-1 + }); + const cfTotalErrorRate = new cw.Metric({ + namespace: 'AWS/CloudFront', + metricName: 'TotalErrorRate', + dimensions: { + Region: 'Global', + DistributionId: props.webFront.cfDistribution.distributionId, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.PERCENT, + region: 'us-east-1', // cloudfront defined on us-east-1 + }); + + // Application Load Balancing + // Available metrics: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html + const albRequests = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'RequestCount', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const albNewConnectionCount = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'NewConnectionCount', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const albRejectedConnectionCount = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'RejectedConnectionCount', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const albTLSNegotiationErrors = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'ClientTLSNegotiationErrorCount', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const alb5xxErrors = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'HTTPCode_ELB_5XX_Count', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const alb4xxErrors = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'HTTPCode_ELB_4XX_Count', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + + // Target Group + // Available metrics: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html + const albTgRequests = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'HTTPCode_Target_2XX_Count', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const albTg5xxErrors = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'HTTPCode_Target_5XX_Count', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const albTg4xxErrors = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'HTTPCode_Target_4XX_Count', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const albTgConnectionErrors = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'TargetConnectionErrorCount', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const albTgTLSNegotiationErrors = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'TargetConnectionErrorCount', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const albTgResponseTime = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'TargetResponseTime', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.SECONDS, + }); + const albTgRequestCountPerTarget = new cw.Metric({ + namespace: 'AWS/ApplicationELB', + metricName: 'RequestCountPerTarget', + dimensions: { + LoadBalancer: props.webFront.appAlb.loadBalancerFullName, + TargetGroup: props.appTargetGroupName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + + // ECS + // Available metrics: + // - https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-metrics.html + // - https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-ECS.html + const ecsCPUUtilization = new cw.Metric({ + namespace: 'AWS/ECS', + metricName: 'CPUUtilization', + dimensions: { + ClusterName: props.ecsClusterName, + ServiceName: props.ecsServiceName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.PERCENT, + }); + const ecsMemoryUtilization = new cw.Metric({ + namespace: 'AWS/ECS', + metricName: 'MemoryUtilization', + dimensions: { + ClusterName: props.ecsClusterName, + ServiceName: props.ecsServiceName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.PERCENT, + }); + const ecsDesiredTaskCount = new cw.Metric({ + namespace: 'ECS/ContainerInsights', + metricName: 'DesiredTaskCount', + dimensions: { + ClusterName: props.ecsClusterName, + ServiceName: props.ecsServiceName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const ecsRunningTaskCount = new cw.Metric({ + namespace: 'ECS/ContainerInsights', + metricName: 'RunningTaskCount', + dimensions: { + ClusterName: props.ecsClusterName, + ServiceName: props.ecsServiceName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const ecsPendingTaskCount = new cw.Metric({ + namespace: 'ECS/ContainerInsights', + metricName: 'PendingTaskCount', + dimensions: { + ClusterName: props.ecsClusterName, + ServiceName: props.ecsServiceName, + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + + // Aurora + // Available metrics: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.Monitoring.Metrics.html + // for Writer & Reader + const dbWriterDatabaseConnections = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'DatabaseConnections', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "Writer: ${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const dbReaderDatabaseConnections = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'DatabaseConnections', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'READER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + label: "Reader: ${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.COUNT, + }); + const dbWriterCPUUtilization = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'CPUUtilization', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "Writer: ${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.PERCENT, + }); + const dbReaderCPUUtilization = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'CPUUtilization', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'READER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "Reader: ${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.PERCENT, + }); + const dbWriterFreeableMemory = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'FreeableMemory', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "Writer: ${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MEGABITS, + }); + const dbReaderFreeableMemory = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'FreeableMemory', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'READER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "Reader: ${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MEGABITS, + }); + const dbWriterFreeLocalStorage = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'FreeLocalStorage', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "Writer: ${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MEGABITS, + }); + const dbReaderFreeLocalStorage = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'FreeLocalStorage', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'READER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "Reader: ${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MEGABITS, + }); + + // for Writer + const dbWriterInsertLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'InsertLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MILLISECONDS, + }); + const dbWriterSelectLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'SelectLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MILLISECONDS, + }); + const dbWriterUpdateLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'UpdateLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MILLISECONDS, + }); + const dbWriterCommitLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'CommitLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MILLISECONDS, + }); + const dbWriterDDLLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'DDLLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MILLISECONDS, + }); + const dbWriterDeleteLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'DeleteLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MILLISECONDS, + }); + const dbWriterDMLLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'DeleteLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MILLISECONDS, + }); + const dbWriterReadLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'ReadLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.SECONDS, + }); + const dbWriterWriteLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'WriteLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'WRITER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.SECONDS, + }); + + // for Reader + const dbReaderSelectLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'SelectLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'READER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.MILLISECONDS, + }); + const dbReaderReadLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'ReadLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'READER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.SECONDS, + }); + const dbReaderWriteLatency = new cw.Metric({ + namespace: 'AWS/RDS', + metricName: 'WriteLatency', + dimensions: { + DBClusterIdentifier: props.dbClusterName, + Role: 'READER', + }, + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + label: "${PROP('MetricName')} /${PROP('Period')}sec", + unit: cw.Unit.SECONDS, + }); + + /* + * + * Dashboard definition + * + * Note: + * - This sample summarize widgets in metrics group such as Requests, ResponseTime, Errors, Resources. + * We added header text widget on top of each metrics group. + * - If you use the name CloudWatch-Default, the dashboard appears on the overview on the CloudWatch home page. + * See: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create_dashboard.html + * + * - Widget Array Structure (height, width, x, y) + * width=24 means Full screen width. This sample is define widget height as 6. + * You can just add widgets in array, x and y axis are defined well by CDK. + * See: https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/CloudWatch-Dashboard-Body-Structure.html#CloudWatch-Dashboard-Properties-Widgets-Structure + * + * - "stacked: true," means stack(add) each metrics. + * + * - Label for each metrics is defined on metrics object and you can use "Dynamic Label". + * We usually use "${PROP('MetricName')} /${PROP('Period')}sec" so we can see period of the metrics. + * See: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html + * + */ + + const dashboard = new cw.Dashboard(this, 'Dashboard', { + dashboardName: props.dashboardName, + }); + dashboard.addWidgets( + // Canary + new cw.TextWidget({ + markdown: '# Canary', + height: 1, + width: 24, + }), + + new cw.AlarmWidget({ + title: 'Canary response time', + width: 12, + height: 6, + alarm: props.canaryDurationAlarm, + }), + new cw.AlarmWidget({ + title: 'Canary request failed', + width: 12, + height: 6, + alarm: props.canaryFailedAlarm, + }), + + // Requests + new cw.TextWidget({ + markdown: '# Requests', + height: 1, + width: 24, + }), + new cw.GraphWidget({ + title: 'CloudFront Requests', + width: 6, + height: 6, + stacked: false, + left: [cfRequests], + }), + new cw.GraphWidget({ + title: 'ALB Requests', + width: 6, + height: 6, + stacked: false, + left: [albRequests, albNewConnectionCount, albRejectedConnectionCount], + }), + new cw.GraphWidget({ + title: 'Target Group Requests', + width: 6, + height: 6, + stacked: false, + left: [albTgRequests], + }), + new cw.GraphWidget({ + title: 'Aurora Connections', + width: 6, + height: 6, + stacked: false, + left: [dbWriterDatabaseConnections, dbReaderDatabaseConnections], + }), + + // Response Time + new cw.TextWidget({ + markdown: '# Response Time', + height: 1, + width: 24, + }), + new cw.GraphWidget({ + title: 'Target Group Response Time', + width: 8, + height: 6, + stacked: false, + left: [albTgResponseTime], + }), + new cw.GraphWidget({ + title: 'Aurora Operation Lantency (Writer)', + width: 8, + height: 6, + stacked: false, + left: [ + dbWriterInsertLatency, + dbWriterSelectLatency, + dbWriterUpdateLatency, + dbWriterCommitLatency, + dbWriterDDLLatency, + dbWriterDeleteLatency, + dbWriterDMLLatency, + ], + right: [dbWriterReadLatency, dbWriterWriteLatency], + }), + new cw.GraphWidget({ + title: 'Aurora Operation Lantency (Reader)', + width: 8, + height: 6, + stacked: false, + left: [dbReaderSelectLatency], + right: [dbReaderReadLatency, dbReaderWriteLatency], + }), + + // Errors + new cw.TextWidget({ + markdown: '# Errors', + height: 1, + width: 24, + }), + new cw.GraphWidget({ + title: 'CloudFront Error Rates', + width: 6, + height: 6, + // stacked: false, + // left: [cf5xxErrorRate, cf4xxErrorRate, cfTotalErrorRate], + stacked: true, + left: [cf5xxErrorRate, cf4xxErrorRate], + }), + new cw.GraphWidget({ + title: 'ALB Errors', + width: 6, + height: 6, + stacked: false, + left: [albTLSNegotiationErrors, alb5xxErrors, alb4xxErrors], + }), + new cw.AlarmWidget({ + title: 'Alarm for UnHealthy Host in Target Group', + width: 6, + height: 6, + alarm: props.albTgUnHealthyHostCountAlarm, // This alarm is defined on ECSApp Stack + }), + new cw.GraphWidget({ + title: 'Target Group Errors', + width: 6, + height: 6, + // stacked: false, + stacked: true, + left: [albTg5xxErrors, albTg4xxErrors, albTgConnectionErrors, albTgTLSNegotiationErrors], + }), + + // Resources + new cw.TextWidget({ + markdown: '# Resources', + height: 1, + width: 24, + }), + new cw.GraphWidget({ + title: 'ECS CPU Utilization', + width: 6, + height: 6, + stacked: false, + left: [ecsCPUUtilization], + }), + new cw.GraphWidget({ + title: 'ECS Memory Utilization', + width: 6, + height: 6, + stacked: false, + left: [ecsMemoryUtilization], + }), + new cw.GraphWidget({ + title: 'ECS Desired Task Count', + width: 6, + height: 6, + stacked: false, + left: [ecsDesiredTaskCount], + }), + new cw.GraphWidget({ + title: 'ECS Task Count', + width: 6, + height: 6, + stacked: true, + left: [ecsRunningTaskCount, ecsPendingTaskCount], + }), + new cw.GraphWidget({ + title: 'ECS Auto Scaling with Requests per tasks', + width: 12, + height: 6, + stacked: false, + left: [albTgRequestCountPerTarget], + leftAnnotations: [ + { + value: props.ecsScaleOnRequestCount, // Defined on ECSApp Stack + label: 'Threshold: Requests per tasks', + color: '#aec7e8', + fill: cw.Shading.BELOW, + }, + ], + right: [ecsRunningTaskCount, ecsPendingTaskCount], + }), + new cw.GraphWidget({ + title: 'ECS Auto Scaling with CPU Utilization', + width: 12, + height: 6, + stacked: false, + left: [ecsCPUUtilization], + leftAnnotations: [ + { + value: props.ecsTargetUtilizationPercent, // Defined on ECSApp Stack + label: 'Threshold: CPU Utilization', + color: '#aec7e8', + fill: cw.Shading.BELOW, + }, + ], + right: [ecsRunningTaskCount, ecsPendingTaskCount], + }), + new cw.GraphWidget({ + title: 'Aurora CPU Utilization', + width: 6, + height: 6, + stacked: false, + left: [dbWriterCPUUtilization, dbReaderCPUUtilization], + }), + new cw.GraphWidget({ + title: 'Aurora Free Memory', + width: 6, + height: 6, + stacked: false, + left: [dbWriterFreeableMemory, dbReaderFreeableMemory], + }), + new cw.GraphWidget({ + title: 'Aurora Free Local Storage', + width: 6, + height: 6, + stacked: false, + left: [dbWriterFreeLocalStorage, dbReaderFreeLocalStorage], + }), + ); + } +} diff --git a/lib/blea-db-aurora-pg-sl-stack.ts b/usecases/guest-webapp-sample/lib/blea-db-aurora-pg-sl-stack.ts similarity index 100% rename from lib/blea-db-aurora-pg-sl-stack.ts rename to usecases/guest-webapp-sample/lib/blea-db-aurora-pg-sl-stack.ts diff --git a/lib/blea-db-aurora-pg-stack.ts b/usecases/guest-webapp-sample/lib/blea-db-aurora-pg-stack.ts similarity index 98% rename from lib/blea-db-aurora-pg-stack.ts rename to usecases/guest-webapp-sample/lib/blea-db-aurora-pg-stack.ts index 4fc478f62..a05cddaf8 100644 --- a/lib/blea-db-aurora-pg-stack.ts +++ b/usecases/guest-webapp-sample/lib/blea-db-aurora-pg-stack.ts @@ -19,6 +19,8 @@ export interface BLEADbAuroraPgStackProps extends cdk.StackProps { } export class BLEADbAuroraPgStack extends cdk.Stack { + public readonly dbClusterName: string; + constructor(scope: cdk.Construct, id: string, props: BLEADbAuroraPgStackProps) { super(scope, id, props); @@ -51,6 +53,7 @@ export class BLEADbAuroraPgStack extends cdk.Stack { instanceIdentifierBase: 'instance', }); cluster.connections.allowDefaultPortFrom(props.appServerSecurityGroup); + this.dbClusterName = cluster.clusterIdentifier; // ----------------------- Alarms for RDS ----------------------------- diff --git a/lib/blea-ec2app-stack.ts b/usecases/guest-webapp-sample/lib/blea-ec2app-stack.ts similarity index 77% rename from lib/blea-ec2app-stack.ts rename to usecases/guest-webapp-sample/lib/blea-ec2app-stack.ts index 89c098219..fa6925d9c 100644 --- a/lib/blea-ec2app-stack.ts +++ b/usecases/guest-webapp-sample/lib/blea-ec2app-stack.ts @@ -1,14 +1,14 @@ import * as cdk from '@aws-cdk/core'; import * as ec2 from '@aws-cdk/aws-ec2'; import * as elbv2 from '@aws-cdk/aws-elasticloadbalancingv2'; +import * as elbv2targets from '@aws-cdk/aws-elasticloadbalancingv2-targets'; import * as s3 from '@aws-cdk/aws-s3'; import * as iam from '@aws-cdk/aws-iam'; -import { Duration, Tags } from '@aws-cdk/core'; import * as kms from '@aws-cdk/aws-kms'; +import * as ri from '@aws-cdk/region-info'; export interface BLEAEC2AppStackProps extends cdk.StackProps { myVpc: ec2.Vpc; - logBucket: s3.Bucket; appKey: kms.IKey; } @@ -25,7 +25,6 @@ export class BLEAEC2AppStack extends cdk.Stack { vpc: props.myVpc, allowAllOutbound: false, }); - securityGroupForAlb.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(80)); securityGroupForAlb.addEgressRule(ec2.Peer.anyIpv4(), ec2.Port.allTcp()); //Security Group for Instance of App @@ -37,27 +36,10 @@ export class BLEAEC2AppStack extends cdk.Stack { securityGroupForApp.addEgressRule(ec2.Peer.anyIpv4(), ec2.Port.allTcp()); this.appServerSecurityGroup = securityGroupForApp; - //Security Group for RDS - // const securityGroupForRDS = new ec2.SecurityGroup(this, 'SgRds', { - // vpc: props.myVpc, - // allowAllOutbound: false, - // }); - // securityGroupForRDS.addIngressRule(securityGroupForApp, ec2.Port.tcp(3306)); - // securityGroupForRDS.addEgressRule(securityGroupForApp, ec2.Port.allTcp()); - // ------------ Application LoadBalancer --------------- - // S3 Bucket for ALB Logging (Needs SSE-S3) - // https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions - const albLogBucket = new s3.Bucket(this, 'AlbLogBucket', { - accessControl: s3.BucketAccessControl.PRIVATE, - encryption: s3.BucketEncryption.S3_MANAGED, - blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, - removalPolicy: cdk.RemovalPolicy.RETAIN, - }); - // ALB for App Server - const lbForApp = new elbv2.ApplicationLoadBalancer(this, 'AlbApp', { + const lbForApp = new elbv2.ApplicationLoadBalancer(this, 'Ec2AlbApp', { vpc: props.myVpc, internetFacing: true, securityGroup: securityGroupForAlb, @@ -67,6 +49,14 @@ export class BLEAEC2AppStack extends cdk.Stack { }); // Enable ALB Access Logging + const albLogBucket = new s3.Bucket(this, 'alb-log-bucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + encryption: s3.BucketEncryption.S3_MANAGED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + removalPolicy: cdk.RemovalPolicy.RETAIN, + enforceSSL: true, + }); + lbForApp.setAttribute('access_logs.s3.enabled', 'true'); lbForApp.setAttribute('access_logs.s3.bucket', albLogBucket.bucketName); @@ -79,7 +69,8 @@ export class BLEAEC2AppStack extends cdk.Stack { new iam.PolicyStatement({ effect: iam.Effect.ALLOW, actions: ['s3:PutObject'], - principals: [new iam.AccountPrincipal('582318560864')], // ALB Account for ap-northeast-1 + // ALB access logging needs S3 put permission from ALB service account for the region + principals: [new iam.AccountPrincipal(ri.RegionInfo.get(cdk.Stack.of(this).region).elbv2Account)], resources: [albLogBucket.arnForObjects(`AWSLogs/${cdk.Stack.of(this).account}/*`)], }), ); @@ -105,26 +96,6 @@ export class BLEAEC2AppStack extends cdk.Stack { }), ); - // TargetGroup for App Server - const tgForApp = new elbv2.ApplicationTargetGroup(this, 'TgApp', { - vpc: props.myVpc, - port: 80, - protocol: elbv2.ApplicationProtocol.HTTP, - targetType: elbv2.TargetType.INSTANCE, - healthCheck: { - enabled: true, - path: '/index.html', - }, - deregistrationDelay: Duration.seconds(60), - }); - - // ALB Listener - TargetGroup - lbForApp.addListener('ListnerApp', { - port: 80, - open: true, - defaultTargetGroups: [tgForApp], - }); - // ------------ AppServers (AutoScaling) --------------- // InstanceProfile for AppServers @@ -152,6 +123,7 @@ export class BLEAEC2AppStack extends cdk.Stack { }).availabilityZones; const numAzs = subnetAzs.length; + const instanceTargetIds: elbv2targets.InstanceIdTarget[] = new Array(0); for (let i = 0; i < 2; i++) { const instance = new ec2.Instance(this, `AppEc2${i}`, { vpc: props.myVpc, @@ -176,9 +148,30 @@ export class BLEAEC2AppStack extends cdk.Stack { ], }); // Tags for AppServers - Tags.of(instance).add('Name', 'AppServer' + i, { applyToLaunchedInstances: true }); - Tags.of(instance).add('Role', 'FRA_AppServer', { applyToLaunchedInstances: true }); - tgForApp.addTarget(new elbv2.InstanceTarget(instance.instanceId)); + cdk.Tags.of(instance).add('Name', 'AppServer' + i, { applyToLaunchedInstances: true }); + cdk.Tags.of(instance).add('Role', 'FRA_AppServer', { applyToLaunchedInstances: true }); + instanceTargetIds.push(new elbv2targets.InstanceIdTarget(instance.instanceId, 80)); } + + // ALB Listener - TargetGroup + const listener = lbForApp.addListener('Ec2Listerner', { + port: 80, + }); + + // TargetGroup for App Server + const lbForAppTargetGroup = listener.addTargets('Ec2App', { + protocol: elbv2.ApplicationProtocol.HTTP, + targets: instanceTargetIds, + deregistrationDelay: cdk.Duration.seconds(30), + }); + + // SAMPLE: Another way, how to set attibute to TargetGroup - example) Modify algorithm type + // lbForAppTargetGroup.setAttribute('load_balancing.algorithm.type', 'least_outstanding_requests'); + + // SAMPLE: Setup HealthCheck for app + // lbForAppTargetGroup.configureHealthCheck({ + // path: '/health', + // enabled: true, + // }); } } diff --git a/lib/blea-ecr-stack.ts b/usecases/guest-webapp-sample/lib/blea-ecr-stack.ts similarity index 100% rename from lib/blea-ecr-stack.ts rename to usecases/guest-webapp-sample/lib/blea-ecr-stack.ts diff --git a/usecases/guest-webapp-sample/lib/blea-ecsapp-stack.ts b/usecases/guest-webapp-sample/lib/blea-ecsapp-stack.ts new file mode 100644 index 000000000..f9be98943 --- /dev/null +++ b/usecases/guest-webapp-sample/lib/blea-ecsapp-stack.ts @@ -0,0 +1,343 @@ +import * as cdk from '@aws-cdk/core'; +import * as ec2 from '@aws-cdk/aws-ec2'; +import * as elbv2 from '@aws-cdk/aws-elasticloadbalancingv2'; +import * as iam from '@aws-cdk/aws-iam'; +import * as kms from '@aws-cdk/aws-kms'; +import * as ecs from '@aws-cdk/aws-ecs'; +import * as sns from '@aws-cdk/aws-sns'; +import * as cw from '@aws-cdk/aws-cloudwatch'; +import * as cwe from '@aws-cdk/aws-events'; +import * as cwet from '@aws-cdk/aws-events-targets'; +import * as cwl from '@aws-cdk/aws-logs'; +import * as cw_actions from '@aws-cdk/aws-cloudwatch-actions'; +import * as ecr from '@aws-cdk/aws-ecr'; +import { IBLEAFrontend } from './blea-frontend-interface'; + +export interface BLEAECSAppStackProps extends cdk.StackProps { + myVpc: ec2.Vpc; + appKey: kms.IKey; + repository: ecr.Repository; + imageTag: string; + alarmTopic: sns.Topic; + webFront: IBLEAFrontend; +} + +export class BLEAECSAppStack extends cdk.Stack { + public readonly ecsClusterName: string; + public readonly ecsServiceName: string; + public readonly appTargetGroupName: string; + public readonly appServerSecurityGroup: ec2.SecurityGroup; + public readonly albTgUnHealthyHostCountAlarm: cw.Alarm; + public readonly ecsTargetUtilizationPercent: number; + public readonly ecsScaleOnRequestCount: number; + + constructor(scope: cdk.Construct, id: string, props: BLEAECSAppStackProps) { + super(scope, id, props); + + // --------------------- Fargate Cluster ---------------------------- + + // ---- PreRequesties + + // Role for ECS Agent + // The task execution role grants the Amazon ECS container and Fargate agents permission to make AWS API calls on your behalf. + // https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html + const executionRole = new iam.Role(this, 'EcsTaskExecutionRole', { + assumedBy: new iam.ServicePrincipal('ecs-tasks.amazonaws.com'), + managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonECSTaskExecutionRolePolicy')], + }); + + // Role for Container + // With IAM roles for Amazon ECS tasks, you can specify an IAM role that can be used by the containers in a task. + // https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html + const serviceTaskRole = new iam.Role(this, 'EcsServiceTaskRole', { + assumedBy: new iam.ServicePrincipal('ecs-tasks.amazonaws.com'), + }); + + // SecurityGroup for Fargate service + // - Inbound access will be added automatically on associating ALB + // - Outbound access will be used for DB and AWS APIs + const securityGroupForFargate = new ec2.SecurityGroup(this, 'SgFargate', { + vpc: props.myVpc, + allowAllOutbound: true, // for AWS APIs + }); + this.appServerSecurityGroup = securityGroupForFargate; + + // CloudWatch Logs Group for Container + const fargateLogGroup = new cwl.LogGroup(this, 'FargateLogGroup', { + retention: cwl.RetentionDays.THREE_MONTHS, + encryptionKey: props.appKey, + }); + + // Permission to access KMS Key from CloudWatch Logs + props.appKey.addToResourcePolicy( + new iam.PolicyStatement({ + actions: ['kms:Encrypt*', 'kms:Decrypt*', 'kms:ReEncrypt*', 'kms:GenerateDataKey*', 'kms:Describe*'], + principals: [new iam.ServicePrincipal(`logs.${cdk.Stack.of(this).region}.amazonaws.com`)], + resources: ['*'], + conditions: { + ArnLike: { + 'kms:EncryptionContext:aws:logs:arn': `arn:aws:logs:${cdk.Stack.of(this).region}:${ + cdk.Stack.of(this).account + }:*`, + }, + }, + }), + ); + + // ---- Cluster definition + + // Fargate Cluster + // - Enabling CloudWatch ContainerInsights + const ecsCluster = new ecs.Cluster(this, 'Cluster', { + vpc: props.myVpc, + containerInsights: true, + enableFargateCapacityProviders: true, + }); + this.ecsClusterName = ecsCluster.clusterName; + + // Task definition + // https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html + const ecsTask = new ecs.FargateTaskDefinition(this, 'EcsTask', { + executionRole: executionRole, + taskRole: serviceTaskRole, + cpu: 256, + memoryLimitMiB: 512, + }); + + // Container + const ecsContainer = ecsTask.addContainer('EcsApp', { + // -- SAMPLE: if you want to use your ECR repository, you can use like this. + image: ecs.ContainerImage.fromEcrRepository(props.repository, props.imageTag), + + // -- SAMPLE: if you want to use DockerHub, you can use like this. + // image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample"), + + environment: { + ENVIRONMENT_VARIABLE_SAMPLE_KEY: 'Environment Variable Sample Value', + }, + logging: ecs.LogDriver.awsLogs({ + streamPrefix: 'BLEA-ECSApp-', + logGroup: fargateLogGroup, + }), + // -- SAMPLE: Get value from SecretsManager + // secrets: { + // SECRET_VARIABLE_SAMPLE_KEY: ecs.Secret.fromSecretsManager(secretsManagerConstruct, 'secret_key'), + // }, + }); + + ecsContainer.addPortMappings({ + containerPort: 80, + }); + + // Service + const ecsService = new ecs.FargateService(this, 'FargateService', { + cluster: ecsCluster, + taskDefinition: ecsTask, + desiredCount: 2, + + // The LATEST is recommended platform version. + // But if you need another version replace this. + // See also: + // - https://docs.aws.amazon.com/AmazonECS/latest/userguide/platform_versions.html + // - https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ecs.FargatePlatformVersion.html + platformVersion: ecs.FargatePlatformVersion.LATEST, + + // https://docs.aws.amazon.com/cdk/api/latest/docs/aws-ecs-readme.html#fargate-capacity-providers + capacityProviderStrategies: [ + { + capacityProvider: 'FARGATE', + weight: 1, + }, + // -- SAMPLE: Fargate Spot + //{ + // capacityProvider: 'FARGATE_SPOT', + // weight: 2, + //}, + ], + vpcSubnets: props.myVpc.selectSubnets({ + subnetGroupName: 'Private', // For public DockerHub + //subnetGroupName: 'Protected' // For your ECR. Need to use PrivateLinke for ECR + }), + securityGroups: [securityGroupForFargate], + }); + this.ecsServiceName = ecsService.serviceName; + + // Define ALB Target Group + // https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-elasticloadbalancingv2.ApplicationTargetGroup.html + const lbForAppTargetGroup = props.webFront.appAlbListerner.addTargets('EcsApp', { + protocol: elbv2.ApplicationProtocol.HTTP, + targets: [ecsService], + deregistrationDelay: cdk.Duration.seconds(30), + }); + this.appTargetGroupName = lbForAppTargetGroup.targetGroupFullName; + + // SAMPLE: Another way, how to set attibute to TargetGroup - example) Modify algorithm type + // lbForAppTargetGroup.setAttribute('load_balancing.algorithm.type', 'least_outstanding_requests'); + + // SAMPLE: Setup HealthCheck for app + // lbForAppTargetGroup.configureHealthCheck({ + // path: '/health', + // enabled: true, + // }); + + // ECS Task AutoScaling + // https://docs.aws.amazon.com/cdk/api/latest/docs/aws-ecs-readme.html#task-auto-scaling + const ecsScaling = ecsService.autoScaleTaskCount({ + minCapacity: 2, + maxCapacity: 10, + }); + + // Scaling with CPU Utilization avarage on all tasks + this.ecsTargetUtilizationPercent = 50; // Used in Dashboard Stack + ecsScaling.scaleOnCpuUtilization('CpuScaling', { + targetUtilizationPercent: this.ecsTargetUtilizationPercent, + }); + + // Scaling with Requests per tasks + this.ecsScaleOnRequestCount = 10000; // Used in Dashboard Stack + ecsScaling.scaleOnRequestCount('RequestScaling', { + requestsPerTarget: this.ecsScaleOnRequestCount, + targetGroup: lbForAppTargetGroup, + }); + + // ----------------------- Alarms for ECS ----------------------------- + ecsService + .metricCpuUtilization({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'FargateCpuUtil', { + evaluationPeriods: 3, + datapointsToAlarm: 3, + threshold: 80, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // RunningTaskCount - CloudWatch Container Insights metric (Custom metric) + // This is a sample of full set configuration for Metric and Alarm + // See: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarm-evaluation + // + // new cw.Metric({ + // metricName: 'RunningTaskCount', + // namespace: 'ECS/ContainerInsights', + // dimensions: { + // ClusterName: ecsCluster.clusterName, + // ServiceName: ecsService.serviceName, + // }, + // period: cdk.Duration.minutes(1), + // statistic: cw.Statistic.AVERAGE, + // }) + // .createAlarm(this, 'RunningTaskCount', { + // evaluationPeriods: 3, + // datapointsToAlarm: 2, + // threshold: 1, + // comparisonOperator: cw.ComparisonOperator.LESS_THAN_THRESHOLD, + // actionsEnabled: true, + // }) + // .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // ----------------------- Alarms for ALB ----------------------------- + + // Alarm for ALB - ResponseTime + props.webFront.appAlb + .metricTargetResponseTime({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'AlbResponseTime', { + evaluationPeriods: 3, + threshold: 100, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // Alarm for ALB - HTTP 4XX Count + props.webFront.appAlb + .metricHttpCodeElb(elbv2.HttpCodeElb.ELB_4XX_COUNT, { + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + }) + .createAlarm(this, 'AlbHttp4xx', { + evaluationPeriods: 3, + threshold: 10, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // Alarm for ALB - HTTP 5XX Count + props.webFront.appAlb + .metricHttpCodeElb(elbv2.HttpCodeElb.ELB_5XX_COUNT, { + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.SUM, + }) + .createAlarm(this, 'AlbHttp5xx', { + evaluationPeriods: 3, + threshold: 10, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // Alarm for ALB TargetGroup - HealthyHostCount + lbForAppTargetGroup + .metricHealthyHostCount({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'AlbTgHealthyHostCount', { + evaluationPeriods: 3, + threshold: 1, + comparisonOperator: cw.ComparisonOperator.LESS_THAN_THRESHOLD, + actionsEnabled: true, + }) + .addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // Alarm for ALB TargetGroup - UnHealthyHostCount + // This alarm will be used on Dashbaord + this.albTgUnHealthyHostCountAlarm = lbForAppTargetGroup + .metricUnhealthyHostCount({ + period: cdk.Duration.minutes(1), + statistic: cw.Statistic.AVERAGE, + }) + .createAlarm(this, 'AlbTgUnHealthyHostCount', { + evaluationPeriods: 3, + threshold: 1, + comparisonOperator: cw.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD, + actionsEnabled: true, + }); + this.albTgUnHealthyHostCountAlarm.addAlarmAction(new cw_actions.SnsAction(props.alarmTopic)); + + // ----------------------- Event notification for ECS ----------------------------- + // https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html#ecs_service_events + new cwe.Rule(this, 'ECSServiceActionEventRule', { + description: 'CloudWatch Event Rule to send notification on ECS Service action events.', + enabled: true, + eventPattern: { + source: ['aws.ecs'], + detailType: ['ECS Service Action'], + detail: { + eventType: ['WARN', 'ERROR'], + }, + }, + targets: [new cwet.SnsTopic(props.alarmTopic)], + }); + + // https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html#ecs_service_deployment_events + new cwe.Rule(this, 'ECSServiceDeploymentEventRule', { + description: 'CloudWatch Event Rule to send notification on ECS Service deployment events.', + enabled: true, + eventPattern: { + source: ['aws.ecs'], + detailType: ['ECS Deployment State Change'], + detail: { + eventType: ['WARN', 'ERROR'], + }, + }, + targets: [new cwet.SnsTopic(props.alarmTopic)], + }); + } +} diff --git a/usecases/guest-webapp-sample/lib/blea-frontend-interface.ts b/usecases/guest-webapp-sample/lib/blea-frontend-interface.ts new file mode 100644 index 000000000..fa04098f9 --- /dev/null +++ b/usecases/guest-webapp-sample/lib/blea-frontend-interface.ts @@ -0,0 +1,12 @@ +import * as ec2 from '@aws-cdk/aws-ec2'; +import * as elbv2 from '@aws-cdk/aws-elasticloadbalancingv2'; +import * as s3 from '@aws-cdk/aws-s3'; +import * as cloudfront from '@aws-cdk/aws-cloudfront'; + +export interface IBLEAFrontend { + readonly appAlb: elbv2.ApplicationLoadBalancer; + readonly appAlbListerner: elbv2.ApplicationListener; + readonly appAlbSecurityGroup: ec2.SecurityGroup; + readonly webContentsBucket: s3.Bucket; + readonly cfDistribution: cloudfront.Distribution; +} diff --git a/usecases/guest-webapp-sample/lib/blea-frontend-simple-stack.ts b/usecases/guest-webapp-sample/lib/blea-frontend-simple-stack.ts new file mode 100644 index 000000000..5ad1289bf --- /dev/null +++ b/usecases/guest-webapp-sample/lib/blea-frontend-simple-stack.ts @@ -0,0 +1,177 @@ +import * as cdk from '@aws-cdk/core'; +import * as wafv2 from '@aws-cdk/aws-wafv2'; +import * as ec2 from '@aws-cdk/aws-ec2'; +import * as elbv2 from '@aws-cdk/aws-elasticloadbalancingv2'; +import * as s3 from '@aws-cdk/aws-s3'; +import * as iam from '@aws-cdk/aws-iam'; +import * as ri from '@aws-cdk/region-info'; +import * as cloudfront from '@aws-cdk/aws-cloudfront'; +import * as origins from '@aws-cdk/aws-cloudfront-origins'; +import { IBLEAFrontend } from './blea-frontend-interface'; + +interface BLEAFrontendSimpleStackProps extends cdk.StackProps { + myVpc: ec2.Vpc; + webAcl: wafv2.CfnWebACL; +} + +export class BLEAFrontendSimpleStack extends cdk.Stack implements IBLEAFrontend { + public readonly appAlb: elbv2.ApplicationLoadBalancer; + public readonly appAlbListerner: elbv2.ApplicationListener; + public readonly appAlbSecurityGroup: ec2.SecurityGroup; + public readonly webContentsBucket: s3.Bucket; + public readonly cfDistribution: cloudfront.Distribution; + + constructor(scope: cdk.Construct, id: string, props: BLEAFrontendSimpleStackProps) { + super(scope, id, props); + + // --- Security Groups --- + + //Security Group of ALB for App + const securityGroupForAlb = new ec2.SecurityGroup(this, 'SgAlb', { + vpc: props.myVpc, + allowAllOutbound: true, + }); + this.appAlbSecurityGroup = securityGroupForAlb; + + // ------------ S3 Bucket for Web Contents --------------- + // This bucket cannot be encrypted by KMS CMK + // See: https://aws.amazon.com/premiumsupport/knowledge-center/s3-website-cloudfront-error-403/ + // + const webContentBucket = new s3.Bucket(this, 'WebBucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + removalPolicy: cdk.RemovalPolicy.RETAIN, + versioned: true, + encryption: s3.BucketEncryption.S3_MANAGED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + enforceSSL: true, + }); + this.webContentsBucket = webContentBucket; + + // ------------ Application LoadBalancer --------------- + + // ALB for App Server + const lbForApp = new elbv2.ApplicationLoadBalancer(this, 'Alb', { + vpc: props.myVpc, + internetFacing: true, + securityGroup: securityGroupForAlb, + vpcSubnets: props.myVpc.selectSubnets({ + subnetGroupName: 'Public', + }), + }); + this.appAlb = lbForApp; + + const lbForAppListener = lbForApp.addListener('http', { + port: 80, + protocol: elbv2.ApplicationProtocol.HTTP, + open: true, + }); + this.appAlbListerner = lbForAppListener; + + // Enabled WAF for ALB + new wafv2.CfnWebACLAssociation(this, 'WebAclAssociation', { + resourceArn: lbForApp.loadBalancerArn, + webAclArn: props.webAcl.attrArn, + }); + + // Enable ALB Access Logging + // + // This bucket can not be encrypted with KMS CMK + // See: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions + // + const albLogBucket = new s3.Bucket(this, 'alb-log-bucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + encryption: s3.BucketEncryption.S3_MANAGED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + removalPolicy: cdk.RemovalPolicy.RETAIN, + enforceSSL: true, + }); + + lbForApp.setAttribute('access_logs.s3.enabled', 'true'); + lbForApp.setAttribute('access_logs.s3.bucket', albLogBucket.bucketName); + + // Permissions for Access Logging + // Why don't use bForApp.logAccessLogs(albLogBucket); ? + // Because logAccessLogs add wider permission to other account (PutObject*). S3 will become Noncompliant on Security Hub [S3.6] + // See: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-s3-6 + // See: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions + albLogBucket.addToResourcePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['s3:PutObject'], + // ALB access logging needs S3 put permission from ALB service account for the region + principals: [new iam.AccountPrincipal(ri.RegionInfo.get(cdk.Stack.of(this).region).elbv2Account)], + resources: [albLogBucket.arnForObjects(`AWSLogs/${cdk.Stack.of(this).account}/*`)], + }), + ); + albLogBucket.addToResourcePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['s3:PutObject'], + principals: [new iam.ServicePrincipal('delivery.logs.amazonaws.com')], + resources: [albLogBucket.arnForObjects(`AWSLogs/${cdk.Stack.of(this).account}/*`)], + conditions: { + StringEquals: { + 's3:x-amz-acl': 'bucket-owner-full-control', + }, + }, + }), + ); + albLogBucket.addToResourcePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['s3:GetBucketAcl'], + principals: [new iam.ServicePrincipal('delivery.logs.amazonaws.com')], + resources: [albLogBucket.bucketArn], + }), + ); + + // --------- CloudFront Distrubution + const cfDistribution = new cloudfront.Distribution(this, 'Distribution', { + defaultBehavior: { + origin: new origins.LoadBalancerV2Origin(lbForApp, { + protocolPolicy: cloudfront.OriginProtocolPolicy.HTTP_ONLY, + }), + viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + allowedMethods: cloudfront.AllowedMethods.ALLOW_ALL, + cachePolicy: cloudfront.CachePolicy.CACHING_DISABLED, + originRequestPolicy: cloudfront.OriginRequestPolicy.ALL_VIEWER, + }, + additionalBehaviors: { + '/static/*': { + origin: new origins.S3Origin(webContentBucket), + viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED, + }, + }, + errorResponses: [ + { + httpStatus: 403, + responseHttpStatus: 403, + responsePagePath: '/static/sorry.html', + ttl: cdk.Duration.seconds(20), + }, + ], + defaultRootObject: '/', // Need for SecurityHub Findings CloudFront.1 compliant + + // Don't define domainName or certificate for default CloudFront SSL setting. + // domainNames: + // certificate: + + // WAF defined on us-east-1 + // webAclId: props.webAcl.attrArn, + + // logging + enableLogging: true, + logBucket: new s3.Bucket(this, 'CloudFrontLogBucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + encryption: s3.BucketEncryption.S3_MANAGED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + removalPolicy: cdk.RemovalPolicy.RETAIN, + enforceSSL: true, + }), + logIncludesCookies: true, + logFilePrefix: 'CloudFrontAccessLogs/', + }); + this.cfDistribution = cfDistribution; + } +} diff --git a/usecases/guest-webapp-sample/lib/blea-frontend-ssl-stack.ts b/usecases/guest-webapp-sample/lib/blea-frontend-ssl-stack.ts new file mode 100644 index 000000000..7909dd0da --- /dev/null +++ b/usecases/guest-webapp-sample/lib/blea-frontend-ssl-stack.ts @@ -0,0 +1,218 @@ +import * as cdk from '@aws-cdk/core'; +import * as wafv2 from '@aws-cdk/aws-wafv2'; +import * as ec2 from '@aws-cdk/aws-ec2'; +import * as elbv2 from '@aws-cdk/aws-elasticloadbalancingv2'; +import * as s3 from '@aws-cdk/aws-s3'; +import * as iam from '@aws-cdk/aws-iam'; +import * as ri from '@aws-cdk/region-info'; +import * as cloudfront from '@aws-cdk/aws-cloudfront'; +import * as origins from '@aws-cdk/aws-cloudfront-origins'; +import * as r53 from '@aws-cdk/aws-route53'; +import * as acm from '@aws-cdk/aws-certificatemanager'; +import * as r53targets from '@aws-cdk/aws-route53-targets'; +import { IBLEAFrontend } from './blea-frontend-interface'; + +interface BLEAFrontendSslStackProps extends cdk.StackProps { + myVpc: ec2.Vpc; + hostedZoneId: string; + domainName: string; + hostName: string; + webAcl: wafv2.CfnWebACL; +} + +export class BLEAFrontendSslStack extends cdk.Stack implements IBLEAFrontend { + public readonly appAlb: elbv2.ApplicationLoadBalancer; + public readonly appAlbListerner: elbv2.ApplicationListener; + public readonly appAlbSecurityGroup: ec2.SecurityGroup; + public readonly webContentsBucket: s3.Bucket; + public readonly cfDistribution: cloudfront.Distribution; + + constructor(scope: cdk.Construct, id: string, props: BLEAFrontendSslStackProps) { + super(scope, id, props); + + const appHostedZone = r53.HostedZone.fromHostedZoneAttributes(this, 'appHostedZone', { + zoneName: props.domainName, + hostedZoneId: props.hostedZoneId, + }); + + // ------------------------------------------------------------------------ + // Certificates + // + // Note: CloudFront and ALB need certificate with the same FQDN + + // for cloudfront (us-east-1 Cert) + const cloudfrontCert = new acm.DnsValidatedCertificate(this, 'cfCertificate', { + domainName: [props.hostName, props.domainName].join('.'), + hostedZone: appHostedZone, + region: 'us-east-1', + }); + + // for ELB (Local regional Cert) + const albCert = new acm.DnsValidatedCertificate(this, 'apiCertificate', { + domainName: [props.hostName, props.domainName].join('.'), + hostedZone: appHostedZone, + region: cdk.Stack.of(this).region, + }); + + // --- Security Groups --- + + //Security Group of ALB for App + const securityGroupForAlb = new ec2.SecurityGroup(this, 'SgAlb', { + vpc: props.myVpc, + allowAllOutbound: true, + }); + this.appAlbSecurityGroup = securityGroupForAlb; + + // ------------ S3 Bucket for Web Contents --------------- + // This bucket cannot be encrypted with KMS CMK + // See: https://aws.amazon.com/premiumsupport/knowledge-center/s3-website-cloudfront-error-403/ + // + const webContentBucket = new s3.Bucket(this, 'WebBucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + removalPolicy: cdk.RemovalPolicy.RETAIN, + versioned: true, + encryption: s3.BucketEncryption.S3_MANAGED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + enforceSSL: true, + }); + this.webContentsBucket = webContentBucket; + + // ------------ Application LoadBalancer --------------- + + // ALB for App Server + const lbForApp = new elbv2.ApplicationLoadBalancer(this, 'Alb', { + vpc: props.myVpc, + internetFacing: true, + securityGroup: securityGroupForAlb, + vpcSubnets: props.myVpc.selectSubnets({ + subnetGroupName: 'Public', + }), + }); + this.appAlb = lbForApp; + + const lbForAppListener = lbForApp.addListener('https', { + port: 443, + certificates: [ + { + certificateArn: albCert.certificateArn, + }, + ], + sslPolicy: elbv2.SslPolicy.TLS12_EXT, + }); + this.appAlbListerner = lbForAppListener; + + // Enabled WAF for ALB + new wafv2.CfnWebACLAssociation(this, 'WebAclAssociation', { + resourceArn: lbForApp.loadBalancerArn, + webAclArn: props.webAcl.attrArn, + }); + + // Enable ALB Access Logging + // + // This bucket can not be encrypted with KMS CMK + // See: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions + // + const albLogBucket = new s3.Bucket(this, 'alb-log-bucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + encryption: s3.BucketEncryption.S3_MANAGED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + removalPolicy: cdk.RemovalPolicy.RETAIN, + enforceSSL: true, + }); + + lbForApp.setAttribute('access_logs.s3.enabled', 'true'); + lbForApp.setAttribute('access_logs.s3.bucket', albLogBucket.bucketName); + + // Permissions for Access Logging + // Why don't use bForApp.logAccessLogs(albLogBucket); ? + // Because logAccessLogs add wider permission to other account (PutObject*). S3 will become Noncompliant on Security Hub [S3.6] + // See: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-s3-6 + // See: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions + albLogBucket.addToResourcePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['s3:PutObject'], + // ALB access logging needs S3 put permission from ALB service account for the region + principals: [new iam.AccountPrincipal(ri.RegionInfo.get(cdk.Stack.of(this).region).elbv2Account)], + resources: [albLogBucket.arnForObjects(`AWSLogs/${cdk.Stack.of(this).account}/*`)], + }), + ); + albLogBucket.addToResourcePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['s3:PutObject'], + principals: [new iam.ServicePrincipal('delivery.logs.amazonaws.com')], + resources: [albLogBucket.arnForObjects(`AWSLogs/${cdk.Stack.of(this).account}/*`)], + conditions: { + StringEquals: { + 's3:x-amz-acl': 'bucket-owner-full-control', + }, + }, + }), + ); + albLogBucket.addToResourcePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: ['s3:GetBucketAcl'], + principals: [new iam.ServicePrincipal('delivery.logs.amazonaws.com')], + resources: [albLogBucket.bucketArn], + }), + ); + + // --------- CloudFront Distrubution + const cfDistribution = new cloudfront.Distribution(this, 'Distribution', { + defaultBehavior: { + origin: new origins.LoadBalancerV2Origin(lbForApp, { + protocolPolicy: cloudfront.OriginProtocolPolicy.HTTPS_ONLY, + }), + viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.HTTPS_ONLY, + allowedMethods: cloudfront.AllowedMethods.ALLOW_ALL, + cachePolicy: cloudfront.CachePolicy.CACHING_DISABLED, + originRequestPolicy: cloudfront.OriginRequestPolicy.ALL_VIEWER, + }, + additionalBehaviors: { + '/static/*': { + origin: new origins.S3Origin(webContentBucket), + viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED, + }, + }, + errorResponses: [ + { + httpStatus: 403, + responseHttpStatus: 403, + responsePagePath: '/static/sorry.html', + ttl: cdk.Duration.seconds(20), + }, + ], + defaultRootObject: '/', // Need for SecurityHub Findings CloudFront.1 compliant + + // Domain and SSL Certificate + domainNames: [[props.hostName, props.domainName].join('.')], + certificate: cloudfrontCert, + + // WAF defined on us-east-1 + // webAclId: props.webAcl.attrArn, + + // logging + enableLogging: true, + logBucket: new s3.Bucket(this, 'CloudFrontLogBucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + encryption: s3.BucketEncryption.S3_MANAGED, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + removalPolicy: cdk.RemovalPolicy.RETAIN, + enforceSSL: true, + }), + logIncludesCookies: true, + logFilePrefix: 'CloudFrontAccessLogs/', + }); + this.cfDistribution = cfDistribution; + + // Add A Record to Route 53 + new r53.ARecord(this, 'sampleApp', { + recordName: props.hostName, + zone: appHostedZone, + target: r53.RecordTarget.fromAlias(new r53targets.CloudFrontTarget(cfDistribution)), + }); + } +} diff --git a/lib/blea-investigation-instance-stack.ts b/usecases/guest-webapp-sample/lib/blea-investigation-instance-stack.ts similarity index 100% rename from lib/blea-investigation-instance-stack.ts rename to usecases/guest-webapp-sample/lib/blea-investigation-instance-stack.ts diff --git a/lib/blea-flowlog-key-stack.ts b/usecases/guest-webapp-sample/lib/blea-key-app-stack.ts similarity index 73% rename from lib/blea-flowlog-key-stack.ts rename to usecases/guest-webapp-sample/lib/blea-key-app-stack.ts index b81e97d01..f511dbd67 100644 --- a/lib/blea-flowlog-key-stack.ts +++ b/usecases/guest-webapp-sample/lib/blea-key-app-stack.ts @@ -1,7 +1,7 @@ import * as cdk from '@aws-cdk/core'; import * as kms from '@aws-cdk/aws-kms'; -export class BLEAFlowLogKeyStack extends cdk.Stack { +export class BLEAKeyAppStack extends cdk.Stack { public readonly kmsKey: kms.Key; constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { @@ -10,8 +10,8 @@ export class BLEAFlowLogKeyStack extends cdk.Stack { // CMK const kmsKey = new kms.Key(this, 'Key', { enableKeyRotation: true, - description: 'for VPC Flow log', - alias: `${id}-for-flowlog`, + description: 'for App', + alias: `${id}-for-app`, }); this.kmsKey = kmsKey; } diff --git a/usecases/guest-webapp-sample/lib/blea-monitor-alarm-stack.ts b/usecases/guest-webapp-sample/lib/blea-monitor-alarm-stack.ts new file mode 100644 index 000000000..a6e83994f --- /dev/null +++ b/usecases/guest-webapp-sample/lib/blea-monitor-alarm-stack.ts @@ -0,0 +1,34 @@ +import * as cdk from '@aws-cdk/core'; +import * as iam from '@aws-cdk/aws-iam'; +import * as sns from '@aws-cdk/aws-sns'; + +interface BLEAMonitorAlarmStackProps extends cdk.StackProps { + notifyEmail: string; +} + +export class BLEAMonitorAlarmStack extends cdk.Stack { + public readonly alarmTopic: sns.Topic; + + constructor(scope: cdk.Construct, id: string, props: BLEAMonitorAlarmStackProps) { + super(scope, id, props); + + // SNS Topic for Monitoring Alarm + const topic = new sns.Topic(this, 'MonitorAlarmTopic'); + new sns.Subscription(this, 'MonitorAlarmEmail', { + endpoint: props.notifyEmail, + protocol: sns.SubscriptionProtocol.EMAIL, + topic: topic, + }); + this.alarmTopic = topic; + + // Allow to publish message from CloudWatch + topic.addToResourcePolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + principals: [new iam.ServicePrincipal('cloudwatch.amazonaws.com')], + actions: ['sns:Publish'], + resources: [topic.topicArn], + }), + ); + } +} diff --git a/lib/blea-vpc-stack.ts b/usecases/guest-webapp-sample/lib/blea-vpc-stack.ts similarity index 75% rename from lib/blea-vpc-stack.ts rename to usecases/guest-webapp-sample/lib/blea-vpc-stack.ts index 445215122..73fc6cd81 100644 --- a/lib/blea-vpc-stack.ts +++ b/usecases/guest-webapp-sample/lib/blea-vpc-stack.ts @@ -1,10 +1,11 @@ import * as cdk from '@aws-cdk/core'; import * as ec2 from '@aws-cdk/aws-ec2'; import * as s3 from '@aws-cdk/aws-s3'; +import * as kms from '@aws-cdk/aws-kms'; +import * as iam from '@aws-cdk/aws-iam'; export interface BLEAVpcStackProps extends cdk.StackProps { myVpcCidr: string; - vpcFlowLogsBucket: s3.Bucket; } export class BLEAVpcStack extends cdk.Stack { @@ -37,12 +38,40 @@ export class BLEAVpcStack extends cdk.Stack { ], }); + // -------------------------------------------------------------- + // Bucket for VPC Flow log + + // CMK + const flowLogKey = new kms.Key(this, 'Key', { + enableKeyRotation: true, + description: 'for VPC Flow log', + alias: `${id}-for-flowlog`, + }); + flowLogKey.addToResourcePolicy( + new iam.PolicyStatement({ + actions: ['kms:Encrypt*', 'kms:Decrypt*', 'kms:ReEncrypt*', 'kms:GenerateDataKey*', 'kms:Describe*'], + principals: [new iam.ServicePrincipal('delivery.logs.amazonaws.com')], + resources: ['*'], + }), + ); + + // Bucket + const flowLogBucket = new s3.Bucket(this, 'FlowLogBucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + encryptionKey: flowLogKey, + encryption: s3.BucketEncryption.KMS, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + removalPolicy: cdk.RemovalPolicy.RETAIN, + }); + myVpc.addFlowLog('FlowLogs', { - destination: ec2.FlowLogDestination.toS3(props.vpcFlowLogsBucket), + destination: ec2.FlowLogDestination.toS3(flowLogBucket), trafficType: ec2.FlowLogTrafficType.ALL, }); this.myVpc = myVpc; + // -------------------------------------------------------------- + // NACL for Public Subnets const naclPublic = new ec2.NetworkAcl(this, 'NaclPublic', { vpc: myVpc, @@ -120,6 +149,10 @@ export class BLEAVpcStack extends cdk.Stack { service: ec2.InterfaceVpcEndpointAwsService.ECR_DOCKER, subnets: { subnetType: ec2.SubnetType.ISOLATED }, }); + myVpc.addInterfaceEndpoint('EcrEndpointForPrivate', { + service: ec2.InterfaceVpcEndpointAwsService.ECR, + subnets: { subnetType: ec2.SubnetType.ISOLATED }, + }); myVpc.addInterfaceEndpoint('LogsEndpointForPrivate', { service: ec2.InterfaceVpcEndpointAwsService.CLOUDWATCH_LOGS, subnets: { subnetType: ec2.SubnetType.ISOLATED }, diff --git a/usecases/guest-webapp-sample/lib/blea-waf-stack.ts b/usecases/guest-webapp-sample/lib/blea-waf-stack.ts new file mode 100644 index 000000000..4f81dd6ed --- /dev/null +++ b/usecases/guest-webapp-sample/lib/blea-waf-stack.ts @@ -0,0 +1,161 @@ +import * as cdk from '@aws-cdk/core'; +import * as wafv2 from '@aws-cdk/aws-wafv2'; + +export interface BLEAWafStackProps extends cdk.StackProps { + scope: string; +} + +export class BLEAWafStack extends cdk.Stack { + public readonly webAcl: wafv2.CfnWebACL; + + constructor(scope: cdk.Construct, id: string, props: BLEAWafStackProps) { + super(scope, id, props); + + // ------------------------------------------------------------------------ + // WAFv2 + // Note: + // For ALB, scope='REGIONAL' and you can deploy on the region you like. + // For CloudFront, scope='CLOUDFRONT' and you must specify props.env.region = 'us-east-1' + // + // Caution: + // + // + const webAcl = new wafv2.CfnWebACL(this, 'WebAcl', { + defaultAction: { allow: {} }, + name: 'BLEAWebAcl', + scope: props.scope, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: 'BLEAWebAcl', + sampledRequestsEnabled: true, + }, + rules: [ + { + priority: 1, + overrideAction: { count: {} }, + visibilityConfig: { + sampledRequestsEnabled: true, + cloudWatchMetricsEnabled: true, + metricName: 'AWS-AWSManagedRulesCommonRuleSet', + }, + name: 'AWSManagedRulesCommonRuleSet', + statement: { + managedRuleGroupStatement: { + vendorName: 'AWS', + name: 'AWSManagedRulesCommonRuleSet', + }, + }, + }, + { + priority: 2, + overrideAction: { count: {} }, + visibilityConfig: { + sampledRequestsEnabled: true, + cloudWatchMetricsEnabled: true, + metricName: 'AWS-AWSManagedRulesKnownBadInputsRuleSet', + }, + name: 'AWSManagedRulesKnownBadInputsRuleSet', + statement: { + managedRuleGroupStatement: { + vendorName: 'AWS', + name: 'AWSManagedRulesKnownBadInputsRuleSet', + }, + }, + }, + { + priority: 3, + overrideAction: { count: {} }, + visibilityConfig: { + sampledRequestsEnabled: true, + cloudWatchMetricsEnabled: true, + metricName: 'AWS-AWSManagedRulesAmazonIpReputationList', + }, + name: 'AWSManagedRulesAmazonIpReputationList', + statement: { + managedRuleGroupStatement: { + vendorName: 'AWS', + name: 'AWSManagedRulesAmazonIpReputationList', + }, + }, + }, + { + priority: 4, + overrideAction: { count: {} }, + visibilityConfig: { + sampledRequestsEnabled: true, + cloudWatchMetricsEnabled: true, + metricName: 'AWS-AWSManagedRulesLinuxRuleSet', + }, + name: 'AWSManagedRulesLinuxRuleSet', + statement: { + managedRuleGroupStatement: { + vendorName: 'AWS', + name: 'AWSManagedRulesLinuxRuleSet', + }, + }, + }, + { + priority: 5, + overrideAction: { count: {} }, + visibilityConfig: { + sampledRequestsEnabled: true, + cloudWatchMetricsEnabled: true, + metricName: 'AWS-AWSManagedRulesSQLiRuleSet', + }, + name: 'AWSManagedRulesSQLiRuleSet', + statement: { + managedRuleGroupStatement: { + vendorName: 'AWS', + name: 'AWSManagedRulesSQLiRuleSet', + }, + }, + }, + ], + }); + this.webAcl = webAcl; + + // // ------------------------------------------------------------------------ + // // CloudFront Distrubution + // // + // const cfdistribution = new cloudfront.Distribution(this, 'Distribution', { + // defaultBehavior: { + // origin: new origins.LoadBalancerV2Origin(props.originAlb), + // viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + // allowedMethods: cloudfront.AllowedMethods.ALLOW_ALL, + // cachePolicy: cloudfront.CachePolicy.CACHING_DISABLED, + // originRequestPolicy: cloudfront.OriginRequestPolicy.ALL_VIEWER, + // }, + // defaultRootObject: '/', // Need for SecurityHub Findings CloudFront.1 compliant + + // domainNames: [fqdn], + // certificate: cloudfrontCert, + // additionalBehaviors: { + // '/static/*': { + // origin: new origins.S3Origin(props.originS3), + // viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + // cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED, + // }, + // }, + // enableLogging: true, + // logBucket: props.logBucket, + // logIncludesCookies: true, + // logFilePrefix: 'CloudFrontAccessLogs/', + // errorResponses: [ + // { + // httpStatus: 403, + // responseHttpStatus: 403, + // responsePagePath: '/static/sorry.html', + // ttl: cdk.Duration.seconds(20), + // }, + // ], + // webAclId: webAcl.attrArn, + // }); + + // // Add A Record to Route 53 + // new r53.ARecord(this, 'appRecord', { + // recordName: props.hostName, + // zone: hostedZone, + // target: r53.RecordTarget.fromAlias(new r53targets.CloudFrontTarget(cfdistribution)), + // }); + } +} diff --git a/usecases/guest-webapp-sample/package.json b/usecases/guest-webapp-sample/package.json new file mode 100644 index 000000000..be059018e --- /dev/null +++ b/usecases/guest-webapp-sample/package.json @@ -0,0 +1,66 @@ +{ + "private": true, + "name": "blea-guest-ecsapp-sample", + "version": "1.0.0", + "description": "Sample web application with BLEA", + "license": "MIT-0", + "bin": { + "blea-guest-ecsapp-sample": "bin/blea-guest-ecsapp-sample.js" + }, + "scripts": { + "synth:dev": "npx cdk synth -c environment=dev", + "depcheck": "npx depcheck --ignore-dirs cdk.out", + "build": "tsc --build", + "clean": "tsc --build --clean && rm -rf cdk.out", + "watch": "tsc -w", + "test": "jest", + "lint": "eslint --fix .", + "format": "prettier --write ." + }, + "devDependencies": { + "@types/jest": "^27.0.2", + "@types/node": "16.11.2", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "aws-cdk": "^1.129.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "jest": "^27.3.1", + "prettier": "^2.4.1", + "ts-jest": "^27.0.7", + "ts-node": "^10.3.0", + "typescript": "~4.4.4" + }, + "dependencies": { + "@aws-cdk/assert": "^1.129.0", + "@aws-cdk/aws-autoscaling": "^1.129.0", + "@aws-cdk/aws-certificatemanager": "^1.129.0", + "@aws-cdk/aws-chatbot": "^1.129.0", + "@aws-cdk/aws-cloudfront": "^1.129.0", + "@aws-cdk/aws-cloudfront-origins": "^1.129.0", + "@aws-cdk/aws-cloudwatch": "^1.129.0", + "@aws-cdk/aws-cloudwatch-actions": "^1.129.0", + "@aws-cdk/aws-codebuild": "^1.129.0", + "@aws-cdk/aws-ec2": "^1.129.0", + "@aws-cdk/aws-ecr": "^1.129.0", + "@aws-cdk/aws-ecs": "^1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2": "^1.129.0", + "@aws-cdk/aws-elasticloadbalancingv2-targets": "^1.129.0", + "@aws-cdk/aws-events": "^1.129.0", + "@aws-cdk/aws-events-targets": "^1.129.0", + "@aws-cdk/aws-iam": "^1.129.0", + "@aws-cdk/aws-kms": "^1.129.0", + "@aws-cdk/aws-logs": "^1.129.0", + "@aws-cdk/aws-rds": "^1.129.0", + "@aws-cdk/aws-route53": "^1.129.0", + "@aws-cdk/aws-route53-targets": "^1.129.0", + "@aws-cdk/aws-s3": "^1.129.0", + "@aws-cdk/aws-s3-assets": "^1.129.0", + "@aws-cdk/aws-sns": "^1.129.0", + "@aws-cdk/aws-synthetics": "^1.129.0", + "@aws-cdk/aws-wafv2": "^1.129.0", + "@aws-cdk/core": "^1.129.0", + "@aws-cdk/custom-resources": "^1.129.0", + "@aws-cdk/region-info": "^1.129.0" + } +} diff --git a/test/__snapshots__/blea-guest-asgapp-sample.test.ts.snap b/usecases/guest-webapp-sample/test/__snapshots__/blea-guest-asgapp-sample.test.ts.snap similarity index 92% rename from test/__snapshots__/blea-guest-asgapp-sample.test.ts.snap rename to usecases/guest-webapp-sample/test/__snapshots__/blea-guest-asgapp-sample.test.ts.snap index c917bc969..347415fd7 100644 --- a/test/__snapshots__/blea-guest-asgapp-sample.test.ts.snap +++ b/usecases/guest-webapp-sample/test/__snapshots__/blea-guest-asgapp-sample.test.ts.snap @@ -144,7 +144,7 @@ Object { "Outputs": Object { "ExportsOutputFnGetAttKey961B73FDArn5A860C43": Object { "Export": Object { - "Name": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Name": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "Value": Object { "Fn::GetAtt": Array [ @@ -158,7 +158,7 @@ Object { "Key961B73FD": Object { "DeletionPolicy": "Retain", "Properties": Object { - "Description": "for General Logs", + "Description": "for App", "EnableKeyRotation": true, "KeyPolicy": Object { "Statement": Array [ @@ -201,20 +201,6 @@ Object { }, "Resource": "*", }, - Object { - "Action": Array [ - "kms:Encrypt*", - "kms:Decrypt*", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:Describe*", - ], - "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, - "Resource": "*", - }, ], "Version": "2012-10-17", }, @@ -230,7 +216,7 @@ Object { }, "KeyAlias910D852D": Object { "Properties": Object { - "AliasName": "alias/BLEA-GeneralLogKey-for-generallog", + "AliasName": "alias/BLEA-AppKey-for-app", "TargetKeyId": Object { "Fn::GetAtt": Array [ "Key961B73FD", @@ -246,8 +232,66 @@ Object { exports[`BLEA Guest Stacks GuestAccount ASG App Stacks 4`] = ` Object { + "Outputs": Object { + "ExportsOutputRefVpc8378EB38272D6E3A": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, + "Value": Object { + "Ref": "Vpc8378EB38", + }, + }, + "ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940", + }, + "Value": Object { + "Ref": "VpcPrivateSubnet1Subnet536B997A", + }, + }, + "ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3", + }, + "Value": Object { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1", + }, + }, + "ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6", + }, + "Value": Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + }, + "ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB", + }, + "Value": Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + }, + "ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", + }, + "Value": Object { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4", + }, + }, + "ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", + }, + "Value": Object { + "Ref": "VpcPublicSubnet2Subnet691E08A3", + }, + }, + }, "Resources": Object { - "GeneralLogBucket79898759": Object { + "FlowLogBucket0863ACCA": Object { "DeletionPolicy": "Retain", "Properties": Object { "AccessControl": "Private", @@ -256,7 +300,10 @@ Object { Object { "ServerSideEncryptionByDefault": Object { "KMSMasterKeyID": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::GetAtt": Array [ + "Key961B73FD", + "Arn", + ], }, "SSEAlgorithm": "aws:kms", }, @@ -279,26 +326,6 @@ Object { "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount ASG App Stacks 5`] = ` -Object { - "Outputs": Object { - "ExportsOutputFnGetAttKey961B73FDArn5A860C43": Object { - "Export": Object { - "Name": "BLEA-FlowlogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", - }, - "Value": Object { - "Fn::GetAtt": Array [ - "Key961B73FD", - "Arn", - ], - }, - }, - }, - "Resources": Object { "Key961B73FD": Object { "DeletionPolicy": "Retain", "Properties": Object { @@ -374,7 +401,7 @@ Object { }, "KeyAlias910D852D": Object { "Properties": Object { - "AliasName": "alias/BLEA-FlowlogKey-for-flowlog", + "AliasName": "alias/BLEA-Vpc-for-flowlog", "TargetKeyId": Object { "Fn::GetAtt": Array [ "Key961B73FD", @@ -384,176 +411,6 @@ Object { }, "Type": "AWS::KMS::Alias", }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount ASG App Stacks 6`] = ` -Object { - "Outputs": Object { - "ExportsOutputFnGetAttKey961B73FDArn5A860C43": Object { - "Export": Object { - "Name": "BLEA-FlowlogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", - }, - "Value": Object { - "Fn::GetAtt": Array [ - "Key961B73FD", - "Arn", - ], - }, - }, - }, - "Resources": Object { - "Key961B73FD": Object { - "DeletionPolicy": "Retain", - "Properties": Object { - "Description": "for VPC Flow log", - "EnableKeyRotation": true, - "KeyPolicy": Object { - "Statement": Array [ - Object { - "Action": Array [ - "kms:Create*", - "kms:Describe*", - "kms:Enable*", - "kms:List*", - "kms:Put*", - "kms:Update*", - "kms:Revoke*", - "kms:Disable*", - "kms:Get*", - "kms:Delete*", - "kms:ScheduleKeyDeletion", - "kms:CancelKeyDeletion", - "kms:GenerateDataKey", - "kms:TagResource", - "kms:UntagResource", - ], - "Effect": "Allow", - "Principal": Object { - "AWS": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::", - Object { - "Ref": "AWS::AccountId", - }, - ":root", - ], - ], - }, - }, - "Resource": "*", - }, - Object { - "Action": Array [ - "kms:Encrypt*", - "kms:Decrypt*", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:Describe*", - ], - "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, - "Resource": "*", - }, - ], - "Version": "2012-10-17", - }, - "Tags": Array [ - Object { - "Key": "Environment", - "Value": "Development", - }, - ], - }, - "Type": "AWS::KMS::Key", - "UpdateReplacePolicy": "Retain", - }, - "KeyAlias910D852D": Object { - "Properties": Object { - "AliasName": "alias/BLEA-FlowlogKey-for-flowlog", - "TargetKeyId": Object { - "Fn::GetAtt": Array [ - "Key961B73FD", - "Arn", - ], - }, - }, - "Type": "AWS::KMS::Alias", - }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount ASG App Stacks 7`] = ` -Object { - "Outputs": Object { - "ExportsOutputRefVpc8378EB38272D6E3A": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", - }, - "Value": Object { - "Ref": "Vpc8378EB38", - }, - }, - "ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940", - }, - "Value": Object { - "Ref": "VpcPrivateSubnet1Subnet536B997A", - }, - }, - "ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3", - }, - "Value": Object { - "Ref": "VpcPrivateSubnet2Subnet3788AAA1", - }, - }, - "ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6", - }, - "Value": Object { - "Ref": "VpcProtectedSubnet1Subnet38ECE18A", - }, - }, - "ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB", - }, - "Value": Object { - "Ref": "VpcProtectedSubnet2SubnetC22C3325", - }, - }, - "ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", - }, - "Value": Object { - "Ref": "VpcPublicSubnet1Subnet5C2D37C4", - }, - }, - "ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", - }, - "Value": Object { - "Ref": "VpcPublicSubnet2Subnet691E08A3", - }, - }, - }, - "Resources": Object { "NaclPrivate8CEDB4C5": Object { "Properties": Object { "Tags": Array [ @@ -900,7 +757,99 @@ Object { Object { "Ref": "AWS::Region", }, - ".ecr.dkr", + ".ecr.dkr", + ], + ], + }, + "SubnetIds": Array [ + Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + ], + "VpcEndpointType": "Interface", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcEcrDkrEndpointForPrivateSecurityGroup116DBAFC": Object { + "Properties": Object { + "GroupDescription": "BLEA-Vpc/Vpc/EcrDkrEndpointForPrivate/SecurityGroup", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "from ", + Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + ":443", + ], + ], + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "VpcEcrEndpointForPrivate33BF5765": Object { + "Properties": Object { + "PrivateDnsEnabled": true, + "SecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "VpcEcrEndpointForPrivateSecurityGroup72F5BC77", + "GroupId", + ], + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".ecr.api", ], ], }, @@ -919,9 +868,9 @@ Object { }, "Type": "AWS::EC2::VPCEndpoint", }, - "VpcEcrDkrEndpointForPrivateSecurityGroup116DBAFC": Object { + "VpcEcrEndpointForPrivateSecurityGroup72F5BC77": Object { "Properties": Object { - "GroupDescription": "BLEA-Vpc/Vpc/EcrDkrEndpointForPrivate/SecurityGroup", + "GroupDescription": "BLEA-Vpc/Vpc/EcrEndpointForPrivate/SecurityGroup", "SecurityGroupEgress": Array [ Object { "CidrIp": "0.0.0.0/0", @@ -976,7 +925,10 @@ Object { "VpcFlowLogsFlowLogBB096F0F": Object { "Properties": Object { "LogDestination": Object { - "Fn::ImportValue": "BLEA-FlowLog:ExportsOutputFnGetAttFlowLogBucket0863ACCAArnA4795174", + "Fn::GetAtt": Array [ + "FlowLogBucket0863ACCA", + "Arn", + ], }, "LogDestinationType": "s3", "ResourceId": Object { @@ -1822,7 +1774,7 @@ Object { } `; -exports[`BLEA Guest Stacks GuestAccount ASG App Stacks 8`] = ` +exports[`BLEA Guest Stacks GuestAccount ASG App Stacks 5`] = ` Object { "Outputs": Object { "ExportsOutputFnGetAttSgApp7DE78E7EGroupIdBE09B119": Object { @@ -1844,7 +1796,7 @@ Object { }, }, "Resources": Object { - "AlbAppFFAFE0DC": Object { + "AsgAlb143D9482": Object { "Properties": Object { "LoadBalancerAttributes": Array [ Object { @@ -1858,7 +1810,7 @@ Object { Object { "Key": "access_logs.s3.bucket", "Value": Object { - "Ref": "AlbLogBucketC26F4D8A", + "Ref": "alblogbucketC97CC057", }, }, ], @@ -1889,145 +1841,24 @@ Object { }, "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer", }, - "AlbAppListerner0BDB329F": Object { + "AsgAlbAsgListernerEAE9102A": Object { "Properties": Object { "DefaultActions": Array [ Object { "TargetGroupArn": Object { - "Ref": "TgApp5918B053", + "Ref": "TgAsgApp43FB21BA", }, "Type": "forward", }, ], "LoadBalancerArn": Object { - "Ref": "AlbAppFFAFE0DC", + "Ref": "AsgAlb143D9482", }, "Port": 80, "Protocol": "HTTP", }, "Type": "AWS::ElasticLoadBalancingV2::Listener", }, - "AlbLogBucketC26F4D8A": Object { - "DeletionPolicy": "Retain", - "Properties": Object { - "AccessControl": "Private", - "BucketEncryption": Object { - "ServerSideEncryptionConfiguration": Array [ - Object { - "ServerSideEncryptionByDefault": Object { - "SSEAlgorithm": "AES256", - }, - }, - ], - }, - "PublicAccessBlockConfiguration": Object { - "BlockPublicAcls": true, - "BlockPublicPolicy": true, - "IgnorePublicAcls": true, - "RestrictPublicBuckets": true, - }, - "Tags": Array [ - Object { - "Key": "Environment", - "Value": "Development", - }, - ], - }, - "Type": "AWS::S3::Bucket", - "UpdateReplacePolicy": "Retain", - }, - "AlbLogBucketPolicy222549B1": Object { - "Properties": Object { - "Bucket": Object { - "Ref": "AlbLogBucketC26F4D8A", - }, - "PolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "s3:PutObject", - "Effect": "Allow", - "Principal": Object { - "AWS": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::582318560864:root", - ], - ], - }, - }, - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "AlbLogBucketC26F4D8A", - "Arn", - ], - }, - "/AWSLogs/", - Object { - "Ref": "AWS::AccountId", - }, - "/*", - ], - ], - }, - }, - Object { - "Action": "s3:PutObject", - "Condition": Object { - "StringEquals": Object { - "s3:x-amz-acl": "bucket-owner-full-control", - }, - }, - "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "AlbLogBucketC26F4D8A", - "Arn", - ], - }, - "/AWSLogs/", - Object { - "Ref": "AWS::AccountId", - }, - "/*", - ], - ], - }, - }, - Object { - "Action": "s3:GetBucketAcl", - "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, - "Resource": Object { - "Fn::GetAtt": Array [ - "AlbLogBucketC26F4D8A", - "Arn", - ], - }, - }, - ], - "Version": "2012-10-17", - }, - }, - "Type": "AWS::S3::BucketPolicy", - }, "AsgAppASG65DC93B2": Object { "Properties": Object { "HealthCheckGracePeriod": 60, @@ -2056,7 +1887,7 @@ Object { ], "TargetGroupARNs": Array [ Object { - "Ref": "TgApp5918B053", + "Ref": "TgAsgApp43FB21BA", }, ], "VPCZoneIdentifier": Array [ @@ -2155,7 +1986,7 @@ chown apache.apache /var/www/html/index.html", "SecurityGroupIngress": Array [ Object { "CidrIp": "0.0.0.0/0", - "Description": "from 0.0.0.0/0:80", + "Description": "Allow from anyone on port 80", "FromPort": 80, "IpProtocol": "tcp", "ToPort": 80, @@ -2239,7 +2070,7 @@ chown apache.apache /var/www/html/index.html", }, "Type": "AWS::EC2::SecurityGroupIngress", }, - "TgApp5918B053": Object { + "TgAsgApp43FB21BA": Object { "Properties": Object { "HealthCheckEnabled": true, "HealthCheckPath": "/index.html", @@ -2264,6 +2095,161 @@ chown apache.apache /var/www/html/index.html", }, "Type": "AWS::ElasticLoadBalancingV2::TargetGroup", }, + "alblogbucketC97CC057": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ + Object { + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", + }, + }, + ], + }, + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + }, + "alblogbucketPolicyA74E0CFF": Object { + "Properties": Object { + "Bucket": Object { + "Ref": "alblogbucketC97CC057", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": "s3:PutObject", + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::undefined:root", + ], + ], + }, + }, + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/AWSLogs/", + Object { + "Ref": "AWS::AccountId", + }, + "/*", + ], + ], + }, + }, + Object { + "Action": "s3:PutObject", + "Condition": Object { + "StringEquals": Object { + "s3:x-amz-acl": "bucket-owner-full-control", + }, + }, + "Effect": "Allow", + "Principal": Object { + "Service": "delivery.logs.amazonaws.com", + }, + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/AWSLogs/", + Object { + "Ref": "AWS::AccountId", + }, + "/*", + ], + ], + }, + }, + Object { + "Action": "s3:GetBucketAcl", + "Effect": "Allow", + "Principal": Object { + "Service": "delivery.logs.amazonaws.com", + }, + "Resource": Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::S3::BucketPolicy", + }, "ssminstancerole0E7D791C": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { @@ -2306,19 +2292,19 @@ chown apache.apache /var/www/html/index.html", } `; -exports[`BLEA Guest Stacks GuestAccount ASG App Stacks 9`] = ` +exports[`BLEA Guest Stacks GuestAccount ASG App Stacks 6`] = ` Object { "Parameters": Object { - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24ArtifactHashBA91B77F": Object { - "Description": "Artifact hash for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827ArtifactHash1355580A": Object { + "Description": "Artifact hash for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", "Type": "String", }, - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3Bucket4D46ABB5": Object { - "Description": "S3 bucket for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A": Object { + "Description": "S3 bucket for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", "Type": "String", }, - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861": Object { - "Description": "S3 key for asset version \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3": Object { + "Description": "S3 key for asset version \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", "Type": "String", }, }, @@ -2326,6 +2312,7 @@ Object { "Aurora2CBAB212": Object { "DeletionPolicy": "Snapshot", "Properties": Object { + "CopyTagsToSnapshot": true, "DBClusterParameterGroupName": "default.aurora-postgresql11", "DBSubnetGroupName": Object { "Ref": "AuroraSubnetsC4DF45C9", @@ -2337,7 +2324,7 @@ Object { "Engine": "aurora-postgresql", "EngineVersion": "11.9", "KmsKeyId": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "MasterUserPassword": Object { "Fn::Join": Array [ @@ -2414,7 +2401,7 @@ Object { "Engine": "aurora-postgresql", "EngineVersion": "11.9", "PerformanceInsightsKMSKeyId": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "PerformanceInsightsRetentionPeriod": 7, "PubliclyAccessible": false, @@ -2443,7 +2430,7 @@ Object { "Engine": "aurora-postgresql", "EngineVersion": "11.9", "PerformanceInsightsKMSKeyId": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "PerformanceInsightsRetentionPeriod": 7, "PubliclyAccessible": false, @@ -2627,7 +2614,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3Bucket4D46ABB5", + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A", }, "S3Key": Object { "Fn::Join": Array [ @@ -2640,7 +2627,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861", + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", }, ], }, @@ -2653,7 +2640,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861", + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", }, ], }, @@ -2670,7 +2657,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs12.x", + "Runtime": "nodejs14.x", }, "Type": "AWS::Lambda::Function", }, diff --git a/test/__snapshots__/blea-guest-ec2app-sample.test.ts.snap b/usecases/guest-webapp-sample/test/__snapshots__/blea-guest-ec2app-sample.test.ts.snap similarity index 93% rename from test/__snapshots__/blea-guest-ec2app-sample.test.ts.snap rename to usecases/guest-webapp-sample/test/__snapshots__/blea-guest-ec2app-sample.test.ts.snap index f3e0755fc..dd1e6aa5c 100644 --- a/test/__snapshots__/blea-guest-ec2app-sample.test.ts.snap +++ b/usecases/guest-webapp-sample/test/__snapshots__/blea-guest-ec2app-sample.test.ts.snap @@ -144,7 +144,7 @@ Object { "Outputs": Object { "ExportsOutputFnGetAttKey961B73FDArn5A860C43": Object { "Export": Object { - "Name": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Name": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "Value": Object { "Fn::GetAtt": Array [ @@ -158,7 +158,7 @@ Object { "Key961B73FD": Object { "DeletionPolicy": "Retain", "Properties": Object { - "Description": "for General Logs", + "Description": "for App", "EnableKeyRotation": true, "KeyPolicy": Object { "Statement": Array [ @@ -201,20 +201,6 @@ Object { }, "Resource": "*", }, - Object { - "Action": Array [ - "kms:Encrypt*", - "kms:Decrypt*", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:Describe*", - ], - "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, - "Resource": "*", - }, ], "Version": "2012-10-17", }, @@ -230,7 +216,7 @@ Object { }, "KeyAlias910D852D": Object { "Properties": Object { - "AliasName": "alias/BLEA-GeneralLogKey-for-generallog", + "AliasName": "alias/BLEA-AppKey-for-app", "TargetKeyId": Object { "Fn::GetAtt": Array [ "Key961B73FD", @@ -246,8 +232,66 @@ Object { exports[`BLEA Guest Stacks GuestAccount EC2 App Stacks 4`] = ` Object { + "Outputs": Object { + "ExportsOutputRefVpc8378EB38272D6E3A": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, + "Value": Object { + "Ref": "Vpc8378EB38", + }, + }, + "ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940", + }, + "Value": Object { + "Ref": "VpcPrivateSubnet1Subnet536B997A", + }, + }, + "ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3", + }, + "Value": Object { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1", + }, + }, + "ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6", + }, + "Value": Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + }, + "ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB", + }, + "Value": Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + }, + "ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", + }, + "Value": Object { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4", + }, + }, + "ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", + }, + "Value": Object { + "Ref": "VpcPublicSubnet2Subnet691E08A3", + }, + }, + }, "Resources": Object { - "GeneralLogBucket79898759": Object { + "FlowLogBucket0863ACCA": Object { "DeletionPolicy": "Retain", "Properties": Object { "AccessControl": "Private", @@ -256,7 +300,10 @@ Object { Object { "ServerSideEncryptionByDefault": Object { "KMSMasterKeyID": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::GetAtt": Array [ + "Key961B73FD", + "Arn", + ], }, "SSEAlgorithm": "aws:kms", }, @@ -279,26 +326,6 @@ Object { "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount EC2 App Stacks 5`] = ` -Object { - "Outputs": Object { - "ExportsOutputFnGetAttKey961B73FDArn5A860C43": Object { - "Export": Object { - "Name": "BLEA-FlowlogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", - }, - "Value": Object { - "Fn::GetAtt": Array [ - "Key961B73FD", - "Arn", - ], - }, - }, - }, - "Resources": Object { "Key961B73FD": Object { "DeletionPolicy": "Retain", "Properties": Object { @@ -374,7 +401,7 @@ Object { }, "KeyAlias910D852D": Object { "Properties": Object { - "AliasName": "alias/BLEA-FlowlogKey-for-flowlog", + "AliasName": "alias/BLEA-Vpc-for-flowlog", "TargetKeyId": Object { "Fn::GetAtt": Array [ "Key961B73FD", @@ -384,176 +411,6 @@ Object { }, "Type": "AWS::KMS::Alias", }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount EC2 App Stacks 6`] = ` -Object { - "Outputs": Object { - "ExportsOutputFnGetAttKey961B73FDArn5A860C43": Object { - "Export": Object { - "Name": "BLEA-FlowlogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", - }, - "Value": Object { - "Fn::GetAtt": Array [ - "Key961B73FD", - "Arn", - ], - }, - }, - }, - "Resources": Object { - "Key961B73FD": Object { - "DeletionPolicy": "Retain", - "Properties": Object { - "Description": "for VPC Flow log", - "EnableKeyRotation": true, - "KeyPolicy": Object { - "Statement": Array [ - Object { - "Action": Array [ - "kms:Create*", - "kms:Describe*", - "kms:Enable*", - "kms:List*", - "kms:Put*", - "kms:Update*", - "kms:Revoke*", - "kms:Disable*", - "kms:Get*", - "kms:Delete*", - "kms:ScheduleKeyDeletion", - "kms:CancelKeyDeletion", - "kms:GenerateDataKey", - "kms:TagResource", - "kms:UntagResource", - ], - "Effect": "Allow", - "Principal": Object { - "AWS": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::", - Object { - "Ref": "AWS::AccountId", - }, - ":root", - ], - ], - }, - }, - "Resource": "*", - }, - Object { - "Action": Array [ - "kms:Encrypt*", - "kms:Decrypt*", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:Describe*", - ], - "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, - "Resource": "*", - }, - ], - "Version": "2012-10-17", - }, - "Tags": Array [ - Object { - "Key": "Environment", - "Value": "Development", - }, - ], - }, - "Type": "AWS::KMS::Key", - "UpdateReplacePolicy": "Retain", - }, - "KeyAlias910D852D": Object { - "Properties": Object { - "AliasName": "alias/BLEA-FlowlogKey-for-flowlog", - "TargetKeyId": Object { - "Fn::GetAtt": Array [ - "Key961B73FD", - "Arn", - ], - }, - }, - "Type": "AWS::KMS::Alias", - }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount EC2 App Stacks 7`] = ` -Object { - "Outputs": Object { - "ExportsOutputRefVpc8378EB38272D6E3A": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", - }, - "Value": Object { - "Ref": "Vpc8378EB38", - }, - }, - "ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940", - }, - "Value": Object { - "Ref": "VpcPrivateSubnet1Subnet536B997A", - }, - }, - "ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3", - }, - "Value": Object { - "Ref": "VpcPrivateSubnet2Subnet3788AAA1", - }, - }, - "ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6", - }, - "Value": Object { - "Ref": "VpcProtectedSubnet1Subnet38ECE18A", - }, - }, - "ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB", - }, - "Value": Object { - "Ref": "VpcProtectedSubnet2SubnetC22C3325", - }, - }, - "ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", - }, - "Value": Object { - "Ref": "VpcPublicSubnet1Subnet5C2D37C4", - }, - }, - "ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", - }, - "Value": Object { - "Ref": "VpcPublicSubnet2Subnet691E08A3", - }, - }, - }, - "Resources": Object { "NaclPrivate8CEDB4C5": Object { "Properties": Object { "Tags": Array [ @@ -695,15 +552,107 @@ Object { }, ], }, - "Type": "AWS::EC2::VPC", + "Type": "AWS::EC2::VPC", + }, + "VpcEc2EndpointForPrivateEB1488F4": Object { + "Properties": Object { + "PrivateDnsEnabled": true, + "SecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "VpcEc2EndpointForPrivateSecurityGroupF9FF14F0", + "GroupId", + ], + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".ec2", + ], + ], + }, + "SubnetIds": Array [ + Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + ], + "VpcEndpointType": "Interface", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcEc2EndpointForPrivateSecurityGroupF9FF14F0": Object { + "Properties": Object { + "GroupDescription": "BLEA-Vpc/Vpc/Ec2EndpointForPrivate/SecurityGroup", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "from ", + Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + ":443", + ], + ], + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::SecurityGroup", }, - "VpcEc2EndpointForPrivateEB1488F4": Object { + "VpcEc2MessagesEndpointForPrivate0809410D": Object { "Properties": Object { "PrivateDnsEnabled": true, "SecurityGroupIds": Array [ Object { "Fn::GetAtt": Array [ - "VpcEc2EndpointForPrivateSecurityGroupF9FF14F0", + "VpcEc2MessagesEndpointForPrivateSecurityGroup7FBFF800", "GroupId", ], }, @@ -716,7 +665,7 @@ Object { Object { "Ref": "AWS::Region", }, - ".ec2", + ".ec2messages", ], ], }, @@ -735,9 +684,9 @@ Object { }, "Type": "AWS::EC2::VPCEndpoint", }, - "VpcEc2EndpointForPrivateSecurityGroupF9FF14F0": Object { + "VpcEc2MessagesEndpointForPrivateSecurityGroup7FBFF800": Object { "Properties": Object { - "GroupDescription": "BLEA-Vpc/Vpc/Ec2EndpointForPrivate/SecurityGroup", + "GroupDescription": "BLEA-Vpc/Vpc/Ec2MessagesEndpointForPrivate/SecurityGroup", "SecurityGroupEgress": Array [ Object { "CidrIp": "0.0.0.0/0", @@ -789,13 +738,13 @@ Object { }, "Type": "AWS::EC2::SecurityGroup", }, - "VpcEc2MessagesEndpointForPrivate0809410D": Object { + "VpcEcrDkrEndpointForPrivate351B435F": Object { "Properties": Object { "PrivateDnsEnabled": true, "SecurityGroupIds": Array [ Object { "Fn::GetAtt": Array [ - "VpcEc2MessagesEndpointForPrivateSecurityGroup7FBFF800", + "VpcEcrDkrEndpointForPrivateSecurityGroup116DBAFC", "GroupId", ], }, @@ -808,7 +757,7 @@ Object { Object { "Ref": "AWS::Region", }, - ".ec2messages", + ".ecr.dkr", ], ], }, @@ -827,9 +776,9 @@ Object { }, "Type": "AWS::EC2::VPCEndpoint", }, - "VpcEc2MessagesEndpointForPrivateSecurityGroup7FBFF800": Object { + "VpcEcrDkrEndpointForPrivateSecurityGroup116DBAFC": Object { "Properties": Object { - "GroupDescription": "BLEA-Vpc/Vpc/Ec2MessagesEndpointForPrivate/SecurityGroup", + "GroupDescription": "BLEA-Vpc/Vpc/EcrDkrEndpointForPrivate/SecurityGroup", "SecurityGroupEgress": Array [ Object { "CidrIp": "0.0.0.0/0", @@ -881,13 +830,13 @@ Object { }, "Type": "AWS::EC2::SecurityGroup", }, - "VpcEcrDkrEndpointForPrivate351B435F": Object { + "VpcEcrEndpointForPrivate33BF5765": Object { "Properties": Object { "PrivateDnsEnabled": true, "SecurityGroupIds": Array [ Object { "Fn::GetAtt": Array [ - "VpcEcrDkrEndpointForPrivateSecurityGroup116DBAFC", + "VpcEcrEndpointForPrivateSecurityGroup72F5BC77", "GroupId", ], }, @@ -900,7 +849,7 @@ Object { Object { "Ref": "AWS::Region", }, - ".ecr.dkr", + ".ecr.api", ], ], }, @@ -919,9 +868,9 @@ Object { }, "Type": "AWS::EC2::VPCEndpoint", }, - "VpcEcrDkrEndpointForPrivateSecurityGroup116DBAFC": Object { + "VpcEcrEndpointForPrivateSecurityGroup72F5BC77": Object { "Properties": Object { - "GroupDescription": "BLEA-Vpc/Vpc/EcrDkrEndpointForPrivate/SecurityGroup", + "GroupDescription": "BLEA-Vpc/Vpc/EcrEndpointForPrivate/SecurityGroup", "SecurityGroupEgress": Array [ Object { "CidrIp": "0.0.0.0/0", @@ -976,7 +925,10 @@ Object { "VpcFlowLogsFlowLogBB096F0F": Object { "Properties": Object { "LogDestination": Object { - "Fn::ImportValue": "BLEA-FlowLog:ExportsOutputFnGetAttFlowLogBucket0863ACCAArnA4795174", + "Fn::GetAtt": Array [ + "FlowLogBucket0863ACCA", + "Arn", + ], }, "LogDestinationType": "s3", "ResourceId": Object { @@ -1822,212 +1774,28 @@ Object { } `; -exports[`BLEA Guest Stacks GuestAccount EC2 App Stacks 8`] = ` -Object { - "Outputs": Object { - "ExportsOutputFnGetAttSgApp7DE78E7EGroupIdBE09B119": Object { - "Export": Object { - "Name": "BLEA-EC2App:ExportsOutputFnGetAttSgApp7DE78E7EGroupIdBE09B119", - }, - "Value": Object { - "Fn::GetAtt": Array [ - "SgApp7DE78E7E", - "GroupId", - ], - }, - }, - }, - "Parameters": Object { - "SsmParameterValueawsserviceamiamazonlinuxlatestamzn2amihvmx8664gp2C96584B6F00A464EAD1953AFF4B05118Parameter": Object { - "Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2", - "Type": "AWS::SSM::Parameter::Value", - }, - }, - "Resources": Object { - "AlbAppFFAFE0DC": Object { - "Properties": Object { - "LoadBalancerAttributes": Array [ - Object { - "Key": "deletion_protection.enabled", - "Value": "false", - }, - Object { - "Key": "access_logs.s3.enabled", - "Value": "true", - }, - Object { - "Key": "access_logs.s3.bucket", - "Value": Object { - "Ref": "AlbLogBucketC26F4D8A", - }, - }, - ], - "Scheme": "internet-facing", - "SecurityGroups": Array [ - Object { - "Fn::GetAtt": Array [ - "SgAlbEA3AC417", - "GroupId", - ], - }, - ], - "Subnets": Array [ - Object { - "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", - }, - Object { - "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", - }, - ], - "Tags": Array [ - Object { - "Key": "Environment", - "Value": "Development", - }, - ], - "Type": "application", - }, - "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer", - }, - "AlbAppListnerApp18657E8F": Object { - "Properties": Object { - "DefaultActions": Array [ - Object { - "TargetGroupArn": Object { - "Ref": "TgApp5918B053", - }, - "Type": "forward", - }, - ], - "LoadBalancerArn": Object { - "Ref": "AlbAppFFAFE0DC", - }, - "Port": 80, - "Protocol": "HTTP", - }, - "Type": "AWS::ElasticLoadBalancingV2::Listener", - }, - "AlbLogBucketC26F4D8A": Object { - "DeletionPolicy": "Retain", - "Properties": Object { - "AccessControl": "Private", - "BucketEncryption": Object { - "ServerSideEncryptionConfiguration": Array [ - Object { - "ServerSideEncryptionByDefault": Object { - "SSEAlgorithm": "AES256", - }, - }, - ], - }, - "PublicAccessBlockConfiguration": Object { - "BlockPublicAcls": true, - "BlockPublicPolicy": true, - "IgnorePublicAcls": true, - "RestrictPublicBuckets": true, - }, - "Tags": Array [ - Object { - "Key": "Environment", - "Value": "Development", - }, - ], - }, - "Type": "AWS::S3::Bucket", - "UpdateReplacePolicy": "Retain", - }, - "AlbLogBucketPolicy222549B1": Object { - "Properties": Object { - "Bucket": Object { - "Ref": "AlbLogBucketC26F4D8A", - }, - "PolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "s3:PutObject", - "Effect": "Allow", - "Principal": Object { - "AWS": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::582318560864:root", - ], - ], - }, - }, - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "AlbLogBucketC26F4D8A", - "Arn", - ], - }, - "/AWSLogs/", - Object { - "Ref": "AWS::AccountId", - }, - "/*", - ], - ], - }, - }, - Object { - "Action": "s3:PutObject", - "Condition": Object { - "StringEquals": Object { - "s3:x-amz-acl": "bucket-owner-full-control", - }, - }, - "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "AlbLogBucketC26F4D8A", - "Arn", - ], - }, - "/AWSLogs/", - Object { - "Ref": "AWS::AccountId", - }, - "/*", - ], - ], - }, - }, - Object { - "Action": "s3:GetBucketAcl", - "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, - "Resource": Object { - "Fn::GetAtt": Array [ - "AlbLogBucketC26F4D8A", - "Arn", - ], - }, - }, - ], - "Version": "2012-10-17", - }, +exports[`BLEA Guest Stacks GuestAccount EC2 App Stacks 5`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttSgApp7DE78E7EGroupIdBE09B119": Object { + "Export": Object { + "Name": "BLEA-EC2App:ExportsOutputFnGetAttSgApp7DE78E7EGroupIdBE09B119", }, - "Type": "AWS::S3::BucketPolicy", + "Value": Object { + "Fn::GetAtt": Array [ + "SgApp7DE78E7E", + "GroupId", + ], + }, + }, + }, + "Parameters": Object { + "SsmParameterValueawsserviceamiamazonlinuxlatestamzn2amihvmx8664gp2C96584B6F00A464EAD1953AFF4B05118Parameter": Object { + "Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2", + "Type": "AWS::SSM::Parameter::Value", }, + }, + "Resources": Object { "AppEc20ABA98CDE": Object { "DependsOn": Array [ "ssminstancerole0E7D791C", @@ -2178,6 +1946,106 @@ chown apache.apache /var/www/html/index.html", }, "Type": "AWS::IAM::InstanceProfile", }, + "Ec2AlbAppAA9443D4": Object { + "Properties": Object { + "LoadBalancerAttributes": Array [ + Object { + "Key": "deletion_protection.enabled", + "Value": "false", + }, + Object { + "Key": "access_logs.s3.enabled", + "Value": "true", + }, + Object { + "Key": "access_logs.s3.bucket", + "Value": Object { + "Ref": "alblogbucketC97CC057", + }, + }, + ], + "Scheme": "internet-facing", + "SecurityGroups": Array [ + Object { + "Fn::GetAtt": Array [ + "SgAlbEA3AC417", + "GroupId", + ], + }, + ], + "Subnets": Array [ + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", + }, + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "Type": "application", + }, + "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer", + }, + "Ec2AlbAppEc2Listerner3B951862": Object { + "Properties": Object { + "DefaultActions": Array [ + Object { + "TargetGroupArn": Object { + "Ref": "Ec2AlbAppEc2ListernerEc2AppGroup18EB78C9", + }, + "Type": "forward", + }, + ], + "LoadBalancerArn": Object { + "Ref": "Ec2AlbAppAA9443D4", + }, + "Port": 80, + "Protocol": "HTTP", + }, + "Type": "AWS::ElasticLoadBalancingV2::Listener", + }, + "Ec2AlbAppEc2ListernerEc2AppGroup18EB78C9": Object { + "Properties": Object { + "Port": 80, + "Protocol": "HTTP", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "TargetGroupAttributes": Array [ + Object { + "Key": "deregistration_delay.timeout_seconds", + "Value": "30", + }, + ], + "TargetType": "instance", + "Targets": Array [ + Object { + "Id": Object { + "Ref": "AppEc20ABA98CDE", + }, + "Port": 80, + }, + Object { + "Id": Object { + "Ref": "AppEc214159FB59", + }, + "Port": 80, + }, + ], + "VpcId": Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, + }, + "Type": "AWS::ElasticLoadBalancingV2::TargetGroup", + }, "SgAlbEA3AC417": Object { "Properties": Object { "GroupDescription": "BLEA-EC2App/SgAlb", @@ -2193,7 +2061,7 @@ chown apache.apache /var/www/html/index.html", "SecurityGroupIngress": Array [ Object { "CidrIp": "0.0.0.0/0", - "Description": "from 0.0.0.0/0:80", + "Description": "Allow from anyone on port 80", "FromPort": 80, "IpProtocol": "tcp", "ToPort": 80, @@ -2256,42 +2124,160 @@ chown apache.apache /var/www/html/index.html", }, "Type": "AWS::EC2::SecurityGroupIngress", }, - "TgApp5918B053": Object { + "alblogbucketC97CC057": Object { + "DeletionPolicy": "Retain", "Properties": Object { - "HealthCheckEnabled": true, - "HealthCheckPath": "/index.html", - "Port": 80, - "Protocol": "HTTP", + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ + Object { + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", + }, + }, + ], + }, + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, "Tags": Array [ Object { "Key": "Environment", "Value": "Development", }, ], - "TargetGroupAttributes": Array [ - Object { - "Key": "deregistration_delay.timeout_seconds", - "Value": "60", - }, - ], - "TargetType": "instance", - "Targets": Array [ - Object { - "Id": Object { - "Ref": "AppEc20ABA98CDE", + }, + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + }, + "alblogbucketPolicyA74E0CFF": Object { + "Properties": Object { + "Bucket": Object { + "Ref": "alblogbucketC97CC057", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], }, - }, - Object { - "Id": Object { - "Ref": "AppEc214159FB59", + Object { + "Action": "s3:PutObject", + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::undefined:root", + ], + ], + }, + }, + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/AWSLogs/", + Object { + "Ref": "AWS::AccountId", + }, + "/*", + ], + ], + }, }, - }, - ], - "VpcId": Object { - "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + Object { + "Action": "s3:PutObject", + "Condition": Object { + "StringEquals": Object { + "s3:x-amz-acl": "bucket-owner-full-control", + }, + }, + "Effect": "Allow", + "Principal": Object { + "Service": "delivery.logs.amazonaws.com", + }, + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/AWSLogs/", + Object { + "Ref": "AWS::AccountId", + }, + "/*", + ], + ], + }, + }, + Object { + "Action": "s3:GetBucketAcl", + "Effect": "Allow", + "Principal": Object { + "Service": "delivery.logs.amazonaws.com", + }, + "Resource": Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + }, + ], + "Version": "2012-10-17", }, }, - "Type": "AWS::ElasticLoadBalancingV2::TargetGroup", + "Type": "AWS::S3::BucketPolicy", }, "ssminstancerole0E7D791C": Object { "Properties": Object { @@ -2335,19 +2321,19 @@ chown apache.apache /var/www/html/index.html", } `; -exports[`BLEA Guest Stacks GuestAccount EC2 App Stacks 9`] = ` +exports[`BLEA Guest Stacks GuestAccount EC2 App Stacks 6`] = ` Object { "Parameters": Object { - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24ArtifactHashBA91B77F": Object { - "Description": "Artifact hash for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827ArtifactHash1355580A": Object { + "Description": "Artifact hash for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", "Type": "String", }, - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3Bucket4D46ABB5": Object { - "Description": "S3 bucket for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A": Object { + "Description": "S3 bucket for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", "Type": "String", }, - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861": Object { - "Description": "S3 key for asset version \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3": Object { + "Description": "S3 key for asset version \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", "Type": "String", }, }, @@ -2355,6 +2341,7 @@ Object { "Aurora2CBAB212": Object { "DeletionPolicy": "Snapshot", "Properties": Object { + "CopyTagsToSnapshot": true, "DBClusterParameterGroupName": "default.aurora-postgresql11", "DBSubnetGroupName": Object { "Ref": "AuroraSubnetsC4DF45C9", @@ -2366,7 +2353,7 @@ Object { "Engine": "aurora-postgresql", "EngineVersion": "11.9", "KmsKeyId": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "MasterUserPassword": Object { "Fn::Join": Array [ @@ -2443,7 +2430,7 @@ Object { "Engine": "aurora-postgresql", "EngineVersion": "11.9", "PerformanceInsightsKMSKeyId": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "PerformanceInsightsRetentionPeriod": 7, "PubliclyAccessible": false, @@ -2472,7 +2459,7 @@ Object { "Engine": "aurora-postgresql", "EngineVersion": "11.9", "PerformanceInsightsKMSKeyId": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "PerformanceInsightsRetentionPeriod": 7, "PubliclyAccessible": false, @@ -2656,7 +2643,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3Bucket4D46ABB5", + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A", }, "S3Key": Object { "Fn::Join": Array [ @@ -2669,7 +2656,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861", + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", }, ], }, @@ -2682,7 +2669,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861", + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", }, ], }, @@ -2699,7 +2686,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs12.x", + "Runtime": "nodejs14.x", }, "Type": "AWS::Lambda::Function", }, @@ -2803,7 +2790,7 @@ Object { } `; -exports[`BLEA Guest Stacks GuestAccount EC2 App Stacks 10`] = ` +exports[`BLEA Guest Stacks GuestAccount EC2 App Stacks 7`] = ` Object { "Parameters": Object { "SsmParameterValueawsserviceamiamazonlinuxlatestamzn2amihvmx8664gp2C96584B6F00A464EAD1953AFF4B05118Parameter": Object { diff --git a/test/__snapshots__/blea-guest-ecsapp-sample.test.ts.snap b/usecases/guest-webapp-sample/test/__snapshots__/blea-guest-ecsapp-sample.test.ts.snap similarity index 61% rename from test/__snapshots__/blea-guest-ecsapp-sample.test.ts.snap rename to usecases/guest-webapp-sample/test/__snapshots__/blea-guest-ecsapp-sample.test.ts.snap index 59104f693..a77f67c15 100644 --- a/test/__snapshots__/blea-guest-ecsapp-sample.test.ts.snap +++ b/usecases/guest-webapp-sample/test/__snapshots__/blea-guest-ecsapp-sample.test.ts.snap @@ -155,7 +155,7 @@ Object { "Outputs": Object { "ExportsOutputFnGetAttKey961B73FDArn5A860C43": Object { "Export": Object { - "Name": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Name": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "Value": Object { "Fn::GetAtt": Array [ @@ -169,7 +169,7 @@ Object { "Key961B73FD": Object { "DeletionPolicy": "Retain", "Properties": Object { - "Description": "for General Logs", + "Description": "for App", "EnableKeyRotation": true, "KeyPolicy": Object { "Statement": Array [ @@ -220,9 +220,40 @@ Object { "kms:GenerateDataKey*", "kms:Describe*", ], + "Condition": Object { + "ArnLike": Object { + "kms:EncryptionContext:aws:logs:arn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:aws:logs:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":*", + ], + ], + }, + }, + }, "Effect": "Allow", "Principal": Object { - "Service": "delivery.logs.amazonaws.com", + "Service": Object { + "Fn::Join": Array [ + "", + Array [ + "logs.", + Object { + "Ref": "AWS::Region", + }, + ".amazonaws.com", + ], + ], + }, }, "Resource": "*", }, @@ -241,7 +272,7 @@ Object { }, "KeyAlias910D852D": Object { "Properties": Object { - "AliasName": "alias/BLEA-GeneralLogKey-for-generallog", + "AliasName": "alias/BLEA-AppKey-for-app", "TargetKeyId": Object { "Fn::GetAtt": Array [ "Key961B73FD", @@ -257,8 +288,66 @@ Object { exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 4`] = ` Object { + "Outputs": Object { + "ExportsOutputRefVpc8378EB38272D6E3A": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, + "Value": Object { + "Ref": "Vpc8378EB38", + }, + }, + "ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940", + }, + "Value": Object { + "Ref": "VpcPrivateSubnet1Subnet536B997A", + }, + }, + "ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3", + }, + "Value": Object { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1", + }, + }, + "ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6", + }, + "Value": Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + }, + "ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB", + }, + "Value": Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + }, + "ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", + }, + "Value": Object { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4", + }, + }, + "ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", + }, + "Value": Object { + "Ref": "VpcPublicSubnet2Subnet691E08A3", + }, + }, + }, "Resources": Object { - "GeneralLogBucket79898759": Object { + "FlowLogBucket0863ACCA": Object { "DeletionPolicy": "Retain", "Properties": Object { "AccessControl": "Private", @@ -267,7 +356,10 @@ Object { Object { "ServerSideEncryptionByDefault": Object { "KMSMasterKeyID": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::GetAtt": Array [ + "Key961B73FD", + "Arn", + ], }, "SSEAlgorithm": "aws:kms", }, @@ -290,26 +382,6 @@ Object { "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 5`] = ` -Object { - "Outputs": Object { - "ExportsOutputFnGetAttKey961B73FDArn5A860C43": Object { - "Export": Object { - "Name": "BLEA-FlowlogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", - }, - "Value": Object { - "Fn::GetAtt": Array [ - "Key961B73FD", - "Arn", - ], - }, - }, - }, - "Resources": Object { "Key961B73FD": Object { "DeletionPolicy": "Retain", "Properties": Object { @@ -385,7 +457,7 @@ Object { }, "KeyAlias910D852D": Object { "Properties": Object { - "AliasName": "alias/BLEA-FlowlogKey-for-flowlog", + "AliasName": "alias/BLEA-Vpc-for-flowlog", "TargetKeyId": Object { "Fn::GetAtt": Array [ "Key961B73FD", @@ -395,235 +467,65 @@ Object { }, "Type": "AWS::KMS::Alias", }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 6`] = ` -Object { - "Outputs": Object { - "ExportsOutputFnGetAttKey961B73FDArn5A860C43": Object { - "Export": Object { - "Name": "BLEA-FlowlogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", - }, - "Value": Object { - "Fn::GetAtt": Array [ - "Key961B73FD", - "Arn", - ], - }, - }, - }, - "Resources": Object { - "Key961B73FD": Object { - "DeletionPolicy": "Retain", + "NaclPrivate8CEDB4C5": Object { "Properties": Object { - "Description": "for VPC Flow log", - "EnableKeyRotation": true, - "KeyPolicy": Object { - "Statement": Array [ - Object { - "Action": Array [ - "kms:Create*", - "kms:Describe*", - "kms:Enable*", - "kms:List*", - "kms:Put*", - "kms:Update*", - "kms:Revoke*", - "kms:Disable*", - "kms:Get*", - "kms:Delete*", - "kms:ScheduleKeyDeletion", - "kms:CancelKeyDeletion", - "kms:GenerateDataKey", - "kms:TagResource", - "kms:UntagResource", - ], - "Effect": "Allow", - "Principal": Object { - "AWS": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::", - Object { - "Ref": "AWS::AccountId", - }, - ":root", - ], - ], - }, - }, - "Resource": "*", - }, - Object { - "Action": Array [ - "kms:Encrypt*", - "kms:Decrypt*", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:Describe*", - ], - "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, - "Resource": "*", - }, - ], - "Version": "2012-10-17", - }, "Tags": Array [ Object { "Key": "Environment", "Value": "Development", }, ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, }, - "Type": "AWS::KMS::Key", - "UpdateReplacePolicy": "Retain", + "Type": "AWS::EC2::NetworkAcl", }, - "KeyAlias910D852D": Object { + "NaclPrivateDefaultAssociationBLEAVpcPrivateSubnet1EF53EF1ECC2CE1DC": Object { "Properties": Object { - "AliasName": "alias/BLEA-FlowlogKey-for-flowlog", - "TargetKeyId": Object { - "Fn::GetAtt": Array [ - "Key961B73FD", - "Arn", - ], + "NetworkAclId": Object { + "Ref": "NaclPrivate8CEDB4C5", + }, + "SubnetId": Object { + "Ref": "VpcPrivateSubnet1Subnet536B997A", }, }, - "Type": "AWS::KMS::Alias", + "Type": "AWS::EC2::SubnetNetworkAclAssociation", }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 7`] = ` -Object { - "Outputs": Object { - "ExportsOutputRefVpc8378EB38272D6E3A": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", - }, - "Value": Object { - "Ref": "Vpc8378EB38", + "NaclPrivateDefaultAssociationBLEAVpcPrivateSubnet224E1285EE1D2ADA4": Object { + "Properties": Object { + "NetworkAclId": Object { + "Ref": "NaclPrivate8CEDB4C5", + }, + "SubnetId": Object { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1", + }, }, + "Type": "AWS::EC2::SubnetNetworkAclAssociation", }, - "ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940", - }, - "Value": Object { - "Ref": "VpcPrivateSubnet1Subnet536B997A", + "NaclPrivateNaclEgressPrivate072DB69C": Object { + "Properties": Object { + "CidrBlock": "0.0.0.0/0", + "Egress": true, + "NetworkAclId": Object { + "Ref": "NaclPrivate8CEDB4C5", + }, + "Protocol": -1, + "RuleAction": "allow", + "RuleNumber": 100, }, + "Type": "AWS::EC2::NetworkAclEntry", }, - "ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3", - }, - "Value": Object { - "Ref": "VpcPrivateSubnet2Subnet3788AAA1", - }, - }, - "ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6", - }, - "Value": Object { - "Ref": "VpcProtectedSubnet1Subnet38ECE18A", - }, - }, - "ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB", - }, - "Value": Object { - "Ref": "VpcProtectedSubnet2SubnetC22C3325", - }, - }, - "ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", - }, - "Value": Object { - "Ref": "VpcPublicSubnet1Subnet5C2D37C4", - }, - }, - "ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740": Object { - "Export": Object { - "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", - }, - "Value": Object { - "Ref": "VpcPublicSubnet2Subnet691E08A3", - }, - }, - }, - "Resources": Object { - "NaclPrivate8CEDB4C5": Object { - "Properties": Object { - "Tags": Array [ - Object { - "Key": "Environment", - "Value": "Development", - }, - ], - "VpcId": Object { - "Ref": "Vpc8378EB38", - }, - }, - "Type": "AWS::EC2::NetworkAcl", - }, - "NaclPrivateDefaultAssociationBLEAVpcPrivateSubnet1EF53EF1ECC2CE1DC": Object { - "Properties": Object { - "NetworkAclId": Object { - "Ref": "NaclPrivate8CEDB4C5", - }, - "SubnetId": Object { - "Ref": "VpcPrivateSubnet1Subnet536B997A", - }, - }, - "Type": "AWS::EC2::SubnetNetworkAclAssociation", - }, - "NaclPrivateDefaultAssociationBLEAVpcPrivateSubnet224E1285EE1D2ADA4": Object { - "Properties": Object { - "NetworkAclId": Object { - "Ref": "NaclPrivate8CEDB4C5", - }, - "SubnetId": Object { - "Ref": "VpcPrivateSubnet2Subnet3788AAA1", - }, - }, - "Type": "AWS::EC2::SubnetNetworkAclAssociation", - }, - "NaclPrivateNaclEgressPrivate072DB69C": Object { - "Properties": Object { - "CidrBlock": "0.0.0.0/0", - "Egress": true, - "NetworkAclId": Object { - "Ref": "NaclPrivate8CEDB4C5", - }, - "Protocol": -1, - "RuleAction": "allow", - "RuleNumber": 100, - }, - "Type": "AWS::EC2::NetworkAclEntry", - }, - "NaclPrivateNaclIngressPrivate7EEDF85F": Object { - "Properties": Object { - "CidrBlock": "0.0.0.0/0", - "Egress": false, - "NetworkAclId": Object { - "Ref": "NaclPrivate8CEDB4C5", - }, - "Protocol": -1, - "RuleAction": "allow", - "RuleNumber": 120, + "NaclPrivateNaclIngressPrivate7EEDF85F": Object { + "Properties": Object { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "NetworkAclId": Object { + "Ref": "NaclPrivate8CEDB4C5", + }, + "Protocol": -1, + "RuleAction": "allow", + "RuleNumber": 120, }, "Type": "AWS::EC2::NetworkAclEntry", }, @@ -984,10 +886,105 @@ Object { }, "Type": "AWS::EC2::SecurityGroup", }, + "VpcEcrEndpointForPrivate33BF5765": Object { + "Properties": Object { + "PrivateDnsEnabled": true, + "SecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "VpcEcrEndpointForPrivateSecurityGroup72F5BC77", + "GroupId", + ], + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".ecr.api", + ], + ], + }, + "SubnetIds": Array [ + Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + ], + "VpcEndpointType": "Interface", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcEcrEndpointForPrivateSecurityGroup72F5BC77": Object { + "Properties": Object { + "GroupDescription": "BLEA-Vpc/Vpc/EcrEndpointForPrivate/SecurityGroup", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "from ", + Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + ":443", + ], + ], + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, "VpcFlowLogsFlowLogBB096F0F": Object { "Properties": Object { "LogDestination": Object { - "Fn::ImportValue": "BLEA-FlowLog:ExportsOutputFnGetAttFlowLogBucket0863ACCAArnA4795174", + "Fn::GetAtt": Array [ + "FlowLogBucket0863ACCA", + "Arn", + ], }, "LogDestinationType": "s3", "ResourceId": Object { @@ -1833,295 +1830,316 @@ Object { } `; -exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 8`] = ` +exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 5`] = ` Object { "Outputs": Object { - "ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF": Object { + "ExportsOutputFnGetAttWebAclArnEF1FFB35": Object { "Export": Object { - "Name": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", + "Name": "BLEA-Waf:ExportsOutputFnGetAttWebAclArnEF1FFB35", }, "Value": Object { "Fn::GetAtt": Array [ - "apprepo60CBE1D0", + "WebAcl", "Arn", ], }, }, - "ExportsOutputRefapprepo60CBE1D08890BEDC": Object { - "Export": Object { - "Name": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", - }, - "Value": Object { - "Ref": "apprepo60CBE1D0", - }, - }, }, "Resources": Object { - "apprepo60CBE1D0": Object { - "DeletionPolicy": "Retain", + "WebAcl": Object { "Properties": Object { - "ImageScanningConfiguration": Object { - "ScanOnPush": true, + "DefaultAction": Object { + "Allow": Object {}, }, - "Tags": Array [ + "Name": "BLEAWebAcl", + "Rules": Array [ Object { - "Key": "Environment", - "Value": "Development", - }, - ], - }, - "Type": "AWS::ECR::Repository", - "UpdateReplacePolicy": "Retain", - }, - "apprepoImageScanCompleteAA5AE0A9": Object { - "Properties": Object { - "EventPattern": Object { - "detail": Object { - "repository-name": Array [ - Object { - "Ref": "apprepo60CBE1D0", + "Name": "AWSManagedRulesCommonRuleSet", + "OverrideAction": Object { + "Count": Object {}, + }, + "Priority": 1, + "Statement": Object { + "ManagedRuleGroupStatement": Object { + "Name": "AWSManagedRulesCommonRuleSet", + "VendorName": "AWS", }, - ], - "scan-status": Array [ - "COMPLETE", - ], + }, + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "AWS-AWSManagedRulesCommonRuleSet", + "SampledRequestsEnabled": true, + }, }, - "detail-type": Array [ - "ECR Image Scan", - ], - "source": Array [ - "aws.ecr", - ], - }, - "State": "ENABLED", - "Targets": Array [ Object { - "Arn": Object { - "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + "Name": "AWSManagedRulesKnownBadInputsRuleSet", + "OverrideAction": Object { + "Count": Object {}, }, - "Id": "Target0", + "Priority": 2, + "Statement": Object { + "ManagedRuleGroupStatement": Object { + "Name": "AWSManagedRulesKnownBadInputsRuleSet", + "VendorName": "AWS", + }, + }, + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet", + "SampledRequestsEnabled": true, + }, + }, + Object { + "Name": "AWSManagedRulesAmazonIpReputationList", + "OverrideAction": Object { + "Count": Object {}, + }, + "Priority": 3, + "Statement": Object { + "ManagedRuleGroupStatement": Object { + "Name": "AWSManagedRulesAmazonIpReputationList", + "VendorName": "AWS", + }, + }, + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "AWS-AWSManagedRulesAmazonIpReputationList", + "SampledRequestsEnabled": true, + }, + }, + Object { + "Name": "AWSManagedRulesLinuxRuleSet", + "OverrideAction": Object { + "Count": Object {}, + }, + "Priority": 4, + "Statement": Object { + "ManagedRuleGroupStatement": Object { + "Name": "AWSManagedRulesLinuxRuleSet", + "VendorName": "AWS", + }, + }, + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "AWS-AWSManagedRulesLinuxRuleSet", + "SampledRequestsEnabled": true, + }, + }, + Object { + "Name": "AWSManagedRulesSQLiRuleSet", + "OverrideAction": Object { + "Count": Object {}, + }, + "Priority": 5, + "Statement": Object { + "ManagedRuleGroupStatement": Object { + "Name": "AWSManagedRulesSQLiRuleSet", + "VendorName": "AWS", + }, + }, + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "AWS-AWSManagedRulesSQLiRuleSet", + "SampledRequestsEnabled": true, + }, + }, + ], + "Scope": "REGIONAL", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", }, ], + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "BLEAWebAcl", + "SampledRequestsEnabled": true, + }, }, - "Type": "AWS::Events::Rule", + "Type": "AWS::WAFv2::WebACL", }, }, } `; -exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 9`] = ` +exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 6`] = ` Object { - "Parameters": Object { - "AssetParametersc3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50bArtifactHash148EA76C": Object { - "Description": "Artifact hash for asset \\"c3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50b\\"", - "Type": "String", + "Outputs": Object { + "ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5": Object { + "Export": Object { + "Name": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "Alb16C2F182", + "LoadBalancerFullName", + ], + }, }, - "AssetParametersc3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50bS3Bucket3DE7C4A9": Object { - "Description": "S3 bucket for asset \\"c3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50b\\"", - "Type": "String", + "ExportsOutputFnGetAttAlbhttpEcsAppGroupA37FC8EBTargetGroupFullName09F53B70": Object { + "Export": Object { + "Name": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlbhttpEcsAppGroupA37FC8EBTargetGroupFullName09F53B70", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "AlbhttpEcsAppGroupA37FC8EB", + "TargetGroupFullName", + ], + }, }, - "AssetParametersc3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50bS3VersionKey321C6667": Object { - "Description": "S3 key for asset version \\"c3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50b\\"", - "Type": "String", + "ExportsOutputFnGetAttDistribution830FAC52DomainNameBEB09E30": Object { + "Export": Object { + "Name": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttDistribution830FAC52DomainNameBEB09E30", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "Distribution830FAC52", + "DomainName", + ], + }, }, - "AssetParametersf3d3a3cc7f26921b237eff24fc5dd7aef8f0465a1f376b8f7918eb3d4b3e8797ArtifactHashAAFCA968": Object { - "Description": "Artifact hash for asset \\"f3d3a3cc7f26921b237eff24fc5dd7aef8f0465a1f376b8f7918eb3d4b3e8797\\"", - "Type": "String", + "ExportsOutputFnGetAttSgAlbEA3AC417GroupId6CDB1929": Object { + "Export": Object { + "Name": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttSgAlbEA3AC417GroupId6CDB1929", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "SgAlbEA3AC417", + "GroupId", + ], + }, }, - "AssetParametersf3d3a3cc7f26921b237eff24fc5dd7aef8f0465a1f376b8f7918eb3d4b3e8797S3BucketBEE108A9": Object { - "Description": "S3 bucket for asset \\"f3d3a3cc7f26921b237eff24fc5dd7aef8f0465a1f376b8f7918eb3d4b3e8797\\"", - "Type": "String", + "ExportsOutputRefAlbhttpEcsAppGroupA37FC8EB49438955": Object { + "Export": Object { + "Name": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpEcsAppGroupA37FC8EB49438955", + }, + "Value": Object { + "Ref": "AlbhttpEcsAppGroupA37FC8EB", + }, }, - "AssetParametersf3d3a3cc7f26921b237eff24fc5dd7aef8f0465a1f376b8f7918eb3d4b3e8797S3VersionKeyA877E3C9": Object { - "Description": "S3 key for asset version \\"f3d3a3cc7f26921b237eff24fc5dd7aef8f0465a1f376b8f7918eb3d4b3e8797\\"", - "Type": "String", + "ExportsOutputRefAlbhttpF4DDFFB49C30E79C": Object { + "Export": Object { + "Name": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpF4DDFFB49C30E79C", + }, + "Value": Object { + "Ref": "AlbhttpF4DDFFB4", + }, + }, + "ExportsOutputRefDistribution830FAC524DF81588": Object { + "Export": Object { + "Name": "BLEA-SimpleFrontStack:ExportsOutputRefDistribution830FAC524DF81588", + }, + "Value": Object { + "Ref": "Distribution830FAC52", + }, }, }, "Resources": Object { - "AWS679f53fac002430cb0da5b7982bd22872D164C4C": Object { - "DependsOn": Array [ - "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", - ], + "Alb16C2F182": Object { "Properties": Object { - "Code": Object { - "S3Bucket": Object { - "Ref": "AssetParametersf3d3a3cc7f26921b237eff24fc5dd7aef8f0465a1f376b8f7918eb3d4b3e8797S3BucketBEE108A9", + "LoadBalancerAttributes": Array [ + Object { + "Key": "deletion_protection.enabled", + "Value": "false", }, - "S3Key": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "||", - Object { - "Ref": "AssetParametersf3d3a3cc7f26921b237eff24fc5dd7aef8f0465a1f376b8f7918eb3d4b3e8797S3VersionKeyA877E3C9", - }, - ], - }, - ], - }, - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "||", - Object { - "Ref": "AssetParametersf3d3a3cc7f26921b237eff24fc5dd7aef8f0465a1f376b8f7918eb3d4b3e8797S3VersionKeyA877E3C9", - }, - ], - }, - ], - }, - ], + Object { + "Key": "access_logs.s3.enabled", + "Value": "true", + }, + Object { + "Key": "access_logs.s3.bucket", + "Value": Object { + "Ref": "alblogbucketC97CC057", + }, + }, + ], + "Scheme": "internet-facing", + "SecurityGroups": Array [ + Object { + "Fn::GetAtt": Array [ + "SgAlbEA3AC417", + "GroupId", ], }, - }, - "Handler": "index.handler", - "Role": Object { - "Fn::GetAtt": Array [ - "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", - "Arn", - ], - }, - "Runtime": "nodejs12.x", + ], + "Subnets": Array [ + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", + }, + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", + }, + ], "Tags": Array [ Object { "Key": "Environment", "Value": "Development", }, ], - "Timeout": 120, + "Type": "application", }, - "Type": "AWS::Lambda::Function", + "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer", }, - "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2": Object { + "AlbhttpEcsAppGroupA37FC8EB": 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", - ], - ], - }, - ], + "Port": 80, + "Protocol": "HTTP", "Tags": Array [ Object { "Key": "Environment", "Value": "Development", }, ], + "TargetGroupAttributes": Array [ + Object { + "Key": "deregistration_delay.timeout_seconds", + "Value": "30", + }, + ], + "TargetType": "ip", + "VpcId": Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, }, - "Type": "AWS::IAM::Role", + "Type": "AWS::ElasticLoadBalancingV2::TargetGroup", }, - "sampleappproject1B1B27DE": Object { + "AlbhttpF4DDFFB4": Object { "Properties": Object { - "Artifacts": Object { - "Type": "NO_ARTIFACTS", - }, - "EncryptionKey": "alias/aws/s3", - "Environment": Object { - "ComputeType": "BUILD_GENERAL1_SMALL", - "EnvironmentVariables": Array [ - Object { - "Name": "AWS_DEFAULT_REGION", - "Type": "PLAINTEXT", - "Value": Object { - "Ref": "AWS::Region", - }, - }, - Object { - "Name": "AWS_ACCOUNT_ID", - "Type": "PLAINTEXT", - "Value": Object { - "Ref": "AWS::AccountId", - }, - }, - Object { - "Name": "IMAGE_TAG", - "Type": "PLAINTEXT", - "Value": "sample-app", + "DefaultActions": Array [ + Object { + "TargetGroupArn": Object { + "Ref": "AlbhttpEcsAppGroupA37FC8EB", }, + "Type": "forward", + }, + ], + "LoadBalancerArn": Object { + "Ref": "Alb16C2F182", + }, + "Port": 80, + "Protocol": "HTTP", + }, + "Type": "AWS::ElasticLoadBalancingV2::Listener", + }, + "CloudFrontLogBucketE75E505A": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ Object { - "Name": "IMAGE_REPO_NAME", - "Type": "PLAINTEXT", - "Value": Object { - "Fn::ImportValue": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", }, }, ], - "Image": "aws/codebuild/standard:4.0", - "ImagePullCredentialsType": "CODEBUILD", - "PrivilegedMode": true, - "Type": "LINUX_CONTAINER", - }, - "ServiceRole": Object { - "Fn::GetAtt": Array [ - "sampleappprojectRoleE074BB24", - "Arn", - ], }, - "Source": Object { - "Location": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Ref": "AssetParametersc3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50bS3Bucket3DE7C4A9", - }, - "/", - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "||", - Object { - "Ref": "AssetParametersc3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50bS3VersionKey321C6667", - }, - ], - }, - ], - }, - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "||", - Object { - "Ref": "AssetParametersc3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50bS3VersionKey321C6667", - }, - ], - }, - ], - }, - ], - ], - }, - "Type": "S3", + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, }, "Tags": Array [ Object { @@ -2130,46 +2148,43 @@ Object { }, ], }, - "Type": "AWS::CodeBuild::Project", + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", }, - "sampleappprojectRoleDefaultPolicy3B2ADD6F": Object { + "CloudFrontLogBucketPolicy300B6FAE": Object { "Properties": Object { + "Bucket": Object { + "Ref": "CloudFrontLogBucketE75E505A", + }, "PolicyDocument": Object { "Statement": Array [ Object { - "Action": Array [ - "s3:GetObject*", - "s3:GetBucket*", - "s3:List*", - ], - "Effect": "Allow", + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, "Resource": Array [ Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":s3:::", - Object { - "Ref": "AssetParametersc3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50bS3Bucket3DE7C4A9", - }, - ], + "Fn::GetAtt": Array [ + "CloudFrontLogBucketE75E505A", + "Arn", ], }, Object { "Fn::Join": Array [ "", Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":s3:::", Object { - "Ref": "AssetParametersc3641c985a5817398703c6df709295c2b4602a21174ed2ec95c1e02a7000d50bS3Bucket3DE7C4A9", + "Fn::GetAtt": Array [ + "CloudFrontLogBucketE75E505A", + "Arn", + ], }, "/*", ], @@ -2177,595 +2192,619 @@ Object { }, ], }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::S3::BucketPolicy", + }, + "Distribution830FAC52": Object { + "Properties": Object { + "DistributionConfig": Object { + "CacheBehaviors": Array [ Object { - "Action": Array [ - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents", + "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "Compress": true, + "PathPattern": "/static/*", + "TargetOriginId": "BLEASimpleFrontStackDistributionOrigin2CD1A6802", + "ViewerProtocolPolicy": "redirect-to-https", + }, + ], + "CustomErrorResponses": Array [ + Object { + "ErrorCachingMinTTL": 20, + "ErrorCode": 403, + "ResponseCode": 403, + "ResponsePagePath": "/static/sorry.html", + }, + ], + "DefaultCacheBehavior": Object { + "AllowedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + "PUT", + "PATCH", + "POST", + "DELETE", + ], + "CachePolicyId": "4135ea2d-6df8-44a3-9df3-4b5a84be39ad", + "Compress": true, + "OriginRequestPolicyId": "216adef6-5c7f-47e4-b989-5492eafa07d3", + "TargetOriginId": "BLEASimpleFrontStackDistributionOrigin18CA3EB0A", + "ViewerProtocolPolicy": "redirect-to-https", + }, + "DefaultRootObject": "/", + "Enabled": true, + "HttpVersion": "http2", + "IPV6Enabled": true, + "Logging": Object { + "Bucket": Object { + "Fn::GetAtt": Array [ + "CloudFrontLogBucketE75E505A", + "RegionalDomainName", ], - "Effect": "Allow", - "Resource": Array [ - Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":logs:", - Object { - "Ref": "AWS::Region", - }, - ":", - Object { - "Ref": "AWS::AccountId", - }, - ":log-group:/aws/codebuild/", - Object { - "Ref": "sampleappproject1B1B27DE", - }, - ], - ], - }, - Object { + }, + "IncludeCookies": true, + "Prefix": "CloudFrontAccessLogs/", + }, + "Origins": Array [ + Object { + "CustomOriginConfig": Object { + "OriginProtocolPolicy": "http-only", + "OriginSSLProtocols": Array [ + "TLSv1.2", + ], + }, + "DomainName": Object { + "Fn::GetAtt": Array [ + "Alb16C2F182", + "DNSName", + ], + }, + "Id": "BLEASimpleFrontStackDistributionOrigin18CA3EB0A", + }, + Object { + "DomainName": Object { + "Fn::GetAtt": Array [ + "WebBucket12880F5B", + "RegionalDomainName", + ], + }, + "Id": "BLEASimpleFrontStackDistributionOrigin2CD1A6802", + "S3OriginConfig": Object { + "OriginAccessIdentity": Object { "Fn::Join": Array [ "", Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":logs:", - Object { - "Ref": "AWS::Region", - }, - ":", - Object { - "Ref": "AWS::AccountId", - }, - ":log-group:/aws/codebuild/", + "origin-access-identity/cloudfront/", Object { - "Ref": "sampleappproject1B1B27DE", + "Ref": "DistributionOrigin2S3OriginE484D4BF", }, - ":*", ], ], }, - ], - }, - 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:", - Object { - "Ref": "AWS::Region", - }, - ":", - Object { - "Ref": "AWS::AccountId", - }, - ":report-group/", - Object { - "Ref": "sampleappproject1B1B27DE", - }, - "-*", - ], - ], - }, - }, - Object { - "Action": "ecr:GetAuthorizationToken", - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "ecr:BatchCheckLayerAvailability", - "ecr:CompleteLayerUpload", - "ecr:InitiateLayerUpload", - "ecr:PutImage", - "ecr:UploadLayerPart", - ], - "Effect": "Allow", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:aws:ecr:", - Object { - "Ref": "AWS::Region", - }, - ":", - Object { - "Ref": "AWS::AccountId", - }, - ":repository/", - Object { - "Fn::ImportValue": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", - }, - ], - ], }, }, ], - "Version": "2012-10-17", }, - "PolicyName": "sampleappprojectRoleDefaultPolicy3B2ADD6F", - "Roles": Array [ + "Tags": Array [ Object { - "Ref": "sampleappprojectRoleE074BB24", + "Key": "Environment", + "Value": "Development", }, ], }, - "Type": "AWS::IAM::Policy", + "Type": "AWS::CloudFront::Distribution", }, - "sampleappprojectRoleE074BB24": Object { + "DistributionOrigin2S3OriginE484D4BF": Object { "Properties": Object { - "AssumeRolePolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": Object { - "Service": "codebuild.amazonaws.com", - }, - }, - ], - "Version": "2012-10-17", + "CloudFrontOriginAccessIdentityConfig": Object { + "Comment": "Identity for BLEASimpleFrontStackDistributionOrigin2CD1A6802", }, + }, + "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", + }, + "SgAlbEA3AC417": Object { + "Properties": Object { + "GroupDescription": "BLEA-SimpleFrontStack/SgAlb", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow from anyone on port 80", + "FromPort": 80, + "IpProtocol": "tcp", + "ToPort": 80, + }, + ], "Tags": Array [ Object { "Key": "Environment", "Value": "Development", }, ], + "VpcId": Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, }, - "Type": "AWS::IAM::Role", + "Type": "AWS::EC2::SecurityGroup", }, - "startBuild2A2C3416": Object { - "DeletionPolicy": "Delete", - "DependsOn": Array [ - "startBuildCustomResourcePolicy55D05B4A", - ], + "WebAclAssociation": Object { "Properties": Object { - "Create": Object { - "Fn::Join": Array [ - "", - Array [ - "{\\"service\\":\\"CodeBuild\\",\\"action\\":\\"startBuild\\",\\"parameters\\":{\\"projectName\\":\\"", - Object { - "Ref": "sampleappproject1B1B27DE", - }, - "\\"},\\"physicalResourceId\\":{\\"id\\":\\"", - Object { - "Fn::GetAtt": Array [ - "sampleappproject1B1B27DE", - "Arn", - ], + "ResourceArn": Object { + "Ref": "Alb16C2F182", + }, + "WebACLArn": Object { + "Fn::ImportValue": "BLEA-Waf:ExportsOutputFnGetAttWebAclArnEF1FFB35", + }, + }, + "Type": "AWS::WAFv2::WebACLAssociation", + }, + "WebBucket12880F5B": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ + Object { + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", }, - "\\"}}", - ], + }, ], }, - "InstallLatestAwsSdk": true, - "ServiceToken": Object { - "Fn::GetAtt": Array [ - "AWS679f53fac002430cb0da5b7982bd22872D164C4C", - "Arn", - ], + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "VersioningConfiguration": Object { + "Status": "Enabled", }, }, - "Type": "Custom::AWS", - "UpdateReplacePolicy": "Delete", + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", }, - "startBuildCustomResourcePolicy55D05B4A": Object { + "WebBucketPolicy95D08FAA": Object { "Properties": Object { + "Bucket": Object { + "Ref": "WebBucket12880F5B", + }, "PolicyDocument": Object { "Statement": Array [ Object { - "Action": "codebuild:StartBuild", + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "WebBucket12880F5B", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "WebBucket12880F5B", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": "s3:GetObject", "Effect": "Allow", + "Principal": Object { + "CanonicalUser": Object { + "Fn::GetAtt": Array [ + "DistributionOrigin2S3OriginE484D4BF", + "S3CanonicalUserId", + ], + }, + }, "Resource": Object { - "Fn::GetAtt": Array [ - "sampleappproject1B1B27DE", - "Arn", + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "WebBucket12880F5B", + "Arn", + ], + }, + "/*", + ], ], }, }, ], "Version": "2012-10-17", }, - "PolicyName": "startBuildCustomResourcePolicy55D05B4A", - "Roles": Array [ - Object { - "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", - }, - ], - }, - "Type": "AWS::IAM::Policy", - }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 10`] = ` -Object { - "Outputs": Object { - "EcsAppLoadBalancerDNS24E0BD9F": Object { - "Value": Object { - "Fn::GetAtt": Array [ - "Alb16C2F182", - "DNSName", - ], }, + "Type": "AWS::S3::BucketPolicy", }, - "EcsAppServiceURL87E4732E": Object { - "Value": Object { - "Fn::Join": Array [ - "", - Array [ - "http://", + "alblogbucketC97CC057": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ Object { - "Fn::GetAtt": Array [ - "Alb16C2F182", - "DNSName", - ], + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", + }, }, ], + }, + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, ], }, + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", }, - "ExportsOutputFnGetAttSgFargateB5F998B7GroupId58365FB1": Object { - "Export": Object { - "Name": "BLEA-ECSApp:ExportsOutputFnGetAttSgFargateB5F998B7GroupId58365FB1", - }, - "Value": Object { - "Fn::GetAtt": Array [ - "SgFargateB5F998B7", - "GroupId", - ], - }, - }, - }, - "Resources": Object { - "Alb16C2F182": Object { + "alblogbucketPolicyA74E0CFF": Object { "Properties": Object { - "LoadBalancerAttributes": Array [ - Object { - "Key": "deletion_protection.enabled", - "Value": "false", - }, - Object { - "Key": "access_logs.s3.enabled", - "Value": "true", - }, - Object { - "Key": "access_logs.s3.bucket", - "Value": Object { - "Ref": "alblogbucketC97CC057", + "Bucket": Object { + "Ref": "alblogbucketC97CC057", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], }, - }, - ], - "Scheme": "internet-facing", - "SecurityGroups": Array [ - Object { - "Fn::GetAtt": Array [ - "SgAlbEA3AC417", - "GroupId", - ], - }, - ], - "Subnets": Array [ - Object { - "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", - }, - Object { - "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", - }, + Object { + "Action": "s3:PutObject", + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::undefined:root", + ], + ], + }, + }, + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/AWSLogs/", + Object { + "Ref": "AWS::AccountId", + }, + "/*", + ], + ], + }, + }, + Object { + "Action": "s3:PutObject", + "Condition": Object { + "StringEquals": Object { + "s3:x-amz-acl": "bucket-owner-full-control", + }, + }, + "Effect": "Allow", + "Principal": Object { + "Service": "delivery.logs.amazonaws.com", + }, + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/AWSLogs/", + Object { + "Ref": "AWS::AccountId", + }, + "/*", + ], + ], + }, + }, + Object { + "Action": "s3:GetBucketAcl", + "Effect": "Allow", + "Principal": Object { + "Service": "delivery.logs.amazonaws.com", + }, + "Resource": Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::S3::BucketPolicy", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 7`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF": Object { + "Export": Object { + "Name": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "apprepo60CBE1D0", + "Arn", ], + }, + }, + "ExportsOutputRefapprepo60CBE1D08890BEDC": Object { + "Export": Object { + "Name": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", + }, + "Value": Object { + "Ref": "apprepo60CBE1D0", + }, + }, + }, + "Resources": Object { + "apprepo60CBE1D0": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "ImageScanningConfiguration": Object { + "ScanOnPush": true, + }, "Tags": Array [ Object { "Key": "Environment", "Value": "Development", }, ], - "Type": "application", }, - "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer", + "Type": "AWS::ECR::Repository", + "UpdateReplacePolicy": "Retain", }, - "AlbHttp4xxAA038176": Object { + "apprepoImageScanCompleteAA5AE0A9": Object { "Properties": Object { - "ActionsEnabled": true, - "AlarmActions": Array [ - Object { - "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + "EventPattern": Object { + "detail": Object { + "repository-name": Array [ + Object { + "Ref": "apprepo60CBE1D0", + }, + ], + "scan-status": Array [ + "COMPLETE", + ], }, - ], - "ComparisonOperator": "GreaterThanOrEqualToThreshold", - "Dimensions": Array [ + "detail-type": Array [ + "ECR Image Scan", + ], + "source": Array [ + "aws.ecr", + ], + }, + "State": "ENABLED", + "Targets": Array [ Object { - "Name": "LoadBalancer", - "Value": Object { - "Fn::GetAtt": Array [ - "Alb16C2F182", - "LoadBalancerFullName", - ], + "Arn": Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", }, + "Id": "Target0", }, ], - "EvaluationPeriods": 3, - "MetricName": "HTTPCode_ELB_4XX_Count", - "Namespace": "AWS/ApplicationELB", - "Period": 60, - "Statistic": "Sum", - "Threshold": 10, }, - "Type": "AWS::CloudWatch::Alarm", + "Type": "AWS::Events::Rule", }, - "AlbHttp5xx7EA5097F": Object { + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 8`] = ` +Object { + "Parameters": Object { + "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcArtifactHashF236251A": Object { + "Description": "Artifact hash for asset \\"4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbc\\"", + "Type": "String", + }, + "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcS3Bucket02FC0B28": Object { + "Description": "S3 bucket for asset \\"4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbc\\"", + "Type": "String", + }, + "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcS3VersionKey547E84F8": Object { + "Description": "S3 key for asset version \\"4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbc\\"", + "Type": "String", + }, + "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1ArtifactHash40E2B0FF": Object { + "Description": "Artifact hash for asset \\"80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1\\"", + "Type": "String", + }, + "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3Bucket94628637": Object { + "Description": "S3 bucket for asset \\"80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1\\"", + "Type": "String", + }, + "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3VersionKeyDC582995": Object { + "Description": "S3 key for asset version \\"80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1\\"", + "Type": "String", + }, + }, + "Resources": Object { + "AWS679f53fac002430cb0da5b7982bd22872D164C4C": Object { + "DependsOn": Array [ + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + ], "Properties": Object { - "ActionsEnabled": true, - "AlarmActions": Array [ - Object { - "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcS3Bucket02FC0B28", }, - ], - "ComparisonOperator": "GreaterThanOrEqualToThreshold", - "Dimensions": Array [ - Object { - "Name": "LoadBalancer", - "Value": Object { - "Fn::GetAtt": Array [ - "Alb16C2F182", - "LoadBalancerFullName", - ], - }, - }, - ], - "EvaluationPeriods": 3, - "MetricName": "HTTPCode_ELB_5XX_Count", - "Namespace": "AWS/ApplicationELB", - "Period": 60, - "Statistic": "Sum", - "Threshold": 10, - }, - "Type": "AWS::CloudWatch::Alarm", - }, - "AlbPublicListener54E492A7": Object { - "Properties": Object { - "DefaultActions": Array [ - Object { - "TargetGroupArn": Object { - "Ref": "AlbPublicListenerECSGroupF2C3EDC7", - }, - "Type": "forward", - }, - ], - "LoadBalancerArn": Object { - "Ref": "Alb16C2F182", - }, - "Port": 80, - "Protocol": "HTTP", - }, - "Type": "AWS::ElasticLoadBalancingV2::Listener", - }, - "AlbPublicListenerECSGroupF2C3EDC7": Object { - "Properties": Object { - "Port": 80, - "Protocol": "HTTP", - "Tags": Array [ - Object { - "Key": "Environment", - "Value": "Development", - }, - ], - "TargetGroupAttributes": Array [ - Object { - "Key": "deregistration_delay.timeout_seconds", - "Value": "30", - }, - ], - "TargetType": "ip", - "VpcId": Object { - "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", - }, - }, - "Type": "AWS::ElasticLoadBalancingV2::TargetGroup", - }, - "AlbResponseTimeCFBA9063": Object { - "Properties": Object { - "ActionsEnabled": true, - "AlarmActions": Array [ - Object { - "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", - }, - ], - "ComparisonOperator": "GreaterThanOrEqualToThreshold", - "Dimensions": Array [ - Object { - "Name": "LoadBalancer", - "Value": Object { - "Fn::GetAtt": Array [ - "Alb16C2F182", - "LoadBalancerFullName", - ], - }, - }, - ], - "EvaluationPeriods": 3, - "MetricName": "TargetResponseTime", - "Namespace": "AWS/ApplicationELB", - "Period": 60, - "Statistic": "Average", - "Threshold": 100, - }, - "Type": "AWS::CloudWatch::Alarm", - }, - "AlbTgHealthyHostCount48815779": Object { - "Properties": Object { - "ActionsEnabled": true, - "AlarmActions": Array [ - Object { - "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", - }, - ], - "ComparisonOperator": "LessThanThreshold", - "Dimensions": Array [ - Object { - "Name": "LoadBalancer", - "Value": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "/", - Object { - "Ref": "AlbPublicListener54E492A7", - }, - ], - }, - ], - }, - "/", - Object { - "Fn::Select": Array [ - 2, - Object { - "Fn::Split": Array [ - "/", - Object { - "Ref": "AlbPublicListener54E492A7", - }, - ], - }, - ], - }, - "/", - Object { - "Fn::Select": Array [ - 3, - Object { - "Fn::Split": Array [ - "/", - Object { - "Ref": "AlbPublicListener54E492A7", - }, - ], - }, - ], - }, - ], - ], - }, - }, - Object { - "Name": "TargetGroup", - "Value": Object { - "Fn::GetAtt": Array [ - "AlbPublicListenerECSGroupF2C3EDC7", - "TargetGroupFullName", + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcS3VersionKey547E84F8", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcS3VersionKey547E84F8", + }, + ], + }, + ], + }, ], - }, + ], }, - ], - "EvaluationPeriods": 3, - "MetricName": "HealthyHostCount", - "Namespace": "AWS/ApplicationELB", - "Period": 60, - "Statistic": "Average", - "Threshold": 1, - }, - "Type": "AWS::CloudWatch::Alarm", - }, - "BsWebAclAssociation": Object { - "Properties": Object { - "ResourceArn": Object { - "Ref": "Alb16C2F182", }, - "WebACLArn": Object { + "Handler": "index.handler", + "Role": Object { "Fn::GetAtt": Array [ - "WebAcl", + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", "Arn", ], }, - }, - "Type": "AWS::WAFv2::WebACLAssociation", - }, - "ClusterEB0386A7": Object { - "Properties": Object { - "ClusterSettings": Array [ - Object { - "Name": "containerInsights", - "Value": "enabled", - }, - ], + "Runtime": "nodejs12.x", "Tags": Array [ Object { "Key": "Environment", "Value": "Development", }, ], + "Timeout": 120, }, - "Type": "AWS::ECS::Cluster", + "Type": "AWS::Lambda::Function", }, - "Distribution830FAC52": Object { + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2": Object { "Properties": Object { - "DistributionConfig": Object { - "DefaultCacheBehavior": Object { - "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", - "Compress": true, - "OriginRequestPolicyId": "88a5eaf4-2fd4-4709-b370-b4c650ea3fcf", - "TargetOriginId": "BLEAECSAppDistributionOrigin136010646", - "ViewerProtocolPolicy": "allow-all", - }, - "DefaultRootObject": "index.html", - "Enabled": true, - "HttpVersion": "http2", - "IPV6Enabled": true, - "Origins": Array [ + "AssumeRolePolicyDocument": Object { + "Statement": Array [ Object { - "DomainName": Object { - "Fn::GetAtt": Array [ - "WebBucket12880F5B", - "RegionalDomainName", - ], - }, - "Id": "BLEAECSAppDistributionOrigin136010646", - "S3OriginConfig": Object { - "OriginAccessIdentity": Object { - "Fn::Join": Array [ - "", - Array [ - "origin-access-identity/cloudfront/", - Object { - "Ref": "DistributionOrigin1S3Origin5F5C0696", - }, - ], - ], - }, + "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": "Environment", @@ -2773,190 +2812,94 @@ Object { }, ], }, - "Type": "AWS::CloudFront::Distribution", + "Type": "AWS::IAM::Role", }, - "DistributionOrigin1S3Origin5F5C0696": Object { + "sampleecsappproject2FB8FB9C": Object { "Properties": Object { - "CloudFrontOriginAccessIdentityConfig": Object { - "Comment": "Identity for BLEAECSAppDistributionOrigin136010646", - }, - }, - "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", - }, - "EcsAppServiceABC8901F": Object { - "DependsOn": Array [ - "AlbPublicListenerECSGroupF2C3EDC7", - "AlbPublicListener54E492A7", - ], - "Properties": Object { - "Cluster": Object { - "Ref": "ClusterEB0386A7", - }, - "DeploymentConfiguration": Object { - "MaximumPercent": 200, - "MinimumHealthyPercent": 50, + "Artifacts": Object { + "Type": "NO_ARTIFACTS", }, - "DesiredCount": 1, - "EnableECSManagedTags": false, - "HealthCheckGracePeriodSeconds": 60, - "LaunchType": "FARGATE", - "LoadBalancers": Array [ - Object { - "ContainerName": "web", - "ContainerPort": 80, - "TargetGroupArn": Object { - "Ref": "AlbPublicListenerECSGroupF2C3EDC7", - }, - }, - ], - "NetworkConfiguration": Object { - "AwsvpcConfiguration": Object { - "AssignPublicIp": "DISABLED", - "SecurityGroups": Array [ - Object { - "Fn::GetAtt": Array [ - "SgFargateB5F998B7", - "GroupId", - ], - }, - ], - "Subnets": Array [ - Object { - "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940", - }, - Object { - "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3", + "EncryptionKey": "alias/aws/s3", + "Environment": Object { + "ComputeType": "BUILD_GENERAL1_SMALL", + "EnvironmentVariables": Array [ + Object { + "Name": "AWS_DEFAULT_REGION", + "Type": "PLAINTEXT", + "Value": Object { + "Ref": "AWS::Region", }, - ], - }, - }, - "Tags": Array [ - Object { - "Key": "Environment", - "Value": "Development", - }, - ], - "TaskDefinition": Object { - "Ref": "EcsAppTaskDef15257EC1", - }, - }, - "Type": "AWS::ECS::Service", - }, - "EcsAppTaskDef15257EC1": Object { - "Properties": Object { - "ContainerDefinitions": Array [ - Object { - "Essential": true, - "Image": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::Select": Array [ - 4, - Object { - "Fn::Split": Array [ - ":", - Object { - "Fn::ImportValue": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", - }, - ], - }, - ], - }, - ".dkr.ecr.", - Object { - "Fn::Select": Array [ - 3, - Object { - "Fn::Split": Array [ - ":", - Object { - "Fn::ImportValue": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", - }, - ], - }, - ], - }, - ".", - Object { - "Ref": "AWS::URLSuffix", - }, - "/", - Object { - "Fn::ImportValue": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", - }, - ":sample-app", - ], - ], }, - "LogConfiguration": Object { - "LogDriver": "awslogs", - "Options": Object { - "awslogs-group": Object { - "Ref": "EcsAppTaskDefwebLogGroup022B5E5D", - }, - "awslogs-region": Object { - "Ref": "AWS::Region", - }, - "awslogs-stream-prefix": "EcsApp", + Object { + "Name": "AWS_ACCOUNT_ID", + "Type": "PLAINTEXT", + "Value": Object { + "Ref": "AWS::AccountId", }, }, - "Name": "web", - "PortMappings": Array [ - Object { - "ContainerPort": 80, - "Protocol": "tcp", + Object { + "Name": "IMAGE_TAG", + "Type": "PLAINTEXT", + "Value": "sample-ecs-app", + }, + Object { + "Name": "IMAGE_REPO_NAME", + "Type": "PLAINTEXT", + "Value": Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", }, - ], - }, - ], - "Cpu": "256", - "ExecutionRoleArn": Object { - "Fn::GetAtt": Array [ - "EcsTaskExecutionRoleC0B6A84D", - "Arn", + }, ], + "Image": "aws/codebuild/standard:4.0", + "ImagePullCredentialsType": "CODEBUILD", + "PrivilegedMode": true, + "Type": "LINUX_CONTAINER", }, - "Family": "BLEAECSAppEcsAppTaskDefF7B765CB", - "Memory": "512", - "NetworkMode": "awsvpc", - "RequiresCompatibilities": Array [ - "FARGATE", - ], - "Tags": Array [ - Object { - "Key": "Environment", - "Value": "Development", - }, - ], - "TaskRoleArn": Object { + "ServiceRole": Object { "Fn::GetAtt": Array [ - "EcsServiceTaskRoleB376410D", + "sampleecsappprojectRole65BC331E", "Arn", ], }, - }, - "Type": "AWS::ECS::TaskDefinition", - }, - "EcsAppTaskDefwebLogGroup022B5E5D": Object { - "DeletionPolicy": "Retain", - "Type": "AWS::Logs::LogGroup", - "UpdateReplacePolicy": "Retain", - }, - "EcsServiceTaskRoleB376410D": Object { - "Properties": Object { - "AssumeRolePolicyDocument": Object { - "Statement": Array [ - Object { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": Object { - "Service": "ecs-tasks.amazonaws.com", - }, - }, - ], - "Version": "2012-10-17", + "Source": Object { + "Location": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3Bucket94628637", + }, + "/", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3VersionKeyDC582995", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3VersionKeyDC582995", + }, + ], + }, + ], + }, + ], + ], + }, + "Type": "S3", }, "Tags": Array [ Object { @@ -2965,9 +2908,9 @@ Object { }, ], }, - "Type": "AWS::IAM::Role", + "Type": "AWS::CodeBuild::Project", }, - "EcsTaskExecutionRoleC0B6A84D": Object { + "sampleecsappprojectRole65BC331E": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ @@ -2975,26 +2918,12 @@ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { - "Service": "ecs-tasks.amazonaws.com", + "Service": "codebuild.amazonaws.com", }, }, ], "Version": "2012-10-17", }, - "ManagedPolicyArns": Array [ - Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy", - ], - ], - }, - ], "Tags": Array [ Object { "Key": "Environment", @@ -3004,557 +2933,838 @@ Object { }, "Type": "AWS::IAM::Role", }, - "EcsTaskExecutionRoleDefaultPolicyDCEEFDC3": Object { + "sampleecsappprojectRoleDefaultPolicy539385CD": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": Array [ - "ecr:BatchCheckLayerAvailability", - "ecr:GetDownloadUrlForLayer", - "ecr:BatchGetImage", + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", ], "Effect": "Allow", - "Resource": Object { - "Fn::ImportValue": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", - }, - }, - Object { - "Action": "ecr:GetAuthorizationToken", - "Effect": "Allow", - "Resource": "*", - }, - Object { - "Action": Array [ - "logs:CreateLogStream", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3Bucket94628637", + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3Bucket94628637", + }, + "/", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3VersionKeyDC582995", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3VersionKeyDC582995", + }, + ], + }, + ], + }, + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "logs:CreateLogGroup", + "logs:CreateLogStream", "logs:PutLogEvents", ], "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":logs:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":log-group:/aws/codebuild/", + Object { + "Ref": "sampleecsappproject2FB8FB9C", + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":logs:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":log-group:/aws/codebuild/", + Object { + "Ref": "sampleecsappproject2FB8FB9C", + }, + ":*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "codebuild:CreateReportGroup", + "codebuild:CreateReport", + "codebuild:UpdateReport", + "codebuild:BatchPutTestCases", + "codebuild:BatchPutCodeCoverages", + ], + "Effect": "Allow", "Resource": Object { - "Fn::GetAtt": Array [ - "EcsAppTaskDefwebLogGroup022B5E5D", - "Arn", + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":codebuild:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":report-group/", + Object { + "Ref": "sampleecsappproject2FB8FB9C", + }, + "-*", + ], + ], + }, + }, + Object { + "Action": "ecr:GetAuthorizationToken", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "ecr:BatchCheckLayerAvailability", + "ecr:CompleteLayerUpload", + "ecr:InitiateLayerUpload", + "ecr:PutImage", + "ecr:UploadLayerPart", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:aws:ecr:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":repository/", + Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", + }, + ], ], }, }, ], "Version": "2012-10-17", }, - "PolicyName": "EcsTaskExecutionRoleDefaultPolicyDCEEFDC3", + "PolicyName": "sampleecsappprojectRoleDefaultPolicy539385CD", "Roles": Array [ Object { - "Ref": "EcsTaskExecutionRoleC0B6A84D", + "Ref": "sampleecsappprojectRole65BC331E", }, ], }, "Type": "AWS::IAM::Policy", }, - "FargateCpuUtilD5713973": Object { + "startBuild2A2C3416": Object { + "DeletionPolicy": "Delete", + "DependsOn": Array [ + "startBuildCustomResourcePolicy55D05B4A", + ], "Properties": Object { - "ActionsEnabled": true, - "AlarmActions": Array [ - Object { - "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", - }, - ], - "ComparisonOperator": "GreaterThanOrEqualToThreshold", - "DatapointsToAlarm": 3, - "Dimensions": Array [ - Object { - "Name": "ClusterName", - "Value": Object { - "Ref": "ClusterEB0386A7", - }, - }, - Object { - "Name": "ServiceName", - "Value": Object { - "Fn::GetAtt": Array [ - "EcsAppServiceABC8901F", - "Name", - ], - }, - }, - ], - "EvaluationPeriods": 3, - "MetricName": "CPUUtilization", - "Namespace": "AWS/ECS", - "Period": 60, - "Statistic": "Average", - "Threshold": 80, + "Create": Object { + "Fn::Join": Array [ + "", + Array [ + "{\\"service\\":\\"CodeBuild\\",\\"action\\":\\"startBuild\\",\\"parameters\\":{\\"projectName\\":\\"", + Object { + "Ref": "sampleecsappproject2FB8FB9C", + }, + "\\"},\\"physicalResourceId\\":{\\"id\\":\\"", + Object { + "Fn::GetAtt": Array [ + "sampleecsappproject2FB8FB9C", + "Arn", + ], + }, + "\\"}}", + ], + ], + }, + "InstallLatestAwsSdk": true, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "Arn", + ], + }, }, - "Type": "AWS::CloudWatch::Alarm", + "Type": "Custom::AWS", + "UpdateReplacePolicy": "Delete", }, - "RunningTaskCount38288424": Object { + "startBuildCustomResourcePolicy55D05B4A": Object { "Properties": Object { - "ActionsEnabled": true, - "AlarmActions": Array [ + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "codebuild:StartBuild", + "Effect": "Allow", + "Resource": Object { + "Fn::GetAtt": Array [ + "sampleecsappproject2FB8FB9C", + "Arn", + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "startBuildCustomResourcePolicy55D05B4A", + "Roles": Array [ Object { - "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", }, ], - "ComparisonOperator": "LessThanThreshold", - "DatapointsToAlarm": 2, - "Dimensions": Array [ - Object { - "Name": "ClusterName", - "Value": Object { - "Ref": "ClusterEB0386A7", - }, - }, - Object { - "Name": "ServiceName", - "Value": Object { - "Fn::GetAtt": Array [ - "EcsAppServiceABC8901F", - "Name", - ], + }, + "Type": "AWS::IAM::Policy", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 9`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttAlbTgUnHealthyHostCountD4A96E1AArnF5DDFCE6": Object { + "Export": Object { + "Name": "BLEA-ECSApp:ExportsOutputFnGetAttAlbTgUnHealthyHostCountD4A96E1AArnF5DDFCE6", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "AlbTgUnHealthyHostCountD4A96E1A", + "Arn", + ], + }, + }, + "ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2": Object { + "Export": Object { + "Name": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "FargateServiceAC2B3B85", + "Name", + ], + }, + }, + "ExportsOutputFnGetAttSgFargateB5F998B7GroupId58365FB1": Object { + "Export": Object { + "Name": "BLEA-ECSApp:ExportsOutputFnGetAttSgFargateB5F998B7GroupId58365FB1", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "SgFargateB5F998B7", + "GroupId", + ], + }, + }, + "ExportsOutputRefClusterEB0386A796A0E3FE": Object { + "Export": Object { + "Name": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "Value": Object { + "Ref": "ClusterEB0386A7", + }, + }, + }, + "Resources": Object { + "AlbHttp4xxAA038176": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "Dimensions": Array [ + Object { + "Name": "LoadBalancer", + "Value": Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", }, }, ], "EvaluationPeriods": 3, - "MetricName": "RunningTaskCount", - "Namespace": "ECS/ContainerInsights", + "MetricName": "HTTPCode_ELB_4XX_Count", + "Namespace": "AWS/ApplicationELB", "Period": 60, - "Statistic": "Average", - "Threshold": 1, + "Statistic": "Sum", + "Threshold": 10, }, "Type": "AWS::CloudWatch::Alarm", }, - "SgAlbEA3AC417": Object { + "AlbHttp5xx7EA5097F": Object { "Properties": Object { - "GroupDescription": "BLEA-ECSApp/SgAlb", - "SecurityGroupEgress": Array [ - Object { - "CidrIp": "0.0.0.0/0", - "Description": "from 0.0.0.0/0:ALL PORTS", - "FromPort": 0, - "IpProtocol": "tcp", - "ToPort": 65535, - }, - ], - "SecurityGroupIngress": Array [ + "ActionsEnabled": true, + "AlarmActions": Array [ Object { - "CidrIp": "0.0.0.0/0", - "Description": "from 0.0.0.0/0:80", - "FromPort": 80, - "IpProtocol": "tcp", - "ToPort": 80, + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", }, ], - "Tags": Array [ + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "Dimensions": Array [ Object { - "Key": "Environment", - "Value": "Development", + "Name": "LoadBalancer", + "Value": Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, }, ], - "VpcId": Object { - "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", - }, - }, - "Type": "AWS::EC2::SecurityGroup", - }, - "SgAlbtoBLEAECSAppSgFargateA43D375480B683CCA0": Object { - "Properties": Object { - "Description": "Load balancer to target", - "DestinationSecurityGroupId": Object { - "Fn::GetAtt": Array [ - "SgFargateB5F998B7", - "GroupId", - ], - }, - "FromPort": 80, - "GroupId": Object { - "Fn::GetAtt": Array [ - "SgAlbEA3AC417", - "GroupId", - ], - }, - "IpProtocol": "tcp", - "ToPort": 80, + "EvaluationPeriods": 3, + "MetricName": "HTTPCode_ELB_5XX_Count", + "Namespace": "AWS/ApplicationELB", + "Period": 60, + "Statistic": "Sum", + "Threshold": 10, }, - "Type": "AWS::EC2::SecurityGroupEgress", + "Type": "AWS::CloudWatch::Alarm", }, - "SgFargateB5F998B7": Object { + "AlbResponseTimeCFBA9063": Object { "Properties": Object { - "GroupDescription": "BLEA-ECSApp/SgFargate", - "Tags": Array [ + "ActionsEnabled": true, + "AlarmActions": Array [ Object { - "Key": "Environment", - "Value": "Development", + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", }, ], - "VpcId": Object { - "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", - }, - }, - "Type": "AWS::EC2::SecurityGroup", - }, - "SgFargatefromBLEAECSAppSgAlb15422644807EDE13E6": Object { - "Properties": Object { - "Description": "Load balancer to target", - "FromPort": 80, - "GroupId": Object { - "Fn::GetAtt": Array [ - "SgFargateB5F998B7", - "GroupId", - ], - }, - "IpProtocol": "tcp", - "SourceSecurityGroupId": Object { - "Fn::GetAtt": Array [ - "SgAlbEA3AC417", - "GroupId", - ], - }, - "ToPort": 80, + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "Dimensions": Array [ + Object { + "Name": "LoadBalancer", + "Value": Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "TargetResponseTime", + "Namespace": "AWS/ApplicationELB", + "Period": 60, + "Statistic": "Average", + "Threshold": 100, }, - "Type": "AWS::EC2::SecurityGroupIngress", + "Type": "AWS::CloudWatch::Alarm", }, - "WebAcl": Object { + "AlbTgHealthyHostCount48815779": Object { "Properties": Object { - "DefaultAction": Object { - "Allow": Object {}, - }, - "Name": "BLEAWebAcl", - "Rules": Array [ + "ActionsEnabled": true, + "AlarmActions": Array [ Object { - "Name": "AWSManagedRulesCommonRuleSet", - "OverrideAction": Object { - "Count": Object {}, - }, - "Priority": 1, - "Statement": Object { - "ManagedRuleGroupStatement": Object { - "Name": "AWSManagedRulesCommonRuleSet", - "VendorName": "AWS", - }, - }, - "VisibilityConfig": Object { - "CloudWatchMetricsEnabled": true, - "MetricName": "AWS-AWSManagedRulesCommonRuleSet", - "SampledRequestsEnabled": true, - }, + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", }, + ], + "ComparisonOperator": "LessThanThreshold", + "Dimensions": Array [ Object { - "Name": "AWSManagedRulesKnownBadInputsRuleSet", - "OverrideAction": Object { - "Count": Object {}, - }, - "Priority": 2, - "Statement": Object { - "ManagedRuleGroupStatement": Object { - "Name": "AWSManagedRulesKnownBadInputsRuleSet", - "VendorName": "AWS", - }, - }, - "VisibilityConfig": Object { - "CloudWatchMetricsEnabled": true, - "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet", - "SampledRequestsEnabled": true, + "Name": "LoadBalancer", + "Value": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpF4DDFFB49C30E79C", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpF4DDFFB49C30E79C", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpF4DDFFB49C30E79C", + }, + ], + }, + ], + }, + ], + ], }, }, Object { - "Name": "AWSManagedRulesAmazonIpReputationList", - "OverrideAction": Object { - "Count": Object {}, - }, - "Priority": 3, - "Statement": Object { - "ManagedRuleGroupStatement": Object { - "Name": "AWSManagedRulesAmazonIpReputationList", - "VendorName": "AWS", - }, - }, - "VisibilityConfig": Object { - "CloudWatchMetricsEnabled": true, - "MetricName": "AWS-AWSManagedRulesAmazonIpReputationList", - "SampledRequestsEnabled": true, + "Name": "TargetGroup", + "Value": Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlbhttpEcsAppGroupA37FC8EBTargetGroupFullName09F53B70", }, }, + ], + "EvaluationPeriods": 3, + "MetricName": "HealthyHostCount", + "Namespace": "AWS/ApplicationELB", + "Period": 60, + "Statistic": "Average", + "Threshold": 1, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "AlbTgUnHealthyHostCountD4A96E1A": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ Object { - "Name": "AWSManagedRulesLinuxRuleSet", - "OverrideAction": Object { - "Count": Object {}, - }, - "Priority": 4, - "Statement": Object { - "ManagedRuleGroupStatement": Object { - "Name": "AWSManagedRulesLinuxRuleSet", - "VendorName": "AWS", - }, - }, - "VisibilityConfig": Object { - "CloudWatchMetricsEnabled": true, - "MetricName": "AWS-AWSManagedRulesLinuxRuleSet", - "SampledRequestsEnabled": true, - }, + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "Dimensions": Array [ Object { - "Name": "AWSManagedRulesSQLiRuleSet", - "OverrideAction": Object { - "Count": Object {}, - }, - "Priority": 5, - "Statement": Object { - "ManagedRuleGroupStatement": Object { - "Name": "AWSManagedRulesSQLiRuleSet", - "VendorName": "AWS", - }, + "Name": "LoadBalancer", + "Value": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpF4DDFFB49C30E79C", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpF4DDFFB49C30E79C", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpF4DDFFB49C30E79C", + }, + ], + }, + ], + }, + ], + ], }, - "VisibilityConfig": Object { - "CloudWatchMetricsEnabled": true, - "MetricName": "AWS-AWSManagedRulesSQLiRuleSet", - "SampledRequestsEnabled": true, + }, + Object { + "Name": "TargetGroup", + "Value": Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlbhttpEcsAppGroupA37FC8EBTargetGroupFullName09F53B70", }, }, ], - "Scope": "REGIONAL", + "EvaluationPeriods": 3, + "MetricName": "UnHealthyHostCount", + "Namespace": "AWS/ApplicationELB", + "Period": 60, + "Statistic": "Average", + "Threshold": 1, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "Cluster3DA9CCBA": Object { + "Properties": Object { + "CapacityProviders": Array [ + "FARGATE", + "FARGATE_SPOT", + ], + "Cluster": Object { + "Ref": "ClusterEB0386A7", + }, + "DefaultCapacityProviderStrategy": Array [], + }, + "Type": "AWS::ECS::ClusterCapacityProviderAssociations", + }, + "ClusterEB0386A7": Object { + "Properties": Object { + "ClusterSettings": Array [ + Object { + "Name": "containerInsights", + "Value": "enabled", + }, + ], "Tags": Array [ Object { "Key": "Environment", "Value": "Development", }, ], - "VisibilityConfig": Object { - "CloudWatchMetricsEnabled": true, - "MetricName": "BLEAWebAcl", - "SampledRequestsEnabled": true, - }, }, - "Type": "AWS::WAFv2::WebACL", + "Type": "AWS::ECS::Cluster", }, - "WebBucket12880F5B": Object { - "DeletionPolicy": "Retain", + "ECSServiceActionEventRule82991B64": Object { "Properties": Object { - "AccessControl": "Private", - "BucketEncryption": Object { - "ServerSideEncryptionConfiguration": Array [ - Object { - "ServerSideEncryptionByDefault": Object { - "SSEAlgorithm": "AES256", - }, - }, + "Description": "CloudWatch Event Rule to send notification on ECS Service action events.", + "EventPattern": Object { + "detail": Object { + "eventType": Array [ + "WARN", + "ERROR", + ], + }, + "detail-type": Array [ + "ECS Service Action", ], - }, - "CorsConfiguration": Object { - "CorsRules": Array [ - Object { - "AllowedMethods": Array [ - "GET", - "HEAD", - ], - "AllowedOrigins": Array [ - "https://example.com", - "https://www.example.com", - ], - }, + "source": Array [ + "aws.ecs", ], }, - "LifecycleConfiguration": Object { - "Rules": Array [ - Object { - "ExpirationInDays": 2555, - "Status": "Enabled", - "Transitions": Array [ - Object { - "StorageClass": "GLACIER", - "TransitionInDays": 90, - }, - ], + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "ECSServiceDeploymentEventRule8B457610": Object { + "Properties": Object { + "Description": "CloudWatch Event Rule to send notification on ECS Service deployment events.", + "EventPattern": Object { + "detail": Object { + "eventType": Array [ + "WARN", + "ERROR", + ], + }, + "detail-type": Array [ + "ECS Deployment State Change", + ], + "source": Array [ + "aws.ecs", ], }, - "PublicAccessBlockConfiguration": Object { - "BlockPublicAcls": true, - "BlockPublicPolicy": true, - "IgnorePublicAcls": true, - "RestrictPublicBuckets": true, - }, - "Tags": Array [ + "State": "ENABLED", + "Targets": Array [ Object { - "Key": "Environment", - "Value": "Development", + "Arn": Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + "Id": "Target0", }, ], }, - "Type": "AWS::S3::Bucket", - "UpdateReplacePolicy": "Retain", + "Type": "AWS::Events::Rule", }, - "WebBucketPolicy95D08FAA": Object { + "EcsServiceTaskRoleB376410D": Object { "Properties": Object { - "Bucket": Object { - "Ref": "WebBucket12880F5B", - }, - "PolicyDocument": Object { + "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { - "Action": "s3:*", - "Condition": Object { - "Bool": Object { - "aws:SecureTransport": "false", - }, - }, - "Effect": "Deny", - "Principal": "*", - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "WebBucket12880F5B", - "Arn", - ], - }, - "/*", - ], - ], - }, - }, - Object { - "Action": "s3:GetObject", + "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { - "CanonicalUser": Object { - "Fn::GetAtt": Array [ - "DistributionOrigin1S3Origin5F5C0696", - "S3CanonicalUserId", - ], - }, - }, - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "WebBucket12880F5B", - "Arn", - ], - }, - "/*", - ], - ], + "Service": "ecs-tasks.amazonaws.com", }, }, ], "Version": "2012-10-17", }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], }, - "Type": "AWS::S3::BucketPolicy", + "Type": "AWS::IAM::Role", }, - "alblogbucketC97CC057": Object { - "DeletionPolicy": "Retain", + "EcsTask48F71CB8": Object { "Properties": Object { - "AccessControl": "Private", - "BucketEncryption": Object { - "ServerSideEncryptionConfiguration": Array [ - Object { - "ServerSideEncryptionByDefault": Object { - "SSEAlgorithm": "AES256", + "ContainerDefinitions": Array [ + Object { + "Environment": Array [ + Object { + "Name": "ENVIRONMENT_VARIABLE_SAMPLE_KEY", + "Value": "Environment Variable Sample Value", + }, + ], + "Essential": true, + "Image": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", + }, + ], + }, + ], + }, + ".dkr.ecr.", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", + }, + ], + }, + ], + }, + ".", + Object { + "Ref": "AWS::URLSuffix", + }, + "/", + Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", + }, + ":sample-ecs-app", + ], + ], + }, + "LogConfiguration": Object { + "LogDriver": "awslogs", + "Options": Object { + "awslogs-group": Object { + "Ref": "FargateLogGroupA4B4CA79", + }, + "awslogs-region": Object { + "Ref": "AWS::Region", + }, + "awslogs-stream-prefix": "BLEA-ECSApp-", }, }, + "Name": "EcsApp", + "PortMappings": Array [ + Object { + "ContainerPort": 80, + "Protocol": "tcp", + }, + ], + }, + ], + "Cpu": "256", + "ExecutionRoleArn": Object { + "Fn::GetAtt": Array [ + "EcsTaskExecutionRoleC0B6A84D", + "Arn", ], }, - "PublicAccessBlockConfiguration": Object { - "BlockPublicAcls": true, - "BlockPublicPolicy": true, - "IgnorePublicAcls": true, - "RestrictPublicBuckets": true, - }, + "Family": "BLEAECSAppEcsTask9097B425", + "Memory": "512", + "NetworkMode": "awsvpc", + "RequiresCompatibilities": Array [ + "FARGATE", + ], "Tags": Array [ Object { "Key": "Environment", "Value": "Development", }, ], + "TaskRoleArn": Object { + "Fn::GetAtt": Array [ + "EcsServiceTaskRoleB376410D", + "Arn", + ], + }, }, - "Type": "AWS::S3::Bucket", - "UpdateReplacePolicy": "Retain", + "Type": "AWS::ECS::TaskDefinition", }, - "alblogbucketPolicyA74E0CFF": Object { + "EcsTaskExecutionRoleC0B6A84D": Object { "Properties": Object { - "Bucket": Object { - "Ref": "alblogbucketC97CC057", - }, - "PolicyDocument": Object { + "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { - "Action": "s3:PutObject", + "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { - "AWS": Object { - "Fn::Join": Array [ - "", - Array [ - "arn:", - Object { - "Ref": "AWS::Partition", - }, - ":iam::undefined:root", - ], - ], - }, - }, - "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "alblogbucketC97CC057", - "Arn", - ], - }, - "/AWSLogs/", - Object { - "Ref": "AWS::AccountId", - }, - "/*", - ], - ], + "Service": "ecs-tasks.amazonaws.com", }, }, - Object { - "Action": "s3:PutObject", - "Condition": Object { - "StringEquals": Object { - "s3:x-amz-acl": "bucket-owner-full-control", + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", }, - }, + ":iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "EcsTaskExecutionRoleDefaultPolicyDCEEFDC3": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "ecr:BatchCheckLayerAvailability", + "ecr:GetDownloadUrlForLayer", + "ecr:BatchGetImage", + ], "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, "Resource": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::GetAtt": Array [ - "alblogbucketC97CC057", - "Arn", - ], - }, - "/AWSLogs/", - Object { - "Ref": "AWS::AccountId", - }, - "/*", - ], - ], + "Fn::ImportValue": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", }, }, Object { - "Action": "s3:GetBucketAcl", + "Action": "ecr:GetAuthorizationToken", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "logs:CreateLogStream", + "logs:PutLogEvents", + ], "Effect": "Allow", - "Principal": Object { - "Service": "delivery.logs.amazonaws.com", - }, "Resource": Object { "Fn::GetAtt": Array [ - "alblogbucketC97CC057", + "FargateLogGroupA4B4CA79", "Arn", ], }, @@ -3562,45 +3772,337 @@ Object { ], "Version": "2012-10-17", }, + "PolicyName": "EcsTaskExecutionRoleDefaultPolicyDCEEFDC3", + "Roles": Array [ + Object { + "Ref": "EcsTaskExecutionRoleC0B6A84D", + }, + ], }, - "Type": "AWS::S3::BucketPolicy", - }, - }, -} -`; - -exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 11`] = ` -Object { - "Parameters": Object { - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24ArtifactHashBA91B77F": Object { - "Description": "Artifact hash for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", - "Type": "String", - }, - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3Bucket4D46ABB5": Object { - "Description": "S3 bucket for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", - "Type": "String", - }, - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861": Object { - "Description": "S3 key for asset version \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", - "Type": "String", + "Type": "AWS::IAM::Policy", }, - }, - "Resources": Object { - "Aurora2CBAB212": Object { - "DeletionPolicy": "Snapshot", + "FargateCpuUtilD5713973": Object { "Properties": Object { - "DBClusterParameterGroupName": "default.aurora-postgresql11", - "DBSubnetGroupName": Object { - "Ref": "AuroraSubnetsC4DF45C9", - }, - "DatabaseName": "mydbname", - "EnableCloudwatchLogsExports": Array [ - "postgresql", - ], - "Engine": "aurora-postgresql", - "EngineVersion": "11.9", + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "ClusterName", + "Value": Object { + "Ref": "ClusterEB0386A7", + }, + }, + Object { + "Name": "ServiceName", + "Value": Object { + "Fn::GetAtt": Array [ + "FargateServiceAC2B3B85", + "Name", + ], + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "CPUUtilization", + "Namespace": "AWS/ECS", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "FargateLogGroupA4B4CA79": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "KmsKeyId": Object { + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + }, + "RetentionInDays": 90, + }, + "Type": "AWS::Logs::LogGroup", + "UpdateReplacePolicy": "Retain", + }, + "FargateServiceAC2B3B85": Object { + "Properties": Object { + "CapacityProviderStrategy": Array [ + Object { + "CapacityProvider": "FARGATE", + "Weight": 1, + }, + ], + "Cluster": Object { + "Ref": "ClusterEB0386A7", + }, + "DeploymentConfiguration": Object { + "MaximumPercent": 200, + "MinimumHealthyPercent": 50, + }, + "DesiredCount": 2, + "EnableECSManagedTags": false, + "HealthCheckGracePeriodSeconds": 60, + "LoadBalancers": Array [ + Object { + "ContainerName": "EcsApp", + "ContainerPort": 80, + "TargetGroupArn": Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpEcsAppGroupA37FC8EB49438955", + }, + }, + ], + "NetworkConfiguration": Object { + "AwsvpcConfiguration": Object { + "AssignPublicIp": "DISABLED", + "SecurityGroups": Array [ + Object { + "Fn::GetAtt": Array [ + "SgFargateB5F998B7", + "GroupId", + ], + }, + ], + "Subnets": Array [ + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940", + }, + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3", + }, + ], + }, + }, + "PlatformVersion": "LATEST", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "TaskDefinition": Object { + "Ref": "EcsTask48F71CB8", + }, + }, + "Type": "AWS::ECS::Service", + }, + "FargateServiceTaskCountTarget8CF96FEA": Object { + "Properties": Object { + "MaxCapacity": 10, + "MinCapacity": 2, + "ResourceId": Object { + "Fn::Join": Array [ + "", + Array [ + "service/", + Object { + "Ref": "ClusterEB0386A7", + }, + "/", + Object { + "Fn::GetAtt": Array [ + "FargateServiceAC2B3B85", + "Name", + ], + }, + ], + ], + }, + "RoleARN": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService", + ], + ], + }, + "ScalableDimension": "ecs:service:DesiredCount", + "ServiceNamespace": "ecs", + }, + "Type": "AWS::ApplicationAutoScaling::ScalableTarget", + }, + "FargateServiceTaskCountTargetCpuScaling086750CA": Object { + "Properties": Object { + "PolicyName": "BLEAECSAppFargateServiceTaskCountTargetCpuScaling9E56094C", + "PolicyType": "TargetTrackingScaling", + "ScalingTargetId": Object { + "Ref": "FargateServiceTaskCountTarget8CF96FEA", + }, + "TargetTrackingScalingPolicyConfiguration": Object { + "PredefinedMetricSpecification": Object { + "PredefinedMetricType": "ECSServiceAverageCPUUtilization", + }, + "TargetValue": 50, + }, + }, + "Type": "AWS::ApplicationAutoScaling::ScalingPolicy", + }, + "FargateServiceTaskCountTargetRequestScaling7BAE812D": Object { + "Properties": Object { + "PolicyName": "BLEAECSAppFargateServiceTaskCountTargetRequestScaling2907EA74", + "PolicyType": "TargetTrackingScaling", + "ScalingTargetId": Object { + "Ref": "FargateServiceTaskCountTarget8CF96FEA", + }, + "TargetTrackingScalingPolicyConfiguration": Object { + "PredefinedMetricSpecification": Object { + "PredefinedMetricType": "ALBRequestCountPerTarget", + "ResourceLabel": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpF4DDFFB49C30E79C", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpF4DDFFB49C30E79C", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefAlbhttpF4DDFFB49C30E79C", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlbhttpEcsAppGroupA37FC8EBTargetGroupFullName09F53B70", + }, + ], + ], + }, + }, + "TargetValue": 10000, + }, + }, + "Type": "AWS::ApplicationAutoScaling::ScalingPolicy", + }, + "SgFargateB5F998B7": Object { + "Properties": Object { + "GroupDescription": "BLEA-ECSApp/SgFargate", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "VpcId": Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "SgFargatefromBLEASimpleFrontStackSgAlbF5AFDF4380BB65FF04": Object { + "Properties": Object { + "Description": "Load balancer to target", + "FromPort": 80, + "GroupId": Object { + "Fn::GetAtt": Array [ + "SgFargateB5F998B7", + "GroupId", + ], + }, + "IpProtocol": "tcp", + "SourceSecurityGroupId": Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttSgAlbEA3AC417GroupId6CDB1929", + }, + "ToPort": 80, + }, + "Type": "AWS::EC2::SecurityGroupIngress", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 10`] = ` +Object { + "Outputs": Object { + "ExportsOutputRefAurora2CBAB212533F1A7B": Object { + "Export": Object { + "Name": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "Value": Object { + "Ref": "Aurora2CBAB212", + }, + }, + }, + "Parameters": Object { + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827ArtifactHash1355580A": Object { + "Description": "Artifact hash for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A": Object { + "Description": "S3 bucket for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3": Object { + "Description": "S3 key for asset version \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + }, + "Resources": Object { + "Aurora2CBAB212": Object { + "DeletionPolicy": "Snapshot", + "Properties": Object { + "CopyTagsToSnapshot": true, + "DBClusterParameterGroupName": "default.aurora-postgresql11", + "DBSubnetGroupName": Object { + "Ref": "AuroraSubnetsC4DF45C9", + }, + "DatabaseName": "mydbname", + "EnableCloudwatchLogsExports": Array [ + "postgresql", + ], + "Engine": "aurora-postgresql", + "EngineVersion": "11.9", "KmsKeyId": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "MasterUserPassword": Object { "Fn::Join": Array [ @@ -3677,7 +4179,7 @@ Object { "Engine": "aurora-postgresql", "EngineVersion": "11.9", "PerformanceInsightsKMSKeyId": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "PerformanceInsightsRetentionPeriod": 7, "PubliclyAccessible": false, @@ -3706,7 +4208,7 @@ Object { "Engine": "aurora-postgresql", "EngineVersion": "11.9", "PerformanceInsightsKMSKeyId": Object { - "Fn::ImportValue": "BLEA-GeneralLogKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", }, "PerformanceInsightsRetentionPeriod": 7, "PubliclyAccessible": false, @@ -3778,38 +4280,10 @@ Object { }, "Type": "AWS::EC2::SecurityGroup", }, - "AuroraSecurityGroupBLEAECSAppSgFargateA43D3754IndirectPortfrom0257673A": Object { + "AuroraSecurityGroupfromBLEAECSAppSgFargateA43D3754IndirectPort5A254DEC": Object { "Properties": Object { - "Description": "to BLEADBAuroraPgAuroraSecurityGroup40CC001D:{IndirectPort}", - "DestinationSecurityGroupId": Object { - "Fn::GetAtt": Array [ - "AuroraSecurityGroup3440C66D", - "GroupId", - ], - }, - "FromPort": Object { - "Fn::GetAtt": Array [ - "Aurora2CBAB212", - "Endpoint.Port", - ], - }, - "GroupId": Object { - "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttSgFargateB5F998B7GroupId58365FB1", - }, - "IpProtocol": "tcp", - "ToPort": Object { - "Fn::GetAtt": Array [ - "Aurora2CBAB212", - "Endpoint.Port", - ], - }, - }, - "Type": "AWS::EC2::SecurityGroupEgress", - }, - "AuroraSecurityGroupfromBLEAECSAppSgFargateA43D3754IndirectPort5A254DEC": Object { - "Properties": Object { - "Description": "from BLEAECSAppSgFargateA43D3754:{IndirectPort}", - "FromPort": Object { + "Description": "from BLEAECSAppSgFargateA43D3754:{IndirectPort}", + "FromPort": Object { "Fn::GetAtt": Array [ "Aurora2CBAB212", "Endpoint.Port", @@ -3890,7 +4364,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3Bucket4D46ABB5", + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A", }, "S3Key": Object { "Fn::Join": Array [ @@ -3903,7 +4377,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861", + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", }, ], }, @@ -3916,7 +4390,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861", + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", }, ], }, @@ -3933,7 +4407,7 @@ Object { "Arn", ], }, - "Runtime": "nodejs12.x", + "Runtime": "nodejs14.x", }, "Type": "AWS::Lambda::Function", }, @@ -4036,3 +4510,717 @@ Object { }, } `; + +exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 11`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttcanaryDurationC40A61C8ArnEA607FBA": Object { + "Export": Object { + "Name": "BLEA-ECSAppCanary:ExportsOutputFnGetAttcanaryDurationC40A61C8ArnEA607FBA", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "canaryDurationC40A61C8", + "Arn", + ], + }, + }, + "ExportsOutputFnGetAttcanaryFailed044C3840ArnC37ECEF2": Object { + "Export": Object { + "Name": "BLEA-ECSAppCanary:ExportsOutputFnGetAttcanaryFailed044C3840ArnC37ECEF2", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "canaryFailed044C3840", + "Arn", + ], + }, + }, + }, + "Parameters": Object { + "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fArtifactHash57B5D042": Object { + "Description": "Artifact hash for asset \\"1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4f\\"", + "Type": "String", + }, + "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fS3Bucket1C64EECB": Object { + "Description": "S3 bucket for asset \\"1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4f\\"", + "Type": "String", + }, + "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fS3VersionKey1499FF9A": Object { + "Description": "S3 key for asset version \\"1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4f\\"", + "Type": "String", + }, + }, + "Resources": Object { + "BLEACanaryApp5871FBE7": Object { + "Properties": Object { + "ArtifactS3Location": Object { + "Fn::Join": Array [ + "", + Array [ + "s3://", + Object { + "Ref": "canaryArtifact2E578620", + }, + ], + ], + }, + "Code": Object { + "Handler": "index.handler", + "S3Bucket": Object { + "Ref": "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fS3Bucket1C64EECB", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fS3VersionKey1499FF9A", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fS3VersionKey1499FF9A", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "ExecutionRoleArn": Object { + "Fn::GetAtt": Array [ + "BLEACanaryAppServiceRole49FF798F", + "Arn", + ], + }, + "Name": "bleaecsappcanar26e831", + "RunConfig": Object { + "EnvironmentVariables": Object { + "TARGETHOST": Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttDistribution830FAC52DomainNameBEB09E30", + }, + "TARGETPATH": "/", + }, + }, + "RuntimeVersion": "syn-nodejs-puppeteer-3.2", + "Schedule": Object { + "DurationInSeconds": "0", + "Expression": "rate(1 minute)", + }, + "StartCanaryAfterCreation": true, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::Synthetics::Canary", + }, + "BLEACanaryAppServiceRole49FF798F": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "Policies": Array [ + Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:ListAllMyBuckets", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "s3:PutObject", + "s3:GetBucketLocation", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "canaryArtifact2E578620", + "Arn", + ], + }, + "/*", + ], + ], + }, + }, + Object { + "Action": "cloudwatch:PutMetricData", + "Condition": Object { + "StringEquals": Object { + "cloudwatch:namespace": "CloudWatchSynthetics", + }, + }, + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "logs:CreateLogStream", + "logs:CreateLogGroup", + "logs:PutLogEvents", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":logs:::*", + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "canaryPolicy", + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "appCanalyPolicyToS38FB38019": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:GetBucketLocation", + "Effect": "Allow", + "Resource": Object { + "Fn::GetAtt": Array [ + "canaryArtifact2E578620", + "Arn", + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "appCanalyPolicyToS38FB38019", + "Roles": Array [ + Object { + "Ref": "BLEACanaryAppServiceRole49FF798F", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "canaryArtifact2E578620": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ + Object { + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", + }, + }, + ], + }, + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + }, + "canaryArtifactPolicy2CF1C0A0": Object { + "Properties": Object { + "Bucket": Object { + "Ref": "canaryArtifact2E578620", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "canaryArtifact2E578620", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "canaryArtifact2E578620", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::S3::BucketPolicy", + }, + "canaryDurationC40A61C8": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 2, + "Dimensions": Array [ + Object { + "Name": "CanaryName", + "Value": Object { + "Ref": "BLEACanaryApp5871FBE7", + }, + }, + ], + "EvaluationPeriods": 2, + "MetricName": "Duration", + "Namespace": "CloudWatchSynthetics", + "Period": 60, + "Statistic": "Average", + "Threshold": 400, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "canaryFailed044C3840": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "CanaryName", + "Value": Object { + "Ref": "BLEACanaryApp5871FBE7", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Failed", + "Namespace": "CloudWatchSynthetics", + "Period": 60, + "Statistic": "Average", + "Threshold": 0.5, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App Stacks 12`] = ` +Object { + "Resources": Object { + "Dashboard9E4231ED": Object { + "Properties": Object { + "DashboardBody": Object { + "Fn::Join": Array [ + "", + Array [ + "{\\"widgets\\":[{\\"type\\":\\"text\\",\\"width\\":24,\\"height\\":1,\\"x\\":0,\\"y\\":0,\\"properties\\":{\\"markdown\\":\\"# Canary\\"}},{\\"type\\":\\"metric\\",\\"width\\":12,\\"height\\":6,\\"x\\":0,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Canary response time\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::ImportValue": "BLEA-ECSAppCanary:ExportsOutputFnGetAttcanaryDurationC40A61C8ArnEA607FBA", + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":12,\\"height\\":6,\\"x\\":12,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Canary request failed\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::ImportValue": "BLEA-ECSAppCanary:ExportsOutputFnGetAttcanaryFailed044C3840ArnC37ECEF2", + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"text\\",\\"width\\":24,\\"height\\":1,\\"x\\":0,\\"y\\":7,\\"properties\\":{\\"markdown\\":\\"# Requests\\"}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":0,\\"y\\":8,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"CloudFront Requests\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/CloudFront\\",\\"Requests\\",\\"DistributionId\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefDistribution830FAC524DF81588", + }, + "\\",\\"Region\\",\\"Global\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"region\\":\\"us-east-1\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":6,\\"y\\":8,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ALB Requests\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"RequestCount\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"NewConnectionCount\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"RejectedConnectionCount\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":12,\\"y\\":8,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Target Group Requests\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"HTTPCode_Target_2XX_Count\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":18,\\"y\\":8,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora Connections\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"DatabaseConnections\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"Writer: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/RDS\\",\\"DatabaseConnections\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"Reader: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"text\\",\\"width\\":24,\\"height\\":1,\\"x\\":0,\\"y\\":14,\\"properties\\":{\\"markdown\\":\\"# Response Time\\"}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":0,\\"y\\":15,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Target Group Response Time\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"TargetResponseTime\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":8,\\"y\\":15,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora Operation Lantency (Writer)\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"InsertLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"SelectLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"UpdateLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"CommitLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"DDLLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"DeleteLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"ReadLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}],[\\"AWS/RDS\\",\\"WriteLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":16,\\"y\\":15,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora Operation Lantency (Reader)\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"SelectLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"ReadLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}],[\\"AWS/RDS\\",\\"WriteLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"text\\",\\"width\\":24,\\"height\\":1,\\"x\\":0,\\"y\\":21,\\"properties\\":{\\"markdown\\":\\"# Errors\\"}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":0,\\"y\\":22,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"CloudFront Error Rates\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":true,\\"metrics\\":[[\\"AWS/CloudFront\\",\\"5xxErrorRate\\",\\"DistributionId\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefDistribution830FAC524DF81588", + }, + "\\",\\"Region\\",\\"Global\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"region\\":\\"us-east-1\\",\\"period\\":60}],[\\"AWS/CloudFront\\",\\"4xxErrorRate\\",\\"DistributionId\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputRefDistribution830FAC524DF81588", + }, + "\\",\\"Region\\",\\"Global\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"region\\":\\"us-east-1\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":6,\\"y\\":22,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ALB Errors\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"ClientTLSNegotiationErrorCount\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"HTTPCode_ELB_5XX_Count\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"HTTPCode_ELB_4XX_Count\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":12,\\"y\\":22,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Alarm for UnHealthy Host in Target Group\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttAlbTgUnHealthyHostCountD4A96E1AArnF5DDFCE6", + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":18,\\"y\\":22,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Target Group Errors\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":true,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"HTTPCode_Target_5XX_Count\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"HTTPCode_Target_4XX_Count\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"TargetConnectionErrorCount\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"text\\",\\"width\\":24,\\"height\\":1,\\"x\\":0,\\"y\\":28,\\"properties\\":{\\"markdown\\":\\"# Resources\\"}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":0,\\"y\\":29,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS CPU Utilization\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ECS\\",\\"CPUUtilization\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":6,\\"y\\":29,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS Memory Utilization\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ECS\\",\\"MemoryUtilization\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":12,\\"y\\":29,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS Desired Task Count\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"ECS/ContainerInsights\\",\\"DesiredTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":18,\\"y\\":29,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS Task Count\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":true,\\"metrics\\":[[\\"ECS/ContainerInsights\\",\\"RunningTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"ECS/ContainerInsights\\",\\"PendingTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":12,\\"height\\":6,\\"x\\":0,\\"y\\":35,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS Auto Scaling with Requests per tasks\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"RequestCountPerTarget\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",\\"TargetGroup\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SimpleFrontStack:ExportsOutputFnGetAttAlbhttpEcsAppGroupA37FC8EBTargetGroupFullName09F53B70", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"ECS/ContainerInsights\\",\\"RunningTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}],[\\"ECS/ContainerInsights\\",\\"PendingTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"value\\":10000,\\"label\\":\\"Threshold: Requests per tasks\\",\\"color\\":\\"#aec7e8\\",\\"fill\\":\\"below\\",\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":12,\\"height\\":6,\\"x\\":12,\\"y\\":35,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS Auto Scaling with CPU Utilization\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ECS\\",\\"CPUUtilization\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"ECS/ContainerInsights\\",\\"RunningTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}],[\\"ECS/ContainerInsights\\",\\"PendingTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"value\\":50,\\"label\\":\\"Threshold: CPU Utilization\\",\\"color\\":\\"#aec7e8\\",\\"fill\\":\\"below\\",\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":0,\\"y\\":41,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora CPU Utilization\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"CPUUtilization\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"Writer: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"CPUUtilization\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"Reader: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":6,\\"y\\":41,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora Free Memory\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"FreeableMemory\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"Writer: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"FreeableMemory\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"Reader: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":12,\\"y\\":41,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora Free Local Storage\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"FreeLocalStorage\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"Writer: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"FreeLocalStorage\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"Reader: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}}]}", + ], + ], + }, + "DashboardName": "BLEA-ECSApp", + }, + "Type": "AWS::CloudWatch::Dashboard", + }, + }, +} +`; diff --git a/usecases/guest-webapp-sample/test/__snapshots__/blea-guest-ecsapp-ssl-sample.test.ts.snap b/usecases/guest-webapp-sample/test/__snapshots__/blea-guest-ecsapp-ssl-sample.test.ts.snap new file mode 100644 index 000000000..1a2b63023 --- /dev/null +++ b/usecases/guest-webapp-sample/test/__snapshots__/blea-guest-ecsapp-ssl-sample.test.ts.snap @@ -0,0 +1,5618 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 1`] = ` +Object { + "Resources": Object { + "ChatbotChannel": Object { + "Properties": Object { + "ConfigurationName": "BLEA-ChatbotMonitor-T8XXXXXXX", + "IamRoleArn": Object { + "Fn::GetAtt": Array [ + "ChatbotRole8A87AA1F", + "Arn", + ], + }, + "SlackChannelId": "C01YYYYYYYY", + "SlackWorkspaceId": "T8XXXXXXX", + "SnsTopicArns": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + }, + "Type": "AWS::Chatbot::SlackChannelConfiguration", + }, + "ChatbotRole8A87AA1F": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "chatbot.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/ReadOnlyAccess", + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/CloudWatchReadOnlyAccess", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 2`] = ` +Object { + "Outputs": Object { + "ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821": Object { + "Export": Object { + "Name": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + "Value": Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + }, + }, + "Resources": Object { + "MonitorAlarmEmail9C782A25": Object { + "Properties": Object { + "Endpoint": "notify-monitoring@example.com", + "Protocol": "email", + "TopicArn": Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + }, + "Type": "AWS::SNS::Subscription", + }, + "MonitorAlarmTopic9C746E8C": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::SNS::Topic", + }, + "MonitorAlarmTopicPolicy7BD5FCD1": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sns:Publish", + "Effect": "Allow", + "Principal": Object { + "Service": "cloudwatch.amazonaws.com", + }, + "Resource": Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + "Sid": "0", + }, + Object { + "Action": "sns:Publish", + "Effect": "Allow", + "Principal": Object { + "Service": "events.amazonaws.com", + }, + "Resource": Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + "Sid": "1", + }, + ], + "Version": "2012-10-17", + }, + "Topics": Array [ + Object { + "Ref": "MonitorAlarmTopic9C746E8C", + }, + ], + }, + "Type": "AWS::SNS::TopicPolicy", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 3`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttKey961B73FDArn5A860C43": Object { + "Export": Object { + "Name": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "Key961B73FD", + "Arn", + ], + }, + }, + }, + "Resources": Object { + "Key961B73FD": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "Description": "for App", + "EnableKeyRotation": true, + "KeyPolicy": Object { + "Statement": Array [ + Object { + "Action": Array [ + "kms:Create*", + "kms:Describe*", + "kms:Enable*", + "kms:List*", + "kms:Put*", + "kms:Update*", + "kms:Revoke*", + "kms:Disable*", + "kms:Get*", + "kms:Delete*", + "kms:ScheduleKeyDeletion", + "kms:CancelKeyDeletion", + "kms:GenerateDataKey", + "kms:TagResource", + "kms:UntagResource", + ], + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":root", + ], + ], + }, + }, + "Resource": "*", + }, + Object { + "Action": Array [ + "kms:Encrypt*", + "kms:Decrypt*", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Describe*", + ], + "Condition": Object { + "ArnLike": Object { + "kms:EncryptionContext:aws:logs:arn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:aws:logs:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":*", + ], + ], + }, + }, + }, + "Effect": "Allow", + "Principal": Object { + "Service": Object { + "Fn::Join": Array [ + "", + Array [ + "logs.", + Object { + "Ref": "AWS::Region", + }, + ".amazonaws.com", + ], + ], + }, + }, + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::KMS::Key", + "UpdateReplacePolicy": "Retain", + }, + "KeyAlias910D852D": Object { + "Properties": Object { + "AliasName": "alias/BLEA-AppKey-for-app", + "TargetKeyId": Object { + "Fn::GetAtt": Array [ + "Key961B73FD", + "Arn", + ], + }, + }, + "Type": "AWS::KMS::Alias", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 4`] = ` +Object { + "Outputs": Object { + "ExportsOutputRefVpc8378EB38272D6E3A": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, + "Value": Object { + "Ref": "Vpc8378EB38", + }, + }, + "ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940", + }, + "Value": Object { + "Ref": "VpcPrivateSubnet1Subnet536B997A", + }, + }, + "ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3", + }, + "Value": Object { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1", + }, + }, + "ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6", + }, + "Value": Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + }, + "ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB", + }, + "Value": Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + }, + "ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", + }, + "Value": Object { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4", + }, + }, + "ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740": Object { + "Export": Object { + "Name": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", + }, + "Value": Object { + "Ref": "VpcPublicSubnet2Subnet691E08A3", + }, + }, + }, + "Resources": Object { + "FlowLogBucket0863ACCA": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ + Object { + "ServerSideEncryptionByDefault": Object { + "KMSMasterKeyID": Object { + "Fn::GetAtt": Array [ + "Key961B73FD", + "Arn", + ], + }, + "SSEAlgorithm": "aws:kms", + }, + }, + ], + }, + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + }, + "Key961B73FD": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "Description": "for VPC Flow log", + "EnableKeyRotation": true, + "KeyPolicy": Object { + "Statement": Array [ + Object { + "Action": Array [ + "kms:Create*", + "kms:Describe*", + "kms:Enable*", + "kms:List*", + "kms:Put*", + "kms:Update*", + "kms:Revoke*", + "kms:Disable*", + "kms:Get*", + "kms:Delete*", + "kms:ScheduleKeyDeletion", + "kms:CancelKeyDeletion", + "kms:GenerateDataKey", + "kms:TagResource", + "kms:UntagResource", + ], + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":root", + ], + ], + }, + }, + "Resource": "*", + }, + Object { + "Action": Array [ + "kms:Encrypt*", + "kms:Decrypt*", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:Describe*", + ], + "Effect": "Allow", + "Principal": Object { + "Service": "delivery.logs.amazonaws.com", + }, + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::KMS::Key", + "UpdateReplacePolicy": "Retain", + }, + "KeyAlias910D852D": Object { + "Properties": Object { + "AliasName": "alias/BLEA-Vpc-for-flowlog", + "TargetKeyId": Object { + "Fn::GetAtt": Array [ + "Key961B73FD", + "Arn", + ], + }, + }, + "Type": "AWS::KMS::Alias", + }, + "NaclPrivate8CEDB4C5": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::NetworkAcl", + }, + "NaclPrivateDefaultAssociationBLEAVpcPrivateSubnet1EF53EF1ECC2CE1DC": Object { + "Properties": Object { + "NetworkAclId": Object { + "Ref": "NaclPrivate8CEDB4C5", + }, + "SubnetId": Object { + "Ref": "VpcPrivateSubnet1Subnet536B997A", + }, + }, + "Type": "AWS::EC2::SubnetNetworkAclAssociation", + }, + "NaclPrivateDefaultAssociationBLEAVpcPrivateSubnet224E1285EE1D2ADA4": Object { + "Properties": Object { + "NetworkAclId": Object { + "Ref": "NaclPrivate8CEDB4C5", + }, + "SubnetId": Object { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1", + }, + }, + "Type": "AWS::EC2::SubnetNetworkAclAssociation", + }, + "NaclPrivateNaclEgressPrivate072DB69C": Object { + "Properties": Object { + "CidrBlock": "0.0.0.0/0", + "Egress": true, + "NetworkAclId": Object { + "Ref": "NaclPrivate8CEDB4C5", + }, + "Protocol": -1, + "RuleAction": "allow", + "RuleNumber": 100, + }, + "Type": "AWS::EC2::NetworkAclEntry", + }, + "NaclPrivateNaclIngressPrivate7EEDF85F": Object { + "Properties": Object { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "NetworkAclId": Object { + "Ref": "NaclPrivate8CEDB4C5", + }, + "Protocol": -1, + "RuleAction": "allow", + "RuleNumber": 120, + }, + "Type": "AWS::EC2::NetworkAclEntry", + }, + "NaclPublic8DAE29D3": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::NetworkAcl", + }, + "NaclPublicDefaultAssociationBLEAVpcPublicSubnet1307AA0A438FD5EFD": Object { + "Properties": Object { + "NetworkAclId": Object { + "Ref": "NaclPublic8DAE29D3", + }, + "SubnetId": Object { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4", + }, + }, + "Type": "AWS::EC2::SubnetNetworkAclAssociation", + }, + "NaclPublicDefaultAssociationBLEAVpcPublicSubnet24705B68BBC24C976": Object { + "Properties": Object { + "NetworkAclId": Object { + "Ref": "NaclPublic8DAE29D3", + }, + "SubnetId": Object { + "Ref": "VpcPublicSubnet2Subnet691E08A3", + }, + }, + "Type": "AWS::EC2::SubnetNetworkAclAssociation", + }, + "NaclPublicNaclEgressPublic3EA4D0C4": Object { + "Properties": Object { + "CidrBlock": "0.0.0.0/0", + "Egress": true, + "NetworkAclId": Object { + "Ref": "NaclPublic8DAE29D3", + }, + "Protocol": -1, + "RuleAction": "allow", + "RuleNumber": 100, + }, + "Type": "AWS::EC2::NetworkAclEntry", + }, + "NaclPublicNaclIngressPublicF18E2B85": Object { + "Properties": Object { + "CidrBlock": "0.0.0.0/0", + "Egress": false, + "NetworkAclId": Object { + "Ref": "NaclPublic8DAE29D3", + }, + "Protocol": -1, + "RuleAction": "allow", + "RuleNumber": 100, + }, + "Type": "AWS::EC2::NetworkAclEntry", + }, + "Vpc8378EB38": Object { + "Properties": Object { + "CidrBlock": "10.100.0.0/16", + "EnableDnsHostnames": true, + "EnableDnsSupport": true, + "InstanceTenancy": "default", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + }, + "Type": "AWS::EC2::VPC", + }, + "VpcEc2EndpointForPrivateEB1488F4": Object { + "Properties": Object { + "PrivateDnsEnabled": true, + "SecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "VpcEc2EndpointForPrivateSecurityGroupF9FF14F0", + "GroupId", + ], + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".ec2", + ], + ], + }, + "SubnetIds": Array [ + Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + ], + "VpcEndpointType": "Interface", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcEc2EndpointForPrivateSecurityGroupF9FF14F0": Object { + "Properties": Object { + "GroupDescription": "BLEA-Vpc/Vpc/Ec2EndpointForPrivate/SecurityGroup", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "from ", + Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + ":443", + ], + ], + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "VpcEc2MessagesEndpointForPrivate0809410D": Object { + "Properties": Object { + "PrivateDnsEnabled": true, + "SecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "VpcEc2MessagesEndpointForPrivateSecurityGroup7FBFF800", + "GroupId", + ], + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".ec2messages", + ], + ], + }, + "SubnetIds": Array [ + Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + ], + "VpcEndpointType": "Interface", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcEc2MessagesEndpointForPrivateSecurityGroup7FBFF800": Object { + "Properties": Object { + "GroupDescription": "BLEA-Vpc/Vpc/Ec2MessagesEndpointForPrivate/SecurityGroup", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "from ", + Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + ":443", + ], + ], + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "VpcEcrDkrEndpointForPrivate351B435F": Object { + "Properties": Object { + "PrivateDnsEnabled": true, + "SecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "VpcEcrDkrEndpointForPrivateSecurityGroup116DBAFC", + "GroupId", + ], + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".ecr.dkr", + ], + ], + }, + "SubnetIds": Array [ + Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + ], + "VpcEndpointType": "Interface", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcEcrDkrEndpointForPrivateSecurityGroup116DBAFC": Object { + "Properties": Object { + "GroupDescription": "BLEA-Vpc/Vpc/EcrDkrEndpointForPrivate/SecurityGroup", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "from ", + Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + ":443", + ], + ], + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "VpcEcrEndpointForPrivate33BF5765": Object { + "Properties": Object { + "PrivateDnsEnabled": true, + "SecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "VpcEcrEndpointForPrivateSecurityGroup72F5BC77", + "GroupId", + ], + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".ecr.api", + ], + ], + }, + "SubnetIds": Array [ + Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + ], + "VpcEndpointType": "Interface", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcEcrEndpointForPrivateSecurityGroup72F5BC77": Object { + "Properties": Object { + "GroupDescription": "BLEA-Vpc/Vpc/EcrEndpointForPrivate/SecurityGroup", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "from ", + Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + ":443", + ], + ], + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "VpcFlowLogsFlowLogBB096F0F": Object { + "Properties": Object { + "LogDestination": Object { + "Fn::GetAtt": Array [ + "FlowLogBucket0863ACCA", + "Arn", + ], + }, + "LogDestinationType": "s3", + "ResourceId": Object { + "Ref": "Vpc8378EB38", + }, + "ResourceType": "VPC", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "TrafficType": "ALL", + }, + "Type": "AWS::EC2::FlowLog", + }, + "VpcIGWD7BA715C": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + }, + "Type": "AWS::EC2::InternetGateway", + }, + "VpcLogsEndpointForPrivate8D2140E9": Object { + "Properties": Object { + "PrivateDnsEnabled": true, + "SecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "VpcLogsEndpointForPrivateSecurityGroupDD7F0AEB", + "GroupId", + ], + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".logs", + ], + ], + }, + "SubnetIds": Array [ + Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + ], + "VpcEndpointType": "Interface", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcLogsEndpointForPrivateSecurityGroupDD7F0AEB": Object { + "Properties": Object { + "GroupDescription": "BLEA-Vpc/Vpc/LogsEndpointForPrivate/SecurityGroup", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "from ", + Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + ":443", + ], + ], + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "VpcPrivateSubnet1DefaultRouteBE02A9ED": Object { + "Properties": Object { + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": Object { + "Ref": "VpcPublicSubnet1NATGateway4D7517AA", + }, + "RouteTableId": Object { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500", + }, + }, + "Type": "AWS::EC2::Route", + }, + "VpcPrivateSubnet1RouteTableAssociation70C59FA6": Object { + "Properties": Object { + "RouteTableId": Object { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500", + }, + "SubnetId": Object { + "Ref": "VpcPrivateSubnet1Subnet536B997A", + }, + }, + "Type": "AWS::EC2::SubnetRouteTableAssociation", + }, + "VpcPrivateSubnet1RouteTableB2C5B500": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/PrivateSubnet1", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::RouteTable", + }, + "VpcPrivateSubnet1Subnet536B997A": Object { + "Properties": Object { + "AvailabilityZone": Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::GetAZs": "", + }, + ], + }, + "CidrBlock": "10.100.4.0/22", + "MapPublicIpOnLaunch": false, + "Tags": Array [ + Object { + "Key": "aws-cdk:subnet-name", + "Value": "Private", + }, + Object { + "Key": "aws-cdk:subnet-type", + "Value": "Private", + }, + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/PrivateSubnet1", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::Subnet", + }, + "VpcPrivateSubnet2DefaultRoute060D2087": Object { + "Properties": Object { + "DestinationCidrBlock": "0.0.0.0/0", + "NatGatewayId": Object { + "Ref": "VpcPublicSubnet1NATGateway4D7517AA", + }, + "RouteTableId": Object { + "Ref": "VpcPrivateSubnet2RouteTableA678073B", + }, + }, + "Type": "AWS::EC2::Route", + }, + "VpcPrivateSubnet2RouteTableA678073B": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/PrivateSubnet2", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::RouteTable", + }, + "VpcPrivateSubnet2RouteTableAssociationA89CAD56": Object { + "Properties": Object { + "RouteTableId": Object { + "Ref": "VpcPrivateSubnet2RouteTableA678073B", + }, + "SubnetId": Object { + "Ref": "VpcPrivateSubnet2Subnet3788AAA1", + }, + }, + "Type": "AWS::EC2::SubnetRouteTableAssociation", + }, + "VpcPrivateSubnet2Subnet3788AAA1": Object { + "Properties": Object { + "AvailabilityZone": Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::GetAZs": "", + }, + ], + }, + "CidrBlock": "10.100.8.0/22", + "MapPublicIpOnLaunch": false, + "Tags": Array [ + Object { + "Key": "aws-cdk:subnet-name", + "Value": "Private", + }, + Object { + "Key": "aws-cdk:subnet-type", + "Value": "Private", + }, + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/PrivateSubnet2", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::Subnet", + }, + "VpcProtectedSubnet1RouteTable69FCECD8": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/ProtectedSubnet1", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::RouteTable", + }, + "VpcProtectedSubnet1RouteTableAssociation62F625F2": Object { + "Properties": Object { + "RouteTableId": Object { + "Ref": "VpcProtectedSubnet1RouteTable69FCECD8", + }, + "SubnetId": Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + }, + "Type": "AWS::EC2::SubnetRouteTableAssociation", + }, + "VpcProtectedSubnet1Subnet38ECE18A": Object { + "Properties": Object { + "AvailabilityZone": Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::GetAZs": "", + }, + ], + }, + "CidrBlock": "10.100.12.0/22", + "MapPublicIpOnLaunch": false, + "Tags": Array [ + Object { + "Key": "aws-cdk:subnet-name", + "Value": "Protected", + }, + Object { + "Key": "aws-cdk:subnet-type", + "Value": "Isolated", + }, + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/ProtectedSubnet1", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::Subnet", + }, + "VpcProtectedSubnet2RouteTableAssociation960FE2AC": Object { + "Properties": Object { + "RouteTableId": Object { + "Ref": "VpcProtectedSubnet2RouteTableFA54AE0B", + }, + "SubnetId": Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + }, + "Type": "AWS::EC2::SubnetRouteTableAssociation", + }, + "VpcProtectedSubnet2RouteTableFA54AE0B": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/ProtectedSubnet2", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::RouteTable", + }, + "VpcProtectedSubnet2SubnetC22C3325": Object { + "Properties": Object { + "AvailabilityZone": Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::GetAZs": "", + }, + ], + }, + "CidrBlock": "10.100.16.0/22", + "MapPublicIpOnLaunch": false, + "Tags": Array [ + Object { + "Key": "aws-cdk:subnet-name", + "Value": "Protected", + }, + Object { + "Key": "aws-cdk:subnet-type", + "Value": "Isolated", + }, + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/ProtectedSubnet2", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::Subnet", + }, + "VpcPublicSubnet1DefaultRoute3DA9E72A": Object { + "DependsOn": Array [ + "VpcVPCGWBF912B6E", + ], + "Properties": Object { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": Object { + "Ref": "VpcIGWD7BA715C", + }, + "RouteTableId": Object { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E", + }, + }, + "Type": "AWS::EC2::Route", + }, + "VpcPublicSubnet1EIPD7E02669": Object { + "Properties": Object { + "Domain": "vpc", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/PublicSubnet1", + }, + ], + }, + "Type": "AWS::EC2::EIP", + }, + "VpcPublicSubnet1NATGateway4D7517AA": Object { + "Properties": Object { + "AllocationId": Object { + "Fn::GetAtt": Array [ + "VpcPublicSubnet1EIPD7E02669", + "AllocationId", + ], + }, + "SubnetId": Object { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/PublicSubnet1", + }, + ], + }, + "Type": "AWS::EC2::NatGateway", + }, + "VpcPublicSubnet1RouteTable6C95E38E": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/PublicSubnet1", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::RouteTable", + }, + "VpcPublicSubnet1RouteTableAssociation97140677": Object { + "Properties": Object { + "RouteTableId": Object { + "Ref": "VpcPublicSubnet1RouteTable6C95E38E", + }, + "SubnetId": Object { + "Ref": "VpcPublicSubnet1Subnet5C2D37C4", + }, + }, + "Type": "AWS::EC2::SubnetRouteTableAssociation", + }, + "VpcPublicSubnet1Subnet5C2D37C4": Object { + "Properties": Object { + "AvailabilityZone": Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::GetAZs": "", + }, + ], + }, + "CidrBlock": "10.100.0.0/24", + "MapPublicIpOnLaunch": true, + "Tags": Array [ + Object { + "Key": "aws-cdk:subnet-name", + "Value": "Public", + }, + Object { + "Key": "aws-cdk:subnet-type", + "Value": "Public", + }, + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/PublicSubnet1", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::Subnet", + }, + "VpcPublicSubnet2DefaultRoute97F91067": Object { + "DependsOn": Array [ + "VpcVPCGWBF912B6E", + ], + "Properties": Object { + "DestinationCidrBlock": "0.0.0.0/0", + "GatewayId": Object { + "Ref": "VpcIGWD7BA715C", + }, + "RouteTableId": Object { + "Ref": "VpcPublicSubnet2RouteTable94F7E489", + }, + }, + "Type": "AWS::EC2::Route", + }, + "VpcPublicSubnet2RouteTable94F7E489": Object { + "Properties": Object { + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/PublicSubnet2", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::RouteTable", + }, + "VpcPublicSubnet2RouteTableAssociationDD5762D8": Object { + "Properties": Object { + "RouteTableId": Object { + "Ref": "VpcPublicSubnet2RouteTable94F7E489", + }, + "SubnetId": Object { + "Ref": "VpcPublicSubnet2Subnet691E08A3", + }, + }, + "Type": "AWS::EC2::SubnetRouteTableAssociation", + }, + "VpcPublicSubnet2Subnet691E08A3": Object { + "Properties": Object { + "AvailabilityZone": Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::GetAZs": "", + }, + ], + }, + "CidrBlock": "10.100.1.0/24", + "MapPublicIpOnLaunch": true, + "Tags": Array [ + Object { + "Key": "aws-cdk:subnet-name", + "Value": "Public", + }, + Object { + "Key": "aws-cdk:subnet-type", + "Value": "Public", + }, + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc/PublicSubnet2", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::Subnet", + }, + "VpcS3EndpointForPrivateA3FD7ECC": Object { + "Properties": Object { + "RouteTableIds": Array [ + Object { + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500", + }, + Object { + "Ref": "VpcPrivateSubnet2RouteTableA678073B", + }, + Object { + "Ref": "VpcProtectedSubnet1RouteTable69FCECD8", + }, + Object { + "Ref": "VpcProtectedSubnet2RouteTableFA54AE0B", + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".s3", + ], + ], + }, + "VpcEndpointType": "Gateway", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcSsmEndpointForPrivateF5DD8C02": Object { + "Properties": Object { + "PrivateDnsEnabled": true, + "SecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "VpcSsmEndpointForPrivateSecurityGroupB1574261", + "GroupId", + ], + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".ssm", + ], + ], + }, + "SubnetIds": Array [ + Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + ], + "VpcEndpointType": "Interface", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcSsmEndpointForPrivateSecurityGroupB1574261": Object { + "Properties": Object { + "GroupDescription": "BLEA-Vpc/Vpc/SsmEndpointForPrivate/SecurityGroup", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "from ", + Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + ":443", + ], + ], + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "VpcSsmMessagesEndpointForPrivate03FDDCE7": Object { + "Properties": Object { + "PrivateDnsEnabled": true, + "SecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "VpcSsmMessagesEndpointForPrivateSecurityGroup37880960", + "GroupId", + ], + }, + ], + "ServiceName": Object { + "Fn::Join": Array [ + "", + Array [ + "com.amazonaws.", + Object { + "Ref": "AWS::Region", + }, + ".ssmmessages", + ], + ], + }, + "SubnetIds": Array [ + Object { + "Ref": "VpcProtectedSubnet1Subnet38ECE18A", + }, + Object { + "Ref": "VpcProtectedSubnet2SubnetC22C3325", + }, + ], + "VpcEndpointType": "Interface", + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCEndpoint", + }, + "VpcSsmMessagesEndpointForPrivateSecurityGroup37880960": Object { + "Properties": Object { + "GroupDescription": "BLEA-Vpc/Vpc/SsmMessagesEndpointForPrivate/SecurityGroup", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "from ", + Object { + "Fn::GetAtt": Array [ + "Vpc8378EB38", + "CidrBlock", + ], + }, + ":443", + ], + ], + }, + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + Object { + "Key": "Name", + "Value": "BLEA-Vpc/Vpc", + }, + ], + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "VpcVPCGWBF912B6E": Object { + "Properties": Object { + "InternetGatewayId": Object { + "Ref": "VpcIGWD7BA715C", + }, + "VpcId": Object { + "Ref": "Vpc8378EB38", + }, + }, + "Type": "AWS::EC2::VPCGatewayAttachment", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 5`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttWebAclArnEF1FFB35": Object { + "Export": Object { + "Name": "BLEA-Waf:ExportsOutputFnGetAttWebAclArnEF1FFB35", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "WebAcl", + "Arn", + ], + }, + }, + }, + "Resources": Object { + "WebAcl": Object { + "Properties": Object { + "DefaultAction": Object { + "Allow": Object {}, + }, + "Name": "BLEAWebAcl", + "Rules": Array [ + Object { + "Name": "AWSManagedRulesCommonRuleSet", + "OverrideAction": Object { + "Count": Object {}, + }, + "Priority": 1, + "Statement": Object { + "ManagedRuleGroupStatement": Object { + "Name": "AWSManagedRulesCommonRuleSet", + "VendorName": "AWS", + }, + }, + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "AWS-AWSManagedRulesCommonRuleSet", + "SampledRequestsEnabled": true, + }, + }, + Object { + "Name": "AWSManagedRulesKnownBadInputsRuleSet", + "OverrideAction": Object { + "Count": Object {}, + }, + "Priority": 2, + "Statement": Object { + "ManagedRuleGroupStatement": Object { + "Name": "AWSManagedRulesKnownBadInputsRuleSet", + "VendorName": "AWS", + }, + }, + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet", + "SampledRequestsEnabled": true, + }, + }, + Object { + "Name": "AWSManagedRulesAmazonIpReputationList", + "OverrideAction": Object { + "Count": Object {}, + }, + "Priority": 3, + "Statement": Object { + "ManagedRuleGroupStatement": Object { + "Name": "AWSManagedRulesAmazonIpReputationList", + "VendorName": "AWS", + }, + }, + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "AWS-AWSManagedRulesAmazonIpReputationList", + "SampledRequestsEnabled": true, + }, + }, + Object { + "Name": "AWSManagedRulesLinuxRuleSet", + "OverrideAction": Object { + "Count": Object {}, + }, + "Priority": 4, + "Statement": Object { + "ManagedRuleGroupStatement": Object { + "Name": "AWSManagedRulesLinuxRuleSet", + "VendorName": "AWS", + }, + }, + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "AWS-AWSManagedRulesLinuxRuleSet", + "SampledRequestsEnabled": true, + }, + }, + Object { + "Name": "AWSManagedRulesSQLiRuleSet", + "OverrideAction": Object { + "Count": Object {}, + }, + "Priority": 5, + "Statement": Object { + "ManagedRuleGroupStatement": Object { + "Name": "AWSManagedRulesSQLiRuleSet", + "VendorName": "AWS", + }, + }, + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "AWS-AWSManagedRulesSQLiRuleSet", + "SampledRequestsEnabled": true, + }, + }, + ], + "Scope": "REGIONAL", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "VisibilityConfig": Object { + "CloudWatchMetricsEnabled": true, + "MetricName": "BLEAWebAcl", + "SampledRequestsEnabled": true, + }, + }, + "Type": "AWS::WAFv2::WebACL", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 6`] = ` +Object { + "Mappings": Object { + "AWSCloudFrontPartitionHostedZoneIdMap": Object { + "aws": Object { + "zoneId": "Z2FDTNDATAQYW2", + }, + "aws-cn": Object { + "zoneId": "Z3RFFRIM2A3IF5", + }, + }, + }, + "Outputs": Object { + "ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5": Object { + "Export": Object { + "Name": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "Alb16C2F182", + "LoadBalancerFullName", + ], + }, + }, + "ExportsOutputFnGetAttAlbhttpsEcsAppGroup3BC28E09TargetGroupFullNameCC53A960": Object { + "Export": Object { + "Name": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlbhttpsEcsAppGroup3BC28E09TargetGroupFullNameCC53A960", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "AlbhttpsEcsAppGroup3BC28E09", + "TargetGroupFullName", + ], + }, + }, + "ExportsOutputFnGetAttSgAlbEA3AC417GroupId6CDB1929": Object { + "Export": Object { + "Name": "BLEA-SSLFrontStack:ExportsOutputFnGetAttSgAlbEA3AC417GroupId6CDB1929", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "SgAlbEA3AC417", + "GroupId", + ], + }, + }, + "ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A": Object { + "Export": Object { + "Name": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A", + }, + "Value": Object { + "Ref": "AlbhttpsCA4BCF0A", + }, + }, + "ExportsOutputRefAlbhttpsEcsAppGroup3BC28E0927E2175A": Object { + "Export": Object { + "Name": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsEcsAppGroup3BC28E0927E2175A", + }, + "Value": Object { + "Ref": "AlbhttpsEcsAppGroup3BC28E09", + }, + }, + "ExportsOutputRefDistribution830FAC524DF81588": Object { + "Export": Object { + "Name": "BLEA-SSLFrontStack:ExportsOutputRefDistribution830FAC524DF81588", + }, + "Value": Object { + "Ref": "Distribution830FAC52", + }, + }, + }, + "Parameters": Object { + "AssetParameters7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4ArtifactHash5E28809B": Object { + "Description": "Artifact hash for asset \\"7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4\\"", + "Type": "String", + }, + "AssetParameters7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4S3Bucket5BEBDCBE": Object { + "Description": "S3 bucket for asset \\"7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4\\"", + "Type": "String", + }, + "AssetParameters7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4S3VersionKey326451BC": Object { + "Description": "S3 key for asset version \\"7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4\\"", + "Type": "String", + }, + }, + "Resources": Object { + "Alb16C2F182": Object { + "Properties": Object { + "LoadBalancerAttributes": Array [ + Object { + "Key": "deletion_protection.enabled", + "Value": "false", + }, + Object { + "Key": "access_logs.s3.enabled", + "Value": "true", + }, + Object { + "Key": "access_logs.s3.bucket", + "Value": Object { + "Ref": "alblogbucketC97CC057", + }, + }, + ], + "Scheme": "internet-facing", + "SecurityGroups": Array [ + Object { + "Fn::GetAtt": Array [ + "SgAlbEA3AC417", + "GroupId", + ], + }, + ], + "Subnets": Array [ + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet1Subnet5C2D37C4FFA2B456", + }, + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPublicSubnet2Subnet691E08A351552740", + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "Type": "application", + }, + "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer", + }, + "AlbhttpsCA4BCF0A": Object { + "Properties": Object { + "Certificates": Array [ + Object { + "CertificateArn": Object { + "Fn::GetAtt": Array [ + "apiCertificateCertificateRequestorResource8F5C9A18", + "Arn", + ], + }, + }, + ], + "DefaultActions": Array [ + Object { + "TargetGroupArn": Object { + "Ref": "AlbhttpsEcsAppGroup3BC28E09", + }, + "Type": "forward", + }, + ], + "LoadBalancerArn": Object { + "Ref": "Alb16C2F182", + }, + "Port": 443, + "Protocol": "HTTPS", + "SslPolicy": "ELBSecurityPolicy-TLS-1-2-Ext-2018-06", + }, + "Type": "AWS::ElasticLoadBalancingV2::Listener", + }, + "AlbhttpsEcsAppGroup3BC28E09": Object { + "Properties": Object { + "Port": 80, + "Protocol": "HTTP", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "TargetGroupAttributes": Array [ + Object { + "Key": "deregistration_delay.timeout_seconds", + "Value": "30", + }, + ], + "TargetType": "ip", + "VpcId": Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, + }, + "Type": "AWS::ElasticLoadBalancingV2::TargetGroup", + }, + "CloudFrontLogBucketE75E505A": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ + Object { + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", + }, + }, + ], + }, + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + }, + "CloudFrontLogBucketPolicy300B6FAE": Object { + "Properties": Object { + "Bucket": Object { + "Ref": "CloudFrontLogBucketE75E505A", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "CloudFrontLogBucketE75E505A", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "CloudFrontLogBucketE75E505A", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::S3::BucketPolicy", + }, + "Distribution830FAC52": Object { + "Properties": Object { + "DistributionConfig": Object { + "Aliases": Array [ + "www.example.com", + ], + "CacheBehaviors": Array [ + Object { + "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "Compress": true, + "PathPattern": "/static/*", + "TargetOriginId": "BLEASSLFrontStackDistributionOrigin26A9FB071", + "ViewerProtocolPolicy": "redirect-to-https", + }, + ], + "CustomErrorResponses": Array [ + Object { + "ErrorCachingMinTTL": 20, + "ErrorCode": 403, + "ResponseCode": 403, + "ResponsePagePath": "/static/sorry.html", + }, + ], + "DefaultCacheBehavior": Object { + "AllowedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + "PUT", + "PATCH", + "POST", + "DELETE", + ], + "CachePolicyId": "4135ea2d-6df8-44a3-9df3-4b5a84be39ad", + "Compress": true, + "OriginRequestPolicyId": "216adef6-5c7f-47e4-b989-5492eafa07d3", + "TargetOriginId": "BLEASSLFrontStackDistributionOrigin110216182", + "ViewerProtocolPolicy": "https-only", + }, + "DefaultRootObject": "/", + "Enabled": true, + "HttpVersion": "http2", + "IPV6Enabled": true, + "Logging": Object { + "Bucket": Object { + "Fn::GetAtt": Array [ + "CloudFrontLogBucketE75E505A", + "RegionalDomainName", + ], + }, + "IncludeCookies": true, + "Prefix": "CloudFrontAccessLogs/", + }, + "Origins": Array [ + Object { + "CustomOriginConfig": Object { + "OriginProtocolPolicy": "https-only", + "OriginSSLProtocols": Array [ + "TLSv1.2", + ], + }, + "DomainName": Object { + "Fn::GetAtt": Array [ + "Alb16C2F182", + "DNSName", + ], + }, + "Id": "BLEASSLFrontStackDistributionOrigin110216182", + }, + Object { + "DomainName": Object { + "Fn::GetAtt": Array [ + "WebBucket12880F5B", + "RegionalDomainName", + ], + }, + "Id": "BLEASSLFrontStackDistributionOrigin26A9FB071", + "S3OriginConfig": Object { + "OriginAccessIdentity": Object { + "Fn::Join": Array [ + "", + Array [ + "origin-access-identity/cloudfront/", + Object { + "Ref": "DistributionOrigin2S3OriginE484D4BF", + }, + ], + ], + }, + }, + }, + ], + "ViewerCertificate": Object { + "AcmCertificateArn": Object { + "Fn::GetAtt": Array [ + "cfCertificateCertificateRequestorResource9B6D8B73", + "Arn", + ], + }, + "MinimumProtocolVersion": "TLSv1.2_2019", + "SslSupportMethod": "sni-only", + }, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::CloudFront::Distribution", + }, + "DistributionOrigin2S3OriginE484D4BF": Object { + "Properties": Object { + "CloudFrontOriginAccessIdentityConfig": Object { + "Comment": "Identity for BLEASSLFrontStackDistributionOrigin26A9FB071", + }, + }, + "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", + }, + "SgAlbEA3AC417": Object { + "Properties": Object { + "GroupDescription": "BLEA-SSLFrontStack/SgAlb", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "SecurityGroupIngress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow from anyone on port 443", + "FromPort": 443, + "IpProtocol": "tcp", + "ToPort": 443, + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "VpcId": Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "WebAclAssociation": Object { + "Properties": Object { + "ResourceArn": Object { + "Ref": "Alb16C2F182", + }, + "WebACLArn": Object { + "Fn::ImportValue": "BLEA-Waf:ExportsOutputFnGetAttWebAclArnEF1FFB35", + }, + }, + "Type": "AWS::WAFv2::WebACLAssociation", + }, + "WebBucket12880F5B": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ + Object { + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", + }, + }, + ], + }, + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "VersioningConfiguration": Object { + "Status": "Enabled", + }, + }, + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + }, + "WebBucketPolicy95D08FAA": Object { + "Properties": Object { + "Bucket": Object { + "Ref": "WebBucket12880F5B", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "WebBucket12880F5B", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "WebBucket12880F5B", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": "s3:GetObject", + "Effect": "Allow", + "Principal": Object { + "CanonicalUser": Object { + "Fn::GetAtt": Array [ + "DistributionOrigin2S3OriginE484D4BF", + "S3CanonicalUserId", + ], + }, + }, + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "WebBucket12880F5B", + "Arn", + ], + }, + "/*", + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::S3::BucketPolicy", + }, + "alblogbucketC97CC057": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ + Object { + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", + }, + }, + ], + }, + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + }, + "alblogbucketPolicyA74E0CFF": Object { + "Properties": Object { + "Bucket": Object { + "Ref": "alblogbucketC97CC057", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": "s3:PutObject", + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::undefined:root", + ], + ], + }, + }, + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/AWSLogs/", + Object { + "Ref": "AWS::AccountId", + }, + "/*", + ], + ], + }, + }, + Object { + "Action": "s3:PutObject", + "Condition": Object { + "StringEquals": Object { + "s3:x-amz-acl": "bucket-owner-full-control", + }, + }, + "Effect": "Allow", + "Principal": Object { + "Service": "delivery.logs.amazonaws.com", + }, + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + "/AWSLogs/", + Object { + "Ref": "AWS::AccountId", + }, + "/*", + ], + ], + }, + }, + Object { + "Action": "s3:GetBucketAcl", + "Effect": "Allow", + "Principal": Object { + "Service": "delivery.logs.amazonaws.com", + }, + "Resource": Object { + "Fn::GetAtt": Array [ + "alblogbucketC97CC057", + "Arn", + ], + }, + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::S3::BucketPolicy", + }, + "apiCertificateCertificateRequestorFunctionF3A49B43": Object { + "DependsOn": Array [ + "apiCertificateCertificateRequestorFunctionServiceRoleDefaultPolicyD8E95BD0", + "apiCertificateCertificateRequestorFunctionServiceRole7F45A058", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4S3Bucket5BEBDCBE", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4S3VersionKey326451BC", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4S3VersionKey326451BC", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Handler": "index.certificateRequestHandler", + "Role": Object { + "Fn::GetAtt": Array [ + "apiCertificateCertificateRequestorFunctionServiceRole7F45A058", + "Arn", + ], + }, + "Runtime": "nodejs12.x", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "Timeout": 900, + }, + "Type": "AWS::Lambda::Function", + }, + "apiCertificateCertificateRequestorFunctionServiceRole7F45A058": 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": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "apiCertificateCertificateRequestorFunctionServiceRoleDefaultPolicyD8E95BD0": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "acm:RequestCertificate", + "acm:DescribeCertificate", + "acm:DeleteCertificate", + "acm:AddTagsToCertificate", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": "route53:GetChange", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": "route53:changeResourceRecordSets", + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/Z0123456789", + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "apiCertificateCertificateRequestorFunctionServiceRoleDefaultPolicyD8E95BD0", + "Roles": Array [ + Object { + "Ref": "apiCertificateCertificateRequestorFunctionServiceRole7F45A058", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "apiCertificateCertificateRequestorResource8F5C9A18": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "DomainName": "www.example.com", + "HostedZoneId": "Z0123456789", + "Region": Object { + "Ref": "AWS::Region", + }, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "apiCertificateCertificateRequestorFunctionF3A49B43", + "Arn", + ], + }, + "Tags": Object { + "Environment": "Development", + }, + }, + "Type": "AWS::CloudFormation::CustomResource", + "UpdateReplacePolicy": "Delete", + }, + "cfCertificateCertificateRequestorFunctionE6AD6A96": Object { + "DependsOn": Array [ + "cfCertificateCertificateRequestorFunctionServiceRoleDefaultPolicy495CD49A", + "cfCertificateCertificateRequestorFunctionServiceRole97113ACC", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4S3Bucket5BEBDCBE", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4S3VersionKey326451BC", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7af6295e521fd55af94332393ceffb3e866aac4dc4956321f7918f21e72199e4S3VersionKey326451BC", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Handler": "index.certificateRequestHandler", + "Role": Object { + "Fn::GetAtt": Array [ + "cfCertificateCertificateRequestorFunctionServiceRole97113ACC", + "Arn", + ], + }, + "Runtime": "nodejs12.x", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "Timeout": 900, + }, + "Type": "AWS::Lambda::Function", + }, + "cfCertificateCertificateRequestorFunctionServiceRole97113ACC": 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": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "cfCertificateCertificateRequestorFunctionServiceRoleDefaultPolicy495CD49A": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "acm:RequestCertificate", + "acm:DescribeCertificate", + "acm:DeleteCertificate", + "acm:AddTagsToCertificate", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": "route53:GetChange", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": "route53:changeResourceRecordSets", + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":route53:::hostedzone/Z0123456789", + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "cfCertificateCertificateRequestorFunctionServiceRoleDefaultPolicy495CD49A", + "Roles": Array [ + Object { + "Ref": "cfCertificateCertificateRequestorFunctionServiceRole97113ACC", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "cfCertificateCertificateRequestorResource9B6D8B73": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "DomainName": "www.example.com", + "HostedZoneId": "Z0123456789", + "Region": "us-east-1", + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "cfCertificateCertificateRequestorFunctionE6AD6A96", + "Arn", + ], + }, + "Tags": Object { + "Environment": "Development", + }, + }, + "Type": "AWS::CloudFormation::CustomResource", + "UpdateReplacePolicy": "Delete", + }, + "sampleApp494D01F0": Object { + "Properties": Object { + "AliasTarget": Object { + "DNSName": Object { + "Fn::GetAtt": Array [ + "Distribution830FAC52", + "DomainName", + ], + }, + "HostedZoneId": Object { + "Fn::FindInMap": Array [ + "AWSCloudFrontPartitionHostedZoneIdMap", + Object { + "Ref": "AWS::Partition", + }, + "zoneId", + ], + }, + }, + "HostedZoneId": "Z0123456789", + "Name": "www.example.com.", + "Type": "A", + }, + "Type": "AWS::Route53::RecordSet", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 7`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF": Object { + "Export": Object { + "Name": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "apprepo60CBE1D0", + "Arn", + ], + }, + }, + "ExportsOutputRefapprepo60CBE1D08890BEDC": Object { + "Export": Object { + "Name": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", + }, + "Value": Object { + "Ref": "apprepo60CBE1D0", + }, + }, + }, + "Resources": Object { + "apprepo60CBE1D0": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "ImageScanningConfiguration": Object { + "ScanOnPush": true, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::ECR::Repository", + "UpdateReplacePolicy": "Retain", + }, + "apprepoImageScanCompleteAA5AE0A9": Object { + "Properties": Object { + "EventPattern": Object { + "detail": Object { + "repository-name": Array [ + Object { + "Ref": "apprepo60CBE1D0", + }, + ], + "scan-status": Array [ + "COMPLETE", + ], + }, + "detail-type": Array [ + "ECR Image Scan", + ], + "source": Array [ + "aws.ecr", + ], + }, + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 8`] = ` +Object { + "Parameters": Object { + "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcArtifactHashF236251A": Object { + "Description": "Artifact hash for asset \\"4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbc\\"", + "Type": "String", + }, + "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcS3Bucket02FC0B28": Object { + "Description": "S3 bucket for asset \\"4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbc\\"", + "Type": "String", + }, + "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcS3VersionKey547E84F8": Object { + "Description": "S3 key for asset version \\"4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbc\\"", + "Type": "String", + }, + "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1ArtifactHash40E2B0FF": Object { + "Description": "Artifact hash for asset \\"80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1\\"", + "Type": "String", + }, + "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3Bucket94628637": Object { + "Description": "S3 bucket for asset \\"80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1\\"", + "Type": "String", + }, + "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3VersionKeyDC582995": Object { + "Description": "S3 key for asset version \\"80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1\\"", + "Type": "String", + }, + }, + "Resources": Object { + "AWS679f53fac002430cb0da5b7982bd22872D164C4C": Object { + "DependsOn": Array [ + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcS3Bucket02FC0B28", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcS3VersionKey547E84F8", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters4074092ab8b435c90a773e082601fa36def54c91cadfae59451bd0beda547cbcS3VersionKey547E84F8", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + "Arn", + ], + }, + "Runtime": "nodejs12.x", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "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": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "sampleecsappproject2FB8FB9C": Object { + "Properties": Object { + "Artifacts": Object { + "Type": "NO_ARTIFACTS", + }, + "EncryptionKey": "alias/aws/s3", + "Environment": Object { + "ComputeType": "BUILD_GENERAL1_SMALL", + "EnvironmentVariables": Array [ + Object { + "Name": "AWS_DEFAULT_REGION", + "Type": "PLAINTEXT", + "Value": Object { + "Ref": "AWS::Region", + }, + }, + Object { + "Name": "AWS_ACCOUNT_ID", + "Type": "PLAINTEXT", + "Value": Object { + "Ref": "AWS::AccountId", + }, + }, + Object { + "Name": "IMAGE_TAG", + "Type": "PLAINTEXT", + "Value": "sample-ecs-app", + }, + Object { + "Name": "IMAGE_REPO_NAME", + "Type": "PLAINTEXT", + "Value": Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", + }, + }, + ], + "Image": "aws/codebuild/standard:4.0", + "ImagePullCredentialsType": "CODEBUILD", + "PrivilegedMode": true, + "Type": "LINUX_CONTAINER", + }, + "ServiceRole": Object { + "Fn::GetAtt": Array [ + "sampleecsappprojectRole65BC331E", + "Arn", + ], + }, + "Source": Object { + "Location": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3Bucket94628637", + }, + "/", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3VersionKeyDC582995", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3VersionKeyDC582995", + }, + ], + }, + ], + }, + ], + ], + }, + "Type": "S3", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::CodeBuild::Project", + }, + "sampleecsappprojectRole65BC331E": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "codebuild.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "sampleecsappprojectRoleDefaultPolicy539385CD": 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:::", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3Bucket94628637", + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3Bucket94628637", + }, + "/", + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3VersionKeyDC582995", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters80f730532f1195ed4fede75fbf8191acdfc52e6721de3b612c0c6a7eab1dbbc1S3VersionKeyDC582995", + }, + ], + }, + ], + }, + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":logs:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":log-group:/aws/codebuild/", + Object { + "Ref": "sampleecsappproject2FB8FB9C", + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":logs:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":log-group:/aws/codebuild/", + Object { + "Ref": "sampleecsappproject2FB8FB9C", + }, + ":*", + ], + ], + }, + ], + }, + 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:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":report-group/", + Object { + "Ref": "sampleecsappproject2FB8FB9C", + }, + "-*", + ], + ], + }, + }, + Object { + "Action": "ecr:GetAuthorizationToken", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "ecr:BatchCheckLayerAvailability", + "ecr:CompleteLayerUpload", + "ecr:InitiateLayerUpload", + "ecr:PutImage", + "ecr:UploadLayerPart", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:aws:ecr:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":repository/", + Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", + }, + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "sampleecsappprojectRoleDefaultPolicy539385CD", + "Roles": Array [ + Object { + "Ref": "sampleecsappprojectRole65BC331E", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "startBuild2A2C3416": Object { + "DeletionPolicy": "Delete", + "DependsOn": Array [ + "startBuildCustomResourcePolicy55D05B4A", + ], + "Properties": Object { + "Create": Object { + "Fn::Join": Array [ + "", + Array [ + "{\\"service\\":\\"CodeBuild\\",\\"action\\":\\"startBuild\\",\\"parameters\\":{\\"projectName\\":\\"", + Object { + "Ref": "sampleecsappproject2FB8FB9C", + }, + "\\"},\\"physicalResourceId\\":{\\"id\\":\\"", + Object { + "Fn::GetAtt": Array [ + "sampleecsappproject2FB8FB9C", + "Arn", + ], + }, + "\\"}}", + ], + ], + }, + "InstallLatestAwsSdk": true, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "AWS679f53fac002430cb0da5b7982bd22872D164C4C", + "Arn", + ], + }, + }, + "Type": "Custom::AWS", + "UpdateReplacePolicy": "Delete", + }, + "startBuildCustomResourcePolicy55D05B4A": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "codebuild:StartBuild", + "Effect": "Allow", + "Resource": Object { + "Fn::GetAtt": Array [ + "sampleecsappproject2FB8FB9C", + "Arn", + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "startBuildCustomResourcePolicy55D05B4A", + "Roles": Array [ + Object { + "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 9`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttAlbTgUnHealthyHostCountD4A96E1AArnF5DDFCE6": Object { + "Export": Object { + "Name": "BLEA-ECSApp:ExportsOutputFnGetAttAlbTgUnHealthyHostCountD4A96E1AArnF5DDFCE6", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "AlbTgUnHealthyHostCountD4A96E1A", + "Arn", + ], + }, + }, + "ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2": Object { + "Export": Object { + "Name": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "FargateServiceAC2B3B85", + "Name", + ], + }, + }, + "ExportsOutputFnGetAttSgFargateB5F998B7GroupId58365FB1": Object { + "Export": Object { + "Name": "BLEA-ECSApp:ExportsOutputFnGetAttSgFargateB5F998B7GroupId58365FB1", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "SgFargateB5F998B7", + "GroupId", + ], + }, + }, + "ExportsOutputRefClusterEB0386A796A0E3FE": Object { + "Export": Object { + "Name": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "Value": Object { + "Ref": "ClusterEB0386A7", + }, + }, + }, + "Resources": Object { + "AlbHttp4xxAA038176": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "Dimensions": Array [ + Object { + "Name": "LoadBalancer", + "Value": Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "HTTPCode_ELB_4XX_Count", + "Namespace": "AWS/ApplicationELB", + "Period": 60, + "Statistic": "Sum", + "Threshold": 10, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "AlbHttp5xx7EA5097F": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "Dimensions": Array [ + Object { + "Name": "LoadBalancer", + "Value": Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "HTTPCode_ELB_5XX_Count", + "Namespace": "AWS/ApplicationELB", + "Period": 60, + "Statistic": "Sum", + "Threshold": 10, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "AlbResponseTimeCFBA9063": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "Dimensions": Array [ + Object { + "Name": "LoadBalancer", + "Value": Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "TargetResponseTime", + "Namespace": "AWS/ApplicationELB", + "Period": 60, + "Statistic": "Average", + "Threshold": 100, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "AlbTgHealthyHostCount48815779": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "LessThanThreshold", + "Dimensions": Array [ + Object { + "Name": "LoadBalancer", + "Value": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A", + }, + ], + }, + ], + }, + ], + ], + }, + }, + Object { + "Name": "TargetGroup", + "Value": Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlbhttpsEcsAppGroup3BC28E09TargetGroupFullNameCC53A960", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "HealthyHostCount", + "Namespace": "AWS/ApplicationELB", + "Period": 60, + "Statistic": "Average", + "Threshold": 1, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "AlbTgUnHealthyHostCountD4A96E1A": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "Dimensions": Array [ + Object { + "Name": "LoadBalancer", + "Value": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A", + }, + ], + }, + ], + }, + ], + ], + }, + }, + Object { + "Name": "TargetGroup", + "Value": Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlbhttpsEcsAppGroup3BC28E09TargetGroupFullNameCC53A960", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "UnHealthyHostCount", + "Namespace": "AWS/ApplicationELB", + "Period": 60, + "Statistic": "Average", + "Threshold": 1, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "Cluster3DA9CCBA": Object { + "Properties": Object { + "CapacityProviders": Array [ + "FARGATE", + "FARGATE_SPOT", + ], + "Cluster": Object { + "Ref": "ClusterEB0386A7", + }, + "DefaultCapacityProviderStrategy": Array [], + }, + "Type": "AWS::ECS::ClusterCapacityProviderAssociations", + }, + "ClusterEB0386A7": Object { + "Properties": Object { + "ClusterSettings": Array [ + Object { + "Name": "containerInsights", + "Value": "enabled", + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::ECS::Cluster", + }, + "ECSServiceActionEventRule82991B64": Object { + "Properties": Object { + "Description": "CloudWatch Event Rule to send notification on ECS Service action events.", + "EventPattern": Object { + "detail": Object { + "eventType": Array [ + "WARN", + "ERROR", + ], + }, + "detail-type": Array [ + "ECS Service Action", + ], + "source": Array [ + "aws.ecs", + ], + }, + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "ECSServiceDeploymentEventRule8B457610": Object { + "Properties": Object { + "Description": "CloudWatch Event Rule to send notification on ECS Service deployment events.", + "EventPattern": Object { + "detail": Object { + "eventType": Array [ + "WARN", + "ERROR", + ], + }, + "detail-type": Array [ + "ECS Deployment State Change", + ], + "source": Array [ + "aws.ecs", + ], + }, + "State": "ENABLED", + "Targets": Array [ + Object { + "Arn": Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + "Id": "Target0", + }, + ], + }, + "Type": "AWS::Events::Rule", + }, + "EcsServiceTaskRoleB376410D": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "ecs-tasks.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "EcsTask48F71CB8": Object { + "Properties": Object { + "ContainerDefinitions": Array [ + Object { + "Environment": Array [ + Object { + "Name": "ENVIRONMENT_VARIABLE_SAMPLE_KEY", + "Value": "Environment Variable Sample Value", + }, + ], + "Essential": true, + "Image": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 4, + Object { + "Fn::Split": Array [ + ":", + Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", + }, + ], + }, + ], + }, + ".dkr.ecr.", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + ":", + Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", + }, + ], + }, + ], + }, + ".", + Object { + "Ref": "AWS::URLSuffix", + }, + "/", + Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputRefapprepo60CBE1D08890BEDC", + }, + ":sample-ecs-app", + ], + ], + }, + "LogConfiguration": Object { + "LogDriver": "awslogs", + "Options": Object { + "awslogs-group": Object { + "Ref": "FargateLogGroupA4B4CA79", + }, + "awslogs-region": Object { + "Ref": "AWS::Region", + }, + "awslogs-stream-prefix": "BLEA-ECSApp-", + }, + }, + "Name": "EcsApp", + "PortMappings": Array [ + Object { + "ContainerPort": 80, + "Protocol": "tcp", + }, + ], + }, + ], + "Cpu": "256", + "ExecutionRoleArn": Object { + "Fn::GetAtt": Array [ + "EcsTaskExecutionRoleC0B6A84D", + "Arn", + ], + }, + "Family": "BLEAECSAppEcsTask9097B425", + "Memory": "512", + "NetworkMode": "awsvpc", + "RequiresCompatibilities": Array [ + "FARGATE", + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "TaskRoleArn": Object { + "Fn::GetAtt": Array [ + "EcsServiceTaskRoleB376410D", + "Arn", + ], + }, + }, + "Type": "AWS::ECS::TaskDefinition", + }, + "EcsTaskExecutionRoleC0B6A84D": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "ecs-tasks.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy", + ], + ], + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "EcsTaskExecutionRoleDefaultPolicyDCEEFDC3": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "ecr:BatchCheckLayerAvailability", + "ecr:GetDownloadUrlForLayer", + "ecr:BatchGetImage", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::ImportValue": "BLEA-ECR:ExportsOutputFnGetAttapprepo60CBE1D0ArnCF800CDF", + }, + }, + Object { + "Action": "ecr:GetAuthorizationToken", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "logs:CreateLogStream", + "logs:PutLogEvents", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::GetAtt": Array [ + "FargateLogGroupA4B4CA79", + "Arn", + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "EcsTaskExecutionRoleDefaultPolicyDCEEFDC3", + "Roles": Array [ + Object { + "Ref": "EcsTaskExecutionRoleC0B6A84D", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "FargateCpuUtilD5713973": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "ClusterName", + "Value": Object { + "Ref": "ClusterEB0386A7", + }, + }, + Object { + "Name": "ServiceName", + "Value": Object { + "Fn::GetAtt": Array [ + "FargateServiceAC2B3B85", + "Name", + ], + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "CPUUtilization", + "Namespace": "AWS/ECS", + "Period": 60, + "Statistic": "Average", + "Threshold": 80, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "FargateLogGroupA4B4CA79": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "KmsKeyId": Object { + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + }, + "RetentionInDays": 90, + }, + "Type": "AWS::Logs::LogGroup", + "UpdateReplacePolicy": "Retain", + }, + "FargateServiceAC2B3B85": Object { + "Properties": Object { + "CapacityProviderStrategy": Array [ + Object { + "CapacityProvider": "FARGATE", + "Weight": 1, + }, + ], + "Cluster": Object { + "Ref": "ClusterEB0386A7", + }, + "DeploymentConfiguration": Object { + "MaximumPercent": 200, + "MinimumHealthyPercent": 50, + }, + "DesiredCount": 2, + "EnableECSManagedTags": false, + "HealthCheckGracePeriodSeconds": 60, + "LoadBalancers": Array [ + Object { + "ContainerName": "EcsApp", + "ContainerPort": 80, + "TargetGroupArn": Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsEcsAppGroup3BC28E0927E2175A", + }, + }, + ], + "NetworkConfiguration": Object { + "AwsvpcConfiguration": Object { + "AssignPublicIp": "DISABLED", + "SecurityGroups": Array [ + Object { + "Fn::GetAtt": Array [ + "SgFargateB5F998B7", + "GroupId", + ], + }, + ], + "Subnets": Array [ + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet1Subnet536B997AFD4CC940", + }, + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcPrivateSubnet2Subnet3788AAA1380949A3", + }, + ], + }, + }, + "PlatformVersion": "LATEST", + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "TaskDefinition": Object { + "Ref": "EcsTask48F71CB8", + }, + }, + "Type": "AWS::ECS::Service", + }, + "FargateServiceTaskCountTarget8CF96FEA": Object { + "Properties": Object { + "MaxCapacity": 10, + "MinCapacity": 2, + "ResourceId": Object { + "Fn::Join": Array [ + "", + Array [ + "service/", + Object { + "Ref": "ClusterEB0386A7", + }, + "/", + Object { + "Fn::GetAtt": Array [ + "FargateServiceAC2B3B85", + "Name", + ], + }, + ], + ], + }, + "RoleARN": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::", + Object { + "Ref": "AWS::AccountId", + }, + ":role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService", + ], + ], + }, + "ScalableDimension": "ecs:service:DesiredCount", + "ServiceNamespace": "ecs", + }, + "Type": "AWS::ApplicationAutoScaling::ScalableTarget", + }, + "FargateServiceTaskCountTargetCpuScaling086750CA": Object { + "Properties": Object { + "PolicyName": "BLEAECSAppFargateServiceTaskCountTargetCpuScaling9E56094C", + "PolicyType": "TargetTrackingScaling", + "ScalingTargetId": Object { + "Ref": "FargateServiceTaskCountTarget8CF96FEA", + }, + "TargetTrackingScalingPolicyConfiguration": Object { + "PredefinedMetricSpecification": Object { + "PredefinedMetricType": "ECSServiceAverageCPUUtilization", + }, + "TargetValue": 50, + }, + }, + "Type": "AWS::ApplicationAutoScaling::ScalingPolicy", + }, + "FargateServiceTaskCountTargetRequestScaling7BAE812D": Object { + "Properties": Object { + "PolicyName": "BLEAECSAppFargateServiceTaskCountTargetRequestScaling2907EA74", + "PolicyType": "TargetTrackingScaling", + "ScalingTargetId": Object { + "Ref": "FargateServiceTaskCountTarget8CF96FEA", + }, + "TargetTrackingScalingPolicyConfiguration": Object { + "PredefinedMetricSpecification": Object { + "PredefinedMetricType": "ALBRequestCountPerTarget", + "ResourceLabel": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 2, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::Select": Array [ + 3, + Object { + "Fn::Split": Array [ + "/", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefAlbhttpsCA4BCF0A9F13C47A", + }, + ], + }, + ], + }, + "/", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlbhttpsEcsAppGroup3BC28E09TargetGroupFullNameCC53A960", + }, + ], + ], + }, + }, + "TargetValue": 10000, + }, + }, + "Type": "AWS::ApplicationAutoScaling::ScalingPolicy", + }, + "SgFargateB5F998B7": Object { + "Properties": Object { + "GroupDescription": "BLEA-ECSApp/SgFargate", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "VpcId": Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "SgFargatefromBLEASSLFrontStackSgAlbE562905E80FFE402B3": Object { + "Properties": Object { + "Description": "Load balancer to target", + "FromPort": 80, + "GroupId": Object { + "Fn::GetAtt": Array [ + "SgFargateB5F998B7", + "GroupId", + ], + }, + "IpProtocol": "tcp", + "SourceSecurityGroupId": Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttSgAlbEA3AC417GroupId6CDB1929", + }, + "ToPort": 80, + }, + "Type": "AWS::EC2::SecurityGroupIngress", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 10`] = ` +Object { + "Outputs": Object { + "ExportsOutputRefAurora2CBAB212533F1A7B": Object { + "Export": Object { + "Name": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "Value": Object { + "Ref": "Aurora2CBAB212", + }, + }, + }, + "Parameters": Object { + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827ArtifactHash1355580A": Object { + "Description": "Artifact hash for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A": Object { + "Description": "S3 bucket for asset \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3": Object { + "Description": "S3 key for asset version \\"b120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827\\"", + "Type": "String", + }, + }, + "Resources": Object { + "Aurora2CBAB212": Object { + "DeletionPolicy": "Snapshot", + "Properties": Object { + "CopyTagsToSnapshot": true, + "DBClusterParameterGroupName": "default.aurora-postgresql11", + "DBSubnetGroupName": Object { + "Ref": "AuroraSubnetsC4DF45C9", + }, + "DatabaseName": "mydbname", + "EnableCloudwatchLogsExports": Array [ + "postgresql", + ], + "Engine": "aurora-postgresql", + "EngineVersion": "11.9", + "KmsKeyId": Object { + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + }, + "MasterUserPassword": Object { + "Fn::Join": Array [ + "", + Array [ + "{{resolve:secretsmanager:", + Object { + "Ref": "BLEADBAuroraPgAuroraSecretC8E806513fdaad7efa858a3daf9490cf0a702aeb", + }, + ":SecretString:password::}}", + ], + ], + }, + "MasterUsername": "dbadmin", + "Port": 5432, + "StorageEncrypted": true, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "VpcSecurityGroupIds": Array [ + Object { + "Fn::GetAtt": Array [ + "AuroraSecurityGroup3440C66D", + "GroupId", + ], + }, + ], + }, + "Type": "AWS::RDS::DBCluster", + "UpdateReplacePolicy": "Snapshot", + }, + "AuroraCPUUtil2EEE6630": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "DBClusterIdentifier", + "Value": Object { + "Ref": "Aurora2CBAB212", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "CPUUtilization", + "Namespace": "AWS/RDS", + "Period": 60, + "Statistic": "Average", + "Threshold": 90, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "AuroraInstance10510C5D1": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "DBClusterIdentifier": Object { + "Ref": "Aurora2CBAB212", + }, + "DBInstanceClass": "db.t3.medium", + "DBInstanceIdentifier": "instance1", + "DBSubnetGroupName": Object { + "Ref": "AuroraSubnetsC4DF45C9", + }, + "EnablePerformanceInsights": true, + "Engine": "aurora-postgresql", + "EngineVersion": "11.9", + "PerformanceInsightsKMSKeyId": Object { + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + }, + "PerformanceInsightsRetentionPeriod": 7, + "PubliclyAccessible": false, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::RDS::DBInstance", + "UpdateReplacePolicy": "Delete", + }, + "AuroraInstance2BC8C1D03": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "DBClusterIdentifier": Object { + "Ref": "Aurora2CBAB212", + }, + "DBInstanceClass": "db.t3.medium", + "DBInstanceIdentifier": "instance2", + "DBSubnetGroupName": Object { + "Ref": "AuroraSubnetsC4DF45C9", + }, + "EnablePerformanceInsights": true, + "Engine": "aurora-postgresql", + "EngineVersion": "11.9", + "PerformanceInsightsKMSKeyId": Object { + "Fn::ImportValue": "BLEA-AppKey:ExportsOutputFnGetAttKey961B73FDArn5A860C43", + }, + "PerformanceInsightsRetentionPeriod": 7, + "PubliclyAccessible": false, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::RDS::DBInstance", + "UpdateReplacePolicy": "Delete", + }, + "AuroraLogRetentionpostgresqlBFB2AD06": Object { + "Properties": Object { + "LogGroupName": Object { + "Fn::Join": Array [ + "", + Array [ + "/aws/rds/cluster/", + Object { + "Ref": "Aurora2CBAB212", + }, + "/postgresql", + ], + ], + }, + "RetentionInDays": 90, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn", + ], + }, + }, + "Type": "Custom::LogRetention", + }, + "AuroraSecretAttachmentEAAB0558": Object { + "Properties": Object { + "SecretId": Object { + "Ref": "BLEADBAuroraPgAuroraSecretC8E806513fdaad7efa858a3daf9490cf0a702aeb", + }, + "TargetId": Object { + "Ref": "Aurora2CBAB212", + }, + "TargetType": "AWS::RDS::DBCluster", + }, + "Type": "AWS::SecretsManager::SecretTargetAttachment", + }, + "AuroraSecurityGroup3440C66D": Object { + "Properties": Object { + "GroupDescription": "RDS security group", + "SecurityGroupEgress": Array [ + Object { + "CidrIp": "0.0.0.0/0", + "Description": "Allow all outbound traffic by default", + "IpProtocol": "-1", + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + "VpcId": Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpc8378EB38272D6E3A", + }, + }, + "Type": "AWS::EC2::SecurityGroup", + }, + "AuroraSecurityGroupfromBLEAECSAppSgFargateA43D3754IndirectPort5A254DEC": Object { + "Properties": Object { + "Description": "from BLEAECSAppSgFargateA43D3754:{IndirectPort}", + "FromPort": Object { + "Fn::GetAtt": Array [ + "Aurora2CBAB212", + "Endpoint.Port", + ], + }, + "GroupId": Object { + "Fn::GetAtt": Array [ + "AuroraSecurityGroup3440C66D", + "GroupId", + ], + }, + "IpProtocol": "tcp", + "SourceSecurityGroupId": Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttSgFargateB5F998B7GroupId58365FB1", + }, + "ToPort": Object { + "Fn::GetAtt": Array [ + "Aurora2CBAB212", + "Endpoint.Port", + ], + }, + }, + "Type": "AWS::EC2::SecurityGroupIngress", + }, + "AuroraSubnetsC4DF45C9": Object { + "Properties": Object { + "DBSubnetGroupDescription": "Subnets for Aurora database", + "SubnetIds": Array [ + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet1Subnet38ECE18AD245BDD6", + }, + Object { + "Fn::ImportValue": "BLEA-Vpc:ExportsOutputRefVpcProtectedSubnet2SubnetC22C3325C694ECFB", + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::RDS::DBSubnetGroup", + }, + "BLEADBAuroraPgAuroraSecretC8E806513fdaad7efa858a3daf9490cf0a702aeb": Object { + "Properties": Object { + "Description": Object { + "Fn::Join": Array [ + "", + Array [ + "Generated by the CDK for stack: ", + Object { + "Ref": "AWS::StackName", + }, + ], + ], + }, + "GenerateSecretString": Object { + "ExcludeCharacters": " %+~\`#$&*()|[]{}:;<>?!'/@\\"\\\\", + "GenerateStringKey": "password", + "PasswordLength": 30, + "SecretStringTemplate": "{\\"username\\":\\"dbadmin\\"}", + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::SecretsManager::Secret", + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": Object { + "DependsOn": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3Bucket2070BA0A", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersb120b13d9d868c7622e7db1b68bae4c0f82ffd0227b8c15f2cef38e186ff3827S3VersionKeyB95D17C3", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "Arn", + ], + }, + "Runtime": "nodejs14.x", + }, + "Type": "AWS::Lambda::Function", + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": 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": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "logs:PutRetentionPolicy", + "logs:DeleteRetentionPolicy", + ], + "Effect": "Allow", + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "Roles": Array [ + Object { + "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "RdsEventsCluster": Object { + "Properties": Object { + "Enabled": true, + "EventCategories": Array [ + "failure", + "failover", + "maintenance", + ], + "SnsTopicArn": Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + "SourceType": "db-cluster", + }, + "Type": "AWS::RDS::EventSubscription", + }, + "RdsEventsInstances": Object { + "Properties": Object { + "Enabled": true, + "EventCategories": Array [ + "availability", + "configuration change", + "deletion", + "failover", + "failure", + "maintenance", + "notification", + "recovery", + ], + "SnsTopicArn": Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + "SourceType": "db-instance", + }, + "Type": "AWS::RDS::EventSubscription", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 11`] = ` +Object { + "Outputs": Object { + "ExportsOutputFnGetAttcanaryDurationC40A61C8ArnEA607FBA": Object { + "Export": Object { + "Name": "BLEA-ECSAppSSLCanary:ExportsOutputFnGetAttcanaryDurationC40A61C8ArnEA607FBA", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "canaryDurationC40A61C8", + "Arn", + ], + }, + }, + "ExportsOutputFnGetAttcanaryFailed044C3840ArnC37ECEF2": Object { + "Export": Object { + "Name": "BLEA-ECSAppSSLCanary:ExportsOutputFnGetAttcanaryFailed044C3840ArnC37ECEF2", + }, + "Value": Object { + "Fn::GetAtt": Array [ + "canaryFailed044C3840", + "Arn", + ], + }, + }, + }, + "Parameters": Object { + "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fArtifactHash57B5D042": Object { + "Description": "Artifact hash for asset \\"1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4f\\"", + "Type": "String", + }, + "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fS3Bucket1C64EECB": Object { + "Description": "S3 bucket for asset \\"1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4f\\"", + "Type": "String", + }, + "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fS3VersionKey1499FF9A": Object { + "Description": "S3 key for asset version \\"1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4f\\"", + "Type": "String", + }, + }, + "Resources": Object { + "BLEACanaryApp5871FBE7": Object { + "Properties": Object { + "ArtifactS3Location": Object { + "Fn::Join": Array [ + "", + Array [ + "s3://", + Object { + "Ref": "canaryArtifact2E578620", + }, + ], + ], + }, + "Code": Object { + "Handler": "index.handler", + "S3Bucket": Object { + "Ref": "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fS3Bucket1C64EECB", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fS3VersionKey1499FF9A", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters1e64e462d93160eb5230b00e665705bfaf2299d9c302ab56dd093bccbe387c4fS3VersionKey1499FF9A", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "ExecutionRoleArn": Object { + "Fn::GetAtt": Array [ + "BLEACanaryAppServiceRole49FF798F", + "Arn", + ], + }, + "Name": "bleaecsappsslca4a6110", + "RunConfig": Object { + "EnvironmentVariables": Object { + "TARGETHOST": "www.example.com", + "TARGETPATH": "/", + }, + }, + "RuntimeVersion": "syn-nodejs-puppeteer-3.2", + "Schedule": Object { + "DurationInSeconds": "0", + "Expression": "rate(1 minute)", + }, + "StartCanaryAfterCreation": true, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::Synthetics::Canary", + }, + "BLEACanaryAppServiceRole49FF798F": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "Policies": Array [ + Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:ListAllMyBuckets", + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "s3:PutObject", + "s3:GetBucketLocation", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "canaryArtifact2E578620", + "Arn", + ], + }, + "/*", + ], + ], + }, + }, + Object { + "Action": "cloudwatch:PutMetricData", + "Condition": Object { + "StringEquals": Object { + "cloudwatch:namespace": "CloudWatchSynthetics", + }, + }, + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "logs:CreateLogStream", + "logs:CreateLogGroup", + "logs:PutLogEvents", + ], + "Effect": "Allow", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":logs:::*", + ], + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "canaryPolicy", + }, + ], + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "appCanalyPolicyToS38FB38019": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:GetBucketLocation", + "Effect": "Allow", + "Resource": Object { + "Fn::GetAtt": Array [ + "canaryArtifact2E578620", + "Arn", + ], + }, + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "appCanalyPolicyToS38FB38019", + "Roles": Array [ + Object { + "Ref": "BLEACanaryAppServiceRole49FF798F", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "canaryArtifact2E578620": Object { + "DeletionPolicy": "Retain", + "Properties": Object { + "AccessControl": "Private", + "BucketEncryption": Object { + "ServerSideEncryptionConfiguration": Array [ + Object { + "ServerSideEncryptionByDefault": Object { + "SSEAlgorithm": "AES256", + }, + }, + ], + }, + "PublicAccessBlockConfiguration": Object { + "BlockPublicAcls": true, + "BlockPublicPolicy": true, + "IgnorePublicAcls": true, + "RestrictPublicBuckets": true, + }, + "Tags": Array [ + Object { + "Key": "Environment", + "Value": "Development", + }, + ], + }, + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + }, + "canaryArtifactPolicy2CF1C0A0": Object { + "Properties": Object { + "Bucket": Object { + "Ref": "canaryArtifact2E578620", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:*", + "Condition": Object { + "Bool": Object { + "aws:SecureTransport": "false", + }, + }, + "Effect": "Deny", + "Principal": Object { + "AWS": "*", + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "canaryArtifact2E578620", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "canaryArtifact2E578620", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::S3::BucketPolicy", + }, + "canaryDurationC40A61C8": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 2, + "Dimensions": Array [ + Object { + "Name": "CanaryName", + "Value": Object { + "Ref": "BLEACanaryApp5871FBE7", + }, + }, + ], + "EvaluationPeriods": 2, + "MetricName": "Duration", + "Namespace": "CloudWatchSynthetics", + "Period": 60, + "Statistic": "Average", + "Threshold": 400, + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "canaryFailed044C3840": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmActions": Array [ + Object { + "Fn::ImportValue": "BLEA-MonitorAlarm:ExportsOutputRefMonitorAlarmTopic9C746E8C5F969821", + }, + ], + "ComparisonOperator": "GreaterThanOrEqualToThreshold", + "DatapointsToAlarm": 3, + "Dimensions": Array [ + Object { + "Name": "CanaryName", + "Value": Object { + "Ref": "BLEACanaryApp5871FBE7", + }, + }, + ], + "EvaluationPeriods": 3, + "MetricName": "Failed", + "Namespace": "CloudWatchSynthetics", + "Period": 60, + "Statistic": "Average", + "Threshold": 0.5, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, + }, +} +`; + +exports[`BLEA Guest Stacks GuestAccount ECS App SSL Stacks 12`] = ` +Object { + "Resources": Object { + "Dashboard9E4231ED": Object { + "Properties": Object { + "DashboardBody": Object { + "Fn::Join": Array [ + "", + Array [ + "{\\"widgets\\":[{\\"type\\":\\"text\\",\\"width\\":24,\\"height\\":1,\\"x\\":0,\\"y\\":0,\\"properties\\":{\\"markdown\\":\\"# Canary\\"}},{\\"type\\":\\"metric\\",\\"width\\":12,\\"height\\":6,\\"x\\":0,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Canary response time\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::ImportValue": "BLEA-ECSAppSSLCanary:ExportsOutputFnGetAttcanaryDurationC40A61C8ArnEA607FBA", + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":12,\\"height\\":6,\\"x\\":12,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Canary request failed\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::ImportValue": "BLEA-ECSAppSSLCanary:ExportsOutputFnGetAttcanaryFailed044C3840ArnC37ECEF2", + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"text\\",\\"width\\":24,\\"height\\":1,\\"x\\":0,\\"y\\":7,\\"properties\\":{\\"markdown\\":\\"# Requests\\"}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":0,\\"y\\":8,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"CloudFront Requests\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/CloudFront\\",\\"Requests\\",\\"DistributionId\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefDistribution830FAC524DF81588", + }, + "\\",\\"Region\\",\\"Global\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"region\\":\\"us-east-1\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":6,\\"y\\":8,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ALB Requests\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"RequestCount\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"NewConnectionCount\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"RejectedConnectionCount\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":12,\\"y\\":8,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Target Group Requests\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"HTTPCode_Target_2XX_Count\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":18,\\"y\\":8,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora Connections\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"DatabaseConnections\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"Writer: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/RDS\\",\\"DatabaseConnections\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"Reader: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"text\\",\\"width\\":24,\\"height\\":1,\\"x\\":0,\\"y\\":14,\\"properties\\":{\\"markdown\\":\\"# Response Time\\"}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":0,\\"y\\":15,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Target Group Response Time\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"TargetResponseTime\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":8,\\"y\\":15,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora Operation Lantency (Writer)\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"InsertLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"SelectLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"UpdateLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"CommitLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"DDLLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"DeleteLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"ReadLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}],[\\"AWS/RDS\\",\\"WriteLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":16,\\"y\\":15,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora Operation Lantency (Reader)\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"SelectLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"ReadLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}],[\\"AWS/RDS\\",\\"WriteLatency\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"text\\",\\"width\\":24,\\"height\\":1,\\"x\\":0,\\"y\\":21,\\"properties\\":{\\"markdown\\":\\"# Errors\\"}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":0,\\"y\\":22,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"CloudFront Error Rates\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":true,\\"metrics\\":[[\\"AWS/CloudFront\\",\\"5xxErrorRate\\",\\"DistributionId\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefDistribution830FAC524DF81588", + }, + "\\",\\"Region\\",\\"Global\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"region\\":\\"us-east-1\\",\\"period\\":60}],[\\"AWS/CloudFront\\",\\"4xxErrorRate\\",\\"DistributionId\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputRefDistribution830FAC524DF81588", + }, + "\\",\\"Region\\",\\"Global\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"region\\":\\"us-east-1\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":6,\\"y\\":22,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ALB Errors\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"ClientTLSNegotiationErrorCount\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"HTTPCode_ELB_5XX_Count\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"HTTPCode_ELB_4XX_Count\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":12,\\"y\\":22,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Alarm for UnHealthy Host in Target Group\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttAlbTgUnHealthyHostCountD4A96E1AArnF5DDFCE6", + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":18,\\"y\\":22,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Target Group Errors\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":true,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"HTTPCode_Target_5XX_Count\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"HTTPCode_Target_4XX_Count\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"AWS/ApplicationELB\\",\\"TargetConnectionErrorCount\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}]],\\"yAxis\\":{}}},{\\"type\\":\\"text\\",\\"width\\":24,\\"height\\":1,\\"x\\":0,\\"y\\":28,\\"properties\\":{\\"markdown\\":\\"# Resources\\"}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":0,\\"y\\":29,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS CPU Utilization\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ECS\\",\\"CPUUtilization\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":6,\\"y\\":29,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS Memory Utilization\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ECS\\",\\"MemoryUtilization\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":12,\\"y\\":29,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS Desired Task Count\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"ECS/ContainerInsights\\",\\"DesiredTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":18,\\"y\\":29,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS Task Count\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":true,\\"metrics\\":[[\\"ECS/ContainerInsights\\",\\"RunningTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"ECS/ContainerInsights\\",\\"PendingTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":12,\\"height\\":6,\\"x\\":0,\\"y\\":35,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS Auto Scaling with Requests per tasks\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ApplicationELB\\",\\"RequestCountPerTarget\\",\\"LoadBalancer\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlb16C2F182LoadBalancerFullName73BA17C5", + }, + "\\",\\"TargetGroup\\",\\"", + Object { + "Fn::ImportValue": "BLEA-SSLFrontStack:ExportsOutputFnGetAttAlbhttpsEcsAppGroup3BC28E09TargetGroupFullNameCC53A960", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"stat\\":\\"Sum\\"}],[\\"ECS/ContainerInsights\\",\\"RunningTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}],[\\"ECS/ContainerInsights\\",\\"PendingTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"value\\":10000,\\"label\\":\\"Threshold: Requests per tasks\\",\\"color\\":\\"#aec7e8\\",\\"fill\\":\\"below\\",\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":12,\\"height\\":6,\\"x\\":12,\\"y\\":35,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"ECS Auto Scaling with CPU Utilization\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/ECS\\",\\"CPUUtilization\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"ECS/ContainerInsights\\",\\"RunningTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}],[\\"ECS/ContainerInsights\\",\\"PendingTaskCount\\",\\"ClusterName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputRefClusterEB0386A796A0E3FE", + }, + "\\",\\"ServiceName\\",\\"", + Object { + "Fn::ImportValue": "BLEA-ECSApp:ExportsOutputFnGetAttFargateServiceAC2B3B85NameFCF2B9A2", + }, + "\\",{\\"label\\":\\"\${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60,\\"yAxis\\":\\"right\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"value\\":50,\\"label\\":\\"Threshold: CPU Utilization\\",\\"color\\":\\"#aec7e8\\",\\"fill\\":\\"below\\",\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":0,\\"y\\":41,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora CPU Utilization\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"CPUUtilization\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"Writer: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"CPUUtilization\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"Reader: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":6,\\"y\\":41,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora Free Memory\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"FreeableMemory\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"Writer: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"FreeableMemory\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"Reader: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":6,\\"x\\":12,\\"y\\":41,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Aurora Free Local Storage\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"stacked\\":false,\\"metrics\\":[[\\"AWS/RDS\\",\\"FreeLocalStorage\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"WRITER\\",{\\"label\\":\\"Writer: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}],[\\"AWS/RDS\\",\\"FreeLocalStorage\\",\\"DBClusterIdentifier\\",\\"", + Object { + "Fn::ImportValue": "BLEA-DBAuroraPg:ExportsOutputRefAurora2CBAB212533F1A7B", + }, + "\\",\\"Role\\",\\"READER\\",{\\"label\\":\\"Reader: \${PROP('MetricName')} /\${PROP('Period')}sec\\",\\"period\\":60}]],\\"yAxis\\":{}}}]}", + ], + ], + }, + "DashboardName": "BLEA-ECSAppSSL", + }, + "Type": "AWS::CloudWatch::Dashboard", + }, + }, +} +`; diff --git a/test/blea-guest-asgapp-sample.test.ts b/usecases/guest-webapp-sample/test/blea-guest-asgapp-sample.test.ts similarity index 67% rename from test/blea-guest-asgapp-sample.test.ts rename to usecases/guest-webapp-sample/test/blea-guest-asgapp-sample.test.ts index 636b624e6..177250ca4 100644 --- a/test/blea-guest-asgapp-sample.test.ts +++ b/usecases/guest-webapp-sample/test/blea-guest-asgapp-sample.test.ts @@ -6,10 +6,7 @@ import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; // Load cdk.json to get context parameters import * as cdk_json from '../cdk.json'; import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; -import { BLEAGeneralLogKeyStack } from '../lib/blea-generallog-key-stack'; -import { BLEAGeneralLogStack } from '../lib/blea-generallog-stack'; -import { BLEAFlowLogKeyStack } from '../lib/blea-flowlog-key-stack'; -import { BLEAFlowLogStack } from '../lib/blea-flowlog-stack'; +import { BLEAKeyAppStack } from '../lib/blea-key-app-stack'; import { BLEAVpcStack } from '../lib/blea-vpc-stack'; import { BLEADbAuroraPgStack } from '../lib/blea-db-aurora-pg-stack'; import { BLEAASGAppStack } from '../lib/blea-asgapp-stack'; @@ -43,37 +40,20 @@ describe(`${pjPrefix} Guest Stacks`, () => { env: procEnv, }); - // CMK for General logs - const generalLogKey = new BLEAGeneralLogKeyStack(app, `${pjPrefix}-GeneralLogKey`, { env: procEnv }); - - // Logging Bucket for General logs - const generalLog = new BLEAGeneralLogStack(app, `${pjPrefix}-GeneralLog`, { - kmsKey: generalLogKey.kmsKey, - env: procEnv, - }); - - // CMK for VPC Flow logs - const flowLogKey = new BLEAFlowLogKeyStack(app, `${pjPrefix}-FlowlogKey`, { env: procEnv }); - - // Logging Bucket for VPC Flow log - const flowLog = new BLEAFlowLogStack(app, `${pjPrefix}-FlowLog`, { - kmsKey: flowLogKey.kmsKey, - env: procEnv, - }); + // CMK for Apps + const appKey = new BLEAKeyAppStack(app, `${pjPrefix}-AppKey`, { env: procEnv }); // Networking const myVpcCidr = envVals['vpcCidr']; const prodVpc = new BLEAVpcStack(app, `${pjPrefix}-Vpc`, { myVpcCidr: myVpcCidr, - vpcFlowLogsBucket: flowLog.logBucket, env: procEnv, }); // Application Stack (LoadBalancer + AutoScaling AP Servers) const asgApp = new BLEAASGAppStack(app, `${pjPrefix}-ASGApp`, { myVpc: prodVpc.myVpc, - logBucket: generalLog.logBucket, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, env: procEnv, }); @@ -87,7 +67,7 @@ describe(`${pjPrefix} Guest Stacks`, () => { subnetGroupName: 'Protected', }), appServerSecurityGroup: asgApp.appServerSecurityGroup, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, alarmTopic: monitorAlarm.alarmTopic, env: procEnv, }); @@ -99,10 +79,7 @@ describe(`${pjPrefix} Guest Stacks`, () => { // test with snapshot expect(SynthUtils.toCloudFormation(chatbotMonitor)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(monitorAlarm)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(generalLogKey)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(generalLog)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(flowLogKey)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(flowLogKey)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(appKey)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(prodVpc)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(asgApp)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(dbAuroraPg)).toMatchSnapshot(); diff --git a/test/blea-guest-ec2app-sample.test.ts b/usecases/guest-webapp-sample/test/blea-guest-ec2app-sample.test.ts similarity index 70% rename from test/blea-guest-ec2app-sample.test.ts rename to usecases/guest-webapp-sample/test/blea-guest-ec2app-sample.test.ts index af2647471..ec31c1824 100644 --- a/test/blea-guest-ec2app-sample.test.ts +++ b/usecases/guest-webapp-sample/test/blea-guest-ec2app-sample.test.ts @@ -6,10 +6,7 @@ import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; // Load cdk.json to get context parameters import * as cdk_json from '../cdk.json'; import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; -import { BLEAGeneralLogKeyStack } from '../lib/blea-generallog-key-stack'; -import { BLEAGeneralLogStack } from '../lib/blea-generallog-stack'; -import { BLEAFlowLogKeyStack } from '../lib/blea-flowlog-key-stack'; -import { BLEAFlowLogStack } from '../lib/blea-flowlog-stack'; +import { BLEAKeyAppStack } from '../lib/blea-key-app-stack'; import { BLEAVpcStack } from '../lib/blea-vpc-stack'; import { BLEADbAuroraPgStack } from '../lib/blea-db-aurora-pg-stack'; import { BLEAInvestigationInstanceStack } from '../lib/blea-investigation-instance-stack'; @@ -44,37 +41,20 @@ describe(`${pjPrefix} Guest Stacks`, () => { env: procEnv, }); - // CMK for General logs - const generalLogKey = new BLEAGeneralLogKeyStack(app, `${pjPrefix}-GeneralLogKey`, { env: procEnv }); - - // Logging Bucket for General logs - const generalLog = new BLEAGeneralLogStack(app, `${pjPrefix}-GeneralLog`, { - kmsKey: generalLogKey.kmsKey, - env: procEnv, - }); - - // CMK for VPC Flow logs - const flowLogKey = new BLEAFlowLogKeyStack(app, `${pjPrefix}-FlowlogKey`, { env: procEnv }); - - // Logging Bucket for VPC Flow log - const flowLog = new BLEAFlowLogStack(app, `${pjPrefix}-FlowLog`, { - kmsKey: flowLogKey.kmsKey, - env: procEnv, - }); + // CMK for Apps + const appKey = new BLEAKeyAppStack(app, `${pjPrefix}-AppKey`, { env: procEnv }); // Networking const myVpcCidr = envVals['vpcCidr']; const prodVpc = new BLEAVpcStack(app, `${pjPrefix}-Vpc`, { myVpcCidr: myVpcCidr, - vpcFlowLogsBucket: flowLog.logBucket, env: procEnv, }); // Application Stack (LoadBalancer + EC2 AP Servers) const ec2App = new BLEAEC2AppStack(app, `${pjPrefix}-EC2App`, { myVpc: prodVpc.myVpc, - logBucket: generalLog.logBucket, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, env: procEnv, }); @@ -88,7 +68,7 @@ describe(`${pjPrefix} Guest Stacks`, () => { subnetGroupName: 'Protected', }), appServerSecurityGroup: ec2App.appServerSecurityGroup, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, alarmTopic: monitorAlarm.alarmTopic, env: procEnv, }); @@ -106,10 +86,7 @@ describe(`${pjPrefix} Guest Stacks`, () => { // test with snapshot expect(SynthUtils.toCloudFormation(chatbotMonitor)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(monitorAlarm)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(generalLogKey)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(generalLog)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(flowLogKey)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(flowLogKey)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(appKey)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(prodVpc)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(ec2App)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(dbAuroraPg)).toMatchSnapshot(); diff --git a/test/blea-guest-ecsapp-sample.test.ts b/usecases/guest-webapp-sample/test/blea-guest-ecsapp-sample.test.ts similarity index 61% rename from test/blea-guest-ecsapp-sample.test.ts rename to usecases/guest-webapp-sample/test/blea-guest-ecsapp-sample.test.ts index 2510d2d70..8083f20fc 100644 --- a/test/blea-guest-ecsapp-sample.test.ts +++ b/usecases/guest-webapp-sample/test/blea-guest-ecsapp-sample.test.ts @@ -1,20 +1,20 @@ import * as cdk from '@aws-cdk/core'; import { SynthUtils } from '@aws-cdk/assert'; - import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; // Load cdk.json to get context parameters import * as cdk_json from '../cdk.json'; import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; -import { BLEAGeneralLogKeyStack } from '../lib/blea-generallog-key-stack'; -import { BLEAGeneralLogStack } from '../lib/blea-generallog-stack'; -import { BLEAFlowLogKeyStack } from '../lib/blea-flowlog-key-stack'; -import { BLEAFlowLogStack } from '../lib/blea-flowlog-stack'; +import { BLEAKeyAppStack } from '../lib/blea-key-app-stack'; import { BLEAVpcStack } from '../lib/blea-vpc-stack'; import { BLEAECRStack } from '../lib/blea-ecr-stack'; import { BLEABuildContainerStack } from '../lib/blea-build-container-stack'; import { BLEAECSAppStack } from '../lib/blea-ecsapp-stack'; import { BLEADbAuroraPgStack } from '../lib/blea-db-aurora-pg-stack'; +import { BLEAWafStack } from '../lib/blea-waf-stack'; +import { BLEAFrontendSimpleStack } from '../lib/blea-frontend-simple-stack'; +import { BLEADashboardStack } from '../lib/blea-dashboard-stack'; +import { BLEACanaryStack } from '../lib/blea-canary-stack'; const procEnv = { account: process.env.CDK_DEFAULT_ACCOUNT, @@ -45,29 +45,26 @@ describe(`${pjPrefix} Guest Stacks`, () => { env: procEnv, }); - // CMK for General logs - const generalLogKey = new BLEAGeneralLogKeyStack(app, `${pjPrefix}-GeneralLogKey`, { env: procEnv }); + // CMK for Apps + const appKey = new BLEAKeyAppStack(app, `${pjPrefix}-AppKey`, { env: procEnv }); - // Logging Bucket for General logs - const generalLog = new BLEAGeneralLogStack(app, `${pjPrefix}-GeneralLog`, { - kmsKey: generalLogKey.kmsKey, + // Networking + const myVpcCidr = envVals['vpcCidr']; + const prodVpc = new BLEAVpcStack(app, `${pjPrefix}-Vpc`, { + myVpcCidr: myVpcCidr, env: procEnv, }); - // CMK for VPC Flow logs - const flowLogKey = new BLEAFlowLogKeyStack(app, `${pjPrefix}-FlowlogKey`, { env: procEnv }); - - // Logging Bucket for VPC Flow log - const flowLog = new BLEAFlowLogStack(app, `${pjPrefix}-FlowLog`, { - kmsKey: flowLogKey.kmsKey, + // WebACL + const waf = new BLEAWafStack(app, `${pjPrefix}-Waf`, { + scope: 'REGIONAL', env: procEnv, }); - // Networking - const myVpcCidr = envVals['vpcCidr']; - const prodVpc = new BLEAVpcStack(app, `${pjPrefix}-Vpc`, { - myVpcCidr: myVpcCidr, - vpcFlowLogsBucket: flowLog.logBucket, + // Simple CloudFront FrontEnd + const front = new BLEAFrontendSimpleStack(app, `${pjPrefix}-SimpleFrontStack`, { + myVpc: prodVpc.myVpc, + webAcl: waf.webAcl, env: procEnv, }); @@ -88,17 +85,17 @@ describe(`${pjPrefix} Guest Stacks`, () => { // Application Stack (LoadBalancer + Fargate) const ecsApp = new BLEAECSAppStack(app, `${pjPrefix}-ECSApp`, { myVpc: prodVpc.myVpc, - logBucket: generalLog.logBucket, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, repository: ecr.repository, imageTag: build_container.imageTag, alarmTopic: monitorAlarm.alarmTopic, + webFront: front, env: procEnv, }); ecsApp.addDependency(build_container); // Aurora - const dbAuroraPg = new BLEADbAuroraPgStack(app, `${pjPrefix}-DBAuroraPg`, { + const dbCluster = new BLEADbAuroraPgStack(app, `${pjPrefix}-DBAuroraPg`, { myVpc: prodVpc.myVpc, dbName: 'mydbname', dbUser: envVals['dbUser'], @@ -107,11 +104,33 @@ describe(`${pjPrefix} Guest Stacks`, () => { subnetGroupName: 'Protected', }), appServerSecurityGroup: ecsApp.appServerSecurityGroup, - appKey: generalLogKey.kmsKey, + appKey: appKey.kmsKey, alarmTopic: monitorAlarm.alarmTopic, env: procEnv, }); + // Monitoring + const appCanary = new BLEACanaryStack(app, `${pjPrefix}-ECSAppCanary`, { + alarmTopic: monitorAlarm.alarmTopic, + appEndpoint: front.cfDistribution.domainName, + env: procEnv, + }); + + const dashboard = new BLEADashboardStack(app, `${pjPrefix}-ECSAppDashboard`, { + dashboardName: `${pjPrefix}-ECSApp`, + webFront: front, + ecsClusterName: ecsApp.ecsClusterName, + ecsServiceName: ecsApp.ecsServiceName, + appTargetGroupName: ecsApp.appTargetGroupName, + dbClusterName: dbCluster.dbClusterName, + albTgUnHealthyHostCountAlarm: ecsApp.albTgUnHealthyHostCountAlarm, + ecsScaleOnRequestCount: ecsApp.ecsScaleOnRequestCount, + ecsTargetUtilizationPercent: ecsApp.ecsTargetUtilizationPercent, + canaryDurationAlarm: appCanary.canaryDurationAlarm, + canaryFailedAlarm: appCanary.canaryFailedAlarm, + env: procEnv, + }); + // Tagging "Environment" tag to all resources in this app const envTagName = 'Environment'; cdk.Tags.of(app).add(envTagName, envVals['envName']); @@ -119,14 +138,15 @@ describe(`${pjPrefix} Guest Stacks`, () => { // test with snapshot expect(SynthUtils.toCloudFormation(chatbotMonitor)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(monitorAlarm)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(generalLogKey)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(generalLog)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(flowLogKey)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(flowLogKey)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(appKey)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(prodVpc)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(waf)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(front)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(ecr)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(build_container)).toMatchSnapshot(); expect(SynthUtils.toCloudFormation(ecsApp)).toMatchSnapshot(); - expect(SynthUtils.toCloudFormation(dbAuroraPg)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(dbCluster)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(appCanary)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(dashboard)).toMatchSnapshot(); }); }); diff --git a/usecases/guest-webapp-sample/test/blea-guest-ecsapp-ssl-sample.test.ts b/usecases/guest-webapp-sample/test/blea-guest-ecsapp-ssl-sample.test.ts new file mode 100644 index 000000000..c87cc50dc --- /dev/null +++ b/usecases/guest-webapp-sample/test/blea-guest-ecsapp-ssl-sample.test.ts @@ -0,0 +1,155 @@ +import * as cdk from '@aws-cdk/core'; +import { SynthUtils } from '@aws-cdk/assert'; +import { BLEAChatbotStack } from '../lib/blea-chatbot-stack'; + +// Load cdk.json to get context parameters +import * as cdk_json from '../cdk.json'; +import { BLEAMonitorAlarmStack } from '../lib/blea-monitor-alarm-stack'; +import { BLEAKeyAppStack } from '../lib/blea-key-app-stack'; +import { BLEAVpcStack } from '../lib/blea-vpc-stack'; +import { BLEAECRStack } from '../lib/blea-ecr-stack'; +import { BLEABuildContainerStack } from '../lib/blea-build-container-stack'; +import { BLEAECSAppStack } from '../lib/blea-ecsapp-stack'; +import { BLEADbAuroraPgStack } from '../lib/blea-db-aurora-pg-stack'; +import { BLEAWafStack } from '../lib/blea-waf-stack'; +import { BLEAFrontendSslStack } from '../lib/blea-frontend-ssl-stack'; +import { BLEADashboardStack } from '../lib/blea-dashboard-stack'; +import { BLEACanaryStack } from '../lib/blea-canary-stack'; + +const procEnv = { + account: process.env.CDK_DEFAULT_ACCOUNT, + region: process.env.CDK_DEFAULT_REGION, +}; + +const pjPrefix = 'BLEA'; +const app = new cdk.App(); +const envKey = 'dev'; +const envVals = cdk_json['context'][envKey]; + +describe(`${pjPrefix} Guest Stacks`, () => { + test('GuestAccount ECS App SSL Stacks', () => { + // Slack Notifier + const workspaceId = envVals['slackNotifier']['workspaceId']; + const channelIdMon = envVals['slackNotifier']['channelIdMon']; + + // Topic for monitoring guest system + const monitorAlarm = new BLEAMonitorAlarmStack(app, `${pjPrefix}-MonitorAlarm`, { + notifyEmail: envVals['monitoringNotifyEmail'], + env: procEnv, + }); + + const chatbotMonitor = new BLEAChatbotStack(app, `${pjPrefix}-ChatbotMonitor`, { + topicArn: monitorAlarm.alarmTopic.topicArn, + workspaceId: workspaceId, + channelId: channelIdMon, + env: procEnv, + }); + + // CMK for Apps + const appKey = new BLEAKeyAppStack(app, `${pjPrefix}-AppKey`, { env: procEnv }); + + // Networking + const myVpcCidr = envVals['vpcCidr']; + const prodVpc = new BLEAVpcStack(app, `${pjPrefix}-Vpc`, { + myVpcCidr: myVpcCidr, + env: procEnv, + }); + + // WebACL + const waf = new BLEAWafStack(app, `${pjPrefix}-Waf`, { + scope: 'REGIONAL', + env: procEnv, + }); + + // My Domain FrontEnd + const front = new BLEAFrontendSslStack(app, `${pjPrefix}-SSLFrontStack`, { + myVpc: prodVpc.myVpc, + hostedZoneId: envVals['hostedZoneId'], + domainName: envVals['domainName'], + hostName: envVals['hostName'], + webAcl: waf.webAcl, + env: procEnv, + }); + + // Container Repository + const ecr = new BLEAECRStack(app, `${pjPrefix}-ECR`, { + // TODO: will get "repositoryName" from parameters + repositoryName: 'apprepo', + alarmTopic: monitorAlarm.alarmTopic, + env: procEnv, + }); + + // Build Container Image + const build_container = new BLEABuildContainerStack(app, `${pjPrefix}-ContainerImage`, { + ecrRepository: ecr.repository, + env: procEnv, + }); + + // Application Stack (LoadBalancer + Fargate) + const ecsApp = new BLEAECSAppStack(app, `${pjPrefix}-ECSApp`, { + myVpc: prodVpc.myVpc, + appKey: appKey.kmsKey, + repository: ecr.repository, + imageTag: build_container.imageTag, + alarmTopic: monitorAlarm.alarmTopic, + webFront: front, + env: procEnv, + }); + ecsApp.addDependency(build_container); + + // Aurora + const dbCluster = new BLEADbAuroraPgStack(app, `${pjPrefix}-DBAuroraPg`, { + myVpc: prodVpc.myVpc, + dbName: 'mydbname', + dbUser: envVals['dbUser'], + dbAllocatedStorage: 25, + vpcSubnets: prodVpc.myVpc.selectSubnets({ + subnetGroupName: 'Protected', + }), + appServerSecurityGroup: ecsApp.appServerSecurityGroup, + appKey: appKey.kmsKey, + alarmTopic: monitorAlarm.alarmTopic, + env: procEnv, + }); + + // Monitoring + const appCanary = new BLEACanaryStack(app, `${pjPrefix}-ECSAppSSLCanary`, { + alarmTopic: monitorAlarm.alarmTopic, + appEndpoint: [envVals['hostName'], envVals['domainName']].join('.'), + env: procEnv, + }); + + const dashboard = new BLEADashboardStack(app, `${pjPrefix}-ECSAppSSLDashboard`, { + dashboardName: `${pjPrefix}-ECSAppSSL`, + webFront: front, + ecsClusterName: ecsApp.ecsClusterName, + ecsServiceName: ecsApp.ecsServiceName, + appTargetGroupName: ecsApp.appTargetGroupName, + dbClusterName: dbCluster.dbClusterName, + albTgUnHealthyHostCountAlarm: ecsApp.albTgUnHealthyHostCountAlarm, + ecsScaleOnRequestCount: ecsApp.ecsScaleOnRequestCount, + ecsTargetUtilizationPercent: ecsApp.ecsTargetUtilizationPercent, + canaryDurationAlarm: appCanary.canaryDurationAlarm, + canaryFailedAlarm: appCanary.canaryFailedAlarm, + env: procEnv, + }); + + // Tagging "Environment" tag to all resources in this app + const envTagName = 'Environment'; + cdk.Tags.of(app).add(envTagName, envVals['envName']); + + // test with snapshot + expect(SynthUtils.toCloudFormation(chatbotMonitor)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(monitorAlarm)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(appKey)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(prodVpc)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(waf)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(front)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(ecr)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(build_container)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(ecsApp)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(dbCluster)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(appCanary)).toMatchSnapshot(); + expect(SynthUtils.toCloudFormation(dashboard)).toMatchSnapshot(); + }); +}); diff --git a/usecases/guest-webapp-sample/tsconfig.json b/usecases/guest-webapp-sample/tsconfig.json new file mode 100644 index 000000000..6b477d407 --- /dev/null +++ b/usecases/guest-webapp-sample/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "./" + }, + "include": ["bin/**/*.ts", "lib/**/*.ts", "test/**/*.ts"] +}