@fjall/components-infrastructure 0.89.5 → 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 +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
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ManagedPlatform = void 0;
4
- const ipam_1 = require("../../config/aws/ipam");
5
- const ipamPool_1 = require("../../resources/aws/networking/ipamPool");
6
- const managedAccount_1 = require("./managedAccount");
7
- const getConfig_1 = require("../../utils/getConfig");
8
- class ManagedPlatform extends managedAccount_1.ManagedAccount {
9
- constructor(scope, id, props) {
10
- super(scope, id, props);
11
- // Get all configured regions
12
- const config = (0, getConfig_1.getConfig)();
13
- const allRegions = config.allRegions.length > 0 ? config.allRegions : [props.region]; // Fallback to at least the deployment region
14
- // Create IPAM with all regions configured
15
- const ipam = new ipam_1.Ipam(this, "Ipam", {
16
- regions: allRegions
17
- });
18
- // Convert accounts to flat array for IpamPool
19
- const orgAccounts = Object.values(props.accounts).flatMap((account) => Array.isArray(account) ? account : [account]);
20
- // Create IPAM pool hierarchy for all regions
21
- new ipamPool_1.IpamPool(this, "IpamPool", {
22
- orgAccounts,
23
- regions: allRegions,
24
- ipamScope: ipam.privateDefaultScopeId
25
- });
26
- }
27
- }
28
- exports.ManagedPlatform = ManagedPlatform;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZFBsYXRmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9tYW5hZ2VkUGxhdGZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTZDO0FBQzdDLHNFQUFtRTtBQUVuRSxxREFBNEU7QUFDNUUscURBQWtEO0FBVWxELE1BQWEsZUFBZ0IsU0FBUSwrQkFBYztJQUNqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLDZCQUE2QjtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFTLEdBQUUsQ0FBQztRQUMzQixNQUFNLFVBQVUsR0FDZCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsNkNBQTZDO1FBRWxILDBDQUEwQztRQUMxQyxNQUFNLElBQUksR0FBRyxJQUFJLFdBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2xDLE9BQU8sRUFBRSxVQUFVO1NBQ3BCLENBQUMsQ0FBQztRQUVILDhDQUE4QztRQUM5QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNwRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQzdDLENBQUM7UUFFRiw2Q0FBNkM7UUFDN0MsSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDN0IsV0FBVztZQUNYLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMscUJBQXFCO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTFCRCwwQ0EwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJcGFtIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaXBhbVwiO1xuaW1wb3J0IHsgSXBhbVBvb2wgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL2lwYW1Qb29sXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBNYW5hZ2VkQWNjb3VudCwgdHlwZSBNYW5hZ2VkQWNjb3VudFByb3BzIH0gZnJvbSBcIi4vbWFuYWdlZEFjY291bnRcIjtcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gXCIuLi8uLi91dGlscy9nZXRDb25maWdcIjtcblxudHlwZSBBY2NvdW50c0NvbmZpZyA9IHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogcmVhZG9ubHkgc3RyaW5nW10gfCBzdHJpbmc7XG59O1xuXG5pbnRlcmZhY2UgTWFuYWdlZFBsYXRmb3JtUHJvcHMgZXh0ZW5kcyBNYW5hZ2VkQWNjb3VudFByb3BzIHtcbiAgYWNjb3VudHM6IEFjY291bnRzQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTWFuYWdlZFBsYXRmb3JtIGV4dGVuZHMgTWFuYWdlZEFjY291bnQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTWFuYWdlZFBsYXRmb3JtUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIEdldCBhbGwgY29uZmlndXJlZCByZWdpb25zXG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgYWxsUmVnaW9ucyA9XG4gICAgICBjb25maWcuYWxsUmVnaW9ucy5sZW5ndGggPiAwID8gY29uZmlnLmFsbFJlZ2lvbnMgOiBbcHJvcHMucmVnaW9uXTsgLy8gRmFsbGJhY2sgdG8gYXQgbGVhc3QgdGhlIGRlcGxveW1lbnQgcmVnaW9uXG5cbiAgICAvLyBDcmVhdGUgSVBBTSB3aXRoIGFsbCByZWdpb25zIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBpcGFtID0gbmV3IElwYW0odGhpcywgXCJJcGFtXCIsIHtcbiAgICAgIHJlZ2lvbnM6IGFsbFJlZ2lvbnNcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgYWNjb3VudHMgdG8gZmxhdCBhcnJheSBmb3IgSXBhbVBvb2xcbiAgICBjb25zdCBvcmdBY2NvdW50cyA9IE9iamVjdC52YWx1ZXMocHJvcHMuYWNjb3VudHMpLmZsYXRNYXAoKGFjY291bnQpID0+XG4gICAgICBBcnJheS5pc0FycmF5KGFjY291bnQpID8gYWNjb3VudCA6IFthY2NvdW50XVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgSVBBTSBwb29sIGhpZXJhcmNoeSBmb3IgYWxsIHJlZ2lvbnNcbiAgICBuZXcgSXBhbVBvb2wodGhpcywgXCJJcGFtUG9vbFwiLCB7XG4gICAgICBvcmdBY2NvdW50cyxcbiAgICAgIHJlZ2lvbnM6IGFsbFJlZ2lvbnMsXG4gICAgICBpcGFtU2NvcGU6IGlwYW0ucHJpdmF0ZURlZmF1bHRTY29wZUlkXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,14 +0,0 @@
1
- import { type Connections, type IConnectable, type Vpc } from "aws-cdk-lib/aws-ec2";
2
- import { Construct } from "constructs";
3
- import { type StackBuilder } from "../base/awsStack";
4
- interface DatabaseProps {
5
- vpc: Vpc;
6
- }
7
- export default class Database extends Construct implements IConnectable {
8
- private readonly resource;
9
- connections: Connections;
10
- databaseSecretName: string;
11
- constructor(scope: Construct, id: string, props: DatabaseProps);
12
- static build(id: string, props?: Partial<DatabaseProps>): (sb: StackBuilder) => Construct;
13
- }
14
- export {};
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const constructs_1 = require("constructs");
4
- const _1 = require("./");
5
- class Database extends constructs_1.Construct {
6
- constructor(scope, id, props) {
7
- super(scope, id);
8
- this.resource = new _1.RdsAurora(scope, `${id}Rds`, {
9
- vpc: props.vpc,
10
- databaseName: id.replace("Database", "")
11
- });
12
- this.connections = this.resource.connections;
13
- }
14
- //todo: move to generic 'resource' class
15
- static build(id, props) {
16
- return (sb) => {
17
- const newProps = {
18
- ...props,
19
- ...{
20
- vpc: sb.getNetwork() || props?.vpc
21
- }
22
- };
23
- return new this(sb.getStack(), id, newProps);
24
- };
25
- }
26
- }
27
- exports.default = Database;
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9kYXRhYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLDJDQUF1QztBQUd2Qyx5QkFBK0I7QUFNL0IsTUFBcUIsUUFBUyxTQUFRLHNCQUFTO0lBSzdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQy9DLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7U0FDekMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQ1YsRUFBVSxFQUNWLEtBQThCO1FBRTlCLE9BQU8sQ0FBQyxFQUFnQixFQUFFLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQWtCO2dCQUM5QixHQUFHLEtBQUs7Z0JBQ1IsR0FBRztvQkFDRCxHQUFHLEVBQUcsRUFBRSxDQUFDLFVBQVUsRUFBVSxJQUFJLEtBQUssRUFBRSxHQUFHO2lCQUM1QzthQUNGLENBQUM7WUFFRixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBaENELDJCQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSUNvbm5lY3RhYmxlLFxuICB0eXBlIFZwY1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgdHlwZSBTdGFja0J1aWxkZXIgfSBmcm9tIFwiLi4vYmFzZS9hd3NTdGFja1wiO1xuaW1wb3J0IHsgUmRzQXVyb3JhIH0gZnJvbSBcIi4vXCI7XG5cbmludGVyZmFjZSBEYXRhYmFzZVByb3BzIHtcbiAgdnBjOiBWcGM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogUmRzQXVyb3JhO1xuICBwdWJsaWMgY29ubmVjdGlvbnMhOiBDb25uZWN0aW9ucztcbiAgcHVibGljIGRhdGFiYXNlU2VjcmV0TmFtZSE6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IFJkc0F1cm9yYShzY29wZSwgYCR7aWR9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IGlkLnJlcGxhY2UoXCJEYXRhYmFzZVwiLCBcIlwiKVxuICAgIH0pO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMucmVzb3VyY2UuY29ubmVjdGlvbnM7XG4gIH1cblxuICAvL3RvZG86IG1vdmUgdG8gZ2VuZXJpYyAncmVzb3VyY2UnIGNsYXNzXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzPzogUGFydGlhbDxEYXRhYmFzZVByb3BzPlxuICApOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld1Byb3BzOiBEYXRhYmFzZVByb3BzID0ge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwYzogKHNiLmdldE5ldHdvcmsoKSBhcyBWcGMpIHx8IHByb3BzPy52cGNcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyB0aGlzKHNiLmdldFN0YWNrKCksIGlkLCBuZXdQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,15 +0,0 @@
1
- import { type Connections, type IConnectable, type SecurityGroup, type Vpc } from "aws-cdk-lib/aws-ec2";
2
- import { Construct } from "constructs";
3
- import { type StackBuilder } from "../base/awsStack";
4
- interface DatabaseProps {
5
- vpc: Vpc;
6
- }
7
- export default class Database extends Construct implements IConnectable {
8
- private readonly resource;
9
- connections: Connections;
10
- databaseSecurityGroup: SecurityGroup;
11
- databaseSecretName: string;
12
- constructor(scope: Construct, id: string, props: DatabaseProps);
13
- static build(id: string, props?: Partial<DatabaseProps>): (sb: StackBuilder) => Construct;
14
- }
15
- export {};
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const constructs_1 = require("constructs");
4
- const _1 = require("./");
5
- class Database extends constructs_1.Construct {
6
- constructor(scope, id, props) {
7
- super(scope, id);
8
- this.resource = new _1.RdsInstance(scope, `${id}Rds`, {
9
- vpc: props.vpc,
10
- databaseName: id.replace("Database", ""),
11
- readReplica: {}
12
- });
13
- this.connections = this.resource.connections;
14
- this.databaseSecurityGroup = this.resource.databaseSecurityGroup;
15
- }
16
- //todo: move to generic 'resource' class
17
- static build(id, props) {
18
- return (sb) => {
19
- const newProps = {
20
- ...props,
21
- ...{
22
- vpc: sb.getNetwork() || props?.vpc
23
- }
24
- };
25
- return new this(sb.getStack(), id, newProps);
26
- };
27
- }
28
- }
29
- exports.default = Database;
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2VJbnN0YW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2RhdGFiYXNlSW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSwyQ0FBdUM7QUFHdkMseUJBQWlDO0FBTWpDLE1BQXFCLFFBQVMsU0FBUSxzQkFBUztJQU03QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUNqRCxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDN0MsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUM7SUFDbkUsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxNQUFNLENBQUMsS0FBSyxDQUNWLEVBQVUsRUFDVixLQUE4QjtRQUU5QixPQUFPLENBQUMsRUFBZ0IsRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFrQjtnQkFDOUIsR0FBRyxLQUFLO2dCQUNSLEdBQUc7b0JBQ0QsR0FBRyxFQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQVUsSUFBSSxLQUFLLEVBQUUsR0FBRztpQkFDNUM7YUFDRixDQUFDO1lBRUYsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQW5DRCwyQkFtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENvbm5lY3Rpb25zLFxuICB0eXBlIElDb25uZWN0YWJsZSxcbiAgdHlwZSBTZWN1cml0eUdyb3VwLFxuICB0eXBlIFZwY1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgdHlwZSBTdGFja0J1aWxkZXIgfSBmcm9tIFwiLi4vYmFzZS9hd3NTdGFja1wiO1xuaW1wb3J0IHsgUmRzSW5zdGFuY2UgfSBmcm9tIFwiLi9cIjtcblxuaW50ZXJmYWNlIERhdGFiYXNlUHJvcHMge1xuICB2cGM6IFZwYztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBSZHNJbnN0YW5jZTtcbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcbiAgcHVibGljIGRhdGFiYXNlU2VjdXJpdHlHcm91cDogU2VjdXJpdHlHcm91cDtcbiAgcHVibGljIGRhdGFiYXNlU2VjcmV0TmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhYmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgUmRzSW5zdGFuY2Uoc2NvcGUsIGAke2lkfVJkc2AsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGF0YWJhc2VOYW1lOiBpZC5yZXBsYWNlKFwiRGF0YWJhc2VcIiwgXCJcIiksXG4gICAgICByZWFkUmVwbGljYToge31cbiAgICB9KTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLnJlc291cmNlLmNvbm5lY3Rpb25zO1xuICAgIHRoaXMuZGF0YWJhc2VTZWN1cml0eUdyb3VwID0gdGhpcy5yZXNvdXJjZS5kYXRhYmFzZVNlY3VyaXR5R3JvdXA7XG4gIH1cblxuICAvL3RvZG86IG1vdmUgdG8gZ2VuZXJpYyAncmVzb3VyY2UnIGNsYXNzXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzPzogUGFydGlhbDxEYXRhYmFzZVByb3BzPlxuICApOiAoc2I6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0IHtcbiAgICByZXR1cm4gKHNiOiBTdGFja0J1aWxkZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld1Byb3BzOiBEYXRhYmFzZVByb3BzID0ge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwYzogKHNiLmdldE5ldHdvcmsoKSBhcyBWcGMpIHx8IHByb3BzPy52cGNcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyB0aGlzKHNiLmdldFN0YWNrKCksIGlkLCBuZXdQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,80 +0,0 @@
1
- import { Construct } from "constructs";
2
- import { Function } from "aws-cdk-lib/aws-lambda";
3
- import { type IVpc, type IConnectable } from "aws-cdk-lib/aws-ec2";
4
- /**
5
- * Props for creating a Migration Lambda
6
- */
7
- export interface MigrationLambdaProps {
8
- /**
9
- * VPC where the Lambda will be deployed.
10
- * Must be the same VPC as the database.
11
- */
12
- vpc: IVpc;
13
- /**
14
- * Database construct to connect to.
15
- * Used for security group configuration.
16
- */
17
- database: IConnectable;
18
- /**
19
- * Database credentials secret ARN.
20
- * Lambda will fetch credentials from this secret.
21
- */
22
- secretArn: string;
23
- /**
24
- * Database endpoint hostname.
25
- */
26
- databaseEndpoint: string;
27
- /**
28
- * Database port.
29
- */
30
- databasePort: string;
31
- /**
32
- * Database name.
33
- */
34
- databaseName: string;
35
- /**
36
- * Database engine type.
37
- * Currently only PostgreSQL is supported.
38
- */
39
- databaseEngine: "postgresql";
40
- /**
41
- * Optional timeout in seconds.
42
- * Default: 300 (5 minutes)
43
- */
44
- timeout?: number;
45
- /**
46
- * Optional memory size in MB.
47
- * Default: 256
48
- */
49
- memorySize?: number;
50
- }
51
- /**
52
- * Migration Lambda construct for executing database migrations inside a VPC.
53
- *
54
- * This Lambda can be invoked by the Fjall CLI to run migrations against databases
55
- * that are not accessible from the deployment machine (e.g., private VPC databases).
56
- *
57
- * The Lambda:
58
- * 1. Fetches database credentials from Secrets Manager
59
- * 2. Connects to the database using the bundled pg driver
60
- * 3. Executes provided SQL statements
61
- *
62
- * @example
63
- * ```typescript
64
- * const migrationLambda = new MigrationLambda(this, "Migration", {
65
- * vpc: network.getVpc(),
66
- * database: databaseConstruct,
67
- * secretArn: credentials.secret.secretArn,
68
- * databaseEndpoint: cluster.clusterEndpoint.hostname,
69
- * databasePort: "5432",
70
- * databaseName: "payload",
71
- * databaseEngine: "postgresql"
72
- * });
73
- * ```
74
- */
75
- export declare class MigrationLambda extends Construct {
76
- readonly function: Function;
77
- readonly functionArn: string;
78
- readonly functionName: string;
79
- constructor(scope: Construct, id: string, props: MigrationLambdaProps);
80
- }
@@ -1,119 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MigrationLambda = void 0;
4
- const constructs_1 = require("constructs");
5
- const aws_cdk_lib_1 = require("aws-cdk-lib");
6
- const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
7
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
8
- const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
9
- const aws_logs_1 = require("aws-cdk-lib/aws-logs");
10
- const path = require("path");
11
- /**
12
- * Migration Lambda construct for executing database migrations inside a VPC.
13
- *
14
- * This Lambda can be invoked by the Fjall CLI to run migrations against databases
15
- * that are not accessible from the deployment machine (e.g., private VPC databases).
16
- *
17
- * The Lambda:
18
- * 1. Fetches database credentials from Secrets Manager
19
- * 2. Connects to the database using the bundled pg driver
20
- * 3. Executes provided SQL statements
21
- *
22
- * @example
23
- * ```typescript
24
- * const migrationLambda = new MigrationLambda(this, "Migration", {
25
- * vpc: network.getVpc(),
26
- * database: databaseConstruct,
27
- * secretArn: credentials.secret.secretArn,
28
- * databaseEndpoint: cluster.clusterEndpoint.hostname,
29
- * databasePort: "5432",
30
- * databaseName: "payload",
31
- * databaseEngine: "postgresql"
32
- * });
33
- * ```
34
- */
35
- class MigrationLambda extends constructs_1.Construct {
36
- constructor(scope, id, props) {
37
- super(scope, id);
38
- const stackName = aws_cdk_lib_1.Stack.of(this).stackName;
39
- // Create security group for the Lambda
40
- const securityGroup = new aws_ec2_1.SecurityGroup(this, `${id}SecurityGroup`, {
41
- vpc: props.vpc,
42
- description: `Security group for ${id} migration Lambda`,
43
- allowAllOutbound: true
44
- });
45
- // Allow Lambda to connect to the database
46
- props.database.connections.allowFrom(securityGroup, aws_ec2_1.Port.tcp(parseInt(props.databasePort, 10)), `Allow ${id} migration Lambda to connect to database`);
47
- // Create execution role with necessary permissions
48
- const executionRole = new aws_iam_1.Role(this, `${id}ExecutionRole`, {
49
- assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
50
- description: `Execution role for ${id} migration Lambda`,
51
- managedPolicies: [
52
- aws_iam_1.ManagedPolicy.fromManagedPolicyArn(scope, `${id}VpcExecutionPolicy`, "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole")
53
- ]
54
- });
55
- // Add Secrets Manager permissions
56
- executionRole.addToPolicy(new aws_iam_1.PolicyStatement({
57
- effect: aws_iam_1.Effect.ALLOW,
58
- actions: ["secretsmanager:GetSecretValue"],
59
- resources: [props.secretArn]
60
- }));
61
- // Create log group with retention
62
- const logGroup = new aws_logs_1.LogGroup(this, `${id}LogGroup`, {
63
- logGroupName: `/aws/lambda/${stackName}-${id}`,
64
- retention: aws_logs_1.RetentionDays.ONE_WEEK
65
- });
66
- // Path to the Lambda handler code
67
- // This directory contains index.mjs and package.json with pg dependency
68
- const handlerPath = path.join(__dirname, "migration-lambda-handler");
69
- // Create the Lambda function with bundled dependencies
70
- // The handler directory must have node_modules installed during CDK synth
71
- // or use CDK's bundling feature
72
- this.function = new aws_lambda_1.Function(this, `${id}Function`, {
73
- functionName: `${stackName}-${id}`,
74
- runtime: aws_lambda_1.Runtime.NODEJS_20_X,
75
- handler: "index.handler",
76
- code: aws_lambda_1.Code.fromAsset(handlerPath, {
77
- bundling: {
78
- image: aws_lambda_1.Runtime.NODEJS_20_X.bundlingImage,
79
- command: [
80
- "bash",
81
- "-c",
82
- ["npm install --omit=dev", "cp -r . /asset-output/"].join(" && ")
83
- ]
84
- }
85
- }),
86
- vpc: props.vpc,
87
- vpcSubnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS },
88
- securityGroups: [securityGroup],
89
- role: executionRole,
90
- timeout: aws_cdk_lib_1.Duration.seconds(props.timeout ?? 300),
91
- memorySize: props.memorySize ?? 256,
92
- environment: {
93
- SECRET_ARN: props.secretArn,
94
- DATABASE_ENDPOINT: props.databaseEndpoint,
95
- DATABASE_PORT: props.databasePort,
96
- DATABASE_NAME: props.databaseName,
97
- DATABASE_ENGINE: props.databaseEngine
98
- },
99
- logGroup
100
- });
101
- this.functionArn = this.function.functionArn;
102
- this.functionName = this.function.functionName;
103
- // Export function ARN for CLI use
104
- new aws_cdk_lib_1.CfnOutput(this, `${id}FunctionArn`, {
105
- key: `${stackName}${id}FunctionArn`,
106
- exportName: `${stackName}${id}FunctionArn`,
107
- value: this.functionArn,
108
- description: `ARN of the ${id} migration Lambda function`
109
- });
110
- new aws_cdk_lib_1.CfnOutput(this, `${id}FunctionName`, {
111
- key: `${stackName}${id}FunctionName`,
112
- exportName: `${stackName}${id}FunctionName`,
113
- value: this.functionName,
114
- description: `Name of the ${id} migration Lambda function`
115
- });
116
- }
117
- }
118
- exports.MigrationLambda = MigrationLambda;
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9uTGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvbWlncmF0aW9uTGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyw2Q0FBeUQ7QUFDekQsdURBQWlFO0FBQ2pFLGlEQU02QjtBQUM3QixpREFNNkI7QUFDN0IsbURBQStEO0FBQy9ELDZCQUE2QjtBQTBEN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLHNCQUFTO0lBSzVDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMkI7UUFDbkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFNBQVMsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFM0MsdUNBQXVDO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLElBQUksdUJBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRTtZQUNsRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CO1lBQ3hELGdCQUFnQixFQUFFLElBQUk7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsMENBQTBDO1FBQzFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDbEMsYUFBYSxFQUNiLGNBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFDMUMsU0FBUyxFQUFFLDBDQUEwQyxDQUN0RCxDQUFDO1FBRUYsbURBQW1EO1FBQ25ELE1BQU0sYUFBYSxHQUFHLElBQUksY0FBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFO1lBQ3pELFNBQVMsRUFB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QixXQUFXLEVBQUUsY0FBYyxFQUFFLDRCQUE0QjtTQUMxRCxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUU7WUFDdkMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLEVBQUUsY0FBYztZQUNwQyxVQUFVLEVBQUUsR0FBRyxTQUFTLEdBQUcsRUFBRSxjQUFjO1lBQzNDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtZQUN4QixXQUFXLEVBQUUsZUFBZSxFQUFFLDRCQUE0QjtTQUMzRCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUEzR0QsMENBMkdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uLCBDZm5PdXRwdXQsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb2RlLCBSdW50aW1lLCBGdW5jdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQge1xuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIEVmZmVjdCxcbiAgUm9sZSxcbiAgU2VydmljZVByaW5jaXBhbCxcbiAgTWFuYWdlZFBvbGljeVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJVnBjLFxuICBTdWJuZXRUeXBlLFxuICBTZWN1cml0eUdyb3VwLFxuICBQb3J0LFxuICB0eXBlIElDb25uZWN0YWJsZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuLyoqXG4gKiBQcm9wcyBmb3IgY3JlYXRpbmcgYSBNaWdyYXRpb24gTGFtYmRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0aW9uTGFtYmRhUHJvcHMge1xuICAvKipcbiAgICogVlBDIHdoZXJlIHRoZSBMYW1iZGEgd2lsbCBiZSBkZXBsb3llZC5cbiAgICogTXVzdCBiZSB0aGUgc2FtZSBWUEMgYXMgdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgdnBjOiBJVnBjO1xuXG4gIC8qKlxuICAgKiBEYXRhYmFzZSBjb25zdHJ1Y3QgdG8gY29ubmVjdCB0by5cbiAgICogVXNlZCBmb3Igc2VjdXJpdHkgZ3JvdXAgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGRhdGFiYXNlOiBJQ29ubmVjdGFibGU7XG5cbiAgLyoqXG4gICAqIERhdGFiYXNlIGNyZWRlbnRpYWxzIHNlY3JldCBBUk4uXG4gICAqIExhbWJkYSB3aWxsIGZldGNoIGNyZWRlbnRpYWxzIGZyb20gdGhpcyBzZWNyZXQuXG4gICAqL1xuICBzZWNyZXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YWJhc2UgZW5kcG9pbnQgaG9zdG5hbWUuXG4gICAqL1xuICBkYXRhYmFzZUVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERhdGFiYXNlIHBvcnQuXG4gICAqL1xuICBkYXRhYmFzZVBvcnQ6IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YWJhc2UgbmFtZS5cbiAgICovXG4gIGRhdGFiYXNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEYXRhYmFzZSBlbmdpbmUgdHlwZS5cbiAgICogQ3VycmVudGx5IG9ubHkgUG9zdGdyZVNRTCBpcyBzdXBwb3J0ZWQuXG4gICAqL1xuICBkYXRhYmFzZUVuZ2luZTogXCJwb3N0Z3Jlc3FsXCI7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRpbWVvdXQgaW4gc2Vjb25kcy5cbiAgICogRGVmYXVsdDogMzAwICg1IG1pbnV0ZXMpXG4gICAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBtZW1vcnkgc2l6ZSBpbiBNQi5cbiAgICogRGVmYXVsdDogMjU2XG4gICAqL1xuICBtZW1vcnlTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1pZ3JhdGlvbiBMYW1iZGEgY29uc3RydWN0IGZvciBleGVjdXRpbmcgZGF0YWJhc2UgbWlncmF0aW9ucyBpbnNpZGUgYSBWUEMuXG4gKlxuICogVGhpcyBMYW1iZGEgY2FuIGJlIGludm9rZWQgYnkgdGhlIEZqYWxsIENMSSB0byBydW4gbWlncmF0aW9ucyBhZ2FpbnN0IGRhdGFiYXNlc1xuICogdGhhdCBhcmUgbm90IGFjY2Vzc2libGUgZnJvbSB0aGUgZGVwbG95bWVudCBtYWNoaW5lIChlLmcuLCBwcml2YXRlIFZQQyBkYXRhYmFzZXMpLlxuICpcbiAqIFRoZSBMYW1iZGE6XG4gKiAxLiBGZXRjaGVzIGRhdGFiYXNlIGNyZWRlbnRpYWxzIGZyb20gU2VjcmV0cyBNYW5hZ2VyXG4gKiAyLiBDb25uZWN0cyB0byB0aGUgZGF0YWJhc2UgdXNpbmcgdGhlIGJ1bmRsZWQgcGcgZHJpdmVyXG4gKiAzLiBFeGVjdXRlcyBwcm92aWRlZCBTUUwgc3RhdGVtZW50c1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBtaWdyYXRpb25MYW1iZGEgPSBuZXcgTWlncmF0aW9uTGFtYmRhKHRoaXMsIFwiTWlncmF0aW9uXCIsIHtcbiAqICAgdnBjOiBuZXR3b3JrLmdldFZwYygpLFxuICogICBkYXRhYmFzZTogZGF0YWJhc2VDb25zdHJ1Y3QsXG4gKiAgIHNlY3JldEFybjogY3JlZGVudGlhbHMuc2VjcmV0LnNlY3JldEFybixcbiAqICAgZGF0YWJhc2VFbmRwb2ludDogY2x1c3Rlci5jbHVzdGVyRW5kcG9pbnQuaG9zdG5hbWUsXG4gKiAgIGRhdGFiYXNlUG9ydDogXCI1NDMyXCIsXG4gKiAgIGRhdGFiYXNlTmFtZTogXCJwYXlsb2FkXCIsXG4gKiAgIGRhdGFiYXNlRW5naW5lOiBcInBvc3RncmVzcWxcIlxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIE1pZ3JhdGlvbkxhbWJkYSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbjogRnVuY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbkFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1pZ3JhdGlvbkxhbWJkYVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHN0YWNrTmFtZSA9IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZTtcblxuICAgIC8vIENyZWF0ZSBzZWN1cml0eSBncm91cCBmb3IgdGhlIExhbWJkYVxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCBgJHtpZH1TZWN1cml0eUdyb3VwYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciAke2lkfSBtaWdyYXRpb24gTGFtYmRhYCxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWVcbiAgICB9KTtcblxuICAgIC8vIEFsbG93IExhbWJkYSB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZVxuICAgIHByb3BzLmRhdGFiYXNlLmNvbm5lY3Rpb25zLmFsbG93RnJvbShcbiAgICAgIHNlY3VyaXR5R3JvdXAsXG4gICAgICBQb3J0LnRjcChwYXJzZUludChwcm9wcy5kYXRhYmFzZVBvcnQsIDEwKSksXG4gICAgICBgQWxsb3cgJHtpZH0gbWlncmF0aW9uIExhbWJkYSB0byBjb25uZWN0IHRvIGRhdGFiYXNlYFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgZXhlY3V0aW9uIHJvbGUgd2l0aCBuZWNlc3NhcnkgcGVybWlzc2lvbnNcbiAgICBjb25zdCBleGVjdXRpb25Sb2xlID0gbmV3IFJvbGUodGhpcywgYCR7aWR9RXhlY3V0aW9uUm9sZWAsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgRXhlY3V0aW9uIHJvbGUgZm9yICR7aWR9IG1pZ3JhdGlvbiBMYW1iZGFgLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbU1hbmFnZWRQb2xpY3lBcm4oXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgYCR7aWR9VnBjRXhlY3V0aW9uUG9saWN5YCxcbiAgICAgICAgICBcImFybjphd3M6aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFWUENBY2Nlc3NFeGVjdXRpb25Sb2xlXCJcbiAgICAgICAgKVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgLy8gQWRkIFNlY3JldHMgTWFuYWdlciBwZXJtaXNzaW9uc1xuICAgIGV4ZWN1dGlvblJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInNlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtwcm9wcy5zZWNyZXRBcm5dXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgbG9nIGdyb3VwIHdpdGggcmV0ZW50aW9uXG4gICAgY29uc3QgbG9nR3JvdXAgPSBuZXcgTG9nR3JvdXAodGhpcywgYCR7aWR9TG9nR3JvdXBgLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke3N0YWNrTmFtZX0tJHtpZH1gLFxuICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9XRUVLXG4gICAgfSk7XG5cbiAgICAvLyBQYXRoIHRvIHRoZSBMYW1iZGEgaGFuZGxlciBjb2RlXG4gICAgLy8gVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgaW5kZXgubWpzIGFuZCBwYWNrYWdlLmpzb24gd2l0aCBwZyBkZXBlbmRlbmN5XG4gICAgY29uc3QgaGFuZGxlclBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIm1pZ3JhdGlvbi1sYW1iZGEtaGFuZGxlclwiKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgTGFtYmRhIGZ1bmN0aW9uIHdpdGggYnVuZGxlZCBkZXBlbmRlbmNpZXNcbiAgICAvLyBUaGUgaGFuZGxlciBkaXJlY3RvcnkgbXVzdCBoYXZlIG5vZGVfbW9kdWxlcyBpbnN0YWxsZWQgZHVyaW5nIENESyBzeW50aFxuICAgIC8vIG9yIHVzZSBDREsncyBidW5kbGluZyBmZWF0dXJlXG4gICAgdGhpcy5mdW5jdGlvbiA9IG5ldyBGdW5jdGlvbih0aGlzLCBgJHtpZH1GdW5jdGlvbmAsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYCR7c3RhY2tOYW1lfS0ke2lkfWAsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChoYW5kbGVyUGF0aCwge1xuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIGltYWdlOiBSdW50aW1lLk5PREVKU18yMF9YLmJ1bmRsaW5nSW1hZ2UsXG4gICAgICAgICAgY29tbWFuZDogW1xuICAgICAgICAgICAgXCJiYXNoXCIsXG4gICAgICAgICAgICBcIi1jXCIsXG4gICAgICAgICAgICBbXCJucG0gaW5zdGFsbCAtLW9taXQ9ZGV2XCIsIFwiY3AgLXIgLiAvYXNzZXQtb3V0cHV0L1wiXS5qb2luKFwiICYmIFwiKVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH0sXG4gICAgICBzZWN1cml0eUdyb3VwczogW3NlY3VyaXR5R3JvdXBdLFxuICAgICAgcm9sZTogZXhlY3V0aW9uUm9sZSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMocHJvcHMudGltZW91dCA/PyAzMDApLFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSA/PyAyNTYsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBTRUNSRVRfQVJOOiBwcm9wcy5zZWNyZXRBcm4sXG4gICAgICAgIERBVEFCQVNFX0VORFBPSU5UOiBwcm9wcy5kYXRhYmFzZUVuZHBvaW50LFxuICAgICAgICBEQVRBQkFTRV9QT1JUOiBwcm9wcy5kYXRhYmFzZVBvcnQsXG4gICAgICAgIERBVEFCQVNFX05BTUU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgREFUQUJBU0VfRU5HSU5FOiBwcm9wcy5kYXRhYmFzZUVuZ2luZVxuICAgICAgfSxcbiAgICAgIGxvZ0dyb3VwXG4gICAgfSk7XG5cbiAgICB0aGlzLmZ1bmN0aW9uQXJuID0gdGhpcy5mdW5jdGlvbi5mdW5jdGlvbkFybjtcbiAgICB0aGlzLmZ1bmN0aW9uTmFtZSA9IHRoaXMuZnVuY3Rpb24uZnVuY3Rpb25OYW1lO1xuXG4gICAgLy8gRXhwb3J0IGZ1bmN0aW9uIEFSTiBmb3IgQ0xJIHVzZVxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9RnVuY3Rpb25Bcm5gLCB7XG4gICAgICBrZXk6IGAke3N0YWNrTmFtZX0ke2lkfUZ1bmN0aW9uQXJuYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke2lkfUZ1bmN0aW9uQXJuYCxcbiAgICAgIHZhbHVlOiB0aGlzLmZ1bmN0aW9uQXJuLFxuICAgICAgZGVzY3JpcHRpb246IGBBUk4gb2YgdGhlICR7aWR9IG1pZ3JhdGlvbiBMYW1iZGEgZnVuY3Rpb25gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfUZ1bmN0aW9uTmFtZWAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7aWR9RnVuY3Rpb25OYW1lYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke2lkfUZ1bmN0aW9uTmFtZWAsXG4gICAgICB2YWx1ZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYE5hbWUgb2YgdGhlICR7aWR9IG1pZ3JhdGlvbiBMYW1iZGEgZnVuY3Rpb25gXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,13 +0,0 @@
1
- import { Construct } from "constructs";
2
- import { type Role } from "..";
3
- interface AttachManagedPolicyProps {
4
- instanceArn: string;
5
- permissionSet: string;
6
- permissionSetArn: string;
7
- managedPolicyArn: string;
8
- role: Role;
9
- }
10
- export declare class AttachManagedPolicy extends Construct {
11
- constructor(scope: Construct, id: string, props: AttachManagedPolicyProps);
12
- }
13
- export {};
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AttachManagedPolicy = void 0;
4
- const constructs_1 = require("constructs");
5
- const customResources = require("aws-cdk-lib/custom-resources");
6
- const awsCustomResource_1 = require("../../utilities/awsCustomResource");
7
- class AttachManagedPolicy extends constructs_1.Construct {
8
- constructor(scope, id, props) {
9
- super(scope, id);
10
- new awsCustomResource_1.AwsCustomResource(this, "attachManagedPolicy", {
11
- onCreate: {
12
- service: "sso-admin",
13
- action: "AttachManagedPolicyToPermissionSet", // https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sso-admin/command/AttachManagedPolicyToPermissionSetCommand
14
- parameters: {
15
- InstanceArn: props.instanceArn,
16
- PermissionSetArn: props.permissionSetArn,
17
- ManagedPolicyArn: props.managedPolicyArn
18
- },
19
- physicalResourceId: customResources.PhysicalResourceId.of(`attachManagedPolicyToPermissionSet${props.permissionSet}`)
20
- },
21
- onDelete: {
22
- service: "sso-admin",
23
- action: "DetachManagedPolicyFromPermissionSet", // https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sso-admin/command/DetachManagedPolicyFromPermissionSetCommand/
24
- parameters: {
25
- InstanceArn: props.instanceArn,
26
- PermissionSetArn: props.permissionSetArn,
27
- ManagedPolicyArn: props.managedPolicyArn
28
- }
29
- },
30
- policy: customResources.AwsCustomResourcePolicy.fromSdkCalls({
31
- resources: ["*"]
32
- }),
33
- // TODO: Lock down permissions, when we're ready to troubleshoot intermittent policy errors
34
- // role: props.role,
35
- // policy: customResources.AwsCustomResourcePolicy.fromStatements([
36
- // new PolicyStatement({
37
- // actions: [
38
- // "sso:ProvisionPermissionSet",
39
- // "sso:AttachManagedPolicyToPermissionSet",
40
- // "sso:DetachManagedPolicyFromPermissionSet",
41
- // "sso:TagResource"
42
- // ],
43
- // resources: ["*"]
44
- // })
45
- // ]),
46
- resourceType: "Custom::PermissionSet"
47
- });
48
- }
49
- }
50
- exports.AttachManagedPolicy = AttachManagedPolicy;
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoTWFuYWdlZFBvbGljeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9hdHRhY2hNYW5hZ2VkUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2QyxnRUFBZ0U7QUFDaEUseUVBQXNFO0FBV3RFLE1BQWEsbUJBQW9CLFNBQVEsc0JBQVM7SUFDaEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ2pELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsV0FBVztnQkFDcEIsTUFBTSxFQUFFLG9DQUFvQyxFQUFFLDRIQUE0SDtnQkFDMUssVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtvQkFDeEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtpQkFDekM7Z0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDdkQscUNBQXFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FDM0Q7YUFDRjtZQUNELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsV0FBVztnQkFDcEIsTUFBTSxFQUFFLHNDQUFzQyxFQUFFLCtIQUErSDtnQkFDL0ssVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtvQkFDeEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtpQkFDekM7YUFDRjtZQUNELE1BQU0sRUFBRSxlQUFlLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDO2dCQUMzRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7YUFDakIsQ0FBQztZQUNGLDJGQUEyRjtZQUMzRixvQkFBb0I7WUFDcEIsbUVBQW1FO1lBQ25FLDBCQUEwQjtZQUMxQixpQkFBaUI7WUFDakIsc0NBQXNDO1lBQ3RDLGtEQUFrRDtZQUNsRCxvREFBb0Q7WUFDcEQsMEJBQTBCO1lBQzFCLFNBQVM7WUFDVCx1QkFBdUI7WUFDdkIsT0FBTztZQUNQLE1BQU07WUFDTixZQUFZLEVBQUUsdUJBQXVCO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTdDRCxrREE2Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcbmltcG9ydCB7IHR5cGUgUm9sZSB9IGZyb20gXCIuLlwiO1xuXG5pbnRlcmZhY2UgQXR0YWNoTWFuYWdlZFBvbGljeVByb3BzIHtcbiAgaW5zdGFuY2VBcm46IHN0cmluZztcbiAgcGVybWlzc2lvblNldDogc3RyaW5nO1xuICBwZXJtaXNzaW9uU2V0QXJuOiBzdHJpbmc7XG4gIG1hbmFnZWRQb2xpY3lBcm46IHN0cmluZztcbiAgcm9sZTogUm9sZTtcbn1cblxuZXhwb3J0IGNsYXNzIEF0dGFjaE1hbmFnZWRQb2xpY3kgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXR0YWNoTWFuYWdlZFBvbGljeVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcImF0dGFjaE1hbmFnZWRQb2xpY3lcIiwge1xuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJzc28tYWRtaW5cIixcbiAgICAgICAgYWN0aW9uOiBcIkF0dGFjaE1hbmFnZWRQb2xpY3lUb1Blcm1pc3Npb25TZXRcIiwgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L2NsaWVudC9zc28tYWRtaW4vY29tbWFuZC9BdHRhY2hNYW5hZ2VkUG9saWN5VG9QZXJtaXNzaW9uU2V0Q29tbWFuZFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgSW5zdGFuY2VBcm46IHByb3BzLmluc3RhbmNlQXJuLFxuICAgICAgICAgIFBlcm1pc3Npb25TZXRBcm46IHByb3BzLnBlcm1pc3Npb25TZXRBcm4sXG4gICAgICAgICAgTWFuYWdlZFBvbGljeUFybjogcHJvcHMubWFuYWdlZFBvbGljeUFyblxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgYGF0dGFjaE1hbmFnZWRQb2xpY3lUb1Blcm1pc3Npb25TZXQke3Byb3BzLnBlcm1pc3Npb25TZXR9YFxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgb25EZWxldGU6IHtcbiAgICAgICAgc2VydmljZTogXCJzc28tYWRtaW5cIixcbiAgICAgICAgYWN0aW9uOiBcIkRldGFjaE1hbmFnZWRQb2xpY3lGcm9tUGVybWlzc2lvblNldFwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy92My9sYXRlc3QvY2xpZW50L3Nzby1hZG1pbi9jb21tYW5kL0RldGFjaE1hbmFnZWRQb2xpY3lGcm9tUGVybWlzc2lvblNldENvbW1hbmQvXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBJbnN0YW5jZUFybjogcHJvcHMuaW5zdGFuY2VBcm4sXG4gICAgICAgICAgUGVybWlzc2lvblNldEFybjogcHJvcHMucGVybWlzc2lvblNldEFybixcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5QXJuOiBwcm9wcy5tYW5hZ2VkUG9saWN5QXJuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgIH0pLFxuICAgICAgLy8gVE9ETzogTG9jayBkb3duIHBlcm1pc3Npb25zLCB3aGVuIHdlJ3JlIHJlYWR5IHRvIHRyb3VibGVzaG9vdCBpbnRlcm1pdHRlbnQgcG9saWN5IGVycm9yc1xuICAgICAgLy8gcm9sZTogcHJvcHMucm9sZSxcbiAgICAgIC8vIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgIC8vICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAvLyAgICAgYWN0aW9uczogW1xuICAgICAgLy8gICAgICAgXCJzc286UHJvdmlzaW9uUGVybWlzc2lvblNldFwiLFxuICAgICAgLy8gICAgICAgXCJzc286QXR0YWNoTWFuYWdlZFBvbGljeVRvUGVybWlzc2lvblNldFwiLFxuICAgICAgLy8gICAgICAgXCJzc286RGV0YWNoTWFuYWdlZFBvbGljeUZyb21QZXJtaXNzaW9uU2V0XCIsXG4gICAgICAvLyAgICAgICBcInNzbzpUYWdSZXNvdXJjZVwiXG4gICAgICAvLyAgICAgXSxcbiAgICAgIC8vICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgIC8vICAgfSlcbiAgICAgIC8vIF0pLFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6UGVybWlzc2lvblNldFwiXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +0,0 @@
1
- import * as ec2 from "aws-cdk-lib/aws-ec2";
2
- import { type Construct } from "constructs";
3
- export declare class SecurityGroup extends ec2.SecurityGroup {
4
- constructor(scope: Construct, id: string, props: ec2.SecurityGroupProps);
5
- }
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SecurityGroup = void 0;
4
- const ec2 = require("aws-cdk-lib/aws-ec2");
5
- class SecurityGroup extends ec2.SecurityGroup {
6
- constructor(scope, id, props) {
7
- super(scope, id, {
8
- ...props,
9
- description: props.description || `${id} Security Group`
10
- });
11
- }
12
- }
13
- exports.SecurityGroup = SecurityGroup;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHlHcm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2lhbS9zZWN1cml0eUdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUEyQztBQUczQyxNQUFhLGFBQWMsU0FBUSxHQUFHLENBQUMsYUFBYTtJQUNsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksR0FBRyxFQUFFLGlCQUFpQjtTQUN6RCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFQRCxzQ0FPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlHcm91cCBleHRlbmRzIGVjMi5TZWN1cml0eUdyb3VwIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGVjMi5TZWN1cml0eUdyb3VwUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uIHx8IGAke2lkfSBTZWN1cml0eSBHcm91cGBcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,29 +0,0 @@
1
- import { Role } from "aws-cdk-lib/aws-iam";
2
- import { type Construct } from "constructs";
3
- export interface MonitoringRoleConfig {
4
- /**
5
- * The AWS account ID of the Fjall webapp that will assume this role
6
- */
7
- webappAccountId: string;
8
- /**
9
- * The application name to scope the role's permissions to
10
- */
11
- appName: string;
12
- /**
13
- * Optional role name prefix. Defaults to "FjallMonitoring"
14
- */
15
- roleNamePrefix?: string;
16
- /**
17
- * Optional IAM path for the role. Defaults to "/"
18
- */
19
- rolePath?: string;
20
- }
21
- /**
22
- * Factory to build a cross-account monitoring IAM role that allows the Fjall webapp
23
- * to query CloudWatch metrics, ECS service status, and logs for this application.
24
- *
25
- */
26
- export declare class MonitoringRoleFactory {
27
- static build(id: string, config: MonitoringRoleConfig): (_app: Construct, scope: Construct) => Role;
28
- }
29
- export default MonitoringRoleFactory;
@@ -1,120 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MonitoringRoleFactory = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
6
- /**
7
- * Factory to build a cross-account monitoring IAM role that allows the Fjall webapp
8
- * to query CloudWatch metrics, ECS service status, and logs for this application.
9
- *
10
- */
11
- class MonitoringRoleFactory {
12
- static build(id, config) {
13
- return (_app, scope) => {
14
- const stack = aws_cdk_lib_1.Stack.of(scope);
15
- const role = new aws_iam_1.Role(scope, id, {
16
- roleName: `${config.roleNamePrefix || "FjallMonitoring"}-${config.appName}`,
17
- path: config.rolePath || "/",
18
- assumedBy: new aws_iam_1.AccountPrincipal(config.webappAccountId),
19
- description: `Cross-account monitoring role for Fjall application: ${config.appName}`
20
- });
21
- // CloudWatch Metrics - all resources
22
- role.addToPolicy(new aws_iam_1.PolicyStatement({
23
- effect: aws_iam_1.Effect.ALLOW,
24
- actions: [
25
- "cloudwatch:GetMetricData",
26
- "cloudwatch:GetMetricStatistics",
27
- "cloudwatch:ListMetrics"
28
- ],
29
- resources: ["*"]
30
- }));
31
- // ECS - scoped to app resources
32
- role.addToPolicy(new aws_iam_1.PolicyStatement({
33
- effect: aws_iam_1.Effect.ALLOW,
34
- actions: [
35
- "ecs:DescribeServices",
36
- "ecs:DescribeTasks",
37
- "ecs:ListTasks",
38
- "ecs:DescribeClusters",
39
- "ecs:ListServices"
40
- ],
41
- resources: ["*"],
42
- conditions: {
43
- StringEquals: {
44
- "aws:ResourceTag/fjall:costAllocation:service": config.appName
45
- }
46
- }
47
- }));
48
- // RDS - describe and monitoring
49
- role.addToPolicy(new aws_iam_1.PolicyStatement({
50
- effect: aws_iam_1.Effect.ALLOW,
51
- actions: [
52
- "rds:DescribeDBInstances",
53
- "rds:DescribeDBClusters",
54
- "rds:DescribeDBProxies",
55
- "rds:ListTagsForResource"
56
- ],
57
- resources: ["*"]
58
- }));
59
- // S3 - bucket metrics and listing
60
- role.addToPolicy(new aws_iam_1.PolicyStatement({
61
- effect: aws_iam_1.Effect.ALLOW,
62
- actions: [
63
- "s3:GetBucketLocation",
64
- "s3:GetBucketMetricsConfiguration",
65
- "s3:GetBucketTagging",
66
- "s3:ListBucket",
67
- "s3:ListAllMyBuckets"
68
- ],
69
- resources: ["*"]
70
- }));
71
- // Lambda - function metrics and status
72
- role.addToPolicy(new aws_iam_1.PolicyStatement({
73
- effect: aws_iam_1.Effect.ALLOW,
74
- actions: [
75
- "lambda:GetFunction",
76
- "lambda:GetFunctionConfiguration",
77
- "lambda:ListFunctions",
78
- "lambda:ListTags"
79
- ],
80
- resources: ["*"]
81
- }));
82
- // Application Load Balancer - metrics and health
83
- role.addToPolicy(new aws_iam_1.PolicyStatement({
84
- effect: aws_iam_1.Effect.ALLOW,
85
- actions: [
86
- "elasticloadbalancing:DescribeLoadBalancers",
87
- "elasticloadbalancing:DescribeTargetGroups",
88
- "elasticloadbalancing:DescribeTargetHealth",
89
- "elasticloadbalancing:DescribeTags"
90
- ],
91
- resources: ["*"]
92
- }));
93
- // CloudWatch Logs - read logs for all app resources
94
- role.addToPolicy(new aws_iam_1.PolicyStatement({
95
- effect: aws_iam_1.Effect.ALLOW,
96
- actions: [
97
- "logs:FilterLogEvents",
98
- "logs:GetLogEvents",
99
- "logs:DescribeLogGroups",
100
- "logs:DescribeLogStreams"
101
- ],
102
- resources: [
103
- `arn:aws:logs:${stack.region}:${stack.account}:log-group:/aws/ecs/${config.appName}*:*`,
104
- `arn:aws:logs:${stack.region}:${stack.account}:log-group:/aws/lambda/${config.appName}*:*`,
105
- `arn:aws:logs:${stack.region}:${stack.account}:log-group:/aws/rds/${config.appName}*:*`
106
- ]
107
- }));
108
- // Export the role ARN so it can be retrieved after deployment
109
- new aws_cdk_lib_1.CfnOutput(scope, `${id}Arn`, {
110
- value: role.roleArn,
111
- description: `ARN of the monitoring role for ${config.appName}`,
112
- exportName: `${config.appName}-MonitoringRoleArn`
113
- });
114
- return role;
115
- };
116
- }
117
- }
118
- exports.MonitoringRoleFactory = MonitoringRoleFactory;
119
- exports.default = MonitoringRoleFactory;
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmluZ1JvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9tb25pdG9yaW5nL21vbml0b3JpbmdSb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUErQztBQUMvQyxpREFLNkI7QUF5QjdCOzs7O0dBSUc7QUFDSCxNQUFhLHFCQUFxQjtJQUN6QixNQUFNLENBQUMsS0FBSyxDQUNqQixFQUFVLEVBQ1YsTUFBNEI7UUFFNUIsT0FBTyxDQUFDLElBQWUsRUFBRSxLQUFnQixFQUFFLEVBQUU7WUFDM0MsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxjQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDL0IsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxpQkFBaUIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUMzRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxHQUFHO2dCQUM1QixTQUFTLEVBQUUsSUFBSSwwQkFBZ0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO2dCQUN2RCxXQUFXLEVBQUUsd0RBQXdELE1BQU0sQ0FBQyxPQUFPLEVBQUU7YUFDdEYsQ0FBQyxDQUFDO1lBRUgscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQ2QsSUFBSSx5QkFBZSxDQUFDO2dCQUNsQixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO2dCQUNwQixPQUFPLEVBQUU7b0JBQ1AsMEJBQTBCO29CQUMxQixnQ0FBZ0M7b0JBQ2hDLHdCQUF3QjtpQkFDekI7Z0JBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO2FBQ2pCLENBQUMsQ0FDSCxDQUFDO1lBRUYsZ0NBQWdDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQ2QsSUFBSSx5QkFBZSxDQUFD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QUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXJJRCxzREFxSUM7QUFFRCxrQkFBZSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIFJvbGUsXG4gIEFjY291bnRQcmluY2lwYWwsXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgRWZmZWN0XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9uaXRvcmluZ1JvbGVDb25maWcge1xuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEIG9mIHRoZSBGamFsbCB3ZWJhcHAgdGhhdCB3aWxsIGFzc3VtZSB0aGlzIHJvbGVcbiAgICovXG4gIHdlYmFwcEFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gbmFtZSB0byBzY29wZSB0aGUgcm9sZSdzIHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBhcHBOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJvbGUgbmFtZSBwcmVmaXguIERlZmF1bHRzIHRvIFwiRmphbGxNb25pdG9yaW5nXCJcbiAgICovXG4gIHJvbGVOYW1lUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBJQU0gcGF0aCBmb3IgdGhlIHJvbGUuIERlZmF1bHRzIHRvIFwiL1wiXG4gICAqL1xuICByb2xlUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGYWN0b3J5IHRvIGJ1aWxkIGEgY3Jvc3MtYWNjb3VudCBtb25pdG9yaW5nIElBTSByb2xlIHRoYXQgYWxsb3dzIHRoZSBGamFsbCB3ZWJhcHBcbiAqIHRvIHF1ZXJ5IENsb3VkV2F0Y2ggbWV0cmljcywgRUNTIHNlcnZpY2Ugc3RhdHVzLCBhbmQgbG9ncyBmb3IgdGhpcyBhcHBsaWNhdGlvbi5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25pdG9yaW5nUm9sZUZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29uZmlnOiBNb25pdG9yaW5nUm9sZUNvbmZpZ1xuICApOiAoX2FwcDogQ29uc3RydWN0LCBzY29wZTogQ29uc3RydWN0KSA9PiBSb2xlIHtcbiAgICByZXR1cm4gKF9hcHA6IENvbnN0cnVjdCwgc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgICAgIGNvbnN0IHJvbGUgPSBuZXcgUm9sZShzY29wZSwgaWQsIHtcbiAgICAgICAgcm9sZU5hbWU6IGAke2NvbmZpZy5yb2xlTmFtZVByZWZpeCB8fCBcIkZqYWxsTW9uaXRvcmluZ1wifS0ke2NvbmZpZy5hcHBOYW1lfWAsXG4gICAgICAgIHBhdGg6IGNvbmZpZy5yb2xlUGF0aCB8fCBcIi9cIixcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgQWNjb3VudFByaW5jaXBhbChjb25maWcud2ViYXBwQWNjb3VudElkKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGBDcm9zcy1hY2NvdW50IG1vbml0b3Jpbmcgcm9sZSBmb3IgRmphbGwgYXBwbGljYXRpb246ICR7Y29uZmlnLmFwcE5hbWV9YFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsb3VkV2F0Y2ggTWV0cmljcyAtIGFsbCByZXNvdXJjZXNcbiAgICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiY2xvdWR3YXRjaDpHZXRNZXRyaWNEYXRhXCIsXG4gICAgICAgICAgICBcImNsb3Vkd2F0Y2g6R2V0TWV0cmljU3RhdGlzdGljc1wiLFxuICAgICAgICAgICAgXCJjbG91ZHdhdGNoOkxpc3RNZXRyaWNzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gRUNTIC0gc2NvcGVkIHRvIGFwcCByZXNvdXJjZXNcbiAgICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlU2VydmljZXNcIixcbiAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza3NcIixcbiAgICAgICAgICAgIFwiZWNzOkxpc3RUYXNrc1wiLFxuICAgICAgICAgICAgXCJlY3M6RGVzY3JpYmVDbHVzdGVyc1wiLFxuICAgICAgICAgICAgXCJlY3M6TGlzdFNlcnZpY2VzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgXCJhd3M6UmVzb3VyY2VUYWcvZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBjb25maWcuYXBwTmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIFJEUyAtIGRlc2NyaWJlIGFuZCBtb25pdG9yaW5nXG4gICAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcInJkczpEZXNjcmliZURCSW5zdGFuY2VzXCIsXG4gICAgICAgICAgICBcInJkczpEZXNjcmliZURCQ2x1c3RlcnNcIixcbiAgICAgICAgICAgIFwicmRzOkRlc2NyaWJlREJQcm94aWVzXCIsXG4gICAgICAgICAgICBcInJkczpMaXN0VGFnc0ZvclJlc291cmNlXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gUzMgLSBidWNrZXQgbWV0cmljcyBhbmQgbGlzdGluZ1xuICAgICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJzMzpHZXRCdWNrZXRMb2NhdGlvblwiLFxuICAgICAgICAgICAgXCJzMzpHZXRCdWNrZXRNZXRyaWNzQ29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgXCJzMzpHZXRCdWNrZXRUYWdnaW5nXCIsXG4gICAgICAgICAgICBcInMzOkxpc3RCdWNrZXRcIixcbiAgICAgICAgICAgIFwiczM6TGlzdEFsbE15QnVja2V0c1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIExhbWJkYSAtIGZ1bmN0aW9uIG1ldHJpY3MgYW5kIHN0YXR1c1xuICAgICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJsYW1iZGE6R2V0RnVuY3Rpb25cIixcbiAgICAgICAgICAgIFwibGFtYmRhOkdldEZ1bmN0aW9uQ29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgXCJsYW1iZGE6TGlzdEZ1bmN0aW9uc1wiLFxuICAgICAgICAgICAgXCJsYW1iZGE6TGlzdFRhZ3NcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIC0gbWV0cmljcyBhbmQgaGVhbHRoXG4gICAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcImVsYXN0aWNsb2FkYmFsYW5jaW5nOkRlc2NyaWJlTG9hZEJhbGFuY2Vyc1wiLFxuICAgICAgICAgICAgXCJlbGFzdGljbG9hZGJhbGFuY2luZzpEZXNjcmliZVRhcmdldEdyb3Vwc1wiLFxuICAgICAgICAgICAgXCJlbGFzdGljbG9hZGJhbGFuY2luZzpEZXNjcmliZVRhcmdldEhlYWx0aFwiLFxuICAgICAgICAgICAgXCJlbGFzdGljbG9hZGJhbGFuY2luZzpEZXNjcmliZVRhZ3NcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBDbG91ZFdhdGNoIExvZ3MgLSByZWFkIGxvZ3MgZm9yIGFsbCBhcHAgcmVzb3VyY2VzXG4gICAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcImxvZ3M6RmlsdGVyTG9nRXZlbnRzXCIsXG4gICAgICAgICAgICBcImxvZ3M6R2V0TG9nRXZlbnRzXCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIixcbiAgICAgICAgICAgIFwibG9nczpEZXNjcmliZUxvZ1N0cmVhbXNcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDovYXdzL2Vjcy8ke2NvbmZpZy5hcHBOYW1lfSo6KmAsXG4gICAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDovYXdzL2xhbWJkYS8ke2NvbmZpZy5hcHBOYW1lfSo6KmAsXG4gICAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDovYXdzL3Jkcy8ke2NvbmZpZy5hcHBOYW1lfSo6KmBcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBFeHBvcnQgdGhlIHJvbGUgQVJOIHNvIGl0IGNhbiBiZSByZXRyaWV2ZWQgYWZ0ZXIgZGVwbG95bWVudFxuICAgICAgbmV3IENmbk91dHB1dChzY29wZSwgYCR7aWR9QXJuYCwge1xuICAgICAgICB2YWx1ZTogcm9sZS5yb2xlQXJuLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFSTiBvZiB0aGUgbW9uaXRvcmluZyByb2xlIGZvciAke2NvbmZpZy5hcHBOYW1lfWAsXG4gICAgICAgIGV4cG9ydE5hbWU6IGAke2NvbmZpZy5hcHBOYW1lfS1Nb25pdG9yaW5nUm9sZUFybmBcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcm9sZTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vbml0b3JpbmdSb2xlRmFjdG9yeTtcbiJdfQ==
@@ -1,12 +0,0 @@
1
- export declare function capitalizeString(string: string): string;
2
- /**
3
- * Convert a kebab-case or snake_case name to PascalCase.
4
- * e.g., "my-app" -> "MyApp", "my_app" -> "MyApp"
5
- */
6
- export declare function toPascalCase(name: string): string;
7
- /**
8
- * Convert any case (PascalCase, camelCase, kebab-case, snake_case) to kebab-case.
9
- * Three-pass regex: split acronyms, split camel boundaries, replace separators.
10
- * e.g., "MyApp" -> "my-app", "AWSLambda" -> "aws-lambda", "myApp" -> "my-app"
11
- */
12
- export declare function toKebab(str: string): string;