@aws-solutions-constructs/aws-alb-lambda 2.45.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 (23) hide show
  1. package/.jsii +5 -5
  2. package/lib/index.js +1 -1
  3. package/package.json +6 -6
  4. package/test/{integ.privateApiExistingResources.expected.json → integ.alblam-privateApiExistingResources.expected.json} +27 -26
  5. package/test/integ.alblam-privateApiExistingResources.js +80 -0
  6. package/test/{integ.privateApiNewResources.expected.json → integ.alblam-privateApiNewResources.expected.json} +14 -13
  7. package/test/integ.alblam-privateApiNewResources.js +58 -0
  8. package/test/{integ.publicApiExistingResources.expected.json → integ.alblam-publicApiExistingResources.expected.json} +27 -26
  9. package/test/integ.alblam-publicApiExistingResources.js +88 -0
  10. package/test/{integ.publicApiNewResources.expected.json → integ.alblam-publicApiNewResources.expected.json} +27 -26
  11. package/test/integ.alblam-publicApiNewResources.js +58 -0
  12. package/test/{integ.twoTargets.expected.json → integ.alblam-twoTargets.expected.json} +28 -27
  13. package/test/integ.alblam-twoTargets.js +74 -0
  14. package/test/integ.privateApiExistingResources.js +0 -80
  15. package/test/integ.privateApiNewResources.js +0 -58
  16. package/test/integ.publicApiExistingResources.js +0 -88
  17. package/test/integ.publicApiNewResources.js +0 -58
  18. package/test/integ.twoTargets.js +0 -74
  19. /package/test/{integ.privateApiExistingResources.d.ts → integ.alblam-privateApiExistingResources.d.ts} +0 -0
  20. /package/test/{integ.privateApiNewResources.d.ts → integ.alblam-privateApiNewResources.d.ts} +0 -0
  21. /package/test/{integ.publicApiExistingResources.d.ts → integ.alblam-publicApiExistingResources.d.ts} +0 -0
  22. /package/test/{integ.publicApiNewResources.d.ts → integ.alblam-publicApiNewResources.d.ts} +0 -0
  23. /package/test/{integ.twoTargets.d.ts → integ.alblam-twoTargets.d.ts} +0 -0
@@ -11,7 +11,7 @@
11
11
  "Tags": [
12
12
  {
13
13
  "Key": "Name",
14
- "Value": "publicApiExistingResources/Vpc"
14
+ "Value": "alblam-publicApiExistingResources/Vpc"
15
15
  }
16
16
  ]
17
17
  }
@@ -33,7 +33,7 @@
33
33
  },
34
34
  {
35
35
  "Key": "Name",
36
- "Value": "publicApiExistingResources/Vpc/PublicSubnet1"
36
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet1"
37
37
  }
38
38
  ],
39
39
  "VpcId": {
@@ -57,7 +57,7 @@
57
57
  "Tags": [
58
58
  {
59
59
  "Key": "Name",
60
- "Value": "publicApiExistingResources/Vpc/PublicSubnet1"
60
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet1"
61
61
  }
62
62
  ],
63
63
  "VpcId": {
@@ -98,7 +98,7 @@
98
98
  "Tags": [
99
99
  {
100
100
  "Key": "Name",
101
- "Value": "publicApiExistingResources/Vpc/PublicSubnet1"
101
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet1"
102
102
  }
103
103
  ]
104
104
  }
@@ -118,7 +118,7 @@
118
118
  "Tags": [
119
119
  {
120
120
  "Key": "Name",
121
- "Value": "publicApiExistingResources/Vpc/PublicSubnet1"
121
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet1"
122
122
  }
123
123
  ]
124
124
  },
@@ -144,7 +144,7 @@
144
144
  },
145
145
  {
146
146
  "Key": "Name",
147
- "Value": "publicApiExistingResources/Vpc/PublicSubnet2"
147
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet2"
148
148
  }
149
149
  ],
150
150
  "VpcId": {
@@ -168,7 +168,7 @@
168
168
  "Tags": [
169
169
  {
170
170
  "Key": "Name",
171
- "Value": "publicApiExistingResources/Vpc/PublicSubnet2"
171
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet2"
172
172
  }
173
173
  ],
174
174
  "VpcId": {
@@ -209,7 +209,7 @@
209
209
  "Tags": [
210
210
  {
211
211
  "Key": "Name",
212
- "Value": "publicApiExistingResources/Vpc/PublicSubnet2"
212
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet2"
213
213
  }
214
214
  ]
215
215
  }
@@ -229,7 +229,7 @@
229
229
  "Tags": [
230
230
  {
231
231
  "Key": "Name",
232
- "Value": "publicApiExistingResources/Vpc/PublicSubnet2"
232
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet2"
233
233
  }
234
234
  ]
235
235
  },
@@ -255,7 +255,7 @@
255
255
  },
