@fjall/components-infrastructure 0.1.4 → 0.1.6

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 (218) hide show
  1. package/dist/lib/app.d.ts +2 -1
  2. package/dist/lib/app.js +4 -2
  3. package/dist/lib/config/aws/accountId.d.ts +6 -0
  4. package/dist/lib/config/aws/accountId.js +33 -0
  5. package/dist/lib/config/aws/cloudTrail.d.ts +10 -0
  6. package/dist/lib/config/aws/cloudTrail.js +22 -0
  7. package/dist/lib/config/aws/costAllocationTags.d.ts +4 -0
  8. package/dist/lib/config/aws/costAllocationTags.js +59 -0
  9. package/dist/lib/config/aws/delegateHostedZoneRole.d.ts +5 -0
  10. package/dist/lib/config/aws/delegateHostedZoneRole.js +77 -0
  11. package/dist/lib/config/aws/ecrDefaultImage.d.ts +11 -0
  12. package/dist/lib/config/aws/ecrDefaultImage.js +127 -0
  13. package/dist/lib/config/aws/eventBus.d.ts +7 -0
  14. package/dist/lib/config/aws/eventBus.js +24 -0
  15. package/dist/lib/config/aws/identityCenter.d.ts +13 -0
  16. package/dist/lib/config/aws/identityCenter.js +102 -0
  17. package/dist/lib/config/aws/identityCenterUser.d.ts +16 -0
  18. package/dist/lib/config/aws/identityCenterUser.js +125 -0
  19. package/dist/lib/config/aws/index.d.ts +12 -0
  20. package/dist/lib/config/aws/index.js +29 -0
  21. package/dist/lib/config/aws/ipam.d.ts +5 -0
  22. package/dist/lib/config/aws/ipam.js +48 -0
  23. package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +8 -0
  24. package/dist/lib/config/aws/ipamDelegateAdmin.js +58 -0
  25. package/dist/lib/config/aws/ipamPool.d.ts +5 -0
  26. package/dist/lib/config/aws/ipamPool.js +56 -0
  27. package/dist/lib/config/aws/ipamPoolId.d.ts +9 -0
  28. package/dist/lib/config/aws/ipamPoolId.js +36 -0
  29. package/dist/lib/config/aws/{base/identityCenter.d.ts → ipamPoolResourceShare.d.ts} +2 -2
  30. package/dist/lib/config/aws/ipamPoolResourceShare.js +42 -0
  31. package/dist/lib/config/aws/organisation.d.ts +28 -0
  32. package/dist/lib/config/aws/organisation.js +142 -0
  33. package/dist/lib/config/aws/organisationId.d.ts +7 -0
  34. package/dist/lib/config/aws/organisationId.js +46 -0
  35. package/dist/lib/config/aws/{base/ipamPool.d.ts → ramEnableSharing.d.ts} +1 -1
  36. package/dist/lib/config/aws/ramEnableSharing.js +35 -0
  37. package/dist/lib/config/aws/ramSharing.d.ts +4 -0
  38. package/dist/lib/config/aws/ramSharing.js +35 -0
  39. package/dist/lib/config/aws/{base/ipam.d.ts → users.d.ts} +1 -1
  40. package/dist/lib/config/aws/users.js +126 -0
  41. package/dist/lib/config/fjall/hostedZones/fjall.io.d.ts +10 -0
  42. package/dist/lib/config/fjall/hostedZones/fjall.io.js +25 -0
  43. package/dist/lib/index.d.ts +3 -0
  44. package/dist/lib/index.js +4 -1
  45. package/dist/lib/patterns/aws/basicApp.d.ts +47 -0
  46. package/dist/lib/patterns/aws/basicApp.js +90 -0
  47. package/dist/lib/patterns/aws/buildkite.d.ts +50 -0
  48. package/dist/lib/patterns/aws/buildkite.js +346 -0
  49. package/dist/lib/patterns/aws/freeTierApp.d.ts +46 -0
  50. package/dist/lib/patterns/aws/freeTierApp.js +95 -0
  51. package/dist/lib/patterns/aws/hostedZone.d.ts +11 -0
  52. package/dist/lib/patterns/aws/hostedZone.js +73 -0
  53. package/dist/lib/patterns/aws/index.d.ts +5 -2
  54. package/dist/lib/patterns/aws/index.js +6 -3
  55. package/dist/lib/patterns/aws/managedAccount.d.ts +13 -0
  56. package/dist/lib/patterns/aws/managedAccount.js +39 -0
  57. package/dist/lib/patterns/aws/managedOrganisation.d.ts +19 -0
  58. package/dist/lib/patterns/aws/managedOrganisation.js +45 -0
  59. package/dist/lib/patterns/aws/managedPlatform.d.ts +13 -0
  60. package/dist/lib/patterns/aws/managedPlatform.js +22 -0
  61. package/dist/lib/patterns/aws/spotInstanceApp.d.ts +46 -0
  62. package/dist/lib/patterns/aws/spotInstanceApp.js +95 -0
  63. package/dist/lib/patterns/aws/subdomainHostedZone.d.ts +9 -0
  64. package/dist/lib/patterns/aws/subdomainHostedZone.js +39 -0
  65. package/dist/lib/resources/aws/awsStack.d.ts +5 -0
  66. package/dist/lib/resources/aws/awsStack.js +11 -1
  67. package/dist/lib/resources/aws/compute/ecs.d.ts +74 -0
  68. package/dist/lib/resources/aws/compute/ecs.js +269 -0
  69. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +76 -0
  70. package/dist/lib/resources/aws/compute/ecsFreeTier.js +352 -0
  71. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +76 -0
  72. package/dist/lib/resources/aws/compute/ecsSpot.js +334 -0
  73. package/dist/lib/resources/aws/compute/index.d.ts +2 -0
  74. package/dist/lib/resources/aws/compute/index.js +19 -0
  75. package/dist/lib/resources/aws/compute/lambda.d.ts +13 -6
  76. package/dist/lib/resources/aws/compute/lambda.js +23 -4
  77. package/dist/lib/resources/aws/constant/ecr.js +4 -3
  78. package/dist/lib/resources/aws/constant/vpc.d.ts +10 -2
  79. package/dist/lib/resources/aws/constant/vpc.js +18 -8
  80. package/dist/lib/resources/aws/database/database.d.ts +16 -0
  81. package/dist/lib/resources/aws/database/database.js +30 -0
  82. package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +17 -0
  83. package/dist/lib/resources/aws/database/databaseFreeTier.js +31 -0
  84. package/dist/lib/resources/aws/database/databaseInstance.d.ts +17 -0
  85. package/dist/lib/resources/aws/database/databaseInstance.js +32 -0
  86. package/dist/lib/resources/aws/database/index.d.ts +2 -0
  87. package/dist/lib/resources/aws/database/index.js +19 -0
  88. package/dist/lib/resources/aws/database/rds.d.ts +23 -0
  89. package/dist/lib/resources/aws/database/rds.js +130 -0
  90. package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +36 -0
  91. package/dist/lib/resources/aws/database/rdsFreeTier.js +80 -0
  92. package/dist/lib/resources/aws/database/rdsInstance.d.ts +42 -0
  93. package/dist/lib/resources/aws/database/rdsInstance.js +173 -0
  94. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +13 -0
  95. package/dist/lib/resources/aws/iam/identityCenter/group.js +14 -0
  96. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +13 -0
  97. package/dist/lib/resources/aws/iam/index.d.ts +5 -0
  98. package/dist/lib/resources/aws/iam/index.js +22 -0
  99. package/dist/lib/resources/aws/iam/instanceProfile.d.ts +5 -0
  100. package/dist/lib/resources/aws/iam/instanceProfile.js +13 -0
  101. package/dist/lib/resources/aws/iam/managedPolicy.d.ts +5 -0
  102. package/dist/lib/resources/aws/iam/managedPolicy.js +14 -0
  103. package/dist/lib/resources/aws/iam/policy.d.ts +5 -0
  104. package/dist/lib/resources/aws/iam/policy.js +13 -0
  105. package/dist/lib/resources/aws/iam/role.js +2 -7
  106. package/dist/lib/resources/aws/iam/securityGroup.d.ts +5 -0
  107. package/dist/lib/resources/aws/iam/securityGroup.js +14 -0
  108. package/dist/lib/resources/aws/index.d.ts +1 -0
  109. package/dist/lib/resources/aws/index.js +18 -0
  110. package/dist/lib/resources/aws/logging/cloudTrail.d.ts +18 -0
  111. package/dist/lib/resources/aws/logging/cloudTrail.js +46 -0
  112. package/dist/lib/resources/aws/logging/logGroup.d.ts +8 -4
  113. package/dist/lib/resources/aws/logging/logGroup.js +6 -7
  114. package/dist/lib/resources/aws/networking/hostedZone.d.ts +19 -3
  115. package/dist/lib/resources/aws/networking/hostedZone.js +59 -11
  116. package/dist/lib/resources/aws/networking/index.d.ts +3 -0
  117. package/dist/lib/resources/aws/networking/index.js +20 -0
  118. package/dist/lib/resources/aws/networking/ipam.d.ts +2 -2
  119. package/dist/lib/resources/aws/networking/ipam.js +3 -3
  120. package/dist/lib/resources/aws/networking/ipamPool.d.ts +14 -5
  121. package/dist/lib/resources/aws/networking/ipamPool.js +69 -22
  122. package/dist/lib/resources/aws/networking/vpc.d.ts +29 -0
  123. package/dist/lib/resources/aws/networking/vpc.js +64 -0
  124. package/dist/lib/resources/aws/secrets/alias.d.ts +5 -0
  125. package/dist/lib/resources/aws/secrets/alias.js +13 -0
  126. package/dist/lib/resources/aws/secrets/index.d.ts +5 -0
  127. package/dist/lib/resources/aws/secrets/index.js +22 -0
  128. package/dist/lib/resources/aws/secrets/kms.d.ts +14 -0
  129. package/dist/lib/resources/aws/secrets/kms.js +34 -0
  130. package/dist/lib/resources/aws/secrets/parameter.d.ts +26 -0
  131. package/dist/lib/resources/aws/secrets/parameter.js +100 -0
  132. package/dist/lib/resources/aws/secrets/secret.d.ts +24 -0
  133. package/dist/lib/resources/aws/secrets/secret.js +53 -0
  134. package/dist/lib/resources/aws/storage/ecr.d.ts +12 -0
  135. package/dist/lib/resources/aws/storage/ecr.js +31 -0
  136. package/dist/lib/resources/aws/storage/index.d.ts +2 -0
  137. package/dist/lib/resources/aws/storage/index.js +19 -0
  138. package/dist/lib/resources/aws/storage/s3.d.ts +11 -0
  139. package/dist/lib/resources/aws/storage/s3.js +44 -0
  140. package/dist/lib/resources/aws/store/alias.d.ts +5 -0
  141. package/dist/lib/resources/aws/store/alias.js +13 -0
  142. package/dist/lib/resources/aws/store/database.d.ts +7 -2
  143. package/dist/lib/resources/aws/store/database.js +9 -5
  144. package/dist/lib/resources/aws/store/index.d.ts +7 -0
  145. package/dist/lib/resources/aws/store/index.js +24 -0
  146. package/dist/lib/resources/aws/store/kms.d.ts +14 -0
  147. package/dist/lib/resources/aws/store/kms.js +34 -0
  148. package/dist/lib/resources/aws/store/parameter.d.ts +26 -0
  149. package/dist/lib/resources/aws/store/parameter.js +100 -0
  150. package/dist/lib/resources/aws/store/rds.d.ts +15 -15
  151. package/dist/lib/resources/aws/store/rds.js +110 -68
  152. package/dist/lib/resources/aws/store/s3.d.ts +11 -0
  153. package/dist/lib/resources/aws/store/s3.js +43 -0
  154. package/dist/lib/resources/aws/store/secret.d.ts +26 -0
  155. package/dist/lib/resources/aws/store/secret.js +55 -0
  156. package/dist/lib/resources/aws/utilities/awsCustomResource.js +1 -6
  157. package/dist/lib/resources/aws/utilities/cfnOutput.js +2 -5
  158. package/dist/lib/resources/aws/utilities/codeBuild.d.ts +15 -0
  159. package/dist/lib/resources/aws/utilities/codeBuild.js +28 -0
  160. package/dist/lib/resources/aws/utilities/customResource.d.ts +20 -3
  161. package/dist/lib/resources/aws/utilities/customResource.js +24 -5
  162. package/dist/lib/resources/aws/utilities/customResourceProvider.js +1 -5
  163. package/dist/lib/resources/aws/utilities/resourceShare.d.ts +5 -0
  164. package/dist/lib/resources/aws/utilities/resourceShare.js +13 -0
  165. package/dist/lib/resources/index.d.ts +1 -0
  166. package/dist/lib/resources/index.js +18 -0
  167. package/dist/lib/types.d.ts +3 -0
  168. package/dist/lib/types.js +3 -0
  169. package/dist/lib/utils/capitalizeString.d.ts +1 -0
  170. package/dist/lib/utils/capitalizeString.js +8 -0
  171. package/dist/lib/utils/getAccountId.d.ts +1 -0
  172. package/dist/lib/utils/getAccountId.js +12 -0
  173. package/dist/lib/utils/getCidr.d.ts +8 -0
  174. package/dist/lib/utils/getCidr.js +42 -0
  175. package/dist/lib/utils/getConfig.d.ts +7 -5
  176. package/dist/lib/utils/getConfig.js +39 -11
  177. package/dist/lib/utils/getStackOutput.d.ts +1 -0
  178. package/dist/lib/utils/getStackOutput.js +20 -0
  179. package/dist/lib/utils/index.d.ts +1 -0
  180. package/dist/lib/utils/index.js +18 -0
  181. package/dist/lib/utils/stripAndCamelCase.d.ts +1 -0
  182. package/dist/lib/utils/stripAndCamelCase.js +17 -0
  183. package/dist/lib/utils/tagResource.d.ts +4 -0
  184. package/dist/lib/utils/tagResource.js +10 -0
  185. package/dist/lib/utils/usersConfig.d.ts +7 -0
  186. package/dist/lib/utils/usersConfig.js +18 -0
  187. package/package.json +23 -18
  188. package/dist/lib/config/aws/base/costAllocationTags.d.ts +0 -5
  189. package/dist/lib/config/aws/base/costAllocationTags.js +0 -57
  190. package/dist/lib/config/aws/base/iamIdentityCenter.d.ts +0 -5
  191. package/dist/lib/config/aws/base/iamIdentityCenter.js +0 -86
  192. package/dist/lib/config/aws/base/identityCenter.js +0 -90
  193. package/dist/lib/config/aws/base/ipam.js +0 -29
  194. package/dist/lib/config/aws/base/ipamPool.js +0 -46
  195. package/dist/lib/examples/custom-resources/lambda/aws-cost-allocation-tags/awsCostAllocationTagsLambda.d.ts +0 -2
  196. package/dist/lib/examples/custom-resources/lambda/aws-cost-allocation-tags/awsCostAllocationTagsLambda.js +0 -62
  197. package/dist/lib/examples/cutomResourceExample.d.ts +0 -6
  198. package/dist/lib/examples/cutomResourceExample.js +0 -45
  199. package/dist/lib/patterns/aws/customResource.d.ts +0 -7
  200. package/dist/lib/patterns/aws/customResource.js +0 -28
  201. package/dist/lib/patterns/aws/multiEnvironmentOrganisation.d.ts +0 -33
  202. package/dist/lib/patterns/aws/multiEnvironmentOrganisation.js +0 -107
  203. package/dist/lib/patterns/aws/webApp.d.ts +0 -17
  204. package/dist/lib/patterns/aws/webApp.js +0 -36
  205. package/dist/lib/resources/aws/compute/__tests__/fargate.test.d.ts +0 -1
  206. package/dist/lib/resources/aws/compute/__tests__/fargate.test.js +0 -21
  207. package/dist/lib/resources/aws/compute/fargate.d.ts +0 -23
  208. package/dist/lib/resources/aws/compute/fargate.js +0 -50
  209. package/dist/lib/resources/aws/constant/__tests__/vpc.test.d.ts +0 -1
  210. package/dist/lib/resources/aws/constant/__tests__/vpc.test.js +0 -13
  211. package/dist/lib/resources/aws/iam/assignment.js +0 -13
  212. package/dist/lib/resources/aws/iam/group.js +0 -15
  213. package/dist/lib/resources/aws/iam/iamRole.d.ts +0 -5
  214. package/dist/lib/resources/aws/iam/iamRole.js +0 -18
  215. package/dist/lib/resources/aws/iam/permissionSet.js +0 -13
  216. /package/dist/lib/resources/aws/iam/{assignment.d.ts → identityCenter/assignment.d.ts} +0 -0
  217. /package/dist/lib/resources/aws/iam/{group.d.ts → identityCenter/group.d.ts} +0 -0
  218. /package/dist/lib/resources/aws/iam/{permissionSet.d.ts → identityCenter/permissionSet.d.ts} +0 -0
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SecureStringParameter = exports.StringParameter = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
6
+ const custom_resources_1 = require("aws-cdk-lib/custom-resources");
7
+ const constructs_1 = require("constructs");
8
+ const store_1 = require("../store");
9
+ const awsCustomResource_1 = require("../utilities/awsCustomResource");
10
+ class StringParameter extends aws_cdk_lib_1.aws_ssm.StringParameter {
11
+ constructor(scope, id, props) {
12
+ super(scope, id, {
13
+ ...props,
14
+ description: props.description || `${id} SSM Parameter`,
15
+ tier: aws_cdk_lib_1.aws_ssm.ParameterTier.INTELLIGENT_TIERING
16
+ });
17
+ }
18
+ }
19
+ exports.StringParameter = StringParameter;
20
+ class SecureStringParameter extends constructs_1.Construct {
21
+ constructor(scope, id, props) {
22
+ super(scope, id);
23
+ this.name = props.name;
24
+ if (props.cmk) {
25
+ this.cmk = props.cmk;
26
+ }
27
+ else {
28
+ this.cmk = new store_1.CustomerManagedKey(this, `${id}Key`, {
29
+ description: props.description || `${id} KMS Key`,
30
+ aliasName: props.aliasName,
31
+ tags: props.tags
32
+ });
33
+ }
34
+ this.parameter = new awsCustomResource_1.AwsCustomResource(this, `${id}SecureStringParameter`, {
35
+ resourceType: "Custom::SecureStringParameter",
36
+ functionName: `${id}SecureStringParameter`,
37
+ onCreate: {
38
+ service: "@aws-sdk/client-ssm",
39
+ action: "PutParameter",
40
+ parameters: {
41
+ Name: props.name,
42
+ Description: props.description || `${id} secure parameter`,
43
+ Value: props.value || process.env.CDK_SECURE_STRING || "placeholderValue",
44
+ Type: "SecureString",
45
+ KeyId: this.cmk.alias.keyId
46
+ // TODO: Add tags to the parameter
47
+ },
48
+ physicalResourceId: custom_resources_1.PhysicalResourceId.of("createSecureStringParameter")
49
+ },
50
+ onUpdate: {
51
+ service: "@aws-sdk/client-ssm",
52
+ action: "PutParameter",
53
+ parameters: {
54
+ Name: props.name,
55
+ Description: props.description || `${id} secure parameter`,
56
+ Value: props.value ||
57
+ `process.env.CDK_SECURE_STRING_${id}` ||
58
+ "placeholderValue",
59
+ Overwrite: props.overwrite,
60
+ Type: "SecureString",
61
+ KeyId: this.cmk.alias.keyId
62
+ // TODO: Add tags to the parameter
63
+ },
64
+ physicalResourceId: custom_resources_1.PhysicalResourceId.of("updateSecureStringParameter")
65
+ },
66
+ onDelete: {
67
+ service: "@aws-sdk/client-ssm",
68
+ action: "DeleteParameter",
69
+ parameters: {
70
+ Name: props.name
71
+ }
72
+ },
73
+ policy: custom_resources_1.AwsCustomResourcePolicy.fromStatements([
74
+ new aws_iam_1.PolicyStatement({
75
+ actions: ["kms:Encrypt"],
76
+ resources: [
77
+ `arn:aws:kms:${props.region}:${props.accountId}:key/${this.cmk.key.keyId}`
78
+ ]
79
+ }),
80
+ new aws_iam_1.PolicyStatement({
81
+ actions: [
82
+ "ssm:DeleteParameter",
83
+ "ssm:PutParameter",
84
+ "ssm:AddTagsToResource",
85
+ "logs:DeleteRetentionPolicy",
86
+ "logs:PutRetentionPolicy"
87
+ ],
88
+ resources: [
89
+ `arn:aws:ssm:${props.region}:${props.accountId}:parameter${props.name}`
90
+ ]
91
+ })
92
+ ])
93
+ });
94
+ if (!props.cmk) {
95
+ this.parameter.node.addDependency(this.cmk);
96
+ }
97
+ }
98
+ }
99
+ exports.SecureStringParameter = SecureStringParameter;
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc3RvcmUvcGFyYW1ldGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE2QztBQUM3QyxpREFBc0Q7QUFDdEQsbUVBR3NDO0FBQ3RDLDJDQUF1QztBQUV2QyxvQ0FBOEM7QUFDOUMsc0VBQW1FO0FBRW5FLE1BQWEsZUFBZ0IsU0FBUSxxQkFBRyxDQUFDLGVBQWU7SUFDdEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLEdBQUcsRUFBRSxnQkFBZ0I7WUFDdkQsSUFBSSxFQUFFLHFCQUFHLENBQUMsYUFBYSxDQUFDLG1CQUFtQjtTQUM1QyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFSRCwwQ0FRQztBQWNELE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFLbEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUV2QixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDdEI7YUFBTTtZQUNMLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSwwQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtnQkFDbEQsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksR0FBRyxFQUFFLFVBQVU7Z0JBQ2pELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2FBQ2pCLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsdUJBQXVCLEVBQUU7WUFDekUsWUFBWSxFQUFFLCtCQUErQjtZQUM3QyxZQUFZLEVBQUUsR0FBRyxFQUFFLHVCQUF1QjtZQUMxQyxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7b0JBQ2hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLEdBQUcsRUFBRSxtQkFBbUI7b0JBQzFELEtBQUssRUFDSCxLQUFLLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksa0JBQWtCO29CQUNwRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUs7b0JBQzNCLGtDQUFrQztpQkFDbkM7Z0JBQ0Qsa0JBQWtCLEVBQUUscUNBQWtCLENBQUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDO2FBQ3pFO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxxQkFBcUI7Z0JBQzlCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO29CQUNoQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxHQUFHLEVBQUUsbUJBQW1CO29CQUMxRCxLQUFLLEVBQ0gsS0FBSyxDQUFDLEtBQUs7d0JBQ1gsaUNBQWlDLEVBQUUsRUFBRTt3QkFDckMsa0JBQWtCO29CQUNwQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7b0JBQzFCLElBQUksRUFBRSxjQUFjO29CQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSztvQkFDM0Isa0NBQWtDO2lCQUNuQztnQkFDRCxrQkFBa0IsRUFBRSxxQ0FBa0IsQ0FBQyxFQUFFLENBQUMsNkJBQTZCLENBQUM7YUFDekU7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsTUFBTSxFQUFFLGlCQUFpQjtnQkFDekIsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtpQkFDakI7YUFDRjtZQUNELE1BQU0sRUFBRSwwQ0FBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzdDLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO29CQUN4QixTQUFTLEVBQUU7d0JBQ1QsZUFBZSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO3FCQUMzRTtpQkFDRixDQUFDO2dCQUNGLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFO3dCQUNQLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQix1QkFBdUI7d0JBQ3ZCLDRCQUE0Qjt3QkFDNUIseUJBQXlCO3FCQUMxQjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsZUFBZSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLGFBQWEsS0FBSyxDQUFDLElBQUksRUFBRTtxQkFDeEU7aUJBQ0YsQ0FBQzthQUNILENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0NBQ0Y7QUF2RkQsc0RBdUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzX3NzbSBhcyBzc20gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBBd3NDdXN0b21SZXNvdXJjZVBvbGljeSxcbiAgUGh5c2ljYWxSZXNvdXJjZUlkXG59IGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiLi4vY29tcHV0ZS9lY3NcIjtcbmltcG9ydCB7IEN1c3RvbWVyTWFuYWdlZEtleSB9IGZyb20gXCIuLi9zdG9yZVwiO1xuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdQYXJhbWV0ZXIgZXh0ZW5kcyBzc20uU3RyaW5nUGFyYW1ldGVyIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IHNzbS5TdHJpbmdQYXJhbWV0ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24gfHwgYCR7aWR9IFNTTSBQYXJhbWV0ZXJgLFxuICAgICAgdGllcjogc3NtLlBhcmFtZXRlclRpZXIuSU5URUxMSUdFTlRfVElFUklOR1xuICAgIH0pO1xuICB9XG59XG5cbmludGVyZmFjZSBTZWN1cmVTdHJpbmdQYXJhbWV0ZXJQcm9wcyB7XG4gIGFjY291bnRJZDogc3RyaW5nO1xuICBhbGlhc05hbWU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG92ZXJ3cml0ZT86IGJvb2xlYW47XG4gIHJlZ2lvbjogc3RyaW5nO1xuICB0YWdzOiBLZXlWYWx1ZTtcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIGNtaz86IEN1c3RvbWVyTWFuYWdlZEtleTtcbn1cblxuZXhwb3J0IGNsYXNzIFNlY3VyZVN0cmluZ1BhcmFtZXRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBjbWs6IEN1c3RvbWVyTWFuYWdlZEtleTtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlcjogQXdzQ3VzdG9tUmVzb3VyY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNlY3VyZVN0cmluZ1BhcmFtZXRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMubmFtZSA9IHByb3BzLm5hbWU7XG5cbiAgICBpZiAocHJvcHMuY21rKSB7XG4gICAgICB0aGlzLmNtayA9IHByb3BzLmNtaztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbWsgPSBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KHRoaXMsIGAke2lkfUtleWAsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uIHx8IGAke2lkfSBLTVMgS2V5YCxcbiAgICAgICAgYWxpYXNOYW1lOiBwcm9wcy5hbGlhc05hbWUsXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucGFyYW1ldGVyID0gbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIGAke2lkfVNlY3VyZVN0cmluZ1BhcmFtZXRlcmAsIHtcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlNlY3VyZVN0cmluZ1BhcmFtZXRlclwiLFxuICAgICAgZnVuY3Rpb25OYW1lOiBgJHtpZH1TZWN1cmVTdHJpbmdQYXJhbWV0ZXJgLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJAYXdzLXNkay9jbGllbnQtc3NtXCIsXG4gICAgICAgIGFjdGlvbjogXCJQdXRQYXJhbWV0ZXJcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIE5hbWU6IHByb3BzLm5hbWUsXG4gICAgICAgICAgRGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uIHx8IGAke2lkfSBzZWN1cmUgcGFyYW1ldGVyYCxcbiAgICAgICAgICBWYWx1ZTpcbiAgICAgICAgICAgIHByb3BzLnZhbHVlIHx8IHByb2Nlc3MuZW52LkNES19TRUNVUkVfU1RSSU5HIHx8IFwicGxhY2Vob2xkZXJWYWx1ZVwiLFxuICAgICAgICAgIFR5cGU6IFwiU2VjdXJlU3RyaW5nXCIsXG4gICAgICAgICAgS2V5SWQ6IHRoaXMuY21rLmFsaWFzLmtleUlkXG4gICAgICAgICAgLy8gVE9ETzogQWRkIHRhZ3MgdG8gdGhlIHBhcmFtZXRlclxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihcImNyZWF0ZVNlY3VyZVN0cmluZ1BhcmFtZXRlclwiKVxuICAgICAgfSxcbiAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQGF3cy1zZGsvY2xpZW50LXNzbVwiLFxuICAgICAgICBhY3Rpb246IFwiUHV0UGFyYW1ldGVyXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBOYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgICAgIERlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbiB8fCBgJHtpZH0gc2VjdXJlIHBhcmFtZXRlcmAsXG4gICAgICAgICAgVmFsdWU6XG4gICAgICAgICAgICBwcm9wcy52YWx1ZSB8fFxuICAgICAgICAgICAgYHByb2Nlc3MuZW52LkNES19TRUNVUkVfU1RSSU5HXyR7aWR9YCB8fFxuICAgICAgICAgICAgXCJwbGFjZWhvbGRlclZhbHVlXCIsXG4gICAgICAgICAgT3ZlcndyaXRlOiBwcm9wcy5vdmVyd3JpdGUsXG4gICAgICAgICAgVHlwZTogXCJTZWN1cmVTdHJpbmdcIixcbiAgICAgICAgICBLZXlJZDogdGhpcy5jbWsuYWxpYXMua2V5SWRcbiAgICAgICAgICAvLyBUT0RPOiBBZGQgdGFncyB0byB0aGUgcGFyYW1ldGVyXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFwidXBkYXRlU2VjdXJlU3RyaW5nUGFyYW1ldGVyXCIpXG4gICAgICB9LFxuICAgICAgb25EZWxldGU6IHtcbiAgICAgICAgc2VydmljZTogXCJAYXdzLXNkay9jbGllbnQtc3NtXCIsXG4gICAgICAgIGFjdGlvbjogXCJEZWxldGVQYXJhbWV0ZXJcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIE5hbWU6IHByb3BzLm5hbWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHBvbGljeTogQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVN0YXRlbWVudHMoW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RW5jcnlwdFwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOmttczoke3Byb3BzLnJlZ2lvbn06JHtwcm9wcy5hY2NvdW50SWR9OmtleS8ke3RoaXMuY21rLmtleS5rZXlJZH1gXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJzc206RGVsZXRlUGFyYW1ldGVyXCIsXG4gICAgICAgICAgICBcInNzbTpQdXRQYXJhbWV0ZXJcIixcbiAgICAgICAgICAgIFwic3NtOkFkZFRhZ3NUb1Jlc291cmNlXCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVsZXRlUmV0ZW50aW9uUG9saWN5XCIsXG4gICAgICAgICAgICBcImxvZ3M6UHV0UmV0ZW50aW9uUG9saWN5XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMucmVnaW9ufToke3Byb3BzLmFjY291bnRJZH06cGFyYW1ldGVyJHtwcm9wcy5uYW1lfWBcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICBdKVxuICAgIH0pO1xuXG4gICAgaWYgKCFwcm9wcy5jbWspIHtcbiAgICAgIHRoaXMucGFyYW1ldGVyLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmNtayk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,25 +1,25 @@
1
- import { PostgresEngineVersion, MysqlEngineVersion } from "aws-cdk-lib/aws-rds";
2
- import { InstanceClass, InstanceSize, Vpc, IConnectable, Connections } from "aws-cdk-lib/aws-ec2";
1
+ import { Duration } from "aws-cdk-lib";
2
+ import { Connections, IConnectable, Vpc } from "aws-cdk-lib/aws-ec2";
3
+ import { BackupProps, ClusterInstance, IClusterEngine } from "aws-cdk-lib/aws-rds";
3
4
  import { Construct } from "constructs";
