diff --git a/.projen/deps.json b/.projen/deps.json index 84393790..6341d29c 100644 --- a/.projen/deps.json +++ b/.projen/deps.json @@ -6,7 +6,7 @@ }, { "name": "@aws-cdk/integ-tests-alpha", - "version": "2.191.0-alpha.0", + "version": "2.206.0-alpha.0", "type": "build" }, { @@ -138,7 +138,7 @@ }, { "name": "@aws-cdk/aws-lambda-python-alpha", - "version": "2.191.0-alpha.0", + "version": "2.206.0-alpha.0", "type": "bundled" }, { @@ -147,7 +147,7 @@ }, { "name": "aws-cdk-lib", - "version": "^2.191.0", + "version": "^2.206.0", "type": "peer" }, { diff --git a/.projenrc.ts b/.projenrc.ts index 6f676f7f..8cef695e 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -11,25 +11,25 @@ * and limitations under the License. */ -import { JsonPatch, awscdk, ReleasableCommits } from 'projen'; +import { awscdk, JsonPatch, ReleasableCommits } from 'projen'; import { NpmAccess } from 'projen/lib/javascript'; import { buildUpgradeMainPRCustomJob } from './projenrc/github-jobs'; import { + buildAutoApproveWorkflow, + buildCodeGenerationWorkflow, buildMeritBadgerWorkflow, buildMonthlyIssuesMetricsWorkflow, - buildAutoApproveWorkflow, buildOrtToolkitWorkflow, - runSemGrepWorkflow, runBanditWorkflow, runCommitLintWorkflow, - buildCodeGenerationWorkflow, + runSemGrepWorkflow, } from './projenrc/github-workflows'; // Constants const GITHUB_USER = 'awslabs'; const PUBLICATION_NAMESPACE = 'cdklabs'; const PROJECT_NAME = 'generative-ai-cdk-constructs'; -const CDK_VERSION: string = '2.191.0'; +const CDK_VERSION: string = '2.206.0'; function camelCaseIt(input: string): string { // Hypens and dashes to spaces and then CamelCase... diff --git a/apidocs/@cdklabs/namespaces/bedrock/classes/Guardrail.md b/apidocs/@cdklabs/namespaces/bedrock/classes/Guardrail.md index d90375b4..d8c48a65 100644 --- a/apidocs/@cdklabs/namespaces/bedrock/classes/Guardrail.md +++ b/apidocs/@cdklabs/namespaces/bedrock/classes/Guardrail.md @@ -54,6 +54,18 @@ The content filters applied by the guardrail. *** +### contentFiltersTier? + +> `optional` **contentFiltersTier**: `string` + +The content filters tier of the guardrail. + +#### Overrides + +[`GuardrailBase`](GuardrailBase.md).[`contentFiltersTier`](GuardrailBase.md#contentfilterstier) + +*** + ### contextualGroundingFilters > `readonly` **contextualGroundingFilters**: [`ContextualGroundingFilter`](../interfaces/ContextualGroundingFilter.md)[] @@ -100,6 +112,18 @@ The ARN of the guardrail. *** +### guardrailCrossRegionProfile? + +> `optional` **guardrailCrossRegionProfile**: `string` + +The cross-region inference profile of the guardrail. + +#### Overrides + +[`GuardrailBase`](GuardrailBase.md).[`guardrailCrossRegionProfile`](GuardrailBase.md#guardrailcrossregionprofile) + +*** + ### guardrailId > `readonly` **guardrailId**: `string` @@ -251,6 +275,18 @@ The stack in which this resource is defined. *** +### topicFiltersTier? + +> `optional` **topicFiltersTier**: `string` + +The topics filters tier of the guardrail. + +#### Overrides + +[`GuardrailBase`](GuardrailBase.md).[`topicFiltersTier`](GuardrailBase.md#topicfilterstier) + +*** + ### wordFilters > `readonly` **wordFilters**: [`WordFilter`](../interfaces/WordFilter.md)[] @@ -508,6 +544,21 @@ The guardrail version. *** +### generateCrossRegionConfig() + +> **generateCrossRegionConfig**(): `undefined` \| `IResolvable` \| `GuardrailCrossRegionConfigProperty` + +Generates the cross-region configuration for the guardrail. +This method is a placeholder and should be implemented in subclasses if needed. + +#### Returns + +`undefined` \| `IResolvable` \| `GuardrailCrossRegionConfigProperty` + +The cross-region configuration or undefined if not applicable. + +*** + ### generatePhysicalName() > `protected` **generatePhysicalName**(): `string` diff --git a/apidocs/@cdklabs/namespaces/bedrock/classes/GuardrailBase.md b/apidocs/@cdklabs/namespaces/bedrock/classes/GuardrailBase.md index b1e6b04a..97d9f78b 100644 --- a/apidocs/@cdklabs/namespaces/bedrock/classes/GuardrailBase.md +++ b/apidocs/@cdklabs/namespaces/bedrock/classes/GuardrailBase.md @@ -51,6 +51,18 @@ Contains methods and attributes valid for Guardrails either created with CDK or ## Properties +### contentFiltersTier? + +> `abstract` `optional` **contentFiltersTier**: `string` + +The content filters tier of the guardrail. + +#### Implementation of + +[`IGuardrail`](../interfaces/IGuardrail.md).[`contentFiltersTier`](../interfaces/IGuardrail.md#contentfilterstier) + +*** + ### env > `readonly` **env**: `ResourceEnvironment` @@ -85,6 +97,18 @@ The ARN of the guardrail. *** +### guardrailCrossRegionProfile? + +> `abstract` `optional` **guardrailCrossRegionProfile**: `string` + +The cross-region inference profile of the guardrail. + +#### Implementation of + +[`IGuardrail`](../interfaces/IGuardrail.md).[`guardrailCrossRegionProfile`](../interfaces/IGuardrail.md#guardrailcrossregionprofile) + +*** + ### guardrailId > `abstract` `readonly` **guardrailId**: `string` @@ -182,6 +206,19 @@ The stack in which this resource is defined. `Resource.stack` +*** + +### topicFiltersTier? + +> `abstract` `optional` **topicFiltersTier**: `string` + +The topic filters tier for the guardrail. +If not set, defaults to "CLASSIC" + +#### Implementation of + +[`IGuardrail`](../interfaces/IGuardrail.md).[`topicFiltersTier`](../interfaces/IGuardrail.md#topicfilterstier) + ## Methods ### \_enableCrossEnvironment() diff --git a/apidocs/@cdklabs/namespaces/bedrock/interfaces/GuardrailProps.md b/apidocs/@cdklabs/namespaces/bedrock/interfaces/GuardrailProps.md index 4297be3f..0dfe50d5 100644 --- a/apidocs/@cdklabs/namespaces/bedrock/interfaces/GuardrailProps.md +++ b/apidocs/@cdklabs/namespaces/bedrock/interfaces/GuardrailProps.md @@ -47,6 +47,14 @@ Note, if one of *** +### contentFiltersTier? + +> `readonly` `optional` **contentFiltersTier**: `string` + +The content filter tier of the guardrail. + +*** + ### contextualGroundingFilters? > `readonly` `optional` **contextualGroundingFilters**: [`ContextualGroundingFilter`](ContextualGroundingFilter.md)[] @@ -71,6 +79,14 @@ The description of the guardrail. *** +### guardrailCrossRegionProfile? + +> `readonly` `optional` **guardrailCrossRegionProfile**: `string` + +The cross-region inference profile of the guardrail. + +*** + ### kmsKey? > `readonly` `optional` **kmsKey**: `IKey` @@ -117,6 +133,14 @@ The regular expression (regex) filters to apply to the guardrail. *** +### topicFiltersTier? + +> `readonly` `optional` **topicFiltersTier**: `string` + +The topic filters tier for the guardrail. + +*** + ### wordFilters? > `readonly` `optional` **wordFilters**: [`WordFilter`](WordFilter.md)[] diff --git a/apidocs/@cdklabs/namespaces/bedrock/interfaces/IGuardrail.md b/apidocs/@cdklabs/namespaces/bedrock/interfaces/IGuardrail.md index 8eae8bf5..05c161dc 100644 --- a/apidocs/@cdklabs/namespaces/bedrock/interfaces/IGuardrail.md +++ b/apidocs/@cdklabs/namespaces/bedrock/interfaces/IGuardrail.md @@ -14,6 +14,15 @@ Represents a Guardrail, either created with CDK or imported. ## Properties +### contentFiltersTier? + +> `optional` **contentFiltersTier**: `string` + +The content filters tier for the guardrail. +If not set, defaults to "CLASSIC" + +*** + ### env > `readonly` **env**: `ResourceEnvironment` @@ -48,6 +57,15 @@ The ARN of the guardrail. *** +### guardrailCrossRegionProfile? + +> `optional` **guardrailCrossRegionProfile**: `string` + +The cross-region profile for the guardrail. +Required if the detection mode is set to "CONTEXTUAL" + +*** + ### guardrailId > `readonly` **guardrailId**: `string` @@ -111,6 +129,15 @@ The stack in which this resource is defined. `IResource.stack` +*** + +### topicFiltersTier? + +> `optional` **topicFiltersTier**: `string` + +The topic filters tier for the guardrail. +If not set, defaults to "CLASSIC" + ## Methods ### applyRemovalPolicy() diff --git a/package.json b/package.json index a8ebaf7d..1a7c073f 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ }, "devDependencies": { "@aws-cdk/assert": "^2.68.0", - "@aws-cdk/integ-tests-alpha": "2.191.0-alpha.0", + "@aws-cdk/integ-tests-alpha": "2.206.0-alpha.0", "@commitlint/config-conventional": "^18.6.3", "@mrgrain/jsii-struct-builder": "^0.7.53", "@stylistic/eslint-plugin": "^2", @@ -103,7 +103,7 @@ "@typescript-eslint/eslint-plugin": "^8", "@typescript-eslint/parser": "^8", "aws-cdk": "^2", - "aws-cdk-lib": "2.191.0", + "aws-cdk-lib": "2.206.0", "aws-sdk-mock": "^5.9.0", "commit-and-tag-version": "^12", "commitlint": "^18.6.1", @@ -128,11 +128,11 @@ "typescript": "^5.8.3" }, "peerDependencies": { - "aws-cdk-lib": "^2.191.0", + "aws-cdk-lib": "^2.206.0", "constructs": "^10.3.0" }, "dependencies": { - "@aws-cdk/aws-lambda-python-alpha": "2.191.0-alpha.0", + "@aws-cdk/aws-lambda-python-alpha": "2.206.0-alpha.0", "cdk-nag": "^2.35.82", "deepmerge": "^4.3.1" }, @@ -224,5 +224,6 @@ "rootDir": "src" } }, - "//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\"." + "//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\".", + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/cdk-lib/bedrock/guardrails/README.md b/src/cdk-lib/bedrock/guardrails/README.md index 557e0c68..a25afa51 100644 --- a/src/cdk-lib/bedrock/guardrails/README.md +++ b/src/cdk-lib/bedrock/guardrails/README.md @@ -65,6 +65,9 @@ guardrail = bedrock.Guardrail(self, 'myGuardrails', | piiFilters | PIIFilter[] | No | The PII filters to apply to the guardrail | | regexFilters | RegexFilter[] | No | The regular expression (regex) filters to apply to the guardrail | | contextualGroundingFilters | ContextualGroundingFilter[] | No | The contextual grounding filters to apply to the guardrail | +| crossRegionConfig | string | No | ARN of the cross-region inference profile for the guardrail. Required if contentFiltersTier is set to "STANDARD". | +| contentFiltersTier | string | No | Content filters tier. Can be "CLASSIC" (default) or "STANDARD". | +| topicFiltersTier | string | No | Topic filters tier. Can be "CLASSIC" (default) or "STANDARD". | ## Filter Types diff --git a/src/cdk-lib/bedrock/guardrails/guardrails.ts b/src/cdk-lib/bedrock/guardrails/guardrails.ts index 123f6215..99aff0fa 100644 --- a/src/cdk-lib/bedrock/guardrails/guardrails.ts +++ b/src/cdk-lib/bedrock/guardrails/guardrails.ts @@ -11,7 +11,6 @@ * and limitations under the License. */ -import * as fs from 'fs'; import { Arn, ArnFormat, IResolvable, IResource, Lazy, Resource } from 'aws-cdk-lib'; import * as bedrock from 'aws-cdk-lib/aws-bedrock'; import { Metric, MetricOptions, MetricProps } from 'aws-cdk-lib/aws-cloudwatch'; @@ -19,6 +18,7 @@ import * as iam from 'aws-cdk-lib/aws-iam'; import { IKey, Key } from 'aws-cdk-lib/aws-kms'; import { md5hash } from 'aws-cdk-lib/core/lib/helpers-internal'; import { Construct } from 'constructs'; +import * as fs from 'fs'; import * as filters from './guardrail-filters'; /****************************************************************************** @@ -53,6 +53,21 @@ export interface IGuardrail extends IResource { * this will default to "DRAFT" */ guardrailVersion: string; + /** + * The cross-region profile for the guardrail. + * Required if the detection mode is set to "CONTEXTUAL" + */ + guardrailCrossRegionProfile?: string; + /** + * The content filters tier for the guardrail. + * If not set, defaults to "CLASSIC" + */ + contentFiltersTier?: string; + /** + * The topic filters tier for the guardrail. + * If not set, defaults to "CLASSIC" + */ + topicFiltersTier?: string; /** * Grant the given principal identity permissions to perform actions on this guardrail. @@ -164,6 +179,19 @@ export abstract class GuardrailBase extends Resource implements IGuardrail { * The ID of the guardrail. */ public abstract guardrailVersion: string; + /** + * The cross-region inference profile of the guardrail. + */ + public abstract guardrailCrossRegionProfile?: string; + /** + * The content filters tier of the guardrail. + */ + public abstract contentFiltersTier?: string; + /** + * The topic filters tier for the guardrail. + * If not set, defaults to "CLASSIC" + */ + public abstract topicFiltersTier?: string; /** * The KMS key of the guardrail if custom encryption is configured. */ @@ -335,6 +363,18 @@ export interface GuardrailProps { * The contextual grounding filters to apply to the guardrail. */ readonly contextualGroundingFilters?: filters.ContextualGroundingFilter[]; + /** + * The cross-region inference profile of the guardrail. + */ + readonly guardrailCrossRegionProfile?: string; + /** + * The content filter tier of the guardrail. + */ + readonly contentFiltersTier?: string; + /** + * The topic filters tier for the guardrail. + */ + readonly topicFiltersTier?: string; } /****************************************************************************** @@ -378,6 +418,9 @@ export class Guardrail extends GuardrailBase { public readonly guardrailVersion = attrs.guardrailVersion ?? 'DRAFT'; public readonly kmsKey = attrs.kmsKey; public readonly lastUpdated = undefined; + public readonly contentFiltersTier = 'CLASSIC'; + public readonly topicFiltersTier = 'CLASSIC'; + public readonly guardrailCrossRegionProfile?: string | undefined; } return new Import(scope, id); @@ -391,6 +434,28 @@ export class Guardrail extends GuardrailBase { public readonly guardrailArn = cfnGuardrail.attrGuardrailArn; public readonly guardrailId = cfnGuardrail.attrGuardrailId; public readonly guardrailVersion = cfnGuardrail.attrVersion; + public readonly contentFiltersTier = + typeof cfnGuardrail.contentPolicyConfig === 'object' && + cfnGuardrail.contentPolicyConfig !== null && + 'contentFiltersTierConfig' in cfnGuardrail.contentPolicyConfig && + cfnGuardrail.contentPolicyConfig.contentFiltersTierConfig && + typeof cfnGuardrail.contentPolicyConfig.contentFiltersTierConfig === 'object' && + 'tierName' in cfnGuardrail.contentPolicyConfig.contentFiltersTierConfig + ? (cfnGuardrail.contentPolicyConfig.contentFiltersTierConfig as bedrock.CfnGuardrail.ContentFiltersTierConfigProperty).tierName + : 'CLASSIC'; + public readonly topicFiltersTier = + typeof cfnGuardrail.topicPolicyConfig === 'object' && + cfnGuardrail.topicPolicyConfig !== null && + 'topicsTierConfig' in cfnGuardrail.topicPolicyConfig && + cfnGuardrail.topicPolicyConfig.topicsTierConfig && + typeof cfnGuardrail.topicPolicyConfig.topicsTierConfig === 'object' && + 'tierName' in cfnGuardrail.topicPolicyConfig.topicsTierConfig + ? (cfnGuardrail.topicPolicyConfig.topicsTierConfig as bedrock.CfnGuardrail.TopicsTierConfigProperty).tierName + : 'CLASSIC'; + public readonly guardrailCrossRegionProfile = + cfnGuardrail.crossRegionConfig && typeof cfnGuardrail.crossRegionConfig === 'object' && 'guardrailProfileArn' in cfnGuardrail.crossRegionConfig + ? (cfnGuardrail.crossRegionConfig as bedrock.CfnGuardrail.GuardrailCrossRegionConfigProperty).guardrailProfileArn + : undefined; public readonly kmsKey = cfnGuardrail.kmsKeyArn ? Key.fromKeyArn(this, '@FromCfnGuardrailKey', cfnGuardrail.kmsKeyArn) : undefined; @@ -461,6 +526,18 @@ export class Guardrail extends GuardrailBase { * The computed hash of the guardrail properties. */ public readonly hash: string; + /** + * The cross-region inference profile of the guardrail. + */ + public guardrailCrossRegionProfile?: string; + /** + * The content filters tier of the guardrail. + */ + public contentFiltersTier?: string; + /** + * The topics filters tier of the guardrail. + */ + public topicFiltersTier?: string; /** * The L1 representation of the guardrail */ @@ -482,6 +559,9 @@ export class Guardrail extends GuardrailBase { this.contextualGroundingFilters = props.contextualGroundingFilters ?? []; this.wordFilters = props.wordFilters ?? []; this.managedWordListFilters = props.managedWordListFilters ?? []; + this.guardrailCrossRegionProfile = props.guardrailCrossRegionProfile; + this.contentFiltersTier = props.contentFiltersTier; + this.topicFiltersTier = props.topicFiltersTier; const defaultBlockedInputMessaging = 'Sorry, your query violates our usage policy.'; const defaultBlockedOutputsMessaging = 'Sorry, I am unable to answer your question because of our usage policy.'; @@ -501,6 +581,7 @@ export class Guardrail extends GuardrailBase { topicPolicyConfig: this.generateCfnTopicPolicy(), wordPolicyConfig: this.generateCfnWordPolicyConfig(), sensitiveInformationPolicyConfig: this.generateCfnSensitiveInformationPolicyConfig(), + crossRegionConfig: this.generateCrossRegionConfig(), }; // Hash calculation useful for versioning of the guardrail @@ -520,6 +601,15 @@ export class Guardrail extends GuardrailBase { // ------------------------------------------------------ // METHODS // ------------------------------------------------------ + /** + * Generates the cross-region configuration for the guardrail. + * This method is a placeholder and should be implemented in subclasses if needed. + * @returns The cross-region configuration or undefined if not applicable. + */ + public generateCrossRegionConfig(): IResolvable | bedrock.CfnGuardrail.GuardrailCrossRegionConfigProperty | undefined { + return this.guardrailCrossRegionProfile ? { guardrailProfileArn: this.guardrailCrossRegionProfile } : undefined; + } + /** * Adds a content filter to the guardrail. * @param filter The content filter to add. @@ -616,7 +706,16 @@ export class Guardrail extends GuardrailBase { return Lazy.any({ produce: () => { if (this.contentFilters.length > 0) { - return { filtersConfig: this.contentFilters } as bedrock.CfnGuardrail.ContentPolicyConfigProperty; + let config = { filtersConfig: this.contentFilters } as bedrock.CfnGuardrail.ContentPolicyConfigProperty; + if (this.contentFiltersTier) { + config = { + ...config, + contentFiltersTierConfig: { + tierName: this.contentFiltersTier, + }, + } as bedrock.CfnGuardrail.ContentPolicyConfigProperty; + } + return config; } else { return undefined; } @@ -632,7 +731,7 @@ export class Guardrail extends GuardrailBase { return Lazy.any({ produce: () => { if (this.deniedTopics.length > 0) { - return { + let config = { topicsConfig: this.deniedTopics.flatMap((topic: filters.Topic) => { return { definition: topic.definition, @@ -640,8 +739,16 @@ export class Guardrail extends GuardrailBase { examples: topic.examples, type: 'DENY', } as bedrock.CfnGuardrail.TopicConfigProperty; - }), - }; + }) + } as bedrock.CfnGuardrail.TopicPolicyConfigProperty; + if (this.topicFiltersTier) + config = { + ...config, + topicsTierConfig: { + tierName: this.topicFiltersTier + } + } + return config; } else { return undefined; } diff --git a/test/cdk-lib/bedrock/guardrails.test.ts b/test/cdk-lib/bedrock/guardrails.test.ts index 34982c39..50416c90 100644 --- a/test/cdk-lib/bedrock/guardrails.test.ts +++ b/test/cdk-lib/bedrock/guardrails.test.ts @@ -567,6 +567,74 @@ describe('CDK-Created-Guardrail', () => { }); }); + test('All filters - Crossregion + tier', () => { + new bedrock.Guardrail(stack, 'TestGuardrail', { + name: 'TestGuardrail', + description: 'This is a test guardrail', + guardrailCrossRegionProfile: 'This is a test ARN', + contentFiltersTier: 'STANDARD', + topicFiltersTier: 'STANDARD', + contentFilters: [ + { + type: bedrock.ContentFilterType.MISCONDUCT, + inputStrength: bedrock.ContentFilterStrength.LOW, + outputStrength: bedrock.ContentFilterStrength.LOW, + }, + ], + contextualGroundingFilters: [ + { + type: bedrock.ContextualGroundingFilterType.GROUNDING, + threshold: 0.99, + }, + ], + piiFilters: [ + { + type: bedrock.PIIType.General.ADDRESS, + action: bedrock.GuardrailAction.ANONYMIZE, + }, + ], + regexFilters: [ + { + name: 'TestRegexFilter', + description: 'This is a test regex filter', + pattern: '/^[A-Z]{2}d{6}$/', + action: bedrock.GuardrailAction.ANONYMIZE, + }, + ], + wordFilters: [ + { + text: 'reggaeton', + }, + { + text: 'alcohol', + }, + ], + managedWordListFilters: [ + { + type: bedrock.ManagedWordFilterType.PROFANITY, + }, + ], + }); + + Template.fromStack(stack).hasResourceProperties('AWS::Bedrock::Guardrail', { + Name: 'TestGuardrail', + Description: 'This is a test guardrail', + CrossRegionConfig: { + GuardrailProfileArn: 'This is a test ARN', + }, + ContentPolicyConfig: { + ContentFiltersTierConfig: { + TierName: 'STANDARD', + }, + }, + TopicPolicyConfig: { + TopicsTierConfig: { + TierName: 'STANDARD' + } + } + }); + }); + test('All filters - Method', () => { const guardrail = new bedrock.Guardrail(stack, 'TestGuardrail', { name: 'TestGuardrail', diff --git a/yarn.lock b/yarn.lock index ebd46df9..1825866b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,20 +28,20 @@ dependencies: "@aws-cdk/cloudformation-diff" "2.68.0" -"@aws-cdk/asset-awscli-v1@^2.2.229": - version "2.2.233" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.233.tgz#2c5943463b14507d30bbf967b9cf2481848e6eaf" - integrity sha512-OH5ZN1F/0wwOUwzVUSvE0/syUOi44H9the6IG16anlSptfeQ1fvduJazZAKRuJLtautPbiqxllyOrtWh6LhX8A== +"@aws-cdk/asset-awscli-v1@2.2.242": + version "2.2.242" + resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.242.tgz#235cb25b6d1ad26975b0095c0d6ee84309adae5c" + integrity sha512-4c1bAy2ISzcdKXYS1k4HYZsNrgiwbiDzj36ybwFVxEWZXVAP0dimQTCaB9fxu7sWzEjw3d+eaw6Fon+QTfTIpQ== "@aws-cdk/asset-node-proxy-agent-v6@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz#6d3c7860354d4856a7e75375f2f0ecab313b4989" integrity sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A== -"@aws-cdk/aws-lambda-python-alpha@2.191.0-alpha.0": - version "2.191.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-python-alpha/-/aws-lambda-python-alpha-2.191.0-alpha.0.tgz#cf20e55966b02b8d62d9c6cc4516d2c31954461a" - integrity sha512-HEA2gnrv3dYzor6a73YDnco1xDB7cGzgHJojKO9vJTnE49aVLVqXUAIjP+IS79+PZjh3bS4xbbHd4JzAiQFoww== +"@aws-cdk/aws-lambda-python-alpha@2.206.0-alpha.0": + version "2.206.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda-python-alpha/-/aws-lambda-python-alpha-2.206.0-alpha.0.tgz#be1bbb2d0b37baeba98b8970a2e957a3c58519dd" + integrity sha512-ELR65l++JMZyi2BBAO49nUISKMXl2uRzXzGkVjxmPjYfvNFAQoYsGjvyVzF8KH3yjXs8zlxewyJOxKJrdcvVvA== "@aws-cdk/cfnspec@2.68.0": version "2.68.0" @@ -51,13 +51,13 @@ fs-extra "^9.1.0" md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@^41.0.0": - version "41.2.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-41.2.0.tgz#c1ef513e1cc0528dbc05948ae39d5631306af423" - integrity sha512-JaulVS6z9y5+u4jNmoWbHZRs9uGOnmn/ktXygNWKNu1k6lF3ad4so3s18eRu15XCbUIomxN9WPYT6Ehh7hzONw== +"@aws-cdk/cloud-assembly-schema@^45.0.0": + version "45.2.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-45.2.0.tgz#bd4bf1e16189a2d424b9ab503db48ca9732325b1" + integrity sha512-5TTUkGHQ+nfuUGwKA8/Yraxb+JdNUh4np24qk/VHXmrCMq+M6HfmGWfhcg/QlHA2S5P3YIamfYHdQAB4uSNLAg== dependencies: jsonschema "~1.4.1" - semver "^7.7.1" + semver "^7.7.2" "@aws-cdk/cloudformation-diff@2.68.0": version "2.68.0" @@ -71,10 +71,10 @@ string-width "^4.2.3" table "^6.8.1" -"@aws-cdk/integ-tests-alpha@2.191.0-alpha.0": - version "2.191.0-alpha.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/integ-tests-alpha/-/integ-tests-alpha-2.191.0-alpha.0.tgz#4c84e1c2e381fa47dfab29a4cdf208d64ed0eaf7" - integrity sha512-XAUTcXJ5uDE31+hKQv4olWwLjQsd4F/yo4ZB44Ei7JJHPe+aqjy417/JGsenSoENQ4Hso/E3vFl5C8RqXKqQhQ== +"@aws-cdk/integ-tests-alpha@2.206.0-alpha.0": + version "2.206.0-alpha.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/integ-tests-alpha/-/integ-tests-alpha-2.206.0-alpha.0.tgz#189c33bff1aa73b2c69c86360fd2eeeeaa77a3b0" + integrity sha512-/e2bd+vdSuNQzdeRiGxN3+kWS+zNAu5W7/08IkGm18yLM0G79rCD3FWNCfkAk0Q3nzokITch/z0kQklcDPGs2g== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.26.2": version "7.26.2" @@ -1658,14 +1658,14 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -aws-cdk-lib@2.191.0: - version "2.191.0" - resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.191.0.tgz#ebe042b45b66ecd972c23215461b4b2699a9f6b8" - integrity sha512-MrD937EsVCzT6ZvPr8u82TBVBYdcrvNSx/z8lZ8XvviFDgr6bA2yBWQ6CI+OqiPi/Z+OWizjkqYIb43Lovjixw== +aws-cdk-lib@2.206.0: + version "2.206.0" + resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.206.0.tgz#39da3b9147eeb9bb07df12cdca85ba9ef09d2f37" + integrity sha512-WQGSSzSX+CvIG3j4GICxCAARGaB2dbB2ZiAn8dqqWdUkF6G9pedlSd3bjB0NHOqrxJMu3jYQCYf3gLYTaJuR8A== dependencies: - "@aws-cdk/asset-awscli-v1" "^2.2.229" + "@aws-cdk/asset-awscli-v1" "2.2.242" "@aws-cdk/asset-node-proxy-agent-v6" "^2.1.0" - "@aws-cdk/cloud-assembly-schema" "^41.0.0" + "@aws-cdk/cloud-assembly-schema" "^45.0.0" "@balena/dockerignore" "^1.0.2" case "1.6.3" fs-extra "^11.3.0" @@ -1674,14 +1674,14 @@ aws-cdk-lib@2.191.0: mime-types "^2.1.35" minimatch "^3.1.2" punycode "^2.3.1" - semver "^7.7.1" + semver "^7.7.2" table "^6.9.0" yaml "1.10.2" aws-cdk@^2: - version "2.1012.0" - resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-2.1012.0.tgz#9771c991d5c9585c2128486343518ea94cec1677" - integrity sha512-C6jSWkqP0hkY2Cs300VJHjspmTXDTMfB813kwZvRbd/OsKBfTBJBbYU16VoLAp1LVEOnQMf8otSlaSgzVF0X9A== + version "2.1021.0" + resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-2.1021.0.tgz#2443f4580731216bd4c5439cf7421dab5a2444c3" + integrity sha512-kE557b4N9UFWax+7km3R6D56o4tGhpzOks/lRDugaoC8su3mocLCXJhb954b/IRl0ipnbZnY/Sftq+RQ/sxivg== optionalDependencies: fsevents "2.3.2" @@ -5559,6 +5559,11 @@ semver@^7.0.0, semver@^7.3.4, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semve resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== +semver@^7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"