256
256
  {
257
257
  "Key": "Name",
258
- "Value": "publicApiExistingResources/Vpc/PublicSubnet3"
258
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet3"
259
259
  }
260
260
  ],
261
261
  "VpcId": {
@@ -279,7 +279,7 @@
279
279
  "Tags": [
280
280
  {
281
281
  "Key": "Name",
282
- "Value": "publicApiExistingResources/Vpc/PublicSubnet3"
282
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet3"
283
283
  }
284
284
  ],
285
285
  "VpcId": {
@@ -320,7 +320,7 @@
320
320
  "Tags": [
321
321
  {
322
322
  "Key": "Name",
323
- "Value": "publicApiExistingResources/Vpc/PublicSubnet3"
323
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet3"
324
324
  }
325
325
  ]
326
326
  }
@@ -340,7 +340,7 @@
340
340
  "Tags": [
341
341
  {
342
342
  "Key": "Name",
343
- "Value": "publicApiExistingResources/Vpc/PublicSubnet3"
343
+ "Value": "alblam-publicApiExistingResources/Vpc/PublicSubnet3"
344
344
  }
345
345
  ]
346
346
  },
@@ -366,7 +366,7 @@
366
366
  },
367
367
  {
368
368
  "Key": "Name",
369
- "Value": "publicApiExistingResources/Vpc/PrivateSubnet1"
369
+ "Value": "alblam-publicApiExistingResources/Vpc/PrivateSubnet1"
370
370
  }
371
371
  ],
372
372
  "VpcId": {
@@ -380,7 +380,7 @@
380
380
  "Tags": [
381
381
  {
382
382
  "Key": "Name",
383
- "Value": "publicApiExistingResources/Vpc/PrivateSubnet1"
383
+ "Value": "alblam-publicApiExistingResources/Vpc/PrivateSubnet1"
384
384
  }
385
385
  ],
386
386
  "VpcId": {
@@ -428,7 +428,7 @@
428
428
  },
429
429
  {
430
430
  "Key": "Name",
431
- "Value": "publicApiExistingResources/Vpc/PrivateSubnet2"
431
+ "Value": "alblam-publicApiExistingResources/Vpc/PrivateSubnet2"
432
432
  }
433
433
  ],
434
434
  "VpcId": {
@@ -442,7 +442,7 @@
442
442
  "Tags": [
443
443
  {
444
444
  "Key": "Name",
445
- "Value": "publicApiExistingResources/Vpc/PrivateSubnet2"
445
+ "Value": "alblam-publicApiExistingResources/Vpc/PrivateSubnet2"
446
446
  }
447
447
  ],
448
448
  "VpcId": {
@@ -490,7 +490,7 @@
490
490
  },
491
491
  {
492
492
  "Key": "Name",
493
- "Value": "publicApiExistingResources/Vpc/PrivateSubnet3"
493
+ "Value": "alblam-publicApiExistingResources/Vpc/PrivateSubnet3"
494
494
  }
495
495
  ],
496
496
  "VpcId": {
@@ -504,7 +504,7 @@
504
504
  "Tags": [
505
505
  {
506
506
  "Key": "Name",
507
- "Value": "publicApiExistingResources/Vpc/PrivateSubnet3"
507
+ "Value": "alblam-publicApiExistingResources/Vpc/PrivateSubnet3"
508
508
  }
509
509
  ],
510
510
  "VpcId": {
@@ -541,7 +541,7 @@
541
541
  "Tags": [
542
542
  {
543
543
  "Key": "Name",
544
- "Value": "publicApiExistingResources/Vpc"
544
+ "Value": "alblam-publicApiExistingResources/Vpc"
545
545
  }
546
546
  ]
547
547
  }
@@ -575,7 +575,7 @@
575
575
  "Tags": [
576
576
  {
577
577
  "Key": "Name",
578
- "Value": "publicApiExistingResources/Vpc/FlowLog"
578
+ "Value": "alblam-publicApiExistingResources/Vpc/FlowLog"
579
579
  }
580
580
  ]
581
581
  }
@@ -627,7 +627,7 @@
627
627
  "Tags": [
628
628
  {
629
629
  "Key": "Name",
630
- "Value": "publicApiExistingResources/Vpc/FlowLog"
630
+ "Value": "alblam-publicApiExistingResources/Vpc/FlowLog"
631
631
  }
632
632
  ]
633
633
  },
@@ -664,7 +664,7 @@
664
664
  "Tags": [
665
665
  {
666
666
  "Key": "Name",
667
- "Value": "publicApiExistingResources/Vpc/FlowLog"
667
+ "Value": "alblam-publicApiExistingResources/Vpc/FlowLog"
668
668
  }
669
669
  ],
670
670
  "TrafficType": "ALL"