5
+ import { KeyValue } from "../compute/ecs";
4
6
  interface RdsProps {
5
7
  vpc: Vpc;
6
- databaseName?: string;
7
- version?: PostgresEngineVersion | MysqlEngineVersion;
8
+ defaultDatabaseName?: string;
9
+ engine?: IClusterEngine;
10
+ backup?: BackupProps;
11
+ clusterIdentifier?: string;
12
+ monitoringInterval?: Duration;
13
+ preferredMaintenanceWindow?: string;
8
14
  port?: number;
9
- instanceClass?: InstanceClass;
10
- instanceSize?: InstanceSize;
11
- snapshotRetentionInDays?: number;
12
- retainSnapshotsOnDeletion?: boolean;
15
+ writer?: ClusterInstance;
16
+ readers?: ClusterInstance[];
17
+ tags: KeyValue;
18
+ securityGroupIds?: string[];
19
+ buildkiteRoleArn?: string;
13
20
  }
14
21
  export default class Rds extends Construct implements IConnectable {
15
- private databaseInstance;
16
- private outputs;
17
- private secret;
18
- private securityGroup;
19
22
  connections: Connections;
20
23
  constructor(scope: Construct, id: string, props: RdsProps);
21
- private addDatabaseInstance;
22
- private addSecretResource;
23
- private addSecurityGroup;
24
24
  }
