@fjall/components-infrastructure 0.89.5 → 0.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +60 -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 +81 -71
  181. package/dist/lib/resources/aws/database/dynamodb.js +24 -27
  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
@@ -2,8 +2,10 @@ import { Duration } from "aws-cdk-lib";
2
2
  import { Connections, type IConnectable, type IVpc } from "aws-cdk-lib/aws-ec2";
3
3
  import { DatabaseCluster, type CfnDBCluster, type IClusterEngine } from "aws-cdk-lib/aws-rds";
4
4
  import { Construct } from "constructs";
5
- import { Secret } from "../secrets";
6
- import { type EngineConfig, type ProxyConfig, type CredentialsConfig, type AuroraEncryptionConfig, type AuroraWriterConfig, type AuroraReadersConfig, type DatabaseInsightsConfig } from "../../../utils/databaseTypes";
5
+ import { Secret } from "../secrets/index.js";
6
+ import type { ITopic } from "aws-cdk-lib/aws-sns";
7
+ import { type RdsAlarmThresholds } from "../monitoring/index.js";
8
+ import { type EngineConfig, type ProxyConfig, type CredentialsConfig, type AuroraEncryptionConfig, type AuroraWriterConfig, type AuroraReadersConfig, type DatabaseInsightsConfig } from "../../../utils/databaseTypes.js";
7
9
  interface RdsProps {
8
10
  vpc: IVpc;
9
11
  databaseName?: string;
@@ -43,6 +45,12 @@ interface RdsProps {
43
45
  * Format: CIDR notation (e.g., "203.0.113.0/32" for single IP)
44
46
  */
45
47
  allowedIpCidr?: string;
48
+ /** SNS topic for alarm notifications. Required for alarm creation. */
49
+ alertsTopic?: ITopic;
50
+ /** Alarm thresholds. false to disable, undefined for defaults, object to override. */
51
+ alarms?: RdsAlarmThresholds | false;
52
+ /** Application ID for alarm tagging. */
53
+ applicationId?: string;
46
54
  }
47
55
  export declare class RdsAurora extends Construct implements IConnectable {
48
56
  connections: Connections;
@@ -1,39 +1,45 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RdsAurora = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
6
- const aws_rds_1 = require("aws-cdk-lib/aws-rds");
7
- const constructs_1 = require("constructs");
8
- const securityGroup_js_1 = require("../networking/securityGroup.js");
9
- const secrets_1 = require("../secrets");
10
- const resourceNaming_1 = require("../../../utils/resourceNaming");
11
- const rdsProxyOutput_1 = require("./rdsProxyOutput");
12
- const _1 = require("./");
13
- const rdsDefaults_1 = require("./rdsDefaults");
14
- const rdsHelpers_1 = require("./rdsHelpers");
15
- class RdsAurora extends constructs_1.Construct {
1
+ import { Duration, RemovalPolicy } from "aws-cdk-lib";
2
+ import { Connections, Peer, Port, SubnetType } from "aws-cdk-lib/aws-ec2";
3
+ import { AuroraPostgresEngineVersion, CaCertificate, ClusterInstance, Credentials, DatabaseCluster, DatabaseClusterFromSnapshot, DatabaseClusterEngine, DatabaseProxy, ParameterGroup, ProxyTarget, SnapshotCredentials } from "aws-cdk-lib/aws-rds";
4
+ import { Construct } from "constructs";
5
+ import { SecurityGroup } from "../networking/securityGroup.js";
6
+ import { Secret } from "../secrets/index.js";
7
+ import { ResourceNaming } from "../../../utils/resourceNaming.js";
8
+ import { addProxyCfnOutput } from "./rdsProxyOutput.js";
9
+ import { getDatabaseInsightsRetention } from "./index.js";
10
+ import { RDS_DEFAULTS } from "./rdsDefaults.js";
11
+ import { createRdsAlarms } from "../monitoring/index.js";
12
+ import { DEFAULT_POSTGRES_ENGINE_CONFIG, resolveDatabaseInsights, resolveStorageEncryptionKey, resolvePerformanceInsightsKey, addMultiUserSecretRotation } from "./rdsHelpers.js";
13
+ export class RdsAurora extends Construct {
14
+ connections;
15
+ constructId;
16
+ port;
17
+ engineConfig;
18
+ databaseCluster;
19
+ databaseProxy;
20
+ databaseCredentials;
21
+ cfnCluster;
16
22
  constructor(scope, id, props) {
17
23
  super(scope, id);
18
24
  this.constructId = id;
19
- this.port = props.port ?? rdsDefaults_1.RDS_DEFAULTS.DEFAULT_PORT;
25
+ this.port = props.port ?? RDS_DEFAULTS.DEFAULT_PORT;
20
26
  // PostgreSQL fallback for direct usage - ensure engine and engineConfig match
21
- this.engineConfig = props.engineConfig ?? rdsHelpers_1.DEFAULT_POSTGRES_ENGINE_CONFIG;
22
- const { piEnabled, piConfig } = (0, rdsHelpers_1.resolveDatabaseInsights)(props.databaseInsights);
27
+ this.engineConfig = props.engineConfig ?? DEFAULT_POSTGRES_ENGINE_CONFIG;
28
+ const { piEnabled, piConfig } = resolveDatabaseInsights(props.databaseInsights);
23
29
  // Username priority: snapshotUsername > credentials.username > engine default
24
30
  const username = props.snapshotIdentifier && props.snapshotUsername
25
31
  ? props.snapshotUsername
26
32
  : (props.credentials?.username ?? this.engineConfig.defaultUsername);
27
33
  // Global secondary clusters import replicated secret instead of creating new
28
34
  if (props.isGlobalSecondary) {
29
- this.databaseCredentials = new secrets_1.Secret(this, `${props.databaseName}Credentials`, {
30
- secretName: resourceNaming_1.ResourceNaming.credentialsSecretName(id),
35
+ this.databaseCredentials = new Secret(this, `${props.databaseName}Credentials`, {
36
+ secretName: ResourceNaming.credentialsSecretName(id),
31
37
  importExisting: true
32
38
  });
33
39
  }
34
40
  else {
35
- this.databaseCredentials = new secrets_1.Secret(this, `${props.databaseName}Credentials`, {
36
- secretName: resourceNaming_1.ResourceNaming.credentialsSecretName(id),
41
+ this.databaseCredentials = new Secret(this, `${props.databaseName}Credentials`, {
42
+ secretName: ResourceNaming.credentialsSecretName(id),
37
43
  generateSecretString: {
38
44
  secretStringTemplate: JSON.stringify({ username }),
39
45
  excludePunctuation: true,
@@ -43,32 +49,32 @@ class RdsAurora extends constructs_1.Construct {
43
49
  replicaRegions: props.secretReplicaRegions
44
50
  });
45
51
  }
46
- const storageEncryptionKey = (0, rdsHelpers_1.resolveStorageEncryptionKey)(this, props.databaseName, props.encryption?.storageKey);
47
- const performanceInsightsKey = (0, rdsHelpers_1.resolvePerformanceInsightsKey)(this, props.databaseName, piEnabled, piConfig?.encryptionKey);
48
- const clusterSecurityGroup = new securityGroup_js_1.SecurityGroup(this, `${id}SecurityGroup`, {
52
+ const storageEncryptionKey = resolveStorageEncryptionKey(this, props.databaseName, props.encryption?.storageKey);
53
+ const performanceInsightsKey = resolvePerformanceInsightsKey(this, props.databaseName, piEnabled, piConfig?.encryptionKey);
54
+ const clusterSecurityGroup = new SecurityGroup(this, `${id}SecurityGroup`, {
49
55
  vpc: props.vpc,
50
56
  description: `Security group for Aurora cluster ${props.databaseName}`
51
57
  });
52
- clusterSecurityGroup.addIngressRule(clusterSecurityGroup, aws_ec2_1.Port.tcp(this.port));
58
+ clusterSecurityGroup.addIngressRule(clusterSecurityGroup, Port.tcp(this.port));
53
59
  // Allow VPC-wide access when enabled (avoids cross-stack cyclic dependencies)
54
60
  if (props.allowVpcAccess) {
55
- clusterSecurityGroup.addIngressRule(aws_ec2_1.Peer.ipv4(props.vpc.vpcCidrBlock), aws_ec2_1.Port.tcp(this.port), "Allow access from VPC CIDR");
61
+ clusterSecurityGroup.addIngressRule(Peer.ipv4(props.vpc.vpcCidrBlock), Port.tcp(this.port), "Allow access from VPC CIDR");
56
62
  }
57
63
  // Allow external access when publicly accessible with allowed IP
58
64
  if (props.publiclyAccessible && props.allowedIpCidr) {
59
- clusterSecurityGroup.addIngressRule(aws_ec2_1.Peer.ipv4(props.allowedIpCidr), aws_ec2_1.Port.tcp(this.port), "Allow external access from allowed IP");
65
+ clusterSecurityGroup.addIngressRule(Peer.ipv4(props.allowedIpCidr), Port.tcp(this.port), "Allow external access from allowed IP");
60
66
  }
61
- this.connections = new aws_ec2_1.Connections({
67
+ this.connections = new Connections({
62
68
  securityGroups: [clusterSecurityGroup],
63
- defaultPort: aws_ec2_1.Port.tcp(this.port)
69
+ defaultPort: Port.tcp(this.port)
64
70
  });
65
71
  const writerConfig = props.writer ?? {};
66
72
  const writerPI = writerConfig.enableDatabaseInsights ?? piEnabled;
67
73
  const writerSuffix = writerConfig.identifierSuffix;
68
74
  const diMode = piConfig?.mode ?? "standard";
69
- const performanceInsightsRetention = (0, _1.getDatabaseInsightsRetention)(diMode);
75
+ const performanceInsightsRetention = getDatabaseInsightsRetention(diMode);
70
76
  const databaseName = props.databaseName || id;
71
- const writer = aws_rds_1.ClusterInstance.serverlessV2(`${databaseName}Writer`, {
77
+ const writer = ClusterInstance.serverlessV2(`${databaseName}Writer`, {
72
78
  enablePerformanceInsights: writerPI,
73
79
  performanceInsightEncryptionKey: writerPI
74
80
  ? performanceInsightsKey
@@ -76,8 +82,8 @@ class RdsAurora extends constructs_1.Construct {
76
82
  performanceInsightRetention: writerPI
77
83
  ? performanceInsightsRetention
78
84
  : undefined,
79
- instanceIdentifier: resourceNaming_1.ResourceNaming.writerInstanceId(id, writerSuffix),
80
- caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1,
85
+ instanceIdentifier: ResourceNaming.writerInstanceId(id, writerSuffix),
86
+ caCertificate: CaCertificate.RDS_CA_RSA4096_G1,
81
87
  publiclyAccessible: props.publiclyAccessible,
82
88
  ...(writerConfig.availabilityZone && {
83
89
  availabilityZone: writerConfig.availabilityZone
@@ -85,18 +91,18 @@ class RdsAurora extends constructs_1.Construct {
85
91
  });
86
92
  const readers = this.buildReaders(props, piEnabled, performanceInsightsKey, performanceInsightsRetention);
87
93
  const engine = props.engine ||
88
- aws_rds_1.DatabaseClusterEngine.auroraPostgres({
89
- version: aws_rds_1.AuroraPostgresEngineVersion.of("16.6", "16")
94
+ DatabaseClusterEngine.auroraPostgres({
95
+ version: AuroraPostgresEngineVersion.of("16.6", "16")
90
96
  });
91
- const parameterGroup = new aws_rds_1.ParameterGroup(this, `${props.databaseName}ParameterGroup`, {
97
+ const parameterGroup = new ParameterGroup(this, `${props.databaseName}ParameterGroup`, {
92
98
  engine,
93
99
  description: `Parameter group for ${props.databaseName} with security defaults`,
94
100
  parameters: this.engineConfig.sslParameters
95
101
  });
96
102
  // Use public subnets when publicly accessible, otherwise private
97
103
  const vpcSubnets = props.publiclyAccessible
98
- ? { subnetType: aws_ec2_1.SubnetType.PUBLIC }
99
- : { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS };
104
+ ? { subnetType: SubnetType.PUBLIC }
105
+ : { subnetType: SubnetType.PRIVATE_WITH_EGRESS };
100
106
  // Common props shared across all cluster creation paths
101
107
  const baseClusterProps = {
102
108
  vpc: props.vpc,
@@ -104,15 +110,15 @@ class RdsAurora extends constructs_1.Construct {
104
110
  securityGroups: [clusterSecurityGroup],
105
111
  engine,
106
112
  parameterGroup,
107
- backup: { retention: aws_cdk_lib_1.Duration.days(props.backupRetention ?? 14) },
113
+ backup: { retention: Duration.days(props.backupRetention ?? 14) },
108
114
  storageEncrypted: true,
109
115
  ...(storageEncryptionKey && { storageEncryptionKey }),
110
- clusterIdentifier: props.clusterIdentifier?.toLowerCase() || resourceNaming_1.ResourceNaming.clusterId(id),
111
- monitoringInterval: props.monitoringInterval || rdsDefaults_1.RDS_DEFAULTS.MONITORING_INTERVAL,
116
+ clusterIdentifier: props.clusterIdentifier?.toLowerCase() || ResourceNaming.clusterId(id),
117
+ monitoringInterval: props.monitoringInterval || RDS_DEFAULTS.MONITORING_INTERVAL,
112
118
  preferredMaintenanceWindow: props.preferredMaintenanceWindow ||
113
- rdsDefaults_1.RDS_DEFAULTS.PREFERRED_MAINTENANCE_WINDOW,
119
+ RDS_DEFAULTS.PREFERRED_MAINTENANCE_WINDOW,
114
120
  port: this.port,
115
- removalPolicy: aws_cdk_lib_1.RemovalPolicy.SNAPSHOT,
121
+ removalPolicy: RemovalPolicy.SNAPSHOT,
116
122
  deletionProtection: props.deletionProtection ?? true,
117
123
  iamAuthentication: true,
118
124
  writer,
@@ -122,7 +128,7 @@ class RdsAurora extends constructs_1.Construct {
122
128
  const primaryClusterProps = props.isGlobalSecondary
123
129
  ? {}
124
130
  : {
125
- credentials: aws_rds_1.Credentials.fromSecret(this.databaseCredentials.secret),
131
+ credentials: Credentials.fromSecret(this.databaseCredentials.secret),
126
132
  defaultDatabaseName: (props.databaseName || id.replace("Rds", "")).replace(/[^a-zA-Z0-9_]/g, "")
127
133
  };
128
134
  if (props.snapshotIdentifier) {
@@ -130,9 +136,9 @@ class RdsAurora extends constructs_1.Construct {
130
136
  const snapshotCredentials = props.isGlobalSecondary
131
137
  ? {}
132
138
  : {
133
- credentials: aws_rds_1.SnapshotCredentials.fromSecret(this.databaseCredentials.secret)
139
+ credentials: SnapshotCredentials.fromSecret(this.databaseCredentials.secret)
134
140
  };
135
- this.databaseCluster = new aws_rds_1.DatabaseClusterFromSnapshot(this, `${id}Database`,
141
+ this.databaseCluster = new DatabaseClusterFromSnapshot(this, `${id}Database`,
136
142
  // Type assertion: CDK's SnapshotCredentials.username is string | undefined
137
143
  // but DatabaseClusterFromSnapshotProps expects string. Works at runtime.
138
144
  {
@@ -143,7 +149,7 @@ class RdsAurora extends constructs_1.Construct {
143
149
  }
144
150
  else {
145
151
  // Create new cluster
146
- this.databaseCluster = new aws_rds_1.DatabaseCluster(this, `${id}Database`,
152
+ this.databaseCluster = new DatabaseCluster(this, `${id}Database`,
147
153
  // Type assertion: spread types don't preserve required property narrowing
148
154
  { ...baseClusterProps, ...primaryClusterProps });
149
155
  }
@@ -165,6 +171,17 @@ class RdsAurora extends constructs_1.Construct {
165
171
  this.addSecretRotation(props);
166
172
  }
167
173
  }
174
+ if (props.alertsTopic && props.alarms !== false) {
175
+ createRdsAlarms({
176
+ scope: this,
177
+ databaseName: this.constructId,
178
+ database: this.databaseCluster,
179
+ config: typeof props.alarms === "object" ? props.alarms : {},
180
+ alarmTopic: props.alertsTopic,
181
+ applicationId: props.applicationId,
182
+ freeStorageMetricName: "FreeLocalStorage"
183
+ });
184
+ }
168
185
  }
169
186
  buildReaders(props, defaultPIEnabled, piKey, piRetention) {
170
187
  if (props.readers === false) {
@@ -185,13 +202,13 @@ class RdsAurora extends constructs_1.Construct {
185
202
  : defaultPIEnabled;
186
203
  return readerConfigs.map((config, index) => {
187
204
  const enablePI = config.enableDatabaseInsights ?? defaultPI;
188
- return aws_rds_1.ClusterInstance.serverlessV2(`${props.databaseName}Reader${index + 1}`, {
205
+ return ClusterInstance.serverlessV2(`${props.databaseName}Reader${index + 1}`, {
189
206
  scaleWithWriter: config.scaleWithWriter ?? index === 0,
190
207
  enablePerformanceInsights: enablePI,
191
208
  performanceInsightEncryptionKey: enablePI ? piKey : undefined,
192
209
  performanceInsightRetention: enablePI ? piRetention : undefined,
193
- instanceIdentifier: resourceNaming_1.ResourceNaming.readerInstanceId(this.constructId, index + 1, config.identifierSuffix),
194
- caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1,
210
+ instanceIdentifier: ResourceNaming.readerInstanceId(this.constructId, index + 1, config.identifierSuffix),
211
+ caCertificate: CaCertificate.RDS_CA_RSA4096_G1,
195
212
  publiclyAccessible: props.publiclyAccessible,
196
213
  ...(config.availabilityZone && {
197
214
  availabilityZone: config.availabilityZone
@@ -204,26 +221,26 @@ class RdsAurora extends constructs_1.Construct {
204
221
  return;
205
222
  const proxyConfig = props.proxy;
206
223
  const vpcSubnets = proxyConfig.vpcSubnets ?? {
207
- subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS
224
+ subnetType: SubnetType.PRIVATE_WITH_EGRESS
208
225
  };
209
- this.databaseProxy = new aws_rds_1.DatabaseProxy(this, `${props.databaseName}DatabaseProxy`, {
210
- dbProxyName: resourceNaming_1.ResourceNaming.proxyName(this.constructId),
211
- proxyTarget: aws_rds_1.ProxyTarget.fromCluster(this.databaseCluster),
226
+ this.databaseProxy = new DatabaseProxy(this, `${props.databaseName}DatabaseProxy`, {
227
+ dbProxyName: ResourceNaming.proxyName(this.constructId),
228
+ proxyTarget: ProxyTarget.fromCluster(this.databaseCluster),
212
229
  secrets: [this.databaseCredentials.secret],
213
230
  securityGroups: [securityGroup],
214
231
  vpc: props.vpc,
215
232
  vpcSubnets,
216
233
  requireTLS: proxyConfig.requireTLS ?? true,
217
234
  borrowTimeout: proxyConfig.connectionBorrowTimeout
218
- ? aws_cdk_lib_1.Duration.seconds(proxyConfig.connectionBorrowTimeout)
219
- : aws_cdk_lib_1.Duration.seconds(120),
235
+ ? Duration.seconds(proxyConfig.connectionBorrowTimeout)
236
+ : Duration.seconds(120),
220
237
  maxConnectionsPercent: proxyConfig.maxConnections,
221
238
  maxIdleConnectionsPercent: proxyConfig.maxIdleConnections
222
239
  });
223
- (0, rdsProxyOutput_1.addProxyCfnOutput)(this, this.constructId, props.databaseName, this.databaseProxy);
240
+ addProxyCfnOutput(this, this.constructId, props.databaseName, this.databaseProxy);
224
241
  }
225
242
  addSecretRotation(props) {
226
- (0, rdsHelpers_1.addMultiUserSecretRotation)({
243
+ addMultiUserSecretRotation({
227
244
  scope: this,
228
245
  databaseName: props.databaseName,
229
246
  constructId: this.constructId,
@@ -254,5 +271,3 @@ class RdsAurora extends constructs_1.Construct {
254
271
  return this.databaseCluster;
255
272
  }
256
273
  }
257
- exports.RdsAurora = RdsAurora;
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzQXVyb3JhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzQXVyb3JhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFzRDtBQUV0RCxpREFRNkI7QUFDN0IsaURBa0I2QjtBQUM3QiwyQ0FBdUM7QUFDdkMscUVBQStEO0FBQy9ELHdDQUFvQztBQUNwQyxrRUFBK0Q7QUFDL0QscURBQXFEO0FBQ3JELHlCQUFrRDtBQUNsRCwrQ0FBNkM7QUFDN0MsNkNBTXNCO0FBcUR0QixNQUFhLFNBQVUsU0FBUSxzQkFBUztJQVd0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWU7UUFDdkQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksMEJBQVksQ0FBQyxZQUFZLENBQUM7UUFFcEQsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSwyQ0FBOEIsQ0FBQztRQUV6RSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUEsb0NBQXVCLEVBQ3JELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDdkIsQ0FBQztRQUVGLDhFQUE4RTtRQUM5RSxNQUFNLFFBQVEsR0FDWixLQUFLLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDLGdCQUFnQjtZQUNoRCxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtZQUN4QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXpFLDZFQUE2RTtRQUM3RSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lB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SUFDOUIsQ0FBQztDQUNGO0FBOVdELDhCQThXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0eXBlIElLZXkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWttc1wiO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSUNvbm5lY3RhYmxlLFxuICB0eXBlIElTZWN1cml0eUdyb3VwLFxuICB0eXBlIElWcGMsXG4gIFBlZXIsXG4gIFBvcnQsXG4gIFN1Ym5ldFR5cGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7XG4gIEF1cm9yYVBvc3RncmVzRW5naW5lVmVyc2lvbixcbiAgQ2FDZXJ0aWZpY2F0ZSxcbiAgQ2x1c3Rlckluc3RhbmNlLFxuICBDcmVkZW50aWFscyxcbiAgRGF0YWJhc2VDbHVzdGVyLFxuICB0eXBlIERhdGFiYXNlQ2x1c3RlclByb3BzLFxuICBEYXRhYmFzZUNsdXN0ZXJGcm9tU25hcHNob3QsXG4gIHR5cGUgRGF0YWJhc2VDbHVzdGVyRnJvbVNuYXBzaG90UHJvcHMsXG4gIERhdGFiYXNlQ2x1c3RlckVuZ2luZSxcbiAgdHlwZSBDZm5EQkNsdXN0ZXIsXG4gIERhdGFiYXNlUHJveHksXG4gIHR5cGUgSUNsdXN0ZXJFbmdpbmUsXG4gIHR5cGUgSUNsdXN0ZXJJbnN0YW5jZSxcbiAgUGFyYW1ldGVyR3JvdXAsXG4gIHR5cGUgUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uLFxuICBQcm94eVRhcmdldCxcbiAgU25hcHNob3RDcmVkZW50aWFsc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi4vbmV0d29ya2luZy9zZWN1cml0eUdyb3VwLmpzXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiLi4vc2VjcmV0c1wiO1xuaW1wb3J0IHsgUmVzb3VyY2VOYW1pbmcgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVzb3VyY2VOYW1pbmdcIjtcbmltcG9ydCB7IGFkZFByb3h5Q2ZuT3V0cHV0IH0gZnJvbSBcIi4vcmRzUHJveHlPdXRwdXRcIjtcbmltcG9ydCB7IGdldERhdGFiYXNlSW5zaWdodHNSZXRlbnRpb24gfSBmcm9tIFwiLi9cIjtcbmltcG9ydCB7IFJEU19ERUZBVUxUUyB9IGZyb20gXCIuL3Jkc0RlZmF1bHRzXCI7XG5pbXBvcnQge1xuICBERUZBVUxUX1BPU1RHUkVTX0VOR0lORV9DT05GSUcsXG4gIHJlc29sdmVEYXRhYmFzZUluc2lnaHRzLFxuICByZXNvbHZlU3RvcmFnZUVuY3J5cHRpb25LZXksXG4gIHJlc29sdmVQZXJmb3JtYW5jZUluc2lnaHRzS2V5LFxuICBhZGRNdWx0aVVzZXJTZWNyZXRSb3RhdGlvblxufSBmcm9tIFwiLi9yZHNIZWxwZXJzXCI7XG5pbXBvcnQge1xuICB0eXBlIEVuZ2luZUNvbmZpZyxcbiAgdHlwZSBQcm94eUNvbmZpZyxcbiAgdHlwZSBDcmVkZW50aWFsc0NvbmZpZyxcbiAgdHlwZSBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnLFxuICB0eXBlIEF1cm9yYVdyaXRlckNvbmZpZyxcbiAgdHlwZSBBdXJvcmFSZWFkZXJzQ29uZmlnLFxuICB0eXBlIEF1cm9yYVJlYWRlckNvbmZpZyxcbiAgdHlwZSBEYXRhYmFzZUluc2lnaHRzQ29uZmlnXG59IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRhYmFzZVR5cGVzXCI7XG5cbmludGVyZmFjZSBSZHNQcm9wcyB7XG4gIHZwYzogSVZwYztcbiAgZGF0YWJhc2VOYW1lPzogc3RyaW5nO1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbiAgZW5naW5lQ29uZmlnPzogRW5naW5lQ29uZmlnO1xuICBjbHVzdGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgd3JpdGVyPzogQXVyb3JhV3JpdGVyQ29uZmlnO1xuICByZWFkZXJzPzogQXVyb3JhUmVhZGVyc0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNDb25maWc7XG4gIGVuY3J5cHRpb24/OiBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnO1xuICBiYWNrdXBSZXRlbnRpb24/OiBudW1iZXI7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgZGF0YWJhc2VJbnNpZ2h0cz86IERhdGFiYXNlSW5zaWdodHNDb25maWcgfCBmYWxzZTtcbiAgLyoqIFNraXBzIHNlY3JldCByb3RhdGlvbiBmb3Igc2Vjb25kYXJ5IGNsdXN0ZXJzIGluIGdsb2JhbCBkYXRhYmFzZSAqL1xuICBpc0dsb2JhbFNlY29uZGFyeT86IGJvb2xlYW47XG4gIHNlY3JldFJlcGxpY2FSZWdpb25zPzogc3RyaW5nW107XG4gIGRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBjbHVzdGVyIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbSAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSBmcm9tIHRoZSBzbmFwc2hvdCAocmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBzbmFwc2hvdCB0byByZXNldCBwYXNzd29yZCkgKi9cbiAgc25hcHNob3RVc2VybmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93IGFjY2VzcyBmcm9tIFZQQyBDSURSIChhdm9pZHMgY3Jvc3Mtc3RhY2sgY3ljbGljIGRlcGVuZGVuY2llcyB3aXRoIExhbWJkYSkgKi9cbiAgYWxsb3dWcGNBY2Nlc3M/OiBib29sZWFuO1xuICAvKipcbiAgICogTWFrZSBkYXRhYmFzZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZyb20gdGhlIGludGVybmV0LlxuICAgKiBXQVJOSU5HOiBUaGlzIGlzIGEgc2VjdXJpdHkgcmlzayBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnRcbiAgICogb3Igd2hlbiBidWlsZGluZyBQYXlsb2FkIGFwcHMgbG9jYWxseSB0aGF0IG5lZWQgZGF0YWJhc2UgYWNjZXNzLlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBkYXRhYmFzZSBpcyBwbGFjZWQgaW4gcHVibGljIHN1Ym5ldHMuXG4gICAqL1xuICBwdWJsaWNseUFjY2Vzc2libGU/OiBib29sZWFuO1xuICAvKipcbiAgICogSVAgYWRkcmVzcyB0byBhbGxvdyBhY2Nlc3MgZnJvbSB3aGVuIHB1YmxpY2x5QWNjZXNzaWJsZSBpcyB0cnVlLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhY2Nlc3MgaXMgcmVzdHJpY3RlZCB0byBWUEMgb25seSBldmVuIHdoZW4gcHVibGljLlxuICAgKiBGb3JtYXQ6IENJRFIgbm90YXRpb24gKGUuZy4sIFwiMjAzLjAuMTEzLjAvMzJcIiBmb3Igc2luZ2xlIElQKVxuICAgKi9cbiAgYWxsb3dlZElwQ2lkcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFJkc0F1cm9yYSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25zdHJ1Y3RJZDogc3RyaW5nO1xuICBwcml2YXRlIHBvcnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBlbmdpbmVDb25maWc6IEVuZ2luZUNvbmZpZztcbiAgcHJpdmF0ZSBkYXRhYmFzZUNsdXN0ZXI6IERhdGFiYXNlQ2x1c3RlcjtcbiAgcHJpdmF0ZSBkYXRhYmFzZVByb3h5PzogRGF0YWJhc2VQcm94eTtcbiAgcHJpdmF0ZSBkYXRhYmFzZUNyZWRlbnRpYWxzOiBTZWNyZXQ7XG4gIHByaXZhdGUgY2ZuQ2x1c3Rlcj86IENmbkRCQ2x1c3RlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3RJZCA9IGlkO1xuICAgIHRoaXMucG9ydCA9IHByb3BzLnBvcnQgPz8gUkRTX0RFRkFVTFRTLkRFRkFVTFRfUE9SVDtcblxuICAgIC8vIFBvc3RncmVTUUwgZmFsbGJhY2sgZm9yIGRpcmVjdCB1c2FnZSAtIGVuc3VyZSBlbmdpbmUgYW5kIGVuZ2luZUNvbmZpZyBtYXRjaFxuICAgIHRoaXMuZW5naW5lQ29uZmlnID0gcHJvcHMuZW5naW5lQ29uZmlnID8/IERFRkFVTFRfUE9TVEdSRVNfRU5HSU5FX0NPTkZJRztcblxuICAgIGNvbnN0IHsgcGlFbmFibGVkLCBwaUNvbmZpZyB9ID0gcmVzb2x2ZURhdGFiYXNlSW5zaWdodHMoXG4gICAgICBwcm9wcy5kYXRhYmFzZUluc2lnaHRzXG4gICAgKTtcblxuICAgIC8vIFVzZXJuYW1lIHByaW9yaXR5OiBzbmFwc2hvdFVzZXJuYW1lID4gY3JlZGVudGlhbHMudXNlcm5hbWUgPiBlbmdpbmUgZGVmYXVsdFxuICAgIGNvbnN0IHVzZXJuYW1lID1cbiAgICAgIHByb3BzLnNuYXBzaG90SWRlbnRpZmllciAmJiBwcm9wcy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgICAgID8gcHJvcHMuc25hcHNob3RVc2VybmFtZVxuICAgICAgICA6IChwcm9wcy5jcmVkZW50aWFscz8udXNlcm5hbWUgPz8gdGhpcy5lbmdpbmVDb25maWcuZGVmYXVsdFVzZXJuYW1lKTtcblxuICAgIC8vIEdsb2JhbCBzZWNvbmRhcnkgY2x1c3RlcnMgaW1wb3J0IHJlcGxpY2F0ZWQgc2VjcmV0IGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3XG4gICAgaWYgKHByb3BzLmlzR2xvYmFsU2Vjb25kYXJ5KSB7XG4gICAgICB0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHMgPSBuZXcgU2VjcmV0KFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9Q3JlZGVudGlhbHNgLFxuICAgICAgICB7XG4gICAgICAgICAgc2VjcmV0TmFtZTogUmVzb3VyY2VOYW1pbmcuY3JlZGVudGlhbHNTZWNyZXROYW1lKGlkKSxcbiAgICAgICAgICBpbXBvcnRFeGlzdGluZzogdHJ1ZVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHMgPSBuZXcgU2VjcmV0KFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9Q3JlZGVudGlhbHNgLFxuICAgICAgICB7XG4gICAgICAgICAgc2VjcmV0TmFtZTogUmVzb3VyY2VOYW1pbmcuY3JlZGVudGlhbHNTZWNyZXROYW1lKGlkKSxcbiAgICAgICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHsgdXNlcm5hbWUgfSksXG4gICAgICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgICAgICBpbmNsdWRlU3BhY2U6IGZhbHNlLFxuICAgICAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwicGFzc3dvcmRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVwbGljYVJlZ2lvbnM6IHByb3BzLnNlY3JldFJlcGxpY2FSZWdpb25zXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmFnZUVuY3J5cHRpb25LZXkgPSByZXNvbHZlU3RvcmFnZUVuY3J5cHRpb25LZXkoXG4gICAgICB0aGlzLFxuICAgICAgcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgcHJvcHMuZW5jcnlwdGlvbj8uc3RvcmFnZUtleVxuICAgICk7XG5cbiAgICBjb25zdCBwZXJmb3JtYW5jZUluc2lnaHRzS2V5ID0gcmVzb2x2ZVBlcmZvcm1hbmNlSW5zaWdodHNLZXkoXG4gICAgICB0aGlzLFxuICAgICAgcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgcGlFbmFibGVkLFxuICAgICAgcGlDb25maWc/LmVuY3J5cHRpb25LZXlcbiAgICApO1xuXG4gICAgY29uc3QgY2x1c3RlclNlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCBgJHtpZH1TZWN1cml0eUdyb3VwYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciBBdXJvcmEgY2x1c3RlciAke3Byb3BzLmRhdGFiYXNlTmFtZX1gXG4gICAgfSk7XG5cbiAgICBjbHVzdGVyU2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgIGNsdXN0ZXJTZWN1cml0eUdyb3VwLFxuICAgICAgUG9ydC50Y3AodGhpcy5wb3J0KVxuICAgICk7XG5cbiAgICAvLyBBbGxvdyBWUEMtd2lkZSBhY2Nlc3Mgd2hlbiBlbmFibGVkIChhdm9pZHMgY3Jvc3Mtc3RhY2sgY3ljbGljIGRlcGVuZGVuY2llcylcbiAgICBpZiAocHJvcHMuYWxsb3dWcGNBY2Nlc3MpIHtcbiAgICAgIGNsdXN0ZXJTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICBQZWVyLmlwdjQocHJvcHMudnBjLnZwY0NpZHJCbG9jayksXG4gICAgICAgIFBvcnQudGNwKHRoaXMucG9ydCksXG4gICAgICAgIFwiQWxsb3cgYWNjZXNzIGZyb20gVlBDIENJRFJcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBleHRlcm5hbCBhY2Nlc3Mgd2hlbiBwdWJsaWNseSBhY2Nlc3NpYmxlIHdpdGggYWxsb3dlZCBJUFxuICAgIGlmIChwcm9wcy5wdWJsaWNseUFjY2Vzc2libGUgJiYgcHJvcHMuYWxsb3dlZElwQ2lkcikge1xuICAgICAgY2x1c3RlclNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICAgIFBlZXIuaXB2NChwcm9wcy5hbGxvd2VkSXBDaWRyKSxcbiAgICAgICAgUG9ydC50Y3AodGhpcy5wb3J0KSxcbiAgICAgICAgXCJBbGxvdyBleHRlcm5hbCBhY2Nlc3MgZnJvbSBhbGxvd2VkIElQXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucyh7XG4gICAgICBzZWN1cml0eUdyb3VwczogW2NsdXN0ZXJTZWN1cml0eUdyb3VwXSxcbiAgICAgIGRlZmF1bHRQb3J0OiBQb3J0LnRjcCh0aGlzLnBvcnQpXG4gICAgfSk7XG5cbiAgICBjb25zdCB3cml0ZXJDb25maWcgPSBwcm9wcy53cml0ZXIgPz8ge307XG4gICAgY29uc3Qgd3JpdGVyUEkgPSB3cml0ZXJDb25maWcuZW5hYmxlRGF0YWJhc2VJbnNpZ2h0cyA/PyBwaUVuYWJsZWQ7XG4gICAgY29uc3Qgd3JpdGVyU3VmZml4ID0gd3JpdGVyQ29uZmlnLmlkZW50aWZpZXJTdWZmaXg7XG4gICAgY29uc3QgZGlNb2RlID0gcGlDb25maWc/Lm1vZGUgPz8gXCJzdGFuZGFyZFwiO1xuICAgIGNvbnN0IHBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb24gPSBnZXREYXRhYmFzZUluc2lnaHRzUmV0ZW50aW9uKGRpTW9kZSk7XG4gICAgY29uc3QgZGF0YWJhc2VOYW1lID0gcHJvcHMuZGF0YWJhc2VOYW1lIHx8IGlkO1xuXG4gICAgY29uc3Qgd3JpdGVyID0gQ2x1c3Rlckluc3RhbmNlLnNlcnZlcmxlc3NWMihgJHtkYXRhYmFzZU5hbWV9V3JpdGVyYCwge1xuICAgICAgZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0czogd3JpdGVyUEksXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRFbmNyeXB0aW9uS2V5OiB3cml0ZXJQSVxuICAgICAgICA/IHBlcmZvcm1hbmNlSW5zaWdodHNLZXlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb246IHdyaXRlclBJXG4gICAgICAgID8gcGVyZm9ybWFuY2VJbnNpZ2h0c1JldGVudGlvblxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogUmVzb3VyY2VOYW1pbmcud3JpdGVySW5zdGFuY2VJZChpZCwgd3JpdGVyU3VmZml4KSxcbiAgICAgIGNhQ2VydGlmaWNhdGU6IENhQ2VydGlmaWNhdGUuUkRTX0NBX1JTQTQwOTZfRzEsXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZSxcbiAgICAgIC4uLih3cml0ZXJDb25maWcuYXZhaWxhYmlsaXR5Wm9uZSAmJiB7XG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHdyaXRlckNvbmZpZy5hdmFpbGFiaWxpdHlab25lXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVhZGVycyA9IHRoaXMuYnVpbGRSZWFkZXJzKFxuICAgICAgcHJvcHMsXG4gICAgICBwaUVuYWJsZWQsXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRzS2V5LFxuICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0c1JldGVudGlvblxuICAgICk7XG5cbiAgICBjb25zdCBlbmdpbmUgPVxuICAgICAgcHJvcHMuZW5naW5lIHx8XG4gICAgICBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUuYXVyb3JhUG9zdGdyZXMoe1xuICAgICAgICB2ZXJzaW9uOiBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24ub2YoXCIxNi42XCIsIFwiMTZcIilcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyR3JvdXAgPSBuZXcgUGFyYW1ldGVyR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVBhcmFtZXRlckdyb3VwYCxcbiAgICAgIHtcbiAgICAgICAgZW5naW5lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFBhcmFtZXRlciBncm91cCBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9IHdpdGggc2VjdXJpdHkgZGVmYXVsdHNgLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0aGlzLmVuZ2luZUNvbmZpZy5zc2xQYXJhbWV0ZXJzXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIFVzZSBwdWJsaWMgc3VibmV0cyB3aGVuIHB1YmxpY2x5IGFjY2Vzc2libGUsIG90aGVyd2lzZSBwcml2YXRlXG4gICAgY29uc3QgdnBjU3VibmV0cyA9IHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZVxuICAgICAgPyB7IHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFVCTElDIH1cbiAgICAgIDogeyBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfTtcblxuICAgIC8vIENvbW1vbiBwcm9wcyBzaGFyZWQgYWNyb3NzIGFsbCBjbHVzdGVyIGNyZWF0aW9uIHBhdGhzXG4gICAgY29uc3QgYmFzZUNsdXN0ZXJQcm9wcyA9IHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgdnBjU3VibmV0cyxcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBbY2x1c3RlclNlY3VyaXR5R3JvdXBdIGFzIElTZWN1cml0eUdyb3VwW10sXG4gICAgICBlbmdpbmUsXG4gICAgICBwYXJhbWV0ZXJHcm91cCxcbiAgICAgIGJhY2t1cDogeyByZXRlbnRpb246IER1cmF0aW9uLmRheXMocHJvcHMuYmFja3VwUmV0ZW50aW9uID8/IDE0KSB9LFxuICAgICAgc3RvcmFnZUVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgIC4uLihzdG9yYWdlRW5jcnlwdGlvbktleSAmJiB7IHN0b3JhZ2VFbmNyeXB0aW9uS2V5IH0pLFxuICAgICAgY2x1c3RlcklkZW50aWZpZXI6XG4gICAgICAgIHByb3BzLmNsdXN0ZXJJZGVudGlmaWVyPy50b0xvd2VyQ2FzZSgpIHx8IFJlc291cmNlTmFtaW5nLmNsdXN0ZXJJZChpZCksXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6XG4gICAgICAgIHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCB8fCBSRFNfREVGQVVMVFMuTU9OSVRPUklOR19JTlRFUlZBTCxcbiAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OlxuICAgICAgICBwcm9wcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyB8fFxuICAgICAgICBSRFNfREVGQVVMVFMuUFJFRkVSUkVEX01BSU5URU5BTkNFX1dJTkRPVyxcbiAgICAgIHBvcnQ6IHRoaXMucG9ydCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuU05BUFNIT1QsXG4gICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbiA/PyB0cnVlLFxuICAgICAgaWFtQXV0aGVudGljYXRpb246IHRydWUsXG4gICAgICB3cml0ZXIsXG4gICAgICByZWFkZXJzXG4gICAgfTtcblxuICAgIC8vIENyZWRlbnRpYWxzIGFuZCBkYXRhYmFzZSBuYW1lIGZvciBub24tZ2xvYmFsLXNlY29uZGFyeSBjbHVzdGVyc1xuICAgIGNvbnN0IHByaW1hcnlDbHVzdGVyUHJvcHMgPSBwcm9wcy5pc0dsb2JhbFNlY29uZGFyeVxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgICAgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzLmZyb21TZWNyZXQodGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldCksXG4gICAgICAgICAgZGVmYXVsdERhdGFiYXNlTmFtZTogKFxuICAgICAgICAgICAgcHJvcHMuZGF0YWJhc2VOYW1lIHx8IGlkLnJlcGxhY2UoXCJSZHNcIiwgXCJcIilcbiAgICAgICAgICApLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywgXCJcIilcbiAgICAgICAgfTtcblxuICAgIGlmIChwcm9wcy5zbmFwc2hvdElkZW50aWZpZXIpIHtcbiAgICAgIC8vIENyZWF0ZSBmcm9tIHNuYXBzaG90IC0gY3JlZGVudGlhbHMgbmVlZCBTbmFwc2hvdENyZWRlbnRpYWxzIHR5cGVcbiAgICAgIGNvbnN0IHNuYXBzaG90Q3JlZGVudGlhbHMgPSBwcm9wcy5pc0dsb2JhbFNlY29uZGFyeVxuICAgICAgICA/IHt9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgY3JlZGVudGlhbHM6IFNuYXBzaG90Q3JlZGVudGlhbHMuZnJvbVNlY3JldChcbiAgICAgICAgICAgICAgdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH07XG5cbiAgICAgIHRoaXMuZGF0YWJhc2VDbHVzdGVyID0gbmV3IERhdGFiYXNlQ2x1c3RlckZyb21TbmFwc2hvdChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7aWR9RGF0YWJhc2VgLFxuICAgICAgICAvLyBUeXBlIGFzc2VydGlvbjogQ0RLJ3MgU25hcHNob3RDcmVkZW50aWFscy51c2VybmFtZSBpcyBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgICAgLy8gYnV0IERhdGFiYXNlQ2x1c3RlckZyb21TbmFwc2hvdFByb3BzIGV4cGVjdHMgc3RyaW5nLiBXb3JrcyBhdCBydW50aW1lLlxuICAgICAgICB7XG4gICAgICAgICAgLi4uYmFzZUNsdXN0ZXJQcm9wcyxcbiAgICAgICAgICAuLi5zbmFwc2hvdENyZWRlbnRpYWxzLFxuICAgICAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogcHJvcHMuc25hcHNob3RJZGVudGlmaWVyXG4gICAgICAgIH0gYXMgRGF0YWJhc2VDbHVzdGVyRnJvbVNuYXBzaG90UHJvcHNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBuZXcgY2x1c3RlclxuICAgICAgdGhpcy5kYXRhYmFzZUNsdXN0ZXIgPSBuZXcgRGF0YWJhc2VDbHVzdGVyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtpZH1EYXRhYmFzZWAsXG4gICAgICAgIC8vIFR5cGUgYXNzZXJ0aW9uOiBzcHJlYWQgdHlwZXMgZG9uJ3QgcHJlc2VydmUgcmVxdWlyZWQgcHJvcGVydHkgbmFycm93aW5nXG4gICAgICAgIHsgLi4uYmFzZUNsdXN0ZXJQcm9wcywgLi4ucHJpbWFyeUNsdXN0ZXJQcm9wcyB9IGFzIERhdGFiYXNlQ2x1c3RlclByb3BzXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY2ZuQ2x1c3RlciA9IHRoaXMuZGF0YWJhc2VDbHVzdGVyLm5vZGUuZGVmYXVsdENoaWxkIGFzXG4gICAgICB8IENmbkRCQ2x1c3RlclxuICAgICAgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBHbG9iYWwgc2Vjb25kYXJ5IGNsdXN0ZXJzIGNhbid0IHNwZWNpZnkgdGhlc2UgcHJvcGVydGllc1xuICAgIGlmIChwcm9wcy5pc0dsb2JhbFNlY29uZGFyeSAmJiB0aGlzLmNmbkNsdXN0ZXIpIHtcbiAgICAgIHRoaXMuY2ZuQ2x1c3Rlci5tYXN0ZXJVc2VybmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2ZuQ2x1c3Rlci5tYXN0ZXJVc2VyUGFzc3dvcmQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmNmbkNsdXN0ZXIuZGF0YWJhc2VOYW1lID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3h5RW5hYmxlZCA9IHByb3BzLnByb3h5ICE9PSB1bmRlZmluZWQgJiYgcHJvcHMucHJveHkgIT09IGZhbHNlO1xuICAgIGlmIChwcm94eUVuYWJsZWQpIHtcbiAgICAgIHRoaXMuYWRkUHJveHkocHJvcHMsIGNsdXN0ZXJTZWN1cml0eUdyb3VwKTtcbiAgICB9XG5cbiAgICAvLyBTZWNyZXQgcm90YXRpb24gZW5hYmxlZCBieSBkZWZhdWx0IChvcHQtb3V0IHdpdGggc2VjcmV0Um90YXRpb246IGZhbHNlKVxuICAgIGlmICghcHJvcHMuaXNHbG9iYWxTZWNvbmRhcnkpIHtcbiAgICAgIGNvbnN0IHNlY3JldFJvdGF0aW9uRGlzYWJsZWQgPVxuICAgICAgICBwcm9wcy5jcmVkZW50aWFscz8uc2VjcmV0Um90YXRpb24gPT09IGZhbHNlO1xuICAgICAgaWYgKCFzZWNyZXRSb3RhdGlvbkRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuYWRkU2VjcmV0Um90YXRpb24ocHJvcHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSZWFkZXJzKFxuICAgIHByb3BzOiBSZHNQcm9wcyxcbiAgICBkZWZhdWx0UElFbmFibGVkOiBib29sZWFuLFxuICAgIHBpS2V5PzogSUtleSxcbiAgICBwaVJldGVudGlvbj86IFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvblxuICApOiBJQ2x1c3Rlckluc3RhbmNlW10ge1xuICAgIGlmIChwcm9wcy5yZWFkZXJzID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCByZWFkZXJDb25maWdzOiBBdXJvcmFSZWFkZXJDb25maWdbXTtcbiAgICBpZiAocHJvcHMucmVhZGVycz8uaW5zdGFuY2VzKSB7XG4gICAgICByZWFkZXJDb25maWdzID0gcHJvcHMucmVhZGVycy5pbnN0YW5jZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvdW50ID0gcHJvcHMucmVhZGVycz8uY291bnQgPz8gMTtcbiAgICAgIHJlYWRlckNvbmZpZ3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCB9LCAoXywgaSkgPT4gKHtcbiAgICAgICAgc2NhbGVXaXRoV3JpdGVyOiBpID09PSAwXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdFBJID1cbiAgICAgIHByb3BzLnJlYWRlcnMgJiYgXCJkZWZhdWx0RW5hYmxlRGF0YWJhc2VJbnNpZ2h0c1wiIGluIHByb3BzLnJlYWRlcnNcbiAgICAgICAgPyAocHJvcHMucmVhZGVycy5kZWZhdWx0RW5hYmxlRGF0YWJhc2VJbnNpZ2h0cyA/PyBkZWZhdWx0UElFbmFibGVkKVxuICAgICAgICA6IGRlZmF1bHRQSUVuYWJsZWQ7XG5cbiAgICByZXR1cm4gcmVhZGVyQ29uZmlncy5tYXAoKGNvbmZpZywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGVuYWJsZVBJID0gY29uZmlnLmVuYWJsZURhdGFiYXNlSW5zaWdodHMgPz8gZGVmYXVsdFBJO1xuXG4gICAgICByZXR1cm4gQ2x1c3Rlckluc3RhbmNlLnNlcnZlcmxlc3NWMihcbiAgICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJlYWRlciR7aW5kZXggKyAxfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBzY2FsZVdpdGhXcml0ZXI6IGNvbmZpZy5zY2FsZVdpdGhXcml0ZXIgPz8gaW5kZXggPT09IDAsXG4gICAgICAgICAgZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0czogZW5hYmxlUEksXG4gICAgICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0RW5jcnlwdGlvbktleTogZW5hYmxlUEkgPyBwaUtleSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb246IGVuYWJsZVBJID8gcGlSZXRlbnRpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgaW5zdGFuY2VJZGVudGlmaWVyOiBSZXNvdXJjZU5hbWluZy5yZWFkZXJJbnN0YW5jZUlkKFxuICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RJZCxcbiAgICAgICAgICAgIGluZGV4ICsgMSxcbiAgICAgICAgICAgIGNvbmZpZy5pZGVudGlmaWVyU3VmZml4XG4gICAgICAgICAgKSxcbiAgICAgICAgICBjYUNlcnRpZmljYXRlOiBDYUNlcnRpZmljYXRlLlJEU19DQV9SU0E0MDk2X0cxLFxuICAgICAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogcHJvcHMucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgICAgIC4uLihjb25maWcuYXZhaWxhYmlsaXR5Wm9uZSAmJiB7XG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlab25lOiBjb25maWcuYXZhaWxhYmlsaXR5Wm9uZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFByb3h5KHByb3BzOiBSZHNQcm9wcywgc2VjdXJpdHlHcm91cDogU2VjdXJpdHlHcm91cCk6IHZvaWQge1xuICAgIGlmICghcHJvcHMucHJveHkpIHJldHVybjtcbiAgICBjb25zdCBwcm94eUNvbmZpZyA9IHByb3BzLnByb3h5O1xuICAgIGNvbnN0IHZwY1N1Ym5ldHMgPSBwcm94eUNvbmZpZy52cGNTdWJuZXRzID8/IHtcbiAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU1xuICAgIH07XG5cbiAgICB0aGlzLmRhdGFiYXNlUHJveHkgPSBuZXcgRGF0YWJhc2VQcm94eShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9RGF0YWJhc2VQcm94eWAsXG4gICAgICB7XG4gICAgICAgIGRiUHJveHlOYW1lOiBSZXNvdXJjZU5hbWluZy5wcm94eU5hbWUodGhpcy5jb25zdHJ1Y3RJZCksXG4gICAgICAgIHByb3h5VGFyZ2V0OiBQcm94eVRhcmdldC5mcm9tQ2x1c3Rlcih0aGlzLmRhdGFiYXNlQ2x1c3RlciksXG4gICAgICAgIHNlY3JldHM6IFt0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHMuc2VjcmV0XSxcbiAgICAgICAgc2VjdXJpdHlHcm91cHM6IFtzZWN1cml0eUdyb3VwXSxcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHZwY1N1Ym5ldHMsXG4gICAgICAgIHJlcXVpcmVUTFM6IHByb3h5Q29uZmlnLnJlcXVpcmVUTFMgPz8gdHJ1ZSxcbiAgICAgICAgYm9ycm93VGltZW91dDogcHJveHlDb25maWcuY29ubmVjdGlvbkJvcnJvd1RpbWVvdXRcbiAgICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMocHJveHlDb25maWcuY29ubmVjdGlvbkJvcnJvd1RpbWVvdXQpXG4gICAgICAgICAgOiBEdXJhdGlvbi5zZWNvbmRzKDEyMCksXG4gICAgICAgIG1heENvbm5lY3Rpb25zUGVyY2VudDogcHJveHlDb25maWcubWF4Q29ubmVjdGlvbnMsXG4gICAgICAgIG1heElkbGVDb25uZWN0aW9uc1BlcmNlbnQ6IHByb3h5Q29uZmlnLm1heElkbGVDb25uZWN0aW9uc1xuICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRQcm94eUNmbk91dHB1dChcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLmNvbnN0cnVjdElkLFxuICAgICAgcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgdGhpcy5kYXRhYmFzZVByb3h5XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU2VjcmV0Um90YXRpb24ocHJvcHM6IFJkc1Byb3BzKTogdm9pZCB7XG4gICAgYWRkTXVsdGlVc2VyU2VjcmV0Um90YXRpb24oe1xuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIGNvbnN0cnVjdElkOiB0aGlzLmNvbnN0cnVjdElkLFxuICAgICAgZW5naW5lQ29uZmlnOiB0aGlzLmVuZ2luZUNvbmZpZyxcbiAgICAgIGNyZWRlbnRpYWxzQ29uZmlnOiBwcm9wcy5jcmVkZW50aWFscyxcbiAgICAgIGRhdGFiYXNlU2VjcmV0OiB0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHMuc2VjcmV0LFxuICAgICAgdGFyZ2V0OiB0aGlzLmRhdGFiYXNlQ2x1c3RlcixcbiAgICAgIHZwYzogdGhpcy5kYXRhYmFzZUNsdXN0ZXIudnBjXG4gICAgfSk7XG4gIH1cblxuICBnZXRIb3N0RW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICAvLyBSZXR1cm4gcHJveHkgZW5kcG9pbnQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgY2x1c3RlciBlbmRwb2ludFxuICAgIGlmICh0aGlzLmRhdGFiYXNlUHJveHkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFiYXNlUHJveHkuZW5kcG9pbnQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlQ2x1c3Rlci5jbHVzdGVyRW5kcG9pbnQuaG9zdG5hbWU7XG4gIH1cblxuICBnZXRIb3N0UG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdHJpbmcodGhpcy5wb3J0KTtcbiAgfVxuXG4gIGdldENyZWRlbnRpYWxzKCk6IFNlY3JldCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VDcmVkZW50aWFscztcbiAgfVxuXG4gIGdldENmbkNsdXN0ZXIoKTogQ2ZuREJDbHVzdGVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jZm5DbHVzdGVyO1xuICB9XG5cbiAgZ2V0RGF0YWJhc2VDbHVzdGVyKCk6IERhdGFiYXNlQ2x1c3RlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VDbHVzdGVyO1xuICB9XG59XG4iXX0=
@@ -2,8 +2,8 @@ import { type Duration } from "aws-cdk-lib";
2
2
  import { Construct } from "constructs";
3
3
  import { type IVpc, type Connections, type IConnectable } from "aws-cdk-lib/aws-ec2";
4
4
  import { type IClusterEngine } from "aws-cdk-lib/aws-rds";
5
- import { type Secret } from "../secrets";
6
- import { type EngineConfig, type ProxyConfig, type CredentialsConfig, type AuroraEncryptionConfig, type AuroraWriterConfig, type AuroraReadersConfig, type DatabaseInsightsConfig } from "../../../utils/databaseTypes";
5
+ import { type Secret } from "../secrets/index.js";
6
+ import { type EngineConfig, type ProxyConfig, type CredentialsConfig, type AuroraEncryptionConfig, type AuroraWriterConfig, type AuroraReadersConfig, type DatabaseInsightsConfig } from "../../../utils/databaseTypes.js";
7
7
  interface RdsAuroraGlobalProps {
8
8
  vpc: IVpc;
9
9
  databaseName: string;
@@ -1,21 +1,26 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RdsAuroraGlobal = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const aws_rds_1 = require("aws-cdk-lib/aws-rds");
6
- const constructs_1 = require("constructs");
7
- const rdsAurora_1 = require("./rdsAurora");
8
- const resourceNaming_1 = require("../../../utils/resourceNaming");
9
- const capitaliseString_1 = require("../../../utils/capitaliseString");
10
- class RdsAuroraGlobal extends constructs_1.Construct {
1
+ import { CfnOutput, Stack } from "aws-cdk-lib";
2
+ import { CfnGlobalCluster } from "aws-cdk-lib/aws-rds";
3
+ import { Construct } from "constructs";
4
+ import { RdsAurora } from "./rdsAurora.js";
5
+ import { ResourceNaming } from "../../../utils/resourceNaming.js";
6
+ import { toPascalCase } from "../../../utils/capitaliseString.js";
7
+ export class RdsAuroraGlobal extends Construct {
8
+ connections;
9
+ constructId;
10
+ globalCluster;
11
+ primaryCluster;
12
+ regionalCluster;
13
+ props;
14
+ currentRegion;
15
+ globalId;
11
16
  constructor(scope, id, props) {
12
17
  super(scope, id);
13
18
  this.constructId = id;
14
19
  this.props = props;
15
- this.currentRegion = aws_cdk_lib_1.Stack.of(this).region;
20
+ this.currentRegion = Stack.of(this).region;
16
21
  this.globalId =
17
22
  props.globalClusterIdentifier?.toLowerCase() ||
18
- resourceNaming_1.ResourceNaming.globalClusterId(id);
23
+ ResourceNaming.globalClusterId(id);
19
24
  // create clusters / global cluster depending on region
20
25
  this.connections = this.addAuroraCluster();
21
26
  this.addGlobalCluster();
@@ -25,7 +30,7 @@ class RdsAuroraGlobal extends constructs_1.Construct {
25
30
  return this.globalId;
26
31
  }
27
32
  getPrimaryClusterIdentifier() {
28
- return resourceNaming_1.ResourceNaming.primaryClusterId(this.constructId);
33
+ return ResourceNaming.primaryClusterId(this.constructId);
29
34
  }
30
35
  getGlobalClusterEngineString() {
31
36
  // Default to aurora-postgresql if no engine specified (matches existing behaviour)
@@ -81,7 +86,7 @@ class RdsAuroraGlobal extends constructs_1.Construct {
81
86
  sourceIdentifier = primaryL1.ref;
82
87
  }
83
88
  }
84
- this.globalCluster = new aws_rds_1.CfnGlobalCluster(this, `${this.props.databaseName}GlobalCluster`, {
89
+ this.globalCluster = new CfnGlobalCluster(this, `${this.props.databaseName}GlobalCluster`, {
85
90
  globalClusterIdentifier: this.globalId,
86
91
  sourceDbClusterIdentifier: sourceIdentifier
87
92
  });
@@ -124,7 +129,7 @@ class RdsAuroraGlobal extends constructs_1.Construct {
124
129
  };
125
130
  if (this.props.primaryRegion === this.currentRegion) {
126
131
  // primary
127
- this.primaryCluster = new rdsAurora_1.RdsAurora(this, `${this.props.databaseName}Primary`, {
132
+ this.primaryCluster = new RdsAurora(this, `${this.props.databaseName}Primary`, {
128
133
  vpc: this.props.vpc,
129
134
  databaseName: this.props.databaseName,
130
135
  clusterIdentifier: this.getPrimaryClusterIdentifier(),
@@ -139,10 +144,10 @@ class RdsAuroraGlobal extends constructs_1.Construct {
139
144
  // secondary region
140
145
  // Pass databaseName for resource naming, but flag as global secondary
141
146
  // This prevents setting credentials and defaultDatabaseName which are inherited from primary
142
- this.regionalCluster = new rdsAurora_1.RdsAurora(this, `${this.props.databaseName}Regional`, {
147
+ this.regionalCluster = new RdsAurora(this, `${this.props.databaseName}Regional`, {
143
148
  vpc: this.props.vpc,
144
149
  databaseName: this.props.databaseName,
145
- clusterIdentifier: resourceNaming_1.ResourceNaming.secondaryClusterId(this.constructId, this.currentRegion),
150
+ clusterIdentifier: ResourceNaming.secondaryClusterId(this.constructId, this.currentRegion),
146
151
  isGlobalSecondary: true,
147
152
  // Secondary doesn't create credentials (uses replicated secret)
148
153
  ...commonConfig
@@ -160,8 +165,8 @@ class RdsAuroraGlobal extends constructs_1.Construct {
160
165
  return this.regionalCluster.connections;
161
166
  }
162
167
  addOutputs() {
163
- const outputName = (0, capitaliseString_1.toPascalCase)(this.props.databaseName);
164
- new aws_cdk_lib_1.CfnOutput(this, `${outputName}GlobalClusterIdentifierOutput`, {
168
+ const outputName = toPascalCase(this.props.databaseName);
169
+ new CfnOutput(this, `${outputName}GlobalClusterIdentifierOutput`, {
165
170
  value: this.globalId,
166
171
  exportName: `${outputName}GlobalClusterIdentifier`
167
172
  });
@@ -188,5 +193,3 @@ class RdsAuroraGlobal extends constructs_1.Construct {
188
193
  throw new Error("No Aurora cluster available to return port from");
189
194
  }
190
195
  }
191
- exports.RdsAuroraGlobal = RdsAuroraGlobal;
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzQXVyb3JhR2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzQXVyb3JhR2xvYmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFnRjtBQUNoRixpREFBMEU7QUFDMUUsMkNBQXVDO0FBT3ZDLDJDQUF3QztBQVd4QyxrRUFBK0Q7QUFDL0Qsc0VBQStEO0FBdUQvRCxNQUFhLGVBQWdCLFNBQVEsc0JBQVM7SUFXNUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRO1lBQ1gsS0FBSyxDQUFDLHVCQUF1QixFQUFFLFdBQVcsRUFBRTtnQkFDNUMsK0JBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFckMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsT0FBTywrQkFBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU8sNEJBQTRCO1FBQ2xDLG1GQUFtRjtRQUNuRixJQUFJ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dGlvbiwgdHlwZSBJUmVzb2x2YWJsZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENmbkdsb2JhbENsdXN0ZXIsIHR5cGUgQ2ZuREJDbHVzdGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICB0eXBlIElWcGMsXG4gIHR5cGUgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSUNvbm5lY3RhYmxlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyB0eXBlIElDbHVzdGVyRW5naW5lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7IFJkc0F1cm9yYSB9IGZyb20gXCIuL3Jkc0F1cm9yYVwiO1xuaW1wb3J0IHsgdHlwZSBTZWNyZXQgfSBmcm9tIFwiLi4vc2VjcmV0c1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbmdpbmVDb25maWcsXG4gIHR5cGUgUHJveHlDb25maWcsXG4gIHR5cGUgQ3JlZGVudGlhbHNDb25maWcsXG4gIHR5cGUgQXVyb3JhRW5jcnlwdGlvbkNvbmZpZyxcbiAgdHlwZSBBdXJvcmFXcml0ZXJDb25maWcsXG4gIHR5cGUgQXVyb3JhUmVhZGVyc0NvbmZpZyxcbiAgdHlwZSBEYXRhYmFzZUluc2lnaHRzQ29uZmlnXG59IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRhYmFzZVR5cGVzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU5hbWluZyB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXNvdXJjZU5hbWluZ1wiO1xuaW1wb3J0IHsgdG9QYXNjYWxDYXNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2NhcGl0YWxpc2VTdHJpbmdcIjtcblxuaW50ZXJmYWNlIFJkc0F1cm9yYUdsb2JhbFByb3BzIHtcbiAgdnBjOiBJVnBjO1xuICBkYXRhYmFzZU5hbWU6IHN0cmluZztcbiAgLyoqIFByaW1hcnkgcmVnaW9uIHdoZXJlIHRoZSBpbml0aWFsIGNsdXN0ZXIgJiBnbG9iYWwgY2x1c3RlciByZXNvdXJjZSBhcmUgY3JlYXRlZCAqL1xuICBwcmltYXJ5UmVnaW9uOiBzdHJpbmc7XG4gIC8qKiBTZWNvbmRhcnkgcmVnaW9ucyB3aGVyZSBBdXJvcmEgY2x1c3RlcnMgd2lsbCBiZSBkZXBsb3llZCAoZm9yIHNlY3JldCByZXBsaWNhdGlvbikgKi9cbiAgc2Vjb25kYXJ5UmVnaW9ucz86IHN0cmluZ1tdO1xuICAvKiogT3B0aW9uYWwgZGV0ZXJtaW5pc3RpYyBpZCBmb3IgdGhlIGdsb2JhbCBjbHVzdGVyIChzaG91bGQgYmUgc2hhcmVkIGFjcm9zcyBzdGFja3MvcmVnaW9ucykgKi9cbiAgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBlbmdpbmUgdG8gZm9yd2FyZCB0byB0aGUgdW5kZXJseWluZyBjbHVzdGVyICovXG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xuICAvKiogRW5naW5lLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKHVzZXJuYW1lLCBTU0wgcGFyYW1zLCByb3RhdGlvbiBhcHApICovXG4gIGVuZ2luZUNvbmZpZz86IEVuZ2luZUNvbmZpZztcbiAgLyoqIEVuYWJsZSB3cml0ZSBmb3J3YXJkaW5nIG9uIHNlY29uZGFyeSBjbHVzdGVycyB0byBmb3J3YXJkIHdyaXRlcyB0byBwcmltYXJ5IHJlZ2lvbiAqL1xuICBlbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmc/OiBib29sZWFuO1xuXG4gIC8vIEluc3RhbmNlIGNvbmZpZ3VyYXRpb24gKGFwcGxpZWQgdG8gYWxsIHJlZ2lvbmFsIGNsdXN0ZXJzKVxuICAvKiogV3JpdGVyIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24gKi9cbiAgd3JpdGVyPzogQXVyb3JhV3JpdGVyQ29uZmlnO1xuICAvKipcbiAgICogUmVhZGVyIGluc3RhbmNlcyBjb25maWd1cmF0aW9uLlxuICAgKiAtIGB7IGNvdW50OiBOIH1gIC0gU2ltcGxlOiBOIHJlYWRlcnMgd2l0aCBkZWZhdWx0c1xuICAgKiAtIGB7IGluc3RhbmNlczogWy4uLl0gfWAgLSBBZHZhbmNlZDogcGVyLXJlYWRlciBjb25maWdcbiAgICogLSBgZmFsc2VgIC0gRXhwbGljaXRseSBkaXNhYmxlIHJlYWRlcnMgKHdyaXRlci1vbmx5IGNsdXN0ZXIpXG4gICAqIC0gT21pdCAtIERlZmF1bHQ6IDEgcmVhZGVyXG4gICAqL1xuICByZWFkZXJzPzogQXVyb3JhUmVhZGVyc0NvbmZpZyB8IGZhbHNlO1xuXG4gIC8vIE5lc3RlZCBjb25maWd1cmF0aW9ucyAocHJlc2VuY2UtYmFzZWQpXG4gIC8qKiBSRFMgUHJveHkgY29uZmlndXJhdGlvbi4gT21pdCA9IG5vIHByb3h5LCB7fSA9IGRlZmF1bHRzLCBmYWxzZSA9IGRpc2FibGVkICovXG4gIHByb3h5PzogUHJveHlDb25maWcgfCBmYWxzZTtcbiAgLyoqIENyZWRlbnRpYWxzIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHVzZXJuYW1lIGFuZCBzZWNyZXQgcm90YXRpb24gKi9cbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc0NvbmZpZztcbiAgLyoqIEVuY3J5cHRpb24gY29uZmlndXJhdGlvbiAqL1xuICBlbmNyeXB0aW9uPzogQXVyb3JhRW5jcnlwdGlvbkNvbmZpZztcblxuICAvLyBPcGVyYXRpb25hbCBjb25maWd1cmF0aW9uXG4gIC8qKiBCYWNrdXAgcmV0ZW50aW9uIGluIGRheXMuIERlZmF1bHQ6IDE0ICovXG4gIGJhY2t1cFJldGVudGlvbj86IG51bWJlcjtcbiAgLyoqIENsb3VkV2F0Y2ggbW9uaXRvcmluZyBpbnRlcnZhbC4gRGVmYXVsdDogMSBtaW51dGUgKi9cbiAgbW9uaXRvcmluZ0ludGVydmFsPzogRHVyYXRpb247XG4gIC8qKiBQcmVmZXJyZWQgbWFpbnRlbmFuY2Ugd2luZG93LiBEZWZhdWx0OiBcIlNhdDoxMjozMC1TYXQ6MjA6MzBcIiAqL1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgLyoqIERhdGFiYXNlIHBvcnQuIERlZmF1bHQ6IFJEU19ERUZBVUxUUy5ERUZBVUxUX1BPUlQgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgZGF0YWJhc2VJbnNpZ2h0cz86IERhdGFiYXNlSW5zaWdodHNDb25maWcgfCBmYWxzZTtcbiAgZGVsZXRpb25Qcm90ZWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIEFSTiBvciBpZGVudGlmaWVyIG9mIERCIGNsdXN0ZXIgc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tICovXG4gIHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgLyoqIFVzZXJuYW1lIGZyb20gdGhlIHNuYXBzaG90IChyZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBmcm9tIHNuYXBzaG90IHRvIHJlc2V0IHBhc3N3b3JkKSAqL1xuICBzbmFwc2hvdFVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUmRzQXVyb3JhR2xvYmFsIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnN0cnVjdElkOiBzdHJpbmc7XG4gIHByaXZhdGUgZ2xvYmFsQ2x1c3Rlcj86IENmbkdsb2JhbENsdXN0ZXI7XG4gIHByaXZhdGUgcHJpbWFyeUNsdXN0ZXI/OiBSZHNBdXJvcmE7XG4gIHByaXZhdGUgcmVnaW9uYWxDbHVzdGVyPzogUmRzQXVyb3JhO1xuICBwcml2YXRlIHByb3BzOiBSZHNBdXJvcmFHbG9iYWxQcm9wcztcbiAgcHJpdmF0ZSBjdXJyZW50UmVnaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgZ2xvYmFsSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmRzQXVyb3JhR2xvYmFsUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3RJZCA9IGlkO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmN1cnJlbnRSZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgdGhpcy5nbG9iYWxJZCA9XG4gICAgICBwcm9wcy5nbG9iYWxDbHVzdGVySWRlbnRpZmllcj8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgUmVzb3VyY2VOYW1pbmcuZ2xvYmFsQ2x1c3RlcklkKGlkKTtcblxuICAgIC8vIGNyZWF0ZSBjbHVzdGVycyAvIGdsb2JhbCBjbHVzdGVyIGRlcGVuZGluZyBvbiByZWdpb25cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5hZGRBdXJvcmFDbHVzdGVyKCk7XG4gICAgdGhpcy5hZGRHbG9iYWxDbHVzdGVyKCk7XG4gICAgdGhpcy5hZGRPdXRwdXRzKCk7XG4gIH1cblxuICBnZXRHbG9iYWxDbHVzdGVySWRlbnRpZmllcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdsb2JhbElkO1xuICB9XG5cbiAgZ2V0UHJpbWFyeUNsdXN0ZXJJZGVudGlmaWVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFJlc291cmNlTmFtaW5nLnByaW1hcnlDbHVzdGVySWQodGhpcy5jb25zdHJ1Y3RJZCk7XG4gIH1cblxuICBwcml2YXRlIGdldEdsb2JhbENsdXN0ZXJFbmdpbmVTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAvLyBEZWZhdWx0IHRvIGF1cm9yYS1wb3N0Z3Jlc3FsIGlmIG5vIGVuZ2luZSBzcGVjaWZpZWQgKG1hdGNoZXMgZXhpc3RpbmcgYmVoYXZpb3VyKVxuICAgIGlmICghdGhpcy5wcm9wcy5lbmdpbmUpIHJldHVybiBcImF1cm9yYS1wb3N0Z3Jlc3FsXCI7XG5cbiAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGVuZ2luZSBmb3JtYXRzIHNhZmVseSB1c2luZyB1bmtub3duIGFuZCB0eXBlIGd1YXJkc1xuICAgIGNvbnN0IGVuZ2luZSA9IHRoaXMucHJvcHMuZW5naW5lO1xuXG4gICAgLy8gQ0RLJ3MgSUNsdXN0ZXJFbmdpbmUgaW50ZXJmYWNlIGRvZXMgbm90IGV4cG9zZSBlbmdpbmVUeXBlL2VuZ2luZS9uYW1lXG4gICAgLy8gcHJvcGVydGllcyBkaXJlY3RseSwgYnV0IHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gQXVyb3JhTXlzcWxFbmdpbmVWZXJzaW9uKVxuICAgIC8vIGRvIGhhdmUgdGhlbSBhdCBydW50aW1lLiBDYXN0IHRocm91Z2ggdW5rbm93biB0byBwcm9iZSB0aGVzZSBpbnRlcm5hbCBmaWVsZHMuXG4gICAgLy8gQ0RLIGVuZ2luZSBpbnRlcm5hbHMg4oCUIG1heSBicmVhayBvbiBDREsgdXBncmFkZXMuIFNlZSByZHNBdXJvcmFHbG9iYWwgdW5pdCB0ZXN0LlxuICAgIGNvbnN0IGVuZ2luZVJlY29yZCA9IGVuZ2luZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGxldCBlbmdpbmVUeXBlOiB1bmtub3duID1cbiAgICAgIGVuZ2luZVJlY29yZC5lbmdpbmVUeXBlID8/IGVuZ2luZVJlY29yZC5lbmdpbmUgPz8gZW5naW5lUmVjb3JkLm5hbWU7XG5cbiAgICAvLyBJZiB0aGUgZW5naW5lIHdhcyBwcm92aWRlZCBhcyBhIHJhdyBzdHJpbmcgKHVubGlrZWx5IGJ1dCBzdXBwb3J0IGl0KVxuICAgIGlmICh0eXBlb2YgZW5naW5lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBlbmdpbmVUeXBlID0gZW5naW5lO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIHRvU3RyaW5nKCkgZm9yIFRva2VuLWxpa2Ugb2JqZWN0c1xuICAgIGlmICghZW5naW5lVHlwZSAmJiB0eXBlb2YgZW5naW5lUmVjb3JkLnRvU3RyaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVuZ2luZVR5cGUgPSBlbmdpbmVSZWNvcmQudG9TdHJpbmcoKTtcbiAgICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICAgIC8vIHRvU3RyaW5nKCkgbWF5IHRocm93IG9uIENESyBUb2tlbiBvYmplY3RzIOKAlCBmYWxsIGJhY2sgdG8gdW5kZWZpbmVkXG4gICAgICAgIGVuZ2luZVR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBlbmdpbmVUeXBlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJhdXJvcmEtcG9zdGdyZXNxbFwiO1xuXG4gICAgLy8gTm9ybWFsaXNlIGNvbW1vbiBmb3JtczogQVVST1JBX1BPU1RHUkVTUUwgLT4gYXVyb3JhLXBvc3RncmVzcWwsIGF1cm9yYV9wb3N0Z3Jlc3FsIC0+IGF1cm9yYS1wb3N0Z3Jlc3FsXG4gICAgY29uc3Qgbm9ybWFsaXNlZCA9IGVuZ2luZVR5cGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIFwiLVwiKTtcblxuICAgIC8vIElmIHRoZSBub3JtYWxpc2VkIHZhbHVlIGlzIGp1c3QgJ2F1cm9yYScsIHByZWZlciB0aGUgbW9yZSBzcGVjaWZpYyBwb3N0Z3JlcyBkZWZhdWx0XG4gICAgaWYgKG5vcm1hbGlzZWQgPT09IFwiYXVyb3JhXCIpIHJldHVybiBcImF1cm9yYS1wb3N0Z3Jlc3FsXCI7XG5cbiAgICByZXR1cm4gbm9ybWFsaXNlZDtcbiAgfVxuXG4gIC8vIGNyZWF0ZSB0aGUgQ2ZuR2xvYmFsQ2x1c3RlciBvbmx5IGluIHRoZSBwcmltYXJ5IHJlZ2lvblxuICBwcml2YXRlIGFkZEdsb2JhbENsdXN0ZXIoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJpbWFyeVJlZ2lvbiAhPT0gdGhpcy5jdXJyZW50UmVnaW9uKSByZXR1cm47XG5cbiAgICAvLyBjcmVhdGUgdGhlIGdsb2JhbCBjbHVzdGVyIHJlc291cmNlIHJlZmVyZW5jaW5nIHRoZSBwcmltYXJ5IGNsdXN0ZXIgaWRlbnRpZmllclxuICAgIC8vIFByZWZlciByZWZlcmVuY2luZyB0aGUgTDEgREJDbHVzdGVyIFJlZiBzbyBDbG91ZEZvcm1hdGlvbiB3aWxsIGNyZWF0ZSB0aGVcbiAgICAvLyBEQkNsdXN0ZXIgZmlyc3QgYW5kIHdlIGF2b2lkIGlkZW50aWZpZXItY2FzaW5nIG1pc21hdGNoZXMuXG4gICAgbGV0IHNvdXJjZUlkZW50aWZpZXI6IHN0cmluZyB8IElSZXNvbHZhYmxlID1cbiAgICAgIHRoaXMuZ2V0UHJpbWFyeUNsdXN0ZXJJZGVudGlmaWVyKCk7XG4gICAgbGV0IHByaW1hcnlMMTogQ2ZuREJDbHVzdGVyIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucHJpbWFyeUNsdXN0ZXIpIHtcbiAgICAgIC8vIFVzZSB0aGUgaGVscGVyIG9uIFJkc0F1cm9yYSB0byBnZXQgdGhlIHVuZGVybHlpbmcgTDEgREJDbHVzdGVyIChtb3JlIHJlbGlhYmxlXG4gICAgICAvLyB0aGFuIHJlbHlpbmcgb24gbm9kZS5kZWZhdWx0Q2hpbGQgd2hpY2ggY2FuIHZhcnkgZGVwZW5kaW5nIG9uIGNvbnN0cnVjdCBvcmRlcmluZylcbiAgICAgIHByaW1hcnlMMSA9XG4gICAgICAgIHRoaXMucHJpbWFyeUNsdXN0ZXIuZ2V0Q2ZuQ2x1c3RlciAmJlxuICAgICAgICB0aGlzLnByaW1hcnlDbHVzdGVyLmdldENmbkNsdXN0ZXIoKTtcbiAgICAgIGlmIChwcmltYXJ5TDEpIHtcbiAgICAgICAgc291cmNlSWRlbnRpZmllciA9IHByaW1hcnlMMS5yZWY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5nbG9iYWxDbHVzdGVyID0gbmV3IENmbkdsb2JhbENsdXN0ZXIoXG4gICAgICB0aGlzLFxuICAgICAgYCR7dGhpcy5wcm9wcy5kYXRhYmFzZU5hbWV9R2xvYmFsQ2x1c3RlcmAsXG4gICAgICB7XG4gICAgICAgIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyOiB0aGlzLmdsb2JhbElkLFxuICAgICAgICBzb3VyY2VEYkNsdXN0ZXJJZGVudGlmaWVyOiBzb3VyY2VJZGVudGlmaWVyXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyBwcmltYXJ5IERCQ2x1c3RlciBMMSBoYXMgdGhlIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyIHNldFxuICAgIGlmIChwcmltYXJ5TDEpIHtcbiAgICAgIC8vIE1ha2UgdGhlIENGTiBkZXBlbmRlbmN5IGV4cGxpY2l0IHNvIHRoZSBEQkNsdXN0ZXIgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIEdsb2JhbENsdXN0ZXJcbiAgICAgIHRoaXMuZ2xvYmFsQ2x1c3Rlci5hZGREZXBlbmRzT24ocHJpbWFyeUwxKTtcbiAgICAgIC8vIElNUE9SVEFOVDogZG8gTk9UIHNldCB0aGUgcHJpbWFyeSBEQkNsdXN0ZXIncyBgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXJgIGhlcmUuXG4gICAgICAvLyBJZiB3ZSBzZXQgdGhlIHByaW1hcnkgREJDbHVzdGVyIHRvIHJlZmVyZW5jZSB0aGUgZ2xvYmFsIGNsdXN0ZXIsIENsb3VkRm9ybWF0aW9uXG4gICAgICAvLyB3aWxsIGF0dGVtcHQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgZ2xvYmFsIGNsdXN0ZXIgZXhpc3RzIHdoZW4gY3JlYXRpbmcgdGhlXG4gICAgICAvLyBEQkNsdXN0ZXIg4oCUIGJ1dCB0aGUgZ2xvYmFsIGNsdXN0ZXIgaXMgY3JlYXRlZCBhZnRlcndhcmQgKHdlIGFkZCBhXG4gICAgICAvLyBkZXBlbmRzT24pLCB3aGljaCBjYXVzZXMgYSBcIkdsb2JhbCBjbHVzdGVyIC4uLiBub3QgZm91bmRcIiBlcnJvci4gVGhlXG4gICAgICAvLyBjb3JyZWN0IG9yZGVyIGlzIHRvIGNyZWF0ZSB0aGUgREJDbHVzdGVyIGZpcnN0LCB0aGVuIGNyZWF0ZSB0aGVcbiAgICAgIC8vIENmbkdsb2JhbENsdXN0ZXIgd2l0aCBgc291cmNlRGJDbHVzdGVySWRlbnRpZmllcmAgcG9pbnRpbmcgYXQgdGhlXG4gICAgICAvLyBwcmltYXJ5IGNsdXN0ZXIncyBSZWYuIExlYXZpbmcgdGhlIHByaW1hcnkgTDEgd2l0aG91dCB0aGVcbiAgICAgIC8vIGBnbG9iYWxDbHVzdGVySWRlbnRpZmllcmAgYXZvaWRzIHRoZSBjaXJjdWxhciByZWZlcmVuY2UuXG4gICAgfVxuICB9XG5cbiAgLy8gY3JlYXRlIGFuIEF1cm9yYSBjbHVzdGVyIGluIHRoaXMgcmVnaW9uIChwcmltYXJ5IG9yIHNlY29uZGFyeSlcbiAgcHJpdmF0ZSBhZGRBdXJvcmFDbHVzdGVyKCk6IENvbm5lY3Rpb25zIHtcbiAgICAvLyBDb21tb24gY29uZmlndXJhdGlvbiBzaGFyZWQgYmV0d2VlbiBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgY2x1c3RlcnNcbiAgICBjb25zdCBjb21tb25Db25maWcgPSB7XG4gICAgICBlbmdpbmU6IHRoaXMucHJvcHMuZW5naW5lLFxuICAgICAgZW5naW5lQ29uZmlnOiB0aGlzLnByb3BzLmVuZ2luZUNvbmZpZyxcbiAgICAgIC8vIEluc3RhbmNlIGNvbmZpZ3VyYXRpb25cbiAgICAgIHdyaXRlcjogdGhpcy5wcm9wcy53cml0ZXIsXG4gICAgICByZWFkZXJzOiB0aGlzLnByb3BzLnJlYWRlcnMsXG4gICAgICAvLyBOZXN0ZWQgY29uZmlndXJhdGlvbnNcbiAgICAgIHByb3h5OiB0aGlzLnByb3BzLnByb3h5LFxuICAgICAgZW5jcnlwdGlvbjogdGhpcy5wcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgLy8gT3BlcmF0aW9uYWwgY29uZmlndXJhdGlvblxuICAgICAgYmFja3VwUmV0ZW50aW9uOiB0aGlzLnByb3BzLmJhY2t1cFJldGVudGlvbixcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogdGhpcy5wcm9wcy5tb25pdG9yaW5nSW50ZXJ2YWwsXG4gICAgICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdzogdGhpcy5wcm9wcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyxcbiAgICAgIHBvcnQ6IHRoaXMucHJvcHMucG9ydCxcbiAgICAgIGRhdGFiYXNlSW5zaWdodHM6IHRoaXMucHJvcHMuZGF0YWJhc2VJbnNpZ2h0cyxcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogdGhpcy5wcm9wcy5kZWxldGlvblByb3RlY3Rpb24sXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHRoaXMucHJvcHMuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgc25hcHNob3RVc2VybmFtZTogdGhpcy5wcm9wcy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnByb3BzLnByaW1hcnlSZWdpb24gPT09IHRoaXMuY3VycmVudFJlZ2lvbikge1xuICAgICAgLy8gcHJpbWFyeVxuICAgICAgdGhpcy5wcmltYXJ5Q2x1c3RlciA9IG5ldyBSZHNBdXJvcmEoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGAke3RoaXMucHJvcHMuZGF0YWJhc2VOYW1lfVByaW1hcnlgLFxuICAgICAgICB7XG4gICAgICAgICAgdnBjOiB0aGlzLnByb3BzLnZwYyxcbiAgICAgICAgICBkYXRhYmFzZU5hbWU6IHRoaXMucHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICAgIGNsdXN0ZXJJZGVudGlmaWVyOiB0aGlzLmdldFByaW1hcnlDbHVzdGVySWRlbnRpZmllcigpLFxuICAgICAgICAgIC8vIEVuYWJsZSBzZWNyZXQgcmVwbGljYXRpb24gdG8gc2Vjb25kYXJ5IHJlZ2lvbnNcbiAgICAgICAgICBzZWNyZXRSZXBsaWNhUmVnaW9uczogdGhpcy5wcm9wcy5zZWNvbmRhcnlSZWdpb25zLFxuICAgICAgICAgIC8vIFByaW1hcnkgcmVnaW9uIGNyZWF0ZXMgY3JlZGVudGlhbHNcbiAgICAgICAgICBjcmVkZW50aWFsczogdGhpcy5wcm9wcy5jcmVkZW50aWFscyxcbiAgICAgICAgICAuLi5jb21tb25Db25maWdcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLnByaW1hcnlDbHVzdGVyLmNvbm5lY3Rpb25zO1xuICAgIH1cblxuICAgIC8vIHNlY29uZGFyeSByZWdpb25cbiAgICAvLyBQYXNzIGRhdGFiYXNlTmFtZSBmb3IgcmVzb3VyY2UgbmFtaW5nLCBidXQgZmxhZyBhcyBnbG9iYWwgc2Vjb25kYXJ5XG4gICAgLy8gVGhpcyBwcmV2ZW50cyBzZXR0aW5nIGNyZWRlbnRpYWxzIGFuZCBkZWZhdWx0RGF0YWJhc2VOYW1lIHdoaWNoIGFyZSBpbmhlcml0ZWQgZnJvbSBwcmltYXJ5XG4gICAgdGhpcy5yZWdpb25hbENsdXN0ZXIgPSBuZXcgUmRzQXVyb3JhKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3RoaXMucHJvcHMuZGF0YWJhc2VOYW1lfVJlZ2lvbmFsYCxcbiAgICAgIHtcbiAgICAgICAgdnBjOiB0aGlzLnByb3BzLnZwYyxcbiAgICAgICAgZGF0YWJhc2VOYW1lOiB0aGlzLnByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgY2x1c3RlcklkZW50aWZpZXI6IFJlc291cmNlTmFtaW5nLnNlY29uZGFyeUNsdXN0ZXJJZChcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdElkLFxuICAgICAgICAgIHRoaXMuY3VycmVudFJlZ2lvblxuICAgICAgICApLFxuICAgICAgICBpc0dsb2JhbFNlY29uZGFyeTogdHJ1ZSxcbiAgICAgICAgLy8gU2Vjb25kYXJ5IGRvZXNuJ3QgY3JlYXRlIGNyZWRlbnRpYWxzICh1c2VzIHJlcGxpY2F0ZWQgc2VjcmV0KVxuICAgICAgICAuLi5jb21tb25Db25maWdcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gc2V0IHRoZSBMMSBEQkNsdXN0ZXIgcHJvcGVydHkgc28gQ2xvdWRGb3JtYXRpb24gd2lsbCBqb2luIGl0IHRvIHRoZSBnbG9iYWwgY2x1c3RlclxuICAgIGNvbnN0IHJlZ2lvbmFsTDEgPVxuICAgICAgdGhpcy5yZWdpb25hbENsdXN0ZXIuZ2V0Q2ZuQ2x1c3RlciAmJlxuICAgICAgdGhpcy5yZWdpb25hbENsdXN0ZXIuZ2V0Q2ZuQ2x1c3RlcigpO1xuICAgIGlmIChyZWdpb25hbEwxKSB7XG4gICAgICByZWdpb25hbEwxLmdsb2JhbENsdXN0ZXJJZGVudGlmaWVyID0gdGhpcy5nbG9iYWxJZDtcblxuICAgICAgLy8gRW5hYmxlIHdyaXRlIGZvcndhcmRpbmcgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAodGhpcy5wcm9wcy5lbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmcpIHtcbiAgICAgICAgcmVnaW9uYWxMMS5lbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZWdpb25hbENsdXN0ZXIuY29ubmVjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZE91dHB1dHMoKSB7XG4gICAgY29uc3Qgb3V0cHV0TmFtZSA9IHRvUGFzY2FsQ2FzZSh0aGlzLnByb3BzLmRhdGFiYXNlTmFtZSk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfUdsb2JhbENsdXN0ZXJJZGVudGlmaWVyT3V0cHV0YCwge1xuICAgICAgdmFsdWU6IHRoaXMuZ2xvYmFsSWQsXG4gICAgICBleHBvcnROYW1lOiBgJHtvdXRwdXROYW1lfUdsb2JhbENsdXN0ZXJJZGVudGlmaWVyYFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q3JlZGVudGlhbHMoKTogU2VjcmV0IHtcbiAgICBpZiAodGhpcy5wcmltYXJ5Q2x1c3RlcikgcmV0dXJuIHRoaXMucHJpbWFyeUNsdXN0ZXIuZ2V0Q3JlZGVudGlhbHMoKTtcbiAgICBpZiAodGhpcy5yZWdpb25hbENsdXN0ZXIpIHJldHVybiB0aGlzLnJlZ2lvbmFsQ2x1c3Rlci5nZXRDcmVkZW50aWFscygpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIEF1cm9yYSBjbHVzdGVyIGF2YWlsYWJsZSB0byByZXR1cm4gY3JlZGVudGlhbHMgZnJvbVwiKTtcbiAgfVxuXG4gIGdldEhvc3RFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByaW1hcnlDbHVzdGVyKSByZXR1cm4gdGhpcy5wcmltYXJ5Q2x1c3Rlci5nZXRIb3N0RW5kcG9pbnQoKTtcbiAgICBpZiAodGhpcy5yZWdpb25hbENsdXN0ZXIpIHJldHVybiB0aGlzLnJlZ2lvbmFsQ2x1c3Rlci5nZXRIb3N0RW5kcG9pbnQoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBBdXJvcmEgY2x1c3RlciBhdmFpbGFibGUgdG8gcmV0dXJuIGVuZHBvaW50IGZyb21cIik7XG4gIH1cblxuICBnZXRIb3N0UG9ydCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByaW1hcnlDbHVzdGVyKSByZXR1cm4gdGhpcy5wcmltYXJ5Q2x1c3Rlci5nZXRIb3N0UG9ydCgpO1xuICAgIGlmICh0aGlzLnJlZ2lvbmFsQ2x1c3RlcikgcmV0dXJuIHRoaXMucmVnaW9uYWxDbHVzdGVyLmdldEhvc3RQb3J0KCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQXVyb3JhIGNsdXN0ZXIgYXZhaWxhYmxlIHRvIHJldHVybiBwb3J0IGZyb21cIik7XG4gIH1cbn1cbiJdfQ==
@@ -1,15 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RDS_DEFAULTS = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- exports.RDS_DEFAULTS = Object.freeze({
1
+ import { Duration } from "aws-cdk-lib";
2
+ export const RDS_DEFAULTS = Object.freeze({
6
3
  /** Default database port: FJALL on phone keypad */
7
4
  DEFAULT_PORT: 35255,
8
5
  /** Saturday window in UTC — minimises weekday impact for scheduled maintenance */
9
6
  PREFERRED_MAINTENANCE_WINDOW: "Sat:12:30-Sat:20:30",
10
7
  /** 1 minute — balances monitoring granularity against CloudWatch costs */
11
- MONITORING_INTERVAL: aws_cdk_lib_1.Duration.minutes(1),
8
+ MONITORING_INTERVAL: Duration.minutes(1),
12
9
  /** SecretsManager rotation application version for multi-user rotation */
13
10
  ROTATION_APP_VERSION: "1.1.367"
14
11
  });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzRGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9yZHNEZWZhdWx0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUM7QUFFMUIsUUFBQSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4QyxtREFBbUQ7SUFDbkQsWUFBWSxFQUFFLEtBQUs7SUFDbkIsa0ZBQWtGO0lBQ2xGLDRCQUE0QixFQUFFLHFCQUFxQjtJQUNuRCwwRUFBMEU7SUFDMUUsbUJBQW1CLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLDBFQUEwRTtJQUMxRSxvQkFBb0IsRUFBRSxTQUFTO0NBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmV4cG9ydCBjb25zdCBSRFNfREVGQVVMVFMgPSBPYmplY3QuZnJlZXplKHtcbiAgLyoqIERlZmF1bHQgZGF0YWJhc2UgcG9ydDogRkpBTEwgb24gcGhvbmUga2V5cGFkICovXG4gIERFRkFVTFRfUE9SVDogMzUyNTUsXG4gIC8qKiBTYXR1cmRheSB3aW5kb3cgaW4gVVRDIOKAlCBtaW5pbWlzZXMgd2Vla2RheSBpbXBhY3QgZm9yIHNjaGVkdWxlZCBtYWludGVuYW5jZSAqL1xuICBQUkVGRVJSRURfTUFJTlRFTkFOQ0VfV0lORE9XOiBcIlNhdDoxMjozMC1TYXQ6MjA6MzBcIixcbiAgLyoqIDEgbWludXRlIOKAlCBiYWxhbmNlcyBtb25pdG9yaW5nIGdyYW51bGFyaXR5IGFnYWluc3QgQ2xvdWRXYXRjaCBjb3N0cyAqL1xuICBNT05JVE9SSU5HX0lOVEVSVkFMOiBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAvKiogU2VjcmV0c01hbmFnZXIgcm90YXRpb24gYXBwbGljYXRpb24gdmVyc2lvbiBmb3IgbXVsdGktdXNlciByb3RhdGlvbiAqL1xuICBST1RBVElPTl9BUFBfVkVSU0lPTjogXCIxLjEuMzY3XCJcbn0gYXMgY29uc3QpO1xuIl19
@@ -2,8 +2,8 @@ import { type IKey } from "aws-cdk-lib/aws-kms";
2
2
  import { type IVpc, type IConnectable } from "aws-cdk-lib/aws-ec2";
3
3
  import { type ISecret } from "aws-cdk-lib/aws-secretsmanager";
4
4
  import type { Construct } from "constructs";
5
- import { Secret } from "../secrets";
6
- import { type DatabaseInsightsConfig, type EngineConfig, type EncryptionKeySpec, type CredentialsConfig } from "../../../utils/databaseTypes";
5
+ import { Secret } from "../secrets/index.js";
6
+ import { type DatabaseInsightsConfig, type EngineConfig, type EncryptionKeySpec, type CredentialsConfig } from "../../../utils/databaseTypes.js";
7
7
  /** Default PostgreSQL engine configuration used by both Aurora and Instance constructs. */
8
8
  export declare const DEFAULT_POSTGRES_ENGINE_CONFIG: EngineConfig;
9
9
  /**