From 22c06c8806c785a6b1e5023f85fb0201539f5b83 Mon Sep 17 00:00:00 2001 From: "Joakim L. Engeset" Date: Mon, 16 Mar 2026 12:49:45 +0100 Subject: [PATCH 1/7] feat: inline cross-region-params as CrossRegionParam construct Replace the @henrist/cdk-cross-region-params dependency with an internal CrossRegionParam construct. Only the functionality actually used by this project (ParameterResource + CrossRegionParameter) is included, consolidated into a single file with tests. --- src/cross-region-params.test.ts | 84 +++++++++++++++++++ src/cross-region-params.ts | 140 ++++++++++++++++++++++++++++++++ src/index.ts | 2 + src/lambdas.ts | 14 ++-- 4 files changed, 233 insertions(+), 7 deletions(-) create mode 100644 src/cross-region-params.test.ts create mode 100644 src/cross-region-params.ts diff --git a/src/cross-region-params.test.ts b/src/cross-region-params.test.ts new file mode 100644 index 00000000..6f120e25 --- /dev/null +++ b/src/cross-region-params.test.ts @@ -0,0 +1,84 @@ +import { App, Stack } from "aws-cdk-lib" +import { Template } from "aws-cdk-lib/assertions" +import { CrossRegionParam } from "./cross-region-params" + +function createParam(props: { + producerRegion: string + consumerRegion?: string + regions: string[] + nonce?: string +}) { + const app = new App() + const producerStack = new Stack(app, "ProducerStack", { + env: { account: "112233445566", region: props.producerRegion }, + }) + + const param = new CrossRegionParam(producerStack, "Param", { + parameterName: "/test/my-param", + resource: "my-resource-value", + resourceToReference: (r) => r, + referenceToResource: (_scope, _id, ref) => ref, + regions: props.regions, + nonce: props.nonce, + }) + + if (!props.consumerRegion) { + return { app, producerStack, param } + } + + const consumerStack = new Stack(app, "ConsumerStack", { + env: { account: "112233445566", region: props.consumerRegion }, + }) + const resolved = param.get(consumerStack, "Import") + + return { app, producerStack, consumerStack, param, resolved } +} + +test("creates SSM parameters in each target region", () => { + const { producerStack } = createParam({ + producerRegion: "us-east-1", + regions: ["eu-west-1", "ap-southeast-1"], + }) + + const template = Template.fromStack(producerStack) + + // Should have two custom resources for the two target regions + template.resourceCountIs("Custom::AWS", 2) +}) + +test("get returns resource directly when same region", () => { + const { resolved } = createParam({ + producerRegion: "us-east-1", + consumerRegion: "us-east-1", + regions: ["us-east-1"], + }) + + // Same region: returns the original string directly + expect(resolved).toBe("my-resource-value") +}) + +test("get resolves via SSM when cross-region", () => { + const { consumerStack } = createParam({ + producerRegion: "us-east-1", + consumerRegion: "eu-west-1", + regions: ["eu-west-1"], + nonce: "test-nonce", + }) + + const template = Template.fromStack(consumerStack) + + // Consumer stack should have a CfnParameter for the nonce + template.hasParameter("ImportNonce", { + Default: "test-nonce", + }) +}) + +test("get throws for unregistered region", () => { + expect(() => + createParam({ + producerRegion: "us-east-1", + consumerRegion: "ap-southeast-1", + regions: ["eu-west-1"], + }), + ).toThrow("Region ap-southeast-1 is not registered") +}) diff --git a/src/cross-region-params.ts b/src/cross-region-params.ts new file mode 100644 index 00000000..8ad215f1 --- /dev/null +++ b/src/cross-region-params.ts @@ -0,0 +1,140 @@ +import { CfnParameter, Stack } from "aws-cdk-lib" +import * as ssm from "aws-cdk-lib/aws-ssm" +import * as cr from "aws-cdk-lib/custom-resources" +import { Construct } from "constructs" + +export interface CrossRegionParamProps { + /** + * Nonce to force the stack to re-check for updated values. + * + * @default Date.now().toString() + */ + nonce?: string + /** + * SSM Parameter name used to store the reference. + */ + parameterName: string + /** + * The resource to make available cross-region. + */ + resource: T + /** + * Convert the resource to a string representation for storage in SSM. + */ + resourceToReference(resource: T): string + /** + * Reconstruct the resource from its stored string representation. + */ + referenceToResource(scope: Construct, id: string, reference: string): T + /** + * Regions where this reference should be available. + */ + regions: string[] +} + +/** + * Makes a CDK resource available in other AWS regions by storing a + * string reference in SSM Parameter Store. + * + * On the producer side (constructor), the resource's string representation + * is written to SSM in each target region via custom resources. + * + * On the consumer side (get), the reference is read back from SSM and + * used to reconstruct the resource. If producer and consumer are in the + * same region, the resource is returned directly without SSM. + */ +export class CrossRegionParam extends Construct { + private readonly nonce: string + private readonly parameterName: string + private readonly resource: T + private readonly referenceToResource: CrossRegionParamProps["referenceToResource"] + private readonly regions: string[] + + constructor(scope: Construct, id: string, props: CrossRegionParamProps) { + super(scope, id) + this.nonce = props.nonce ?? Date.now().toString() + this.parameterName = props.parameterName + this.resource = props.resource + this.referenceToResource = props.referenceToResource + this.regions = props.regions + + const value = props.resourceToReference(props.resource) + + for (const region of props.regions) { + this.putParameterInRegion(`Param${region}`, { + name: this.parameterName, + region, + value, + }) + } + } + + /** + * Retrieve the resource. Returns it directly when in the same region + * as the producer, otherwise resolves it from SSM Parameter Store. + */ + public get(scope: Construct, id: string): T { + const producerRegion = Stack.of(this).region + const consumerRegion = Stack.of(scope).region + + if (producerRegion === consumerRegion) { + return this.resource + } + + if (!this.regions.includes(consumerRegion)) { + throw new Error( + `Region ${consumerRegion} is not registered for parameter ${this.parameterName}`, + ) + } + + scope.node.addDependency(this) + + new CfnParameter(scope, `${id}Nonce`, { + default: this.nonce, + }) + + const reference = ssm.StringParameter.valueForStringParameter( + scope, + this.parameterName, + ) + return this.referenceToResource(scope, id, reference) + } + + /** + * Write an SSM Parameter to a specific region using a custom resource. + */ + private putParameterInRegion( + id: string, + props: { name: string; region: string; value: string }, + ) { + const physicalResourceId = cr.PhysicalResourceId.of(props.name) + + new cr.AwsCustomResource(this, id, { + onUpdate: { + service: "SSM", + action: "putParameter", + parameters: { + Name: props.name, + Value: props.value, + Type: "String", + Overwrite: true, + }, + region: props.region, + physicalResourceId, + }, + onDelete: { + service: "SSM", + action: "deleteParameter", + parameters: { + Name: props.name, + }, + region: props.region, + physicalResourceId, + }, + policy: cr.AwsCustomResourcePolicy.fromSdkCalls({ + resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE, + }), + installLatestAwsSdk: false, + }) + } +} diff --git a/src/index.ts b/src/index.ts index fc40fecc..9e4cdbdc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,2 +1,4 @@ export * from "./cloudfront-auth" +export * from "./cross-region-params" +export * from "./lambda-config/lambda-config" export * from "./lambdas" diff --git a/src/lambdas.ts b/src/lambdas.ts index 68af6c79..ca9ff4b6 100644 --- a/src/lambdas.ts +++ b/src/lambdas.ts @@ -1,10 +1,10 @@ import * as path from "node:path" import { fileURLToPath } from "node:url" -import { ParameterResource } from "@henrist/cdk-cross-region-params" import { Duration, Stack } from "aws-cdk-lib" import * as iam from "aws-cdk-lib/aws-iam" import * as lambda from "aws-cdk-lib/aws-lambda" import { Construct } from "constructs" +import { CrossRegionParam } from "./cross-region-params" const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) @@ -30,11 +30,11 @@ interface AuthLambdasProps { * distribution is deployed from, so that it can be used cross-region. */ export class AuthLambdas extends Construct { - public readonly checkAuthFn: ParameterResource - public readonly httpHeadersFn: ParameterResource - public readonly parseAuthFn: ParameterResource - public readonly refreshAuthFn: ParameterResource - public readonly signOutFn: ParameterResource + public readonly checkAuthFn: CrossRegionParam + public readonly httpHeadersFn: CrossRegionParam + public readonly parseAuthFn: CrossRegionParam + public readonly refreshAuthFn: CrossRegionParam + public readonly signOutFn: CrossRegionParam private readonly regions: string[] private readonly nonce: string | undefined @@ -99,7 +99,7 @@ export class AuthLambdas extends Construct { throw new Error("node.addr not found - ensure aws-cdk is up-to-update") } - return new ParameterResource(this, `${id}VersionParam`, { + return new CrossRegionParam(this, `${id}VersionParam`, { nonce: isSnapshot ? "snapshot" : undefined, parameterName: `/cf/region/${region}/stack/${stackName}/${this.node.addr}-${id}-function-arn`, referenceToResource: (scope, id, reference) => From d12ef1eb2bcf2deebab656cb60f560a5da3c4705 Mon Sep 17 00:00:00 2001 From: "Joakim L. Engeset" Date: Mon, 16 Mar 2026 12:51:05 +0100 Subject: [PATCH 2/7] feat: inline cdk-lambda-config as LambdaConfig construct Replace the @liflig/cdk-lambda-config dependency with an internal LambdaConfig construct and its custom resource handler. The handler code is kept verbatim from upstream. The build script now bundles both Lambda@Edge handlers and the lambda-config handler in parallel. --- build.ts | 81 ++++++++++++------- src/cloudfront-auth.ts | 2 +- src/lambda-config/handler.ts | 123 +++++++++++++++++++++++++++++ src/lambda-config/lambda-config.ts | 111 ++++++++++++++++++++++++++ tsconfig.json | 3 +- 5 files changed, 289 insertions(+), 31 deletions(-) create mode 100644 src/lambda-config/handler.ts create mode 100644 src/lambda-config/lambda-config.ts diff --git a/build.ts b/build.ts index 04c568bf..5a59afb7 100644 --- a/build.ts +++ b/build.ts @@ -1,37 +1,57 @@ -const entrypoints = [ - "src/handlers/check-auth.ts", - "src/handlers/generate-secret.ts", - "src/handlers/http-headers.ts", - "src/handlers/parse-auth.ts", - "src/handlers/refresh-auth.ts", - "src/handlers/sign-out.ts", -] +const [handlerResult, lambdaConfigResult] = await Promise.all([ + Bun.build({ + entrypoints: [ + "src/handlers/check-auth.ts", + "src/handlers/generate-secret.ts", + "src/handlers/http-headers.ts", + "src/handlers/parse-auth.ts", + "src/handlers/refresh-auth.ts", + "src/handlers/sign-out.ts", + ], + outdir: "dist", + target: "node", + format: "cjs", + minify: true, + naming: { + entry: "[dir]/[name]/index.js", + }, + loader: { + ".html": "text", + }, + }), + // Lambda-config custom resource handler (not Lambda@Edge, no size limit) + Bun.build({ + entrypoints: ["src/lambda-config/handler.ts"], + outdir: "dist/lambda-config-handler", + target: "node", + format: "cjs", + minify: true, + naming: { + entry: "index.js", + }, + external: ["@aws-sdk/*"], + }), +]) -const result = await Bun.build({ - entrypoints, - outdir: "dist", - target: "node", - format: "cjs", - minify: true, - naming: { - entry: "[dir]/[name]/index.js", - }, - loader: { - ".html": "text", - }, -}) - -if (!result.success) { - console.error("Build failed:") - for (const log of result.logs) { - console.error(log) +function assertBuildSuccess( + result: Awaited>, + label: string, +) { + if (!result.success) { + console.error(`${label} build failed:`) + for (const log of result.logs) { + console.error(log) + } + process.exit(1) } - process.exit(1) } +assertBuildSuccess(handlerResult, "Handler") +assertBuildSuccess(lambdaConfigResult, "Lambda config handler") + // Check bundle sizes (Lambda@Edge limit: 1MB for viewer request) const MAX_SIZE = 1048576 -for (const output of result.outputs) { +for (const output of handlerResult.outputs) { if (output.kind !== "entry-point") continue const size = output.size if (size > MAX_SIZE) { @@ -42,4 +62,7 @@ for (const output of result.outputs) { } } -console.log(`Built ${result.outputs.filter((o) => o.kind === "entry-point").length} bundles`) +const totalBuilt = + handlerResult.outputs.filter((o) => o.kind === "entry-point").length + + lambdaConfigResult.outputs.filter((o) => o.kind === "entry-point").length +console.log(`Built ${totalBuilt} bundles`) diff --git a/src/cloudfront-auth.ts b/src/cloudfront-auth.ts index 671fe986..0d78ea16 100644 --- a/src/cloudfront-auth.ts +++ b/src/cloudfront-auth.ts @@ -1,4 +1,3 @@ -import { LambdaConfig } from "@liflig/cdk-lambda-config" import * as cloudfront from "aws-cdk-lib/aws-cloudfront" import { type AddBehaviorOptions, @@ -14,6 +13,7 @@ import { RetrieveClientSecret } from "./client-secret" import { ClientUpdate } from "./client-update" import { GenerateSecret } from "./generate-secret" import type { StoredConfig } from "./handlers/util/config" +import { LambdaConfig } from "./lambda-config/lambda-config" import type { AuthLambdas } from "./lambdas" export interface CloudFrontAuthProps { diff --git a/src/lambda-config/handler.ts b/src/lambda-config/handler.ts new file mode 100644 index 00000000..78483464 --- /dev/null +++ b/src/lambda-config/handler.ts @@ -0,0 +1,123 @@ +import { mkdtempSync, writeFileSync } from "node:fs" +import { resolve } from "node:path" +import { + GetFunctionCommand, + GetFunctionConfigurationCommand, + LambdaClient, + UpdateFunctionCodeCommand, +} from "@aws-sdk/client-lambda" +import Zip from "adm-zip" +import axios from "axios" + +type OnEventHandler = (event: { + RequestType: "Create" | "Update" | "Delete" + PhysicalResourceId?: string + ResourceProperties: Record +}) => Promise<{ + PhysicalResourceId?: string + Data?: Record +}> + +type Config = Record + +export const handler: OnEventHandler = async (event) => { + switch (event.RequestType) { + case "Delete": + return { + PhysicalResourceId: event.PhysicalResourceId, + } + + case "Create": + case "Update": { + console.log(JSON.stringify(event)) + + const functionArnFull = event.ResourceProperties.FunctionArn as string + const config = event.ResourceProperties.Config as Config + + const functionArn = withoutVersion(functionArnFull) + console.log(`Modifying function '${functionArnFull}'`) + + const lambdaClient = new LambdaClient({ + region: getFunctionRegion(functionArn), + }) + + const { Code } = await lambdaClient.send( + new GetFunctionCommand({ + FunctionName: functionArn, + }), + ) + const { data } = await axios.get(Code?.Location ?? "", { + responseType: "arraybuffer", + }) + + const { CodeSha256, Version, FunctionArn } = await lambdaClient.send( + new UpdateFunctionCodeCommand({ + FunctionName: functionArn, + ZipFile: addConfigToZip(data, config), + Publish: true, + }), + ) + + let attempts = 0 + while (++attempts <= 30) { + const { State } = await lambdaClient.send( + new GetFunctionConfigurationCommand({ + FunctionName: FunctionArn, + }), + ) + + if (!State || State === "Pending") { + console.log( + `Waiting for updated Lambda function to become Active, is: ${State} (attempts: ${attempts})`, + ) + await new Promise((resolve) => + setTimeout(resolve, Math.min(5000, 1000 * attempts)), + ) + continue + } + if (State === "Active") { + console.log("Function is now Active!") + break + } + throw new Error(`Lambda function state is: ${State}`) + } + + console.log("Updated function", { CodeSha256, Version, FunctionArn }) + + return { + PhysicalResourceId: functionArn, + Data: { CodeSha256, Version, FunctionArn }, + } + } + } +} + +function getFunctionRegion(arn: string): string { + const match = /^arn:aws:lambda:([^:]+):/.exec(arn) + if (!match) { + throw new Error(`Could not extract region from '${arn}'`) + } + return match[1] +} + +function withoutVersion(arn: string): string { + const match = /^(arn:aws:lambda:[^:]+:[^:]+:function:[^:]+):[^:]+$/.exec(arn) + if (!match) { + return arn + } + return match[1] +} + +function addConfigToZip(data: Buffer, config: Config): Buffer { + const lambdaZip = new Zip(data) + const tempDir = mkdtempSync("/tmp/lambda-package") + lambdaZip.extractAllTo(tempDir, true) + writeFileSync( + resolve(tempDir, "config.json"), + Buffer.from(JSON.stringify(config, null, 2)), + ) + + const newLambdaZip = new Zip() + newLambdaZip.addLocalFolder(tempDir) + return newLambdaZip.toBuffer() +} diff --git a/src/lambda-config/lambda-config.ts b/src/lambda-config/lambda-config.ts new file mode 100644 index 00000000..013ce8e2 --- /dev/null +++ b/src/lambda-config/lambda-config.ts @@ -0,0 +1,111 @@ +import * as path from "node:path" +import { fileURLToPath } from "node:url" +import { + CustomResource, + custom_resources as cr, + Duration, + aws_iam as iam, + aws_lambda as lambda, + Stack, +} from "aws-cdk-lib" +import { Construct } from "constructs" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +export interface LambdaConfigProps { + /** + * The Lambda Function to be updated. + * + * If this points to a specific version, the version qualifier + * will be ignored, but will be used for invalidation instead + * of providing a separate nonce value. + * + * A Lambda Function can only receive a new version based on + * the latest version. + */ + function: lambda.IFunction + /** + * The configuration to be added to the Lambda Function. Must be + * a valid JSON structure and cannot contain null values since it + * is not supported by CloudFormation custom resource properties. + */ + config: Record + /** + * Nonce to force new version. + * + * If the function provided does not point to a specific + * version, specify nonce to ensure the function is updated + * after every change. + */ + nonce?: string +} + +/** + * Modify a Lambda Function by adding a config.json file using + * the provided object, and provide a new version for the + * Lambda Function. + */ +export class LambdaConfig extends Construct { + public readonly version: lambda.IVersion + + constructor(scope: Construct, id: string, props: LambdaConfigProps) { + super(scope, id) + + const updateCodeResource = new CustomResource(this, "Resource", { + serviceToken: LambdaConfigProvider.getOrCreate(this).serviceToken, + properties: { + FunctionArn: props.function.functionArn, + Config: props.config, + Nonce: props.nonce ?? "", + }, + }) + + this.version = lambda.Version.fromVersionArn( + this, + "Version", + updateCodeResource.getAttString("FunctionArn"), + ) + } +} + +class LambdaConfigProvider extends Construct { + public static getOrCreate(scope: Construct) { + const stack = Stack.of(scope) + const id = "liflig-infra.lambda-config.provider" + return ( + (stack.node.tryFindChild(id) as LambdaConfigProvider) || + new LambdaConfigProvider(stack, id) + ) + } + + private readonly provider: cr.Provider + public readonly serviceToken: string + + constructor(scope: Construct, id: string) { + super(scope, id) + + this.provider = new cr.Provider(this, "Provider", { + onEventHandler: new lambda.Function(this, "UpdateCodeFn", { + code: lambda.Code.fromAsset( + path.join(__dirname, "../../dist/lambda-config-handler"), + ), + handler: "index.handler", + runtime: lambda.Runtime.NODEJS_24_X, + timeout: Duration.minutes(2), + initialPolicy: [ + new iam.PolicyStatement({ + actions: [ + "lambda:GetFunction", + "lambda:GetFunctionConfiguration", + "lambda:UpdateFunctionCode", + ], + resources: ["*"], + }), + ], + }), + }) + + this.serviceToken = this.provider.serviceToken + } +} diff --git a/tsconfig.json b/tsconfig.json index 1967452f..e9ceb314 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,6 +5,7 @@ ], "exclude": [ "src/**/*.test.ts", - "src/handlers/*.ts" + "src/handlers/*.ts", + "src/lambda-config/handler.ts" ] } From eb01946540582d78cce2e0eb7fd6a4d2c95bfa75 Mon Sep 17 00:00:00 2001 From: "Joakim L. Engeset" Date: Mon, 16 Mar 2026 12:51:21 +0100 Subject: [PATCH 3/7] chore: remove external deps, add handler build dependencies Remove @henrist/cdk-cross-region-params and @liflig/cdk-lambda-config from dependencies. Add adm-zip, @types/adm-zip, and @aws-sdk/client-lambda as devDependencies for bundling the lambda-config handler. --- bun.lock | 187 ++++++++++++++++++++++++++++++++++++++++++++++++--- bunfig.toml | 1 - package.json | 8 +-- 3 files changed, 183 insertions(+), 13 deletions(-) diff --git a/bun.lock b/bun.lock index 74b3fa9d..41d1be1e 100644 --- a/bun.lock +++ b/bun.lock @@ -4,18 +4,17 @@ "workspaces": { "": { "name": "@liflig/cdk-cloudfront-auth", - "dependencies": { - "@henrist/cdk-cross-region-params": "^2.0.1", - "@liflig/cdk-lambda-config": "1.7.36", - }, "devDependencies": { + "@aws-sdk/client-lambda": "^3.1005.0", "@biomejs/biome": "2.4.6", "@commitlint/cli": "20.4.4", "@commitlint/config-conventional": "20.4.4", + "@types/adm-zip": "^0.5.7", "@types/aws-lambda": "8.10.161", "@types/jest": "30.0.0", "@types/jsonwebtoken": "9.0.10", "@types/node": "24.12.0", + "adm-zip": "^0.5.16", "aws-cdk-lib": "2.243.0", "axios": "1.13.6", "constructs": "10.5.1", @@ -54,6 +53,64 @@ "@aws-cdk/cloud-assembly-schema": ["@aws-cdk/cloud-assembly-schema@52.2.0", "", { "dependencies": { "jsonschema": "~1.4.1", "semver": "^7.7.3" } }, "sha512-ourZjixQ/UfsZc7gdk3vt1eHBODMUjQTYYYCY3ZX8fiXyHtWNDAYZPrXUK96jpCC2fLP+tfHTJrBjZ563pmcEw=="], + "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], + + "@aws-crypto/sha256-browser": ["@aws-crypto/sha256-browser@5.2.0", "", { "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw=="], + + "@aws-crypto/sha256-js": ["@aws-crypto/sha256-js@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA=="], + + "@aws-crypto/supports-web-crypto": ["@aws-crypto/supports-web-crypto@5.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg=="], + + "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], + + "@aws-sdk/client-lambda": ["@aws-sdk/client-lambda@3.1005.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.19", "@aws-sdk/credential-provider-node": "^3.972.19", "@aws-sdk/middleware-host-header": "^3.972.7", "@aws-sdk/middleware-logger": "^3.972.7", "@aws-sdk/middleware-recursion-detection": "^3.972.7", "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/region-config-resolver": "^3.972.7", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@aws-sdk/util-user-agent-browser": "^3.972.7", "@aws-sdk/util-user-agent-node": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/core": "^3.23.9", "@smithy/eventstream-serde-browser": "^4.2.11", "@smithy/eventstream-serde-config-resolver": "^4.3.11", "@smithy/eventstream-serde-node": "^4.2.11", "@smithy/fetch-http-handler": "^5.3.13", "@smithy/hash-node": "^4.2.11", "@smithy/invalid-dependency": "^4.2.11", "@smithy/middleware-content-length": "^4.2.11", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-retry": "^4.4.40", "@smithy/middleware-serde": "^4.2.12", "@smithy/middleware-stack": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/node-http-handler": "^4.4.14", "@smithy/protocol-http": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.39", "@smithy/util-defaults-mode-node": "^4.2.42", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/util-stream": "^4.5.17", "@smithy/util-utf8": "^4.2.2", "@smithy/util-waiter": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-Wwef/fjArT5h+nEiW+rvhh15xT+6Lx3boZPFz+P5RA3quAyeSEKWx5aSOrRin59tINidRuy1lwhGPLCS4c4DHA=="], + + "@aws-sdk/core": ["@aws-sdk/core@3.973.19", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws-sdk/xml-builder": "^3.972.10", "@smithy/core": "^3.23.9", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/signature-v4": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ=="], + + "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.17", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-MBAMW6YELzE1SdkOniqr51mrjapQUv8JXSGxtwRjQV0mwVDutVsn22OPAUt4RcLRvdiHQmNBDEFP9iTeSVCOlA=="], + + "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.19", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@smithy/fetch-http-handler": "^5.3.13", "@smithy/node-http-handler": "^4.4.14", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.17", "tslib": "^2.6.2" } }, "sha512-9EJROO8LXll5a7eUFqu48k6BChrtokbmgeMWmsH7lBb6lVbtjslUYz/ShLi+SHkYzTomiGBhmzTW7y+H4BxsnA=="], + + "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.972.18", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/credential-provider-env": "^3.972.17", "@aws-sdk/credential-provider-http": "^3.972.19", "@aws-sdk/credential-provider-login": "^3.972.18", "@aws-sdk/credential-provider-process": "^3.972.17", "@aws-sdk/credential-provider-sso": "^3.972.18", "@aws-sdk/credential-provider-web-identity": "^3.972.18", "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/types": "^3.973.5", "@smithy/credential-provider-imds": "^4.2.11", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-vthIAXJISZnj2576HeyLBj4WTeX+I7PwWeRkbOa0mVX39K13SCGxCgOFuKj2ytm9qTlLOmXe4cdEnroteFtJfw=="], + + "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.18", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-kINzc5BBxdYBkPZ0/i1AMPMOk5b5QaFNbYMElVw5QTX13AKj6jcxnv/YNl9oW9mg+Y08ti19hh01HhyEAxsSJQ=="], + + "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.19", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.17", "@aws-sdk/credential-provider-http": "^3.972.19", "@aws-sdk/credential-provider-ini": "^3.972.18", "@aws-sdk/credential-provider-process": "^3.972.17", "@aws-sdk/credential-provider-sso": "^3.972.18", "@aws-sdk/credential-provider-web-identity": "^3.972.18", "@aws-sdk/types": "^3.973.5", "@smithy/credential-provider-imds": "^4.2.11", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-yDWQ9dFTr+IMxwanFe7+tbN5++q8psZBjlUwOiCXn1EzANoBgtqBwcpYcHaMGtn0Wlfj4NuXdf2JaEx1lz5RaQ=="], + + "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.17", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-c8G8wT1axpJDgaP3xzcy+q8Y1fTi9A2eIQJvyhQ9xuXrUZhlCfXbC0vM9bM1CUXiZppFQ1p7g0tuUMvil/gCPg=="], + + "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.972.18", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/token-providers": "3.1005.0", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-YHYEfj5S2aqInRt5ub8nDOX8vAxgMvd84wm2Y3WVNfFa/53vOv9T7WOAqXI25qjj3uEcV46xxfqdDQk04h5XQA=="], + + "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.18", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-OqlEQpJ+J3T5B96qtC1zLLwkBloechP+fezKbCH0sbd2cCc0Ra55XpxWpk/hRj69xAOYtHvoC4orx6eTa4zU7g=="], + + "@aws-sdk/middleware-host-header": ["@aws-sdk/middleware-host-header@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ=="], + + "@aws-sdk/middleware-logger": ["@aws-sdk/middleware-logger@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w=="], + + "@aws-sdk/middleware-recursion-detection": ["@aws-sdk/middleware-recursion-detection@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ=="], + + "@aws-sdk/middleware-user-agent": ["@aws-sdk/middleware-user-agent@3.972.20", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@smithy/core": "^3.23.9", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-retry": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA=="], + + "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.996.8", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.973.19", "@aws-sdk/middleware-host-header": "^3.972.7", "@aws-sdk/middleware-logger": "^3.972.7", "@aws-sdk/middleware-recursion-detection": "^3.972.7", "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/region-config-resolver": "^3.972.7", "@aws-sdk/types": "^3.973.5", "@aws-sdk/util-endpoints": "^3.996.4", "@aws-sdk/util-user-agent-browser": "^3.972.7", "@aws-sdk/util-user-agent-node": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/core": "^3.23.9", "@smithy/fetch-http-handler": "^5.3.13", "@smithy/hash-node": "^4.2.11", "@smithy/invalid-dependency": "^4.2.11", "@smithy/middleware-content-length": "^4.2.11", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-retry": "^4.4.40", "@smithy/middleware-serde": "^4.2.12", "@smithy/middleware-stack": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/node-http-handler": "^4.4.14", "@smithy/protocol-http": "^5.3.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", "@smithy/util-defaults-mode-browser": "^4.3.39", "@smithy/util-defaults-mode-node": "^4.2.42", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-6HlLm8ciMW8VzfB80kfIx16PBA9lOa9Dl+dmCBi78JDhvGlx3I7Rorwi5PpVRkL31RprXnYna3yBf6UKkD/PqA=="], + + "@aws-sdk/region-config-resolver": ["@aws-sdk/region-config-resolver@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/config-resolver": "^4.4.10", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA=="], + + "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1005.0", "", { "dependencies": { "@aws-sdk/core": "^3.973.19", "@aws-sdk/nested-clients": "^3.996.8", "@aws-sdk/types": "^3.973.5", "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-vMxd+ivKqSxU9bHx5vmAlFKDAkjGotFU56IOkDa5DaTu1WWwbcse0yFHEm9I537oVvodaiwMl3VBwgHfzQ2rvw=="], + + "@aws-sdk/types": ["@aws-sdk/types@3.973.5", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ=="], + + "@aws-sdk/util-endpoints": ["@aws-sdk/util-endpoints@3.996.4", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-endpoints": "^3.3.2", "tslib": "^2.6.2" } }, "sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA=="], + + "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.965.5", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ=="], + + "@aws-sdk/util-user-agent-browser": ["@aws-sdk/util-user-agent-browser@3.972.7", "", { "dependencies": { "@aws-sdk/types": "^3.973.5", "@smithy/types": "^4.13.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw=="], + + "@aws-sdk/util-user-agent-node": ["@aws-sdk/util-user-agent-node@3.973.5", "", { "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.20", "@aws-sdk/types": "^3.973.5", "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" }, "peerDependencies": { "aws-crt": ">=1.0.0" }, "optionalPeers": ["aws-crt"] }, "sha512-Dyy38O4GeMk7UQ48RupfHif//gqnOPbq/zlvRssc11E2mClT+aUfc3VS2yD8oLtzqO3RsqQ9I3gOBB4/+HjPOw=="], + + "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.10", "", { "dependencies": { "@smithy/types": "^4.13.0", "fast-xml-parser": "5.4.1", "tslib": "^2.6.2" } }, "sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA=="], + + "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.2.3", "", {}, "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw=="], + "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], "@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], @@ -188,8 +245,6 @@ "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], - "@henrist/cdk-cross-region-params": ["@henrist/cdk-cross-region-params@2.0.1", "", { "peerDependencies": { "aws-cdk-lib": "^2.0.0" } }, "sha512-JHrX+FmzzZ42nciTqCJMImqpr9+yFjXBjMeQBJOWqxK0CB72aLzVoU7aAa55pWUWa8ewlExTIQYjXDWdtc2kAQ=="], - "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], "@istanbuljs/load-nyc-config": ["@istanbuljs/load-nyc-config@1.1.0", "", { "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" } }, "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ=="], @@ -242,8 +297,6 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@liflig/cdk-lambda-config": ["@liflig/cdk-lambda-config@1.7.36", "", { "peerDependencies": { "aws-cdk-lib": "^2.0.0", "constructs": "^10.0.0" } }, "sha512-1uKgLsOGVy7h50FIWLhfhjRqXESgcNzTUbsuZCt0FYH+qbKFFp10IL3E7BE44QCYp9yIsWJJNsD8lMgraOxziQ=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], @@ -304,8 +357,102 @@ "@sinonjs/fake-timers": ["@sinonjs/fake-timers@15.1.1", "", { "dependencies": { "@sinonjs/commons": "^3.0.1" } }, "sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw=="], + "@smithy/abort-controller": ["@smithy/abort-controller@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-Hj4WoYWMJnSpM6/kchsm4bUNTL9XiSyhvoMb2KIq4VJzyDt7JpGHUZHkVNPZVC7YE1tf8tPeVauxpFBKGW4/KQ=="], + + "@smithy/config-resolver": ["@smithy/config-resolver@4.4.10", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "@smithy/util-config-provider": "^4.2.2", "@smithy/util-endpoints": "^3.3.2", "@smithy/util-middleware": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-IRTkd6ps0ru+lTWnfnsbXzW80A8Od8p3pYiZnW98K2Hb20rqfsX7VTlfUwhrcOeSSy68Gn9WBofwPuw3e5CCsg=="], + + "@smithy/core": ["@smithy/core@3.23.9", "", { "dependencies": { "@smithy/middleware-serde": "^4.2.12", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-stream": "^4.5.17", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-1Vcut4LEL9HZsdpI0vFiRYIsaoPwZLjAxnVQDUMQK8beMS+EYPLDQCXtbzfxmM5GzSgjfe2Q9M7WaXwIMQllyQ=="], + + "@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.2.11", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g=="], + + "@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.11", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-Sf39Ml0iVX+ba/bgMPxaXWAAFmHqYLTmbjAPfLPLY8CrYkRDEqZdUsKC1OwVMCdJXfAt0v4j49GIJ8DoSYAe6w=="], + + "@smithy/eventstream-serde-browser": ["@smithy/eventstream-serde-browser@4.2.11", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-3rEpo3G6f/nRS7fQDsZmxw/ius6rnlIpz4UX6FlALEzz8JoSxFmdBt0SZnthis+km7sQo6q5/3e+UJcuQivoXA=="], + + "@smithy/eventstream-serde-config-resolver": ["@smithy/eventstream-serde-config-resolver@4.3.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-XeNIA8tcP/GDWnnKkO7qEm/bg0B/bP9lvIXZBXcGZwZ+VYM8h8k9wuDvUODtdQ2Wcp2RcBkPTCSMmaniVHrMlA=="], + + "@smithy/eventstream-serde-node": ["@smithy/eventstream-serde-node@4.2.11", "", { "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-fzbCh18rscBDTQSCrsp1fGcclLNF//nJyhjldsEl/5wCYmgpHblv5JSppQAyQI24lClsFT0wV06N1Porn0IsEw=="], + + "@smithy/eventstream-serde-universal": ["@smithy/eventstream-serde-universal@4.2.11", "", { "dependencies": { "@smithy/eventstream-codec": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-MJ7HcI+jEkqoWT5vp+uoVaAjBrmxBtKhZTeynDRG/seEjJfqyg3SiqMMqyPnAMzmIfLaeJ/uiuSDP/l9AnMy/Q=="], + + "@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.3.13", "", { "dependencies": { "@smithy/protocol-http": "^5.3.11", "@smithy/querystring-builder": "^4.2.11", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "sha512-U2Hcfl2s3XaYjikN9cT4mPu8ybDbImV3baXR0PkVlC0TTx808bRP3FaPGAzPtB8OByI+JqJ1kyS+7GEgae7+qQ=="], + + "@smithy/hash-node": ["@smithy/hash-node@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-T+p1pNynRkydpdL015ruIoyPSRw9e/SQOWmSAMmmprfswMrd5Ow5igOWNVlvyVFZlxXqGmyH3NQwfwy8r5Jx0A=="], + + "@smithy/invalid-dependency": ["@smithy/invalid-dependency@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-cGNMrgykRmddrNhYy1yBdrp5GwIgEkniS7k9O1VLB38yxQtlvrxpZtUVvo6T4cKpeZsriukBuuxfJcdZQc/f/g=="], + + "@smithy/is-array-buffer": ["@smithy/is-array-buffer@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow=="], + + "@smithy/middleware-content-length": ["@smithy/middleware-content-length@4.2.11", "", { "dependencies": { "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-UvIfKYAKhCzr4p6jFevPlKhQwyQwlJ6IeKLDhmV1PlYfcW3RL4ROjNEDtSik4NYMi9kDkH7eSwyTP3vNJ/u/Dw=="], + + "@smithy/middleware-endpoint": ["@smithy/middleware-endpoint@4.4.23", "", { "dependencies": { "@smithy/core": "^3.23.9", "@smithy/middleware-serde": "^4.2.12", "@smithy/node-config-provider": "^4.3.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "@smithy/url-parser": "^4.2.11", "@smithy/util-middleware": "^4.2.11", "tslib": "^2.6.2" } }, "sha512-UEFIejZy54T1EJn2aWJ45voB7RP2T+IRzUqocIdM6GFFa5ClZncakYJfcYnoXt3UsQrZZ9ZRauGm77l9UCbBLw=="], + + "@smithy/middleware-retry": ["@smithy/middleware-retry@4.4.40", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/protocol-http": "^5.3.11", "@smithy/service-error-classification": "^4.2.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "@smithy/util-middleware": "^4.2.11", "@smithy/util-retry": "^4.2.11", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "sha512-YhEMakG1Ae57FajERdHNZ4ShOPIY7DsgV+ZoAxo/5BT0KIe+f6DDU2rtIymNNFIj22NJfeeI6LWIifrwM0f+rA=="], + + "@smithy/middleware-serde": ["@smithy/middleware-serde@4.2.12", "", { "dependencies": { "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-W9g1bOLui7Xn5FABRVS0o3rXL0gfN37d/8I/W7i0N7oxjx9QecUmXEMSUMADTODwdtka9cN43t5BI2CodLJpng=="], + + "@smithy/middleware-stack": ["@smithy/middleware-stack@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-s+eenEPW6RgliDk2IhjD2hWOxIx1NKrOHxEwNUaUXxYBxIyCcDfNULZ2Mu15E3kwcJWBedTET/kEASPV1A1Akg=="], + + "@smithy/node-config-provider": ["@smithy/node-config-provider@4.3.11", "", { "dependencies": { "@smithy/property-provider": "^4.2.11", "@smithy/shared-ini-file-loader": "^4.4.6", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-xD17eE7kaLgBBGf5CZQ58hh2YmwK1Z0O8YhffwB/De2jsL0U3JklmhVYJ9Uf37OtUDLF2gsW40Xwwag9U869Gg=="], + + "@smithy/node-http-handler": ["@smithy/node-http-handler@4.4.14", "", { "dependencies": { "@smithy/abort-controller": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/querystring-builder": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-DamSqaU8nuk0xTJDrYnRzZndHwwRnyj/n/+RqGGCcBKB4qrQem0mSDiWdupaNWdwxzyMU91qxDmHOCazfhtO3A=="], + + "@smithy/property-provider": ["@smithy/property-provider@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-14T1V64o6/ndyrnl1ze1ZhyLzIeYNN47oF/QU6P5m82AEtyOkMJTb0gO1dPubYjyyKuPD6OSVMPDKe+zioOnCg=="], + + "@smithy/protocol-http": ["@smithy/protocol-http@5.3.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-hI+barOVDJBkNt4y0L2mu3Ugc0w7+BpJ2CZuLwXtSltGAAwCb3IvnalGlbDV/UCS6a9ZuT3+exd1WxNdLb5IlQ=="], + + "@smithy/querystring-builder": ["@smithy/querystring-builder@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-7spdikrYiljpket6u0up2Ck2mxhy7dZ0+TDd+S53Dg2DHd6wg+YNJrTCHiLdgZmEXZKI7LJZcwL3721ZRDFiqA=="], + + "@smithy/querystring-parser": ["@smithy/querystring-parser@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-nE3IRNjDltvGcoThD2abTozI1dkSy8aX+a2N1Rs55en5UsdyyIXgGEmevUL3okZFoJC77JgRGe99xYohhsjivQ=="], + + "@smithy/service-error-classification": ["@smithy/service-error-classification@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0" } }, "sha512-HkMFJZJUhzU3HvND1+Yw/kYWXp4RPDLBWLcK1n+Vqw8xn4y2YiBhdww8IxhkQjP/QlZun5bwm3vcHc8AqIU3zw=="], + + "@smithy/shared-ini-file-loader": ["@smithy/shared-ini-file-loader@4.4.6", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-IB/M5I8G0EeXZTHsAxpx51tMQ5R719F3aq+fjEB6VtNcCHDc0ajFDIGDZw+FW9GxtEkgTduiPpjveJdA/CX7sw=="], + + "@smithy/signature-v4": ["@smithy/signature-v4@5.3.11", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-middleware": "^4.2.11", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-V1L6N9aKOBAN4wEHLyqjLBnAz13mtILU0SeDrjOaIZEeN6IFa6DxwRt1NNpOdmSpQUfkBj0qeD3m6P77uzMhgQ=="], + + "@smithy/smithy-client": ["@smithy/smithy-client@4.12.3", "", { "dependencies": { "@smithy/core": "^3.23.9", "@smithy/middleware-endpoint": "^4.4.23", "@smithy/middleware-stack": "^4.2.11", "@smithy/protocol-http": "^5.3.11", "@smithy/types": "^4.13.0", "@smithy/util-stream": "^4.5.17", "tslib": "^2.6.2" } }, "sha512-7k4UxjSpHmPN2AxVhvIazRSzFQjWnud3sOsXcFStzagww17j1cFQYqTSiQ8xuYK3vKLR1Ni8FzuT3VlKr3xCNw=="], + + "@smithy/types": ["@smithy/types@4.13.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw=="], + + "@smithy/url-parser": ["@smithy/url-parser@4.2.11", "", { "dependencies": { "@smithy/querystring-parser": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-oTAGGHo8ZYc5VZsBREzuf5lf2pAurJQsccMusVZ85wDkX66ojEc/XauiGjzCj50A61ObFTPe6d7Pyt6UBYaing=="], + + "@smithy/util-base64": ["@smithy/util-base64@4.3.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ=="], + + "@smithy/util-body-length-browser": ["@smithy/util-body-length-browser@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ=="], + + "@smithy/util-body-length-node": ["@smithy/util-body-length-node@4.2.3", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g=="], + + "@smithy/util-buffer-from": ["@smithy/util-buffer-from@4.2.2", "", { "dependencies": { "@smithy/is-array-buffer": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q=="], + + "@smithy/util-config-provider": ["@smithy/util-config-provider@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ=="], + + "@smithy/util-defaults-mode-browser": ["@smithy/util-defaults-mode-browser@4.3.39", "", { "dependencies": { "@smithy/property-provider": "^4.2.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-ui7/Ho/+VHqS7Km2wBw4/Ab4RktoiSshgcgpJzC4keFPs6tLJS4IQwbeahxQS3E/w98uq6E1mirCH/id9xIXeQ=="], + + "@smithy/util-defaults-mode-node": ["@smithy/util-defaults-mode-node@4.2.42", "", { "dependencies": { "@smithy/config-resolver": "^4.4.10", "@smithy/credential-provider-imds": "^4.2.11", "@smithy/node-config-provider": "^4.3.11", "@smithy/property-provider": "^4.2.11", "@smithy/smithy-client": "^4.12.3", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-QDA84CWNe8Akpj15ofLO+1N3Rfg8qa2K5uX0y6HnOp4AnRYRgWrKx/xzbYNbVF9ZsyJUYOfcoaN3y93wA/QJ2A=="], + + "@smithy/util-endpoints": ["@smithy/util-endpoints@3.3.2", "", { "dependencies": { "@smithy/node-config-provider": "^4.3.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-+4HFLpE5u29AbFlTdlKIT7jfOzZ8PDYZKTb3e+AgLz986OYwqTourQ5H+jg79/66DB69Un1+qKecLnkZdAsYcA=="], + + "@smithy/util-hex-encoding": ["@smithy/util-hex-encoding@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg=="], + + "@smithy/util-middleware": ["@smithy/util-middleware@4.2.11", "", { "dependencies": { "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-r3dtF9F+TpSZUxpOVVtPfk09Rlo4lT6ORBqEvX3IBT6SkQAdDSVKR5GcfmZbtl7WKhKnmb3wbDTQ6ibR2XHClw=="], + + "@smithy/util-retry": ["@smithy/util-retry@4.2.11", "", { "dependencies": { "@smithy/service-error-classification": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-XSZULmL5x6aCTTii59wJqKsY1l3eMIAomRAccW7Tzh9r8s7T/7rdo03oektuH5jeYRlJMPcNP92EuRDvk9aXbw=="], + + "@smithy/util-stream": ["@smithy/util-stream@4.5.17", "", { "dependencies": { "@smithy/fetch-http-handler": "^5.3.13", "@smithy/node-http-handler": "^4.4.14", "@smithy/types": "^4.13.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-793BYZ4h2JAQkNHcEnyFxDTcZbm9bVybD0UV/LEWmZ5bkTms7JqjfrLMi2Qy0E5WFcCzLwCAPgcvcvxoeALbAQ=="], + + "@smithy/util-uri-escape": ["@smithy/util-uri-escape@4.2.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw=="], + + "@smithy/util-utf8": ["@smithy/util-utf8@4.2.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw=="], + + "@smithy/util-waiter": ["@smithy/util-waiter@4.2.11", "", { "dependencies": { "@smithy/abort-controller": "^4.2.11", "@smithy/types": "^4.13.0", "tslib": "^2.6.2" } }, "sha512-x7Rh2azQPs3XxbvCzcttRErKKvLnbZfqRf/gOjw2pb+ZscX88e5UkRPCB67bVnsFHxayvMvmePfKTqsRb+is1A=="], + + "@smithy/uuid": ["@smithy/uuid@1.1.2", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "@types/adm-zip": ["@types/adm-zip@0.5.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw=="], + "@types/aws-lambda": ["@types/aws-lambda@8.10.161", "", {}, "sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ=="], "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], @@ -378,6 +525,8 @@ "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="], + "adm-zip": ["adm-zip@0.5.16", "", {}, "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ=="], + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], "aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="], @@ -426,6 +575,8 @@ "bottleneck": ["bottleneck@2.19.5", "", {}, "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="], + "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], + "brace-expansion": ["brace-expansion@5.0.4", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -576,6 +727,10 @@ "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + "fast-xml-builder": ["fast-xml-builder@1.1.0", "", { "dependencies": { "path-expression-matcher": "^1.1.2" } }, "sha512-7mtITW/we2/wTUZqMyBOR2F8xP4CRxMiSEcQxPIqdRWdO2L/HZSOlzoNyghmyDwNB8BDxePooV1ZTJpkOUhdRg=="], + + "fast-xml-parser": ["fast-xml-parser@5.4.1", "", { "dependencies": { "fast-xml-builder": "^1.0.0", "strnum": "^2.1.2" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A=="], + "fb-watchman": ["fb-watchman@2.0.2", "", { "dependencies": { "bser": "2.1.1" } }, "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA=="], "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], @@ -960,6 +1115,8 @@ "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + "path-expression-matcher": ["path-expression-matcher@1.1.2", "", {}, "sha512-LXWqJmcpp2BKOEmgt4CyuESFmBfPuhJlAHKJsFzuJU6CxErWk75BrO+Ni77M9OxHN6dCYKM4vj+21Z6cOL96YQ=="], + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], @@ -1076,6 +1233,8 @@ "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + "strnum": ["strnum@2.2.0", "", {}, "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg=="], + "super-regex": ["super-regex@1.1.0", "", { "dependencies": { "function-timeout": "^1.0.1", "make-asynchronous": "^1.0.1", "time-span": "^5.1.0" } }, "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ=="], "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], @@ -1192,6 +1351,10 @@ "@aws-cdk/cloud-assembly-schema/semver": ["semver@7.7.4", "", { "bundled": true, "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "@aws-crypto/sha256-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + + "@aws-crypto/util/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -1700,6 +1863,10 @@ "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], + + "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], + "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], @@ -1844,6 +2011,10 @@ "signale/figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "@aws-crypto/sha256-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], + + "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], + "@jest/environment/jest-mock/jest-util/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], "@jest/expect/expect/jest-matcher-utils/jest-diff": ["jest-diff@30.3.0", "", { "dependencies": { "@jest/diff-sequences": "30.3.0", "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "pretty-format": "30.3.0" } }, "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ=="], diff --git a/bunfig.toml b/bunfig.toml index de946478..55af992d 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -1,3 +1,2 @@ [install] minimumReleaseAge = 259200 -minimumReleaseAgeExcludes = ["@liflig/cdk-lambda-config"] diff --git a/package.json b/package.json index 99d874ad..2c95fec9 100644 --- a/package.json +++ b/package.json @@ -35,13 +35,16 @@ "provenance": true }, "devDependencies": { + "@aws-sdk/client-lambda": "^3.1005.0", "@biomejs/biome": "2.4.6", "@commitlint/cli": "20.4.4", "@commitlint/config-conventional": "20.4.4", + "@types/adm-zip": "^0.5.7", "@types/aws-lambda": "8.10.161", "@types/jest": "30.0.0", "@types/jsonwebtoken": "9.0.10", "@types/node": "24.12.0", + "adm-zip": "^0.5.16", "aws-cdk-lib": "2.243.0", "axios": "1.13.6", "constructs": "10.5.1", @@ -55,10 +58,7 @@ "ts-jest": "29.4.6", "typescript": "5.9.3" }, - "dependencies": { - "@henrist/cdk-cross-region-params": "^2.0.1", - "@liflig/cdk-lambda-config": "1.7.36" - }, + "dependencies": {}, "peerDependencies": { "aws-cdk-lib": "^2.0.0" }, From fa8511d67b0690685f172e56300e6a7f56ad6db6 Mon Sep 17 00:00:00 2001 From: "Joakim L. Engeset" Date: Mon, 16 Mar 2026 12:51:59 +0100 Subject: [PATCH 4/7] chore: update CDK snapshots Logical IDs changed because the AwsCustomResource construct ID is no longer nested under a separate CrossRegionParameter class. --- src/__snapshots__/index.test.ts.snap | 40 ++++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/__snapshots__/index.test.ts.snap b/src/__snapshots__/index.test.ts.snap index 9b236761..c0403e45 100644 --- a/src/__snapshots__/index.test.ts.snap +++ b/src/__snapshots__/index.test.ts.snap @@ -81,10 +81,10 @@ exports[`A simple example 1`] = ` }, "Type": "AWS::Lambda::Version", }, - "AuthLambdasCheckAuthFunctionVersionParamParameuwest1Resoure8ACD3434": { + "AuthLambdasCheckAuthFunctionVersionParamParameuwest1BD215FEC": { "DeletionPolicy": "Delete", "DependsOn": [ - "AuthLambdasCheckAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy088F1114", + "AuthLambdasCheckAuthFunctionVersionParamParameuwest1CustomResourcePolicy387046A7", ], "Properties": { "Create": { @@ -123,7 +123,7 @@ exports[`A simple example 1`] = ` "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, - "AuthLambdasCheckAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy088F1114": { + "AuthLambdasCheckAuthFunctionVersionParamParameuwest1CustomResourcePolicy387046A7": { "Properties": { "PolicyDocument": { "Statement": [ @@ -140,7 +140,7 @@ exports[`A simple example 1`] = ` ], "Version": "2012-10-17", }, - "PolicyName": "AuthLambdasCheckAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy088F1114", + "PolicyName": "AuthLambdasCheckAuthFunctionVersionParamParameuwest1CustomResourcePolicy387046A7", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", @@ -178,10 +178,10 @@ exports[`A simple example 1`] = ` }, "Type": "AWS::Lambda::Version", }, - "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1Resoure0C3C81F2": { + "AuthLambdasHttpHeadersFunctionVersionParamParameuwest18A708A7E": { "DeletionPolicy": "Delete", "DependsOn": [ - "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1ResoureCustomResourcePolicyC99B8AA6", + "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1CustomResourcePolicy84EC4F32", ], "Properties": { "Create": { @@ -220,7 +220,7 @@ exports[`A simple example 1`] = ` "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, - "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1ResoureCustomResourcePolicyC99B8AA6": { + "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1CustomResourcePolicy84EC4F32": { "Properties": { "PolicyDocument": { "Statement": [ @@ -237,7 +237,7 @@ exports[`A simple example 1`] = ` ], "Version": "2012-10-17", }, - "PolicyName": "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1ResoureCustomResourcePolicyC99B8AA6", + "PolicyName": "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1CustomResourcePolicy84EC4F32", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", @@ -275,10 +275,10 @@ exports[`A simple example 1`] = ` }, "Type": "AWS::Lambda::Version", }, - "AuthLambdasParseAuthFunctionVersionParamParameuwest1Resoure934661C6": { + "AuthLambdasParseAuthFunctionVersionParamParameuwest18E5AA0F3": { "DeletionPolicy": "Delete", "DependsOn": [ - "AuthLambdasParseAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicyCEAE27DB", + "AuthLambdasParseAuthFunctionVersionParamParameuwest1CustomResourcePolicy9F895760", ], "Properties": { "Create": { @@ -317,7 +317,7 @@ exports[`A simple example 1`] = ` "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, - "AuthLambdasParseAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicyCEAE27DB": { + "AuthLambdasParseAuthFunctionVersionParamParameuwest1CustomResourcePolicy9F895760": { "Properties": { "PolicyDocument": { "Statement": [ @@ -334,7 +334,7 @@ exports[`A simple example 1`] = ` ], "Version": "2012-10-17", }, - "PolicyName": "AuthLambdasParseAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicyCEAE27DB", + "PolicyName": "AuthLambdasParseAuthFunctionVersionParamParameuwest1CustomResourcePolicy9F895760", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", @@ -372,10 +372,10 @@ exports[`A simple example 1`] = ` }, "Type": "AWS::Lambda::Version", }, - "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1Resoure0C0D8913": { + "AuthLambdasRefreshAuthFunctionVersionParamParameuwest18EF137DE": { "DeletionPolicy": "Delete", "DependsOn": [ - "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy095CEC70", + "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1CustomResourcePolicyA56AF653", ], "Properties": { "Create": { @@ -414,7 +414,7 @@ exports[`A simple example 1`] = ` "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, - "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy095CEC70": { + "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1CustomResourcePolicyA56AF653": { "Properties": { "PolicyDocument": { "Statement": [ @@ -431,7 +431,7 @@ exports[`A simple example 1`] = ` ], "Version": "2012-10-17", }, - "PolicyName": "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy095CEC70", + "PolicyName": "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1CustomResourcePolicyA56AF653", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", @@ -507,10 +507,10 @@ exports[`A simple example 1`] = ` }, "Type": "AWS::Lambda::Version", }, - "AuthLambdasSignOutFunctionVersionParamParameuwest1Resoure18583D2D": { + "AuthLambdasSignOutFunctionVersionParamParameuwest158CF63E5": { "DeletionPolicy": "Delete", "DependsOn": [ - "AuthLambdasSignOutFunctionVersionParamParameuwest1ResoureCustomResourcePolicy16B30BE4", + "AuthLambdasSignOutFunctionVersionParamParameuwest1CustomResourcePolicy897CD112", ], "Properties": { "Create": { @@ -549,7 +549,7 @@ exports[`A simple example 1`] = ` "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, - "AuthLambdasSignOutFunctionVersionParamParameuwest1ResoureCustomResourcePolicy16B30BE4": { + "AuthLambdasSignOutFunctionVersionParamParameuwest1CustomResourcePolicy897CD112": { "Properties": { "PolicyDocument": { "Statement": [ @@ -566,7 +566,7 @@ exports[`A simple example 1`] = ` ], "Version": "2012-10-17", }, - "PolicyName": "AuthLambdasSignOutFunctionVersionParamParameuwest1ResoureCustomResourcePolicy16B30BE4", + "PolicyName": "AuthLambdasSignOutFunctionVersionParamParameuwest1CustomResourcePolicy897CD112", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", From cee70ca0a8414cd31f052b3b4ec55ef58f409555 Mon Sep 17 00:00:00 2001 From: "Joakim L. Engeset" Date: Mon, 16 Mar 2026 13:19:20 +0100 Subject: [PATCH 5/7] chore: add clean-all target --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 094117ac..5b851ff0 100644 --- a/Makefile +++ b/Makefile @@ -27,6 +27,10 @@ check: clean: rm -rf dist lib +.PHONY: clean-all +clean-all: clean + rm -rf node_modules + .PHONY: bun-build bun-build: bun run build From cc5d39bc9050a0d3ce3ef05491391a7a3ab6b7e8 Mon Sep 17 00:00:00 2001 From: "Joakim L. Engeset" Date: Mon, 16 Mar 2026 14:14:22 +0100 Subject: [PATCH 6/7] fix: preserve construct tree shape for backward compatibility Add intermediate Construct scope in CrossRegionParam to match the original construct tree layout. The "Resoure" typo in the AwsCustomResource ID is intentionally preserved to avoid changing CloudFormation logical IDs, which would cause resource replacement in existing deployments. Verified against all consumers (example, liflig-incubator-common-infra, liflig-repo-metrics, resources-definition) with zero snapshot diff. --- src/cross-region-params.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cross-region-params.ts b/src/cross-region-params.ts index 8ad215f1..fafb7b29 100644 --- a/src/cross-region-params.ts +++ b/src/cross-region-params.ts @@ -109,7 +109,11 @@ export class CrossRegionParam extends Construct { ) { const physicalResourceId = cr.PhysicalResourceId.of(props.name) - new cr.AwsCustomResource(this, id, { + // "Resoure" is an intentional typo preserved for backward compatibility. + // Changing it would alter CloudFormation logical IDs and cause resource + // replacement in existing deployments. + const paramScope = new Construct(this, id) + new cr.AwsCustomResource(paramScope, "Resoure", { onUpdate: { service: "SSM", action: "putParameter", From dac11cd9e3e398e30274c8d4c4111fd369ef4908 Mon Sep 17 00:00:00 2001 From: "Joakim L. Engeset" Date: Mon, 16 Mar 2026 14:14:30 +0100 Subject: [PATCH 7/7] chore: update CDK snapshots --- src/__snapshots__/index.test.ts.snap | 40 ++++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/__snapshots__/index.test.ts.snap b/src/__snapshots__/index.test.ts.snap index c0403e45..9b236761 100644 --- a/src/__snapshots__/index.test.ts.snap +++ b/src/__snapshots__/index.test.ts.snap @@ -81,10 +81,10 @@ exports[`A simple example 1`] = ` }, "Type": "AWS::Lambda::Version", }, - "AuthLambdasCheckAuthFunctionVersionParamParameuwest1BD215FEC": { + "AuthLambdasCheckAuthFunctionVersionParamParameuwest1Resoure8ACD3434": { "DeletionPolicy": "Delete", "DependsOn": [ - "AuthLambdasCheckAuthFunctionVersionParamParameuwest1CustomResourcePolicy387046A7", + "AuthLambdasCheckAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy088F1114", ], "Properties": { "Create": { @@ -123,7 +123,7 @@ exports[`A simple example 1`] = ` "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, - "AuthLambdasCheckAuthFunctionVersionParamParameuwest1CustomResourcePolicy387046A7": { + "AuthLambdasCheckAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy088F1114": { "Properties": { "PolicyDocument": { "Statement": [ @@ -140,7 +140,7 @@ exports[`A simple example 1`] = ` ], "Version": "2012-10-17", }, - "PolicyName": "AuthLambdasCheckAuthFunctionVersionParamParameuwest1CustomResourcePolicy387046A7", + "PolicyName": "AuthLambdasCheckAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy088F1114", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", @@ -178,10 +178,10 @@ exports[`A simple example 1`] = ` }, "Type": "AWS::Lambda::Version", }, - "AuthLambdasHttpHeadersFunctionVersionParamParameuwest18A708A7E": { + "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1Resoure0C3C81F2": { "DeletionPolicy": "Delete", "DependsOn": [ - "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1CustomResourcePolicy84EC4F32", + "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1ResoureCustomResourcePolicyC99B8AA6", ], "Properties": { "Create": { @@ -220,7 +220,7 @@ exports[`A simple example 1`] = ` "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, - "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1CustomResourcePolicy84EC4F32": { + "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1ResoureCustomResourcePolicyC99B8AA6": { "Properties": { "PolicyDocument": { "Statement": [ @@ -237,7 +237,7 @@ exports[`A simple example 1`] = ` ], "Version": "2012-10-17", }, - "PolicyName": "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1CustomResourcePolicy84EC4F32", + "PolicyName": "AuthLambdasHttpHeadersFunctionVersionParamParameuwest1ResoureCustomResourcePolicyC99B8AA6", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", @@ -275,10 +275,10 @@ exports[`A simple example 1`] = ` }, "Type": "AWS::Lambda::Version", }, - "AuthLambdasParseAuthFunctionVersionParamParameuwest18E5AA0F3": { + "AuthLambdasParseAuthFunctionVersionParamParameuwest1Resoure934661C6": { "DeletionPolicy": "Delete", "DependsOn": [ - "AuthLambdasParseAuthFunctionVersionParamParameuwest1CustomResourcePolicy9F895760", + "AuthLambdasParseAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicyCEAE27DB", ], "Properties": { "Create": { @@ -317,7 +317,7 @@ exports[`A simple example 1`] = ` "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, - "AuthLambdasParseAuthFunctionVersionParamParameuwest1CustomResourcePolicy9F895760": { + "AuthLambdasParseAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicyCEAE27DB": { "Properties": { "PolicyDocument": { "Statement": [ @@ -334,7 +334,7 @@ exports[`A simple example 1`] = ` ], "Version": "2012-10-17", }, - "PolicyName": "AuthLambdasParseAuthFunctionVersionParamParameuwest1CustomResourcePolicy9F895760", + "PolicyName": "AuthLambdasParseAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicyCEAE27DB", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", @@ -372,10 +372,10 @@ exports[`A simple example 1`] = ` }, "Type": "AWS::Lambda::Version", }, - "AuthLambdasRefreshAuthFunctionVersionParamParameuwest18EF137DE": { + "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1Resoure0C0D8913": { "DeletionPolicy": "Delete", "DependsOn": [ - "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1CustomResourcePolicyA56AF653", + "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy095CEC70", ], "Properties": { "Create": { @@ -414,7 +414,7 @@ exports[`A simple example 1`] = ` "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, - "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1CustomResourcePolicyA56AF653": { + "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy095CEC70": { "Properties": { "PolicyDocument": { "Statement": [ @@ -431,7 +431,7 @@ exports[`A simple example 1`] = ` ], "Version": "2012-10-17", }, - "PolicyName": "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1CustomResourcePolicyA56AF653", + "PolicyName": "AuthLambdasRefreshAuthFunctionVersionParamParameuwest1ResoureCustomResourcePolicy095CEC70", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", @@ -507,10 +507,10 @@ exports[`A simple example 1`] = ` }, "Type": "AWS::Lambda::Version", }, - "AuthLambdasSignOutFunctionVersionParamParameuwest158CF63E5": { + "AuthLambdasSignOutFunctionVersionParamParameuwest1Resoure18583D2D": { "DeletionPolicy": "Delete", "DependsOn": [ - "AuthLambdasSignOutFunctionVersionParamParameuwest1CustomResourcePolicy897CD112", + "AuthLambdasSignOutFunctionVersionParamParameuwest1ResoureCustomResourcePolicy16B30BE4", ], "Properties": { "Create": { @@ -549,7 +549,7 @@ exports[`A simple example 1`] = ` "Type": "Custom::AWS", "UpdateReplacePolicy": "Delete", }, - "AuthLambdasSignOutFunctionVersionParamParameuwest1CustomResourcePolicy897CD112": { + "AuthLambdasSignOutFunctionVersionParamParameuwest1ResoureCustomResourcePolicy16B30BE4": { "Properties": { "PolicyDocument": { "Statement": [ @@ -566,7 +566,7 @@ exports[`A simple example 1`] = ` ], "Version": "2012-10-17", }, - "PolicyName": "AuthLambdasSignOutFunctionVersionParamParameuwest1CustomResourcePolicy897CD112", + "PolicyName": "AuthLambdasSignOutFunctionVersionParamParameuwest1ResoureCustomResourcePolicy16B30BE4", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2",