@aws-solutions-constructs/aws-alb-lambda 2.44.0 → 2.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/.jsii +105 -14
  2. package/lib/index.js +6 -5
  3. package/package.json +6 -6
  4. package/test/alb-lambda.test.js +90 -1
  5. package/test/{integ.privateApiExistingResources.expected.json → integ.alblam-privateApiExistingResources.expected.json} +121 -120
  6. package/test/integ.alblam-privateApiExistingResources.js +80 -0
  7. package/test/{integ.privateApiNewResources.expected.json → integ.alblam-privateApiNewResources.expected.json} +54 -53
  8. package/test/integ.alblam-privateApiNewResources.js +58 -0
  9. package/test/{integ.publicApiExistingResources.expected.json → integ.alblam-publicApiExistingResources.expected.json} +121 -120
  10. package/test/integ.alblam-publicApiExistingResources.js +88 -0
  11. package/test/{integ.publicApiNewResources.expected.json → integ.alblam-publicApiNewResources.expected.json} +121 -120
  12. package/test/integ.alblam-publicApiNewResources.js +58 -0
  13. package/test/{integ.twoTargets.expected.json → integ.alblam-twoTargets.expected.json} +130 -129
  14. package/test/integ.alblam-twoTargets.js +74 -0
  15. package/test/integ.privateApiExistingResources.js +0 -80
  16. package/test/integ.privateApiNewResources.js +0 -58
  17. package/test/integ.publicApiExistingResources.js +0 -88
  18. package/test/integ.publicApiNewResources.js +0 -58
  19. package/test/integ.twoTargets.js +0 -74
  20. /package/test/{integ.privateApiExistingResources.d.ts → integ.alblam-privateApiExistingResources.d.ts} +0 -0
  21. /package/test/{integ.privateApiNewResources.d.ts → integ.alblam-privateApiNewResources.d.ts} +0 -0
  22. /package/test/{integ.publicApiExistingResources.d.ts → integ.alblam-publicApiExistingResources.d.ts} +0 -0
  23. /package/test/{integ.publicApiNewResources.d.ts → integ.alblam-publicApiNewResources.d.ts} +0 -0
  24. /package/test/{integ.twoTargets.d.ts → integ.alblam-twoTargets.d.ts} +0 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ // Imports
