diff --git a/packages/constructs/cross-region-stack-export/.npmignore b/packages/constructs/cross-region-stack-export/.npmignore new file mode 100644 index 0000000..7b21160 --- /dev/null +++ b/packages/constructs/cross-region-stack-export/.npmignore @@ -0,0 +1,4 @@ +src +tests +.eslintrc.js +tsconfig.json diff --git a/packages/constructs/cross-region-stack-export/package.json b/packages/constructs/cross-region-stack-export/package.json new file mode 100644 index 0000000..2e3c2d0 --- /dev/null +++ b/packages/constructs/cross-region-stack-export/package.json @@ -0,0 +1,52 @@ +{ + "name": "@reapit-cdk/cross-region-stack-export", + "version": "0.0.0", + "description": "Allows you to share values between stack across regions and accounts.", + "homepage": "https://github.com/reapit/ts-cdk-constructs/blob/main/packages/constructs/cross-region-stack-export", + "readme": "https://github.com/reapit/ts-cdk-constructs/blob/main/packages/constructs/cross-region-stack-export/readme.md", + "bugs": { + "url": "https://github.com/reapit/ts-cdk-constructs/issues" + }, + "license": "MIT", + "author": { + "name": "Josh Balfour", + "email": "jbalfour@reapit.com" + }, + "repository": { + "url": "https://github.com/reapit/ts-cdk-constructs.git" + }, + "scripts": { + "build": "reapit-cdk-tsup --lambda", + "check": "yarn run root:check -p $(pwd)", + "lint": "reapit-cdk-eslint", + "test": "yarn run root:test -- $(pwd)", + "prepack": "reapit-version-package && yarn build", + "integ": "yarn run root:integ -- $(pwd)", + "jsii:build": "rpt-cdk-jsii", + "jsii:publish": "rpt-cdk-jsii --publish" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "publishConfig": { + "main": "dist/index.js", + "types": "dist/index.d.ts" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.96.2", + "constructs": "^10.2.70" + }, + "devDependencies": { + "@aws-sdk/client-ssm": "3.414.0", + "@aws-sdk/client-sts": "3.414.0", + "@reapit-cdk/custom-resource-wrapper": "workspace:^", + "@reapit-cdk/eslint-config": "workspace:^", + "@reapit-cdk/integration-tests": "workspace:^", + "@reapit-cdk/jsii": "workspace:^", + "@reapit-cdk/tsup": "workspace:^", + "@reapit-cdk/version-package": "workspace:^", + "aws-cdk-lib": "^2.96.2", + "aws-lambda": "^1.0.7", + "aws-sdk-client-mock": "^3.0.0", + "constructs": "^10.2.70" + } +} diff --git a/packages/constructs/cross-region-stack-export/src/cross-region-stack-export.ts b/packages/constructs/cross-region-stack-export/src/cross-region-stack-export.ts new file mode 100644 index 0000000..a6104ee --- /dev/null +++ b/packages/constructs/cross-region-stack-export/src/cross-region-stack-export.ts @@ -0,0 +1,65 @@ +import { PhysicalName, Stack, Token } from 'aws-cdk-lib' +import { AccountPrincipal, ManagedPolicy, Role } from 'aws-cdk-lib/aws-iam' +import { StringParameter } from 'aws-cdk-lib/aws-ssm' +import { RemoteParameters } from './remote-parameters' +import { Construct } from 'constructs' + +export class CrossRegionStackImport extends Construct { + exporter: CrossRegionStackExport + parameters: RemoteParameters + constructor(scope: Construct, id: string, fromExporter: CrossRegionStackExport, roleArn: string) { + super(scope, id) + this.exporter = fromExporter + + const stack = Stack.of(this) + this.parameters = new RemoteParameters(this, 'parameters', { + path: this.exporter.parameterPath, + region: this.exporter.sourceStack.region, + role: Role.fromRoleArn(this, 'readOnlyRole', roleArn), + }) + stack.addDependency(this.exporter.sourceStack) + } + + getValue(stackExport: ExportKey | string) { + return this.parameters.get(this.exporter.getParameterName(stackExport)) + } +} + +export class CrossRegionStackExport extends Construct { + parameterPath: string + sourceStack: Stack + + constructor(scope: Construct, id: string) { + super(scope, id) + const stack = Stack.of(scope) + this.sourceStack = stack + if (Token.isUnresolved(stack.account)) { + throw new Error('stack account is unresolved') + } + if (Token.isUnresolved(stack.region)) { + throw new Error('stack region is unresolved') + } + this.parameterPath = `/${stack.account}/${stack.region}/${stack.stackName}/exports` + } + + getParameterName(stackExport: ExportKey | string) { + return `${this.parameterPath}/${stackExport}` + } + + setValue(id: ExportKey | string, value: string) { + new StringParameter(this, id as string, { + parameterName: this.getParameterName(id), + stringValue: value, + }) + } + + getImporter(scope: Construct, id: string) { + const { account } = Stack.of(scope) + const cdkReadOnlyRole = new Role(this, `${account}-readOnlyRole`, { + assumedBy: new AccountPrincipal(account), + roleName: PhysicalName.GENERATE_IF_NEEDED, + managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMReadOnlyAccess')], + }) + return new CrossRegionStackImport(scope, id, this, cdkReadOnlyRole.roleArn) + } +} diff --git a/packages/constructs/cross-region-stack-export/src/index.ts b/packages/constructs/cross-region-stack-export/src/index.ts new file mode 100644 index 0000000..a9cb145 --- /dev/null +++ b/packages/constructs/cross-region-stack-export/src/index.ts @@ -0,0 +1,2 @@ +export * from './remote-parameters' +export * from './cross-region-stack-export' diff --git a/packages/constructs/cross-region-stack-export/src/lambda/get-parameters.ts b/packages/constructs/cross-region-stack-export/src/lambda/get-parameters.ts new file mode 100644 index 0000000..f8a5720 --- /dev/null +++ b/packages/constructs/cross-region-stack-export/src/lambda/get-parameters.ts @@ -0,0 +1,79 @@ +import { AssumeRoleCommand, STSClient } from '@aws-sdk/client-sts' +import { Parameter, SSMClient, paginateGetParametersByPath } from '@aws-sdk/client-ssm' + +const getSsmClient = async (region: string, roleArn?: string, sessionName?: string): Promise => { + if (roleArn && sessionName) { + const client = new STSClient({}) + console.log('assuming role', roleArn) + const res = await client.send( + new AssumeRoleCommand({ + RoleArn: roleArn, + RoleSessionName: sessionName, + }), + ) + const { Credentials } = res + if (!Credentials) { + throw new Error(`no credentials after assuming role ${roleArn}`) + } + const { AccessKeyId, Expiration, SecretAccessKey, SessionToken } = Credentials + if (!AccessKeyId || !SecretAccessKey) { + throw new Error(`no AccessKeyId and/or SecretAccessKey after assuming role ${roleArn}`) + } + console.log('role assumed', roleArn) + return new SSMClient({ + region, + credentials: { + accessKeyId: AccessKeyId, + secretAccessKey: SecretAccessKey, + expiration: Expiration, + sessionToken: SessionToken, + }, + }) + } + + if (roleArn && !sessionName) { + throw new Error('recieved roleArn but no sessionName') + } + + console.log('no role, not assuming') + return new SSMClient({ + region, + }) +} + +const getPaginatedParams = async (ssmClient: SSMClient, path: string): Promise => { + console.log('getting params from', path) + const paginator = paginateGetParametersByPath( + { + client: ssmClient, + }, + { + Path: path, + Recursive: true, + WithDecryption: true, + MaxResults: 100, + }, + ) + const results = [] + for await (const page of paginator) { + results.push(...(page.Parameters || [])) + console.log('paging', results.length) + } + return results +} + +export const getParameters = async (region: string, path: string, roleArn: string, sessionName: string) => { + const ssmClient = await getSsmClient(region, roleArn, sessionName) + + const params: Record = {} + const results = await getPaginatedParams(ssmClient, path) + + results.forEach(({ Name, Value }) => { + if (Name && Value) { + params[Name] = Value + } + }) + + console.log('done') + return params +} diff --git a/packages/constructs/cross-region-stack-export/src/lambda/lambda.ts b/packages/constructs/cross-region-stack-export/src/lambda/lambda.ts new file mode 100644 index 0000000..9ba36ce --- /dev/null +++ b/packages/constructs/cross-region-stack-export/src/lambda/lambda.ts @@ -0,0 +1,9 @@ +import { getParameters } from './get-parameters' +import { customResourceWrapper } from '@reapit-cdk/custom-resource-wrapper' + +export const onEvent = customResourceWrapper({ + onCreate: ({ stackName, regionName, parameterPath, role }) => + getParameters(regionName, parameterPath, role, stackName), + onUpdate: ({ stackName, regionName, parameterPath, role }) => + getParameters(regionName, parameterPath, role, stackName), +}) diff --git a/packages/constructs/cross-region-stack-export/src/remote-parameters.ts b/packages/constructs/cross-region-stack-export/src/remote-parameters.ts new file mode 100644 index 0000000..85f884f --- /dev/null +++ b/packages/constructs/cross-region-stack-export/src/remote-parameters.ts @@ -0,0 +1,99 @@ +import { Stack, CustomResource, aws_iam as iam, aws_logs as logs, custom_resources as cr, Duration } from 'aws-cdk-lib' +import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda' +import { Construct } from 'constructs' +import * as path from 'path' + +/** + * Properties of the RemoteParameters + */ +export interface RemoteParametersProps { + // /** + // * The remote CDK stack to get the parameters from. + // */ + // readonly stack: cdk.Stack; + /** + * The region code of the remote stack. + */ + readonly region: string + /** + * The assumed role used to get remote parameters. + */ + readonly role?: iam.IRole + /** + * The parameter path. + */ + readonly path: string + /** + * Indicate whether always update the custom resource to get the new stack output + * @default true + */ + readonly alwaysUpdate?: boolean +} + +/** + * Represents the RemoteParameters of the remote CDK stack + */ +export class RemoteParameters extends Construct { + /** + * The parameters in the SSM parameter store for the remote stack. + */ + readonly parameters: CustomResource + + constructor(scope: Construct, id: string, props: RemoteParametersProps) { + super(scope, id) + + const onEvent = new Function(this, 'func', { + handler: 'lambda.onEvent', + timeout: Duration.seconds(60), + runtime: Runtime.NODEJS_18_X, + code: Code.fromAsset(path.join(__dirname, '..', 'dist', 'lambda')), + }) + + const myProvider = new cr.Provider(this, 'MyProvider', { + onEventHandler: onEvent, + logRetention: logs.RetentionDays.ONE_DAY, + }) + + onEvent.addToRolePolicy( + new iam.PolicyStatement({ + actions: ['ssm:GetParametersByPath'], + resources: ['*'], + }), + ) + + this.parameters = new CustomResource(this, 'SsmParameters', { + serviceToken: myProvider.serviceToken, + properties: { + stackName: Stack.of(this).stackName, + regionName: props.region, + parameterPath: props.path, + randomString: props.alwaysUpdate === false ? undefined : randomString(), + role: props.role?.roleArn, + }, + }) + + if (props.role) { + myProvider.onEventHandler.addToRolePolicy( + new iam.PolicyStatement({ + actions: ['sts:AssumeRole'], + resources: [props.role.roleArn], + }), + ) + } + } + + /** + * Get the parameter. + * @param key output key + */ + public get(key: string) { + return this.parameters.getAttString(key) + } +} + +function randomString() { + // Crazy + return Math.random() + .toString(36) + .replace(/[^a-z0-9]+/g, '') +} diff --git a/packages/constructs/cross-region-stack-export/tests/construct.test.ts b/packages/constructs/cross-region-stack-export/tests/construct.test.ts new file mode 100644 index 0000000..88319ea --- /dev/null +++ b/packages/constructs/cross-region-stack-export/tests/construct.test.ts @@ -0,0 +1,26 @@ +import { Template } from 'aws-cdk-lib/assertions' +import * as cdk from 'aws-cdk-lib' +import { RemoteParameters } from '../src' + +const synth = () => { + const app = new cdk.App() + const stack = new cdk.Stack(app) + const remoteParameters = new RemoteParameters(stack, 'params', { + path: 'asdf', + region: 'eu-west-2', + }) + const template = Template.fromStack(stack) + return { + remoteParameters, + template, + stack, + } +} + +describe('active-ruleset', () => { + test('synthesizes', () => { + const { remoteParameters, template } = synth() + expect(remoteParameters).toBeDefined() + expect(template).toBeDefined() + }) +}) diff --git a/packages/constructs/cross-region-stack-export/tests/lambda.test.ts b/packages/constructs/cross-region-stack-export/tests/lambda.test.ts new file mode 100644 index 0000000..0bbf719 --- /dev/null +++ b/packages/constructs/cross-region-stack-export/tests/lambda.test.ts @@ -0,0 +1,118 @@ +import { mockClient } from 'aws-sdk-client-mock' +import 'aws-sdk-client-mock-jest' +import { GetParametersByPathCommand, SSMClient } from '@aws-sdk/client-ssm' +import { AssumeRoleCommand, STSClient } from '@aws-sdk/client-sts' +import { onEvent } from '../src/lambda/lambda' + +const ssmMock = mockClient(SSMClient) +const stsMock = mockClient(STSClient) + +describe('remote-parameters', () => { + beforeEach(() => { + ssmMock.reset() + stsMock.reset() + }) + + it('should fetch me the given parameters', async () => { + ssmMock + .on(GetParametersByPathCommand) + .resolvesOnce({ + NextToken: '1234', + Parameters: [ + { + Name: 'something', + Value: 'else', + }, + ], + }) + .resolvesOnce({ + NextToken: undefined, + Parameters: [ + { + Name: 'another', + Value: 'thing', + }, + ], + }) + const res = await onEvent({ + RequestType: 'Create', + LogicalResourceId: '1q23', + RequestId: '1q23', + ResourceProperties: { + ServiceToken: 'asdf', + stackName: 'asdf', + regionName: 'eu-west-2', + parameterPath: '/asd/dfg', + }, + ResourceType: 'asdf', + ResponseURL: 'asdf', + ServiceToken: 'asdf', + StackId: 'asdf', + }) + + if (!res.Data) { + throw new Error('res.Data undefined') + } + + expect(res.Data['something']).toBe('else') + expect(res.Data['another']).toBe('thing') + }) + + it('should fetch me the given parameters assuming the given role', async () => { + stsMock.on(AssumeRoleCommand).resolves({ + Credentials: { + AccessKeyId: 'key-id', + SecretAccessKey: 'secret', + Expiration: new Date(), + SessionToken: 'token', + }, + }) + ssmMock + .on(GetParametersByPathCommand) + .resolvesOnce({ + NextToken: '1234', + Parameters: [ + { + Name: 'something', + Value: 'else', + }, + ], + }) + .resolvesOnce({ + NextToken: undefined, + Parameters: [ + { + Name: 'another', + Value: 'thing', + }, + ], + }) + const res = await onEvent({ + RequestType: 'Create', + LogicalResourceId: '1q23', + RequestId: '1q23', + ResourceProperties: { + ServiceToken: 'asdf', + stackName: 'stack-name', + regionName: 'eu-west-2', + parameterPath: '/asd/dfg', + role: 'role-arn', + }, + ResourceType: 'asdf', + ResponseURL: 'asdf', + ServiceToken: 'asdf', + StackId: 'asdf', + }) + + if (!res.Data) { + throw new Error('res.Data undefined') + } + + expect(res.Data['something']).toBe('else') + expect(res.Data['another']).toBe('thing') + expect(stsMock).toReceiveCommandWith(AssumeRoleCommand, { + RoleArn: 'role-arn', + RoleSessionName: 'stack-name', + }) + }) +}) diff --git a/packages/constructs/cross-region-stack-export/tsconfig.json b/packages/constructs/cross-region-stack-export/tsconfig.json new file mode 100644 index 0000000..5adfce4 --- /dev/null +++ b/packages/constructs/cross-region-stack-export/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@reapit-cdk/tsconfig/base.json", +} \ No newline at end of file diff --git a/packages/constructs/cross-region-stack-export/usage.ts b/packages/constructs/cross-region-stack-export/usage.ts new file mode 100644 index 0000000..828237b --- /dev/null +++ b/packages/constructs/cross-region-stack-export/usage.ts @@ -0,0 +1,37 @@ +import { CfnOutput, Stack, App } from 'aws-cdk-lib' +import { CrossRegionStackExport } from '@reapit-cdk/cross-region-stack-export' +import { Bucket } from 'aws-cdk-lib/aws-s3' + +const app = new App() +const euStack = new Stack(app, 'stack-eu', { + env: { + account: '11111111', + region: 'eu-west-1', + }, +}) + +const exporter = new CrossRegionStackExport(euStack, 'exporter') +exporter.setValue('thing', 'avalue') + +const bucket = new Bucket(euStack, 'bucket') +exporter.setValue('bucketArn', bucket.bucketArn) + +const usStack = new Stack(app, 'stack-us', { + env: { + account: '2222222222', + region: 'us-east-1', + }, +}) + +const importer = exporter.getImporter(usStack, 'eu-importer') + +const euThing = importer.getValue('thing') +const euBucket = Bucket.fromBucketArn(usStack, 'eu-bucket', importer.getValue('bucketArn')) + +new CfnOutput(usStack, 'euThing', { + value: euThing, +}) + +new CfnOutput(usStack, 'euBucketName', { + value: euBucket.bucketName, +}) diff --git a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/.cache/0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4.zip b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/.cache/0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4.zip new file mode 100644 index 0000000..3d1231e Binary files /dev/null and b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/.cache/0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4.zip differ diff --git a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/host-forwarder.js b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/host-forwarder.js similarity index 100% rename from packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/host-forwarder.js rename to packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/host-forwarder.js diff --git a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/origin-selector.js b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/origin-selector.js similarity index 100% rename from packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/origin-selector.js rename to packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/origin-selector.js diff --git a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/redirector.js b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/redirector.js similarity index 100% rename from packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/redirector.js rename to packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/redirector.js diff --git a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/rewriter.js b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/rewriter.js similarity index 73% rename from packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/rewriter.js rename to packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/rewriter.js index 2f948c6..cad923e 100644 --- a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/rewriter.js +++ b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/rewriter.js @@ -23,10 +23,10 @@ __export(rewriter_exports, { handler: () => handler }); module.exports = __toCommonJS(rewriter_exports); -var rewriteCookie = (header, host) => { +var rewriteCookie = (header, host2) => { return header.split("; ").map((part) => { if (part.startsWith("Domain=")) { - return `Domain=${host}`; + return `Domain=${host2}`; } return part; }).join("; "); @@ -34,11 +34,12 @@ var rewriteCookie = (header, host) => { var domains = ["example.org"]; var doCookieRewrite = true; var doRedirectRewrite = true; -var rewriteLocationHeader = (location, host) => { +var middlewares = []; +var rewriteLocationHeader = (location, host2) => { try { const url = new URL(location); - if (url.hostname !== host && domains.find((domain) => url.hostname.endsWith(domain))) { - url.hostname = host; + if (url.hostname !== host2 && domains.find((domain) => url.hostname.endsWith(domain))) { + url.hostname = host2; } return url.toString(); } catch (e) { @@ -46,6 +47,11 @@ var rewriteLocationHeader = (location, host) => { } return location; }; +var getEnv = (event2) => { + const header = event2.origin?.custom?.customHeaders["env"]; + const str = header ? header[0].value : void 0; + return str ? JSON.parse(str) : {}; +}; var handler = async (event) => { const req = event.Records[0].cf.request; const res = event.Records[0].cf.response; @@ -59,6 +65,15 @@ var handler = async (event) => { if (doRedirectRewrite && res.headers["location"]) { res.headers["location"][0].value = rewriteLocationHeader(res.headers["location"][0].value, host); } + const { domainMapping } = getEnv(req); + const mapping = domainMapping ? domainMapping[host] : {}; + middlewares.forEach((middleware) => { + try { + eval(middleware)(req, res, mapping); + } catch (e) { + console.error(e); + } + }); return res; }; // Annotate the CommonJS export names for ESM import in node: diff --git a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/s3-qs-redirect.js b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/s3-qs-redirect.js similarity index 100% rename from packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868/s3-qs-redirect.js rename to packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4/s3-qs-redirect.js diff --git a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/edge-api-test-stack-dev.assets.json b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/edge-api-test-stack-dev.assets.json index 4869146..786d1ac 100644 --- a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/edge-api-test-stack-dev.assets.json +++ b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/edge-api-test-stack-dev.assets.json @@ -43,21 +43,21 @@ } } }, - "bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868": { + "0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4": { "source": { - "path": "asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868", + "path": "asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4", "packaging": "zip" }, "destinations": { "028446965111-eu-central-1": { "bucketName": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "objectKey": "bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868.zip", + "objectKey": "0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4.zip", "region": "eu-central-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-file-publishing-role-028446965111-eu-central-1" } } }, - "aa4e2f22d671cfee8384a63a7d82f2555673227ff8287f7e446f084cb6dc1996": { + "98012992a7b8061681d5eca60cdf9ca75a3c205f296f40bf8e1a79fba1490fa4": { "source": { "path": "edge-api-test-stack-dev.template.json", "packaging": "file" @@ -65,7 +65,7 @@ "destinations": { "028446965111-eu-central-1": { "bucketName": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "objectKey": "aa4e2f22d671cfee8384a63a7d82f2555673227ff8287f7e446f084cb6dc1996.json", + "objectKey": "98012992a7b8061681d5eca60cdf9ca75a3c205f296f40bf8e1a79fba1490fa4.json", "region": "eu-central-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-file-publishing-role-028446965111-eu-central-1" } diff --git a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/edge-api-test-stack-dev.template.json b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/edge-api-test-stack-dev.template.json index 9cf473d..7441571 100644 --- a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/edge-api-test-stack-dev.template.json +++ b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/edge-api-test-stack-dev.template.json @@ -561,7 +561,7 @@ "Properties": { "Code": { "S3Bucket": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "S3Key": "bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868.zip" + "S3Key": "0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4.zip" }, "Handler": "redirector.handler", "Role": { @@ -577,7 +577,7 @@ ], "Metadata": { "aws:cdk:path": "edge-api-test-stack-dev/api/api/redirect/Resource", - "aws:asset:path": "asset.bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868", + "aws:asset:path": "asset.0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4", "aws:asset:is-bundled": false, "aws:asset:property": "Code" } @@ -936,7 +936,7 @@ "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/01S2WrDMBD8lrzLylFamrfmoLTQIzjQ17CRN64SHUaSE4zxv1crp4nBMLOrYa/xjLfzOZ+O4OIzUZwyJfe83QYQJ5ajt7UTyOLbrhXogjxIAQE1GCjR8XZ1z7HVwQzCjkEly0gu0JxnUXkwa6tBmi/QSbuoJEHsVP7Hn1BV0pQUvZuApYMgraEwtzWVVKD3BaRiG3Raek/vr7UR/8Ih/4AG3Q+6JNrGwgqDvSk6JkHzNrcK+w4RN1ZJ0VDYs475h10L3mPwfEHACqyUbTSawJe1OGFY3xKk5m2fXYJH1lMqd2U93LsM4445WvIxlljkKKwr0liJbTF0HUsD0L3oRv0pdop23EV/hJJ8cfErJdPabFX7YPXNwVTqzr/rUNVx4PkTn2Wgql/gk9HL9RcYEw7duyragYFvIVTkIGFv4cA/SibHEhtYGZcwtkB+9OPz9JnHbzI6eikzV5sgNfK8xz8kr/D+lAIAAA==" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/01S2WrDMBD8lrzLSuPS0rw1B6WFHsGBvoaNvHGV6DCSnBCM/71aOYfBMLOrYa9xztvplE9GcPKZKA+ZklvergOIAyvQ28YJZPFt0wp0Qe6kgIAaDFToeLu459hiZwZhx6CWVSQnOB/zqNyZpdUgzTfopJ3VkiB2qq7xF9S1NBVFHyZg5SBIaygsbEMlFehtCanYCp2W3tP7W2PEVTjkn3BG94suidaxsMJgb4qOSdC8LazCvkPElVVSnCnsWcf846YF7zF4PiNgJdbKnjWawOeNOGBY3hKk5m2fnYNH1lMqd2E93LsM4445WvIplpgVKKwr01iJrTF0HUsD0L3oRv0pNop23ER/hJJ8dvILJdPabNH4YPXNwVTqzn+aUDdx4OkzzzNQ9R/wh9Hr5RcYEw7duyjagYHvIdTkIGFv4cA/SibHEhtYGZcwtkS+9+Pj5IXHLx/tvZSZa0yQGnnR4z+kZqDQlAIAAA==" }, "Metadata": { "aws:cdk:path": "edge-api-test-stack-dev/CDKMetadata/Default" diff --git a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/manifest.json b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/manifest.json index 4b415aa..c6facdc 100644 --- a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/manifest.json +++ b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/manifest.json @@ -18,7 +18,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-deploy-role-028446965111-eu-central-1", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-cfn-exec-role-028446965111-eu-central-1", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-028446965111-eu-central-1/aa4e2f22d671cfee8384a63a7d82f2555673227ff8287f7e446f084cb6dc1996.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-028446965111-eu-central-1/98012992a7b8061681d5eca60cdf9ca75a3c205f296f40bf8e1a79fba1490fa4.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/tree.json b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/tree.json index 24f8b97..49b6cb7 100644 --- a/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/tree.json +++ b/packages/constructs/edge-api/tests/integ.stack.dev.ts.snapshot/tree.json @@ -949,7 +949,7 @@ "aws:cdk:cloudformation:props": { "code": { "s3Bucket": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "s3Key": "bac1bd7a64f3d6d01d6caa8387a57ec28f7630f9de4c2d333d11d3124e542868.zip" + "s3Key": "0f4c1084359ae06a7ede8c4134bc004f2f6bf7e40aa54a8ba73f846c88b98ee4.zip" }, "handler": "redirector.handler", "role": { diff --git a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/.cache/267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5.zip b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/.cache/267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5.zip new file mode 100644 index 0000000..759bad9 Binary files /dev/null and b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/.cache/267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5.zip differ diff --git a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/asset.9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e/lambda.js b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/asset.267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5/lambda.js similarity index 94% rename from packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/asset.9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e/lambda.js rename to packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/asset.267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5/lambda.js index fd7abe4..a563ab6 100644 --- a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/asset.9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e/lambda.js +++ b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/asset.267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5/lambda.js @@ -24,38 +24,6 @@ __export(lambda_exports, { }); module.exports = __toCommonJS(lambda_exports); -// ../../modules/common/src/regions.ts -var awsRegions = [ - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2", - "us-gov-west-1", - "us-gov-east-1", - "ca-central-1", - "eu-north-1", - "eu-west-1", - "eu-west-2", - "eu-west-3", - "eu-central-1", - "eu-south-1", - "af-south-1", - "ap-northeast-1", - "ap-northeast-2", - "ap-northeast-3", - "ap-southeast-1", - "ap-southeast-2", - "ap-southeast-3", - "ap-east-1", - "ap-south-1", - "ap-south-2", - "sa-east-1", - "me-south-1", - "cn-north-1", - "cn-northwest-1" -]; -var stringIsAWSRegion = (str) => awsRegions.includes(str); - // src/lambda/ensure-replication.ts var import_client_kms2 = require("@aws-sdk/client-kms"); @@ -230,7 +198,7 @@ var validateKeyMetadata = (keyMetadata) => { throw new Error("given key is not multiregion primary key"); } if (ReplicaKeys) { - const existingRegions = ReplicaKeys.map((key) => key.Region).filter(strIsDefined).filter(stringIsAWSRegion); + const existingRegions = ReplicaKeys.map((key) => key.Region).filter(strIsDefined); return existingRegions; } } diff --git a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/manifest.json b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/manifest.json index cede1ea..95305da 100644 --- a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/manifest.json +++ b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/manifest.json @@ -18,7 +18,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-deploy-role-028446965111-eu-central-1", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-cfn-exec-role-028446965111-eu-central-1", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-028446965111-eu-central-1/58398b17d54541a3016a28419dfe8214398c509bc2cc874edec2736be5aecc13.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-028446965111-eu-central-1/6891c5ebb5b003d2e8d5ec1169e7a78c17b1f4fa2ae53efe0ad51e2306870a31.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/replicated-key-test-stack.assets.json b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/replicated-key-test-stack.assets.json index d5b7bf5..a4fb865 100644 --- a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/replicated-key-test-stack.assets.json +++ b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/replicated-key-test-stack.assets.json @@ -1,15 +1,15 @@ { "version": "34.0.0", "files": { - "9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e": { + "267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5": { "source": { - "path": "asset.9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e", + "path": "asset.267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5", "packaging": "zip" }, "destinations": { "028446965111-eu-central-1": { "bucketName": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "objectKey": "9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e.zip", + "objectKey": "267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5.zip", "region": "eu-central-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-file-publishing-role-028446965111-eu-central-1" } @@ -29,7 +29,7 @@ } } }, - "58398b17d54541a3016a28419dfe8214398c509bc2cc874edec2736be5aecc13": { + "6891c5ebb5b003d2e8d5ec1169e7a78c17b1f4fa2ae53efe0ad51e2306870a31": { "source": { "path": "replicated-key-test-stack.template.json", "packaging": "file" @@ -37,7 +37,7 @@ "destinations": { "028446965111-eu-central-1": { "bucketName": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "objectKey": "58398b17d54541a3016a28419dfe8214398c509bc2cc874edec2736be5aecc13.json", + "objectKey": "6891c5ebb5b003d2e8d5ec1169e7a78c17b1f4fa2ae53efe0ad51e2306870a31.json", "region": "eu-central-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-file-publishing-role-028446965111-eu-central-1" } diff --git a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/replicated-key-test-stack.template.json b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/replicated-key-test-stack.template.json index 902e8b2..67061ce 100644 --- a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/replicated-key-test-stack.template.json +++ b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/replicated-key-test-stack.template.json @@ -224,7 +224,7 @@ "Properties": { "Code": { "S3Bucket": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "S3Key": "9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e.zip" + "S3Key": "267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5.zip" }, "Handler": "lambda.onEvent", "Role": { @@ -242,7 +242,7 @@ ], "Metadata": { "aws:cdk:path": "replicated-key-test-stack/replicated-key/lambda/Resource", - "aws:asset:path": "asset.9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e", + "aws:asset:path": "asset.267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5", "aws:asset:is-bundled": false, "aws:asset:property": "Code" } @@ -394,7 +394,7 @@ "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/02O2wrCMAyGn8X7LJ5u9FIFb7xQ5gOMrosSt7bStMoYe3e7eUAIfP+BkCxwvcb5RD0l01WdNVxidw5K15CioquN4O5iD9RCo0xZKez20erAzkLKv7oHVga73DU0xCNPrmHdDvatepBloUQoCG4GJI/bqGsKWyXUQ07iotcEY5ueuLK9go4SnCn8pxQ8effgijzsxua3Ndz908cY7jH0YF1FeJPpY77CNLPJTZgzH21gQ5i/+QKMM9/tBgEAAA==" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/02OzQrCMAzHn8V7FlEv7qiCFw+O+QCjdlHi1laadiJj7243PxACv/8HIVlinuNiph6S6brJWj5jfwpKN5Ciqm+M4O5iD/SEVplzrbDfR6sDOwsp/+oBWBnsS9fSGE8sXMv6Odq3GkBWlRKhILgZkTxuo24obJXQACWJi14TTG164sr2CjpKcKbyn1Kw8K7jmjzspua3Nd7908cY7jEMYF1NeJN5t1hjmuXsJsyZjzawISzffAEM+o/DBgEAAA==" }, "Metadata": { "aws:cdk:path": "replicated-key-test-stack/CDKMetadata/Default" diff --git a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/tree.json b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/tree.json index d7216c2..8cccacc 100644 --- a/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/tree.json +++ b/packages/constructs/replicated-key/tests/integ.stack.ts.snapshot/tree.json @@ -320,7 +320,7 @@ "aws:cdk:cloudformation:props": { "code": { "s3Bucket": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "s3Key": "9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e.zip" + "s3Key": "267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5.zip" }, "handler": "lambda.onEvent", "role": { diff --git a/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/asset.9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e/lambda.js b/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/asset.267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5/lambda.js similarity index 94% rename from packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/asset.9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e/lambda.js rename to packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/asset.267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5/lambda.js index fd7abe4..a563ab6 100644 --- a/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/asset.9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e/lambda.js +++ b/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/asset.267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5/lambda.js @@ -24,38 +24,6 @@ __export(lambda_exports, { }); module.exports = __toCommonJS(lambda_exports); -// ../../modules/common/src/regions.ts -var awsRegions = [ - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2", - "us-gov-west-1", - "us-gov-east-1", - "ca-central-1", - "eu-north-1", - "eu-west-1", - "eu-west-2", - "eu-west-3", - "eu-central-1", - "eu-south-1", - "af-south-1", - "ap-northeast-1", - "ap-northeast-2", - "ap-northeast-3", - "ap-southeast-1", - "ap-southeast-2", - "ap-southeast-3", - "ap-east-1", - "ap-south-1", - "ap-south-2", - "sa-east-1", - "me-south-1", - "cn-north-1", - "cn-northwest-1" -]; -var stringIsAWSRegion = (str) => awsRegions.includes(str); - // src/lambda/ensure-replication.ts var import_client_kms2 = require("@aws-sdk/client-kms"); @@ -230,7 +198,7 @@ var validateKeyMetadata = (keyMetadata) => { throw new Error("given key is not multiregion primary key"); } if (ReplicaKeys) { - const existingRegions = ReplicaKeys.map((key) => key.Region).filter(strIsDefined).filter(stringIsAWSRegion); + const existingRegions = ReplicaKeys.map((key) => key.Region).filter(strIsDefined); return existingRegions; } } diff --git a/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/manifest.json b/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/manifest.json index e3e4164..4b0258e 100644 --- a/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/manifest.json +++ b/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/manifest.json @@ -18,7 +18,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-deploy-role-028446965111-eu-central-1", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-cfn-exec-role-028446965111-eu-central-1", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-028446965111-eu-central-1/8aa9f3c4b07fda7221007bc4e9a7768cafd75f0c846f43dde012b096c13980b4.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-028446965111-eu-central-1/d5a10a467347ac4829772741ad58beee2b002ba71a19710e5d28fb3b2299a877.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/replicated-secret-test-stack.assets.json b/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/replicated-secret-test-stack.assets.json index c308f52..9612914 100644 --- a/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/replicated-secret-test-stack.assets.json +++ b/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/replicated-secret-test-stack.assets.json @@ -1,15 +1,15 @@ { "version": "34.0.0", "files": { - "9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e": { + "267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5": { "source": { - "path": "asset.9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e", + "path": "asset.267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5", "packaging": "zip" }, "destinations": { "028446965111-eu-central-1": { "bucketName": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "objectKey": "9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e.zip", + "objectKey": "267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5.zip", "region": "eu-central-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-file-publishing-role-028446965111-eu-central-1" } @@ -43,7 +43,7 @@ } } }, - "8aa9f3c4b07fda7221007bc4e9a7768cafd75f0c846f43dde012b096c13980b4": { + "d5a10a467347ac4829772741ad58beee2b002ba71a19710e5d28fb3b2299a877": { "source": { "path": "replicated-secret-test-stack.template.json", "packaging": "file" @@ -51,7 +51,7 @@ "destinations": { "028446965111-eu-central-1": { "bucketName": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "objectKey": "8aa9f3c4b07fda7221007bc4e9a7768cafd75f0c846f43dde012b096c13980b4.json", + "objectKey": "d5a10a467347ac4829772741ad58beee2b002ba71a19710e5d28fb3b2299a877.json", "region": "eu-central-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::028446965111:role/cdk-hnb659fds-file-publishing-role-028446965111-eu-central-1" } diff --git a/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/replicated-secret-test-stack.template.json b/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/replicated-secret-test-stack.template.json index e9fded7..cf7d5a9 100644 --- a/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/replicated-secret-test-stack.template.json +++ b/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/replicated-secret-test-stack.template.json @@ -224,7 +224,7 @@ "Properties": { "Code": { "S3Bucket": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "S3Key": "9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e.zip" + "S3Key": "267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5.zip" }, "Handler": "lambda.onEvent", "Role": { @@ -242,7 +242,7 @@ ], "Metadata": { "aws:cdk:path": "replicated-secret-test-stack/replicated-key/lambda/Resource", - "aws:asset:path": "asset.9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e", + "aws:asset:path": "asset.267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5", "aws:asset:is-bundled": false, "aws:asset:property": "Code" } @@ -744,7 +744,7 @@ "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/01Oy2rDMBD8ltzX26a5NMcm0EsPDc4HmI28NRtbUtFKKcHo3yvZbSkMzIuBecL9Hrcb+tLG9GMzyQXncyQzQom6ebSKxw/3xneYyF56wvk1ORPFOyj5r84gZHFu/cQ1XvjkJzH3aleVQXcdqXJUfKlUPB6SGTkeSBmUTSidJUcDh/Ji8XW/qpyhZfUpGIZlX24O4gYwSaO3XfgpFU/B36TnAMel+VvVZ//0e4qfKWZwvme86sNt+4wFj5urijQhuSiWsV35G1I4A24oAQAA" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/01Oy2rDMBD8ltzXW5JekmMT6KWHBvcDzEbemo0tqWilhGD075XsthQG5sXA7PBwwO2G7tqYfmwmueD8EcmMUKJuHq3i6dO98QMmspeecH5NzkTxDkr+qzMIWZxbP3GNFz77Scyj2lVl0OeOVDkqvlQqHo/JjByPpAzKJpTOkqOBQ3mx+LpfVc7QsvoUDMOyLzcHcQOYpNHbLvyUiufgb9JzgNPS/K3qs3/6PcWvFDM43zNe9em23WPBbnNVkSYkF8Uytit/A9LxU0AoAQAA" }, "Metadata": { "aws:cdk:path": "replicated-secret-test-stack/CDKMetadata/Default" diff --git a/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/tree.json b/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/tree.json index 873ffb7..57d0a10 100644 --- a/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/tree.json +++ b/packages/constructs/replicated-secret/tests/integ.stack.ts.snapshot/tree.json @@ -320,7 +320,7 @@ "aws:cdk:cloudformation:props": { "code": { "s3Bucket": "cdk-hnb659fds-assets-028446965111-eu-central-1", - "s3Key": "9aead741412b4610bff42612fab8dabcb56784f594ba90ca1bc2b5390528859e.zip" + "s3Key": "267357306b1240f4ef0ecd17c41ef4d476ac1eac104f98b86f12026d7c8d21c5.zip" }, "handler": "lambda.onEvent", "role": { diff --git a/yarn.lock b/yarn.lock index a18eccc..6a27874 100644 --- a/yarn.lock +++ b/yarn.lock @@ -731,6 +731,53 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/client-ssm@npm:3.414.0": + version: 3.414.0 + resolution: "@aws-sdk/client-ssm@npm:3.414.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:3.0.0" + "@aws-crypto/sha256-js": "npm:3.0.0" + "@aws-sdk/client-sts": "npm:3.414.0" + "@aws-sdk/credential-provider-node": "npm:3.414.0" + "@aws-sdk/middleware-host-header": "npm:3.413.0" + "@aws-sdk/middleware-logger": "npm:3.413.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.413.0" + "@aws-sdk/middleware-signing": "npm:3.413.0" + "@aws-sdk/middleware-user-agent": "npm:3.413.0" + "@aws-sdk/region-config-resolver": "npm:3.413.0" + "@aws-sdk/types": "npm:3.413.0" + "@aws-sdk/util-endpoints": "npm:3.413.0" + "@aws-sdk/util-user-agent-browser": "npm:3.413.0" + "@aws-sdk/util-user-agent-node": "npm:3.413.0" + "@smithy/config-resolver": "npm:^2.0.8" + "@smithy/fetch-http-handler": "npm:^2.1.3" + "@smithy/hash-node": "npm:^2.0.7" + "@smithy/invalid-dependency": "npm:^2.0.7" + "@smithy/middleware-content-length": "npm:^2.0.9" + "@smithy/middleware-endpoint": "npm:^2.0.7" + "@smithy/middleware-retry": "npm:^2.0.10" + "@smithy/middleware-serde": "npm:^2.0.7" + "@smithy/middleware-stack": "npm:^2.0.0" + "@smithy/node-config-provider": "npm:^2.0.10" + "@smithy/node-http-handler": "npm:^2.1.3" + "@smithy/protocol-http": "npm:^3.0.3" + "@smithy/smithy-client": "npm:^2.1.4" + "@smithy/types": "npm:^2.3.1" + "@smithy/url-parser": "npm:^2.0.7" + "@smithy/util-base64": "npm:^2.0.0" + "@smithy/util-body-length-browser": "npm:^2.0.0" + "@smithy/util-body-length-node": "npm:^2.1.0" + "@smithy/util-defaults-mode-browser": "npm:^2.0.8" + "@smithy/util-defaults-mode-node": "npm:^2.0.10" + "@smithy/util-retry": "npm:^2.0.0" + "@smithy/util-utf8": "npm:^2.0.0" + "@smithy/util-waiter": "npm:^2.0.7" + tslib: "npm:^2.5.0" + uuid: "npm:^8.3.2" + checksum: 5aa945ab8628cfbbd87db0d764feb34da79d7f4ff633d396160810553f3856334200cc8b614a2eae6d8be68edfa84e3bde3eaf7dbddf11bd6039475f967f78fb + languageName: node + linkType: hard + "@aws-sdk/client-sso@npm:3.414.0": version: 3.414.0 resolution: "@aws-sdk/client-sso@npm:3.414.0" @@ -2773,6 +2820,28 @@ __metadata: languageName: unknown linkType: soft +"@reapit-cdk/cross-region-stack-export@workspace:packages/constructs/cross-region-stack-export": + version: 0.0.0-use.local + resolution: "@reapit-cdk/cross-region-stack-export@workspace:packages/constructs/cross-region-stack-export" + dependencies: + "@aws-sdk/client-ssm": "npm:3.414.0" + "@aws-sdk/client-sts": "npm:3.414.0" + "@reapit-cdk/custom-resource-wrapper": "workspace:^" + "@reapit-cdk/eslint-config": "workspace:^" + "@reapit-cdk/integration-tests": "workspace:^" + "@reapit-cdk/jsii": "workspace:^" + "@reapit-cdk/tsup": "workspace:^" + "@reapit-cdk/version-package": "workspace:^" + aws-cdk-lib: "npm:^2.96.2" + aws-lambda: "npm:^1.0.7" + aws-sdk-client-mock: "npm:^3.0.0" + constructs: "npm:^10.2.70" + peerDependencies: + aws-cdk-lib: ^2.96.2 + constructs: ^10.2.70 + languageName: unknown + linkType: soft + "@reapit-cdk/custom-resource-wrapper@workspace:^, @reapit-cdk/custom-resource-wrapper@workspace:packages/modules/custom-resource-wrapper": version: 0.0.0-use.local resolution: "@reapit-cdk/custom-resource-wrapper@workspace:packages/modules/custom-resource-wrapper"