@@ -673,7 +673,7 @@
673
673
  "lambdasg93781054": {
674
674
  "Type": "AWS::EC2::SecurityGroup",
675
675
  "Properties": {
676
- "GroupDescription": "publicApiExistingResources/lambda-sg",
676
+ "GroupDescription": "alblam-publicApiExistingResources/lambda-sg",
677
677
  "SecurityGroupEgress": [
678
678
  {
679
679
  "CidrIp": "255.255.255.255/32",
@@ -949,7 +949,7 @@
949
949
  "existingalbalbSecurityGroupC8DD2920": {
950
950
  "Type": "AWS::EC2::SecurityGroup",
951
951
  "Properties": {
952
- "GroupDescription": "Automatically created Security Group for ELB publicApiExistingResourcesexistingalbalb2415E979",
952
+ "GroupDescription": "Automatically created Security Group for ELB alblampublicApiExistingResourcesexistingalbalb1EA1EAA3",
953
953
  "SecurityGroupEgress": [
954
954
  {
955
955
  "CidrIp": "255.255.255.255/32",
@@ -1081,6 +1081,7 @@
1081
1081
  },
1082
1082
  {
1083
1083
  "Action": [
1084
+ "s3:PutBucketPolicy",
1084
1085
  "s3:GetBucket*",
1085
1086
  "s3:List*",
1086
1087
  "s3:DeleteObject*"
@@ -1249,7 +1250,7 @@
1249
1250
  "S3Bucket": {
1250
1251
  "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1"
1251
1252
  },
1252
- "S3Key": "5194f926380567b6fdffc61629afdad2afc818614cb227df45e499c69db163a7.zip"
1253
+ "S3Key": "b7f33614a69548d6bafe224d751a7ef238cde19097415e553fe8b63a4c8fd8a6.zip"
1253
1254
  },
1254
1255
  "Timeout": 900,
1255
1256
  "MemorySize": 128,
@@ -0,0 +1,88 @@
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 =
31
+ "Integration Test for public HTTP API with a existing function and ALB";
32
+ const myVpc = defaults.getTestVpc(stack);
33
+ const testSg = new aws_ec2_1.SecurityGroup(stack, "lambda-sg", {
34
+ vpc: myVpc,
35
+ allowAllOutbound: false,
36
+ });
37
+ const lambdaFunction = defaults.buildLambdaFunction(stack, {
38
+ lambdaFunctionProps: {
39
+ code: lambda.Code.fromAsset(`${__dirname}/lambda`),
40
+ runtime: lambda.Runtime.NODEJS_16_X,
41
+ handler: "index.handler",
42
+ vpc: myVpc,
43
+ securityGroups: [testSg],
44
+ },
45
+ });
46
+ const loadBalancer = defaults.ObtainAlb(stack, "existing-alb", {
47
+ vpc: myVpc,
48
+ publicApi: false,
49
+ loadBalancerProps: {
50
+ internetFacing: false,
51
+ vpc: myVpc,
52
+ },
53
+ logAccessLogs: true,
54
+ loggingBucketProps: {
55
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
56
+ autoDeleteObjects: true,
57
+ }
58
+ });
59
+ const props = {
60
+ existingLambdaObj: lambdaFunction,
61
+ existingLoadBalancerObj: loadBalancer,
62
+ existingVpc: myVpc,
63
+ listenerProps: {
64
+ protocol: "HTTP",
65
+ },
66
+ publicApi: true,
67
+ };
68
+ const albToLambda = new lib_1.AlbToLambda(stack, "test-one", props);
69
+ defaults.addCfnSuppressRules(albToLambda.listener, [
70
+ {
71
+ id: "W56",
72
+ reason: "All integration tests must be HTTP because of certificate limitations.",
73
+ },
74
+ ]);
75
+ const newSecurityGroup = albToLambda.loadBalancer.connections.securityGroups[0]
76
+ .node.defaultChild;
77
+ defaults.addCfnSuppressRules(newSecurityGroup, [
78
+ { id: "W29", reason: "CDK created rule that blocks all traffic." },
79
+ { id: "W2", reason: "Rule does not apply for ELB." },
80
+ { id: "W9", reason: "Rule does not apply for ELB." },
81
+ ]);
82
+ defaults.addCfnSuppressRules(testSg, [
83
+ { id: "W29", reason: "CDK created rule that blocks all traffic." },
84
+ ]);
85
+ defaults.suppressAutoDeleteHandlerWarnings(stack);
86
+ // Synth
87
+ app.synth();
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuYWxibGFtLXB1YmxpY0FwaUV4aXN0aW5nUmVzb3VyY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcuYWxibGFtLXB1YmxpY0FwaUV4aXN0aW5nUmVzb3VyY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1YsNkNBQTZEO0FBQzdELGdDQUF1RDtBQUN2RCx5REFBd0U7QUFDeEUsaURBQWlEO0FBQ2pELDJEQUEyRDtBQUMzRCxpREFBc0U7QUFFdEUsaUZBQWlGO0FBQ2pGLHlGQUF5RjtBQUN6RiwyRUFBMkU7QUFFM0UsUUFBUTtBQUNSLE1BQU0sR0FBRyxHQUFHLElBQUksaUJBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsNkJBQXNCLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDL0QsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGlCQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUU7Q0FDdEQsQ0FBQyxDQUFDO0FBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFXO0lBQy9CLHVFQUF1RSxDQUFDO0FBRTFFLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFekMsTUFBTSxNQUFNLEdBQUcsSUFBSSx1QkFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUU7SUFDbkQsR0FBRyxFQUFFLEtBQUs7SUFDVixnQkFBZ0IsRUFBRSxLQUFLO0NBQ3hCLENBQUMsQ0FBQztBQUVILE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUU7SUFDekQsbUJBQW1CLEVBQUU7UUFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxTQUFTLENBQUM7UUFDbEQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVztRQUNuQyxPQUFPLEVBQUUsZUFBZTtRQUN4QixHQUFHLEVBQUUsS0FBSztRQUNWLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQztLQUN6QjtDQUNGLENBQUMsQ0FBQztBQUVILE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtJQUM3RCxHQUFHLEVBQUUsS0FBSztJQUNWLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLGlCQUFpQixFQUFFO1FBQ2pCLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLEdBQUcsRUFBRSxLQUFLO0tBQ1g7SUFDRCxhQUFhLEVBQUUsSUFBSTtJQUNuQixrQkFBa0IsRUFBRTtRQUNsQixhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1FBQ3BDLGlCQUFpQixFQUFFLElBQUk7S0FDeEI7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLEtBQUssR0FBcUI7SUFDOUIsaUJBQWlCLEVBQUUsY0FBYztJQUNqQyx1QkFBdUIsRUFBRSxZQUFZO0lBQ3JDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLGFBQWEsRUFBRTtRQUNiLFFBQVEsRUFBRSxNQUFNO0tBQ2pCO0lBQ0QsU0FBUyxFQUFFLElBQUk7Q0FDaEIsQ0FBQztBQUNGLE1BQU0sV0FBVyxHQUFHLElBQUksaUJBQVcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRTlELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO0lBQ2pEO1FBQ0UsRUFBRSxFQUFFLEtBQUs7UUFDVCxNQUFNLEVBQ0osd0VBQXdFO0tBQzNFO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0tBQzVFLElBQUksQ0FBQyxZQUFnQyxDQUFDO0FBQ3pDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRTtJQUM3QyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLDJDQUEyQyxFQUFFO0lBQ2xFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsOEJBQThCLEVBQUU7SUFDcEQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSw4QkFBOEIsRUFBRTtDQUNyRCxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFO0lBQ25DLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsMkNBQTJDLEVBQUU7Q0FDbkUsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xELFFBQVE7QUFDUixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgeyBBd3MsIEFwcCwgU3RhY2ssIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEFsYlRvTGFtYmRhLCBBbGJUb0xhbWJkYVByb3BzIH0gZnJvbSBcIi4uL2xpYlwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZSB9IGZyb20gXCJAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmVcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSBcIkBhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZVwiO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cCwgQ2ZuU2VjdXJpdHlHcm91cCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5cbi8vIE5vdGU6IEFsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgYWxiIGFyZSBmb3IgSFRUUCBBUElzLCBhcyBjZXJ0aWZpY2F0ZXMgcmVxdWlyZVxuLy8gdmFsaWRhdGlvbiB0aHJvdWdoIEROUyBhbmQgZW1haWwuIFRoaXMgdmFsaWRhdGlvbiBpcyBpbXBvc3NpYmxlIGR1cmluZyBvdXIgaW50ZWdyYXRpb25cbi8vIHRlc3RzIGFuZCB0aGUgc3RhY2sgd2lsbCBmYWlsIHRvIGxhdW5jaCB3aXRoIGFuIHVudmFsaWRhdGVkIGNlcnRpZmljYXRlLlxuXG4vLyBTZXR1cFxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKF9fZmlsZW5hbWUpLCB7XG4gIGVudjogeyBhY2NvdW50OiBBd3MuQUNDT1VOVF9JRCwgcmVnaW9uOiBcInVzLWVhc3QtMVwiIH0sXG59KTtcbnN0YWNrLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiA9XG4gIFwiSW50ZWdyYXRpb24gVGVzdCBmb3IgcHVibGljIEhUVFAgQVBJIHdpdGggYSBleGlzdGluZyBmdW5jdGlvbiBhbmQgQUxCXCI7XG5cbmNvbnN0IG15VnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG5cbmNvbnN0IHRlc3RTZyA9IG5ldyBTZWN1cml0eUdyb3VwKHN0YWNrLCBcImxhbWJkYS1zZ1wiLCB7XG4gIHZwYzogbXlWcGMsXG4gIGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlLFxufSk7XG5cbmNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gZGVmYXVsdHMuYnVpbGRMYW1iZGFGdW5jdGlvbihzdGFjaywge1xuICBsYW1iZGFGdW5jdGlvblByb3BzOiB7XG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgdnBjOiBteVZwYyxcbiAgICBzZWN1cml0eUdyb3VwczogW3Rlc3RTZ10sXG4gIH0sXG59KTtcblxuY29uc3QgbG9hZEJhbGFuY2VyID0gZGVmYXVsdHMuT2J0YWluQWxiKHN0YWNrLCBcImV4aXN0aW5nLWFsYlwiLCB7XG4gIHZwYzogbXlWcGMsXG4gIHB1YmxpY0FwaTogZmFsc2UsXG4gIGxvYWRCYWxhbmNlclByb3BzOiB7XG4gICAgaW50ZXJuZXRGYWNpbmc6IGZhbHNlLFxuICAgIHZwYzogbXlWcGMsXG4gIH0sXG4gIGxvZ0FjY2Vzc0xvZ3M6IHRydWUsXG4gIGxvZ2dpbmdCdWNrZXRQcm9wczoge1xuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgfVxufSk7XG5cbmNvbnN0IHByb3BzOiBBbGJUb0xhbWJkYVByb3BzID0ge1xuICBleGlzdGluZ0xhbWJkYU9iajogbGFtYmRhRnVuY3Rpb24sXG4gIGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqOiBsb2FkQmFsYW5jZXIsXG4gIGV4aXN0aW5nVnBjOiBteVZwYyxcbiAgbGlzdGVuZXJQcm9wczoge1xuICAgIHByb3RvY29sOiBcIkhUVFBcIixcbiAgfSxcbiAgcHVibGljQXBpOiB0cnVlLFxufTtcbmNvbnN0IGFsYlRvTGFtYmRhID0gbmV3IEFsYlRvTGFtYmRhKHN0YWNrLCBcInRlc3Qtb25lXCIsIHByb3BzKTtcblxuZGVmYXVsdHMuYWRkQ2ZuU3VwcHJlc3NSdWxlcyhhbGJUb0xhbWJkYS5saXN0ZW5lciwgW1xuICB7XG4gICAgaWQ6IFwiVzU2XCIsXG4gICAgcmVhc29uOlxuICAgICAgXCJBbGwgaW50ZWdyYXRpb24gdGVzdHMgbXVzdCBiZSBIVFRQIGJlY2F1c2Ugb2YgY2VydGlmaWNhdGUgbGltaXRhdGlvbnMuXCIsXG4gIH0sXG5dKTtcblxuY29uc3QgbmV3U2VjdXJpdHlHcm91cCA9IGFsYlRvTGFtYmRhLmxvYWRCYWxhbmNlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwc1swXVxuICAubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuU2VjdXJpdHlHcm91cDtcbmRlZmF1bHRzLmFkZENmblN1cHByZXNzUnVsZXMobmV3U2VjdXJpdHlHcm91cCwgW1xuICB7IGlkOiBcIlcyOVwiLCByZWFzb246IFwiQ0RLIGNyZWF0ZWQgcnVsZSB0aGF0IGJsb2NrcyBhbGwgdHJhZmZpYy5cIiB9LFxuICB7IGlkOiBcIlcyXCIsIHJlYXNvbjogXCJSdWxlIGRvZXMgbm90IGFwcGx5IGZvciBFTEIuXCIgfSxcbiAgeyBpZDogXCJXOVwiLCByZWFzb246IFwiUnVsZSBkb2VzIG5vdCBhcHBseSBmb3IgRUxCLlwiIH0sXG5dKTtcblxuZGVmYXVsdHMuYWRkQ2ZuU3VwcHJlc3NSdWxlcyh0ZXN0U2csIFtcbiAgeyBpZDogXCJXMjlcIiwgcmVhc29uOiBcIkNESyBjcmVhdGVkIHJ1bGUgdGhhdCBibG9ja3MgYWxsIHRyYWZmaWMuXCIgfSxcbl0pO1xuXG5kZWZhdWx0cy5zdXBwcmVzc0F1dG9EZWxldGVIYW5kbGVyV2FybmluZ3Moc3RhY2spO1xuLy8gU3ludGhcbmFwcC5zeW50aCgpO1xuIl19
@@ -61,7 +61,7 @@
61
61
  "testonetestonealbSecurityGroup4DED9E2A": {
62
62
  "Type": "AWS::EC2::SecurityGroup",
63
63
  "Properties": {
64
- "GroupDescription": "Automatically created Security Group for ELB publicApiNewResourcestestonetestonealb8536470B",
64
+ "GroupDescription": "Automatically created Security Group for ELB alblampublicApiNewResourcestestonetestonealbE07397A7",
65
65
  "SecurityGroupEgress": [
66
66
  {
67
67
  "CidrIp": "255.255.255.255/32",
@@ -193,6 +193,7 @@
193
193
  },
194
194
  {
195
195
  "Action": [
196
+ "s3:PutBucketPolicy",
196
197
  "s3:GetBucket*",
197
198
  "s3:List*",
198
199
  "s3:DeleteObject*"
@@ -435,7 +436,7 @@
435
436
  "testoneReplaceDefaultSecurityGroupsecuritygroupE46270FE": {
436
437
  "Type": "AWS::EC2::SecurityGroup",
437
438
  "Properties": {
438
- "GroupDescription": "publicApiNewResources/test-one/ReplaceDefaultSecurityGroup-security-group",
439
+ "GroupDescription": "alblam-publicApiNewResources/test-one/ReplaceDefaultSecurityGroup-security-group",
439
440
  "SecurityGroupEgress": [
440
441
  {
441
442
  "CidrIp": "0.0.0.0/0",
@@ -619,7 +620,7 @@
619
620
  "Tags": [
620
621
  {
621
622
  "Key": "Name",
622
- "Value": "publicApiNewResources/Vpc"
623
+ "Value": "alblam-publicApiNewResources/Vpc"
623
624
  }
624
625
  ]
625
626
  }
@@ -641,7 +642,7 @@
641
642
  },
642
643
  {
643
644
  "Key": "Name",
644
- "Value": "publicApiNewResources/Vpc/PublicSubnet1"
645
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet1"
645
646
  }
646
647
  ],
647
648
  "VpcId": {
@@ -665,7 +666,7 @@
665
666
  "Tags": [
666
667
  {
667
668
  "Key": "Name",
668
- "Value": "publicApiNewResources/Vpc/PublicSubnet1"
669
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet1"
669
670
  }
670
671
  ],
671
672
  "VpcId": {
@@ -706,7 +707,7 @@
706
707
  "Tags": [
707
708
  {
708
709
  "Key": "Name",
709
- "Value": "publicApiNewResources/Vpc/PublicSubnet1"
710
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet1"
710
711
  }
711
712
  ]
712
713
  }
@@ -726,7 +727,7 @@
726
727
  "Tags": [
727
728
  {
728
729
  "Key": "Name",
729
- "Value": "publicApiNewResources/Vpc/PublicSubnet1"
730
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet1"
730
731
  }
731
732
  ]
732
733
  },
@@ -752,7 +753,7 @@
752
753
  },
753
754
  {
754
755
  "Key": "Name",
755
- "Value": "publicApiNewResources/Vpc/PublicSubnet2"
756
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet2"
756
757
  }
757
758
  ],
758
759
  "VpcId": {
@@ -776,7 +777,7 @@
776
777
  "Tags": [
777
778
  {
778
779
  "Key": "Name",
779
- "Value": "publicApiNewResources/Vpc/PublicSubnet2"
780
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet2"
780
781
  }
781
782
  ],
782
783
  "VpcId": {
@@ -817,7 +818,7 @@
817
818
  "Tags": [
818
819
  {
819
820
  "Key": "Name",
820
- "Value": "publicApiNewResources/Vpc/PublicSubnet2"
821
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet2"
821
822
  }
822
823
  ]
823
824
  }
@@ -837,7 +838,7 @@
837
838
  "Tags": [
838
839
  {
839
840
  "Key": "Name",
840
- "Value": "publicApiNewResources/Vpc/PublicSubnet2"
841
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet2"
841
842
  }
842
843
  ]
843
844
  },
@@ -863,7 +864,7 @@
863
864
  },
864
865
  {
865
866
  "Key": "Name",
866
- "Value": "publicApiNewResources/Vpc/PublicSubnet3"
867
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet3"
867
868
  }
868
869
  ],
869
870
  "VpcId": {
@@ -887,7 +888,7 @@
887
888
  "Tags": [
888
889
  {
889
890
  "Key": "Name",
890
- "Value": "publicApiNewResources/Vpc/PublicSubnet3"
891
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet3"
891
892
  }
892
893
  ],
893
894
  "VpcId": {
@@ -928,7 +929,7 @@
928
929
  "Tags": [
929
930
  {
930
931
  "Key": "Name",
931
- "Value": "publicApiNewResources/Vpc/PublicSubnet3"
932
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet3"
932
933
  }
933
934
  ]
934
935
  }
@@ -948,7 +949,7 @@
948
949
  "Tags": [
949
950
  {
950
951
  "Key": "Name",
951
- "Value": "publicApiNewResources/Vpc/PublicSubnet3"
952
+ "Value": "alblam-publicApiNewResources/Vpc/PublicSubnet3"
952
953
  }
953
954
  ]
954
955
  },
@@ -974,7 +975,7 @@
974
975
  },
975
976
  {
976
977
  "Key": "Name",
977
- "Value": "publicApiNewResources/Vpc/PrivateSubnet1"
978
+ "Value": "alblam-publicApiNewResources/Vpc/PrivateSubnet1"
978
979
  }
979
980
  ],
980
981
  "VpcId": {
@@ -988,7 +989,7 @@
988
989
  "Tags": [
989
990
  {
990
991
  "Key": "Name",
991
- "Value": "publicApiNewResources/Vpc/PrivateSubnet1"
992
+ "Value": "alblam-publicApiNewResources/Vpc/PrivateSubnet1"
992
993
  }
993
994
  ],
994
995
  "VpcId": {
@@ -1036,7 +1037,7 @@
1036
1037
  },
1037
1038
  {
1038
1039
  "Key": "Name",
1039
- "Value": "publicApiNewResources/Vpc/PrivateSubnet2"
1040
+ "Value": "alblam-publicApiNewResources/Vpc/PrivateSubnet2"
1040
1041
  }
1041
1042
  ],
1042
1043
  "VpcId": {
@@ -1050,7 +1051,7 @@
1050
1051
  "Tags": [
1051
1052
  {
1052
1053
  "Key": "Name",
1053
- "Value": "publicApiNewResources/Vpc/PrivateSubnet2"
1054
+ "Value": "alblam-publicApiNewResources/Vpc/PrivateSubnet2"
1054
1055
  }
1055
1056
  ],
1056
1057
  "VpcId": {
@@ -1098,7 +1099,7 @@
1098
1099
  },
1099
1100
  {
1100
1101
  "Key": "Name",
1101
- "Value": "publicApiNewResources/Vpc/PrivateSubnet3"
1102
+ "Value": "alblam-publicApiNewResources/Vpc/PrivateSubnet3"
1102
1103
  }
1103
1104
  ],
1104
1105
  "VpcId": {
@@ -1112,7 +1113,7 @@
1112
1113
  "Tags": [
1113
1114
  {
1114
1115
  "Key": "Name",
1115
- "Value": "publicApiNewResources/Vpc/PrivateSubnet3"
1116
+ "Value": "alblam-publicApiNewResources/Vpc/PrivateSubnet3"
1116
1117
  }
1117
1118
  ],
1118
1119
  "VpcId": {
@@ -1149,7 +1150,7 @@
1149
1150
  "Tags": [
1150
1151
  {
1151
1152
  "Key": "Name",
1152
- "Value": "publicApiNewResources/Vpc"
1153
+ "Value": "alblam-publicApiNewResources/Vpc"
1153
1154
  }
1154
1155
  ]
1155
1156
  }
@@ -1183,7 +1184,7 @@
1183
1184
  "Tags": [
1184
1185
  {
1185
1186
  "Key": "Name",
1186
- "Value": "publicApiNewResources/Vpc/FlowLog"
1187
+ "Value": "alblam-publicApiNewResources/Vpc/FlowLog"
1187
1188
  }
1188
1189
  ]
1189
1190
  }
@@ -1235,7 +1236,7 @@
1235
1236
  "Tags": [
1236
1237
  {
1237
1238
  "Key": "Name",
1238
- "Value": "publicApiNewResources/Vpc/FlowLog"
1239
+ "Value": "alblam-publicApiNewResources/Vpc/FlowLog"
1239
1240
  }
1240
1241
  ]
1241
1242
  },
@@ -1272,7 +1273,7 @@
1272
1273
  "Tags": [
1273
1274
  {
1274
1275
  "Key": "Name",
1275
- "Value": "publicApiNewResources/Vpc/FlowLog"
1276
+ "Value": "alblam-publicApiNewResources/Vpc/FlowLog"
1276
1277
  }
1277
1278
  ],
1278
1279
  "TrafficType": "ALL"
@@ -1307,7 +1308,7 @@
1307
1308
  "S3Bucket": {
1308
1309
  "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1"
1309
1310
  },
1310
- "S3Key": "5194f926380567b6fdffc61629afdad2afc818614cb227df45e499c69db163a7.zip"
1311
+ "S3Key": "b7f33614a69548d6bafe224d751a7ef238cde19097415e553fe8b63a4c8fd8a6.zip"
1311
1312
  },
1312
1313
  "Timeout": 900,
1313
1314
  "MemorySize": 128,
@@ -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 public 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: true,
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuYWxibGFtLXB1YmxpY0FwaU5ld1Jlc291cmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVnLmFsYmxhbS1wdWJsaWNBcGlOZXdSZXNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILFVBQVU7QUFDViw2Q0FBNkQ7QUFDN0QsZ0NBQXVEO0FBQ3ZELHlEQUF3RTtBQUN4RSxpREFBaUQ7QUFDakQsMkRBQTJEO0FBRzNELGlGQUFpRjtBQUNqRix5RkFBeUY7QUFDekYsMkVBQTJFO0FBRTNFLFFBQVE7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLDZCQUFzQixDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQy9ELEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxpQkFBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO0NBQ3RELENBQUMsQ0FBQztBQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLGtFQUFrRSxDQUFDO0FBRXZHLE1BQU0sS0FBSyxHQUFxQjtJQUM5QixtQkFBbUIsRUFBRTtRQUNuQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLFNBQVMsQ0FBQztRQUNsRCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1FBQ25DLE9BQU8sRUFBRSxlQUFlO0tBQ3pCO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsUUFBUSxFQUFFLE1BQU07S0FDakI7SUFDRCxTQUFTLEVBQUUsSUFBSTtJQUNmLHFCQUFxQixFQUFFO1FBQ3JCLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87UUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtLQUN4QjtDQUNGLENBQUM7QUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLGlCQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUU5RCxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtJQUNqRCxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLHdFQUF3RSxFQUFFO0NBQ2hHLENBQUMsQ0FBQztBQUVILE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFnQyxDQUFDO0FBQ3RILFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRTtJQUM3QyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLDJDQUEyQyxFQUFDO0lBQ2pFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsOEJBQThCLEVBQUM7SUFDbkQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSw4QkFBOEIsRUFBQztDQUNwRCxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsaUNBQWlDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEQsUUFBUTtBQUNSLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IEF3cywgQXBwLCBTdGFjaywgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQWxiVG9MYW1iZGEsIEFsYlRvTGFtYmRhUHJvcHMgfSBmcm9tIFwiLi4vbGliXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUludGVnU3RhY2tOYW1lIH0gZnJvbSAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9jb3JlJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5pbXBvcnQgeyBDZm5TZWN1cml0eUdyb3VwIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcblxuLy8gTm90ZTogQWxsIGludGVncmF0aW9uIHRlc3RzIGZvciBhbGIgYXJlIGZvciBIVFRQIEFQSXMsIGFzIGNlcnRpZmljYXRlcyByZXF1aXJlXG4vLyB2YWxpZGF0aW9uIHRocm91Z2ggRE5TIGFuZCBlbWFpbC4gVGhpcyB2YWxpZGF0aW9uIGlzIGltcG9zc2libGUgZHVyaW5nIG91ciBpbnRlZ3JhdGlvblxuLy8gdGVzdHMgYW5kIHRoZSBzdGFjayB3aWxsIGZhaWwgdG8gbGF1bmNoIHdpdGggYW4gdW52YWxpZGF0ZWQgY2VydGlmaWNhdGUuXG5cbi8vIFNldHVwXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsIGdlbmVyYXRlSW50ZWdTdGFja05hbWUoX19maWxlbmFtZSksIHtcbiAgZW52OiB7IGFjY291bnQ6IEF3cy5BQ0NPVU5UX0lELCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG59KTtcbnN0YWNrLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiA9ICdJbnRlZ3JhdGlvbiBUZXN0IGZvciBwdWJsaWMgSFRUUCBBUEkgd2l0aCBhIG5ldyBmdW5jdGlvbiBhbmQgQUxCJztcblxuY29uc3QgcHJvcHM6IEFsYlRvTGFtYmRhUHJvcHMgPSB7XG4gIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcidcbiAgfSxcbiAgbGlzdGVuZXJQcm9wczoge1xuICAgIHByb3RvY29sOiAnSFRUUCdcbiAgfSxcbiAgcHVibGljQXBpOiB0cnVlLFxuICBhbGJMb2dnaW5nQnVja2V0UHJvcHM6IHtcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWVcbiAgfVxufTtcbmNvbnN0IGFsYlRvTGFtYmRhID0gbmV3IEFsYlRvTGFtYmRhKHN0YWNrLCAndGVzdC1vbmUnLCBwcm9wcyk7XG5cbmRlZmF1bHRzLmFkZENmblN1cHByZXNzUnVsZXMoYWxiVG9MYW1iZGEubGlzdGVuZXIsIFtcbiAgeyBpZDogJ1c1NicsIHJlYXNvbjogJ0FsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBtdXN0IGJlIEhUVFAgYmVjYXVzZSBvZiBjZXJ0aWZpY2F0ZSBsaW1pdGF0aW9ucy4nIH0sXG5dKTtcblxuY29uc3QgbmV3U2VjdXJpdHlHcm91cCA9IGFsYlRvTGFtYmRhLmxvYWRCYWxhbmNlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwc1swXS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5TZWN1cml0eUdyb3VwO1xuZGVmYXVsdHMuYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdTZWN1cml0eUdyb3VwLCBbXG4gIHsgaWQ6ICdXMjknLCByZWFzb246ICdDREsgY3JlYXRlZCBydWxlIHRoYXQgYmxvY2tzIGFsbCB0cmFmZmljLid9LFxuICB7IGlkOiAnVzInLCByZWFzb246ICdSdWxlIGRvZXMgbm90IGFwcGx5IGZvciBFTEIuJ30sXG4gIHsgaWQ6ICdXOScsIHJlYXNvbjogJ1J1bGUgZG9lcyBub3QgYXBwbHkgZm9yIEVMQi4nfVxuXSk7XG5cbmRlZmF1bHRzLnN1cHByZXNzQXV0b0RlbGV0ZUhhbmRsZXJXYXJuaW5ncyhzdGFjayk7XG4vLyBTeW50aFxuYXBwLnN5bnRoKCk7XG4iXX0=