16
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
17
+ const lib_1 = require("../lib");
18
+ const core_1 = require("@aws-solutions-constructs/core");
19
+ const lambda = require("aws-cdk-lib/aws-lambda");
20
+ const defaults = require("@aws-solutions-constructs/core");
21
+ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
22
+ // Note: All integration tests for alb are for HTTP APIs, as certificates require
23
+ // validation through DNS and email. This validation is impossible during our integration
24
+ // tests and the stack will fail to launch with an unvalidated certificate.
25
+ // Setup
26
+ const app = new aws_cdk_lib_1.App();
27
+ const stack = new aws_cdk_lib_1.Stack(app, core_1.generateIntegStackName(__filename), {
28
+ env: { account: aws_cdk_lib_1.Aws.ACCOUNT_ID, region: 'us-east-1' },
29
+ });
30
+ stack.templateOptions.description = 'Integration Test for private HTTP API with a existing function and ALB';
31
+ const myVpc = defaults.getTestVpc(stack);
32
+ const testSg = new aws_ec2_1.SecurityGroup(stack, 'lambda-sg', { vpc: myVpc, allowAllOutbound: false });
33
+ const lambdaFunction = defaults.buildLambdaFunction(stack, {
34
+ lambdaFunctionProps: {
35
+ code: lambda.Code.fromAsset(`${__dirname}/lambda`),
36
+ runtime: lambda.Runtime.NODEJS_16_X,
37
+ handler: 'index.handler',
38
+ vpc: myVpc,
39
+ securityGroups: [testSg]
40
+ }
41
+ });
42
+ const loadBalancer = defaults.ObtainAlb(stack, 'existing-alb', {
43
+ vpc: myVpc,
44
+ publicApi: false,
45
+ loadBalancerProps: {
46
+ internetFacing: false,
47
+ vpc: myVpc,
48
+ },
49
+ logAccessLogs: true,
50
+ loggingBucketProps: {
51
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
52
+ autoDeleteObjects: true
53
+ }
54
+ });
55
+ const props = {
56
+ existingLambdaObj: lambdaFunction,
57
+ existingLoadBalancerObj: loadBalancer,
58
+ existingVpc: myVpc,
59
+ listenerProps: {
60
+ protocol: 'HTTP'
61
+ },
62
+ publicApi: false
63
+ };
64
+ const albToLambda = new lib_1.AlbToLambda(stack, 'test-one', props);
65
+ defaults.addCfnSuppressRules(albToLambda.listener, [
66
+ { id: 'W56', reason: 'All integration tests must be HTTP because of certificate limitations.' },
67
+ ]);
68
+ const newSecurityGroup = albToLambda.loadBalancer.connections.securityGroups[0].node.defaultChild;
69
+ defaults.addCfnSuppressRules(newSecurityGroup, [
70
+ { id: 'W29', reason: 'CDK created rule that blocks all traffic.' },
71
+ { id: 'W2', reason: 'Rule does not apply for ELB.' },
72
+ { id: 'W9', reason: 'Rule does not apply for ELB.' }
73
+ ]);
74
+ defaults.addCfnSuppressRules(testSg, [
75
+ { id: 'W29', reason: 'CDK created rule that blocks all traffic.' },
76
+ ]);
77
+ defaults.suppressAutoDeleteHandlerWarnings(stack);
78
+ // Synth
79
+ app.synth();
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuYWxibGFtLXByaXZhdGVBcGlFeGlzdGluZ1Jlc291cmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVnLmFsYmxhbS1wcml2YXRlQXBpRXhpc3RpbmdSZXNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILFVBQVU7QUFDViw2Q0FBNkQ7QUFDN0QsZ0NBQXVEO0FBQ3ZELHlEQUF3RTtBQUN4RSxpREFBaUQ7QUFDakQsMkRBQTJEO0FBQzNELGlEQUFzRTtBQUV0RSxpRkFBaUY7QUFDakYseUZBQXlGO0FBQ3pGLDJFQUEyRTtBQUUzRSxRQUFRO0FBQ1IsTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSw2QkFBc0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtJQUMvRCxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUJBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTtDQUN0RCxDQUFDLENBQUM7QUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyx3RUFBd0UsQ0FBQztBQUU3RyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXpDLE1BQU0sTUFBTSxHQUFHLElBQUksdUJBQWEsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0FBRTdGLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUU7SUFDekQsbUJBQW1CLEVBQUU7UUFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxTQUFTLENBQUM7UUFDbEQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVztRQUNuQyxPQUFPLEVBQUUsZUFBZTtRQUN4QixHQUFHLEVBQUUsS0FBSztRQUNWLGNBQWMsRUFBRSxDQUFFLE1BQU0sQ0FBRTtLQUMzQjtDQUNGLENBQUMsQ0FBQztBQUVILE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtJQUM3RCxHQUFHLEVBQUUsS0FBSztJQUNWLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLGlCQUFpQixFQUFFO1FBQ2pCLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLEdBQUcsRUFBRSxLQUFLO0tBQ1g7SUFDRCxhQUFhLEVBQUUsSUFBSTtJQUNuQixrQkFBa0IsRUFBRTtRQUNsQixhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1FBQ3BDLGlCQUFpQixFQUFFLElBQUk7S0FDeEI7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLEtBQUssR0FBcUI7SUFDOUIsaUJBQWlCLEVBQUUsY0FBYztJQUNqQyx1QkFBdUIsRUFBRSxZQUFZO0lBQ3JDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLGFBQWEsRUFBRTtRQUNiLFFBQVEsRUFBRSxNQUFNO0tBQ2pCO0lBQ0QsU0FBUyxFQUFFLEtBQUs7Q0FDakIsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksaUJBQVcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRTlELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO0lBQ2pELEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsd0VBQXdFLEVBQUU7Q0FDaEcsQ0FBQyxDQUFDO0FBRUgsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQWdDLENBQUM7QUFDdEgsUUFBUSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixFQUFFO0lBQzdDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsMkNBQTJDLEVBQUM7SUFDakUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSw4QkFBOEIsRUFBQztJQUNuRCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLDhCQUE4QixFQUFDO0NBQ3BELENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7SUFDbkMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSwyQ0FBMkMsRUFBQztDQUNsRSxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsaUNBQWlDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEQsUUFBUTtBQUNSLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IEF3cywgQXBwLCBTdGFjaywgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQWxiVG9MYW1iZGEsIEFsYlRvTGFtYmRhUHJvcHMgfSBmcm9tIFwiLi4vbGliXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUludGVnU3RhY2tOYW1lIH0gZnJvbSAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9jb3JlJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5pbXBvcnQgeyBTZWN1cml0eUdyb3VwLCBDZm5TZWN1cml0eUdyb3VwIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcblxuLy8gTm90ZTogQWxsIGludGVncmF0aW9uIHRlc3RzIGZvciBhbGIgYXJlIGZvciBIVFRQIEFQSXMsIGFzIGNlcnRpZmljYXRlcyByZXF1aXJlXG4vLyB2YWxpZGF0aW9uIHRocm91Z2ggRE5TIGFuZCBlbWFpbC4gVGhpcyB2YWxpZGF0aW9uIGlzIGltcG9zc2libGUgZHVyaW5nIG91ciBpbnRlZ3JhdGlvblxuLy8gdGVzdHMgYW5kIHRoZSBzdGFjayB3aWxsIGZhaWwgdG8gbGF1bmNoIHdpdGggYW4gdW52YWxpZGF0ZWQgY2VydGlmaWNhdGUuXG5cbi8vIFNldHVwXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsIGdlbmVyYXRlSW50ZWdTdGFja05hbWUoX19maWxlbmFtZSksIHtcbiAgZW52OiB7IGFjY291bnQ6IEF3cy5BQ0NPVU5UX0lELCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG59KTtcbnN0YWNrLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiA9ICdJbnRlZ3JhdGlvbiBUZXN0IGZvciBwcml2YXRlIEhUVFAgQVBJIHdpdGggYSBleGlzdGluZyBmdW5jdGlvbiBhbmQgQUxCJztcblxuY29uc3QgbXlWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcblxuY29uc3QgdGVzdFNnID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdsYW1iZGEtc2cnLCB7IHZwYzogbXlWcGMsIGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlfSk7XG5cbmNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gZGVmYXVsdHMuYnVpbGRMYW1iZGFGdW5jdGlvbihzdGFjaywge1xuICBsYW1iZGFGdW5jdGlvblByb3BzOiB7XG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgIHZwYzogbXlWcGMsXG4gICAgc2VjdXJpdHlHcm91cHM6IFsgdGVzdFNnIF1cbiAgfVxufSk7XG5cbmNvbnN0IGxvYWRCYWxhbmNlciA9IGRlZmF1bHRzLk9idGFpbkFsYihzdGFjaywgJ2V4aXN0aW5nLWFsYicsIHtcbiAgdnBjOiBteVZwYyxcbiAgcHVibGljQXBpOiBmYWxzZSxcbiAgbG9hZEJhbGFuY2VyUHJvcHM6IHtcbiAgICBpbnRlcm5ldEZhY2luZzogZmFsc2UsXG4gICAgdnBjOiBteVZwYyxcbiAgfSxcbiAgbG9nQWNjZXNzTG9nczogdHJ1ZSxcbiAgbG9nZ2luZ0J1Y2tldFByb3BzOiB7XG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlXG4gIH1cbn0pO1xuXG5jb25zdCBwcm9wczogQWxiVG9MYW1iZGFQcm9wcyA9IHtcbiAgZXhpc3RpbmdMYW1iZGFPYmo6IGxhbWJkYUZ1bmN0aW9uLFxuICBleGlzdGluZ0xvYWRCYWxhbmNlck9iajogbG9hZEJhbGFuY2VyLFxuICBleGlzdGluZ1ZwYzogbXlWcGMsXG4gIGxpc3RlbmVyUHJvcHM6IHtcbiAgICBwcm90b2NvbDogJ0hUVFAnXG4gIH0sXG4gIHB1YmxpY0FwaTogZmFsc2Vcbn07XG5cbmNvbnN0IGFsYlRvTGFtYmRhID0gbmV3IEFsYlRvTGFtYmRhKHN0YWNrLCAndGVzdC1vbmUnLCBwcm9wcyk7XG5cbmRlZmF1bHRzLmFkZENmblN1cHByZXNzUnVsZXMoYWxiVG9MYW1iZGEubGlzdGVuZXIsIFtcbiAgeyBpZDogJ1c1NicsIHJlYXNvbjogJ0FsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBtdXN0IGJlIEhUVFAgYmVjYXVzZSBvZiBjZXJ0aWZpY2F0ZSBsaW1pdGF0aW9ucy4nIH0sXG5dKTtcblxuY29uc3QgbmV3U2VjdXJpdHlHcm91cCA9IGFsYlRvTGFtYmRhLmxvYWRCYWxhbmNlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwc1swXS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5TZWN1cml0eUdyb3VwO1xuZGVmYXVsdHMuYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdTZWN1cml0eUdyb3VwLCBbXG4gIHsgaWQ6ICdXMjknLCByZWFzb246ICdDREsgY3JlYXRlZCBydWxlIHRoYXQgYmxvY2tzIGFsbCB0cmFmZmljLid9LFxuICB7IGlkOiAnVzInLCByZWFzb246ICdSdWxlIGRvZXMgbm90IGFwcGx5IGZvciBFTEIuJ30sXG4gIHsgaWQ6ICdXOScsIHJlYXNvbjogJ1J1bGUgZG9lcyBub3QgYXBwbHkgZm9yIEVMQi4nfVxuXSk7XG5cbmRlZmF1bHRzLmFkZENmblN1cHByZXNzUnVsZXModGVzdFNnLCBbXG4gIHsgaWQ6ICdXMjknLCByZWFzb246ICdDREsgY3JlYXRlZCBydWxlIHRoYXQgYmxvY2tzIGFsbCB0cmFmZmljLid9LFxuXSk7XG5cbmRlZmF1bHRzLnN1cHByZXNzQXV0b0RlbGV0ZUhhbmRsZXJXYXJuaW5ncyhzdGFjayk7XG4vLyBTeW50aFxuYXBwLnN5bnRoKCk7XG4iXX0=
@@ -55,7 +55,7 @@
55
55
  "testonetestonealbSecurityGroup4DED9E2A": {
56
56
  "Type": "AWS::EC2::SecurityGroup",
57
57
  "Properties": {
58
- "GroupDescription": "Automatically created Security Group for ELB privateApiNewResourcestestonetestonealbAC549B81",
58
+ "GroupDescription": "Automatically created Security Group for ELB alblamprivateApiNewResourcestestonetestonealb8D3CF023",
59
59
  "SecurityGroupEgress": [
60
60
  {
61
61
  "CidrIp": "255.255.255.255/32",
@@ -187,6 +187,7 @@
187
187
  },
188
188
  {
189
189
  "Action": [
190
+ "s3:PutBucketPolicy",
190
191
  "s3:GetBucket*",
191
192
  "s3:List*",
192
193
  "s3:DeleteObject*"
@@ -429,7 +430,7 @@
429
430
  "testoneReplaceDefaultSecurityGroupsecuritygroupE46270FE": {
430
431
  "Type": "AWS::EC2::SecurityGroup",
431
432
  "Properties": {
432
- "GroupDescription": "privateApiNewResources/test-one/ReplaceDefaultSecurityGroup-security-group",
433
+ "GroupDescription": "alblam-privateApiNewResources/test-one/ReplaceDefaultSecurityGroup-security-group",
433
434
  "SecurityGroupEgress": [
434
435
  {
435
436
  "CidrIp": "0.0.0.0/0",
@@ -465,18 +466,18 @@
465
466
  },
466
467
  "S3Key": "7caf594b8ad91abecca72f7f10a23a5cf446d05dc00d6194619935e7e3fd5a79.zip"
467
468
  },
468
- "Role": {
469
- "Fn::GetAtt": [
470
- "testoneLambdaFunctionServiceRoleE92573D3",
471
- "Arn"
472
- ]
473
- },
474
469
  "Environment": {
475
470
  "Variables": {
476
471
  "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1"
477
472
  }
478
473
  },
479
474
  "Handler": "index.handler",
475
+ "Role": {
476
+ "Fn::GetAtt": [
477
+ "testoneLambdaFunctionServiceRoleE92573D3",
478
+ "Arn"
479
+ ]
480
+ },
480
481
  "Runtime": "nodejs16.x",
481
482
  "TracingConfig": {
482
483
  "Mode": "Active"
@@ -581,6 +582,7 @@
581
582
  "testonetg2tg6459EC7C": {
582
583
  "Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
583
584
  "Properties": {
585
+ "TargetType": "lambda",
584
586
  "Targets": [
585
587
  {
586
588
  "Id": {
@@ -590,8 +592,7 @@
590
592
  ]
591
593
  }
592
594
  }
593
- ],
594
- "TargetType": "lambda"
595
+ ]
595
596
  },
596
597
  "DependsOn": [
597
598
  "testoneLambdaFunctionInvoke2UTWxhlfyqbT5FTn5jvgbLgjFfJwzswGk55DU1HY508A8518"
@@ -607,7 +608,7 @@
607
608
  "Tags": [
608
609
  {
609
610
  "Key": "Name",
610
- "Value": "privateApiNewResources/Vpc"
611
+ "Value": "alblam-privateApiNewResources/Vpc"
611
612
  }
612
613
  ]
613
614
  }
@@ -615,9 +616,6 @@
615
616
  "VpcisolatedSubnet1SubnetE62B1B9B": {
616
617
  "Type": "AWS::EC2::Subnet",
617
618
  "Properties": {
618
- "VpcId": {
619
- "Ref": "Vpc8378EB38"
620
- },
621
619
  "AvailabilityZone": "test-region-1a",
622
620
  "CidrBlock": "10.0.0.0/18",
623
621
  "MapPublicIpOnLaunch": false,
@@ -632,23 +630,26 @@
632
630
  },
633
631
  {
634
632
  "Key": "Name",
635
- "Value": "privateApiNewResources/Vpc/isolatedSubnet1"
633
+ "Value": "alblam-privateApiNewResources/Vpc/isolatedSubnet1"
636
634
  }
637
- ]
635
+ ],
636
+ "VpcId": {
637
+ "Ref": "Vpc8378EB38"
638
+ }
638
639
  }
639
640
  },
640
641
  "VpcisolatedSubnet1RouteTableE442650B": {
641
642
  "Type": "AWS::EC2::RouteTable",
642
643
  "Properties": {
643
- "VpcId": {
644
- "Ref": "Vpc8378EB38"
645
- },
646
644
  "Tags": [
647
645
  {
648
646
  "Key": "Name",
649
- "Value": "privateApiNewResources/Vpc/isolatedSubnet1"
647
+ "Value": "alblam-privateApiNewResources/Vpc/isolatedSubnet1"
650
648
  }
651
- ]
649
+ ],
650
+ "VpcId": {
651
+ "Ref": "Vpc8378EB38"
652
+ }
652
653
  }
653
654
  },
654
655
  "VpcisolatedSubnet1RouteTableAssociationD259E31A": {
@@ -665,9 +666,6 @@
665
666
  "VpcisolatedSubnet2Subnet39217055": {
666
667
  "Type": "AWS::EC2::Subnet",
667
668
  "Properties": {
668
- "VpcId": {
669
- "Ref": "Vpc8378EB38"
670
- },
671
669
  "AvailabilityZone": "test-region-1b",
672
670
  "CidrBlock": "10.0.64.0/18",
673
671
  "MapPublicIpOnLaunch": false,
@@ -682,23 +680,26 @@
682
680
  },
683
681
  {
684
682
  "Key": "Name",
685
- "Value": "privateApiNewResources/Vpc/isolatedSubnet2"
683
+ "Value": "alblam-privateApiNewResources/Vpc/isolatedSubnet2"
686
684
  }
687
- ]
685
+ ],
686
+ "VpcId": {
687
+ "Ref": "Vpc8378EB38"
688
+ }
688
689
  }
689
690
  },
690
691
  "VpcisolatedSubnet2RouteTable334F9764": {
691
692
  "Type": "AWS::EC2::RouteTable",
692
693
  "Properties": {
693
- "VpcId": {
694
- "Ref": "Vpc8378EB38"
695
- },
696
694
  "Tags": [
697
695
  {
698
696
  "Key": "Name",
699
- "Value": "privateApiNewResources/Vpc/isolatedSubnet2"
697
+ "Value": "alblam-privateApiNewResources/Vpc/isolatedSubnet2"
700
698
  }
701
- ]
699
+ ],
700
+ "VpcId": {
701
+ "Ref": "Vpc8378EB38"
702
+ }
702
703
  }
703
704
  },
