diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index adf2f1b0..e626395a 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -8,7 +8,6 @@ on: branches: - master - linting - workflow_dispatch: jobs: nodejs-test: diff --git a/.github/workflows/waf_test_ipSets.yml b/.github/workflows/waf_test_ipSets.yml new file mode 100644 index 00000000..f34f3050 --- /dev/null +++ b/.github/workflows/waf_test_ipSets.yml @@ -0,0 +1,76 @@ +name: IpSet-Firewall + +env: + AWS_REGION: eu-central-1 + AWS_ROLE: FirewallFactoryGithubPipelineRole + AWS_ACCOUNT: 859220371210 + +permissions: + id-token: write + contents: read + +concurrency: ci-${{ github.ref }} + +on: + push: + branches: + - master + paths: + - 'bin/**/*' + - 'lib/**/*' + - 'package*.json' + pull_request: + branches: + - master + paths: + - 'bin/**/*' + - 'lib/**/*' + - 'package*.json' +jobs: + deploy_production_main: + name: Test and deploy IpSet Firewall + runs-on: ubuntu-latest + steps: + - name: ⬇️ Checkout + uses: actions/checkout@v3 + - name: πŸ“ Install Taskfile + run: | + npm install -g @go-task/cli + - name: ☊ Use Node.js + uses: actions/setup-node@v1 + with: + node-version: '18.x' + - name: πŸ’Ύ Cache Node.js modules + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.OS }}-node- + ${{ runner.OS }}- + - name: 🌐 Install CDK and typescript globally + run: | + npm i -g aws-cdk typescript ts-node @types/node + npm link typescript + - name: πŸ“¦ Install Packages + run: | + npm install + - name: πŸ”‘ Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1.7.0 + env: + ACCOUNT_ID: ${{ env.AWS_ACCOUNT }} + with: + role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/${{ env.AWS_ROLE }} + aws-region: ${{ env.AWS_REGION }} + role-session-name: GitHubActionsSession + mask-aws-account-id: false + - name: πŸš€ Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: πŸ«™ Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: πŸ”₯ Deploy Firewall to AWS + run: | + task deploy config=ipSetsTests + - name: πŸ—‘οΈ Remove Firewall from AWS + run: | + task destroy config=ipSetsTests \ No newline at end of file diff --git a/.github/workflows/waf_test_onlymanagedrulegroups.yml b/.github/workflows/waf_test_onlymanagedrulegroups.yml new file mode 100644 index 00000000..1615e134 --- /dev/null +++ b/.github/workflows/waf_test_onlymanagedrulegroups.yml @@ -0,0 +1,76 @@ +name: ManagedRuleGroups-Firewall + +env: + AWS_REGION: eu-central-1 + AWS_ROLE: FirewallFactoryGithubPipelineRole + AWS_ACCOUNT: 859220371210 + +permissions: + id-token: write + contents: read + +concurrency: ci-${{ github.ref }} + +on: + push: + branches: + - master + paths: + - 'bin/**/*' + - 'lib/**/*' + - 'package*.json' + pull_request: + branches: + - master + paths: + - 'bin/**/*' + - 'lib/**/*' + - 'package*.json' +jobs: + deploy_production_main: + name: Test and deploy OnlyManagedRuleGroups Firewall + runs-on: ubuntu-latest + steps: + - name: ⬇️ Checkout + uses: actions/checkout@v3 + - name: πŸ“ Install Taskfile + run: | + npm install -g @go-task/cli + - name: ☊ Use Node.js + uses: actions/setup-node@v1 + with: + node-version: '18.x' + - name: πŸ’Ύ Cache Node.js modules + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.OS }}-node- + ${{ runner.OS }}- + - name: 🌐 Install CDK and typescript globally + run: | + npm i -g aws-cdk typescript ts-node @types/node + npm link typescript + - name: πŸ“¦ Install Packages + run: | + npm install + - name: πŸ”‘ Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1.7.0 + env: + ACCOUNT_ID: ${{ env.AWS_ACCOUNT }} + with: + role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/${{ env.AWS_ROLE }} + aws-region: ${{ env.AWS_REGION }} + role-session-name: GitHubActionsSession + mask-aws-account-id: false + - name: πŸš€ Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: πŸ«™ Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: πŸ”₯ Deploy Firewall to AWS + run: | + task deploy config=onlyManagedRuleGroupsTests + - name: πŸ—‘οΈ Remove Firewall from AWS + run: | + task destroy config=onlyManagedRuleGroupsTests \ No newline at end of file diff --git a/.github/workflows/waf_test_regexPatternSets.yml b/.github/workflows/waf_test_regexPatternSets.yml new file mode 100644 index 00000000..9fda144b --- /dev/null +++ b/.github/workflows/waf_test_regexPatternSets.yml @@ -0,0 +1,77 @@ +name: RegexPatternSets-Firewall + +env: + AWS_REGION: eu-central-1 + AWS_ROLE: FirewallFactoryGithubPipelineRole + AWS_ACCOUNT: 859220371210 + +permissions: + id-token: write + contents: read + +concurrency: ci-${{ github.ref }} + +on: + push: + branches: + - master + paths: + - 'bin/**/*' + - 'lib/**/*' + - 'package*.json' + pull_request: + branches: + - master + paths: + - 'bin/**/*' + - 'lib/**/*' + - 'package*.json' + +jobs: + deploy_production_main: + name: Test and deploy RegexPatternSets Firewall + runs-on: ubuntu-latest + steps: + - name: ⬇️ Checkout + uses: actions/checkout@v3 + - name: πŸ“ Install Taskfile + run: | + npm install -g @go-task/cli + - name: ☊ Use Node.js + uses: actions/setup-node@v1 + with: + node-version: '18.x' + - name: πŸ’Ύ Cache Node.js modules + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.OS }}-node- + ${{ runner.OS }}- + - name: 🌐 Install CDK and typescript globally + run: | + npm i -g aws-cdk typescript ts-node @types/node + npm link typescript + - name: πŸ“¦ Install Packages + run: | + npm install + - name: πŸ”‘ Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1.7.0 + env: + ACCOUNT_ID: ${{ env.AWS_ACCOUNT }} + with: + role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/${{ env.AWS_ROLE }} + aws-region: ${{ env.AWS_REGION }} + role-session-name: GitHubActionsSession + mask-aws-account-id: false + - name: πŸš€ Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: πŸ«™ Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: πŸ”₯ Deploy Firewall to AWS + run: | + task deploy config=regexPatternSetsTests + - name: πŸ—‘οΈ Remove Firewall from AWS + run: | + task destroy config=regexPatternSetsTests \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 8746b364..d2ed358e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,20 @@ ## Released +## 4.1.3 +## Added +- Optional Lambda function to prerequisite Stack that send notifications about potential DDoS activity for protected resources to messengers (Slack/Teams) - [AWS Shield Advanced] +- Automated test workflows of example firewalls, to ensure code quality and test coverage + +### Fixed +- Bump @aws-sdk/client-cloudformation from 3.427.0 to 3.428.0 +- Bump @aws-sdk/client-shield from 3.427.0 to 3.428.0 +- Bump typescript from 4.9.5 to 5.2.2 +- Bump jest from 29.5.0 to 29.7.0 +- Bump eslint from 8.48.0 to 8.51.0 + ## 4.1.2 + ### Fixed - Separate NotStatements where not parsed correctly while deployment - Bump @typescript-eslint/eslint-plugin 6.7.4 from to 6.7.5 diff --git a/README.md b/README.md index 238c55c4..fdb5bc00 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **[🚧 Feature request](https://github.com/globaldatanet/aws-firewall-factory/issues/new?assignees=&labels=feature-request%2C+enhancement&template=feature_request.md&title=)** | **[πŸ› Bug Report](https://github.com/globaldatanet/aws-firewall-factory/issues/new?assignees=&labels=bug%2C+triage&template=bug_report.md&title=)** -AWSFirewallFactory +aws-firewall-factory ## π’‹° Table of contents @@ -19,6 +19,7 @@ - [🎬 Media](#-media) - [πŸ”— Useful Links](#-useful-links) - [πŸ—ΊοΈ Architecture](#️-architecture) +- [πŸ§ͺ Tests](#-tests) - [πŸ¦ΈπŸΌβ€β™€οΈ Contributors](#️-contributors) - [πŸ‘©β€πŸ’» Contribute](#-contribute) - [πŸ‘ Supporters](#-supporters) @@ -57,6 +58,17 @@ If you want to learn more about the AWS Firewall Factory feel free to look at th ![Architecture](./static/AWSFIREWALLMANAGER.png "Architecture") +## πŸ§ͺ Tests +| Test | Status | +|---|---| +| CodeQL | ![CodeQL](https://github.com/globaldatanet/aws-firewall-factory/actions/workflows/github-code-scanning/codeql/badge.svg?branch=master) | +| Linting | ![linting](https://github.com/globaldatanet/aws-firewall-factory/actions/workflows/linting.yml/badge.svg?branch=master) | +| WAF Deployment - Only Managed Rule Groups | ![onlyManagedRuleGroups](https://github.com/globaldatanet/aws-firewall-factory/actions/workflows/waf_test_onlymanagedrulegroups.yml/badge.svg?branch=master) | +| WAF Deployment - IpSets | ![IpSets](https://github.com/globaldatanet/aws-firewall-factory/actions/workflows/waf_test_ipSets.yml/badge.svg?branch=master) | +| WAF Deployment - RegexPatternSets | ![regexPatternSets](https://github.com/globaldatanet/aws-firewall-factory/actions/workflows/waf_test_regexPatternSets.yml/badge.svg?branch=master) | + + + ## πŸ¦ΈπŸΌβ€β™€οΈ Contributors diff --git a/Taskfile.yml b/Taskfile.yml index 3a9319eb..059d8598 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -47,7 +47,7 @@ tasks: cdkdestroy: desc: CDK Destroy cmds: - - cdk destroy + - cdk destroy --require-approval never --force vars: ACCOUNT: sh: aws sts get-caller-identity |jq -r .Account @@ -59,7 +59,7 @@ tasks: cdkdeploy: desc: CDK Deploy cmds: - - cdk deploy --require-approval never {{.TAGS}} --toolkit-stack-name {{.TOOL_KIT_STACKNAME}} + - DOCKER_BUILDKIT=1 cdk deploy --require-approval never {{.TAGS}} --toolkit-stack-name {{.TOOL_KIT_STACKNAME}} vars: ACCOUNT: sh: aws sts get-caller-identity |jq -r .Account diff --git a/gotestwaf/gotestwaf.ts b/gotestwaf/gotestwaf.ts new file mode 100644 index 00000000..404d84ec --- /dev/null +++ b/gotestwaf/gotestwaf.ts @@ -0,0 +1,13 @@ +import * as values from "../values"; + +/** + * relative path to config file imported from the env PROCESS_PARAMETERS + */ +const CONFIG_OBJECT_NAME = process.env.PROCESS_PARAMETERS; + +if(!CONFIG_OBJECT_NAME || (values.configs[CONFIG_OBJECT_NAME] === undefined && values.prereq[CONFIG_OBJECT_NAME] === undefined)) { + console.log("Configuration ", CONFIG_OBJECT_NAME, " not found."); + process.exit(1); +} + +console.log(JSON.stringify(values.configs[CONFIG_OBJECT_NAME])); \ No newline at end of file diff --git a/lib/firewall-stack.ts b/lib/firewall-stack.ts index 3ade7735..12dc05e7 100644 --- a/lib/firewall-stack.ts +++ b/lib/firewall-stack.ts @@ -173,7 +173,7 @@ export class FirewallStack extends cdk.Stack { managedRuleGroupVersionLambdaRole.addToPolicy(wafGetManagedRuleGroupVersion); const managedRuleGroupVersionLambda = new NodejsFunction.NodejsFunction(this, "managedRuleGroupVersionLambdaFunction", { - entry: path.join(__dirname, "../lib/lambda/ManagedRuleGRoupVersion/index.ts"), + entry: path.join(__dirname, "../lib/lambda/ManagedRuleGroupVersion/index.ts"), handler: "handler", timeout: cdk.Duration.seconds(30), architecture:lambda.Architecture.ARM_64, diff --git a/lib/lambda/FmsNotification/index.py b/lib/lambda/FmsNotification/index.py new file mode 100644 index 00000000..a45dd80e --- /dev/null +++ b/lib/lambda/FmsNotification/index.py @@ -0,0 +1,87 @@ +import json +import logging +import os +import urllib.request +import boto3 + +wafv2 = boto3.client('wafv2') + +HOOK_URL = os.environ['WebhookUrl'] +MESSENGER = os.environ['Messenger'] + +logger = logging.getLogger() +logger.setLevel(logging.INFO) + + +def format_slack_message(data): + payload = { + 'username': f"🚨 FMS Notification", + 'text': f"{data['Subject']}", + 'attachments': [ + { + 'fallback': "Detailed information:", + 'color': 'green', + 'title': data['Subject'], + 'text': data['Message'], + } + ] + } + return payload + + +def format_teams_message(data): + message = { + "type":"message", + "attachments":[ + { + "contentType":"application/vnd.microsoft.card.adaptive", + "contentUrl": "", + "content":{ + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "msteams": { + "width": "Full" + }, + "version": "1.4", + "body": [ + { + "type": "TextBlock", + "text": f"{data['Subject']}", + "size": "Large", + "weight": "Bolder", + "wrap": True + }, + { + "type": "TextBlock", + "text": f"{data['Message']}", + "separator": True, + "wrap": True + } + ] + } + } + ] + } + return message + + +def notify(url, payload): + data = json.dumps(payload).encode('utf-8') + method = 'POST' + headers = {'Content-Type': 'application/json'} + + request = urllib.request.Request(url, data = data, method = method, headers = headers) + with urllib.request.urlopen(request) as response: + return response.read().decode('utf-8') + + +def lambda_handler(event, context): + logger.info("Message: " + str(event)) + for(record) in event['Records']: + if(MESSENGER == "Slack"): + payload = format_slack_message(record['Sns']) + elif(MESSENGER == "Teams"): + payload = format_teams_message(record['Sns']) + response = notify(HOOK_URL, payload) + print(response) + diff --git a/lib/prerequisites-stack.ts b/lib/prerequisites-stack.ts index 41ae5a55..8720f8d5 100644 --- a/lib/prerequisites-stack.ts +++ b/lib/prerequisites-stack.ts @@ -6,7 +6,8 @@ import { aws_kms as kms } from "aws-cdk-lib"; import { aws_iam as iam } from "aws-cdk-lib"; import { aws_lambda as lambda } from "aws-cdk-lib"; import { aws_logs as logs } from "aws-cdk-lib"; - +import { aws_fms as fms } from "aws-cdk-lib"; +import { aws_sns as sns } from "aws-cdk-lib"; export interface StackProps extends cdk.StackProps { readonly prerequisites: Prerequisites; } @@ -52,6 +53,47 @@ export class PrerequisitesStack extends cdk.Stack { sourceArn: "arn:aws:sns:us-east-1:248400274283:aws-managed-waf-rule-notifications", }); } + if(props.prerequisites.DdosNotifications) { + console.log("πŸ“’ Creating Lambda Function that send notifications about potential DDoS activity for protected resources to messengers (Slack/Teams)"); + let Messenger:string = ""; + let WebhookUrl:string = ""; + if(props.prerequisites.DdosNotifications.SlackWebhook) { + Messenger="Slack"; + WebhookUrl=props.prerequisites.DdosNotifications.SlackWebhook; + } + if(props.prerequisites.DdosNotifications.TeamsWebhook) { + Messenger="Teams"; + WebhookUrl=props.prerequisites.DdosNotifications.TeamsWebhook; + } + const FmsNotification = new lambda.Function(this, "AWS-Firewall-Factory-FMS-Notifications", { + runtime: lambda.Runtime.PYTHON_3_11, + code: lambda.Code.fromAsset("./lib/lambda/FmsNotification"), + handler: "index.lambda_handler", + timeout: cdk.Duration.seconds(30), + environment: { + "Messenger": Messenger, + "WebhookUrl": WebhookUrl, + }, + logRetention: logs.RetentionDays.ONE_WEEK, + description: "Lambda Function that send notifications about potential DDoS activity for protected resources to messengers (Slack/Teams)", + }); + const snsRoleName = `arn:aws:iam::${props.env?.account}:role/aws-service-role/fms.amazonaws.com/AWSServiceRoleForFMS`; + const FmsTopic = new sns.Topic(this, "FMS-Notifications-Topic"); + FmsTopic.addToResourcePolicy(new iam.PolicyStatement({ + actions: ["sns:Publish"], + principals: [iam.Role.fromRoleArn(this, "AWSServiceRoleForFMS",snsRoleName)], + })); + FmsNotification.addPermission("InvokeByFmsSnsTopic", { + action: "lambda:InvokeFunction", + principal: new iam.ServicePrincipal("sns.amazonaws.com"), + sourceArn: FmsTopic.topicArn, + }); + new fms.CfnNotificationChannel(this, "AWS-Firewall-Factory-FMS-NotificationChannel", { + snsRoleName, + snsTopicArn: FmsTopic.topicArn, + }); + } + if(props.prerequisites.Logging) { if(props.prerequisites.Logging.FireHoseKey) { diff --git a/lib/tools/price-calculator.ts b/lib/tools/price-calculator.ts index 0b454a9a..6dcd7768 100644 --- a/lib/tools/price-calculator.ts +++ b/lib/tools/price-calculator.ts @@ -177,9 +177,9 @@ export async function isPriceCalculated(runtimeProps: RuntimeProperties): Promis const requestscost = runtimeProps.Pricing.Request; const totalcost = fixedcost + (requestscost * 5) + (captchacost * 5); const shieldSubscriptionState = await getShieldSubscriptionState(); - console.log("\nπŸ›‘οΈ Shield Advanced State: " + shieldSubscriptionState?.toLowerCase()); + console.log("\nπŸ›‘οΈ Shield Advanced State: " + shieldSubscriptionState); console.log("\nπŸ’° Cost: \n"); - if(shieldSubscriptionState === "ACTIVE"){ + if(shieldSubscriptionState && shieldSubscriptionState === "ACTIVE"){ fixedcost = botcontrolfixedcost + atpfixedcost + runtimeProps.Pricing.Dashboard; } console.log(" WAF Rules cost: " + fixedcost + " $ per month"); @@ -192,7 +192,7 @@ export async function isPriceCalculated(runtimeProps: RuntimeProperties): Promis (botcontrolfixedcost !== 0) ? console.log(" The deployed WAF includes BotControl rules this costs an extra fee of "+runtimeProps.Pricing.BotControl +" $ and " +runtimeProps.Pricing.BotControlRequest +"$ pro 1 mio requests (10 mio request Free Tier). \n These costs are already included in the price calculation.") : ""; (atpfixedcost !== 0) ? console.log(" The deployed WAF includes Account Takeover Prevention rules this costs an extra fee of "+runtimeProps.Pricing.AccountTakeoverPrevention+" $ and " + runtimeProps.Pricing.AccountTakeoverPreventionRequest +" $ per thousand login attempts analyzed (10,000 attempts analyzed Free Tier). \n These costs are already included in the price calculation.") : ""; (runtimeProps.Pricing.Dashboard !== 0) ? console.log(" The deployed WAF includes CloudWatch Dashboard and you have more than 3 Dashboards (Free tier), so you will need to pay " + runtimeProps.Pricing.Dashboard+ "$ for this CloudWatch Dashboard. \n These costs are already included in the price calculation.") : ""; - (shieldSubscriptionState === "Active") ? console.log(" AWS WAF WebACLs or Rules created by Firewall Manager - are Included in AWS Shield Advanced. More information at https://aws.amazon.com/firewall-manager/pricing/.") : ""; + (shieldSubscriptionState === "ACTIVE") ? console.log(" AWS WAF WebACLs or Rules created by Firewall Manager - are Included in AWS Shield Advanced. More information at https://aws.amazon.com/firewall-manager/pricing/.") : ""; console.log("\n\n"); const pricecalculated = true; return pricecalculated; diff --git a/lib/types/config.ts b/lib/types/config.ts index cb2675a5..bd74923b 100644 --- a/lib/types/config.ts +++ b/lib/types/config.ts @@ -48,6 +48,10 @@ export interface Prerequisites { SlackWebhook?: string, TeamsWebhook?: string, } + readonly DdosNotifications?:{ + SlackWebhook?: string, + TeamsWebhook?: string, + } readonly Logging?: { readonly BucketProperties?: { readonly BucketName?: string, diff --git a/package-lock.json b/package-lock.json index 085b0995..db4b4654 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,12 +8,12 @@ "name": "aws-firewall-factory", "version": "4.1.2", "dependencies": { - "@aws-sdk/client-cloudformation": "^3.427.0", + "@aws-sdk/client-cloudformation": "^3.428.0", "@aws-sdk/client-cloudwatch": "^3.427.0", "@aws-sdk/client-fms": "^3.427.0", "@aws-sdk/client-pricing": "^3.427.0", "@aws-sdk/client-service-quotas": "^3.427.0", - "@aws-sdk/client-shield": "^3.427.0", + "@aws-sdk/client-shield": "^3.428.0", "@aws-sdk/client-wafv2": "^3.427.0", "@mhlabs/cfn-diagram": "^1.1.29", "@types/aws-lambda": "^8.10.119", @@ -35,11 +35,11 @@ "@typescript-eslint/eslint-plugin": "6.7.5", "@typescript-eslint/parser": "6.7.5", "aws-cdk": "2.100.0", - "eslint": "8.48.0", - "jest": "29.5.0", + "eslint": "8.51.0", + "jest": "29.7.0", "ts-jest": "29.1.1", "ts-node": "10.9.1", - "typescript": "4.9.5" + "typescript": "5.2.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -171,47 +171,47 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-sdk/client-cloudformation": { - "version": "3.427.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.427.0.tgz", - "integrity": "sha512-Hm1E/b3mIq/6vTJthN8CR+92p73AMLSA8Oe/qso78aUCEYyFL32gjT1fCQFTx0HYyh2x0sbJXSO/jD7FpUR4PQ==", + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.433.0.tgz", + "integrity": "sha512-6jFMhWM0AeBwCFyLo3VpOzmqwYOrGiwGB8LDUmI0bFsPyIFhxOKMTZ5DMvG8qe+JK4f9W5XqUQpFVrRmvqEccA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.427.0", - "@aws-sdk/credential-provider-node": "3.427.0", - "@aws-sdk/middleware-host-header": "3.425.0", - "@aws-sdk/middleware-logger": "3.425.0", - "@aws-sdk/middleware-recursion-detection": "3.425.0", - "@aws-sdk/middleware-signing": "3.425.0", - "@aws-sdk/middleware-user-agent": "3.427.0", - "@aws-sdk/region-config-resolver": "3.425.0", - "@aws-sdk/types": "3.425.0", - "@aws-sdk/util-endpoints": "3.427.0", - "@aws-sdk/util-user-agent-browser": "3.425.0", - "@aws-sdk/util-user-agent-node": "3.425.0", - "@smithy/config-resolver": "^2.0.11", - "@smithy/fetch-http-handler": "^2.2.1", - "@smithy/hash-node": "^2.0.10", - "@smithy/invalid-dependency": "^2.0.10", - "@smithy/middleware-content-length": "^2.0.12", - "@smithy/middleware-endpoint": "^2.0.10", - "@smithy/middleware-retry": "^2.0.13", - "@smithy/middleware-serde": "^2.0.10", - "@smithy/middleware-stack": "^2.0.4", - "@smithy/node-config-provider": "^2.0.13", - "@smithy/node-http-handler": "^2.1.6", - "@smithy/protocol-http": "^3.0.6", - "@smithy/smithy-client": "^2.1.9", - "@smithy/types": "^2.3.4", - "@smithy/url-parser": "^2.0.10", + "@aws-sdk/client-sts": "3.433.0", + "@aws-sdk/credential-provider-node": "3.433.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-signing": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.433.0", + "@aws-sdk/region-config-resolver": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.433.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.433.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/protocol-http": "^3.0.8", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", "@smithy/util-base64": "^2.0.0", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.13", - "@smithy/util-defaults-mode-node": "^2.0.15", - "@smithy/util-retry": "^2.0.3", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-retry": "^2.0.5", "@smithy/util-utf8": "^2.0.0", - "@smithy/util-waiter": "^2.0.10", + "@smithy/util-waiter": "^2.0.12", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0", "uuid": "^8.3.2" @@ -220,6 +220,403 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/client-sso": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.433.0.tgz", + "integrity": "sha512-L7ksMP7UnYH+w52ly+m+s5vk8662VtyqJ+UduFEMPqKUHTFEm7w+CCw4Xfk3hl5GlVvqPvYWqBqv8eLKSHpCEQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.433.0", + "@aws-sdk/region-config-resolver": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.433.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.433.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/protocol-http": "^3.0.8", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-retry": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/client-sts": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.433.0.tgz", + "integrity": "sha512-hQ+NLIcA1KRJ2qPdrtkJ3fOEVnehLLMlnB/I5mjg9K2UKjuiOufLao6tc5SyW9fseIL9AdX3fjJ8Unhg+y1RWg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.433.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-sdk-sts": "3.433.0", + "@aws-sdk/middleware-signing": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.433.0", + "@aws-sdk/region-config-resolver": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.433.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.433.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/protocol-http": "^3.0.8", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-retry": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.433.0.tgz", + "integrity": "sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.433.0.tgz", + "integrity": "sha512-T+YhCOORyA4+i4T86FfFCmi/jPsmLOP6GAtScHp/K8XzB9XuVvJSZ+T8SUKeW6/9G9z3Az7dqeBVLcMdC6fFDA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.433.0", + "@aws-sdk/credential-provider-process": "3.433.0", + "@aws-sdk/credential-provider-sso": "3.433.0", + "@aws-sdk/credential-provider-web-identity": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.433.0.tgz", + "integrity": "sha512-uOTBJszqGJIX5SrH2YdN501cv9rW4ghuSkasxI9DL+sVV5YRMd/bwu6I3PphRyK7z4dosDEbJ1xoIuVR/W04HQ==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.433.0", + "@aws-sdk/credential-provider-ini": "3.433.0", + "@aws-sdk/credential-provider-process": "3.433.0", + "@aws-sdk/credential-provider-sso": "3.433.0", + "@aws-sdk/credential-provider-web-identity": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.433.0.tgz", + "integrity": "sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.433.0.tgz", + "integrity": "sha512-vuc2X7q/1HUAO/NowfnNMpRDoHw8H2lyZZzUc0lmamy6PDrEFBi/VTm1nStGPuS9egCFrYlkRHsfp50ukYGa5w==", + "dependencies": { + "@aws-sdk/client-sso": "3.433.0", + "@aws-sdk/token-providers": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.433.0.tgz", + "integrity": "sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.433.0.tgz", + "integrity": "sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-logger": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.433.0.tgz", + "integrity": "sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.433.0.tgz", + "integrity": "sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.433.0.tgz", + "integrity": "sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-signing": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.433.0.tgz", + "integrity": "sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.4.0", + "@smithy/util-middleware": "^2.0.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.433.0.tgz", + "integrity": "sha512-jMgA1jHfisBK4oSjMKrtKEZf0sl2vzADivkFmyZFzORpSZxBnF6hC21RjaI+70LJLcc9rSCzLgcoz5lHb9LLDg==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.433.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.433.0.tgz", + "integrity": "sha512-xpjRjCZW+CDFdcMmmhIYg81ST5UAnJh61IHziQEk0FXONrg4kjyYPZAOjEdzXQ+HxJQuGQLKPhRdzxmQnbX7pg==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.3", + "@smithy/types": "^2.4.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/token-providers": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.433.0.tgz", + "integrity": "sha512-Q6aYVaQKB+CkBLHQQlN8MHVpOzZv9snRfVz7SxIpdbHkRuGEHiLliCY3fg6Sonvu3AKEPERPuHcaC75tnNpOBw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.433.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.433.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-retry": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/types": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.433.0.tgz", + "integrity": "sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==", + "dependencies": { + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.433.0.tgz", + "integrity": "sha512-LFNUh9FH7RMtYjSjPGz9lAJQMzmJ3RcXISzc5X5k2R/9mNwMK7y1k2VAfvx+RbuDbll6xwsXlgv6QHcxVdF2zw==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.433.0.tgz", + "integrity": "sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/types": "^2.4.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.433.0.tgz", + "integrity": "sha512-yT1tO4MbbsUBLl5+S+jVv8wxiAtP5TKjKib9B2KQ2x0OtWWTrIf2o+IZK8va+zQqdV4MVMjezdxdE20hOdB4yQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, "node_modules/@aws-sdk/client-cloudformation/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -419,52 +816,449 @@ } }, "node_modules/@aws-sdk/client-shield": { - "version": "3.427.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-shield/-/client-shield-3.427.0.tgz", - "integrity": "sha512-rdpmrA/K+hltxue6Sxt3ArnFTKNtQUdQG4r17VVaQCTd1oDWsJCDDZid+SU7vBI/y771dLpB82In0aDsQ9j2NQ==", + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-shield/-/client-shield-3.433.0.tgz", + "integrity": "sha512-nWcGEHgHkM3lBn45XkDP9I5WIb7QJ2Qc/M4YXQ4ZbhSwbJrpPRu1L2v40JvADBXWzouqKL70eqyJM1/mZTeB0Q==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.427.0", - "@aws-sdk/credential-provider-node": "3.427.0", - "@aws-sdk/middleware-host-header": "3.425.0", - "@aws-sdk/middleware-logger": "3.425.0", - "@aws-sdk/middleware-recursion-detection": "3.425.0", - "@aws-sdk/middleware-signing": "3.425.0", - "@aws-sdk/middleware-user-agent": "3.427.0", - "@aws-sdk/region-config-resolver": "3.425.0", - "@aws-sdk/types": "3.425.0", - "@aws-sdk/util-endpoints": "3.427.0", - "@aws-sdk/util-user-agent-browser": "3.425.0", - "@aws-sdk/util-user-agent-node": "3.425.0", - "@smithy/config-resolver": "^2.0.11", - "@smithy/fetch-http-handler": "^2.2.1", - "@smithy/hash-node": "^2.0.10", - "@smithy/invalid-dependency": "^2.0.10", - "@smithy/middleware-content-length": "^2.0.12", - "@smithy/middleware-endpoint": "^2.0.10", - "@smithy/middleware-retry": "^2.0.13", - "@smithy/middleware-serde": "^2.0.10", - "@smithy/middleware-stack": "^2.0.4", - "@smithy/node-config-provider": "^2.0.13", - "@smithy/node-http-handler": "^2.1.6", - "@smithy/protocol-http": "^3.0.6", - "@smithy/smithy-client": "^2.1.9", - "@smithy/types": "^2.3.4", - "@smithy/url-parser": "^2.0.10", + "@aws-sdk/client-sts": "3.433.0", + "@aws-sdk/credential-provider-node": "3.433.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-signing": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.433.0", + "@aws-sdk/region-config-resolver": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.433.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.433.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/protocol-http": "^3.0.8", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", "@smithy/util-base64": "^2.0.0", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.13", - "@smithy/util-defaults-mode-node": "^2.0.15", - "@smithy/util-retry": "^2.0.3", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-retry": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/client-sso": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.433.0.tgz", + "integrity": "sha512-L7ksMP7UnYH+w52ly+m+s5vk8662VtyqJ+UduFEMPqKUHTFEm7w+CCw4Xfk3hl5GlVvqPvYWqBqv8eLKSHpCEQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.433.0", + "@aws-sdk/region-config-resolver": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.433.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.433.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/protocol-http": "^3.0.8", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-retry": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/client-sts": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.433.0.tgz", + "integrity": "sha512-hQ+NLIcA1KRJ2qPdrtkJ3fOEVnehLLMlnB/I5mjg9K2UKjuiOufLao6tc5SyW9fseIL9AdX3fjJ8Unhg+y1RWg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.433.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-sdk-sts": "3.433.0", + "@aws-sdk/middleware-signing": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.433.0", + "@aws-sdk/region-config-resolver": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.433.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.433.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/protocol-http": "^3.0.8", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-retry": "^2.0.5", "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.433.0.tgz", + "integrity": "sha512-Vl7Qz5qYyxBurMn6hfSiNJeUHSqfVUlMt0C1Bds3tCkl3IzecRWwyBOlxtxO3VCrgVeW3HqswLzCvhAFzPH6nQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.433.0.tgz", + "integrity": "sha512-T+YhCOORyA4+i4T86FfFCmi/jPsmLOP6GAtScHp/K8XzB9XuVvJSZ+T8SUKeW6/9G9z3Az7dqeBVLcMdC6fFDA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.433.0", + "@aws-sdk/credential-provider-process": "3.433.0", + "@aws-sdk/credential-provider-sso": "3.433.0", + "@aws-sdk/credential-provider-web-identity": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.433.0.tgz", + "integrity": "sha512-uOTBJszqGJIX5SrH2YdN501cv9rW4ghuSkasxI9DL+sVV5YRMd/bwu6I3PphRyK7z4dosDEbJ1xoIuVR/W04HQ==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.433.0", + "@aws-sdk/credential-provider-ini": "3.433.0", + "@aws-sdk/credential-provider-process": "3.433.0", + "@aws-sdk/credential-provider-sso": "3.433.0", + "@aws-sdk/credential-provider-web-identity": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.433.0.tgz", + "integrity": "sha512-W7FcGlQjio9Y/PepcZGRyl5Bpwb0uWU7qIUCh+u4+q2mW4D5ZngXg8V/opL9/I/p4tUH9VXZLyLGwyBSkdhL+A==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.433.0.tgz", + "integrity": "sha512-vuc2X7q/1HUAO/NowfnNMpRDoHw8H2lyZZzUc0lmamy6PDrEFBi/VTm1nStGPuS9egCFrYlkRHsfp50ukYGa5w==", + "dependencies": { + "@aws-sdk/client-sso": "3.433.0", + "@aws-sdk/token-providers": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.433.0.tgz", + "integrity": "sha512-RlwjP1I5wO+aPpwyCp23Mk8nmRbRL33hqRASy73c4JA2z2YiRua+ryt6MalIxehhwQU6xvXUKulJnPG9VaMFZg==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.433.0.tgz", + "integrity": "sha512-mBTq3UWv1UzeHG+OfUQ2MB/5GEkt5LTKFaUqzL7ESwzW8XtpBgXnjZvIwu3Vcd3sEetMwijwaGiJhY0ae/YyaA==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/middleware-logger": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.433.0.tgz", + "integrity": "sha512-We346Fb5xGonTGVZC9Nvqtnqy74VJzYuTLLiuuftA5sbNzftBDy/22QCfvYSTOAl3bvif+dkDUzQY2ihc5PwOQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.433.0.tgz", + "integrity": "sha512-HEvYC9PQlWY/ccUYtLvAlwwf1iCif2TSAmLNr3YTBRVa98x6jKL0hlCrHWYklFeqOGSKy6XhE+NGJMUII0/HaQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.433.0.tgz", + "integrity": "sha512-ORYbJnBejUyonFl5FwIqhvI3Cq6sAp9j+JpkKZtFNma9tFPdrhmYgfCeNH32H/wGTQV/tUoQ3luh0gA4cuk6DA==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/middleware-signing": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.433.0.tgz", + "integrity": "sha512-jxPvt59NZo/epMNLNTu47ikmP8v0q217I6bQFGJG7JVFnfl36zDktMwGw+0xZR80qiK47/2BWrNpta61Zd2FxQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.4.0", + "@smithy/util-middleware": "^2.0.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.433.0.tgz", + "integrity": "sha512-jMgA1jHfisBK4oSjMKrtKEZf0sl2vzADivkFmyZFzORpSZxBnF6hC21RjaI+70LJLcc9rSCzLgcoz5lHb9LLDg==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.433.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.433.0.tgz", + "integrity": "sha512-xpjRjCZW+CDFdcMmmhIYg81ST5UAnJh61IHziQEk0FXONrg4kjyYPZAOjEdzXQ+HxJQuGQLKPhRdzxmQnbX7pg==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.3", + "@smithy/types": "^2.4.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/token-providers": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.433.0.tgz", + "integrity": "sha512-Q6aYVaQKB+CkBLHQQlN8MHVpOzZv9snRfVz7SxIpdbHkRuGEHiLliCY3fg6Sonvu3AKEPERPuHcaC75tnNpOBw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.433.0", + "@aws-sdk/middleware-logger": "3.433.0", + "@aws-sdk/middleware-recursion-detection": "3.433.0", + "@aws-sdk/middleware-user-agent": "3.433.0", + "@aws-sdk/types": "3.433.0", + "@aws-sdk/util-endpoints": "3.433.0", + "@aws-sdk/util-user-agent-browser": "3.433.0", + "@aws-sdk/util-user-agent-node": "3.433.0", + "@smithy/config-resolver": "^2.0.16", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/hash-node": "^2.0.12", + "@smithy/invalid-dependency": "^2.0.12", + "@smithy/middleware-content-length": "^2.0.14", + "@smithy/middleware-endpoint": "^2.1.3", + "@smithy/middleware-retry": "^2.0.18", + "@smithy/middleware-serde": "^2.0.12", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.8", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.16", + "@smithy/util-defaults-mode-node": "^2.0.21", + "@smithy/util-retry": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/types": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.433.0.tgz", + "integrity": "sha512-0jEE2mSrNDd8VGFjTc1otYrwYPIkzZJEIK90ZxisKvQ/EURGBhNzWn7ejWB9XCMFT6XumYLBR0V9qq5UPisWtA==", + "dependencies": { + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/util-endpoints": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.433.0.tgz", + "integrity": "sha512-LFNUh9FH7RMtYjSjPGz9lAJQMzmJ3RcXISzc5X5k2R/9mNwMK7y1k2VAfvx+RbuDbll6xwsXlgv6QHcxVdF2zw==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.433.0.tgz", + "integrity": "sha512-2Cf/Lwvxbt5RXvWFXrFr49vXv0IddiUwrZoAiwhDYxvsh+BMnh+NUFot+ZQaTrk/8IPZVDeLPWZRdVy00iaVXQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/types": "^2.4.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-shield/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.433.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.433.0.tgz", + "integrity": "sha512-yT1tO4MbbsUBLl5+S+jVv8wxiAtP5TKjKib9B2KQ2x0OtWWTrIf2o+IZK8va+zQqdV4MVMjezdxdE20hOdB4yQ==", + "dependencies": { + "@aws-sdk/types": "3.433.0", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/types": "^2.4.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, "node_modules/@aws-sdk/client-sso": { "version": "3.427.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.427.0.tgz", @@ -1679,9 +2473,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2226,11 +3020,11 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.11.tgz", - "integrity": "sha512-MSzE1qR2JNyb7ot3blIOT3O3H0Jn06iNDEgHRaqZUwBgx5EG+VIx24Y21tlKofzYryIOcWpIohLrIIyocD6LMA==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.12.tgz", + "integrity": "sha512-YIJyefe1mi3GxKdZxEBEuzYOeQ9xpYfqnFmWzojCssRAuR7ycxwpoRQgp965vuW426xUAQhCV5rCaWElQ7XsaA==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2238,14 +3032,14 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.14.tgz", - "integrity": "sha512-K1K+FuWQoy8j/G7lAmK85o03O89s2Vvh6kMFmzEmiHUoQCRH1rzbDtMnGNiaMHeSeYJ6y79IyTusdRG+LuWwtg==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.16.tgz", + "integrity": "sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ==", "dependencies": { - "@smithy/node-config-provider": "^2.1.1", - "@smithy/types": "^2.3.5", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/types": "^2.4.0", "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.4", + "@smithy/util-middleware": "^2.0.5", "tslib": "^2.5.0" }, "engines": { @@ -2253,14 +3047,14 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.16.tgz", - "integrity": "sha512-tKa2xF+69TvGxJT+lnJpGrKxUuAZDLYXFhqnPEgnHz+psTpkpcB4QRjHj63+uj83KaeFJdTfW201eLZeRn6FfA==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.18.tgz", + "integrity": "sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g==", "dependencies": { - "@smithy/node-config-provider": "^2.1.1", - "@smithy/property-provider": "^2.0.12", - "@smithy/types": "^2.3.5", - "@smithy/url-parser": "^2.0.11", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/property-provider": "^2.0.13", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", "tslib": "^2.5.0" }, "engines": { @@ -2279,23 +3073,23 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.2.tgz", - "integrity": "sha512-K7aRtRuaBjzlk+jWWeyfDTLAmRRvmA4fU8eHUXtjsuEDgi3f356ZE32VD2ssxIH13RCLVZbXMt5h7wHzYiSuVA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.4.tgz", + "integrity": "sha512-gIPRFEGi+c6V52eauGKrjDzPWF2Cu7Z1r5F8A3j2wcwz25sPG/t8kjsbEhli/tS/2zJp/ybCZXe4j4ro3yv/HA==", "dependencies": { - "@smithy/protocol-http": "^3.0.7", - "@smithy/querystring-builder": "^2.0.11", - "@smithy/types": "^2.3.5", + "@smithy/protocol-http": "^3.0.8", + "@smithy/querystring-builder": "^2.0.12", + "@smithy/types": "^2.4.0", "@smithy/util-base64": "^2.0.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/hash-node": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.11.tgz", - "integrity": "sha512-PbleVugN2tbhl1ZoNWVrZ1oTFFas/Hq+s6zGO8B9bv4w/StTriTKA9W+xZJACOj9X7zwfoTLbscM+avCB1KqOQ==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.12.tgz", + "integrity": "sha512-fDZnTr5j9t5qcbeJ037aMZXxMka13Znqwrgy3PAqYj6Dm3XHXHftTH3q+NWgayUxl1992GFtQt1RuEzRMy3NnQ==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.5.0" @@ -2305,11 +3099,11 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.11.tgz", - "integrity": "sha512-zazq99ujxYv/NOf9zh7xXbNgzoVLsqE0wle8P/1zU/XdhPi/0zohTPKWUzIxjGdqb5hkkwfBkNkl5H+LE0mvgw==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.12.tgz", + "integrity": "sha512-p5Y+iMHV3SoEpy3VSR7mifbreHQwVSvHSAz/m4GdoXfOzKzaYC8hYv10Ks7Deblkf7lhas8U+lAp9ThbBM+ZXA==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" } }, @@ -2325,12 +3119,12 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.13.tgz", - "integrity": "sha512-Md2kxWpaec3bXp1oERFPQPBhOXCkGSAF7uc1E+4rkwjgw3/tqAXRtbjbggu67HJdwaif76As8AV6XxbD1HzqTQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.14.tgz", + "integrity": "sha512-poUNgKTw9XwPXfX9nEHpVgrMNVpaSMZbshqvPxFVoalF4wp6kRzYKOfdesSVectlQ51VtigoLfbXcdyPwvxgTg==", "dependencies": { - "@smithy/protocol-http": "^3.0.7", - "@smithy/types": "^2.3.5", + "@smithy/protocol-http": "^3.0.8", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2338,14 +3132,16 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.11.tgz", - "integrity": "sha512-mCugsvB15up6fqpzUEpMT4CuJmFkEI+KcozA7QMzYguXCaIilyMKsyxgamwmr+o7lo3QdjN0//XLQ9bWFL129g==", - "dependencies": { - "@smithy/middleware-serde": "^2.0.11", - "@smithy/types": "^2.3.5", - "@smithy/url-parser": "^2.0.11", - "@smithy/util-middleware": "^2.0.4", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.3.tgz", + "integrity": "sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.12", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/shared-ini-file-loader": "^2.2.2", + "@smithy/types": "^2.4.0", + "@smithy/url-parser": "^2.0.12", + "@smithy/util-middleware": "^2.0.5", "tslib": "^2.5.0" }, "engines": { @@ -2353,16 +3149,16 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.16.tgz", - "integrity": "sha512-Br5+0yoiMS0ugiOAfJxregzMMGIRCbX4PYo1kDHtLgvkA/d++aHbnHB819m5zOIAMPvPE7AThZgcsoK+WOsUTA==", - "dependencies": { - "@smithy/node-config-provider": "^2.1.1", - "@smithy/protocol-http": "^3.0.7", - "@smithy/service-error-classification": "^2.0.4", - "@smithy/types": "^2.3.5", - "@smithy/util-middleware": "^2.0.4", - "@smithy/util-retry": "^2.0.4", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.18.tgz", + "integrity": "sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.3", + "@smithy/protocol-http": "^3.0.8", + "@smithy/service-error-classification": "^2.0.5", + "@smithy/types": "^2.4.0", + "@smithy/util-middleware": "^2.0.5", + "@smithy/util-retry": "^2.0.5", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -2379,11 +3175,11 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.11.tgz", - "integrity": "sha512-NuxnjMyf4zQqhwwdh0OTj5RqpnuT6HcH5Xg5GrPijPcKzc2REXVEVK4Yyk8ckj8ez1XSj/bCmJ+oNjmqB02GWA==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.12.tgz", + "integrity": "sha512-IBeco157lIScecq2Z+n0gq56i4MTnfKxS7rbfrAORveDJgnbBAaEQgYqMqp/cYqKrpvEXcyTjwKHrBjCCIZh2A==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2391,11 +3187,11 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.5.tgz", - "integrity": "sha512-bVQU/rZzBY7CbSxIrDTGZYnBWKtIw+PL/cRc9B7etZk1IKSOe0NvKMJyWllfhfhrTeMF6eleCzOihIQympAvPw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.6.tgz", + "integrity": "sha512-YSvNZeOKWLJ0M/ycxwDIe2Ztkp6Qixmcml1ggsSv2fdHKGkBPhGrX5tMzPGMI1yyx55UEYBi2OB4s+RriXX48A==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2403,13 +3199,13 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.1.tgz", - "integrity": "sha512-1lF6s1YWBi1LBu2O30tD3jyTgMtuvk/Z1twzXM4GPYe4dmZix4nNREPJIPOcfFikNU2o0eTYP80+izx5F2jIJA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.3.tgz", + "integrity": "sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ==", "dependencies": { - "@smithy/property-provider": "^2.0.12", - "@smithy/shared-ini-file-loader": "^2.2.0", - "@smithy/types": "^2.3.5", + "@smithy/property-provider": "^2.0.13", + "@smithy/shared-ini-file-loader": "^2.2.2", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2417,14 +3213,14 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.7.tgz", - "integrity": "sha512-PQIKZXlp3awCDn/xNlCSTFE7aYG/5Tx33M05NfQmWYeB5yV1GZZOSz4dXpwiNJYTXb9jPqjl+ueXXkwtEluFFA==", - "dependencies": { - "@smithy/abort-controller": "^2.0.11", - "@smithy/protocol-http": "^3.0.7", - "@smithy/querystring-builder": "^2.0.11", - "@smithy/types": "^2.3.5", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.8.tgz", + "integrity": "sha512-KZylM7Wff/So5SmCiwg2kQNXJ+RXgz34wkxS7WNwIUXuZrZZpY/jKJCK+ZaGyuESDu3TxcaY+zeYGJmnFKbQsA==", + "dependencies": { + "@smithy/abort-controller": "^2.0.12", + "@smithy/protocol-http": "^3.0.8", + "@smithy/querystring-builder": "^2.0.12", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2432,11 +3228,11 @@ } }, "node_modules/@smithy/property-provider": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.12.tgz", - "integrity": "sha512-Un/OvvuQ1Kg8WYtoMCicfsFFuHb/TKL3pCA6ZIo/WvNTJTR94RtoRnL7mY4XkkUAoFMyf6KjcQJ76y1FX7S5rw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.13.tgz", + "integrity": "sha512-VJqUf2CbsQX6uUiC5dUPuoEATuFjkbkW3lJHbRnpk9EDC9X+iKqhfTK+WP+lve5EQ9TcCI1Q6R7hrg41FyC54w==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2444,11 +3240,11 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.7.tgz", - "integrity": "sha512-HnZW8y+r66ntYueCDbLqKwWcMNWW8o3eVpSrHNluwtBJ/EUWfQHRKSiu6vZZtc6PGfPQWgVfucoCE/C3QufMAA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.8.tgz", + "integrity": "sha512-SHJvYeWq8q0FK8xHk+xjV9dzDUDjFMT+G1pZbV+XB6OVoac/FSVshlMNPeUJ8AmSkcDKHRu5vASnRqZHgD3qhw==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2456,11 +3252,11 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.11.tgz", - "integrity": "sha512-b4kEbVMxpmfv2VWUITn2otckTi7GlMteZQxi+jlwedoATOGEyrCJPfRcYQJjbCi3fZ2QTfh3PcORvB27+j38Yg==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.12.tgz", + "integrity": "sha512-cDbF07IuCjiN8CdGvPzfJjXIrmDSelScRfyJYrYBNBbKl2+k7QD/KqiHhtRyEKgID5mmEVrV6KE6L/iPJ98sFw==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, @@ -2469,11 +3265,11 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.11.tgz", - "integrity": "sha512-YXe7jhi7s3dQ0Fu9dLoY/gLu6NCyy8tBWJL/v2c9i7/RLpHgKT+uT96/OqZkHizCJ4kr0ZD46tzMjql/o60KLg==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.12.tgz", + "integrity": "sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2481,22 +3277,22 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.4.tgz", - "integrity": "sha512-77506l12I5gxTZqBkx3Wb0RqMG81bMYLaVQ+EqIWFwQDJRs5UFeXogKxSKojCmz1wLUziHZQXm03MBzPQiumQw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.5.tgz", + "integrity": "sha512-M0SeJnEgD2ywJyV99Fb1yKFzmxDe9JfpJiYTVSRMyRLc467BPU0qsuuDPzMCdB1mU8M8u1rVOdkqdoyFN8UFTw==", "dependencies": { - "@smithy/types": "^2.3.5" + "@smithy/types": "^2.4.0" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.0.tgz", - "integrity": "sha512-xFXqs4vAb5BdkzHSRrTapFoaqS4/3m/CGZzdw46fBjYZ0paYuLAoMY60ICCn1FfGirG+PiJ3eWcqJNe4/SkfyA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.2.tgz", + "integrity": "sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2522,13 +3318,13 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.10.tgz", - "integrity": "sha512-2OEmZDiW1Z196QHuQZ5M6cBE8FCSG0H2HADP1G+DY8P3agsvb0YJyfhyKuJbxIQy15tr3eDAK6FOrlbxgKOOew==", + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.12.tgz", + "integrity": "sha512-XXqhridfkKnpj+lt8vM6HRlZbqUAqBjVC74JIi13F/AYQd/zTj9SOyGfxnbp4mjY9q28LityxIuV8CTinr9r5w==", "dependencies": { - "@smithy/middleware-stack": "^2.0.5", - "@smithy/types": "^2.3.5", - "@smithy/util-stream": "^2.0.15", + "@smithy/middleware-stack": "^2.0.6", + "@smithy/types": "^2.4.0", + "@smithy/util-stream": "^2.0.17", "tslib": "^2.5.0" }, "engines": { @@ -2536,9 +3332,9 @@ } }, "node_modules/@smithy/types": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.5.tgz", - "integrity": "sha512-ehyDt8M9hehyxrLQGoA1BGPou8Js1Ocoh5M0ngDhJMqbFmNK5N6Xhr9/ZExWkyIW8XcGkiMPq3ZUEE0ScrhbuQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.4.0.tgz", + "integrity": "sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g==", "dependencies": { "tslib": "^2.5.0" }, @@ -2547,12 +3343,12 @@ } }, "node_modules/@smithy/url-parser": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.11.tgz", - "integrity": "sha512-h89yXMCCF+S5k9XIoKltMIWTYj+FcEkU/IIFZ6RtE222fskOTL4Iak6ZRG+ehSvZDt8yKEcxqheTDq7JvvtK3g==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.12.tgz", + "integrity": "sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA==", "dependencies": { - "@smithy/querystring-parser": "^2.0.11", - "@smithy/types": "^2.3.5", + "@smithy/querystring-parser": "^2.0.12", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" } }, @@ -2611,13 +3407,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.14.tgz", - "integrity": "sha512-NupG7SWUucm3vJrvlpt9jG1XeoPJphjcivgcUUXhDJbUPy4F04LhlTiAhWSzwlCNcF8OJsMvZ/DWbpYD3pselw==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.16.tgz", + "integrity": "sha512-Uv5Cu8nVkuvLn0puX+R9zWbSNpLIR3AxUlPoLJ7hC5lvir8B2WVqVEkJLwtixKAncVLasnTVjPDCidtAUTGEQw==", "dependencies": { - "@smithy/property-provider": "^2.0.12", - "@smithy/smithy-client": "^2.1.10", - "@smithy/types": "^2.3.5", + "@smithy/property-provider": "^2.0.13", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -2626,16 +3422,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.18.tgz", - "integrity": "sha512-+3jMom/b/Cdp21tDnY4vKu249Al+G/P0HbRbct7/aSZDlROzv1tksaYukon6UUv7uoHn+/McqnsvqZHLlqvQ0g==", - "dependencies": { - "@smithy/config-resolver": "^2.0.14", - "@smithy/credential-provider-imds": "^2.0.16", - "@smithy/node-config-provider": "^2.1.1", - "@smithy/property-provider": "^2.0.12", - "@smithy/smithy-client": "^2.1.10", - "@smithy/types": "^2.3.5", + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.21.tgz", + "integrity": "sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw==", + "dependencies": { + "@smithy/config-resolver": "^2.0.16", + "@smithy/credential-provider-imds": "^2.0.18", + "@smithy/node-config-provider": "^2.1.3", + "@smithy/property-provider": "^2.0.13", + "@smithy/smithy-client": "^2.1.12", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2654,11 +3450,11 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.4.tgz", - "integrity": "sha512-Pbu6P4MBwRcjrLgdTR1O4Y3c0sTZn2JdOiJNcgL7EcIStcQodj+6ZTXtbyU/WTEU3MV2NMA10LxFc3AWHZ3+4A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.5.tgz", + "integrity": "sha512-1lyT3TcaMJQe+OFfVI+TlomDkPuVzb27NZYdYtmSTltVmLaUjdCyt4KE+OH1CnhZKsz4/cdCL420Lg9UH5Z2Mw==", "dependencies": { - "@smithy/types": "^2.3.5", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2666,12 +3462,12 @@ } }, "node_modules/@smithy/util-retry": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.4.tgz", - "integrity": "sha512-b+n1jBBKc77C1E/zfBe1Zo7S9OXGBiGn55N0apfhZHxPUP/fMH5AhFUUcWaJh7NAnah284M5lGkBKuhnr3yK5w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.5.tgz", + "integrity": "sha512-x3t1+MQAJ6QONk3GTbJNcugCFDVJ+Bkro5YqQQK1EyVesajNDqxFtCx9WdOFNGm/Cbm7tUdwVEmfKQOJoU2Vtw==", "dependencies": { - "@smithy/service-error-classification": "^2.0.4", - "@smithy/types": "^2.3.5", + "@smithy/service-error-classification": "^2.0.5", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -2679,13 +3475,13 @@ } }, "node_modules/@smithy/util-stream": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.15.tgz", - "integrity": "sha512-A/hkYJPH2N5MCWYvky4tTpQihpYAEzqnUfxDyG3L/yMndy/2sLvxnyQal9Opuj1e9FiKSTeMyjnU9xxZGs0mRw==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.17.tgz", + "integrity": "sha512-fP/ZQ27rRvHsqItds8yB7jerwMpZFTL3QqbQbidUiG0+mttMoKdP0ZqnvM8UK5q0/dfc3/pN7g4XKPXOU7oRWw==", "dependencies": { - "@smithy/fetch-http-handler": "^2.2.2", - "@smithy/node-http-handler": "^2.1.7", - "@smithy/types": "^2.3.5", + "@smithy/fetch-http-handler": "^2.2.4", + "@smithy/node-http-handler": "^2.1.8", + "@smithy/types": "^2.4.0", "@smithy/util-base64": "^2.0.0", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-hex-encoding": "^2.0.0", @@ -2720,12 +3516,12 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.11.tgz", - "integrity": "sha512-8SJWUl9O1YhjC77EccgltI3q4XZQp3vp9DGEW6o0OdkUcwqm/H4qOLnMkA2n+NDojuM5Iia2jWoCdbluIiG7TA==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.12.tgz", + "integrity": "sha512-3sENmyVa1NnOPoiT2NCApPmu7ukP7S/v7kL9IxNmnygkDldn7/yK0TP42oPJLwB2k3mospNsSePIlqdXEUyPHA==", "dependencies": { - "@smithy/abort-controller": "^2.0.11", - "@smithy/types": "^2.3.5", + "@smithy/abort-controller": "^2.0.12", + "@smithy/types": "^2.4.0", "tslib": "^2.5.0" }, "engines": { @@ -4542,16 +5338,16 @@ } }, "node_modules/eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", @@ -5672,15 +6468,15 @@ "integrity": "sha512-ic7NS6peKhtNXL9ijAXXEo9TPmej/wrV3Sggc37Ynqe+ldMiQsLoKIBtrFLMLGrQgSKZZ/77n+8HujCFFPDowA==" }, "node_modules/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "dependencies": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.5.0" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" @@ -7707,16 +8503,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/universalify": { diff --git a/package.json b/package.json index f1a06028..6ee28069 100644 --- a/package.json +++ b/package.json @@ -16,19 +16,19 @@ "@typescript-eslint/eslint-plugin": "6.7.5", "@typescript-eslint/parser": "6.7.5", "aws-cdk": "2.100.0", - "eslint": "8.48.0", - "jest": "29.5.0", + "eslint": "8.51.0", + "jest": "29.7.0", "ts-jest": "29.1.1", "ts-node": "10.9.1", - "typescript": "4.9.5" + "typescript": "5.2.2" }, "dependencies": { - "@aws-sdk/client-cloudformation": "^3.427.0", + "@aws-sdk/client-cloudformation": "^3.428.0", "@aws-sdk/client-cloudwatch": "^3.427.0", "@aws-sdk/client-fms": "^3.427.0", "@aws-sdk/client-pricing": "^3.427.0", "@aws-sdk/client-service-quotas": "^3.427.0", - "@aws-sdk/client-shield": "^3.427.0", + "@aws-sdk/client-shield": "^3.428.0", "@aws-sdk/client-wafv2": "^3.427.0", "@mhlabs/cfn-diagram": "^1.1.29", "@types/aws-lambda": "^8.10.119", diff --git a/test/config-loader.ts b/test/config-loader.ts deleted file mode 100644 index 64afa94e..00000000 --- a/test/config-loader.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { validatewaf, validateprerequisites } from "../lib/tools/config-validator"; -import { Config, Prerequisites } from "../lib/types/config"; -import { realpathSync, existsSync } from "fs"; - -const CONFIGFILE = process.env.PROCESS_PARAMETERS; - -if (CONFIGFILE && existsSync(CONFIGFILE)) { - // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-assignment - const prerequisites: Prerequisites = require(realpathSync(CONFIGFILE)); - // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-assignment - const config: Config = require(realpathSync(CONFIGFILE)); - if(process.env.PREREQUISITE === "true"){ - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - if(validateprerequisites(prerequisites)){ - console.log("Your config "+ CONFIGFILE +" is valid."); - } else { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - console.error("\u001B[31m","🚨 Invalid Configuration File 🚨 \n\n","\x1b[0m" + JSON.stringify(validateprerequisites.errors, null, 2)+ "\n\n"); - }} - else{ - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - if(validatewaf(config)){ - console.log("Your config "+ CONFIGFILE +" is valid."); - } else { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - console.error("\u001B[31m","🚨 Invalid Configuration File 🚨 \n\n","\x1b[0m" + JSON.stringify(validatewaf.errors, null, 2)+ "\n\n"); - }} -} -else { - console.error("File not found:", CONFIGFILE); -} \ No newline at end of file diff --git a/values/index.ts b/values/index.ts index c228b84a..ddb2b5c5 100644 --- a/values/index.ts +++ b/values/index.ts @@ -1,10 +1,11 @@ import {Config, Prerequisites} from "../lib/types/config"; import { owasptopTen, prequisites, ipSetsManagedTest} from "./examples"; - +import * as tests from "./tests"; export const configs : { [key: string]: Config } = { owasptopTen, ipSetsManagedTest, + ...tests, }; export const prereq : { [key: string]: Prerequisites } = { diff --git a/values/tests/index.ts b/values/tests/index.ts new file mode 100644 index 00000000..35e45f0d --- /dev/null +++ b/values/tests/index.ts @@ -0,0 +1,3 @@ +export { config as ipSetsTests }from "./ipSets"; +export { config as regexPatternSetsTests } from "./regexPatternSets"; +export { config as onlyManagedRuleGroupsTests } from "./onlyManagedRuleGroups"; diff --git a/values/tests/ipSets.ts b/values/tests/ipSets.ts new file mode 100644 index 00000000..143c0b89 --- /dev/null +++ b/values/tests/ipSets.ts @@ -0,0 +1,428 @@ +import { Config } from "../../lib/types/config"; +import * as fwmEnums from "../../lib/types/enums"; + +export const config: Config = { + General: { + Prefix: "testcases", + Stage: "test", + S3LoggingBucketName: "aws-waf-logs-aws-firewall-factory-test", + LoggingConfiguration: "S3", + SecuredDomain: ["test.aws-firewall-factory.com"] + }, + WebAcl: { + IncludeMap: { + account: [ + "859220371210" // gdn-test + ], + }, + Name: "ipssets", + IPSets: [ + { + name: "test-ipSet", + addresses: [ + "192.168.1.1/32" + ], + ipAddressVersion: "IPV4" + } + ], + PreProcess: { + ManagedRuleGroups: [], + CustomRules: [ + { + name: "test-statement-ipSet", + priority: 10, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-statement-ipSet", + sampledRequestsEnabled: true + }, + statement: { + ipSetReferenceStatement: { + arn: "test-ipSet" + } + }, + action: { + block: {} + } + }, + { + name: "test-andStatemment-statement-ipSet", + priority: 20, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-andStatemment-statement-ipSet", + sampledRequestsEnabled: true + }, + statement: { + andStatement: { + statements: [ + { + notStatement: { + statement: { + ipSetReferenceStatement: { + arn: "test-ipSet" + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-orStatemment-statement-ipSet", + priority: 30, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-orStatemment-notStatement-ipSet", + sampledRequestsEnabled: true + }, + statement: { + orStatement: { + statements: [ + { + ipSetReferenceStatement: { + arn: "test-ipSet" + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-notStatement-ipSet", + priority: 40, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-notStatement-ipSet", + sampledRequestsEnabled: true + }, + statement: { + notStatement: { + statement: { + ipSetReferenceStatement: { + arn: "test-ipSet" + } + } + } + }, + action: { + block: {} + } + }, + { + name: "test-andStatemment-notStatement-ipSet", + priority: 50, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-andStatemment-notStatement-ipSet", + sampledRequestsEnabled: true + }, + statement: { + andStatement: { + statements: [ + { + notStatement: { + statement: { + ipSetReferenceStatement: { + arn: "test-ipSet" + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-orStatemment-notStatement-ipSet", + priority: 60, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-orStatemment-notStatement-ipSet", + sampledRequestsEnabled: true + }, + statement: { + orStatement: { + statements: [ + { + notStatement: { + statement: { + ipSetReferenceStatement: { + arn: "test-ipSet" + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-statement-ipSet-Arn", + priority: 70, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-statement-ipSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + ipSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/ipset/TEST/ee32e47f-e3b0-44ca-a0bd-5ee2ecde9b23" + } + }, + action: { + block: {} + } + }, + { + name: "test-andStatemment-statement-ipSet-Arn", + priority: 80, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-andStatemment-statement-ipSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + andStatement: { + statements: [ + { + notStatement: { + statement: { + ipSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/ipset/TEST/ee32e47f-e3b0-44ca-a0bd-5ee2ecde9b23" + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-orStatemment-statement-ipSet-Arn", + priority: 90, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-orStatemment-notStatement-ipSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + orStatement: { + statements: [ + { + ipSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/ipset/TEST/ee32e47f-e3b0-44ca-a0bd-5ee2ecde9b23" + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-notStatement-ipSet-Arn", + priority: 100, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-notStatement-ipSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + notStatement: { + statement: { + ipSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/ipset/TEST/ee32e47f-e3b0-44ca-a0bd-5ee2ecde9b23" + } + } + } + }, + action: { + block: {} + } + }, + { + name: "test-andStatemment-notStatement-ipSet-Arn", + priority: 110, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-andStatemment-notStatement-ipSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + andStatement: { + statements: [ + { + notStatement: { + statement: { + ipSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/ipset/TEST/ee32e47f-e3b0-44ca-a0bd-5ee2ecde9b23" + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-orStatemment-notStatement-ipSet-Arn", + priority: 120, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-orStatemment-notStatement-ipSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + orStatement: { + statements: [ + { + notStatement: { + statement: { + ipSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/ipset/TEST/ee32e47f-e3b0-44ca-a0bd-5ee2ecde9b23" + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + } + ] + }, + PostProcess: { + ManagedRuleGroups: [], + + }, + Scope: fwmEnums.WebAclScope.REGIONAL, + Type: fwmEnums.WebAclTypeEnum.ELASTICLOADBALANCINGV2_LOADBALANCER + }, +}; \ No newline at end of file diff --git a/values/tests/onlyManagedRuleGroups.ts b/values/tests/onlyManagedRuleGroups.ts new file mode 100644 index 00000000..758458fc --- /dev/null +++ b/values/tests/onlyManagedRuleGroups.ts @@ -0,0 +1,60 @@ +import { Config } from "../../lib/types/config"; +import {ManagedRuleGroupVendor, AwsManagedRules, WebAclScope, WebAclTypeEnum} from "../../lib/types/enums"; +export const config: Config = { + General: { + Prefix: "testcases", + Stage: "test", + S3LoggingBucketName: "aws-waf-logs-aws-firewall-factory-test", + LoggingConfiguration: "S3", + SecuredDomain: ["test.aws-firewall-factory.com"] + }, + WebAcl: { + Name: "ManagedRuleGroups", + Scope: WebAclScope.REGIONAL, + Type: WebAclTypeEnum.APIGATEWAY_STAGE, + IncludeMap: { + account: [ + "859220371210" // gdn-test + ], + }, + PreProcess: { + ManagedRuleGroups: [ + { + vendor: ManagedRuleGroupVendor.AWS, + name: AwsManagedRules.AMAZON_IP_REPUTATION_LIST, + }, + { + vendor: ManagedRuleGroupVendor.AWS, + name: AwsManagedRules.ANONYMOUS_IP_LIST + }, + { + vendor: ManagedRuleGroupVendor.AWS, + name: AwsManagedRules.BOT_CONTROL_RULE_SET, + }, + { + vendor: ManagedRuleGroupVendor.AWS, + name: AwsManagedRules.COMMON_RULE_SET, + }, + { + vendor: ManagedRuleGroupVendor.AWS, + name: AwsManagedRules.KNOWN_BAD_INPUTS_RULE_SET, + enforceUpdate: true, + versionEnabled: false + }, + { + vendor: ManagedRuleGroupVendor.AWS, + name: AwsManagedRules.SQLI_RULE_SET, + enforceUpdate: true, + versionEnabled: true + }, + { + vendor: ManagedRuleGroupVendor.AWS, + name: AwsManagedRules.ADMIN_PROTECTION_RULE_SET, + enforceUpdate: false, + versionEnabled: true + } + ] + }, + PostProcess: {}, + }, +}; \ No newline at end of file diff --git a/values/tests/regexPatternSets.ts b/values/tests/regexPatternSets.ts new file mode 100644 index 00000000..f066d97e --- /dev/null +++ b/values/tests/regexPatternSets.ts @@ -0,0 +1,471 @@ +import { Config } from "../../lib/types/config"; +import * as fwmEnums from "../../lib/types/enums"; + +export const config: Config = { + General: { + Prefix: "testcases", + Stage: "test", + S3LoggingBucketName: "aws-waf-logs-aws-firewall-factory-test", + LoggingConfiguration: "S3", + SecuredDomain: ["test.aws-firewall-factory.com"] + }, + WebAcl: { + IncludeMap: { + account: [ + "859220371210" // gdn-test + ], + }, + Name: "regexpatternsets", + RegexPatternSets: [{ + name: "test-regexPatternSet", + regularExpressionList: ["^.*\/test", "^.*\/regex"] + }], + PreProcess: { + ManagedRuleGroups: [], + CustomRules: [ + { + name: "test-statement-regexPatternSet", + priority: 10, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-statement-regexPatternSet", + sampledRequestsEnabled: true + }, + statement: { + regexPatternSetReferenceStatement: { + arn: "test-regexPatternSet", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + }, + action: { + block: {} + } + }, + { + name: "test-andStatemment-statement-regexPatternSet", + priority: 20, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-andStatemment-statement-regexPatternSet", + sampledRequestsEnabled: true + }, + statement: { + andStatement: { + statements: [ + { + notStatement: { + statement: { + regexPatternSetReferenceStatement: { + arn: "test-regexPatternSet", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-orStatemment-statement-regexPatternSet", + priority: 30, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-orStatemment-notstatement-regexPatternSet", + sampledRequestsEnabled: true + }, + statement: { + orStatement: { + statements: [ + { + regexPatternSetReferenceStatement: { + arn: "test-regexPatternSet", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-notstatement-regexPatternSet", + priority: 40, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-notstatement-regexPatternSet", + sampledRequestsEnabled: true + }, + statement: { + notStatement: { + statement: { + regexPatternSetReferenceStatement: { + arn: "test-regexPatternSet", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + } + } + }, + action: { + block: {} + } + }, + { + name: "test-andStatemment-notstatement-regexPatternSet", + priority: 50, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-andStatemment-notstatement-regexPatternSet", + sampledRequestsEnabled: true + }, + statement: { + andStatement: { + statements: [ + { + notStatement: { + statement: { + regexPatternSetReferenceStatement: { + arn: "test-regexPatternSet", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-orStatemment-notstatement-regexPatternSet", + priority: 60, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-orStatemment-notstatement-regexPatternSet", + sampledRequestsEnabled: true + }, + statement: { + orStatement: { + statements: [ + { + notStatement: { + statement: { + regexPatternSetReferenceStatement: { + arn: "test-regexPatternSet", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-statement-regexPatternSet-Arn", + priority: 70, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-statement-regexPatternSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + regexPatternSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/regexpatternset/TEST/2335872f-2c5b-4326-8d45-955a388212b5", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + }, + action: { + block: {} + } + }, + { + name: "test-andStatemment-statement-regexPatternSet-Arn", + priority: 80, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-andStatemment-statement-regexPatternSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + andStatement: { + statements: [ + { + notStatement: { + statement: { + regexPatternSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/regexpatternset/TEST/2335872f-2c5b-4326-8d45-955a388212b5", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-orStatemment-statement-regexPatternSet-Arn", + priority: 90, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-orStatemment-notstatement-regexPatternSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + orStatement: { + statements: [ + { + regexPatternSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/regexpatternset/TEST/2335872f-2c5b-4326-8d45-955a388212b5", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-notstatement-regexPatternSet-Arn", + priority: 100, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-notstatement-regexPatternSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + notStatement: { + statement: { + regexPatternSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/regexpatternset/TEST/2335872f-2c5b-4326-8d45-955a388212b5", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + } + } + }, + action: { + block: {} + } + }, + { + name: "test-andStatemment-notstatement-regexPatternSet-Arn", + priority: 110, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-andStatemment-notstatement-regexPatternSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + andStatement: { + statements: [ + { + notStatement: { + statement: { + regexPatternSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/regexpatternset/TEST/2335872f-2c5b-4326-8d45-955a388212b5", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + }, + { + name: "test-orStatemment-notstatement-regexPatternSet-Arn", + priority: 120, + visibilityConfig: { + cloudWatchMetricsEnabled: true, + metricName: "test-orStatemment-notstatement-regexPatternSet-Arn", + sampledRequestsEnabled: true + }, + statement: { + orStatement: { + statements: [ + { + notStatement: { + statement: { + regexPatternSetReferenceStatement: { + arn: "arn:aws:wafv2:eu-central-1:859220371210:regional/regexpatternset/TEST/2335872f-2c5b-4326-8d45-955a388212b5", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ priority: 0, type: "NONE" }] + } + } + } + }, + { + byteMatchStatement: { + searchString: "test", + positionalConstraint: "CONTAINS", + fieldToMatch: { + uriPath: {} + }, + textTransformations: [{ + priority: 0, + type: "NONE" + }] + } + } + ] + } + }, + action: { + block: {} + } + } + ] + }, + PostProcess: { + ManagedRuleGroups: [], + + }, + Scope: fwmEnums.WebAclScope.REGIONAL, + Type: fwmEnums.WebAclTypeEnum.ELASTICLOADBALANCINGV2_LOADBALANCER + }, +}; \ No newline at end of file