@fjall/components-infrastructure 0.89.4 → 0.89.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 (378) hide show
  1. package/LICENSE +50 -21
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +1 -18
  4. package/dist/lib/app.d.ts +12 -12
  5. package/dist/lib/app.js +61 -56
  6. package/dist/lib/aspects/index.d.ts +1 -1
  7. package/dist/lib/aspects/index.js +1 -6
  8. package/dist/lib/aspects/resourceInventory.js +6 -13
  9. package/dist/lib/config/audit.js +1 -5
  10. package/dist/lib/config/aws/accessAnalyser.d.ts +11 -0
  11. package/dist/lib/config/aws/accessAnalyser.js +17 -0
  12. package/dist/lib/config/aws/accountAuditRole.js +11 -15
  13. package/dist/lib/config/aws/accountMonitoringRole.js +25 -29
  14. package/dist/lib/config/aws/alarmTopic.d.ts +8 -0
  15. package/dist/lib/config/aws/alarmTopic.js +19 -0
  16. package/dist/lib/config/aws/cloudTrail.js +4 -9
  17. package/dist/lib/config/aws/configRecorder.d.ts +16 -0
  18. package/dist/lib/config/aws/configRecorder.js +51 -0
  19. package/dist/lib/config/aws/configRulePreset.d.ts +13 -0
  20. package/dist/lib/config/aws/configRulePreset.js +62 -0
  21. package/dist/lib/config/aws/disasterRecovery.d.ts +1 -1
  22. package/dist/lib/config/aws/disasterRecovery.js +56 -73
  23. package/dist/lib/config/aws/ebsDefaultEncryption.d.ts +8 -0
  24. package/dist/lib/config/aws/ebsDefaultEncryption.js +41 -0
  25. package/dist/lib/config/aws/ecrDefaultImage.js +25 -30
  26. package/dist/lib/config/aws/eventBus.js +8 -11
  27. package/dist/lib/config/aws/guardDutyDetector.d.ts +16 -0
  28. package/dist/lib/config/aws/guardDutyDetector.js +26 -0
  29. package/dist/lib/config/aws/identityCenter.d.ts +1 -1
  30. package/dist/lib/config/aws/identityCenter.js +23 -25
  31. package/dist/lib/config/aws/identityCenterGroupMembership.js +18 -22
  32. package/dist/lib/config/aws/index.d.ts +19 -8
  33. package/dist/lib/config/aws/index.js +19 -25
  34. package/dist/lib/config/aws/inspectorEnablement.d.ts +9 -0
  35. package/dist/lib/config/aws/inspectorEnablement.js +51 -0
  36. package/dist/lib/config/aws/ipam.js +9 -13
  37. package/dist/lib/config/aws/oidcConnector.js +8 -12
  38. package/dist/lib/config/aws/platform.js +1 -5
  39. package/dist/lib/config/aws/s3BlockPublicAccess.d.ts +9 -0
  40. package/dist/lib/config/aws/s3BlockPublicAccess.js +55 -0
  41. package/dist/lib/config/aws/scpPreset.d.ts +21 -0
  42. package/dist/lib/config/aws/scpPreset.js +311 -0
  43. package/dist/lib/config/aws/securityBaseline.d.ts +15 -0
  44. package/dist/lib/config/aws/securityBaseline.js +27 -0
  45. package/dist/lib/config/aws/securityHubHub.d.ts +15 -0
  46. package/dist/lib/config/aws/securityHubHub.js +28 -0
  47. package/dist/lib/config/aws/securityServicesAdmin.d.ts +20 -0
  48. package/dist/lib/config/aws/securityServicesAdmin.js +115 -0
  49. package/dist/lib/config/index.d.ts +2 -2
  50. package/dist/lib/config/index.js +2 -21
  51. package/dist/lib/index.d.ts +4 -4
  52. package/dist/lib/index.js +5 -26
  53. package/dist/lib/patterns/aws/account.d.ts +17 -1
  54. package/dist/lib/patterns/aws/account.js +61 -33
  55. package/dist/lib/patterns/aws/apexDomainPattern.d.ts +26 -0
  56. package/dist/lib/patterns/aws/apexDomainPattern.js +91 -0
  57. package/dist/lib/patterns/aws/auditRole.js +13 -16
  58. package/dist/lib/patterns/aws/buildkite.d.ts +1 -1
  59. package/dist/lib/patterns/aws/buildkite.js +70 -75
  60. package/dist/lib/patterns/aws/cdn.d.ts +5 -5
  61. package/dist/lib/patterns/aws/cdn.js +22 -28
  62. package/dist/lib/patterns/aws/compute.d.ts +1 -1
  63. package/dist/lib/patterns/aws/compute.js +31 -44
  64. package/dist/lib/patterns/aws/computeEc2.d.ts +1 -1
  65. package/dist/lib/patterns/aws/computeEc2.js +11 -14
  66. package/dist/lib/patterns/aws/computeEcs.d.ts +18 -2
  67. package/dist/lib/patterns/aws/computeEcs.js +41 -31
  68. package/dist/lib/patterns/aws/computeLambda.d.ts +2 -2
  69. package/dist/lib/patterns/aws/computeLambda.js +24 -31
  70. package/dist/lib/patterns/aws/database.d.ts +16 -7
  71. package/dist/lib/patterns/aws/database.js +81 -73
  72. package/dist/lib/patterns/aws/delegatedDomainPattern.d.ts +17 -0
  73. package/dist/lib/patterns/aws/delegatedDomainPattern.js +54 -0
  74. package/dist/lib/patterns/aws/dnsRecordComposer.d.ts +25 -0
  75. package/dist/lib/patterns/aws/dnsRecordComposer.js +225 -0
  76. package/dist/lib/patterns/aws/domain.d.ts +32 -0
  77. package/dist/lib/patterns/aws/domain.js +115 -0
  78. package/dist/lib/patterns/aws/domainDelegation.d.ts +3 -3
  79. package/dist/lib/patterns/aws/domainDelegation.js +28 -37
  80. package/dist/lib/patterns/aws/domainFactory.d.ts +20 -5
  81. package/dist/lib/patterns/aws/domainFactory.js +48 -10
  82. package/dist/lib/patterns/aws/domainValidation.d.ts +11 -0
  83. package/dist/lib/patterns/aws/domainValidation.js +145 -0
  84. package/dist/lib/patterns/aws/externalRecordsPattern.d.ts +18 -0
  85. package/dist/lib/patterns/aws/externalRecordsPattern.js +141 -0
  86. package/dist/lib/patterns/aws/fivetranProxy.d.ts +1 -1
  87. package/dist/lib/patterns/aws/fivetranProxy.js +6 -11
  88. package/dist/lib/patterns/aws/index.d.ts +21 -19
  89. package/dist/lib/patterns/aws/index.js +25 -36
  90. package/dist/lib/patterns/aws/interfaces/cdn.js +1 -5
  91. package/dist/lib/patterns/aws/interfaces/compute.js +4 -11
  92. package/dist/lib/patterns/aws/interfaces/connector.js +1 -15
  93. package/dist/lib/patterns/aws/interfaces/database.d.ts +1 -1
  94. package/dist/lib/patterns/aws/interfaces/database.js +6 -15
  95. package/dist/lib/patterns/aws/interfaces/domain.d.ts +80 -2
  96. package/dist/lib/patterns/aws/interfaces/domain.js +1 -6
  97. package/dist/lib/patterns/aws/interfaces/index.js +8 -41
  98. package/dist/lib/patterns/aws/interfaces/messaging.js +4 -11
  99. package/dist/lib/patterns/aws/interfaces/organisation.d.ts +1 -1
  100. package/dist/lib/patterns/aws/interfaces/organisation.js +4 -11
  101. package/dist/lib/patterns/aws/interfaces/pattern.js +2 -7
  102. package/dist/lib/patterns/aws/interfaces/storage.js +1 -5
  103. package/dist/lib/patterns/aws/managedIdentityCenter.js +7 -12
  104. package/dist/lib/patterns/aws/messaging.d.ts +7 -7
  105. package/dist/lib/patterns/aws/messaging.js +22 -33
  106. package/dist/lib/patterns/aws/network.d.ts +2 -2
  107. package/dist/lib/patterns/aws/network.js +9 -14
  108. package/dist/lib/patterns/aws/organisation.d.ts +6 -2
  109. package/dist/lib/patterns/aws/organisation.js +34 -35
  110. package/dist/lib/patterns/aws/organisationFactory.d.ts +3 -3
  111. package/dist/lib/patterns/aws/organisationFactory.js +7 -12
  112. package/dist/lib/patterns/aws/pattern.js +6 -12
  113. package/dist/lib/patterns/aws/payload.js +73 -63
  114. package/dist/lib/patterns/aws/platform.d.ts +6 -3
  115. package/dist/lib/patterns/aws/platform.js +15 -15
  116. package/dist/lib/patterns/aws/storage.d.ts +6 -4
  117. package/dist/lib/patterns/aws/storage.js +35 -40
  118. package/dist/lib/patterns/aws/subdomainHostedZone.js +11 -16
  119. package/dist/lib/patterns/aws/targets/fjallTargets.d.ts +37 -0
  120. package/dist/lib/patterns/aws/targets/fjallTargets.js +66 -0
  121. package/dist/lib/patterns/aws/targets/index.d.ts +2 -0
  122. package/dist/lib/patterns/aws/targets/index.js +2 -0
  123. package/dist/lib/patterns/aws/targets/targetResolution.d.ts +76 -0
  124. package/dist/lib/patterns/aws/targets/targetResolution.js +119 -0
  125. package/dist/lib/patterns/index.d.ts +1 -0
  126. package/dist/lib/patterns/index.js +1 -0
  127. package/dist/lib/resources/aws/analytics/clickhouse.d.ts +15 -0
  128. package/dist/lib/resources/aws/analytics/clickhouse.js +292 -0
  129. package/dist/lib/resources/aws/analytics/clickhouseConstants.d.ts +73 -0
  130. package/dist/lib/resources/aws/analytics/clickhouseConstants.js +87 -0
  131. package/dist/lib/resources/aws/analytics/clickhouseSecurityGroup.d.ts +13 -0
  132. package/dist/lib/resources/aws/analytics/clickhouseSecurityGroup.js +28 -0
  133. package/dist/lib/resources/aws/analytics/clickhouseTypes.d.ts +47 -0
  134. package/dist/lib/resources/aws/analytics/clickhouseTypes.js +1 -0
  135. package/dist/lib/resources/aws/analytics/clickhouseUserData.d.ts +5 -0
  136. package/dist/lib/resources/aws/analytics/clickhouseUserData.js +248 -0
  137. package/dist/lib/resources/aws/analytics/index.d.ts +2 -0
  138. package/dist/lib/resources/aws/analytics/index.js +1 -0
  139. package/dist/lib/resources/aws/audit/auditRole.js +10 -15
  140. package/dist/lib/resources/aws/audit/index.d.ts +1 -1
  141. package/dist/lib/resources/aws/audit/index.js +1 -6
  142. package/dist/lib/resources/aws/backup/backupPlan.d.ts +1 -1
  143. package/dist/lib/resources/aws/backup/backupPlan.js +14 -16
  144. package/dist/lib/resources/aws/backup/backupVault.d.ts +1 -1
  145. package/dist/lib/resources/aws/backup/backupVault.js +13 -15
  146. package/dist/lib/resources/aws/backup/index.d.ts +2 -2
  147. package/dist/lib/resources/aws/backup/index.js +2 -19
  148. package/dist/lib/resources/aws/base/awsStack.js +17 -19
  149. package/dist/lib/resources/aws/base/index.d.ts +1 -1
  150. package/dist/lib/resources/aws/base/index.js +1 -18
  151. package/dist/lib/resources/aws/cdn/cloudFront.js +40 -42
  152. package/dist/lib/resources/aws/cdn/index.d.ts +1 -1
  153. package/dist/lib/resources/aws/cdn/index.js +1 -18
  154. package/dist/lib/resources/aws/compute/ec2.js +39 -39
  155. package/dist/lib/resources/aws/compute/ecs.d.ts +18 -396
  156. package/dist/lib/resources/aws/compute/ecs.js +105 -976
  157. package/dist/lib/resources/aws/compute/ecsCapacityProviderAspect.d.ts +22 -0
  158. package/dist/lib/resources/aws/compute/ecsCapacityProviderAspect.js +35 -0
  159. package/dist/lib/resources/aws/compute/ecsConstants.d.ts +20 -0
  160. package/dist/lib/resources/aws/compute/ecsConstants.js +49 -0
  161. package/dist/lib/resources/aws/compute/ecsContext.d.ts +12 -0
  162. package/dist/lib/resources/aws/compute/ecsContext.js +1 -0
  163. package/dist/lib/resources/aws/compute/ecsImages.d.ts +4 -0
  164. package/dist/lib/resources/aws/compute/ecsImages.js +35 -0
  165. package/dist/lib/resources/aws/compute/ecsNetworking.d.ts +28 -0
  166. package/dist/lib/resources/aws/compute/ecsNetworking.js +290 -0
  167. package/dist/lib/resources/aws/compute/ecsRoles.d.ts +15 -0
  168. package/dist/lib/resources/aws/compute/ecsRoles.js +110 -0
  169. package/dist/lib/resources/aws/compute/ecsServiceFactory.d.ts +33 -0
  170. package/dist/lib/resources/aws/compute/ecsServiceFactory.js +183 -0
  171. package/dist/lib/resources/aws/compute/ecsTaskDefinition.d.ts +30 -0
  172. package/dist/lib/resources/aws/compute/ecsTaskDefinition.js +168 -0
  173. package/dist/lib/resources/aws/compute/ecsTypes.d.ts +337 -0
  174. package/dist/lib/resources/aws/compute/ecsTypes.js +10 -0
  175. package/dist/lib/resources/aws/compute/ecsValidation.d.ts +18 -0
  176. package/dist/lib/resources/aws/compute/ecsValidation.js +72 -0
  177. package/dist/lib/resources/aws/compute/index.d.ts +3 -3
  178. package/dist/lib/resources/aws/compute/index.js +3 -20
  179. package/dist/lib/resources/aws/compute/lambda.d.ts +10 -2
  180. package/dist/lib/resources/aws/compute/lambda.js +82 -70
  181. package/dist/lib/resources/aws/database/dynamodb.js +27 -28
  182. package/dist/lib/resources/aws/database/index.d.ts +7 -7
  183. package/dist/lib/resources/aws/database/index.js +14 -33
  184. package/dist/lib/resources/aws/database/rdsAurora.d.ts +10 -2
  185. package/dist/lib/resources/aws/database/rdsAurora.js +76 -61
  186. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +2 -2
  187. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +24 -21
  188. package/dist/lib/resources/aws/database/rdsDefaults.js +3 -7
  189. package/dist/lib/resources/aws/database/rdsHelpers.d.ts +2 -2
  190. package/dist/lib/resources/aws/database/rdsHelpers.js +21 -29
  191. package/dist/lib/resources/aws/database/rdsInstance.d.ts +11 -3
  192. package/dist/lib/resources/aws/database/rdsInstance.js +101 -83
  193. package/dist/lib/resources/aws/database/rdsProxyOutput.js +5 -9
  194. package/dist/lib/resources/aws/iam/delegationRole.d.ts +18 -0
  195. package/dist/lib/resources/aws/iam/delegationRole.js +60 -0
  196. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +4 -9
  197. package/dist/lib/resources/aws/iam/identityCenter/group.js +5 -9
  198. package/dist/lib/resources/aws/iam/identityCenter/index.d.ts +3 -3
  199. package/dist/lib/resources/aws/iam/identityCenter/index.js +3 -20
  200. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -1
  201. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +5 -9
  202. package/dist/lib/resources/aws/iam/index.d.ts +5 -4
  203. package/dist/lib/resources/aws/iam/index.js +5 -21
  204. package/dist/lib/resources/aws/iam/instanceProfile.js +2 -7
  205. package/dist/lib/resources/aws/iam/managedPolicy.js +2 -7
  206. package/dist/lib/resources/aws/iam/policy.js +2 -7
  207. package/dist/lib/resources/aws/iam/role.js +2 -7
  208. package/dist/lib/resources/aws/index.d.ts +7 -7
  209. package/dist/lib/resources/aws/index.js +7 -24
  210. package/dist/lib/resources/aws/logging/cloudTrail.d.ts +1 -1
  211. package/dist/lib/resources/aws/logging/cloudTrail.js +18 -22
  212. package/dist/lib/resources/aws/logging/index.d.ts +2 -2
  213. package/dist/lib/resources/aws/logging/index.js +2 -19
  214. package/dist/lib/resources/aws/logging/logGroup.js +4 -10
  215. package/dist/lib/resources/aws/messaging/eventbridge.js +11 -14
  216. package/dist/lib/resources/aws/messaging/index.d.ts +4 -4
  217. package/dist/lib/resources/aws/messaging/index.js +4 -21
  218. package/dist/lib/resources/aws/messaging/sns.js +11 -14
  219. package/dist/lib/resources/aws/messaging/sqs.js +32 -34
  220. package/dist/lib/resources/aws/messaging/utils.d.ts +1 -1
  221. package/dist/lib/resources/aws/messaging/utils.js +1 -6
  222. package/dist/lib/resources/aws/monitoring/alarmDefaults.d.ts +36 -0
  223. package/dist/lib/resources/aws/monitoring/alarmDefaults.js +34 -0
  224. package/dist/lib/resources/aws/monitoring/ecsAlarms.d.ts +21 -0
  225. package/dist/lib/resources/aws/monitoring/ecsAlarms.js +88 -0
  226. package/dist/lib/resources/aws/monitoring/index.d.ts +4 -0
  227. package/dist/lib/resources/aws/monitoring/index.js +4 -5
  228. package/dist/lib/resources/aws/monitoring/lambdaAlarms.d.ts +18 -0
  229. package/dist/lib/resources/aws/monitoring/lambdaAlarms.js +44 -0
  230. package/dist/lib/resources/aws/monitoring/rdsAlarms.d.ts +20 -0
  231. package/dist/lib/resources/aws/monitoring/rdsAlarms.js +52 -0
  232. package/dist/lib/resources/aws/networking/crossAccountDelegationRecord.d.ts +17 -0
  233. package/dist/lib/resources/aws/networking/crossAccountDelegationRecord.js +26 -0
  234. package/dist/lib/resources/aws/networking/dnsRecord/aRecord.d.ts +12 -0
  235. package/dist/lib/resources/aws/networking/dnsRecord/aRecord.js +21 -0
  236. package/dist/lib/resources/aws/networking/dnsRecord/aaaaRecord.d.ts +12 -0
  237. package/dist/lib/resources/aws/networking/dnsRecord/aaaaRecord.js +22 -0
  238. package/dist/lib/resources/aws/networking/dnsRecord/aliasRecord.d.ts +12 -0
  239. package/dist/lib/resources/aws/networking/dnsRecord/aliasRecord.js +23 -0
  240. package/dist/lib/resources/aws/networking/dnsRecord/caaRecord.d.ts +17 -0
  241. package/dist/lib/resources/aws/networking/dnsRecord/caaRecord.js +21 -0
  242. package/dist/lib/resources/aws/networking/dnsRecord/cnameRecord.d.ts +12 -0
  243. package/dist/lib/resources/aws/networking/dnsRecord/cnameRecord.js +22 -0
  244. package/dist/lib/resources/aws/networking/dnsRecord/dnsRecordBase.d.ts +17 -0
  245. package/dist/lib/resources/aws/networking/dnsRecord/dnsRecordBase.js +17 -0
  246. package/dist/lib/resources/aws/networking/dnsRecord/index.d.ts +10 -0
  247. package/dist/lib/resources/aws/networking/dnsRecord/index.js +10 -0
  248. package/dist/lib/resources/aws/networking/dnsRecord/mxRecord.d.ts +16 -0
  249. package/dist/lib/resources/aws/networking/dnsRecord/mxRecord.js +21 -0
  250. package/dist/lib/resources/aws/networking/dnsRecord/nsRecord.d.ts +12 -0
  251. package/dist/lib/resources/aws/networking/dnsRecord/nsRecord.js +21 -0
  252. package/dist/lib/resources/aws/networking/dnsRecord/srvRecord.d.ts +18 -0
  253. package/dist/lib/resources/aws/networking/dnsRecord/srvRecord.js +21 -0
  254. package/dist/lib/resources/aws/networking/dnsRecord/txtRecord.d.ts +12 -0
  255. package/dist/lib/resources/aws/networking/dnsRecord/txtRecord.js +21 -0
  256. package/dist/lib/resources/aws/networking/domain.d.ts +1 -1
  257. package/dist/lib/resources/aws/networking/domain.js +32 -34
  258. package/dist/lib/resources/aws/networking/domainCertificate.d.ts +8 -3
  259. package/dist/lib/resources/aws/networking/domainCertificate.js +22 -16
  260. package/dist/lib/resources/aws/networking/hostedZone.d.ts +23 -19
  261. package/dist/lib/resources/aws/networking/hostedZone.js +70 -134
  262. package/dist/lib/resources/aws/networking/index.d.ts +8 -7
  263. package/dist/lib/resources/aws/networking/index.js +8 -24
  264. package/dist/lib/resources/aws/networking/ipam.js +2 -7
  265. package/dist/lib/resources/aws/networking/ipamPool.d.ts +1 -1
  266. package/dist/lib/resources/aws/networking/ipamPool.js +45 -55
  267. package/dist/lib/resources/aws/networking/securityGroup.js +2 -7
  268. package/dist/lib/resources/aws/networking/vpc.d.ts +1 -1
  269. package/dist/lib/resources/aws/networking/vpc.js +17 -21
  270. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.d.ts +1 -1
  271. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.js +11 -15
  272. package/dist/lib/resources/aws/organisation/index.d.ts +5 -5
  273. package/dist/lib/resources/aws/organisation/index.js +4 -12
  274. package/dist/lib/resources/aws/organisation/organisation.js +5 -7
  275. package/dist/lib/resources/aws/organisation/organisationAccount.js +7 -10
  276. package/dist/lib/resources/aws/organisation/organisationPolicy.js +5 -9
  277. package/dist/lib/resources/aws/organisation/organisationalUnit.js +1 -3
  278. package/dist/lib/resources/aws/secrets/alias.js +2 -7
  279. package/dist/lib/resources/aws/secrets/index.d.ts +4 -4
  280. package/dist/lib/resources/aws/secrets/index.js +4 -21
  281. package/dist/lib/resources/aws/secrets/kms.js +15 -18
  282. package/dist/lib/resources/aws/secrets/parameter.d.ts +3 -3
  283. package/dist/lib/resources/aws/secrets/parameter.js +19 -22
  284. package/dist/lib/resources/aws/secrets/secret.d.ts +2 -2
  285. package/dist/lib/resources/aws/secrets/secret.js +12 -14
  286. package/dist/lib/resources/aws/storage/ecr.d.ts +2 -2
  287. package/dist/lib/resources/aws/storage/ecr.js +7 -13
  288. package/dist/lib/resources/aws/storage/index.d.ts +2 -2
  289. package/dist/lib/resources/aws/storage/index.js +2 -19
  290. package/dist/lib/resources/aws/storage/s3.d.ts +1 -1
  291. package/dist/lib/resources/aws/storage/s3.js +24 -12
  292. package/dist/lib/resources/aws/utilities/awsCustomResource.js +3 -7
  293. package/dist/lib/resources/aws/utilities/codeBuild.js +7 -12
  294. package/dist/lib/resources/aws/utilities/customResource.js +14 -17
  295. package/dist/lib/resources/aws/utilities/customResourceProvider.js +2 -7
  296. package/dist/lib/resources/aws/utilities/index.d.ts +5 -5
  297. package/dist/lib/resources/aws/utilities/index.js +5 -22
  298. package/dist/lib/resources/aws/utilities/resourceShare.js +2 -7
  299. package/dist/lib/resources/index.d.ts +1 -1
  300. package/dist/lib/resources/index.js +1 -18
  301. package/dist/lib/types.js +1 -3
  302. package/dist/lib/utils/accountsUtils.d.ts +5 -0
  303. package/dist/lib/utils/accountsUtils.js +18 -0
  304. package/dist/lib/utils/addSuffixToEmail.js +1 -5
  305. package/dist/lib/utils/backupTierMapping.js +2 -6
  306. package/dist/lib/utils/capitaliseString.js +1 -10
  307. package/dist/lib/utils/connections.js +9 -13
  308. package/dist/lib/utils/connector.js +10 -23
  309. package/dist/lib/utils/constructMap.d.ts +33 -0
  310. package/dist/lib/utils/constructMap.js +154 -0
  311. package/dist/lib/utils/databaseTypes.js +4 -10
  312. package/dist/lib/utils/dnsRecords.d.ts +1 -1
  313. package/dist/lib/utils/dnsRecords.js +23 -27
  314. package/dist/lib/utils/domainTypes.d.ts +0 -1
  315. package/dist/lib/utils/domainTypes.js +2 -10
  316. package/dist/lib/utils/env.js +14 -26
  317. package/dist/lib/utils/getAccountId.js +3 -7
  318. package/dist/lib/utils/getAsync.js +7 -10
  319. package/dist/lib/utils/getConfig.d.ts +0 -2
  320. package/dist/lib/utils/getConfig.js +29 -47
  321. package/dist/lib/utils/getStackOutput.js +4 -8
  322. package/dist/lib/utils/index.d.ts +12 -12
  323. package/dist/lib/utils/index.js +12 -29
  324. package/dist/lib/utils/manifestWriter.d.ts +14 -3
  325. package/dist/lib/utils/manifestWriter.js +60 -43
  326. package/dist/lib/utils/orgConfigParser.d.ts +14 -0
  327. package/dist/lib/utils/orgConfigParser.js +49 -0
  328. package/dist/lib/utils/removalPolicy.js +5 -9
  329. package/dist/lib/utils/resourceNaming.js +11 -16
  330. package/dist/lib/utils/standardTagsAspect.js +9 -16
  331. package/dist/lib/utils/stripAndCamelCase.js +1 -5
  332. package/dist/lib/utils/validationLogger.js +12 -18
  333. package/dist/lib/utils/vpcUtils.js +5 -10
  334. package/package.json +25 -8
  335. package/dist/lib/config/aws/accountId.d.ts +0 -6
  336. package/dist/lib/config/aws/accountId.js +0 -32
  337. package/dist/lib/config/aws/backupGlobalSettings.d.ts +0 -29
  338. package/dist/lib/config/aws/backupGlobalSettings.js +0 -49
  339. package/dist/lib/config/aws/costAllocationTags.d.ts +0 -12
  340. package/dist/lib/config/aws/costAllocationTags.js +0 -47
  341. package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +0 -8
  342. package/dist/lib/config/aws/ipamDelegateAdmin.js +0 -57
  343. package/dist/lib/config/aws/ipamPoolId.d.ts +0 -16
  344. package/dist/lib/config/aws/ipamPoolId.js +0 -42
  345. package/dist/lib/config/aws/organisation.d.ts +0 -30
  346. package/dist/lib/config/aws/organisation.js +0 -92
  347. package/dist/lib/config/aws/organisationId.d.ts +0 -7
  348. package/dist/lib/config/aws/organisationId.js +0 -45
  349. package/dist/lib/config/aws/organisationsAccess.d.ts +0 -10
  350. package/dist/lib/config/aws/organisationsAccess.js +0 -49
  351. package/dist/lib/config/aws/ramSharing.d.ts +0 -4
  352. package/dist/lib/config/aws/ramSharing.js +0 -34
  353. package/dist/lib/config/monitoring.d.ts +0 -18
  354. package/dist/lib/config/monitoring.js +0 -22
  355. package/dist/lib/patterns/aws/connections.d.ts +0 -46
  356. package/dist/lib/patterns/aws/connections.js +0 -159
  357. package/dist/lib/patterns/aws/hostedZone.d.ts +0 -28
  358. package/dist/lib/patterns/aws/hostedZone.js +0 -150
  359. package/dist/lib/patterns/aws/managedAccount.d.ts +0 -9
  360. package/dist/lib/patterns/aws/managedAccount.js +0 -55
  361. package/dist/lib/patterns/aws/managedOrganisation.d.ts +0 -36
  362. package/dist/lib/patterns/aws/managedOrganisation.js +0 -97
  363. package/dist/lib/patterns/aws/managedPlatform.d.ts +0 -12
  364. package/dist/lib/patterns/aws/managedPlatform.js +0 -29
  365. package/dist/lib/resources/aws/database/database.d.ts +0 -14
  366. package/dist/lib/resources/aws/database/database.js +0 -28
  367. package/dist/lib/resources/aws/database/databaseInstance.d.ts +0 -15
  368. package/dist/lib/resources/aws/database/databaseInstance.js +0 -30
  369. package/dist/lib/resources/aws/database/migrationLambda.d.ts +0 -80
  370. package/dist/lib/resources/aws/database/migrationLambda.js +0 -119
  371. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.d.ts +0 -13
  372. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +0 -51
  373. package/dist/lib/resources/aws/iam/securityGroup.d.ts +0 -5
  374. package/dist/lib/resources/aws/iam/securityGroup.js +0 -14
  375. package/dist/lib/resources/aws/monitoring/monitoringRole.d.ts +0 -29
  376. package/dist/lib/resources/aws/monitoring/monitoringRole.js +0 -120
  377. package/dist/lib/utils/capitalizeString.d.ts +0 -12
  378. package/dist/lib/utils/capitalizeString.js +0 -30