704
705
  "VpcisolatedSubnet2RouteTableAssociation25A4716F": {
@@ -715,9 +716,6 @@
715
716
  "VpcisolatedSubnet3Subnet44F2537D": {
716
717
  "Type": "AWS::EC2::Subnet",
717
718
  "Properties": {
718
- "VpcId": {
719
- "Ref": "Vpc8378EB38"
720
- },
721
719
  "AvailabilityZone": "test-region-1c",
722
720
  "CidrBlock": "10.0.128.0/18",
723
721
  "MapPublicIpOnLaunch": false,
@@ -732,23 +730,26 @@
732
730
  },
733
731
  {
734
732
  "Key": "Name",
735
- "Value": "privateApiNewResources/Vpc/isolatedSubnet3"
733
+ "Value": "alblam-privateApiNewResources/Vpc/isolatedSubnet3"
736
734
  }
737
- ]
735
+ ],
736
+ "VpcId": {
737
+ "Ref": "Vpc8378EB38"
738
+ }
738
739
  }
739
740
  },
740
741
  "VpcisolatedSubnet3RouteTableA2F6BBC0": {
741
742
  "Type": "AWS::EC2::RouteTable",
742
743
  "Properties": {
743
- "VpcId": {
744
- "Ref": "Vpc8378EB38"
745
- },
746
744
  "Tags": [
747
745
  {
748
746
  "Key": "Name",
749
- "Value": "privateApiNewResources/Vpc/isolatedSubnet3"
747
+ "Value": "alblam-privateApiNewResources/Vpc/isolatedSubnet3"
750
748
  }
751
- ]
749
+ ],
750
+ "VpcId": {
751
+ "Ref": "Vpc8378EB38"
752
+ }
752
753
  }