25
25
  export {};
@@ -1,58 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const aws_cdk_lib_1 = require("aws-cdk-lib");
4
- const aws_rds_1 = require("aws-cdk-lib/aws-rds");
5
4
  const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
6
- const aws_cdk_lib_2 = require("aws-cdk-lib");
5
+ const aws_rds_1 = require("aws-cdk-lib/aws-rds");
7
6
  const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
8
7
  const constructs_1 = require("constructs");
8
+ const iam_1 = require("../iam");
9
+ const kms_1 = require("./kms");
10
+ const secret_1 = require("./secret");
9
11
  class Rds extends constructs_1.Construct {
10
12
  constructor(scope, id, props) {
11
13
  super(scope, id);
12
- this.outputs = [];
13
- // todo: automatically change class & size based on environment
14
- const instanceClass = props.instanceClass || aws_ec2_1.InstanceClass.BURSTABLE4_GRAVITON;
15
- const instanceSize = props.instanceSize || aws_ec2_1.InstanceSize.MICRO;
16
- const databaseName = props.databaseName || `${id}Database`;
17
- const port = props.port || 5432;
18
- const snapshotRetentionInDays = props.snapshotRetentionInDays || 14;
19
- const retainSnapshotsOnDeletion = props.retainSnapshotsOnDeletion || true;
20
- const engine = aws_rds_1.DatabaseInstanceEngine.postgres({
21
- version: props.version ||
22
- aws_rds_1.PostgresEngineVersion.VER_14_5
23
- });
24
- //todo: validate engine & version are an acceptable combination
25
- this.addSecretResource(id);
26
- this.addSecurityGroup(id, props.vpc, port);
27
- this.addDatabaseInstance(scope, `${id}Instance`, props, engine, instanceClass, instanceSize, port, databaseName, snapshotRetentionInDays, retainSnapshotsOnDeletion);
28
- this.connections = this.securityGroup.connections;
29
- //todo: multiAz
30
- //todo: reserved instance families
31
- //todo: security group
32
- //todo: cluster
33
- //todo: automatic rotating credentials
34
- //todo: database proxy
35
- //todo: cfn outputs (url)
36
- //todo: database cname?
37
- }
38
- addDatabaseInstance(scope, id, props, engine, instanceClass, instanceSize, port, databaseName, snapshotRetentionInDays, retainSnapshotsOnDeletion) {
39
- this.databaseInstance = new aws_rds_1.DatabaseInstance(scope, id, {
40
- vpc: props.vpc,
41
- // vpcSubnets: { subnetType: SubnetType.PRIVATE_ISOLATED },
42
- engine: engine,
43
- instanceType: aws_ec2_1.InstanceType.of(instanceClass, instanceSize),
44
- credentials: aws_rds_1.Credentials.fromSecret(this.secret),
45
- port: port,
46
- securityGroups: [this.securityGroup],
47
- databaseName: databaseName,
48
- backupRetention: aws_cdk_lib_1.Duration.days(snapshotRetentionInDays),
49
- deleteAutomatedBackups: retainSnapshotsOnDeletion,
50
- removalPolicy: aws_cdk_lib_1.RemovalPolicy.SNAPSHOT
51
- });
52
- }
53
- addSecretResource(id) {
54
- this.secret = new aws_secretsmanager_1.Secret(this, `${id}Secret`, {
55
- secretName: `${id}-credentials`,
14
+ // Database Credentials
15
+ const databaseCredentials = new secret_1.default(this, `${props.defaultDatabaseName}Credentials`, {
16
+ secretName: `${props.defaultDatabaseName}Credentials`,
56
17
  generateSecretString: {
57
18
  secretStringTemplate: JSON.stringify({
58
19
  username: "postgres"
@@ -60,31 +21,112 @@ class Rds extends constructs_1.Construct {
60
21
  excludePunctuation: true,
61
22
  includeSpace: false,
62
23
  generateStringKey: "password"
24
+ },
25
+ tags: props.tags,
26
+ buildkiteRoleArn: props.buildkiteRoleArn
27
+ });
28
+ // Customer Managed Keys
29
+ const encryptionKey = new kms_1.CustomerManagedKey(this, `${props.defaultDatabaseName}ClusterEncryptionKey`, {
30
+ aliasName: `cmk/rds/${props.defaultDatabaseName}/encryptionKey`,
31
+ tags: props.tags
32
+ });
33
+ const primaryReaderInsightsKey = new kms_1.CustomerManagedKey(this, `${props.defaultDatabaseName}PrimaryReaderInsightsKey`, {
34
+ aliasName: `cmk/rds/${props.defaultDatabaseName}/PrimaryReaderInsightsKey`,
35
+ tags: props.tags
36
+ });
37
+ const secondaryReaderInsightsKey = new kms_1.CustomerManagedKey(this, `${props.defaultDatabaseName}SecondaryReaderInsightsKey`, {
38
+ aliasName: `cmk/rds/${props.defaultDatabaseName}/SecondaryReaderInsightsKey`,
39
+ tags: props.tags
40
+ });
41
+ const primaryWriterPerformanceInsightsKey = new kms_1.CustomerManagedKey(this, `${props.defaultDatabaseName}PrimaryWriterPerformanceInsightsKey`, {
42
+ aliasName: `cmk/rds/${props.defaultDatabaseName}/PrimaryWriterInsightsKey`,
43
+ tags: props.tags
44
+ });
45
+ const clusterSecurityGroup = new iam_1.SecurityGroup(this, `${id}SecurityGroup`, {
46
+ vpc: props.vpc,
47
+ description: `Security group that allows inbound access to the postgres cluster for ${props.defaultDatabaseName}`
48
+ });
49
+ //TODO: Remove this line, that allows the proxy to connect to the database. Replace with seperated security groups
50
+ clusterSecurityGroup.addIngressRule(clusterSecurityGroup, aws_ec2_1.Port.tcp(5432));
51
+ this.connections = clusterSecurityGroup.connections;
52
+ // Database Cluster
53
+ const databaseCluster = new aws_rds_1.DatabaseCluster(scope, `${id}Database`, {
54
+ vpc: props.vpc,
55
+ vpcSubnets: {
56
+ subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS
57
+ },
58
+ securityGroups: [clusterSecurityGroup],
59
+ engine: props.engine ||
60
+ aws_rds_1.DatabaseClusterEngine.auroraPostgres({
61
+ //TODO: Do we update these when we release a new version? Or try to keep them constantly updated?
62
+ version: aws_rds_1.AuroraPostgresEngineVersion.VER_15_6
63
+ }),
64
+ backup: props.backup || {
65
+ retention: aws_cdk_lib_1.Duration.days(14)
66
+ },
67
+ storageEncrypted: true,
68
+ storageEncryptionKey: encryptionKey.key,
69
+ clusterIdentifier: props.clusterIdentifier || `${props.defaultDatabaseName}-cluster`,
70
+ credentials: aws_rds_1.Credentials.fromSecret(databaseCredentials.secret),
71
+ defaultDatabaseName: props.defaultDatabaseName || `${id.replace("Rds", "")}`,
72
+ monitoringInterval: props.monitoringInterval || aws_cdk_lib_1.Duration.minutes(1),
73
+ preferredMaintenanceWindow: props.preferredMaintenanceWindow || "Sat:12:30-Sat:20:30",
74
+ port: props.port || 5432,
75
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.SNAPSHOT,
76
+ writer: props.writer ||
77
+ aws_rds_1.ClusterInstance.serverlessV2(`${props.defaultDatabaseName}Writer`, {
78
+ enablePerformanceInsights: true,
79
+ performanceInsightEncryptionKey: primaryWriterPerformanceInsightsKey.key,
80
+ instanceIdentifier: `${props.defaultDatabaseName}-primary-writer`,
81
+ //TODO: Do we update these when we release a new version? Or try to keep them constantly updated?
82
+ caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1
83
+ }),
84
+ readers: props.readers || [
85
+ aws_rds_1.ClusterInstance.serverlessV2(`${props.defaultDatabaseName}PrimaryReader`, {
86
+ scaleWithWriter: true,
87
+ enablePerformanceInsights: true,
88
+ performanceInsightEncryptionKey: primaryReaderInsightsKey.key,
89
+ instanceIdentifier: `${props.defaultDatabaseName}-primary-reader`,
90
+ caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1
91
+ }),
92
+ aws_rds_1.ClusterInstance.serverlessV2(`${props.defaultDatabaseName}SecondaryReader`, {
93
+ scaleWithWriter: false,
94
+ enablePerformanceInsights: true,
95
+ performanceInsightEncryptionKey: secondaryReaderInsightsKey.key,
96
+ instanceIdentifier: `${props.defaultDatabaseName}-secondary-reader`,
97
+ caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1
98
+ })
99
+ ]
100
+ });
101
+ const databaseProxy = new aws_rds_1.DatabaseProxy(this, `${props.defaultDatabaseName}DatabaseProxy`, {
102
+ proxyTarget: aws_rds_1.ProxyTarget.fromCluster(databaseCluster),
103
+ secrets: [databaseCredentials.secret],
104
+ securityGroups: [clusterSecurityGroup],
105
+ vpc: props.vpc,
106
+ vpcSubnets: {
107
+ subnetType: aws_ec2_1.SubnetType.PUBLIC
63
108
  }
64
109
  });
65
- this.outputs.push(new aws_cdk_lib_2.CfnOutput(this, "Secret Name", {
66
- value: this.secret.secretName
67
- }));
68
- this.outputs.push(new aws_cdk_lib_2.CfnOutput(this, "Secret ARN", {
69
- value: this.secret.secretArn
70
- }));
71
- }
72
- addSecurityGroup(id, vpc, port) {
73
- this.securityGroup = new aws_ec2_1.SecurityGroup(this, `${id}DBSecurityGroup`, {
74
- securityGroupName: "Database-SG",
75
- vpc: vpc
110
+ new aws_cdk_lib_1.CfnOutput(this, `${props.defaultDatabaseName}ProxyEndpointOutput`, {
111
+ key: `${props.defaultDatabaseName}ProxyEndpoint`,
112
+ exportName: `${props.defaultDatabaseName}ProxyEndpoint`,
113
+ value: databaseProxy.endpoint
114
+ });
115
+ // Rotate the Secret every 30 days
116
+ const masterSecret = new secret_1.default(this, `${props.defaultDatabaseName}MasterSecret`, {
117
+ secretName: `${props.defaultDatabaseName}MasterSecret`,
118
+ tags: props.tags
119
+ });
120
+ new aws_secretsmanager_1.SecretRotation(this, `${props.defaultDatabaseName}SecretRotation`, {
121
+ application: new aws_secretsmanager_1.SecretRotationApplication("SecretsManagerRDSPostgreSQLRotationMultiUser", "1.1.367", {
122
+ isMultiUser: true
123
+ }),
124
+ secret: databaseCredentials.secret,
125
+ masterSecret: masterSecret.secret,
126
+ target: databaseCluster,
127
+ vpc: databaseCluster.vpc
76
128
  });
77
- //todo: retrieve from service not hardcoded vpc?
78
- // this.securityGroup.connections.allowFrom(ecsService.service, Port.tcp(3306), 'Inbound');
79
- // Create basic ingress rule to allow access to database through default port
80
- // this.securityGroup.addIngressRule(
81
- // Peer.ipv4(vpc.vpcCidrBlock),
82
- // Port.tcp(port),
83
- // `Allow port ${port} for database connection from only within the VPC (${vpc.vpcId})`
84
- // );
85
- // todo: Double check egress rules with Paul.
86
- // - What is the default (CDK Diff implies it might be 'everyone'?)
87
129
  }
88
130
  }
89
131
  exports.default = Rds;
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc3RvcmUvcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQXNEO0FBQ3RELGlEQU82QjtBQUM3QixpREFRNkI7QUFFN0IsNkNBQXdDO0FBQ3hDLHVFQUF3RDtBQUN4RCwyQ0FBdUM7QUFjdkMsTUFBcUIsR0FBSSxTQUFRLHNCQUFTO0lBT3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZTtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTlgsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFRaEMsK0RBQStEO1FBQy9ELE1BQU0sYUFBYSxHQUNqQixLQUFLLENBQUMsYUFBYSxJQUFJLHVCQUFhLENBQUMsbUJBQW1CLENBQUM7UUFDM0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxzQkFBWSxDQUFDLEtBQUssQ0FBQztRQUU5RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxVQUFVLENBQUM7UUFDM0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7UUFDaEMsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDO1FBQ3BFLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQztRQUUxRSxNQUFNLE1BQU0sR0FBRyxnQ0FBc0IsQ0FBQyxRQUFRLENBQUM7WUFDN0MsT0FBTyxFQUNKLEtBQUssQ0FBQyxPQUFpQztnQkFDeEMsK0JBQXFCLENBQUMsUUFBUTtTQUNqQyxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFFL0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxF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UUFFTCw2Q0FBNkM7UUFDN0Msb0VBQW9FO0lBQ3RFLENBQUM7Q0FDRjtBQTlIRCxzQkE4SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ3JlZGVudGlhbHMsXG4gIERhdGFiYXNlSW5zdGFuY2UsXG4gIERhdGFiYXNlSW5zdGFuY2VFbmdpbmUsXG4gIFBvc3RncmVzRW5naW5lVmVyc2lvbixcbiAgTXlzcWxFbmdpbmVWZXJzaW9uLFxuICBJSW5zdGFuY2VFbmdpbmVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7XG4gIEluc3RhbmNlQ2xhc3MsXG4gIEluc3RhbmNlU2l6ZSxcbiAgSW5zdGFuY2VUeXBlLFxuICBTZWN1cml0eUdyb3VwLFxuICBWcGMsXG4gIElDb25uZWN0YWJsZSxcbiAgQ29ubmVjdGlvbnNcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcblxuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbnRlcmZhY2UgUmRzUHJvcHMge1xuICB2cGM6IFZwYztcbiAgZGF0YWJhc2VOYW1lPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogUG9zdGdyZXNFbmdpbmVWZXJzaW9uIHwgTXlzcWxFbmdpbmVWZXJzaW9uO1xuICBwb3J0PzogbnVtYmVyO1xuICBpbnN0YW5jZUNsYXNzPzogSW5zdGFuY2VDbGFzcztcbiAgaW5zdGFuY2VTaXplPzogSW5zdGFuY2VTaXplO1xuICAvLyBEYXRhYmFzZSBJbnN0YW5jZSBDb25maWd1cmF0aW9uXG4gIHNuYXBzaG90UmV0ZW50aW9uSW5EYXlzPzogbnVtYmVyO1xuICByZXRhaW5TbmFwc2hvdHNPbkRlbGV0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmRzIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHJpdmF0ZSBkYXRhYmFzZUluc3RhbmNlOiBEYXRhYmFzZUluc3RhbmNlO1xuICBwcml2YXRlIG91dHB1dHM6IENmbk91dHB1dFtdID0gW107XG4gIHByaXZhdGUgc2VjcmV0OiBTZWNyZXQ7XG4gIHByaXZhdGUgc2VjdXJpdHlHcm91cDogU2VjdXJpdHlHcm91cDtcbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gdG9kbzogYXV0b21hdGljYWxseSBjaGFuZ2UgY2xhc3MgJiBzaXplIGJhc2VkIG9uIGVudmlyb25tZW50XG4gICAgY29uc3QgaW5zdGFuY2VDbGFzcyA9XG4gICAgICBwcm9wcy5pbnN0YW5jZUNsYXNzIHx8IEluc3RhbmNlQ2xhc3MuQlVSU1RBQkxFNF9HUkFWSVRPTjtcbiAgICBjb25zdCBpbnN0YW5jZVNpemUgPSBwcm9wcy5pbnN0YW5jZVNpemUgfHwgSW5zdGFuY2VTaXplLk1JQ1JPO1xuXG4gICAgY29uc3QgZGF0YWJhc2VOYW1lID0gcHJvcHMuZGF0YWJhc2VOYW1lIHx8IGAke2lkfURhdGFiYXNlYDtcbiAgICBjb25zdCBwb3J0ID0gcHJvcHMucG9ydCB8fCA1NDMyO1xuICAgIGNvbnN0IHNuYXBzaG90UmV0ZW50aW9uSW5EYXlzID0gcHJvcHMuc25hcHNob3RSZXRlbnRpb25JbkRheXMgfHwgMTQ7XG4gICAgY29uc3QgcmV0YWluU25hcHNob3RzT25EZWxldGlvbiA9IHByb3BzLnJldGFpblNuYXBzaG90c09uRGVsZXRpb24gfHwgdHJ1ZTtcblxuICAgIGNvbnN0IGVuZ2luZSA9IERhdGFiYXNlSW5zdGFuY2VFbmdpbmUucG9zdGdyZXMoe1xuICAgICAgdmVyc2lvbjpcbiAgICAgICAgKHByb3BzLnZlcnNpb24gYXMgUG9zdGdyZXNFbmdpbmVWZXJzaW9uKSB8fFxuICAgICAgICBQb3N0Z3Jlc0VuZ2luZVZlcnNpb24uVkVSXzE0XzVcbiAgICB9KTtcblxuICAgIC8vdG9kbzogdmFsaWRhdGUgZW5naW5lICYgdmVyc2lvbiBhcmUgYW4gYWNjZXB0YWJsZSBjb21iaW5hdGlvblxuXG4gICAgdGhpcy5hZGRTZWNyZXRSZXNvdXJjZShpZCk7XG4gICAgdGhpcy5hZGRTZWN1cml0eUdyb3VwKGlkLCBwcm9wcy52cGMsIHBvcnQpO1xuICAgIHRoaXMuYWRkRGF0YWJhc2VJbnN0YW5jZShcbiAgICAgIHNjb3BlLFxuICAgICAgYCR7aWR9SW5zdGFuY2VgLFxuICAgICAgcHJvcHMsXG4gICAgICBlbmdpbmUsXG4gICAgICBpbnN0YW5jZUNsYXNzLFxuICAgICAgaW5zdGFuY2VTaXplLFxuICAgICAgcG9ydCxcbiAgICAgIGRhdGFiYXNlTmFtZSxcbiAgICAgIHNuYXBzaG90UmV0ZW50aW9uSW5EYXlzLFxuICAgICAgcmV0YWluU25hcHNob3RzT25EZWxldGlvblxuICAgICk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5zZWN1cml0eUdyb3VwLmNvbm5lY3Rpb25zO1xuXG4gICAgLy90b2RvOiBtdWx0aUF6XG4gICAgLy90b2RvOiByZXNlcnZlZCBpbnN0YW5jZSBmYW1pbGllc1xuICAgIC8vdG9kbzogc2VjdXJpdHkgZ3JvdXBcbiAgICAvL3RvZG86IGNsdXN0ZXJcbiAgICAvL3RvZG86IGF1dG9tYXRpYyByb3RhdGluZyBjcmVkZW50aWFsc1xuICAgIC8vdG9kbzogZGF0YWJhc2UgcHJveHlcbiAgICAvL3RvZG86IGNmbiBvdXRwdXRzICh1cmwpXG4gICAgLy90b2RvOiBkYXRhYmFzZSBjbmFtZT9cbiAgfVxuXG4gIHByaXZhdGUgYWRkRGF0YWJhc2VJbnN0YW5jZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFJkc1Byb3BzLFxuICAgIGVuZ2luZTogSUluc3RhbmNlRW5naW5lLFxuICAgIGluc3RhbmNlQ2xhc3M6IEluc3RhbmNlQ2xhc3MsXG4gICAgaW5zdGFuY2VTaXplOiBJbnN0YW5jZVNpemUsXG4gICAgcG9ydDogbnVtYmVyLFxuICAgIGRhdGFiYXNlTmFtZTogc3RyaW5nLFxuICAgIHNuYXBzaG90UmV0ZW50aW9uSW5EYXlzOiBudW1iZXIsXG4gICAgcmV0YWluU25hcHNob3RzT25EZWxldGlvbjogYm9vbGVhblxuICApIHtcbiAgICB0aGlzLmRhdGFiYXNlSW5zdGFuY2UgPSBuZXcgRGF0YWJhc2VJbnN0YW5jZShzY29wZSwgaWQsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgLy8gdnBjU3VibmV0czogeyBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQgfSxcbiAgICAgIGVuZ2luZTogZW5naW5lLFxuICAgICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoaW5zdGFuY2VDbGFzcywgaW5zdGFuY2VTaXplKSxcbiAgICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscy5mcm9tU2VjcmV0KHRoaXMuc2VjcmV0KSxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBzZWN1cml0eUdyb3VwczogW3RoaXMuc2VjdXJpdHlHcm91cF0sXG4gICAgICBkYXRhYmFzZU5hbWU6IGRhdGFiYXNlTmFtZSxcbiAgICAgIGJhY2t1cFJldGVudGlvbjogRHVyYXRpb24uZGF5cyhzbmFwc2hvdFJldGVudGlvbkluRGF5cyksXG4gICAgICBkZWxldGVBdXRvbWF0ZWRCYWNrdXBzOiByZXRhaW5TbmFwc2hvdHNPbkRlbGV0aW9uLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5TTkFQU0hPVFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZWNyZXRSZXNvdXJjZShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWNyZXQgPSBuZXcgU2VjcmV0KHRoaXMsIGAke2lkfVNlY3JldGAsIHtcbiAgICAgIHNlY3JldE5hbWU6IGAke2lkfS1jcmVkZW50aWFsc2AsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHVzZXJuYW1lOiBcInBvc3RncmVzXCJcbiAgICAgICAgfSksXG4gICAgICAgIGV4Y2x1ZGVQdW5jdHVhdGlvbjogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZVNwYWNlOiBmYWxzZSxcbiAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwicGFzc3dvcmRcIlxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRwdXRzLnB1c2goXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiU2VjcmV0IE5hbWVcIiwge1xuICAgICAgICB2YWx1ZTogdGhpcy5zZWNyZXQuc2VjcmV0TmFtZVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMub3V0cHV0cy5wdXNoKFxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIlNlY3JldCBBUk5cIiwge1xuICAgICAgICB2YWx1ZTogdGhpcy5zZWNyZXQuc2VjcmV0QXJuXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZFNlY3VyaXR5R3JvdXAoaWQ6IHN0cmluZywgdnBjOiBWcGMsIHBvcnQ6IG51bWJlcikge1xuICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBTZWN1cml0eUdyb3VwKHRoaXMsIGAke2lkfURCU2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lOiBcIkRhdGFiYXNlLVNHXCIsXG4gICAgICB2cGM6IHZwY1xuICAgIH0pO1xuXG4gICAgLy90b2RvOiByZXRyaWV2ZSBmcm9tIHNlcnZpY2Ugbm90IGhhcmRjb2RlZCB2cGM/XG4gICAgLy8gdGhpcy5zZWN1cml0eUdyb3VwLmNvbm5lY3Rpb25zLmFsbG93RnJvbShlY3NTZXJ2aWNlLnNlcnZpY2UsIFBvcnQudGNwKDMzMDYpLCAnSW5ib3VuZCcpO1xuXG4gICAgLy8gQ3JlYXRlIGJhc2ljIGluZ3Jlc3MgcnVsZSB0byBhbGxvdyBhY2Nlc3MgdG8gZGF0YWJhc2UgdGhyb3VnaCBkZWZhdWx0IHBvcnRcbiAgICAvLyB0aGlzLnNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgLy8gICBQZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksXG4gICAgLy8gICBQb3J0LnRjcChwb3J0KSxcbiAgICAvLyAgIGBBbGxvdyBwb3J0ICR7cG9ydH0gZm9yIGRhdGFiYXNlIGNvbm5lY3Rpb24gZnJvbSBvbmx5IHdpdGhpbiB0aGUgVlBDICgke3ZwYy52cGNJZH0pYFxuICAgIC8vICk7XG5cbiAgICAvLyB0b2RvOiBEb3VibGUgY2hlY2sgZWdyZXNzIHJ1bGVzIHdpdGggUGF1bC5cbiAgICAvLyAgLSBXaGF0IGlzIHRoZSBkZWZhdWx0IChDREsgRGlmZiBpbXBsaWVzIGl0IG1pZ2h0IGJlICdldmVyeW9uZSc/KVxuICB9XG59XG4iXX0=
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc3RvcmUvcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQWlFO0FBQ2pFLGlEQU02QjtBQUM3QixpREFXNkI7QUFDN0IsdUVBR3dDO0FBQ3hDLDJDQUF1QztBQUV2QyxnQ0FBdUM7QUFDdkMsK0JBQTJDO0FBQzNDLHFDQUE4QjtBQWtCOUIsTUFBcUIsR0FBSSxTQUFRLHNCQUFTO0lBR3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZTtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLHVCQUF1QjtRQUN2QixNQUFNLG1CQUFtQixHQUFHLElBQUksZ0JBQU0sQ0FDcEMsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixhQUFhLEVBQ3pDO1lBQ0UsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixhQUFhO1lBQ3JELG9CQUFvQixFQUFFO2dCQUNwQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNuQyxRQUFRLEVBQUUsVUFBVTtpQkFDckIsQ0FBQztnQkFDRixrQkFBa0IsRUFBRSxJQUFJO2dCQUN4QixZQUFZLEVBQUUsS0FBSztnQkFDbkIsaUJBQWlCLEVBQUUsVUFBVTthQUM5QjtZQUNELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1NBQ3pDLENBQ0YsQ0FBQztRQUVGLHdCQUF3QjtRQUN4QixNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFrQixDQUMxQyxJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsbUJBQW1CLHNCQUFzQixFQUNsRDtZQUNFLFNBQVMsRUFBRSxXQUFXLEtBQUssQ0FBQyxtQkFBbUIsZ0JBQWdCO1lBQy9ELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUNGLENBQUM7UUFFRixNQUFNLHdCQUF3QixHQUFHLElBQUksd0JBQWtCLENBQ3JELElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxtQkFBbUIsMEJBQTBCLEVBQ3REO1lBQ0UsU0FBUyxFQUFFLFdBQVcsS0FBSyxDQUFDLG1CQUFtQiwyQkFBMkI7WUFDMUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQ0YsQ0FBQztRQUVGLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSx3QkFBa0IsQ0FDdkQsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLG1CQUFtQiw0QkFBNEIsRUFDeEQ7WUFDRSxTQUFTLEVBQUUsV0FBVyxLQUFLLENBQUMsbUJBQW1CLDZCQUE2QjtZQUM1RSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FDRixDQUFDO1FBRUYsTUFBTSxtQ0FBbUMsR0FBRyxJQUFJLHdCQUFrQixDQUNoRSxJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsbUJBQW1CLHFDQUFxQyxFQUNqRTtZQUNFLFNBQVMsRUFBRSxXQUFXLEtBQUssQ0FBQyxtQkFBbUIsMkJBQTJCO1lBQzFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUNGLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLElBQUksbUJBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRTtZQUN6RSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxXQUFXLEVBQUUseUVBQXlFLEtBQUssQ0FBQyxtQkFBbUIsRUFBRTtTQUNsSCxDQUFDLENBQUM7UUFFSCxrSEFBa0g7UUFDbEgsb0JBQW9CLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLGNBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQztRQUVwRCxtQkFBbUI7UUFDbkIsTUFBTSxlQUFlLEdBQUcsSUFBSSx5QkFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ2xFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsb0JBQVUsQ0FBQyxtQkFBbUI7YUFDM0M7WUFDRCxjQUFjLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztZQUN0QyxNQUFNLEVBQ0osS0FBSyxDQUFDLE1BQU07Z0JBQ1osK0JBQXFCLENBQUMsY0FBYyxDQUFDO29CQUNuQyxpR0FBaUc7b0JBQ2pHLE9BQU8sRUFBRSxxQ0FBMkIsQ0FBQyxRQUFRO2lCQUM5QyxDQUFDO1lBQ0osTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUk7Z0JBQ3RCLFNBQVMsRUFBRSxzQkFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDN0I7WUFDRCxnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxHQUFHO1lBQ3ZDLGlCQUFpQixFQUNmLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsVUFBVTtZQUNuRSxXQUFXLEVBQUUscUJBQVcsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1lBQy9ELG1CQUFtQixFQUNqQixLQUFLLENBQUMsbUJBQW1CLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtZQUN6RCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLElBQUksc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ25FLDBCQUEwQixFQUN4QixLQUFLLENBQUMsMEJBQTBCLElBQUkscUJBQXFCO1lBQzNELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUk7WUFDeEIsYUFBYSxFQUFFLDJCQUFhLENBQUMsUUFBUTtZQUNyQyxNQUFNLEVBQ0osS0FBSyxDQUFDLE1BQU07Z0JBQ1oseUJBQWUsQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsbUJBQW1CLFFBQVEsRUFBRTtvQkFDakUseUJBQXlCLEVBQUUsSUFBSTtvQkFDL0IsK0JBQStCLEVBQzdCLG1DQUFtQyxDQUFDLEdBQUc7b0JBQ3pDLGtCQUFrQixFQUFFLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixpQkFBaUI7b0JBQ2pFLGlHQUFpRztvQkFDakcsYUFBYSxFQUFFLHVCQUFhLENBQUMsaUJBQWlCO2lCQUMvQyxDQUFDO1lBQ0osT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUk7Z0JBQ3hCLHlCQUFlLENBQUMsWUFBWSxDQUMxQixHQUFHLEtBQUssQ0FBQyxtQkFBbUIsZUFBZSxFQUMzQztvQkFDRSxlQUFlLEVBQUUsSUFBSTtvQkFDckIseUJBQXlCLEVBQUUsSUFBSTtvQkFDL0IsK0JBQStCLEVBQUUsd0JBQXdCLENBQUMsR0FBRztvQkFDN0Qsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLENBQUMsbUJBQW1CLGlCQUFpQjtvQkFDakUsYUFBYSxFQUFFLHVCQUFhLENBQUMsaUJBQWlCO2lCQUMvQyxDQUNGO2dCQUNELHlCQUFlLENBQUMsWUFBWSxDQUMxQixHQUFHLEtBQUssQ0FBQyxtQkFBbUIsaUJBQWlCLEVBQzdDO29CQUNFLGVBQWUsRUFBRSxLQUFLO29CQUN0Qix5QkFBeUIsRUFBRSxJQUFJO29CQUMvQiwrQkFBK0IsRUFBRSwwQkFBMEIsQ0FBQyxHQUFHO29CQUMvRCxrQkFBa0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsbUJBQW1CO29CQUNuRSxhQUFhLEVBQUUsdUJBQWEsQ0FBQyxpQkFBaUI7aUJBQy9DLENBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sYUFBYSxHQUFHLElBQUksdUJBQWEsQ0FDckMsSUFBSSxFQUNKLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixlQUFlLEVBQzNDO1lBQ0UsV0FBVyxFQUFFLHFCQUFXLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztZQUNyRCxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7WUFDckMsY0FBYyxFQUFFLENBQUMsb0JBQW9CLENBQUM7WUFDdEMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsVUFBVSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxvQkFBVSxDQUFDLE1BQU07YUFDOUI7U0FDRixDQUNGLENBQUM7UUFFRixJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixxQkFBcUIsRUFBRTtZQUNyRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsbUJBQW1CLGVBQWU7WUFDaEQsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixlQUFlO1lBQ3ZELEtBQUssRUFBRSxhQUFhLENBQUMsUUFBUTtTQUM5QixDQUFDLENBQUM7UUFFSCxrQ0FBa0M7UUFDbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxnQkFBTSxDQUM3QixJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsbUJBQW1CLGNBQWMsRUFDMUM7WUFDRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsbUJBQW1CLGNBQWM7WUFDdEQsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQ0YsQ0FBQztRQUVGLElBQUksbUNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsbUJBQW1CLGdCQUFnQixFQUFFO1lBQ3JFLFdBQVcsRUFBRSxJQUFJLDhDQUF5QixDQUN4Qyw4Q0FBOEMsRUFDOUMsU0FBUyxFQUNUO2dCQUNFLFdBQVcsRUFBRSxJQUFJO2FBQ2xCLENBQ0Y7WUFDRCxNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtZQUNsQyxZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU07WUFDakMsTUFBTSxFQUFFLGVBQWU7WUFDdkIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxMRCxzQkFrTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBDb25uZWN0aW9ucyxcbiAgSUNvbm5lY3RhYmxlLFxuICBQb3J0LFxuICBTdWJuZXRUeXBlLFxuICBWcGNcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7XG4gIEF1cm9yYVBvc3RncmVzRW5naW5lVmVyc2lvbixcbiAgQmFja3VwUHJvcHMsXG4gIENhQ2VydGlmaWNhdGUsXG4gIENsdXN0ZXJJbnN0YW5jZSxcbiAgQ3JlZGVudGlhbHMsXG4gIERhdGFiYXNlQ2x1c3RlcixcbiAgRGF0YWJhc2VDbHVzdGVyRW5naW5lLFxuICBEYXRhYmFzZVByb3h5LFxuICBJQ2x1c3RlckVuZ2luZSxcbiAgUHJveHlUYXJnZXRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7XG4gIFNlY3JldFJvdGF0aW9uLFxuICBTZWNyZXRSb3RhdGlvbkFwcGxpY2F0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuLi9pYW1cIjtcbmltcG9ydCB7IEN1c3RvbWVyTWFuYWdlZEtleSB9IGZyb20gXCIuL2ttc1wiO1xuaW1wb3J0IFNlY3JldCBmcm9tIFwiLi9zZWNyZXRcIjtcblxuaW50ZXJmYWNlIFJkc1Byb3BzIHtcbiAgdnBjOiBWcGM7XG4gIGRlZmF1bHREYXRhYmFzZU5hbWU/OiBzdHJpbmc7XG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xuICBiYWNrdXA/OiBCYWNrdXBQcm9wcztcbiAgY2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmc7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgd3JpdGVyPzogQ2x1c3Rlckluc3RhbmNlO1xuICByZWFkZXJzPzogQ2x1c3Rlckluc3RhbmNlW107XG4gIHRhZ3M6IEtleVZhbHVlO1xuICBzZWN1cml0eUdyb3VwSWRzPzogc3RyaW5nW107XG4gIGJ1aWxka2l0ZVJvbGVBcm4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJkcyBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJkc1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIERhdGFiYXNlIENyZWRlbnRpYWxzXG4gICAgY29uc3QgZGF0YWJhc2VDcmVkZW50aWFscyA9IG5ldyBTZWNyZXQoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1DcmVkZW50aWFsc2AsXG4gICAgICB7XG4gICAgICAgIHNlY3JldE5hbWU6IGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9Q3JlZGVudGlhbHNgLFxuICAgICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB1c2VybmFtZTogXCJwb3N0Z3Jlc1wiXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZXhjbHVkZVB1bmN0dWF0aW9uOiB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVTcGFjZTogZmFsc2UsXG4gICAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwicGFzc3dvcmRcIlxuICAgICAgICB9LFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgICBidWlsZGtpdGVSb2xlQXJuOiBwcm9wcy5idWlsZGtpdGVSb2xlQXJuXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEN1c3RvbWVyIE1hbmFnZWQgS2V5c1xuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9Q2x1c3RlckVuY3J5cHRpb25LZXlgLFxuICAgICAge1xuICAgICAgICBhbGlhc05hbWU6IGBjbWsvcmRzLyR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX0vZW5jcnlwdGlvbktleWAsXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcHJpbWFyeVJlYWRlckluc2lnaHRzS2V5ID0gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfVByaW1hcnlSZWFkZXJJbnNpZ2h0c0tleWAsXG4gICAgICB7XG4gICAgICAgIGFsaWFzTmFtZTogYGNtay9yZHMvJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfS9QcmltYXJ5UmVhZGVySW5zaWdodHNLZXlgLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHNlY29uZGFyeVJlYWRlckluc2lnaHRzS2V5ID0gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfVNlY29uZGFyeVJlYWRlckluc2lnaHRzS2V5YCxcbiAgICAgIHtcbiAgICAgICAgYWxpYXNOYW1lOiBgY21rL3Jkcy8ke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9L1NlY29uZGFyeVJlYWRlckluc2lnaHRzS2V5YCxcbiAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBwcmltYXJ5V3JpdGVyUGVyZm9ybWFuY2VJbnNpZ2h0c0tleSA9IG5ldyBDdXN0b21lck1hbmFnZWRLZXkoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1QcmltYXJ5V3JpdGVyUGVyZm9ybWFuY2VJbnNpZ2h0c0tleWAsXG4gICAgICB7XG4gICAgICAgIGFsaWFzTmFtZTogYGNtay9yZHMvJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfS9QcmltYXJ5V3JpdGVySW5zaWdodHNLZXlgLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGNsdXN0ZXJTZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgYCR7aWR9U2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCB0aGF0IGFsbG93cyBpbmJvdW5kIGFjY2VzcyB0byB0aGUgcG9zdGdyZXMgY2x1c3RlciBmb3IgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfWBcbiAgICB9KTtcblxuICAgIC8vVE9ETzogUmVtb3ZlIHRoaXMgbGluZSwgdGhhdCBhbGxvd3MgdGhlIHByb3h5IHRvIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlLiBSZXBsYWNlIHdpdGggc2VwZXJhdGVkIHNlY3VyaXR5IGdyb3Vwc1xuICAgIGNsdXN0ZXJTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKGNsdXN0ZXJTZWN1cml0eUdyb3VwLCBQb3J0LnRjcCg1NDMyKSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gY2x1c3RlclNlY3VyaXR5R3JvdXAuY29ubmVjdGlvbnM7XG5cbiAgICAvLyBEYXRhYmFzZSBDbHVzdGVyXG4gICAgY29uc3QgZGF0YWJhc2VDbHVzdGVyID0gbmV3IERhdGFiYXNlQ2x1c3RlcihzY29wZSwgYCR7aWR9RGF0YWJhc2VgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXG4gICAgICB9LFxuICAgICAgc2VjdXJpdHlHcm91cHM6IFtjbHVzdGVyU2VjdXJpdHlHcm91cF0sXG4gICAgICBlbmdpbmU6XG4gICAgICAgIHByb3BzLmVuZ2luZSB8fFxuICAgICAgICBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUuYXVyb3JhUG9zdGdyZXMoe1xuICAgICAgICAgIC8vVE9ETzogRG8gd2UgdXBkYXRlIHRoZXNlIHdoZW4gd2UgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uPyBPciB0cnkgdG8ga2VlcCB0aGVtIGNvbnN0YW50bHkgdXBkYXRlZD9cbiAgICAgICAgICB2ZXJzaW9uOiBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24uVkVSXzE1XzZcbiAgICAgICAgfSksXG4gICAgICBiYWNrdXA6IHByb3BzLmJhY2t1cCB8fCB7XG4gICAgICAgIHJldGVudGlvbjogRHVyYXRpb24uZGF5cygxNClcbiAgICAgIH0sXG4gICAgICBzdG9yYWdlRW5jcnlwdGVkOiB0cnVlLFxuICAgICAgc3RvcmFnZUVuY3J5cHRpb25LZXk6IGVuY3J5cHRpb25LZXkua2V5LFxuICAgICAgY2x1c3RlcklkZW50aWZpZXI6XG4gICAgICAgIHByb3BzLmNsdXN0ZXJJZGVudGlmaWVyIHx8IGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9LWNsdXN0ZXJgLFxuICAgICAgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzLmZyb21TZWNyZXQoZGF0YWJhc2VDcmVkZW50aWFscy5zZWNyZXQpLFxuICAgICAgZGVmYXVsdERhdGFiYXNlTmFtZTpcbiAgICAgICAgcHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZSB8fCBgJHtpZC5yZXBsYWNlKFwiUmRzXCIsIFwiXCIpfWAsXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCB8fCBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6XG4gICAgICAgIHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93IHx8IFwiU2F0OjEyOjMwLVNhdDoyMDozMFwiLFxuICAgICAgcG9ydDogcHJvcHMucG9ydCB8fCA1NDMyLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5TTkFQU0hPVCxcbiAgICAgIHdyaXRlcjpcbiAgICAgICAgcHJvcHMud3JpdGVyIHx8XG4gICAgICAgIENsdXN0ZXJJbnN0YW5jZS5zZXJ2ZXJsZXNzVjIoYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1Xcml0ZXJgLCB7XG4gICAgICAgICAgZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0czogdHJ1ZSxcbiAgICAgICAgICBwZXJmb3JtYW5jZUluc2lnaHRFbmNyeXB0aW9uS2V5OlxuICAgICAgICAgICAgcHJpbWFyeVdyaXRlclBlcmZvcm1hbmNlSW5zaWdodHNLZXkua2V5LFxuICAgICAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX0tcHJpbWFyeS13cml0ZXJgLFxuICAgICAgICAgIC8vVE9ETzogRG8gd2UgdXBkYXRlIHRoZXNlIHdoZW4gd2UgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uPyBPciB0cnkgdG8ga2VlcCB0aGVtIGNvbnN0YW50bHkgdXBkYXRlZD9cbiAgICAgICAgICBjYUNlcnRpZmljYXRlOiBDYUNlcnRpZmljYXRlLlJEU19DQV9SU0E0MDk2X0cxXG4gICAgICAgIH0pLFxuICAgICAgcmVhZGVyczogcHJvcHMucmVhZGVycyB8fCBbXG4gICAgICAgIENsdXN0ZXJJbnN0YW5jZS5zZXJ2ZXJsZXNzVjIoXG4gICAgICAgICAgYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1QcmltYXJ5UmVhZGVyYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY2FsZVdpdGhXcml0ZXI6IHRydWUsXG4gICAgICAgICAgICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzOiB0cnVlLFxuICAgICAgICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0RW5jcnlwdGlvbktleTogcHJpbWFyeVJlYWRlckluc2lnaHRzS2V5LmtleSxcbiAgICAgICAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX0tcHJpbWFyeS1yZWFkZXJgLFxuICAgICAgICAgICAgY2FDZXJ0aWZpY2F0ZTogQ2FDZXJ0aWZpY2F0ZS5SRFNfQ0FfUlNBNDA5Nl9HMVxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgQ2x1c3Rlckluc3RhbmNlLnNlcnZlcmxlc3NWMihcbiAgICAgICAgICBgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfVNlY29uZGFyeVJlYWRlcmAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2NhbGVXaXRoV3JpdGVyOiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHM6IHRydWUsXG4gICAgICAgICAgICBwZXJmb3JtYW5jZUluc2lnaHRFbmNyeXB0aW9uS2V5OiBzZWNvbmRhcnlSZWFkZXJJbnNpZ2h0c0tleS5rZXksXG4gICAgICAgICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9LXNlY29uZGFyeS1yZWFkZXJgLFxuICAgICAgICAgICAgY2FDZXJ0aWZpY2F0ZTogQ2FDZXJ0aWZpY2F0ZS5SRFNfQ0FfUlNBNDA5Nl9HMVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YWJhc2VQcm94eSA9IG5ldyBEYXRhYmFzZVByb3h5KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9RGF0YWJhc2VQcm94eWAsXG4gICAgICB7XG4gICAgICAgIHByb3h5VGFyZ2V0OiBQcm94eVRhcmdldC5mcm9tQ2x1c3RlcihkYXRhYmFzZUNsdXN0ZXIpLFxuICAgICAgICBzZWNyZXRzOiBbZGF0YWJhc2VDcmVkZW50aWFscy5zZWNyZXRdLFxuICAgICAgICBzZWN1cml0eUdyb3VwczogW2NsdXN0ZXJTZWN1cml0eUdyb3VwXSxcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBVQkxJQ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1Qcm94eUVuZHBvaW50T3V0cHV0YCwge1xuICAgICAga2V5OiBgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfVByb3h5RW5kcG9pbnRgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1Qcm94eUVuZHBvaW50YCxcbiAgICAgIHZhbHVlOiBkYXRhYmFzZVByb3h5LmVuZHBvaW50XG4gICAgfSk7XG5cbiAgICAvLyBSb3RhdGUgdGhlIFNlY3JldCBldmVyeSAzMCBkYXlzXG4gICAgY29uc3QgbWFzdGVyU2VjcmV0ID0gbmV3IFNlY3JldChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kZWZhdWx0RGF0YWJhc2VOYW1lfU1hc3RlclNlY3JldGAsXG4gICAgICB7XG4gICAgICAgIHNlY3JldE5hbWU6IGAke3Byb3BzLmRlZmF1bHREYXRhYmFzZU5hbWV9TWFzdGVyU2VjcmV0YCxcbiAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgfVxuICAgICk7XG5cbiAgICBuZXcgU2VjcmV0Um90YXRpb24odGhpcywgYCR7cHJvcHMuZGVmYXVsdERhdGFiYXNlTmFtZX1TZWNyZXRSb3RhdGlvbmAsIHtcbiAgICAgIGFwcGxpY2F0aW9uOiBuZXcgU2VjcmV0Um90YXRpb25BcHBsaWNhdGlvbihcbiAgICAgICAgXCJTZWNyZXRzTWFuYWdlclJEU1Bvc3RncmVTUUxSb3RhdGlvbk11bHRpVXNlclwiLFxuICAgICAgICBcIjEuMS4zNjdcIixcbiAgICAgICAge1xuICAgICAgICAgIGlzTXVsdGlVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBzZWNyZXQ6IGRhdGFiYXNlQ3JlZGVudGlhbHMuc2VjcmV0LFxuICAgICAgbWFzdGVyU2VjcmV0OiBtYXN0ZXJTZWNyZXQuc2VjcmV0LFxuICAgICAgdGFyZ2V0OiBkYXRhYmFzZUNsdXN0ZXIsXG4gICAgICB2cGM6IGRhdGFiYXNlQ2x1c3Rlci52cGNcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ import { Bucket, BucketProps } from "aws-cdk-lib/aws-s3";
2
+ import { Construct } from "constructs";
3
+ export declare class S3Bucket extends Bucket {
4
+ constructor(scope: Construct, id: string, props?: BucketProps);
5
+ }
6
+ export declare class S3WebsiteBucket extends S3Bucket {
7
+ constructor(scope: Construct, id: string, props?: BucketProps);
8
+ }
9
+ export declare class S3PublicReadBucket extends S3Bucket {
10
+ constructor(scope: Construct, id: string, props?: BucketProps);
11
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.S3PublicReadBucket = exports.S3WebsiteBucket = exports.S3Bucket = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_s3_1 = require("aws-cdk-lib/aws-s3");
6
+ class S3Bucket extends aws_s3_1.Bucket {
7
+ constructor(scope, id, props) {
8
+ super(scope, id, {
9
+ ...props,
10
+ autoDeleteObjects: true,
11
+ removalPolicy: props?.removalPolicy || aws_cdk_lib_1.RemovalPolicy.DESTROY,
12
+ versioned: true
13
+ });
14
+ }
15
+ }
16
+ exports.S3Bucket = S3Bucket;
17
+ class S3WebsiteBucket extends S3Bucket {
18
+ constructor(scope, id, props) {
19
+ super(scope, id, {
20
+ ...props,
21
+ websiteErrorDocument: "error.html",
22
+ websiteIndexDocument: "index.html",
23
+ publicReadAccess: true
24
+ });
25
+ }
26
+ }
27
+ exports.S3WebsiteBucket = S3WebsiteBucket;
28
+ class S3PublicReadBucket extends S3Bucket {
29
+ constructor(scope, id, props) {
30
+ super(scope, id, {
31
+ ...props,
32
+ publicReadAccess: true,
33
+ blockPublicAccess: new aws_s3_1.BlockPublicAccess({
34
+ blockPublicAcls: false,
35
+ blockPublicPolicy: false,
36
+ ignorePublicAcls: false,
37
+ restrictPublicBuckets: false
38
+ })
39
+ });
40
+ }
41
+ }
42
+ exports.S3PublicReadBucket = S3PublicReadBucket;
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9zdG9yZS9zMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBNEM7QUFDNUMsK0NBQTRFO0FBRzVFLE1BQWEsUUFBUyxTQUFRLGVBQU07SUFDbEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFtQjtRQUMzRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLElBQUksMkJBQWEsQ0FBQyxPQUFPO1lBQzVELFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVRELDRCQVNDO0FBRUQsTUFBYSxlQUFnQixTQUFRLFFBQVE7SUFDM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFtQjtRQUMzRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLG9CQUFvQixFQUFFLFlBQVk7WUFDbEMsb0JBQW9CLEVBQUUsWUFBWTtZQUNsQyxnQkFBZ0IsRUFBRSxJQUFJO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVRELDBDQVNDO0FBRUQsTUFBYSxrQkFBbUIsU0FBUSxRQUFRO0lBQzlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBbUI7UUFDM0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLGlCQUFpQixFQUFFLElBQUksMEJBQWlCLENBQUM7Z0JBQ3ZDLGVBQWUsRUFBRSxLQUFLO2dCQUN0QixpQkFBaUIsRUFBRSxLQUFLO2dCQUN4QixnQkFBZ0IsRUFBRSxLQUFLO2dCQUN2QixxQkFBcUIsRUFBRSxLQUFLO2FBQzdCLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFiRCxnREFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEJsb2NrUHVibGljQWNjZXNzLCBCdWNrZXQsIEJ1Y2tldFByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIFMzQnVja2V0IGV4dGVuZHMgQnVja2V0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBCdWNrZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzPy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIHZlcnNpb25lZDogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTM1dlYnNpdGVCdWNrZXQgZXh0ZW5kcyBTM0J1Y2tldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogQnVja2V0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgd2Vic2l0ZUVycm9yRG9jdW1lbnQ6IFwiZXJyb3IuaHRtbFwiLFxuICAgICAgd2Vic2l0ZUluZGV4RG9jdW1lbnQ6IFwiaW5kZXguaHRtbFwiLFxuICAgICAgcHVibGljUmVhZEFjY2VzczogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTM1B1YmxpY1JlYWRCdWNrZXQgZXh0ZW5kcyBTM0J1Y2tldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogQnVja2V0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgcHVibGljUmVhZEFjY2VzczogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBuZXcgQmxvY2tQdWJsaWNBY2Nlc3Moe1xuICAgICAgICBibG9ja1B1YmxpY0FjbHM6IGZhbHNlLFxuICAgICAgICBibG9ja1B1YmxpY1BvbGljeTogZmFsc2UsXG4gICAgICAgIGlnbm9yZVB1YmxpY0FjbHM6IGZhbHNlLFxuICAgICAgICByZXN0cmljdFB1YmxpY0J1Y2tldHM6IGZhbHNlXG4gICAgICB9KVxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import { SecretValue } from "aws-cdk-lib";
2
+ import { Secret as CdkSecret, SecretStringGenerator } from "aws-cdk-lib/aws-secretsmanager";
3
+ import { Construct } from "constructs";
4
+ import { StackBuilder } from "../awsStack";
5
+ import { KeyValue } from "../compute/ecs";
6
+ import { CustomerManagedKey } from "./kms";
7
+ interface SecretProps {
8
+ secretName: string;
9
+ secretObjectValue?: {
10
+ [key: string]: SecretValue;
11
+ };
12
+ secretStringValue?: string;
13
+ description?: string;
14
+ aliasName?: string;
15
+ generateSecretString?: SecretStringGenerator;
16
+ tags: KeyValue;
17
+ buildkiteRoleArn?: string;
18
+ }
19
+ export default class Secret extends Construct {
20
+ readonly secret: CdkSecret;
21
+ readonly secretsCustomerManagedKey: CustomerManagedKey;
22
+ constructor(scope: Construct, id: string, props: SecretProps);
23
+ static build(id: string, props: SecretProps): (sb: StackBuilder) => Construct;
24
+ private setupBuildkitePermissions;
25
+ }
26
+ export {};
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
4
+ const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
5
+ const constructs_1 = require("constructs");
6
+ const tagResource_1 = require("../../../utils/tagResource");
7
+ const kms_1 = require("./kms");
8
+ class Secret extends constructs_1.Construct {
9
+ constructor(scope, id, props) {
10
+ super(scope, id);
11
+ this.secretsCustomerManagedKey = new kms_1.CustomerManagedKey(this, `${id}CustomerManagedKey`, {
12
+ aliasName: `cmk/${id}`,
13
+ tags: props.tags
14
+ });
15
+ /**
16
+ * If a secretStringValue is provided, use it to create the secret.
17
+ */
18
+ const secretStringValue = props.secretStringValue
19
+ ? {
20
+ secretStringValue: aws_cdk_lib_1.SecretValue.unsafePlainText(props.secretStringValue || "")
21
+ }
22
+ : {};
23
+ /**
24
+ * If a generateSecretString is provided, use it to create the secret.
25
+ * If a secretStringValue is provided, ignore the generateSecretString.
26
+ */
27
+ const generateSecretString = !props.secretStringValue && props.generateSecretString
28
+ ? { generateSecretString: props.generateSecretString }
29
+ : {};
30
+ // Construct the base options for CdkSecret
31
+ const secretOptions = {
32
+ secretName: props.secretName,
33
+ secretObjectValue: props.secretObjectValue,
34
+ encryptionKey: this.secretsCustomerManagedKey.key,
35
+ description: props.description,
36
+ ...secretStringValue,
37
+ ...generateSecretString
38
+ };
39
+ this.secret = new aws_secretsmanager_1.Secret(this, `${id}Secret`, secretOptions);
40
+ (0, tagResource_1.default)(this.secret, props.tags);
41
+ }
42
+ static build(id, props) {
43
+ return (sb) => {
44
+ const newProps = {
45
+ ...props
46
+ };
47
+ return new this(sb.getStack(), id, newProps);
48
+ };
49
+ }
50
+ setupBuildkitePermissions(buildkiteRole) {
51
+ this.secret.grantRead(buildkiteRole);
52
+ }
53
+ }
54
+ exports.default = Secret;
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3Mvc3RvcmUvc2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQTBDO0FBRTFDLHVFQUd3QztBQUN4QywyQ0FBdUM7QUFDdkMsNERBQXFEO0FBR3JELCtCQUEyQztBQWUzQyxNQUFxQixNQUFPLFNBQVEsc0JBQVM7SUFJM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtRQUMxRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLHdCQUFrQixDQUNyRCxJQUFJLEVBQ0osR0FBRyxFQUFFLG9CQUFvQixFQUN6QjtZQUNFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FDRixDQUFDO1FBRUY7O1dBRUc7UUFDSCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUI7WUFDL0MsQ0FBQyxDQUFDO2dCQUNFLGlCQUFpQixFQUFFLHlCQUFXLENBQUMsZUFBZSxDQUM1QyxLQUFLLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUM5QjthQUNGO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQOzs7V0FHRztRQUNILE1BQU0sb0JBQW9CLEdBQ3hCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxvQkFBb0I7WUFDcEQsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFO1lBQ3RELENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFVCwyQ0FBMkM7UUFDM0MsTUFBTSxhQUFhLEdBQUc7WUFDcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsYUFBYSxFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHO1lBQ2pELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixHQUFHLGlCQUFpQjtZQUNwQixHQUFHLG9CQUFvQjtTQUN4QixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLDJCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEUsSUFBQSxxQkFBVyxFQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUNWLEVBQVUsRUFDVixLQUFrQjtRQUVsQixPQUFPLENBQUMsRUFBZ0IsRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFnQjtnQkFDNUIsR0FBRyxLQUFLO2FBQ1QsQ0FBQztZQUNGLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8seUJBQXlCLENBQUMsYUFBeUI7UUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBbEVELHlCQWtFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlY3JldFZhbHVlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJR3JhbnRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIFNlY3JldCBhcyBDZGtTZWNyZXQsXG4gIFNlY3JldFN0cmluZ0dlbmVyYXRvclxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHRhZ1Jlc291cmNlIGZyb20gXCIuLi8uLi8uLi91dGlscy90YWdSZXNvdXJjZVwiO1xuaW1wb3J0IHsgU3RhY2tCdWlsZGVyIH0gZnJvbSBcIi4uL2F3c1N0YWNrXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IHsgQ3VzdG9tZXJNYW5hZ2VkS2V5IH0gZnJvbSBcIi4va21zXCI7XG5cbmludGVyZmFjZSBTZWNyZXRQcm9wcyB7XG4gIHNlY3JldE5hbWU6IHN0cmluZztcbiAgc2VjcmV0T2JqZWN0VmFsdWU/OiB7XG4gICAgW2tleTogc3RyaW5nXTogU2VjcmV0VmFsdWU7XG4gIH07XG4gIHNlY3JldFN0cmluZ1ZhbHVlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgYWxpYXNOYW1lPzogc3RyaW5nO1xuICBnZW5lcmF0ZVNlY3JldFN0cmluZz86IFNlY3JldFN0cmluZ0dlbmVyYXRvcjtcbiAgdGFnczogS2V5VmFsdWU7XG4gIGJ1aWxka2l0ZVJvbGVBcm4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlY3JldCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXQ6IENka1NlY3JldDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldHNDdXN0b21lck1hbmFnZWRLZXk6IEN1c3RvbWVyTWFuYWdlZEtleTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VjcmV0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5zZWNyZXRzQ3VzdG9tZXJNYW5hZ2VkS2V5ID0gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtpZH1DdXN0b21lck1hbmFnZWRLZXlgLFxuICAgICAge1xuICAgICAgICBhbGlhc05hbWU6IGBjbWsvJHtpZH1gLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIElmIGEgc2VjcmV0U3RyaW5nVmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBpdCB0byBjcmVhdGUgdGhlIHNlY3JldC5cbiAgICAgKi9cbiAgICBjb25zdCBzZWNyZXRTdHJpbmdWYWx1ZSA9IHByb3BzLnNlY3JldFN0cmluZ1ZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBzZWNyZXRTdHJpbmdWYWx1ZTogU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KFxuICAgICAgICAgICAgcHJvcHMuc2VjcmV0U3RyaW5nVmFsdWUgfHwgXCJcIlxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgOiB7fTtcblxuICAgIC8qKlxuICAgICAqIElmIGEgZ2VuZXJhdGVTZWNyZXRTdHJpbmcgaXMgcHJvdmlkZWQsIHVzZSBpdCB0byBjcmVhdGUgdGhlIHNlY3JldC5cbiAgICAgKiBJZiBhIHNlY3JldFN0cmluZ1ZhbHVlIGlzIHByb3ZpZGVkLCBpZ25vcmUgdGhlIGdlbmVyYXRlU2VjcmV0U3RyaW5nLlxuICAgICAqL1xuICAgIGNvbnN0IGdlbmVyYXRlU2VjcmV0U3RyaW5nID1cbiAgICAgICFwcm9wcy5zZWNyZXRTdHJpbmdWYWx1ZSAmJiBwcm9wcy5nZW5lcmF0ZVNlY3JldFN0cmluZ1xuICAgICAgICA/IHsgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IHByb3BzLmdlbmVyYXRlU2VjcmV0U3RyaW5nIH1cbiAgICAgICAgOiB7fTtcblxuICAgIC8vIENvbnN0cnVjdCB0aGUgYmFzZSBvcHRpb25zIGZvciBDZGtTZWNyZXRcbiAgICBjb25zdCBzZWNyZXRPcHRpb25zID0ge1xuICAgICAgc2VjcmV0TmFtZTogcHJvcHMuc2VjcmV0TmFtZSxcbiAgICAgIHNlY3JldE9iamVjdFZhbHVlOiBwcm9wcy5zZWNyZXRPYmplY3RWYWx1ZSxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHRoaXMuc2VjcmV0c0N1c3RvbWVyTWFuYWdlZEtleS5rZXksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAuLi5zZWNyZXRTdHJpbmdWYWx1ZSxcbiAgICAgIC4uLmdlbmVyYXRlU2VjcmV0U3RyaW5nXG4gICAgfTtcblxuICAgIHRoaXMuc2VjcmV0ID0gbmV3IENka1NlY3JldCh0aGlzLCBgJHtpZH1TZWNyZXRgLCBzZWNyZXRPcHRpb25zKTtcblxuICAgIHRhZ1Jlc291cmNlKHRoaXMuc2VjcmV0LCBwcm9wcy50YWdzKTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBTZWNyZXRQcm9wc1xuICApOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld1Byb3BzOiBTZWNyZXRQcm9wcyA9IHtcbiAgICAgICAgLi4ucHJvcHNcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IHRoaXMoc2IuZ2V0U3RhY2soKSwgaWQsIG5ld1Byb3BzKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEJ1aWxka2l0ZVBlcm1pc3Npb25zKGJ1aWxka2l0ZVJvbGU6IElHcmFudGFibGUpIHtcbiAgICB0aGlzLnNlY3JldC5ncmFudFJlYWQoYnVpbGRraXRlUm9sZSk7XG4gIH1cbn1cbiJdfQ==
@@ -7,18 +7,13 @@ class AwsCustomResource extends customResource.AwsCustomResource {
7
7
  constructor(scope, id, props) {
8
8
  super(scope, id, {
9
9
  ...props,
10
- functionName: props.functionName,
11
10
  logRetention: aws_cdk_lib_1.aws_logs.RetentionDays.ONE_YEAR,
12
- onCreate: props.onCreate,
13
- onDelete: props.onDelete,
14
- onUpdate: props.onUpdate,
15
11
  policy: props.policy || customResource.AwsCustomResourcePolicy.fromSdkCalls({
16
12
  resources: customResource.AwsCustomResourcePolicy.ANY_RESOURCE
17
13
  }),
18
- resourceType: props.resourceType
19
14
  });
20
15
  }
21
16
  }
22
17
  exports.AwsCustomResource = AwsCustomResource;
23
18
  ;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzQ3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLCtEQUErRDtBQUcvRCxNQUFhLGlCQUFrQixTQUFRLGNBQWMsQ0FBQyxpQkFBaUI7SUFHckUsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBNEM7UUFFNUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsWUFBWSxFQUFFLHNCQUFRLENBQUMsYUFBYSxDQUFDLFFBQVE7WUFDN0MsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQztnQkFDMUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZO2FBQy9ELENBQUM7WUFDRixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUFDO0FBcEJGLDhDQW9CRTtBQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NfbG9ncyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2UgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBjbGFzcyBBd3NDdXN0b21SZXNvdXJjZSBleHRlbmRzIGN1c3RvbVJlc291cmNlLkF3c0N1c3RvbVJlc291cmNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBjdXN0b21SZXNvdXJjZS5Bd3NDdXN0b21SZXNvdXJjZVByb3BzXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBmdW5jdGlvbk5hbWU6IHByb3BzLmZ1bmN0aW9uTmFtZSxcbiAgICAgIGxvZ1JldGVudGlvbjogYXdzX2xvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfWUVBUixcbiAgICAgIG9uQ3JlYXRlOiBwcm9wcy5vbkNyZWF0ZSxcbiAgICAgIG9uRGVsZXRlOiBwcm9wcy5vbkRlbGV0ZSxcbiAgICAgIG9uVXBkYXRlOiBwcm9wcy5vblVwZGF0ZSxcbiAgICAgIHBvbGljeTogcHJvcHMucG9saWN5IHx8IGN1c3RvbVJlc291cmNlLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TZGtDYWxscyh7XG4gICAgICAgIHJlc291cmNlczogY3VzdG9tUmVzb3VyY2UuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuQU5ZX1JFU09VUkNFXG4gICAgICB9KSxcbiAgICAgIHJlc291cmNlVHlwZTogcHJvcHMucmVzb3VyY2VUeXBlXG4gIH0pO1xufX07Il19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzQ3VzdG9tUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLCtEQUErRDtBQUcvRCxNQUFhLGlCQUFrQixTQUFRLGNBQWMsQ0FBQyxpQkFBaUI7SUFHckUsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBNEM7UUFFNUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixZQUFZLEVBQUUsc0JBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUTtZQUM3QyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDO2dCQUMxRSxTQUFTLEVBQUUsY0FBYyxDQUFDLHVCQUF1QixDQUFDLFlBQVk7YUFDL0QsQ0FBQztTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FBQztBQWZGLDhDQWVFO0FBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF3c19sb2dzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIEF3c0N1c3RvbVJlc291cmNlIGV4dGVuZHMgY3VzdG9tUmVzb3VyY2UuQXdzQ3VzdG9tUmVzb3VyY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IGN1c3RvbVJlc291cmNlLkF3c0N1c3RvbVJlc291cmNlUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcywgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5jdXN0b21fcmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlXG4gICAgICBsb2dSZXRlbnRpb246IGF3c19sb2dzLlJldGVudGlvbkRheXMuT05FX1lFQVIsXG4gICAgICBwb2xpY3k6IHByb3BzLnBvbGljeSB8fCBjdXN0b21SZXNvdXJjZS5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICByZXNvdXJjZXM6IGN1c3RvbVJlc291cmNlLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LkFOWV9SRVNPVVJDRVxuICAgICAgfSksXG4gIH0pO1xufX07XG4iXX0=
@@ -5,12 +5,9 @@ const cdk = require("aws-cdk-lib");
5
5
  class CfnOutput extends cdk.CfnOutput {
6
6
  constructor(scope, id, props) {
7
7
  super(scope, id, {
8
- ...props,
9
- value: props.value,
10
- description: props.description,
11
- exportName: props.exportName
8
+ ...props, // https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnOutput.html
12
9
  });
13
10
  }
14
11
  }
15
12
  exports.CfnOutput = CfnOutput;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2Nmbk91dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFHbkMsTUFBYSxTQUFVLFNBQVEsR0FBRyxDQUFDLFNBQVM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVRELDhCQVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIENmbk91dHB1dCBleHRlbmRzIGNkay5DZm5PdXRwdXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogY2RrLkNmbk91dHB1dFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGV4cG9ydE5hbWU6IHByb3BzLmV4cG9ydE5hbWVcbiAgICB9KTtcbiAgfVxufVxuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZuT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2Nmbk91dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFHbkMsTUFBYSxTQUFVLFNBQVEsR0FBRyxDQUFDLFNBQVM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSyxFQUFFLHlFQUF5RTtTQUNwRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFORCw4QkFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBjbGFzcyBDZm5PdXRwdXQgZXh0ZW5kcyBjZGsuQ2ZuT3V0cHV0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGNkay5DZm5PdXRwdXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuQ2ZuT3V0cHV0Lmh0bWxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,15 @@
1
+ import { Stack } from "aws-cdk-lib";
2
+ import { Project, ProjectProps } from "aws-cdk-lib/aws-codebuild";
3
+ import { Construct } from "constructs";
4
+ import { KeyValue } from "../../../types";
5
+ interface CodeBuildProps extends ProjectProps {
6
+ tags: KeyValue;
7
+ }
8
+ export declare class CodeBuildProject extends Construct {
9
+ readonly project: Project;
10
+ constructor(scope: Construct, id: string, props: CodeBuildProps);
11
+ }
12
+ export declare class CodeBuildProjectStack extends Stack {
13
+ constructor(scope: Construct, id: string, props: CodeBuildProps);
14
+ }
15
+ export {};