@@ -1,14 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DisasterRecovery = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const constructs_1 = require("constructs");
6
- const backup_1 = require("../../resources/aws/backup");
7
- const aws_backup_1 = require("aws-cdk-lib/aws-backup");
8
- const events = require("aws-cdk-lib/aws-events");
9
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
10
- const app_1 = require("../../app");
11
- const validationLogger_1 = require("../../utils/validationLogger");
1
+ import { CfnOutput, Duration, RemovalPolicy } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ import { BackupVault, BackupPlan } from "../../resources/aws/backup/index.js";
4
+ import { BackupPlanRule, BackupVault as Vault } from "aws-cdk-lib/aws-backup";
5
+ import * as events from "aws-cdk-lib/aws-events";
6
+ import { AccountPrincipal, Effect, PolicyStatement } from "aws-cdk-lib/aws-iam";
7
+ import App from "../../app.js";
8
+ import { parseOrgConfig } from "../../utils/orgConfigParser.js";
12
9
  // Backup retention constants (in days)
13
10
  const RETENTION_PERIODS = {
14
11
  STANDARD: 90,
@@ -20,45 +17,33 @@ const RETENTION_PERIODS = {
20
17
  };
21
18
  // Backup window constants
22
19
  const BACKUP_WINDOWS = {
23
- START: aws_cdk_lib_1.Duration.minutes(60),
24
- COMPLETION: aws_cdk_lib_1.Duration.hours(12),
25
- COMPLETION_SHORT: aws_cdk_lib_1.Duration.hours(2)
20
+ START: Duration.minutes(60),
21
+ COMPLETION: Duration.hours(12),
22
+ COMPLETION_SHORT: Duration.hours(2)
26
23
  };
24
+ const BACKUP_VAULT_NAME = "backupVault";
27
25
  // Vault lock constants
28
26
  const VAULT_LOCK = {
29
- MIN_RETENTION: aws_cdk_lib_1.Duration.days(365),
30
- MAX_RETENTION: aws_cdk_lib_1.Duration.days(36500),
31
- GRACE_PERIOD: aws_cdk_lib_1.Duration.days(3)
27
+ MIN_RETENTION: Duration.days(365),
28
+ MAX_RETENTION: Duration.days(36500),
29
+ GRACE_PERIOD: Duration.days(3)
32
30
  };
33
- class DisasterRecovery extends constructs_1.Construct {
31
+ export class DisasterRecovery extends Construct {
32
+ backupVault;
33
+ backupPlans;
34
+ customBackupPlans;
34
35
  constructor(scope, id, props) {
35
36
  super(scope, id);
36
37
  // Read org config from CDK context
37
- const app = app_1.default.getInstance();
38
+ const app = App.getInstance();
38
39
  const orgConfigRaw = app.node.tryGetContext("orgConfig");
39
- let orgConfig;
40
- if (typeof orgConfigRaw === "string") {
41
- try {
42
- const parsed = JSON.parse(orgConfigRaw);
43
- orgConfig =
44
- typeof parsed === "object" && parsed !== null
45
- ? parsed
46
- : undefined;
47
- }
48
- catch (err) {
49
- validationLogger_1.FjallLogger.warn(`[fjall] Failed to parse orgConfig from CDK context: ${err instanceof Error ? err.message : String(err)}`);
50
- }
51
- }
52
- const providerAccounts = Array.isArray(orgConfig?.providerAccounts)
53
- ? orgConfig.providerAccounts
54
- : [];
40
+ const orgConfig = parseOrgConfig(typeof orgConfigRaw === "string" ? orgConfigRaw : undefined);
41
+ const providerAccounts = orgConfig.providerAccounts;
55
42
  // Determine if this is a compliance account
56
43
  const account = providerAccounts.find((pa) => pa.id === props.accountId);
57
44
  const isComplianceAccount = account?.environment === "compliance";
58
45
  // Get DR configuration
59
- const disasterRecoveryRegion = typeof orgConfig?.disasterRecoveryRegion === "string"
60
- ? orgConfig.disasterRecoveryRegion
61
- : undefined;
46
+ const disasterRecoveryRegion = orgConfig.disasterRecoveryRegion;
62
47
  // Look up compliance account for cross-account replication
63
48
  // Skip if the compliance account (prevent self-replication)
64
49
  const disasterRecoveryAccount = isComplianceAccount
@@ -66,7 +51,7 @@ class DisasterRecovery extends constructs_1.Construct {
66
51
  : providerAccounts.find((pa) => pa.environment === "compliance");
67
52
  // Construct cross-account DR vault ARN (compliance account in DR region)
68
53
  const disasterRecoveryVaultArn = disasterRecoveryAccount && disasterRecoveryRegion
69
- ? `arn:aws:backup:${disasterRecoveryRegion}:${disasterRecoveryAccount.id}:backup-vault:backupVault`
54
+ ? `arn:aws:backup:${disasterRecoveryRegion}:${disasterRecoveryAccount.id}:backup-vault:${BACKUP_VAULT_NAME}`
70
55
  : undefined;
71
56
  // Compliance accounts get vault locks for protection
72
57
  const lockConfiguration = isComplianceAccount
@@ -77,9 +62,9 @@ class DisasterRecovery extends constructs_1.Construct {
77
62
  }
78
63
  : undefined;
79
64
  // Create primary backup vault
80
- this.backupVault = new backup_1.BackupVault(this, "BackupVault", {
81
- vaultName: "backupVault",
82
- removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
65
+ this.backupVault = new BackupVault(this, "BackupVault", {
66
+ vaultName: BACKUP_VAULT_NAME,
67
+ removalPolicy: RemovalPolicy.RETAIN,
83
68
  lockConfiguration: lockConfiguration
84
69
  });
85
70
  // Configure cross-account access policies
@@ -87,9 +72,9 @@ class DisasterRecovery extends constructs_1.Construct {
87
72
  const allAccounts = providerAccounts;
88
73
  const productionAccounts = allAccounts.filter((acc) => acc.environment === "production");
89
74
  if (productionAccounts.length > 0) {
90
- const copyStatement = new aws_iam_1.PolicyStatement({
91
- effect: aws_iam_1.Effect.ALLOW,
92
- principals: productionAccounts.map((acc) => new aws_iam_1.AccountPrincipal(acc.id)),
75
+ const copyStatement = new PolicyStatement({
76
+ effect: Effect.ALLOW,
77
+ principals: productionAccounts.map((acc) => new AccountPrincipal(acc.id)),
93
78
  actions: ["backup:CopyIntoBackupVault"],
94
79
  resources: ["*"]
95
80
  });
@@ -99,23 +84,23 @@ class DisasterRecovery extends constructs_1.Construct {
99
84
  // Construct cross-region replication vault ARN (same account, DR region)
100
85
  // Only replicate if DR region exists AND is different from current region
101
86
  const replicationVaultArn = disasterRecoveryRegion && disasterRecoveryRegion !== props.region
102
- ? `arn:aws:backup:${disasterRecoveryRegion}:${props.accountId}:backup-vault:backupVault`
87
+ ? `arn:aws:backup:${disasterRecoveryRegion}:${props.accountId}:backup-vault:${BACKUP_VAULT_NAME}`
103
88
  : undefined;
104
89
  // Create all three backup plans
105
90
  this.backupPlans = {
106
- standard: new backup_1.BackupPlan(this, "StandardBackupPlan", {
91
+ standard: new BackupPlan(this, "StandardBackupPlan", {
107
92
  planName: "standard",
108
93
  rules: this.createStandardBackupRules("standard"),
109
94
  tagValue: "default",
110
95
  backupVault: this.backupVault
111
96
  }),
112
- resilient: new backup_1.BackupPlan(this, "ResilientBackupPlan", {
97
+ resilient: new BackupPlan(this, "ResilientBackupPlan", {
113
98
  planName: "resilient",
114
99
  rules: this.createResilientBackupRules("resilient", replicationVaultArn),
115
100
  tagValue: "resilient",
116
101
  backupVault: this.backupVault
117
102
  }),
118
- enterprise: new backup_1.BackupPlan(this, "EnterpriseBackupPlan", {
103
+ enterprise: new BackupPlan(this, "EnterpriseBackupPlan", {
119
104
  planName: "enterprise",
120
105
  rules: this.createEnterpriseBackupRules("enterprise", replicationVaultArn, disasterRecoveryVaultArn),
121
106
  tagValue: "enterprise",
@@ -124,8 +109,8 @@ class DisasterRecovery extends constructs_1.Construct {
124
109
  };
125
110
  // Create custom backup plans if provided
126
111
  if (props.customBackupPlans && props.customBackupPlans.length > 0) {
127
- this.customBackupPlans = props.customBackupPlans.map((config, index) => {
128
- return new backup_1.BackupPlan(this, `CustomBackupPlan${index}`, {
112
+ this.customBackupPlans = props.customBackupPlans.map((config) => {
113
+ return new BackupPlan(this, `CustomBackupPlan-${config.planName}`, {
129
114
  planName: config.planName,
130
115
  rules: config.rules,
131
116
  tagValue: config.tagValue,
@@ -134,44 +119,44 @@ class DisasterRecovery extends constructs_1.Construct {
134
119
  });
135
120
  }
136
121
  // Export disaster recovery configuration
137
- new aws_cdk_lib_1.CfnOutput(this, "DisasterRecoveryEnabled", {
122
+ new CfnOutput(this, "DisasterRecoveryEnabled", {
138
123
  key: "DisasterRecoveryEnabled",
139
124
  value: "true",
140
- exportName: "DisasterRecoveryEnabled"
125
+ exportName: `${id}DisasterRecoveryEnabled`
141
126
  });
142
127
  if (disasterRecoveryRegion) {
143
- new aws_cdk_lib_1.CfnOutput(this, "ReplicationRegion", {
128
+ new CfnOutput(this, "ReplicationRegion", {
144
129
  key: "ReplicationRegion",
145
130
  value: disasterRecoveryRegion,
146
- exportName: "ReplicationRegion"
131
+ exportName: `${id}ReplicationRegion`
147
132
  });
148
133
  }
149
134
  if (isComplianceAccount) {
150
- new aws_cdk_lib_1.CfnOutput(this, "VaultLockEnabled", {
135
+ new CfnOutput(this, "VaultLockEnabled", {
151
136
  key: "VaultLockEnabled",
152
137
  value: "true",
153
- exportName: "VaultLockEnabled"
138
+ exportName: `${id}VaultLockEnabled`
154
139
  });
155
140
  }
156
141
  }
157
142
  createStandardBackupRules(planName) {
158
143
  return [
159
- new aws_backup_1.BackupPlanRule({
144
+ new BackupPlanRule({
160
145
  ruleName: `${planName}Daily`,
161
146
  scheduleExpression: events.Schedule.cron({ hour: "2", minute: "0" }), // 2 AM daily
162
- deleteAfter: aws_cdk_lib_1.Duration.days(RETENTION_PERIODS.STANDARD),
147
+ deleteAfter: Duration.days(RETENTION_PERIODS.STANDARD),
163
148
  startWindow: BACKUP_WINDOWS.START,
164
149
  completionWindow: BACKUP_WINDOWS.COMPLETION
165
150
  })
166
151
  ];
167
152
  }
168
153
  createResilientBackupRules(planName, replicationVaultArn) {
169
- const copyActions = this.createCopyActions(planName, replicationVaultArn, undefined, aws_cdk_lib_1.Duration.days(RETENTION_PERIODS.ENTERPRISE_CONTINUOUS), undefined);
154
+ const copyActions = this.createCopyActions(planName, replicationVaultArn, undefined, Duration.days(RETENTION_PERIODS.ENTERPRISE_CONTINUOUS), undefined);
170
155
  return [
171
- new aws_backup_1.BackupPlanRule({
156
+ new BackupPlanRule({
172
157
  ruleName: `${planName}Daily`,
173
158
  scheduleExpression: events.Schedule.cron({ hour: "2", minute: "0" }), // 2 AM daily
174
- deleteAfter: aws_cdk_lib_1.Duration.days(RETENTION_PERIODS.ENTERPRISE_CONTINUOUS),
159
+ deleteAfter: Duration.days(RETENTION_PERIODS.ENTERPRISE_CONTINUOUS),
175
160
  enableContinuousBackup: true,
176
161
  startWindow: BACKUP_WINDOWS.START,
177
162
  completionWindow: BACKUP_WINDOWS.COMPLETION,
@@ -180,25 +165,25 @@ class DisasterRecovery extends constructs_1.Construct {
180
165
  ];
181
166
  }
182
167
  createEnterpriseBackupRules(planName, replicationVaultArn, disasterRecoveryVaultArn) {
183
- const continuousCopyActions = this.createCopyActions(`${planName}Continuous`, replicationVaultArn, disasterRecoveryVaultArn, aws_cdk_lib_1.Duration.days(RETENTION_PERIODS.ENTERPRISE_CONTINUOUS), undefined);
184
- const complianceCopyActions = this.createCopyActions(`${planName}Compliance`, replicationVaultArn, disasterRecoveryVaultArn, aws_cdk_lib_1.Duration.days(RETENTION_PERIODS.ENTERPRISE_COMPLIANCE), aws_cdk_lib_1.Duration.days(RETENTION_PERIODS.COLD_STORAGE_ONE_YEAR));
168
+ const continuousCopyActions = this.createCopyActions(`${planName}Continuous`, replicationVaultArn, disasterRecoveryVaultArn, Duration.days(RETENTION_PERIODS.ENTERPRISE_CONTINUOUS), undefined);
169
+ const complianceCopyActions = this.createCopyActions(`${planName}Compliance`, replicationVaultArn, disasterRecoveryVaultArn, Duration.days(RETENTION_PERIODS.ENTERPRISE_COMPLIANCE), Duration.days(RETENTION_PERIODS.COLD_STORAGE_ONE_YEAR));
185
170
  return [
186
171
  // Continuous backup (35-day max PITR window)
187
- new aws_backup_1.BackupPlanRule({
172
+ new BackupPlanRule({
188
173
  ruleName: `${planName}Continuous`,
189
174
  scheduleExpression: events.Schedule.cron({ hour: "2", minute: "0" }), // Daily for continuous backup
190
- deleteAfter: aws_cdk_lib_1.Duration.days(RETENTION_PERIODS.ENTERPRISE_CONTINUOUS),
175
+ deleteAfter: Duration.days(RETENTION_PERIODS.ENTERPRISE_CONTINUOUS),
191
176
  enableContinuousBackup: true,
192
177
  startWindow: BACKUP_WINDOWS.START,
193
178
  completionWindow: BACKUP_WINDOWS.COMPLETION,
194
179
  copyActions: continuousCopyActions
195
180
  }),
196
181
  // Hourly snapshots for long-term compliance (7 years)
197
- new aws_backup_1.BackupPlanRule({
182
+ new BackupPlanRule({
198
183
  ruleName: `${planName}HourlyCompliance`,
199
184
  scheduleExpression: events.Schedule.cron({ minute: "0" }), // Every hour
200
- deleteAfter: aws_cdk_lib_1.Duration.days(RETENTION_PERIODS.ENTERPRISE_COMPLIANCE),
201
- moveToColdStorageAfter: aws_cdk_lib_1.Duration.days(RETENTION_PERIODS.COLD_STORAGE_ONE_YEAR),
185
+ deleteAfter: Duration.days(RETENTION_PERIODS.ENTERPRISE_COMPLIANCE),
186
+ moveToColdStorageAfter: Duration.days(RETENTION_PERIODS.COLD_STORAGE_ONE_YEAR),
202
187
  startWindow: BACKUP_WINDOWS.START,
203
188
  completionWindow: BACKUP_WINDOWS.COMPLETION_SHORT,
204
189
  copyActions: complianceCopyActions
@@ -210,7 +195,7 @@ class DisasterRecovery extends constructs_1.Construct {
210
195
  // Cross-region replication
211
196
  if (replicationVaultArn) {
212
197
  const replicationAction = {
213
- destinationBackupVault: aws_backup_1.BackupVault.fromBackupVaultArn(this, `${planName}ReplicationVaultRef`, replicationVaultArn),
198
+ destinationBackupVault: Vault.fromBackupVaultArn(this, `${planName}ReplicationVaultRef`, replicationVaultArn),
214
199
  ...(deleteAfter && { deleteAfter }),
215
200
  // Only add cold storage if specified and >= 90 days
216
201
  ...(moveToColdStorageAfter &&
@@ -224,7 +209,7 @@ class DisasterRecovery extends constructs_1.Construct {
224
209
  // Cross-account DR vault
225
210
  if (disasterRecoveryVaultArn) {
226
211
  const drAction = {
227
- destinationBackupVault: aws_backup_1.BackupVault.fromBackupVaultArn(this, `${planName}DisasterRecoveryVaultRef`, disasterRecoveryVaultArn),
212
+ destinationBackupVault: Vault.fromBackupVaultArn(this, `${planName}DisasterRecoveryVaultRef`, disasterRecoveryVaultArn),
228
213
  ...(deleteAfter && { deleteAfter }),
229
214
  // Only add cold storage if specified and >= 90 days
230
215
  ...(moveToColdStorageAfter &&
@@ -238,5 +223,3 @@ class DisasterRecovery extends constructs_1.Construct {
238
223
  return actions.length > 0 ? actions : undefined;
239
224
  }
240
225
  }
241
- exports.DisasterRecovery = DisasterRecovery;
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYXN0ZXJSZWNvdmVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL2Rpc2FzdGVyUmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWlFO0FBQ2pFLDJDQUF1QztBQUN2Qyx1REFBcUU7QUFDckUsdURBSWdDO0FBQ2hDLGlEQUFpRDtBQUNqRCxpREFBZ0Y7QUFFaEYsbUNBQTRCO0FBQzVCLG1FQUEyRDtBQUUzRCx1Q0FBdUM7QUFDdkMsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixRQUFRLEVBQUUsRUFBRTtJQUNaLFNBQVMsRUFBRSxHQUFHO0lBQ2QscUJBQXFCLEVBQUUsRUFBRSxFQUFFLGdDQUFnQztJQUMzRCxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsVUFBVTtJQUN2QyxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsY0FBYztJQUN4QyxxQkFBcUIsRUFBRSxHQUFHO0NBQ2xCLENBQUM7QUFFWCwwQkFBMEI7QUFDMUIsTUFBTSxjQUFjLEdBQUc7SUFDckIsS0FBSyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixVQUFVLEVBQUUsc0JBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzlCLGdCQUFnQixFQUFFLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUMzQixDQUFDO0FBRVgsdUJBQXVCO0FBQ3ZCLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLGFBQWEsRUFBRSxzQkFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDakMsYUFBYSxFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNuQyxZQUFZLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3RCLENBQUM7QUFjWCxNQUFhLGdCQUFpQixTQUFRLHNCQUFTO0lBUzdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFD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QUFHLFFBQVEscUJBQXFCLEVBQ2hDLG1CQUFtQixDQUNwQjtnQkFDRCxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ25DLG9EQUFvRDtnQkFDcEQsR0FBRyxDQUFDLHNCQUFzQjtvQkFDMUIsc0JBQXNCLENBQUMsTUFBTSxFQUFFO3dCQUM3QixpQkFBaUIsQ0FBQyxvQkFBb0I7b0JBQ3RDLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFO29CQUM1QixDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLElBQUksd0JBQXdCLEVBQUUsQ0FBQztZQUM3QixNQUFNLFFBQVEsR0FBOEI7Z0JBQzFDLHNCQUFzQixFQUFFLHdCQUFLLENBQUMsa0JBQWtCLENBQzlDLElBQUksRUFDSixHQUFHLFFBQVEsMEJBQTBCLEVBQ3JDLHdCQUF3QixDQUN6QjtnQkFDRCxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ25DLG9EQUFvRDtnQkFDcEQsR0FBRyxDQUFDLHNCQUFzQjtvQkFDMUIsc0JBQXNCLENBQUMsTUFBTSxFQUFFO3dCQUM3QixpQkFBaUIsQ0FBQyxvQkFBb0I7b0JBQ3RDLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFO29CQUM1QixDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xELENBQUM7Q0FDRjtBQXpTRCw0Q0F5U0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQmFja3VwVmF1bHQsIEJhY2t1cFBsYW4gfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9iYWNrdXBcIjtcbmltcG9ydCB7XG4gIEJhY2t1cFBsYW5SdWxlLFxuICB0eXBlIEJhY2t1cFBsYW5Db3B5QWN0aW9uUHJvcHMsXG4gIEJhY2t1cFZhdWx0IGFzIFZhdWx0XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYmFja3VwXCI7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCB7IEFjY291bnRQcmluY2lwYWwsIEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IHR5cGUgUHJvdmlkZXJBY2NvdW50IH0gZnJvbSBcIkBmamFsbC91dGlsXCI7XG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7IEZqYWxsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXJcIjtcblxuLy8gQmFja3VwIHJldGVudGlvbiBjb25zdGFudHMgKGluIGRheXMpXG5jb25zdCBSRVRFTlRJT05fUEVSSU9EUyA9IHtcbiAgU1RBTkRBUkQ6IDkwLFxuICBSRVNJTElFTlQ6IDM2NSxcbiAgRU5URVJQUklTRV9DT05USU5VT1VTOiAzNSwgLy8gQVdTIG1heCBmb3IgY29udGludW91cyBiYWNrdXBcbiAgRU5URVJQUklTRV9DT01QTElBTkNFOiAyNTU1LCAvLyA3IHllYXJzXG4gIENPTERfU1RPUkFHRV9NSU5JTVVNOiA5MCwgLy8gQVdTIG1pbmltdW1cbiAgQ09MRF9TVE9SQUdFX09ORV9ZRUFSOiAzNjVcbn0gYXMgY29uc3Q7XG5cbi8vIEJhY2t1cCB3aW5kb3cgY29uc3RhbnRzXG5jb25zdCBCQUNLVVBfV0lORE9XUyA9IHtcbiAgU1RBUlQ6IER1cmF0aW9uLm1pbnV0ZXMoNjApLFxuICBDT01QTEVUSU9OOiBEdXJhdGlvbi5ob3VycygxMiksXG4gIENPTVBMRVRJT05fU0hPUlQ6IER1cmF0aW9uLmhvdXJzKDIpXG59IGFzIGNvbnN0O1xuXG4vLyBWYXVsdCBsb2NrIGNvbnN0YW50c1xuY29uc3QgVkFVTFRfTE9DSyA9IHtcbiAgTUlOX1JFVEVOVElPTjogRHVyYXRpb24uZGF5cygzNjUpLFxuICBNQVhfUkVURU5USU9OOiBEdXJhdGlvbi5kYXlzKDM2NTAwKSxcbiAgR1JBQ0VfUEVSSU9EOiBEdXJhdGlvbi5kYXlzKDMpXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUJhY2t1cFBsYW5Db25maWcge1xuICBwbGFuTmFtZTogc3RyaW5nO1xuICBydWxlczogQmFja3VwUGxhblJ1bGVbXTtcbiAgdGFnVmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNhc3RlclJlY292ZXJ5UHJvcHMge1xuICByZWdpb246IHN0cmluZztcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIGN1c3RvbUJhY2t1cFBsYW5zPzogQ3VzdG9tQmFja3VwUGxhbkNvbmZpZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgRGlzYXN0ZXJSZWNvdmVyeSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBiYWNrdXBWYXVsdDogQmFja3VwVmF1bHQ7XG4gIHB1YmxpYyByZWFkb25seSBiYWNrdXBQbGFuczoge1xuICAgIHN0YW5kYXJkOiBCYWNrdXBQbGFuO1xuICAgIHJlc2lsaWVudDogQmFja3VwUGxhbjtcbiAgICBlbnRlcnByaXNlOiBCYWNrdXBQbGFuO1xuICB9O1xuICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tQmFja3VwUGxhbnM/OiBCYWNrdXBQbGFuW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERpc2FzdGVyUmVjb3ZlcnlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBSZWFkIG9yZyBjb25maWcgZnJvbSBDREsgY29udGV4dFxuICAgIGNvbnN0IGFwcCA9IEFwcC5nZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IG9yZ0NvbmZpZ1JhdyA9IGFwcC5ub2RlLnRyeUdldENvbnRleHQoXCJvcmdDb25maWdcIik7XG4gICAgbGV0IG9yZ0NvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBvcmdDb25maWdSYXcgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uob3JnQ29uZmlnUmF3KTtcbiAgICAgICAgb3JnQ29uZmlnID1cbiAgICAgICAgICB0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiICYmIHBhcnNlZCAhPT0gbnVsbFxuICAgICAgICAgICAgPyAocGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgICBgW2ZqYWxsXSBGYWlsZWQgdG8gcGFyc2Ugb3JnQ29uZmlnIGZyb20gQ0RLIGNvbnRleHQ6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcHJvdmlkZXJBY2NvdW50cyA9IEFycmF5LmlzQXJyYXkob3JnQ29uZmlnPy5wcm92aWRlckFjY291bnRzKVxuICAgICAgPyAob3JnQ29uZmlnLnByb3ZpZGVyQWNjb3VudHMgYXMgUHJvdmlkZXJBY2NvdW50W10pXG4gICAgICA6IFtdO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBjb21wbGlhbmNlIGFjY291bnRcbiAgICBjb25zdCBhY2NvdW50ID0gcHJvdmlkZXJBY2NvdW50cy5maW5kKChwYSkgPT4gcGEuaWQgPT09IHByb3BzLmFjY291bnRJZCk7XG4gICAgY29uc3QgaXNDb21wbGlhbmNlQWNjb3VudCA9IGFjY291bnQ/LmVudmlyb25tZW50ID09PSBcImNvbXBsaWFuY2VcIjtcblxuICAgIC8vIEdldCBEUiBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiA9XG4gICAgICB0eXBlb2Ygb3JnQ29uZmlnPy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gb3JnQ29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb25cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBMb29rIHVwIGNvbXBsaWFuY2UgYWNjb3VudCBmb3IgY3Jvc3MtYWNjb3VudCByZXBsaWNhdGlvblxuICAgIC8vIFNraXAgaWYgdGhlIGNvbXBsaWFuY2UgYWNjb3VudCAocHJldmVudCBzZWxmLXJlcGxpY2F0aW9uKVxuICAgIGNvbnN0IGRpc2FzdGVyUmVjb3ZlcnlBY2NvdW50ID0gaXNDb21wbGlhbmNlQWNjb3VudFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogcHJvdmlkZXJBY2NvdW50cy5maW5kKChwYSkgPT4gcGEuZW52aXJvbm1lbnQgPT09IFwiY29tcGxpYW5jZVwiKTtcblxuICAgIC8vIENvbnN0cnVjdCBjcm9zcy1hY2NvdW50IERSIHZhdWx0IEFSTiAoY29tcGxpYW5jZSBhY2NvdW50IGluIERSIHJlZ2lvbilcbiAgICBjb25zdCBkaXNhc3RlclJlY292ZXJ5VmF1bHRBcm4gPVxuICAgICAgZGlzYXN0ZXJSZWNvdmVyeUFjY291bnQgJiYgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvblxuICAgICAgICA/IGBhcm46YXdzOmJhY2t1cDoke2Rpc2FzdGVyUmVjb3ZlcnlSZWdpb259OiR7ZGlzYXN0ZXJSZWNvdmVyeUFjY291bnQuaWR9OmJhY2t1cC12YXVsdDpiYWNrdXBWYXVsdGBcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDb21wbGlhbmNlIGFjY291bnRzIGdldCB2YXVsdCBsb2NrcyBmb3IgcHJvdGVjdGlvblxuICAgIGNvbnN0IGxvY2tDb25maWd1cmF0aW9uID0gaXNDb21wbGlhbmNlQWNjb3VudFxuICAgICAgPyB7XG4gICAgICAgICAgbWluUmV0ZW50aW9uOiBWQVVMVF9MT0NLLk1JTl9SRVRFTlRJT04sXG4gICAgICAgICAgbWF4UmV0ZW50aW9uOiBWQVVMVF9MT0NLLk1BWF9SRVRFTlRJT04sXG4gICAgICAgICAgY2hhbmdlYWJsZUZvcjogVkFVTFRfTE9DSy5HUkFDRV9QRVJJT0RcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDcmVhdGUgcHJpbWFyeSBiYWNrdXAgdmF1bHRcbiAgICB0aGlzLmJhY2t1cFZhdWx0ID0gbmV3IEJhY2t1cFZhdWx0KHRoaXMsIFwiQmFja3VwVmF1bHRcIiwge1xuICAgICAgdmF1bHROYW1lOiBcImJhY2t1cFZhdWx0XCIsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBsb2NrQ29uZmlndXJhdGlvbjogbG9ja0NvbmZpZ3VyYXRpb25cbiAgICB9KTtcblxuICAgIC8vIENvbmZpZ3VyZSBjcm9zcy1hY2NvdW50IGFjY2VzcyBwb2xpY2llc1xuXG4gICAgaWYgKGlzQ29tcGxpYW5jZUFjY291bnQpIHtcbiAgICAgIGNvbnN0IGFsbEFjY291bnRzID0gcHJvdmlkZXJBY2NvdW50cztcbiAgICAgIGNvbnN0IHByb2R1Y3Rpb25BY2NvdW50cyA9IGFsbEFjY291bnRzLmZpbHRlcihcbiAgICAgICAgKGFjYykgPT4gYWNjLmVudmlyb25tZW50ID09PSBcInByb2R1Y3Rpb25cIlxuICAgICAgKTtcblxuICAgICAgaWYgKHByb2R1Y3Rpb25BY2NvdW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGNvcHlTdGF0ZW1lbnQgPSBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBwcmluY2lwYWxzOiBwcm9kdWN0aW9uQWNjb3VudHMubWFwKFxuICAgICAgICAgICAgKGFjYykgPT4gbmV3IEFjY291bnRQcmluY2lwYWwoYWNjLmlkKVxuICAgICAgICAgICksXG4gICAgICAgICAgYWN0aW9uczogW1wiYmFja3VwOkNvcHlJbnRvQmFja3VwVmF1bHRcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhY2t1cFZhdWx0LnZhdWx0LmFkZFRvQWNjZXNzUG9saWN5KGNvcHlTdGF0ZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBjcm9zcy1yZWdpb24gcmVwbGljYXRpb24gdmF1bHQgQVJOIChzYW1lIGFjY291bnQsIERSIHJlZ2lvbilcbiAgICAvLyBPbmx5IHJlcGxpY2F0ZSBpZiBEUiByZWdpb24gZXhpc3RzIEFORCBpcyBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IHJlZ2lvblxuICAgIGNvbnN0IHJlcGxpY2F0aW9uVmF1bHRBcm4gPVxuICAgICAgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiAmJiBkaXNhc3RlclJlY292ZXJ5UmVnaW9uICE9PSBwcm9wcy5yZWdpb25cbiAgICAgICAgPyBgYXJuOmF3czpiYWNrdXA6JHtkaXNhc3RlclJlY292ZXJ5UmVnaW9ufToke3Byb3BzLmFjY291bnRJZH06YmFja3VwLXZhdWx0OmJhY2t1cFZhdWx0YFxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIENyZWF0ZSBhbGwgdGhyZWUgYmFja3VwIHBsYW5zXG4gICAgdGhpcy5iYWNrdXBQbGFucyA9IHtcbiAgICAgIHN0YW5kYXJkOiBuZXcgQmFja3VwUGxhbih0aGlzLCBcIlN0YW5kYXJkQmFja3VwUGxhblwiLCB7XG4gICAgICAgIHBsYW5OYW1lOiBcInN0YW5kYXJkXCIsXG4gICAgICAgIHJ1bGVzOiB0aGlzLmNyZWF0ZVN0YW5kYXJkQmFja3VwUnVsZXMoXCJzdGFuZGFyZFwiKSxcbiAgICAgICAgdGFnVmFsdWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBiYWNrdXBWYXVsdDogdGhpcy5iYWNrdXBWYXVsdFxuICAgICAgfSksXG4gICAgICByZXNpbGllbnQ6IG5ldyBCYWNrdXBQbGFuKHRoaXMsIFwiUmVzaWxpZW50QmFja3VwUGxhblwiLCB7XG4gICAgICAgIHBsYW5OYW1lOiBcInJlc2lsaWVudFwiLFxuICAgICAgICBydWxlczogdGhpcy5jcmVhdGVSZXNpbGllbnRCYWNrdXBSdWxlcyhcbiAgICAgICAgICBcInJlc2lsaWVudFwiLFxuICAgICAgICAgIHJlcGxpY2F0aW9uVmF1bHRBcm5cbiAgICAgICAgKSxcbiAgICAgICAgdGFnVmFsdWU6IFwicmVzaWxpZW50XCIsXG4gICAgICAgIGJhY2t1cFZhdWx0OiB0aGlzLmJhY2t1cFZhdWx0XG4gICAgICB9KSxcbiAgICAgIGVudGVycHJpc2U6IG5ldyBCYWNrdXBQbGFuKHRoaXMsIFwiRW50ZXJwcmlzZUJhY2t1cFBsYW5cIiwge1xuICAgICAgICBwbGFuTmFtZTogXCJlbnRlcnByaXNlXCIsXG4gICAgICAgIHJ1bGVzOiB0aGlzLmNyZWF0ZUVudGVycHJpc2VCYWNrdXBSdWxlcyhcbiAgICAgICAgICBcImVudGVycHJpc2VcIixcbiAgICAgICAgICByZXBsaWNhdGlvblZhdWx0QXJuLFxuICAgICAgICAgIGRpc2FzdGVyUmVjb3ZlcnlWYXVsdEFyblxuICAgICAgICApLFxuICAgICAgICB0YWdWYWx1ZTogXCJlbnRlcnByaXNlXCIsXG4gICAgICAgIGJhY2t1cFZhdWx0OiB0aGlzLmJhY2t1cFZhdWx0XG4gICAgICB9KVxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgY3VzdG9tIGJhY2t1cCBwbGFucyBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5jdXN0b21CYWNrdXBQbGFucyAmJiBwcm9wcy5jdXN0b21CYWNrdXBQbGFucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1c3RvbUJhY2t1cFBsYW5zID0gcHJvcHMuY3VzdG9tQmFja3VwUGxhbnMubWFwKChjb25maWcsIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQmFja3VwUGxhbih0aGlzLCBgQ3VzdG9tQmFja3VwUGxhbiR7aW5kZXh9YCwge1xuICAgICAgICAgIHBsYW5OYW1lOiBjb25maWcucGxhbk5hbWUsXG4gICAgICAgICAgcnVsZXM6IGNvbmZpZy5ydWxlcyxcbiAgICAgICAgICB0YWdWYWx1ZTogY29uZmlnLnRhZ1ZhbHVlLFxuICAgICAgICAgIGJhY2t1cFZhdWx0OiB0aGlzLmJhY2t1cFZhdWx0XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRXhwb3J0IGRpc2FzdGVyIHJlY292ZXJ5IGNvbmZpZ3VyYXRpb25cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiRGlzYXN0ZXJSZWNvdmVyeUVuYWJsZWRcIiwge1xuICAgICAga2V5OiBcIkRpc2FzdGVyUmVjb3ZlcnlFbmFibGVkXCIsXG4gICAgICB2YWx1ZTogXCJ0cnVlXCIsXG4gICAgICBleHBvcnROYW1lOiBcIkRpc2FzdGVyUmVjb3ZlcnlFbmFibGVkXCJcbiAgICB9KTtcblxuICAgIGlmIChkaXNhc3RlclJlY292ZXJ5UmVnaW9uKSB7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiUmVwbGljYXRpb25SZWdpb25cIiwge1xuICAgICAgICBrZXk6IFwiUmVwbGljYXRpb25SZWdpb25cIixcbiAgICAgICAgdmFsdWU6IGRpc2FzdGVyUmVjb3ZlcnlSZWdpb24sXG4gICAgICAgIGV4cG9ydE5hbWU6IFwiUmVwbGljYXRpb25SZWdpb25cIlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQ29tcGxpYW5jZUFjY291bnQpIHtcbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJWYXVsdExvY2tFbmFibGVkXCIsIHtcbiAgICAgICAga2V5OiBcIlZhdWx0TG9ja0VuYWJsZWRcIixcbiAgICAgICAgdmFsdWU6IFwidHJ1ZVwiLFxuICAgICAgICBleHBvcnROYW1lOiBcIlZhdWx0TG9ja0VuYWJsZWRcIlxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGFuZGFyZEJhY2t1cFJ1bGVzKHBsYW5OYW1lOiBzdHJpbmcpOiBCYWNrdXBQbGFuUnVsZVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEJhY2t1cFBsYW5SdWxlKHtcbiAgICAgICAgcnVsZU5hbWU6IGAke3BsYW5OYW1lfURhaWx5YCxcbiAgICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBldmVudHMuU2NoZWR1bGUuY3Jvbih7IGhvdXI6IFwiMlwiLCBtaW51dGU6IFwiMFwiIH0pLCAvLyAyIEFNIGRhaWx5XG4gICAgICAgIGRlbGV0ZUFmdGVyOiBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLlNUQU5EQVJEKSxcbiAgICAgICAgc3RhcnRXaW5kb3c6IEJBQ0tVUF9XSU5ET1dTLlNUQVJULFxuICAgICAgICBjb21wbGV0aW9uV2luZG93OiBCQUNLVVBfV0lORE9XUy5DT01QTEVUSU9OXG4gICAgICB9KVxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlc2lsaWVudEJhY2t1cFJ1bGVzKFxuICAgIHBsYW5OYW1lOiBzdHJpbmcsXG4gICAgcmVwbGljYXRpb25WYXVsdEFybj86IHN0cmluZ1xuICApOiBCYWNrdXBQbGFuUnVsZVtdIHtcbiAgICBjb25zdCBjb3B5QWN0aW9ucyA9IHRoaXMuY3JlYXRlQ29weUFjdGlvbnMoXG4gICAgICBwbGFuTmFtZSxcbiAgICAgIHJlcGxpY2F0aW9uVmF1bHRBcm4sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLkVOVEVSUFJJU0VfQ09OVElOVU9VUyksXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBCYWNrdXBQbGFuUnVsZSh7XG4gICAgICAgIHJ1bGVOYW1lOiBgJHtwbGFuTmFtZX1EYWlseWAsXG4gICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogZXZlbnRzLlNjaGVkdWxlLmNyb24oeyBob3VyOiBcIjJcIiwgbWludXRlOiBcIjBcIiB9KSwgLy8gMiBBTSBkYWlseVxuICAgICAgICBkZWxldGVBZnRlcjogRHVyYXRpb24uZGF5cyhSRVRFTlRJT05fUEVSSU9EUy5FTlRFUlBSSVNFX0NPTlRJTlVPVVMpLFxuICAgICAgICBlbmFibGVDb250aW51b3VzQmFja3VwOiB0cnVlLFxuICAgICAgICBzdGFydFdpbmRvdzogQkFDS1VQX1dJTkRPV1MuU1RBUlQsXG4gICAgICAgIGNvbXBsZXRpb25XaW5kb3c6IEJBQ0tVUF9XSU5ET1dTLkNPTVBMRVRJT04sXG4gICAgICAgIGNvcHlBY3Rpb25zXG4gICAgICB9KVxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVudGVycHJpc2VCYWNrdXBSdWxlcyhcbiAgICBwbGFuTmFtZTogc3RyaW5nLFxuICAgIHJlcGxpY2F0aW9uVmF1bHRBcm4/OiBzdHJpbmcsXG4gICAgZGlzYXN0ZXJSZWNvdmVyeVZhdWx0QXJuPzogc3RyaW5nXG4gICk6IEJhY2t1cFBsYW5SdWxlW10ge1xuICAgIGNvbnN0IGNvbnRpbnVvdXNDb3B5QWN0aW9ucyA9IHRoaXMuY3JlYXRlQ29weUFjdGlvbnMoXG4gICAgICBgJHtwbGFuTmFtZX1Db250aW51b3VzYCxcbiAgICAgIHJlcGxpY2F0aW9uVmF1bHRBcm4sXG4gICAgICBkaXNhc3RlclJlY292ZXJ5VmF1bHRBcm4sXG4gICAgICBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLkVOVEVSUFJJU0VfQ09OVElOVU9VUyksXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgY29uc3QgY29tcGxpYW5jZUNvcHlBY3Rpb25zID0gdGhpcy5jcmVhdGVDb3B5QWN0aW9ucyhcbiAgICAgIGAke3BsYW5OYW1lfUNvbXBsaWFuY2VgLFxuICAgICAgcmVwbGljYXRpb25WYXVsdEFybixcbiAgICAgIGRpc2FzdGVyUmVjb3ZlcnlWYXVsdEFybixcbiAgICAgIER1cmF0aW9uLmRheXMoUkVURU5USU9OX1BFUklPRFMuRU5URVJQUklTRV9DT01QTElBTkNFKSxcbiAgICAgIER1cmF0aW9uLmRheXMoUkVURU5USU9OX1BFUklPRFMuQ09MRF9TVE9SQUdFX09ORV9ZRUFSKVxuICAgICk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLy8gQ29udGludW91cyBiYWNrdXAgKDM1LWRheSBtYXggUElUUiB3aW5kb3cpXG4gICAgICBuZXcgQmFja3VwUGxhblJ1bGUoe1xuICAgICAgICBydWxlTmFtZTogYCR7cGxhbk5hbWV9Q29udGludW91c2AsXG4gICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogZXZlbnRzLlNjaGVkdWxlLmNyb24oeyBob3VyOiBcIjJcIiwgbWludXRlOiBcIjBcIiB9KSwgLy8gRGFpbHkgZm9yIGNvbnRpbnVvdXMgYmFja3VwXG4gICAgICAgIGRlbGV0ZUFmdGVyOiBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLkVOVEVSUFJJU0VfQ09OVElOVU9VUyksXG4gICAgICAgIGVuYWJsZUNvbnRpbnVvdXNCYWNrdXA6IHRydWUsXG4gICAgICAgIHN0YXJ0V2luZG93OiBCQUNLVVBfV0lORE9XUy5TVEFSVCxcbiAgICAgICAgY29tcGxldGlvbldpbmRvdzogQkFDS1VQX1dJTkRPV1MuQ09NUExFVElPTixcbiAgICAgICAgY29weUFjdGlvbnM6IGNvbnRpbnVvdXNDb3B5QWN0aW9uc1xuICAgICAgfSksXG4gICAgICAvLyBIb3VybHkgc25hcHNob3RzIGZvciBsb25nLXRlcm0gY29tcGxpYW5jZSAoNyB5ZWFycylcbiAgICAgIG5ldyBCYWNrdXBQbGFuUnVsZSh7XG4gICAgICAgIHJ1bGVOYW1lOiBgJHtwbGFuTmFtZX1Ib3VybHlDb21wbGlhbmNlYCxcbiAgICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBldmVudHMuU2NoZWR1bGUuY3Jvbih7IG1pbnV0ZTogXCIwXCIgfSksIC8vIEV2ZXJ5IGhvdXJcbiAgICAgICAgZGVsZXRlQWZ0ZXI6IER1cmF0aW9uLmRheXMoUkVURU5USU9OX1BFUklPRFMuRU5URVJQUklTRV9DT01QTElBTkNFKSxcbiAgICAgICAgbW92ZVRvQ29sZFN0b3JhZ2VBZnRlcjogRHVyYXRpb24uZGF5cyhcbiAgICAgICAgICBSRVRFTlRJT05fUEVSSU9EUy5DT0xEX1NUT1JBR0VfT05FX1lFQVJcbiAgICAgICAgKSxcbiAgICAgICAgc3RhcnRXaW5kb3c6IEJBQ0tVUF9XSU5ET1dTLlNUQVJULFxuICAgICAgICBjb21wbGV0aW9uV2luZG93OiBCQUNLVVBfV0lORE9XUy5DT01QTEVUSU9OX1NIT1JULFxuICAgICAgICBjb3B5QWN0aW9uczogY29tcGxpYW5jZUNvcHlBY3Rpb25zXG4gICAgICB9KVxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvcHlBY3Rpb25zKFxuICAgIHBsYW5OYW1lOiBzdHJpbmcsXG4gICAgcmVwbGljYXRpb25WYXVsdEFybj86IHN0cmluZyxcbiAgICBkaXNhc3RlclJlY292ZXJ5VmF1bHRBcm4/OiBzdHJpbmcsXG4gICAgZGVsZXRlQWZ0ZXI/OiBEdXJhdGlvbixcbiAgICBtb3ZlVG9Db2xkU3RvcmFnZUFmdGVyPzogRHVyYXRpb25cbiAgKTogQmFja3VwUGxhbkNvcHlBY3Rpb25Qcm9wc1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhY3Rpb25zOiBCYWNrdXBQbGFuQ29weUFjdGlvblByb3BzW10gPSBbXTtcblxuICAgIC8vIENyb3NzLXJlZ2lvbiByZXBsaWNhdGlvblxuICAgIGlmIChyZXBsaWNhdGlvblZhdWx0QXJuKSB7XG4gICAgICBjb25zdCByZXBsaWNhdGlvbkFjdGlvbjogQmFja3VwUGxhbkNvcHlBY3Rpb25Qcm9wcyA9IHtcbiAgICAgICAgZGVzdGluYXRpb25CYWNrdXBWYXVsdDogVmF1bHQuZnJvbUJhY2t1cFZhdWx0QXJuKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7cGxhbk5hbWV9UmVwbGljYXRpb25WYXVsdFJlZmAsXG4gICAgICAgICAgcmVwbGljYXRpb25WYXVsdEFyblxuICAgICAgICApLFxuICAgICAgICAuLi4oZGVsZXRlQWZ0ZXIgJiYgeyBkZWxldGVBZnRlciB9KSxcbiAgICAgICAgLy8gT25seSBhZGQgY29sZCBzdG9yYWdlIGlmIHNwZWNpZmllZCBhbmQgPj0gOTAgZGF5c1xuICAgICAgICAuLi4obW92ZVRvQ29sZFN0b3JhZ2VBZnRlciAmJlxuICAgICAgICBtb3ZlVG9Db2xkU3RvcmFnZUFmdGVyLnRvRGF5cygpID49XG4gICAgICAgICAgUkVURU5USU9OX1BFUklPRFMuQ09MRF9TVE9SQUdFX01JTklNVU1cbiAgICAgICAgICA/IHsgbW92ZVRvQ29sZFN0b3JhZ2VBZnRlciB9XG4gICAgICAgICAgOiB7fSlcbiAgICAgIH07XG4gICAgICBhY3Rpb25zLnB1c2gocmVwbGljYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIENyb3NzLWFjY291bnQgRFIgdmF1bHRcbiAgICBpZiAoZGlzYXN0ZXJSZWNvdmVyeVZhdWx0QXJuKSB7XG4gICAgICBjb25zdCBkckFjdGlvbjogQmFja3VwUGxhbkNvcHlBY3Rpb25Qcm9wcyA9IHtcbiAgICAgICAgZGVzdGluYXRpb25CYWNrdXBWYXVsdDogVmF1bHQuZnJvbUJhY2t1cFZhdWx0QXJuKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7cGxhbk5hbWV9RGlzYXN0ZXJSZWNvdmVyeVZhdWx0UmVmYCxcbiAgICAgICAgICBkaXNhc3RlclJlY292ZXJ5VmF1bHRBcm5cbiAgICAgICAgKSxcbiAgICAgICAgLi4uKGRlbGV0ZUFmdGVyICYmIHsgZGVsZXRlQWZ0ZXIgfSksXG4gICAgICAgIC8vIE9ubHkgYWRkIGNvbGQgc3RvcmFnZSBpZiBzcGVjaWZpZWQgYW5kID49IDkwIGRheXNcbiAgICAgICAgLi4uKG1vdmVUb0NvbGRTdG9yYWdlQWZ0ZXIgJiZcbiAgICAgICAgbW92ZVRvQ29sZFN0b3JhZ2VBZnRlci50b0RheXMoKSA+PVxuICAgICAgICAgIFJFVEVOVElPTl9QRVJJT0RTLkNPTERfU1RPUkFHRV9NSU5JTVVNXG4gICAgICAgICAgPyB7IG1vdmVUb0NvbGRTdG9yYWdlQWZ0ZXIgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgICAgYWN0aW9ucy5wdXNoKGRyQWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucy5sZW5ndGggPiAwID8gYWN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,8 @@
1
+ import { Construct } from "constructs";
2
+ /**
3
+ * Enables EBS default encryption at the account level via a Custom Resource.
4
+ * Stack deletion does NOT revert this setting — security features are preserved.
5
+ */
6
+ export declare class EbsDefaultEncryption extends Construct {
7
+ constructor(scope: Construct, id: string);
8
+ }
@@ -0,0 +1,41 @@
1
+ import { Duration } from "aws-cdk-lib";
2
+ import { Effect, PolicyStatement } from "aws-cdk-lib/aws-iam";
3
+ import { Runtime } from "aws-cdk-lib/aws-lambda";
4
+ import { Construct } from "constructs";
5
+ import { CustomResource } from "../../resources/aws/utilities/customResource.js";
6
+ /**
7
+ * Enables EBS default encryption at the account level via a Custom Resource.
8
+ * Stack deletion does NOT revert this setting — security features are preserved.
9
+ */
10
+ export class EbsDefaultEncryption extends Construct {
11
+ constructor(scope, id) {
12
+ super(scope, id);
13
+ new CustomResource(this, "EbsDefaultEncryption", {
14
+ runtime: Runtime.NODEJS_22_X,
15
+ timeout: Duration.minutes(5),
16
+ lambdaDescription: "Enables EBS default encryption at account level",
17
+ inlinePolicy: [
18
+ new PolicyStatement({
19
+ effect: Effect.ALLOW,
20
+ actions: [
21
+ "ec2:EnableEbsEncryptionByDefault",
22
+ "ec2:GetEbsEncryptionByDefault"
23
+ ],
24
+ resources: ["*"]
25
+ })
26
+ ],
27
+ inlineCode: `
28
+ const { EC2Client, EnableEbsEncryptionByDefaultCommand } = require('@aws-sdk/client-ec2');
29
+
30
+ exports.handler = async (event) => {
31
+ const physicalResourceId = event.PhysicalResourceId || event.LogicalResourceId || 'ebs-default-encryption';
32
+ if (event.RequestType === 'Delete') {
33
+ return { PhysicalResourceId: physicalResourceId };
34
+ }
35
+ const client = new EC2Client({});
36
+ await client.send(new EnableEbsEncryptionByDefaultCommand({}));
37
+ return { PhysicalResourceId: physicalResourceId };
38
+ };`
39
+ });
40
+ }
41
+ }
@@ -1,34 +1,31 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EcrDefaultImage = void 0;
4
- const constructs_1 = require("constructs");
5
- const codeBuild_1 = require("../../resources/aws/utilities/codeBuild");
6
- const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
7
- const logGroup_1 = require("../../resources/aws/logging/logGroup");
8
- const aws_cdk_lib_1 = require("aws-cdk-lib");
9
- const role_1 = require("../../resources/aws/iam/role");
10
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
11
- const aws_events_1 = require("aws-cdk-lib/aws-events");
12
- const Targets = require("aws-cdk-lib/aws-events-targets");
13
- class EcrDefaultImage extends constructs_1.Construct {
1
+ import { Construct } from "constructs";
2
+ import { CodeBuildProject } from "../../resources/aws/utilities/codeBuild.js";
3
+ import { BuildSpec } from "aws-cdk-lib/aws-codebuild";
4
+ import { LogGroup } from "../../resources/aws/logging/logGroup.js";
5
+ import { RemovalPolicy } from "aws-cdk-lib";
6
+ import { Role } from "../../resources/aws/iam/role.js";
7
+ import { PolicyDocument, PolicyStatement, ServicePrincipal } from "aws-cdk-lib/aws-iam";
8
+ import { EventBus, EventField, Rule, RuleTargetInput } from "aws-cdk-lib/aws-events";
9
+ import * as Targets from "aws-cdk-lib/aws-events-targets";
10
+ export class EcrDefaultImage extends Construct {
14
11
  constructor(scope, id, props) {
15
12
  super(scope, id);
16
- const logGroup = new logGroup_1.LogGroup(this, `${id}LogGroup`, {
13
+ const logGroup = new LogGroup(this, `${id}LogGroup`, {
17
14
  logGroupName: `/vpc/codebuild/${id}/`,
18
- removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY
15
+ removalPolicy: RemovalPolicy.DESTROY
19
16
  });
20
- const ecrDefaultImageRole = new role_1.Role(this, `${id}Role`, {
17
+ const ecrDefaultImageRole = new Role(this, `${id}Role`, {
21
18
  roleName: `ecrDefaultImageRole-${props.region.replace(/-/g, "")}`,
22
19
  description: "Role to push default ECR images into new repositories",
23
- assumedBy: new aws_iam_1.ServicePrincipal("codebuild.amazonaws.com"),
20
+ assumedBy: new ServicePrincipal("codebuild.amazonaws.com"),
24
21
  inlinePolicies: {
25
- ["pushEcrImage"]: new aws_iam_1.PolicyDocument({
22
+ ["pushEcrImage"]: new PolicyDocument({
26
23
  statements: [
27
- new aws_iam_1.PolicyStatement({
24
+ new PolicyStatement({
28
25
  actions: ["ecr:GetAuthorizationToken"],
29
26
  resources: ["*"]
30
27
  }),
31
- new aws_iam_1.PolicyStatement({
28
+ new PolicyStatement({
32
29
  actions: [
33
30
  "ecr:BatchGetImage",
34
31
  "ecr:GetDownloadUrlForLayer",
@@ -44,9 +41,9 @@ class EcrDefaultImage extends constructs_1.Construct {
44
41
  })
45
42
  ]
46
43
  }),
47
- ["writeLogs"]: new aws_iam_1.PolicyDocument({
44
+ ["writeLogs"]: new PolicyDocument({
48
45
  statements: [
49
- new aws_iam_1.PolicyStatement({
46
+ new PolicyStatement({
50
47
  actions: [
51
48
  "logs:CreateLogGroup",
52
49
  "logs:CreateLogStream",
@@ -58,10 +55,10 @@ class EcrDefaultImage extends constructs_1.Construct {
58
55
  })
59
56
  }
60
57
  });
61
- const codeBuildProject = new codeBuild_1.CodeBuildProject(this, `${id}CodeBuildProject`, {
58
+ const codeBuildProject = new CodeBuildProject(this, `${id}CodeBuildProject`, {
62
59
  description: "Build and push the default ECR image to new repositories",
63
60
  projectName: "ecrDefaultImage",
64
- buildSpec: aws_codebuild_1.BuildSpec.fromObject({
61
+ buildSpec: BuildSpec.fromObject({
65
62
  version: 0.2,
66
63
  phases: {
67
64
  install: {
@@ -90,7 +87,7 @@ class EcrDefaultImage extends constructs_1.Construct {
90
87
  role: ecrDefaultImageRole
91
88
  });
92
89
  const eventInputMapping = {
93
- repositoryUri: aws_events_1.EventField.fromPath("$.detail.responseElements.repository.repositoryUri")
90
+ repositoryUri: EventField.fromPath("$.detail.responseElements.repository.repositoryUri")
94
91
  };
95
92
  const eventInputTemplate = {
96
93
  environmentVariablesOverride: [
@@ -100,11 +97,11 @@ class EcrDefaultImage extends constructs_1.Construct {
100
97
  }
101
98
  ]
102
99
  };
103
- new aws_events_1.Rule(this, `${id}EventRule`, {
100
+ new Rule(this, `${id}EventRule`, {
104
101
  ruleName: "ecrCreationRule",
105
102
  description: "Trigger the default ECR image build when a new repository is created",
106
103
  enabled: true,
107
- eventBus: aws_events_1.EventBus.fromEventBusArn(this, `${id}EventBus`, props.eventBusArn),
104
+ eventBus: EventBus.fromEventBusArn(this, `${id}EventBus`, props.eventBusArn),
108
105
  eventPattern: {
109
106
  source: ["aws.ecr"],
110
107
  detailType: ["AWS API Call via CloudTrail"],
@@ -115,11 +112,9 @@ class EcrDefaultImage extends constructs_1.Construct {
115
112
  },
116
113
  targets: [
117
114
  new Targets.CodeBuildProject(codeBuildProject.project, {
118
- event: aws_events_1.RuleTargetInput.fromObject(eventInputTemplate)
115
+ event: RuleTargetInput.fromObject(eventInputTemplate)
119
116
  })
120
117
  ]
121
118
  });
122
119
  }
123
120
  }
124
- exports.EcrDefaultImage = EcrDefaultImage;
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNyRGVmYXVsdEltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3MvZWNyRGVmYXVsdEltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyx1RUFBMkU7QUFDM0UsNkRBQXNEO0FBQ3RELG1FQUFnRTtBQUNoRSw2Q0FBNkQ7QUFDN0QsdURBQW9EO0FBQ3BELGlEQUk2QjtBQUM3Qix1REFLZ0M7QUFDaEMsMERBQTBEO0FBUTFELE1BQWEsZUFBZ0IsU0FBUSxzQkFBUztJQUM1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ25ELFlBQVksRUFBRSxrQkFBa0IsRUFBRSxHQUFHO1lBQ3JDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87U0FDckMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLFdBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtZQUN0RCxRQUFRLEVBQUUsdUJBQXVCLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNqRSxXQUFXLEVBQUUsdURBQXVEO1lBQ3BFLFNBQVMsRUFBRSxJQUFJLDBCQUFnQixDQUFDLHlCQUF5QixDQUFDO1lBQzFELGNBQWMsRUFBRTtnQkFDZCxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksd0JBQWMsQ0FBQztvQkFDbkMsVUFBVSxFQUFFO3dCQUNWLElBQUkseUJBQWUsQ0FBQzs0QkFDbEIsT0FBTyxFQUFFLENBQUMsMkJBQTJCLENBQUM7NEJBQ3RDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQzt5QkFDakIsQ0FB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Q0wsQ0FBQztDQUNGO0FBL0hELDBDQStIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb2RlQnVpbGRQcm9qZWN0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2NvZGVCdWlsZFwiO1xuaW1wb3J0IHsgQnVpbGRTcGVjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlYnVpbGRcIjtcbmltcG9ydCB7IExvZ0dyb3VwIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvbG9nZ2luZy9sb2dHcm91cFwiO1xuaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSwgdHlwZSBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtL3JvbGVcIjtcbmltcG9ydCB7XG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIFNlcnZpY2VQcmluY2lwYWxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIEV2ZW50QnVzLFxuICBFdmVudEZpZWxkLFxuICBSdWxlLFxuICBSdWxlVGFyZ2V0SW5wdXRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCAqIGFzIFRhcmdldHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xuXG5pbnRlcmZhY2UgRWNyRGVmYXVsdEltYWdlUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGFjY291bnRJZDogc3RyaW5nO1xuICBldmVudEJ1c0Fybjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRWNyRGVmYXVsdEltYWdlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVjckRlZmF1bHRJbWFnZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGxvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKHRoaXMsIGAke2lkfUxvZ0dyb3VwYCwge1xuICAgICAgbG9nR3JvdXBOYW1lOiBgL3ZwYy9jb2RlYnVpbGQvJHtpZH0vYCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgIH0pO1xuXG4gICAgY29uc3QgZWNyRGVmYXVsdEltYWdlUm9sZSA9IG5ldyBSb2xlKHRoaXMsIGAke2lkfVJvbGVgLCB7XG4gICAgICByb2xlTmFtZTogYGVjckRlZmF1bHRJbWFnZVJvbGUtJHtwcm9wcy5yZWdpb24ucmVwbGFjZSgvLS9nLCBcIlwiKX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiUm9sZSB0byBwdXNoIGRlZmF1bHQgRUNSIGltYWdlcyBpbnRvIG5ldyByZXBvc2l0b3JpZXNcIixcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJjb2RlYnVpbGQuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFtcInB1c2hFY3JJbWFnZVwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wiZWNyOkdldEF1dGhvcml6YXRpb25Ub2tlblwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJlY3I6QmF0Y2hHZXRJbWFnZVwiLFxuICAgICAgICAgICAgICAgIFwiZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXJcIixcbiAgICAgICAgICAgICAgICBcImVjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHlcIixcbiAgICAgICAgICAgICAgICBcImVjcjpJbml0aWF0ZUxheWVyVXBsb2FkXCIsXG4gICAgICAgICAgICAgICAgXCJlY3I6VXBsb2FkTGF5ZXJQYXJ0XCIsXG4gICAgICAgICAgICAgICAgXCJlY3I6Q29tcGxldGVMYXllclVwbG9hZFwiLFxuICAgICAgICAgICAgICAgIFwiZWNyOlB1dEltYWdlXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6ZWNyOiR7cHJvcHMucmVnaW9ufToke3Byb3BzLmFjY291bnRJZH06cmVwb3NpdG9yeS8qYFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcIndyaXRlTG9nc1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dTdHJlYW1cIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6UHV0TG9nRXZlbnRzXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbbG9nR3JvdXAubG9nR3JvdXBBcm5dXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvZGVCdWlsZFByb2plY3QgPSBuZXcgQ29kZUJ1aWxkUHJvamVjdChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtpZH1Db2RlQnVpbGRQcm9qZWN0YCxcbiAgICAgIHtcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQnVpbGQgYW5kIHB1c2ggdGhlIGRlZmF1bHQgRUNSIGltYWdlIHRvIG5ldyByZXBvc2l0b3JpZXNcIixcbiAgICAgICAgcHJvamVjdE5hbWU6IFwiZWNyRGVmYXVsdEltYWdlXCIsXG4gICAgICAgIGJ1aWxkU3BlYzogQnVpbGRTcGVjLmZyb21PYmplY3Qoe1xuICAgICAgICAgIHZlcnNpb246IDAuMixcbiAgICAgICAgICBwaGFzZXM6IHtcbiAgICAgICAgICAgIGluc3RhbGw6IHtcbiAgICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgYnVpbGR4IGlzIGF2YWlsYWJsZSAoaW5zdGFsbHMgbGF0ZXN0IGlmIG1pc3Npbmcvb3V0ZGF0ZWQpXG4gICAgICAgICAgICAgICAgLy8gRGV0ZWN0IGFyY2hpdGVjdHVyZSBkeW5hbWljYWxseSB0byBzdXBwb3J0IGJvdGggeDg2XzY0IGFuZCBBUk02NCBDb2RlQnVpbGRcbiAgICAgICAgICAgICAgICBcImRvY2tlciBidWlsZHggdmVyc2lvbiB8fCAobWtkaXIgLXAgfi8uZG9ja2VyL2NsaS1wbHVnaW5zICYmIEFSQ0g9JCh1bmFtZSAtbSB8IHNlZCAncy94ODZfNjQvYW1kNjQvJyB8IHNlZCAncy9hYXJjaDY0L2FybTY0LycpICYmIGN1cmwgLXNTTCBodHRwczovL2dpdGh1Yi5jb20vZG9ja2VyL2J1aWxkeC9yZWxlYXNlcy9sYXRlc3QvZG93bmxvYWQvYnVpbGR4LSQodW5hbWUgLXMgfCB0ciAnWzp1cHBlcjpdJyAnWzpsb3dlcjpdJyktJHtBUkNIfSAtbyB+Ly5kb2NrZXIvY2xpLXBsdWdpbnMvZG9ja2VyLWJ1aWxkeCAmJiBjaG1vZCAreCB+Ly5kb2NrZXIvY2xpLXBsdWdpbnMvZG9ja2VyLWJ1aWxkeClcIlxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnVpbGQ6IHtcbiAgICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgICAvLyBMb2dpbiB0byBwcml2YXRlIEVDUlxuICAgICAgICAgICAgICAgIGBhd3MgZWNyIGdldC1sb2dpbi1wYXNzd29yZCAtLXJlZ2lvbiAke3Byb3BzLnJlZ2lvbn0gfCBkb2NrZXIgbG9naW4gLS11c2VybmFtZSBBV1MgLS1wYXNzd29yZC1zdGRpbiAke3Byb3BzLmFjY291bnRJZH0uZGtyLmVjci4ke3Byb3BzLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWAsXG4gICAgICAgICAgICAgICAgLy8gQ29weSBtdWx0aS1hcmNoIG1hbmlmZXN0cyBkaXJlY3RseSAocHJlc2VydmVzIGFsbCBhcmNoaXRlY3R1cmVzKVxuICAgICAgICAgICAgICAgIFwiZG9ja2VyIGJ1aWxkeCBpbWFnZXRvb2xzIGNyZWF0ZSAtLXRhZyAkRUNSX1JFUE9TSVRPUlk6bGF0ZXN0IHB1YmxpYy5lY3IuYXdzL2ZqYWxsL3dlbGNvbWU6bGF0ZXN0XCIsXG4gICAgICAgICAgICAgICAgXCJkb2NrZXIgYnVpbGR4IGltYWdldG9vbHMgY3JlYXRlIC0tdGFnICRFQ1JfUkVQT1NJVE9SWTpiYWNrZW5kIHB1YmxpYy5lY3IuYXdzL2ZqYWxsL3dlbGNvbWU6YmFja2VuZFwiXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBsb2dnaW5nOiB7XG4gICAgICAgICAgY2xvdWRXYXRjaDoge1xuICAgICAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByb2xlOiBlY3JEZWZhdWx0SW1hZ2VSb2xlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGV2ZW50SW5wdXRNYXBwaW5nID0ge1xuICAgICAgcmVwb3NpdG9yeVVyaTogRXZlbnRGaWVsZC5mcm9tUGF0aChcbiAgICAgICAgXCIkLmRldGFpbC5yZXNwb25zZUVsZW1lbnRzLnJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaVwiXG4gICAgICApXG4gICAgfTtcblxuICAgIGNvbnN0IGV2ZW50SW5wdXRUZW1wbGF0ZSA9IHtcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzT3ZlcnJpZGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiRUNSX1JFUE9TSVRPUllcIixcbiAgICAgICAgICB2YWx1ZTogZXZlbnRJbnB1dE1hcHBpbmcucmVwb3NpdG9yeVVyaVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIG5ldyBSdWxlKHRoaXMsIGAke2lkfUV2ZW50UnVsZWAsIHtcbiAgICAgIHJ1bGVOYW1lOiBcImVjckNyZWF0aW9uUnVsZVwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiVHJpZ2dlciB0aGUgZGVmYXVsdCBFQ1IgaW1hZ2UgYnVpbGQgd2hlbiBhIG5ldyByZXBvc2l0b3J5IGlzIGNyZWF0ZWRcIixcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBldmVudEJ1czogRXZlbnRCdXMuZnJvbUV2ZW50QnVzQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtpZH1FdmVudEJ1c2AsXG4gICAgICAgIHByb3BzLmV2ZW50QnVzQXJuXG4gICAgICApLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogW1wiYXdzLmVjclwiXSxcbiAgICAgICAgZGV0YWlsVHlwZTogW1wiQVdTIEFQSSBDYWxsIHZpYSBDbG91ZFRyYWlsXCJdLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBldmVudFNvdXJjZTogW1wiZWNyLmFtYXpvbmF3cy5jb21cIl0sXG4gICAgICAgICAgZXZlbnROYW1lOiBbXCJDcmVhdGVSZXBvc2l0b3J5XCJdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyBUYXJnZXRzLkNvZGVCdWlsZFByb2plY3QoY29kZUJ1aWxkUHJvamVjdC5wcm9qZWN0LCB7XG4gICAgICAgICAgZXZlbnQ6IFJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KGV2ZW50SW5wdXRUZW1wbGF0ZSlcbiAgICAgICAgfSlcbiAgICAgIF1cbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,24 +1,21 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DefaultEventBus = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const Events = require("aws-cdk-lib/aws-events");
6
- const constructs_1 = require("constructs");
7
- class DefaultEventBus extends constructs_1.Construct {
1
+ import { CfnOutput } from "aws-cdk-lib";
2
+ import * as Events from "aws-cdk-lib/aws-events";
3
+ import { Construct } from "constructs";
4
+ export class DefaultEventBus extends Construct {
5
+ defaultEventBusName;
6
+ defaultEventBusArn;
8
7
  constructor(scope, id) {
9
8
  super(scope, id);
10
9
  const eventBridge = Events.EventBus.fromEventBusName(this, "defaultEventBus", "default");
11
- this.defaultEventBusName = new aws_cdk_lib_1.CfnOutput(this, "defaultEventBusName", {
10
+ this.defaultEventBusName = new CfnOutput(this, "defaultEventBusName", {
12
11
  key: `defaultEventBusName`,
13
12
  value: eventBridge.eventBusName,
14
13
  exportName: "defaultEventBusName"
15
14
  });
16
- this.defaultEventBusArn = new aws_cdk_lib_1.CfnOutput(this, "defaultEventBusArn", {
15
+ this.defaultEventBusArn = new CfnOutput(this, "defaultEventBusArn", {
17
16
  key: `defaultEventBusArn`,
18
17
  value: eventBridge.eventBusArn,
19
18
  exportName: "defaultEventBusArn"
20
19
  });
21
20
  }
22
21
  }
23
- exports.DefaultEventBus = DefaultEventBus;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRCdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9ldmVudEJ1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBd0M7QUFDeEMsaURBQWlEO0FBQ2pELDJDQUF1QztBQUV2QyxNQUFhLGVBQWdCLFNBQVEsc0JBQVM7SUFJNUMsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUNsRCxJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLFNBQVMsQ0FDVixDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7WUFDcEUsR0FBRyxFQUFFLHFCQUFxQjtZQUMxQixLQUFLLEVBQUUsV0FBVyxDQUFDLFlBQVk7WUFDL0IsVUFBVSxFQUFFLHFCQUFxQjtTQUNsQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUNsRSxHQUFHLEVBQUUsb0JBQW9CO1lBQ3pCLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVztZQUM5QixVQUFVLEVBQUUsb0JBQW9CO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXpCRCwwQ0F5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIEV2ZW50cyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNsYXNzIERlZmF1bHRFdmVudEJ1cyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0RXZlbnRCdXNOYW1lOiBDZm5PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0RXZlbnRCdXNBcm46IENmbk91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGV2ZW50QnJpZGdlID0gRXZlbnRzLkV2ZW50QnVzLmZyb21FdmVudEJ1c05hbWUoXG4gICAgICB0aGlzLFxuICAgICAgXCJkZWZhdWx0RXZlbnRCdXNcIixcbiAgICAgIFwiZGVmYXVsdFwiXG4gICAgKTtcblxuICAgIHRoaXMuZGVmYXVsdEV2ZW50QnVzTmFtZSA9IG5ldyBDZm5PdXRwdXQodGhpcywgXCJkZWZhdWx0RXZlbnRCdXNOYW1lXCIsIHtcbiAgICAgIGtleTogYGRlZmF1bHRFdmVudEJ1c05hbWVgLFxuICAgICAgdmFsdWU6IGV2ZW50QnJpZGdlLmV2ZW50QnVzTmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6IFwiZGVmYXVsdEV2ZW50QnVzTmFtZVwiXG4gICAgfSk7XG5cbiAgICB0aGlzLmRlZmF1bHRFdmVudEJ1c0FybiA9IG5ldyBDZm5PdXRwdXQodGhpcywgXCJkZWZhdWx0RXZlbnRCdXNBcm5cIiwge1xuICAgICAga2V5OiBgZGVmYXVsdEV2ZW50QnVzQXJuYCxcbiAgICAgIHZhbHVlOiBldmVudEJyaWRnZS5ldmVudEJ1c0FybixcbiAgICAgIGV4cG9ydE5hbWU6IFwiZGVmYXVsdEV2ZW50QnVzQXJuXCJcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,16 @@
1
+ import { CfnDetector } from "aws-cdk-lib/aws-guardduty";
2
+ import { Construct } from "constructs";
3
+ export interface GuardDutyDetectorProps {
4
+ /** Enable S3 data event analysis. Default: true */
5
+ enableS3Logs?: boolean;
6
+ /** Enable EKS audit log analysis. Default: false */
7
+ enableEksAuditLogs?: boolean;
8
+ }
9
+ /**
10
+ * Per-account GuardDuty detector for continuous threat detection.
11
+ * Analyses VPC Flow Logs, CloudTrail management events, and DNS logs.
12
+ */
13
+ export declare class GuardDutyDetector extends Construct {
14
+ readonly detector: CfnDetector;
15
+ constructor(scope: Construct, id: string, props?: GuardDutyDetectorProps);
16
+ }
@@ -0,0 +1,26 @@
1
+ import { CfnDetector } from "aws-cdk-lib/aws-guardduty";
2
+ import { Construct } from "constructs";
3
+ /**
4
+ * Per-account GuardDuty detector for continuous threat detection.
5
+ * Analyses VPC Flow Logs, CloudTrail management events, and DNS logs.
6
+ */
7
+ export class GuardDutyDetector extends Construct {
8
+ detector;
9
+ constructor(scope, id, props) {
10
+ super(scope, id);
11
+ this.detector = new CfnDetector(this, "Detector", {
12
+ enable: true,
13
+ findingPublishingFrequency: "FIFTEEN_MINUTES",
14
+ features: [
15
+ {
16
+ name: "S3_DATA_EVENTS",
17
+ status: props?.enableS3Logs !== false ? "ENABLED" : "DISABLED"
18
+ },
19
+ {
20
+ name: "EKS_AUDIT_LOGS",
21
+ status: props?.enableEksAuditLogs ? "ENABLED" : "DISABLED"
22
+ }
23
+ ]
24
+ });
25
+ }
26
+ }
@@ -1,6 +1,6 @@
1
1
  import { type Construct } from "constructs";
2
2
  import { NestedStack, type NestedStackProps } from "aws-cdk-lib";
3
- import { type KeyValue } from "../../types";
3
+ import { type KeyValue } from "../../types.js";
4
4
  interface IdentityCenterProps extends NestedStackProps {
5
5
  accounts: KeyValue;
6
6
  tags?: KeyValue[];