753
754
  },
754
755
  "VpcisolatedSubnet3RouteTableAssociationDC010BEB": {
@@ -780,7 +781,7 @@
780
781
  "Tags": [
781
782
  {
782
783
  "Key": "Name",
783
- "Value": "privateApiNewResources/Vpc"
784
+ "Value": "alblam-privateApiNewResources/Vpc/FlowLog"
784
785
  }
785
786
  ]
786
787
  }
@@ -832,7 +833,7 @@
832
833
  "Tags": [
833
834
  {
834
835
  "Key": "Name",
835
- "Value": "privateApiNewResources/Vpc"
836
+ "Value": "alblam-privateApiNewResources/Vpc/FlowLog"
836
837
  }
837
838
  ]
838
839
  },
@@ -852,11 +853,6 @@
852
853
  "VpcFlowLog8FF33A73": {
853
854
  "Type": "AWS::EC2::FlowLog",
854
855
  "Properties": {
855
- "ResourceId": {
856
- "Ref": "Vpc8378EB38"
857
- },
858
- "ResourceType": "VPC",
859
- "TrafficType": "ALL",
860
856
  "DeliverLogsPermissionArn": {
861
857
  "Fn::GetAtt": [
862
858
  "VpcFlowLogIAMRole6A475D41",
@@ -867,12 +863,17 @@
867
863
  "LogGroupName": {
868
864
  "Ref": "VpcFlowLogLogGroup7B5C56B9"
869
865
  },
866
+ "ResourceId": {
867
+ "Ref": "Vpc8378EB38"
868
+ },
869
+ "ResourceType": "VPC",
870
870
  "Tags": [
871
871
  {
872
872
  "Key": "Name",
873
- "Value": "privateApiNewResources/Vpc"
873
+ "Value": "alblam-privateApiNewResources/Vpc/FlowLog"
874
874
  }
875
- ]
875
+ ],
876
+ "TrafficType": "ALL"
876
877
  }
877
878
  },
878
879
  "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
@@ -904,18 +905,18 @@
904
905
  "S3Bucket": {
905
906
  "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1"
906
907
  },
907
- "S3Key": "e57c1acaa363d7d2b81736776007a7091bc73dff4aeb8135627c4511a51e7dca.zip"
908
+ "S3Key": "b7f33614a69548d6bafe224d751a7ef238cde19097415e553fe8b63a4c8fd8a6.zip"
908
909
  },
909
910
  "Timeout": 900,
910
911
  "MemorySize": 128,
911
- "Handler": "__entrypoint__.handler",
912
+ "Handler": "index.handler",
912
913
  "Role": {
913
914
  "Fn::GetAtt": [
914
915
  "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
915
916
  "Arn"
916
917
  ]
917
918
  },
918
- "Runtime": "nodejs16.x",
919
+ "Runtime": "nodejs18.x",
919
920
  "Description": {
920
921
  "Fn::Join": [
921
922
  "",
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ // Imports
16
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
17
+ const lib_1 = require("../lib");
18
+ const core_1 = require("@aws-solutions-constructs/core");
19
+ const lambda = require("aws-cdk-lib/aws-lambda");
20
+ const defaults = require("@aws-solutions-constructs/core");
21
+ // Note: All integration tests for alb are for HTTP APIs, as certificates require
22
+ // validation through DNS and email. This validation is impossible during our integration
23
+ // tests and the stack will fail to launch with an unvalidated certificate.
24
+ // Setup
25
+ const app = new aws_cdk_lib_1.App();
26
+ const stack = new aws_cdk_lib_1.Stack(app, core_1.generateIntegStackName(__filename), {
27
+ env: { account: aws_cdk_lib_1.Aws.ACCOUNT_ID, region: 'us-east-1' },
28
+ });
29
+ stack.templateOptions.description = 'Integration Test for HTTP API with a new function and ALB';
30
+ const props = {
31
+ lambdaFunctionProps: {
32
+ code: lambda.Code.fromAsset(`${__dirname}/lambda`),
33
+ runtime: lambda.Runtime.NODEJS_16_X,
34
+ handler: 'index.handler'
35
+ },
36
+ listenerProps: {
37
+ protocol: 'HTTP'
38
+ },
39
+ publicApi: false,
40
+ albLoggingBucketProps: {
41
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
42
+ autoDeleteObjects: true
43
+ }
44
+ };
45
+ const albToLambda = new lib_1.AlbToLambda(stack, 'test-one', props);
46
+ defaults.addCfnSuppressRules(albToLambda.listener, [
47
+ { id: 'W56', reason: 'All integration tests must be HTTP because of certificate limitations.' },
48
+ ]);
49
+ const newSecurityGroup = albToLambda.loadBalancer.connections.securityGroups[0].node.defaultChild;
50
+ defaults.addCfnSuppressRules(newSecurityGroup, [
51
+ { id: 'W29', reason: 'CDK created rule that blocks all traffic.' },
52
+ { id: 'W2', reason: 'Rule does not apply for ELB.' },
53
+ { id: 'W9', reason: 'Rule does not apply for ELB.' }
54
+ ]);
55
+ defaults.suppressAutoDeleteHandlerWarnings(stack);
56
+ // Synth
57
+ app.synth();
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuYWxibGFtLXByaXZhdGVBcGlOZXdSZXNvdXJjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZy5hbGJsYW0tcHJpdmF0ZUFwaU5ld1Jlc291cmNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBRUgsVUFBVTtBQUNWLDZDQUE2RDtBQUM3RCxnQ0FBdUQ7QUFDdkQseURBQXdFO0FBQ3hFLGlEQUFpRDtBQUNqRCwyREFBMkQ7QUFHM0QsaUZBQWlGO0FBQ2pGLHlGQUF5RjtBQUN6RiwyRUFBMkU7QUFFM0UsUUFBUTtBQUNSLE1BQU0sR0FBRyxHQUFHLElBQUksaUJBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsNkJBQXNCLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDL0QsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGlCQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUU7Q0FDdEQsQ0FBQyxDQUFDO0FBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsMkRBQTJELENBQUM7QUFFaEcsTUFBTSxLQUFLLEdBQXFCO0lBQzlCLG1CQUFtQixFQUFFO1FBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsU0FBUyxDQUFDO1FBQ2xELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7UUFDbkMsT0FBTyxFQUFFLGVBQWU7S0FDekI7SUFDRCxhQUFhLEVBQUU7UUFDYixRQUFRLEVBQUUsTUFBTTtLQUNqQjtJQUNELFNBQVMsRUFBRSxLQUFLO0lBQ2hCLHFCQUFxQixFQUFFO1FBQ3JCLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87UUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtLQUN4QjtDQUNGLENBQUM7QUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLGlCQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUU5RCxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtJQUNqRCxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLHdFQUF3RSxFQUFFO0NBQ2hHLENBQUMsQ0FBQztBQUVILE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFnQyxDQUFDO0FBQ3RILFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRTtJQUM3QyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLDJDQUEyQyxFQUFDO0lBQ2pFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsOEJBQThCLEVBQUM7SUFDbkQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSw4QkFBOEIsRUFBQztDQUNwRCxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsaUNBQWlDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEQsUUFBUTtBQUNSLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IEF3cywgQXBwLCBTdGFjaywgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQWxiVG9MYW1iZGEsIEFsYlRvTGFtYmRhUHJvcHMgfSBmcm9tIFwiLi4vbGliXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUludGVnU3RhY2tOYW1lIH0gZnJvbSAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9jb3JlJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5pbXBvcnQgeyBDZm5TZWN1cml0eUdyb3VwIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcblxuLy8gTm90ZTogQWxsIGludGVncmF0aW9uIHRlc3RzIGZvciBhbGIgYXJlIGZvciBIVFRQIEFQSXMsIGFzIGNlcnRpZmljYXRlcyByZXF1aXJlXG4vLyB2YWxpZGF0aW9uIHRocm91Z2ggRE5TIGFuZCBlbWFpbC4gVGhpcyB2YWxpZGF0aW9uIGlzIGltcG9zc2libGUgZHVyaW5nIG91ciBpbnRlZ3JhdGlvblxuLy8gdGVzdHMgYW5kIHRoZSBzdGFjayB3aWxsIGZhaWwgdG8gbGF1bmNoIHdpdGggYW4gdW52YWxpZGF0ZWQgY2VydGlmaWNhdGUuXG5cbi8vIFNldHVwXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsIGdlbmVyYXRlSW50ZWdTdGFja05hbWUoX19maWxlbmFtZSksIHtcbiAgZW52OiB7IGFjY291bnQ6IEF3cy5BQ0NPVU5UX0lELCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG59KTtcbnN0YWNrLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiA9ICdJbnRlZ3JhdGlvbiBUZXN0IGZvciBIVFRQIEFQSSB3aXRoIGEgbmV3IGZ1bmN0aW9uIGFuZCBBTEInO1xuXG5jb25zdCBwcm9wczogQWxiVG9MYW1iZGFQcm9wcyA9IHtcbiAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJ1xuICB9LFxuICBsaXN0ZW5lclByb3BzOiB7XG4gICAgcHJvdG9jb2w6ICdIVFRQJ1xuICB9LFxuICBwdWJsaWNBcGk6IGZhbHNlLFxuICBhbGJMb2dnaW5nQnVja2V0UHJvcHM6IHtcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWVcbiAgfVxufTtcbmNvbnN0IGFsYlRvTGFtYmRhID0gbmV3IEFsYlRvTGFtYmRhKHN0YWNrLCAndGVzdC1vbmUnLCBwcm9wcyk7XG5cbmRlZmF1bHRzLmFkZENmblN1cHByZXNzUnVsZXMoYWxiVG9MYW1iZGEubGlzdGVuZXIsIFtcbiAgeyBpZDogJ1c1NicsIHJlYXNvbjogJ0FsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBtdXN0IGJlIEhUVFAgYmVjYXVzZSBvZiBjZXJ0aWZpY2F0ZSBsaW1pdGF0aW9ucy4nIH0sXG5dKTtcblxuY29uc3QgbmV3U2VjdXJpdHlHcm91cCA9IGFsYlRvTGFtYmRhLmxvYWRCYWxhbmNlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwc1swXS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5TZWN1cml0eUdyb3VwO1xuZGVmYXVsdHMuYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdTZWN1cml0eUdyb3VwLCBbXG4gIHsgaWQ6ICdXMjknLCByZWFzb246ICdDREsgY3JlYXRlZCBydWxlIHRoYXQgYmxvY2tzIGFsbCB0cmFmZmljLid9LFxuICB7IGlkOiAnVzInLCByZWFzb246ICdSdWxlIGRvZXMgbm90IGFwcGx5IGZvciBFTEIuJ30sXG4gIHsgaWQ6ICdXOScsIHJlYXNvbjogJ1J1bGUgZG9lcyBub3QgYXBwbHkgZm9yIEVMQi4nfVxuXSk7XG5cbmRlZmF1bHRzLnN1cHByZXNzQXV0b0RlbGV0ZUhhbmRsZXJXYXJuaW5ncyhzdGFjayk7XG4vLyBTeW50aFxuYXBwLnN5bnRoKCk7XG4iXX0=