@fjall/components-infrastructure 0.89.4 → 0.89.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/LICENSE +50 -21
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +1 -18
  4. package/dist/lib/app.d.ts +12 -12
  5. package/dist/lib/app.js +61 -56
  6. package/dist/lib/aspects/index.d.ts +1 -1
  7. package/dist/lib/aspects/index.js +1 -6
  8. package/dist/lib/aspects/resourceInventory.js +6 -13
  9. package/dist/lib/config/audit.js +1 -5
  10. package/dist/lib/config/aws/accessAnalyser.d.ts +11 -0
  11. package/dist/lib/config/aws/accessAnalyser.js +17 -0
  12. package/dist/lib/config/aws/accountAuditRole.js +11 -15
  13. package/dist/lib/config/aws/accountMonitoringRole.js +25 -29
  14. package/dist/lib/config/aws/alarmTopic.d.ts +8 -0
  15. package/dist/lib/config/aws/alarmTopic.js +19 -0
  16. package/dist/lib/config/aws/cloudTrail.js +4 -9
  17. package/dist/lib/config/aws/configRecorder.d.ts +16 -0
  18. package/dist/lib/config/aws/configRecorder.js +51 -0
  19. package/dist/lib/config/aws/configRulePreset.d.ts +13 -0
  20. package/dist/lib/config/aws/configRulePreset.js +62 -0
  21. package/dist/lib/config/aws/disasterRecovery.d.ts +1 -1
  22. package/dist/lib/config/aws/disasterRecovery.js +56 -73
  23. package/dist/lib/config/aws/ebsDefaultEncryption.d.ts +8 -0
  24. package/dist/lib/config/aws/ebsDefaultEncryption.js +41 -0
  25. package/dist/lib/config/aws/ecrDefaultImage.js +25 -30
  26. package/dist/lib/config/aws/eventBus.js +8 -11
  27. package/dist/lib/config/aws/guardDutyDetector.d.ts +16 -0
  28. package/dist/lib/config/aws/guardDutyDetector.js +26 -0
  29. package/dist/lib/config/aws/identityCenter.d.ts +1 -1
  30. package/dist/lib/config/aws/identityCenter.js +23 -25
  31. package/dist/lib/config/aws/identityCenterGroupMembership.js +18 -22
  32. package/dist/lib/config/aws/index.d.ts +19 -8
  33. package/dist/lib/config/aws/index.js +19 -25
  34. package/dist/lib/config/aws/inspectorEnablement.d.ts +9 -0
  35. package/dist/lib/config/aws/inspectorEnablement.js +51 -0
  36. package/dist/lib/config/aws/ipam.js +9 -13
  37. package/dist/lib/config/aws/oidcConnector.js +8 -12
  38. package/dist/lib/config/aws/platform.js +1 -5
  39. package/dist/lib/config/aws/s3BlockPublicAccess.d.ts +9 -0
  40. package/dist/lib/config/aws/s3BlockPublicAccess.js +55 -0
  41. package/dist/lib/config/aws/scpPreset.d.ts +21 -0
  42. package/dist/lib/config/aws/scpPreset.js +311 -0
  43. package/dist/lib/config/aws/securityBaseline.d.ts +15 -0
  44. package/dist/lib/config/aws/securityBaseline.js +27 -0
  45. package/dist/lib/config/aws/securityHubHub.d.ts +15 -0
  46. package/dist/lib/config/aws/securityHubHub.js +28 -0
  47. package/dist/lib/config/aws/securityServicesAdmin.d.ts +20 -0
  48. package/dist/lib/config/aws/securityServicesAdmin.js +115 -0
  49. package/dist/lib/config/index.d.ts +2 -2
  50. package/dist/lib/config/index.js +2 -21
  51. package/dist/lib/index.d.ts +4 -4
  52. package/dist/lib/index.js +5 -26
  53. package/dist/lib/patterns/aws/account.d.ts +17 -1
  54. package/dist/lib/patterns/aws/account.js +61 -33
  55. package/dist/lib/patterns/aws/apexDomainPattern.d.ts +26 -0
  56. package/dist/lib/patterns/aws/apexDomainPattern.js +91 -0
  57. package/dist/lib/patterns/aws/auditRole.js +13 -16
  58. package/dist/lib/patterns/aws/buildkite.d.ts +1 -1
  59. package/dist/lib/patterns/aws/buildkite.js +70 -75
  60. package/dist/lib/patterns/aws/cdn.d.ts +5 -5
  61. package/dist/lib/patterns/aws/cdn.js +22 -28
  62. package/dist/lib/patterns/aws/compute.d.ts +1 -1
  63. package/dist/lib/patterns/aws/compute.js +31 -44
  64. package/dist/lib/patterns/aws/computeEc2.d.ts +1 -1
  65. package/dist/lib/patterns/aws/computeEc2.js +11 -14
  66. package/dist/lib/patterns/aws/computeEcs.d.ts +18 -2
  67. package/dist/lib/patterns/aws/computeEcs.js +41 -31
  68. package/dist/lib/patterns/aws/computeLambda.d.ts +2 -2
  69. package/dist/lib/patterns/aws/computeLambda.js +24 -31
  70. package/dist/lib/patterns/aws/database.d.ts +16 -7
  71. package/dist/lib/patterns/aws/database.js +81 -73
  72. package/dist/lib/patterns/aws/delegatedDomainPattern.d.ts +17 -0
  73. package/dist/lib/patterns/aws/delegatedDomainPattern.js +54 -0
  74. package/dist/lib/patterns/aws/dnsRecordComposer.d.ts +25 -0
  75. package/dist/lib/patterns/aws/dnsRecordComposer.js +225 -0
  76. package/dist/lib/patterns/aws/domain.d.ts +32 -0
  77. package/dist/lib/patterns/aws/domain.js +115 -0
  78. package/dist/lib/patterns/aws/domainDelegation.d.ts +3 -3
  79. package/dist/lib/patterns/aws/domainDelegation.js +28 -37
  80. package/dist/lib/patterns/aws/domainFactory.d.ts +20 -5
  81. package/dist/lib/patterns/aws/domainFactory.js +48 -10
  82. package/dist/lib/patterns/aws/domainValidation.d.ts +11 -0
  83. package/dist/lib/patterns/aws/domainValidation.js +145 -0
  84. package/dist/lib/patterns/aws/externalRecordsPattern.d.ts +18 -0
  85. package/dist/lib/patterns/aws/externalRecordsPattern.js +141 -0
  86. package/dist/lib/patterns/aws/fivetranProxy.d.ts +1 -1
  87. package/dist/lib/patterns/aws/fivetranProxy.js +6 -11
  88. package/dist/lib/patterns/aws/index.d.ts +21 -19
  89. package/dist/lib/patterns/aws/index.js +25 -36
  90. package/dist/lib/patterns/aws/interfaces/cdn.js +1 -5
  91. package/dist/lib/patterns/aws/interfaces/compute.js +4 -11
  92. package/dist/lib/patterns/aws/interfaces/connector.js +1 -15
  93. package/dist/lib/patterns/aws/interfaces/database.d.ts +1 -1
  94. package/dist/lib/patterns/aws/interfaces/database.js +6 -15
  95. package/dist/lib/patterns/aws/interfaces/domain.d.ts +80 -2
  96. package/dist/lib/patterns/aws/interfaces/domain.js +1 -6
  97. package/dist/lib/patterns/aws/interfaces/index.js +8 -41
  98. package/dist/lib/patterns/aws/interfaces/messaging.js +4 -11
  99. package/dist/lib/patterns/aws/interfaces/organisation.d.ts +1 -1
  100. package/dist/lib/patterns/aws/interfaces/organisation.js +4 -11
  101. package/dist/lib/patterns/aws/interfaces/pattern.js +2 -7
  102. package/dist/lib/patterns/aws/interfaces/storage.js +1 -5
  103. package/dist/lib/patterns/aws/managedIdentityCenter.js +7 -12
  104. package/dist/lib/patterns/aws/messaging.d.ts +7 -7
  105. package/dist/lib/patterns/aws/messaging.js +22 -33
  106. package/dist/lib/patterns/aws/network.d.ts +2 -2
  107. package/dist/lib/patterns/aws/network.js +9 -14
  108. package/dist/lib/patterns/aws/organisation.d.ts +6 -2
  109. package/dist/lib/patterns/aws/organisation.js +34 -35
  110. package/dist/lib/patterns/aws/organisationFactory.d.ts +3 -3
  111. package/dist/lib/patterns/aws/organisationFactory.js +7 -12
  112. package/dist/lib/patterns/aws/pattern.js +6 -12
  113. package/dist/lib/patterns/aws/payload.js +73 -63
  114. package/dist/lib/patterns/aws/platform.d.ts +6 -3
  115. package/dist/lib/patterns/aws/platform.js +15 -15
  116. package/dist/lib/patterns/aws/storage.d.ts +6 -4
  117. package/dist/lib/patterns/aws/storage.js +35 -40
  118. package/dist/lib/patterns/aws/subdomainHostedZone.js +11 -16
  119. package/dist/lib/patterns/aws/targets/fjallTargets.d.ts +37 -0
  120. package/dist/lib/patterns/aws/targets/fjallTargets.js +66 -0
  121. package/dist/lib/patterns/aws/targets/index.d.ts +2 -0
  122. package/dist/lib/patterns/aws/targets/index.js +2 -0
  123. package/dist/lib/patterns/aws/targets/targetResolution.d.ts +76 -0
  124. package/dist/lib/patterns/aws/targets/targetResolution.js +119 -0
  125. package/dist/lib/patterns/index.d.ts +1 -0
  126. package/dist/lib/patterns/index.js +1 -0
  127. package/dist/lib/resources/aws/analytics/clickhouse.d.ts +15 -0
  128. package/dist/lib/resources/aws/analytics/clickhouse.js +292 -0
  129. package/dist/lib/resources/aws/analytics/clickhouseConstants.d.ts +73 -0
  130. package/dist/lib/resources/aws/analytics/clickhouseConstants.js +87 -0
  131. package/dist/lib/resources/aws/analytics/clickhouseSecurityGroup.d.ts +13 -0
  132. package/dist/lib/resources/aws/analytics/clickhouseSecurityGroup.js +28 -0
  133. package/dist/lib/resources/aws/analytics/clickhouseTypes.d.ts +47 -0
  134. package/dist/lib/resources/aws/analytics/clickhouseTypes.js +1 -0
  135. package/dist/lib/resources/aws/analytics/clickhouseUserData.d.ts +5 -0
  136. package/dist/lib/resources/aws/analytics/clickhouseUserData.js +248 -0
  137. package/dist/lib/resources/aws/analytics/index.d.ts +2 -0
  138. package/dist/lib/resources/aws/analytics/index.js +1 -0
  139. package/dist/lib/resources/aws/audit/auditRole.js +10 -15
  140. package/dist/lib/resources/aws/audit/index.d.ts +1 -1
  141. package/dist/lib/resources/aws/audit/index.js +1 -6
  142. package/dist/lib/resources/aws/backup/backupPlan.d.ts +1 -1
  143. package/dist/lib/resources/aws/backup/backupPlan.js +14 -16
  144. package/dist/lib/resources/aws/backup/backupVault.d.ts +1 -1
  145. package/dist/lib/resources/aws/backup/backupVault.js +13 -15
  146. package/dist/lib/resources/aws/backup/index.d.ts +2 -2
  147. package/dist/lib/resources/aws/backup/index.js +2 -19
  148. package/dist/lib/resources/aws/base/awsStack.js +17 -19
  149. package/dist/lib/resources/aws/base/index.d.ts +1 -1
  150. package/dist/lib/resources/aws/base/index.js +1 -18
  151. package/dist/lib/resources/aws/cdn/cloudFront.js +40 -42
  152. package/dist/lib/resources/aws/cdn/index.d.ts +1 -1
  153. package/dist/lib/resources/aws/cdn/index.js +1 -18
  154. package/dist/lib/resources/aws/compute/ec2.js +39 -39
  155. package/dist/lib/resources/aws/compute/ecs.d.ts +18 -396
  156. package/dist/lib/resources/aws/compute/ecs.js +105 -976
  157. package/dist/lib/resources/aws/compute/ecsCapacityProviderAspect.d.ts +22 -0
  158. package/dist/lib/resources/aws/compute/ecsCapacityProviderAspect.js +35 -0
  159. package/dist/lib/resources/aws/compute/ecsConstants.d.ts +20 -0
  160. package/dist/lib/resources/aws/compute/ecsConstants.js +49 -0
  161. package/dist/lib/resources/aws/compute/ecsContext.d.ts +12 -0
  162. package/dist/lib/resources/aws/compute/ecsContext.js +1 -0
  163. package/dist/lib/resources/aws/compute/ecsImages.d.ts +4 -0
  164. package/dist/lib/resources/aws/compute/ecsImages.js +35 -0
  165. package/dist/lib/resources/aws/compute/ecsNetworking.d.ts +28 -0
  166. package/dist/lib/resources/aws/compute/ecsNetworking.js +290 -0
  167. package/dist/lib/resources/aws/compute/ecsRoles.d.ts +15 -0
  168. package/dist/lib/resources/aws/compute/ecsRoles.js +110 -0
  169. package/dist/lib/resources/aws/compute/ecsServiceFactory.d.ts +33 -0
  170. package/dist/lib/resources/aws/compute/ecsServiceFactory.js +183 -0
  171. package/dist/lib/resources/aws/compute/ecsTaskDefinition.d.ts +30 -0
  172. package/dist/lib/resources/aws/compute/ecsTaskDefinition.js +168 -0
  173. package/dist/lib/resources/aws/compute/ecsTypes.d.ts +337 -0
  174. package/dist/lib/resources/aws/compute/ecsTypes.js +10 -0
  175. package/dist/lib/resources/aws/compute/ecsValidation.d.ts +18 -0
  176. package/dist/lib/resources/aws/compute/ecsValidation.js +72 -0
  177. package/dist/lib/resources/aws/compute/index.d.ts +3 -3
  178. package/dist/lib/resources/aws/compute/index.js +3 -20
  179. package/dist/lib/resources/aws/compute/lambda.d.ts +10 -2
  180. package/dist/lib/resources/aws/compute/lambda.js +82 -70
  181. package/dist/lib/resources/aws/database/dynamodb.js +27 -28
  182. package/dist/lib/resources/aws/database/index.d.ts +7 -7
  183. package/dist/lib/resources/aws/database/index.js +14 -33
  184. package/dist/lib/resources/aws/database/rdsAurora.d.ts +10 -2
  185. package/dist/lib/resources/aws/database/rdsAurora.js +76 -61
  186. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +2 -2
  187. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +24 -21
  188. package/dist/lib/resources/aws/database/rdsDefaults.js +3 -7
  189. package/dist/lib/resources/aws/database/rdsHelpers.d.ts +2 -2
  190. package/dist/lib/resources/aws/database/rdsHelpers.js +21 -29
  191. package/dist/lib/resources/aws/database/rdsInstance.d.ts +11 -3
  192. package/dist/lib/resources/aws/database/rdsInstance.js +101 -83
  193. package/dist/lib/resources/aws/database/rdsProxyOutput.js +5 -9
  194. package/dist/lib/resources/aws/iam/delegationRole.d.ts +18 -0
  195. package/dist/lib/resources/aws/iam/delegationRole.js +60 -0
  196. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +4 -9
  197. package/dist/lib/resources/aws/iam/identityCenter/group.js +5 -9
  198. package/dist/lib/resources/aws/iam/identityCenter/index.d.ts +3 -3
  199. package/dist/lib/resources/aws/iam/identityCenter/index.js +3 -20
  200. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -1
  201. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +5 -9
  202. package/dist/lib/resources/aws/iam/index.d.ts +5 -4
  203. package/dist/lib/resources/aws/iam/index.js +5 -21
  204. package/dist/lib/resources/aws/iam/instanceProfile.js +2 -7
  205. package/dist/lib/resources/aws/iam/managedPolicy.js +2 -7
  206. package/dist/lib/resources/aws/iam/policy.js +2 -7
  207. package/dist/lib/resources/aws/iam/role.js +2 -7
  208. package/dist/lib/resources/aws/index.d.ts +7 -7
  209. package/dist/lib/resources/aws/index.js +7 -24
  210. package/dist/lib/resources/aws/logging/cloudTrail.d.ts +1 -1
  211. package/dist/lib/resources/aws/logging/cloudTrail.js +18 -22
  212. package/dist/lib/resources/aws/logging/index.d.ts +2 -2
  213. package/dist/lib/resources/aws/logging/index.js +2 -19
  214. package/dist/lib/resources/aws/logging/logGroup.js +4 -10
  215. package/dist/lib/resources/aws/messaging/eventbridge.js +11 -14
  216. package/dist/lib/resources/aws/messaging/index.d.ts +4 -4
  217. package/dist/lib/resources/aws/messaging/index.js +4 -21
  218. package/dist/lib/resources/aws/messaging/sns.js +11 -14
  219. package/dist/lib/resources/aws/messaging/sqs.js +32 -34
  220. package/dist/lib/resources/aws/messaging/utils.d.ts +1 -1
  221. package/dist/lib/resources/aws/messaging/utils.js +1 -6
  222. package/dist/lib/resources/aws/monitoring/alarmDefaults.d.ts +36 -0
  223. package/dist/lib/resources/aws/monitoring/alarmDefaults.js +34 -0
  224. package/dist/lib/resources/aws/monitoring/ecsAlarms.d.ts +21 -0
  225. package/dist/lib/resources/aws/monitoring/ecsAlarms.js +88 -0
  226. package/dist/lib/resources/aws/monitoring/index.d.ts +4 -0
  227. package/dist/lib/resources/aws/monitoring/index.js +4 -5
  228. package/dist/lib/resources/aws/monitoring/lambdaAlarms.d.ts +18 -0
  229. package/dist/lib/resources/aws/monitoring/lambdaAlarms.js +44 -0
  230. package/dist/lib/resources/aws/monitoring/rdsAlarms.d.ts +20 -0
  231. package/dist/lib/resources/aws/monitoring/rdsAlarms.js +52 -0
  232. package/dist/lib/resources/aws/networking/crossAccountDelegationRecord.d.ts +17 -0
  233. package/dist/lib/resources/aws/networking/crossAccountDelegationRecord.js +26 -0
  234. package/dist/lib/resources/aws/networking/dnsRecord/aRecord.d.ts +12 -0
  235. package/dist/lib/resources/aws/networking/dnsRecord/aRecord.js +21 -0
  236. package/dist/lib/resources/aws/networking/dnsRecord/aaaaRecord.d.ts +12 -0
  237. package/dist/lib/resources/aws/networking/dnsRecord/aaaaRecord.js +22 -0
  238. package/dist/lib/resources/aws/networking/dnsRecord/aliasRecord.d.ts +12 -0
  239. package/dist/lib/resources/aws/networking/dnsRecord/aliasRecord.js +23 -0
  240. package/dist/lib/resources/aws/networking/dnsRecord/caaRecord.d.ts +17 -0
  241. package/dist/lib/resources/aws/networking/dnsRecord/caaRecord.js +21 -0
  242. package/dist/lib/resources/aws/networking/dnsRecord/cnameRecord.d.ts +12 -0
  243. package/dist/lib/resources/aws/networking/dnsRecord/cnameRecord.js +22 -0
  244. package/dist/lib/resources/aws/networking/dnsRecord/dnsRecordBase.d.ts +17 -0
  245. package/dist/lib/resources/aws/networking/dnsRecord/dnsRecordBase.js +17 -0
  246. package/dist/lib/resources/aws/networking/dnsRecord/index.d.ts +10 -0
  247. package/dist/lib/resources/aws/networking/dnsRecord/index.js +10 -0
  248. package/dist/lib/resources/aws/networking/dnsRecord/mxRecord.d.ts +16 -0
  249. package/dist/lib/resources/aws/networking/dnsRecord/mxRecord.js +21 -0
  250. package/dist/lib/resources/aws/networking/dnsRecord/nsRecord.d.ts +12 -0
  251. package/dist/lib/resources/aws/networking/dnsRecord/nsRecord.js +21 -0
  252. package/dist/lib/resources/aws/networking/dnsRecord/srvRecord.d.ts +18 -0
  253. package/dist/lib/resources/aws/networking/dnsRecord/srvRecord.js +21 -0
  254. package/dist/lib/resources/aws/networking/dnsRecord/txtRecord.d.ts +12 -0
  255. package/dist/lib/resources/aws/networking/dnsRecord/txtRecord.js +21 -0
  256. package/dist/lib/resources/aws/networking/domain.d.ts +1 -1
  257. package/dist/lib/resources/aws/networking/domain.js +32 -34
  258. package/dist/lib/resources/aws/networking/domainCertificate.d.ts +8 -3
  259. package/dist/lib/resources/aws/networking/domainCertificate.js +22 -16
  260. package/dist/lib/resources/aws/networking/hostedZone.d.ts +23 -19
  261. package/dist/lib/resources/aws/networking/hostedZone.js +70 -134
  262. package/dist/lib/resources/aws/networking/index.d.ts +8 -7
  263. package/dist/lib/resources/aws/networking/index.js +8 -24
  264. package/dist/lib/resources/aws/networking/ipam.js +2 -7
  265. package/dist/lib/resources/aws/networking/ipamPool.d.ts +1 -1
  266. package/dist/lib/resources/aws/networking/ipamPool.js +45 -55
  267. package/dist/lib/resources/aws/networking/securityGroup.js +2 -7
  268. package/dist/lib/resources/aws/networking/vpc.d.ts +1 -1
  269. package/dist/lib/resources/aws/networking/vpc.js +17 -21
  270. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.d.ts +1 -1
  271. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.js +11 -15
  272. package/dist/lib/resources/aws/organisation/index.d.ts +5 -5
  273. package/dist/lib/resources/aws/organisation/index.js +4 -12
  274. package/dist/lib/resources/aws/organisation/organisation.js +5 -7
  275. package/dist/lib/resources/aws/organisation/organisationAccount.js +7 -10
  276. package/dist/lib/resources/aws/organisation/organisationPolicy.js +5 -9
  277. package/dist/lib/resources/aws/organisation/organisationalUnit.js +1 -3
  278. package/dist/lib/resources/aws/secrets/alias.js +2 -7
  279. package/dist/lib/resources/aws/secrets/index.d.ts +4 -4
  280. package/dist/lib/resources/aws/secrets/index.js +4 -21
  281. package/dist/lib/resources/aws/secrets/kms.js +15 -18
  282. package/dist/lib/resources/aws/secrets/parameter.d.ts +3 -3
  283. package/dist/lib/resources/aws/secrets/parameter.js +19 -22
  284. package/dist/lib/resources/aws/secrets/secret.d.ts +2 -2
  285. package/dist/lib/resources/aws/secrets/secret.js +12 -14
  286. package/dist/lib/resources/aws/storage/ecr.d.ts +2 -2
  287. package/dist/lib/resources/aws/storage/ecr.js +7 -13
  288. package/dist/lib/resources/aws/storage/index.d.ts +2 -2
  289. package/dist/lib/resources/aws/storage/index.js +2 -19
  290. package/dist/lib/resources/aws/storage/s3.d.ts +1 -1
  291. package/dist/lib/resources/aws/storage/s3.js +24 -12
  292. package/dist/lib/resources/aws/utilities/awsCustomResource.js +3 -7
  293. package/dist/lib/resources/aws/utilities/codeBuild.js +7 -12
  294. package/dist/lib/resources/aws/utilities/customResource.js +14 -17
  295. package/dist/lib/resources/aws/utilities/customResourceProvider.js +2 -7
  296. package/dist/lib/resources/aws/utilities/index.d.ts +5 -5
  297. package/dist/lib/resources/aws/utilities/index.js +5 -22
  298. package/dist/lib/resources/aws/utilities/resourceShare.js +2 -7
  299. package/dist/lib/resources/index.d.ts +1 -1
  300. package/dist/lib/resources/index.js +1 -18
  301. package/dist/lib/types.js +1 -3
  302. package/dist/lib/utils/accountsUtils.d.ts +5 -0
  303. package/dist/lib/utils/accountsUtils.js +18 -0
  304. package/dist/lib/utils/addSuffixToEmail.js +1 -5
  305. package/dist/lib/utils/backupTierMapping.js +2 -6
  306. package/dist/lib/utils/capitaliseString.js +1 -10
  307. package/dist/lib/utils/connections.js +9 -13
  308. package/dist/lib/utils/connector.js +10 -23
  309. package/dist/lib/utils/constructMap.d.ts +33 -0
  310. package/dist/lib/utils/constructMap.js +154 -0
  311. package/dist/lib/utils/databaseTypes.js +4 -10
  312. package/dist/lib/utils/dnsRecords.d.ts +1 -1
  313. package/dist/lib/utils/dnsRecords.js +23 -27
  314. package/dist/lib/utils/domainTypes.d.ts +0 -1
  315. package/dist/lib/utils/domainTypes.js +2 -10
  316. package/dist/lib/utils/env.js +14 -26
  317. package/dist/lib/utils/getAccountId.js +3 -7
  318. package/dist/lib/utils/getAsync.js +7 -10
  319. package/dist/lib/utils/getConfig.d.ts +0 -2
  320. package/dist/lib/utils/getConfig.js +29 -47
  321. package/dist/lib/utils/getStackOutput.js +4 -8
  322. package/dist/lib/utils/index.d.ts +12 -12
  323. package/dist/lib/utils/index.js +12 -29
  324. package/dist/lib/utils/manifestWriter.d.ts +14 -3
  325. package/dist/lib/utils/manifestWriter.js +60 -43
  326. package/dist/lib/utils/orgConfigParser.d.ts +14 -0
  327. package/dist/lib/utils/orgConfigParser.js +49 -0
  328. package/dist/lib/utils/removalPolicy.js +5 -9
  329. package/dist/lib/utils/resourceNaming.js +11 -16
  330. package/dist/lib/utils/standardTagsAspect.js +9 -16
  331. package/dist/lib/utils/stripAndCamelCase.js +1 -5
  332. package/dist/lib/utils/validationLogger.js +12 -18
  333. package/dist/lib/utils/vpcUtils.js +5 -10
  334. package/package.json +25 -8
  335. package/dist/lib/config/aws/accountId.d.ts +0 -6
  336. package/dist/lib/config/aws/accountId.js +0 -32
  337. package/dist/lib/config/aws/backupGlobalSettings.d.ts +0 -29
  338. package/dist/lib/config/aws/backupGlobalSettings.js +0 -49
  339. package/dist/lib/config/aws/costAllocationTags.d.ts +0 -12
  340. package/dist/lib/config/aws/costAllocationTags.js +0 -47
  341. package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +0 -8
  342. package/dist/lib/config/aws/ipamDelegateAdmin.js +0 -57
  343. package/dist/lib/config/aws/ipamPoolId.d.ts +0 -16
  344. package/dist/lib/config/aws/ipamPoolId.js +0 -42
  345. package/dist/lib/config/aws/organisation.d.ts +0 -30
  346. package/dist/lib/config/aws/organisation.js +0 -92
  347. package/dist/lib/config/aws/organisationId.d.ts +0 -7
  348. package/dist/lib/config/aws/organisationId.js +0 -45
  349. package/dist/lib/config/aws/organisationsAccess.d.ts +0 -10
  350. package/dist/lib/config/aws/organisationsAccess.js +0 -49
  351. package/dist/lib/config/aws/ramSharing.d.ts +0 -4
  352. package/dist/lib/config/aws/ramSharing.js +0 -34
  353. package/dist/lib/config/monitoring.d.ts +0 -18
  354. package/dist/lib/config/monitoring.js +0 -22
  355. package/dist/lib/patterns/aws/connections.d.ts +0 -46
  356. package/dist/lib/patterns/aws/connections.js +0 -159
  357. package/dist/lib/patterns/aws/hostedZone.d.ts +0 -28
  358. package/dist/lib/patterns/aws/hostedZone.js +0 -150
  359. package/dist/lib/patterns/aws/managedAccount.d.ts +0 -9
  360. package/dist/lib/patterns/aws/managedAccount.js +0 -55
  361. package/dist/lib/patterns/aws/managedOrganisation.d.ts +0 -36
  362. package/dist/lib/patterns/aws/managedOrganisation.js +0 -97
  363. package/dist/lib/patterns/aws/managedPlatform.d.ts +0 -12
  364. package/dist/lib/patterns/aws/managedPlatform.js +0 -29
  365. package/dist/lib/resources/aws/database/database.d.ts +0 -14
  366. package/dist/lib/resources/aws/database/database.js +0 -28
  367. package/dist/lib/resources/aws/database/databaseInstance.d.ts +0 -15
  368. package/dist/lib/resources/aws/database/databaseInstance.js +0 -30
  369. package/dist/lib/resources/aws/database/migrationLambda.d.ts +0 -80
  370. package/dist/lib/resources/aws/database/migrationLambda.js +0 -119
  371. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.d.ts +0 -13
  372. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +0 -51
  373. package/dist/lib/resources/aws/iam/securityGroup.d.ts +0 -5
  374. package/dist/lib/resources/aws/iam/securityGroup.js +0 -14
  375. package/dist/lib/resources/aws/monitoring/monitoringRole.d.ts +0 -29
  376. package/dist/lib/resources/aws/monitoring/monitoringRole.js +0 -120
  377. package/dist/lib/utils/capitalizeString.d.ts +0 -12
  378. package/dist/lib/utils/capitalizeString.js +0 -30
@@ -0,0 +1,225 @@
1
+ import { CaaTag } from "aws-cdk-lib/aws-route53";
2
+ import { ARecord, AaaaRecord, AliasRecord, CnameRecord, MxRecord, TxtRecord, NsRecord, SrvRecord, CaaRecord } from "../../resources/aws/networking/dnsRecord/index.js";
3
+ import { toPascalCase, getSafeZoneName } from "../../utils/capitaliseString.js";
4
+ import { ALIAS_CDK_PREFIX } from "../../utils/domainTypes.js";
5
+ import { DNS_APEX } from "@fjall/util";
6
+ /**
7
+ * Legacy composer consumed by `DomainFactory` (deleted in Phase 2). Accepts
8
+ * the `DnsRecordInput` shape from the BIND-primary era where ALIAS sentinels
9
+ * live in `value`. Typed targets are not supported here; use
10
+ * `composeTypedDnsRecords` instead.
11
+ */
12
+ export function composeDnsRecords(scope, zone, zoneName, records) {
13
+ const safeZone = toPascalCase(getSafeZoneName(zoneName));
14
+ records.forEach((record, index) => {
15
+ // Skip alias sentinels — they are resolved via the typed path in Phase 1+.
16
+ if (record.value.startsWith(ALIAS_CDK_PREFIX)) {
17
+ return;
18
+ }
19
+ const safeName = toPascalCase(record.name === DNS_APEX ? "Apex" : record.name);
20
+ const constructId = `${safeZone}${safeName}${record.type}Record${index}`;
21
+ const common = {
22
+ zone,
23
+ zoneName,
24
+ recordName: record.name,
25
+ ttl: record.ttl
26
+ };
27
+ switch (record.type) {
28
+ case "A":
29
+ new ARecord(scope, constructId, {
30
+ ...common,
31
+ values: [record.value]
32
+ });
33
+ break;
34
+ case "AAAA":
35
+ new AaaaRecord(scope, constructId, {
36
+ ...common,
37
+ values: [record.value]
38
+ });
39
+ break;
40
+ case "CNAME":
41
+ new CnameRecord(scope, constructId, {
42
+ ...common,
43
+ domainName: record.value
44
+ });
45
+ break;
46
+ case "MX":
47
+ new MxRecord(scope, constructId, {
48
+ ...common,
49
+ values: [
50
+ {
51
+ hostName: record.value,
52
+ priority: record.priority ?? 10
53
+ }
54
+ ]
55
+ });
56
+ break;
57
+ case "TXT":
58
+ new TxtRecord(scope, constructId, {
59
+ ...common,
60
+ values: [record.value]
61
+ });
62
+ break;
63
+ case "NS":
64
+ new NsRecord(scope, constructId, {
65
+ ...common,
66
+ values: [record.value]
67
+ });
68
+ break;
69
+ case "SRV":
70
+ new SrvRecord(scope, constructId, {
71
+ ...common,
72
+ values: [
73
+ {
74
+ hostName: record.value,
75
+ priority: record.priority ?? 10,
76
+ weight: record.weight ?? 0,
77
+ port: record.port ?? 443
78
+ }
79
+ ]
80
+ });
81
+ break;
82
+ case "CAA":
83
+ new CaaRecord(scope, constructId, {
84
+ ...common,
85
+ values: [
86
+ {
87
+ flag: 0,
88
+ tag: record.value.includes("issuewild")
89
+ ? CaaTag.ISSUEWILD
90
+ : record.value.includes("iodef")
91
+ ? CaaTag.IODEF
92
+ : CaaTag.ISSUE,
93
+ value: record.value
94
+ }
95
+ ]
96
+ });
97
+ break;
98
+ }
99
+ });
100
+ }
101
+ /**
102
+ * Typed composer consumed by the new `Domain` construct. Accepts the
103
+ * discriminated `DnsRecord` union (`StandardRecord | AliasRecord`).
104
+ *
105
+ * `AliasRecord` entries MUST carry a `target` produced by `fjallApp()`,
106
+ * `fjallCdn()`, `fjallBucket()`, or `aliasTo()` — those helpers return
107
+ * `FjallTarget & IAliasRecordTarget` so `target.bind()` is guaranteed. A
108
+ * runtime guard catches user-crafted `{ kind, ... }` literals that lack
109
+ * `bind()`.
110
+ *
111
+ * Construct-id formula (`${safeZone}${safeName}${type}Record${index}`) is
112
+ * byte-identical to the legacy composer — this is an eject-contract
113
+ * invariant (Phase 3 depends on stable IDs).
114
+ */
115
+ export function composeTypedDnsRecords(scope, zone, zoneName, records) {
116
+ const safeZone = toPascalCase(getSafeZoneName(zoneName));
117
+ records.forEach((record, index) => {
118
+ const safeName = toPascalCase(record.name === DNS_APEX ? "Apex" : record.name);
119
+ const constructId = `${safeZone}${safeName}${record.type}Record${index}`;
120
+ const common = {
121
+ zone,
122
+ zoneName,
123
+ recordName: record.name
124
+ };
125
+ if ("target" in record) {
126
+ const target = record.target;
127
+ if (target === null ||
128
+ typeof target !== "object" ||
129
+ typeof target.bind !== "function") {
130
+ throw new Error("AliasRecord target must be constructed via fjallApp()/fjallCdn()/fjallBucket()/aliasTo() — " +
131
+ "plain FjallTarget objects lack the bind() method required by CDK's IAliasRecordTarget contract.");
132
+ }
133
+ new AliasRecord(scope, constructId, {
134
+ ...common,
135
+ target: target
136
+ });
137
+ return;
138
+ }
139
+ const ttl = record.ttl;
140
+ const values = Array.isArray(record.value) ? record.value : [record.value];
141
+ switch (record.type) {
142
+ case "A":
143
+ new ARecord(scope, constructId, { ...common, ttl, values });
144
+ break;
145
+ case "AAAA":
146
+ new AaaaRecord(scope, constructId, { ...common, ttl, values });
147
+ break;
148
+ case "CNAME":
149
+ new CnameRecord(scope, constructId, {
150
+ ...common,
151
+ ttl,
152
+ domainName: values[0] ?? ""
153
+ });
154
+ break;
155
+ case "MX":
156
+ new MxRecord(scope, constructId, {
157
+ ...common,
158
+ ttl,
159
+ values: values.map((raw) => parseMxValue(raw))
160
+ });
161
+ break;
162
+ case "TXT":
163
+ new TxtRecord(scope, constructId, { ...common, ttl, values });
164
+ break;
165
+ case "NS":
166
+ new NsRecord(scope, constructId, { ...common, ttl, values });
167
+ break;
168
+ case "SRV":
169
+ new SrvRecord(scope, constructId, {
170
+ ...common,
171
+ ttl,
172
+ values: values.map((raw) => parseSrvValue(raw))
173
+ });
174
+ break;
175
+ case "CAA":
176
+ new CaaRecord(scope, constructId, {
177
+ ...common,
178
+ ttl,
179
+ values: values.map((raw) => ({
180
+ flag: 0,
181
+ tag: raw.includes("issuewild")
182
+ ? CaaTag.ISSUEWILD
183
+ : raw.includes("iodef")
184
+ ? CaaTag.IODEF
185
+ : CaaTag.ISSUE,
186
+ value: raw
187
+ }))
188
+ });
189
+ break;
190
+ default: {
191
+ const _exhaustive = record;
192
+ throw new Error(`Unsupported DnsRecord type: ${String(_exhaustive.type)}`);
193
+ }
194
+ }
195
+ });
196
+ }
197
+ // Parse "10 mail.example.com" → { priority: 10, hostName: "mail.example.com" }.
198
+ function parseMxValue(raw) {
199
+ const parts = raw.trim().split(/\s+/);
200
+ if (parts.length < 2) {
201
+ return { hostName: raw.trim(), priority: 10 };
202
+ }
203
+ const priorityPart = parts[0] ?? "10";
204
+ const hostPart = parts.slice(1).join(" ");
205
+ const parsed = Number.parseInt(priorityPart, 10);
206
+ return {
207
+ priority: Number.isFinite(parsed) ? parsed : 10,
208
+ hostName: hostPart
209
+ };
210
+ }
211
+ // Parse "10 0 443 target.example.com" → SRV value. Missing fields fall back
212
+ // to sensible Route53-compatible defaults.
213
+ function parseSrvValue(raw) {
214
+ const parts = raw.trim().split(/\s+/);
215
+ const priority = Number.parseInt(parts[0] ?? "10", 10);
216
+ const weight = Number.parseInt(parts[1] ?? "0", 10);
217
+ const port = Number.parseInt(parts[2] ?? "443", 10);
218
+ const hostName = parts.slice(3).join(" ") || (parts[0] ?? "");
219
+ return {
220
+ priority: Number.isFinite(priority) ? priority : 10,
221
+ weight: Number.isFinite(weight) ? weight : 0,
222
+ port: Number.isFinite(port) ? port : 443,
223
+ hostName
224
+ };
225
+ }
@@ -0,0 +1,32 @@
1
+ import { Construct } from "constructs";
2
+ import type { IHostedZone } from "aws-cdk-lib/aws-route53";
3
+ import type { ICertificate } from "aws-cdk-lib/aws-certificatemanager";
4
+ import { getDomainExportNames } from "@fjall/util";
5
+ import type { DomainProps, ManualRecord } from "./interfaces/domain.js";
6
+ /**
7
+ * User-facing Route53-oriented domain construct. Dispatches on
8
+ * `props.registrar` to one of three per-registrar patterns:
9
+ *
10
+ * - `route53` → `composeApexDomain` (apex HZ + delegations)
11
+ * - `external-delegated` → `composeDelegatedDomain` (sub-HZ only)
12
+ * - `external-records` → `composeExternalRecords` (no HZ, manual records)
13
+ *
14
+ * Applies gold-plating tags (`fjall:description`, three
15
+ * `fjall:costAllocation:*` tags) and user-supplied tags at the construct
16
+ * scope. Exposes the composed artefacts as public readonly properties for
17
+ * callers that need to wire resources (e.g., granting cert references).
18
+ *
19
+ * Pure composition — holds no state beyond the props/results. Validation is
20
+ * performed synchronously in the constructor; CDK surfaces any thrown Error
21
+ * against the `new Domain(...)` call site.
22
+ */
23
+ export declare class Domain extends Construct {
24
+ #private;
25
+ readonly registrar: DomainProps["registrar"];
26
+ readonly hostedZone: IHostedZone | undefined;
27
+ readonly certificates: Map<string, ICertificate>;
28
+ readonly nameServers: string[] | undefined;
29
+ readonly manualRecords: ManualRecord[];
30
+ readonly exportNames: ReturnType<typeof getDomainExportNames>;
31
+ constructor(scope: Construct, id: string, props: DomainProps);
32
+ }
@@ -0,0 +1,115 @@
1
+ import { CfnOutput, Tags } from "aws-cdk-lib";
2
+ import { Construct } from "constructs";
3
+ import { getDomainExportNames } from "@fjall/util";
4
+ import { toPascalCase, getSafeZoneName } from "../../utils/capitaliseString.js";
5
+ import { validateDomainProps } from "./domainValidation.js";
6
+ import { composeApexDomain } from "./apexDomainPattern.js";
7
+ import { composeDelegatedDomain } from "./delegatedDomainPattern.js";
8
+ import { composeExternalRecords } from "./externalRecordsPattern.js";
9
+ /**
10
+ * User-facing Route53-oriented domain construct. Dispatches on
11
+ * `props.registrar` to one of three per-registrar patterns:
12
+ *
13
+ * - `route53` → `composeApexDomain` (apex HZ + delegations)
14
+ * - `external-delegated` → `composeDelegatedDomain` (sub-HZ only)
15
+ * - `external-records` → `composeExternalRecords` (no HZ, manual records)
16
+ *
17
+ * Applies gold-plating tags (`fjall:description`, three
18
+ * `fjall:costAllocation:*` tags) and user-supplied tags at the construct
19
+ * scope. Exposes the composed artefacts as public readonly properties for
20
+ * callers that need to wire resources (e.g., granting cert references).
21
+ *
22
+ * Pure composition — holds no state beyond the props/results. Validation is
23
+ * performed synchronously in the constructor; CDK surfaces any thrown Error
24
+ * against the `new Domain(...)` call site.
25
+ */
26
+ export class Domain extends Construct {
27
+ registrar;
28
+ hostedZone;
29
+ certificates;
30
+ nameServers;
31
+ manualRecords;
32
+ exportNames;
33
+ constructor(scope, id, props) {
34
+ super(scope, id);
35
+ validateDomainProps(this, props);
36
+ this.registrar = props.registrar;
37
+ this.exportNames = getDomainExportNames(resolveEffectiveZoneName(props));
38
+ switch (props.registrar) {
39
+ case "route53": {
40
+ const result = composeApexDomain(this, props);
41
+ this.hostedZone = result.hostedZone;
42
+ this.certificates = result.certificates;
43
+ this.nameServers = result.nameServers;
44
+ this.manualRecords = result.manualRecords;
45
+ break;
46
+ }
47
+ case "external-delegated": {
48
+ const result = composeDelegatedDomain(this, props);
49
+ this.hostedZone = result.hostedZone;
50
+ this.certificates = result.certificates;
51
+ this.nameServers = result.nameServers;
52
+ this.manualRecords = result.manualRecords;
53
+ break;
54
+ }
55
+ case "external-records": {
56
+ const result = composeExternalRecords(this, props);
57
+ this.hostedZone = undefined;
58
+ this.certificates = result.certificates;
59
+ this.nameServers = undefined;
60
+ this.manualRecords = result.manualRecords;
61
+ break;
62
+ }
63
+ default: {
64
+ const _exhaustive = props;
65
+ throw new Error(`Unsupported Domain registrar: ${String(_exhaustive.registrar)}`);
66
+ }
67
+ }
68
+ this.#applyGoldPlatingTags(props);
69
+ this.#applyUserTags(props);
70
+ this.#emitCrossPhaseOutputs(props);
71
+ }
72
+ #applyGoldPlatingTags(props) {
73
+ const effectiveZone = resolveEffectiveZoneName(props);
74
+ const description = props.description ?? `Fjall-managed domain for ${effectiveZone}`;
75
+ Tags.of(this).add("fjall:description", description);
76
+ Tags.of(this).add("fjall:costAllocation:environment", props.costAllocationEnvironment ?? "management");
77
+ Tags.of(this).add("fjall:costAllocation:service", "domain");
78
+ Tags.of(this).add("fjall:costAllocation:domain", props.zoneName);
79
+ }
80
+ #applyUserTags(props) {
81
+ if (!props.tags) {
82
+ return;
83
+ }
84
+ for (const [key, value] of Object.entries(props.tags)) {
85
+ Tags.of(this).add(key, value);
86
+ }
87
+ }
88
+ /**
89
+ * Re-publish the domain's effective zone name under a predictable export
90
+ * key so downstream consumers (Phase 2, Phase 3 eject) can resolve the
91
+ * managed zone without knowing the registrar discriminant. The `Zone` and
92
+ * `HostedZoneId` outputs on the inner `HostedZone` construct cover the
93
+ * Route53-backed paths; this output covers external-records mode where no
94
+ * hosted zone exists.
95
+ */
96
+ #emitCrossPhaseOutputs(props) {
97
+ if (props.registrar !== "external-records") {
98
+ return;
99
+ }
100
+ const safeZone = toPascalCase(getSafeZoneName(props.zoneName));
101
+ new CfnOutput(this, `${safeZone}ExternalZoneName`, {
102
+ key: `${safeZone}ExternalZoneName`,
103
+ value: props.zoneName,
104
+ description: "External-records zone name (no Fjall-managed HZ)"
105
+ });
106
+ }
107
+ }
108
+ function resolveEffectiveZoneName(props) {
109
+ if (props.registrar === "external-delegated") {
110
+ const delegated = props;
111
+ return `${delegated.delegatedSubdomain}.${delegated.zoneName}`;
112
+ }
113
+ const narrowed = props;
114
+ return narrowed.zoneName;
115
+ }
@@ -1,8 +1,8 @@
1
1
  import { Construct } from "constructs";
2
- import * as route53 from "aws-cdk-lib/aws-route53";
3
- import type { DomainDelegatedProps } from "./interfaces/domain";
2
+ import type { IHostedZone } from "aws-cdk-lib/aws-route53";
3
+ import type { DomainDelegatedProps } from "./interfaces/domain.js";
4
4
  export declare class DomainDelegation extends Construct {
5
5
  readonly hostedZoneId: string;
6
- readonly hostedZone: route53.HostedZone;
6
+ readonly hostedZone: IHostedZone;
7
7
  constructor(scope: Construct, id: string, props: DomainDelegatedProps);
8
8
  }
@@ -1,54 +1,45 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DomainDelegation = void 0;
4
- const constructs_1 = require("constructs");
5
- const aws_cdk_lib_1 = require("aws-cdk-lib");
6
- const route53 = require("aws-cdk-lib/aws-route53");
7
- const iam_1 = require("../../resources/aws/iam");
8
- const capitaliseString_1 = require("../../utils/capitaliseString");
9
- const domainCertificate_1 = require("../../resources/aws/networking/domainCertificate");
10
- const domainTypes_1 = require("../../utils/domainTypes");
11
- class DomainDelegation extends constructs_1.Construct {
1
+ import { Construct } from "constructs";
2
+ import { Fn } from "aws-cdk-lib";
3
+ import { getDomainExportNames } from "@fjall/util";
4
+ import { Role } from "../../resources/aws/iam/index.js";
5
+ import { toPascalCase, getSafeZoneName } from "../../utils/capitaliseString.js";
6
+ import { HostedZone } from "../../resources/aws/networking/hostedZone.js";
7
+ import { CrossAccountDelegationRecord } from "../../resources/aws/networking/crossAccountDelegationRecord.js";
8
+ import { DomainCertificate } from "../../resources/aws/networking/domainCertificate.js";
9
+ import { composeDnsRecords } from "./dnsRecordComposer.js";
10
+ export class DomainDelegation extends Construct {
11
+ hostedZoneId;
12
+ hostedZone;
12
13
  constructor(scope, id, props) {
13
14
  super(scope, id);
14
- const parentFirstLabel = props.parentZoneName.split(".")[0] ?? "default";
15
- const delegationRoleArn = aws_cdk_lib_1.Fn.importValue(`${parentFirstLabel}DelegateHostedZoneRoleArn`);
16
- const hostedZoneDelegationRole = iam_1.Role.fromRoleArn(this, "HostedZoneDelegationRole", delegationRoleArn);
17
- const safeZone = (0, capitaliseString_1.getSafeZoneName)(props.zoneName);
18
- this.hostedZone = new route53.HostedZone(this, `${safeZone}HostedZone`, {
19
- zoneName: props.zoneName
15
+ const delegationRoleArn = Fn.importValue(getDomainExportNames(props.parentZoneName).delegationRoleArn);
16
+ const hostedZoneDelegationRole = Role.fromRoleArn(this, "HostedZoneDelegationRole", delegationRoleArn);
17
+ const safeZone = getSafeZoneName(props.zoneName);
18
+ const zone = new HostedZone(this, `${safeZone}HostedZone`, {
19
+ zoneName: props.zoneName,
20
+ createDelegationRole: false
20
21
  });
21
- this.hostedZoneId = this.hostedZone.hostedZoneId;
22
- new route53.CrossAccountZoneDelegationRecord(this, `${safeZone}DelegationRecord`, {
22
+ this.hostedZone = zone.hostedZone;
23
+ this.hostedZoneId = zone.hostedZoneId;
24
+ new CrossAccountDelegationRecord(this, `${safeZone}DelegationRecord`, {
23
25
  delegationRole: hostedZoneDelegationRole,
24
- delegatedZone: this.hostedZone,
26
+ delegatedZone: zone.hostedZone,
27
+ delegatedZoneName: props.zoneName,
25
28
  parentHostedZoneName: props.parentZoneName
26
29
  });
27
- const safeKey = (0, capitaliseString_1.toPascalCase)(safeZone);
28
- const exports = (0, domainTypes_1.getDomainExportNames)(props.zoneName);
29
- new aws_cdk_lib_1.CfnOutput(this, `${safeKey}HostedZoneId`, {
30
- key: `${safeKey}HostedZoneId`,
31
- value: this.hostedZoneId,
32
- exportName: exports.hostedZoneId
33
- });
34
- new aws_cdk_lib_1.CfnOutput(this, `${safeKey}Nameservers`, {
35
- key: `${safeKey}Nameservers`,
36
- value: aws_cdk_lib_1.Fn.join(",", this.hostedZone.hostedZoneNameServers ?? [])
37
- });
30
+ const safeKey = toPascalCase(safeZone);
38
31
  if (props.certificates) {
39
32
  props.certificates.forEach((cert, index) => {
40
- const safeCertName = (0, capitaliseString_1.toPascalCase)(cert.domainName.split(".").join(""));
41
- new domainCertificate_1.DomainCertificate(this, `${safeKey}${safeCertName}Cert${index}`, {
33
+ const safeCertName = toPascalCase(cert.domainName.split(".").join(""));
34
+ new DomainCertificate(this, `${safeKey}${safeCertName}Cert${index}`, {
42
35
  domainName: cert.domainName,
43
36
  subjectAlternativeNames: cert.subjectAlternativeNames,
44
- hostedZone: this.hostedZone
37
+ hostedZone: zone.hostedZone
45
38
  });
46
39
  });
47
40
  }
48
41
  if (props.records) {
49
- (0, domainTypes_1.addDnsRecords)(this, this.hostedZone, props.zoneName, props.records);
42
+ composeDnsRecords(this, zone.hostedZone, props.zoneName, props.records);
50
43
  }
51
44
  }
52
45
  }
53
- exports.DomainDelegation = DomainDelegation;
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluRGVsZWdhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvZG9tYWluRGVsZWdhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsNkNBQTRDO0FBQzVDLG1EQUFtRDtBQUNuRCxpREFBK0M7QUFDL0MsbUVBQTZFO0FBQzdFLHdGQUFxRjtBQUVyRix5REFBOEU7QUFFOUUsTUFBYSxnQkFBaUIsU0FBUSxzQkFBUztJQUk3QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDekUsTUFBTSxpQkFBaUIsR0FBRyxnQkFBRSxDQUFDLFdBQVcsQ0FDdEMsR0FBRyxnQkFBZ0IsMkJBQTJCLENBQy9DLENBQUM7UUFFRixNQUFNLHdCQUF3QixHQUFHLFVBQUksQ0FBQyxXQUFXLENBQy9DLElBQUksRUFDSiwwQkFBMEIsRUFDMUIsaUJBQWlCLENBQ2xCLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFBLGtDQUFlLEVBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsWUFBWSxFQUFFO1lBQ3RFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBRWpELElBQUksT0FBTyxDQUFDLGdDQUFnQyxDQUMxQyxJQUFJLEVBQ0osR0FBRyxRQUFRLGtCQUFrQixFQUM3QjtZQUNFLGNBQWMsRUFBRSx3QkFBd0I7WUFDeEMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzlCLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxjQUFjO1NBQzNDLENBQ0YsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLElBQUEsK0JBQVksRUFBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFBLGtDQUFvQixFQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVyRCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsT0FBTyxjQUFjLEVBQUU7WUFDNUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxjQUFjO1lBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtZQUN4QixVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQVk7U0FDakMsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLE9BQU8sYUFBYSxFQUFFO1lBQzNDLEdBQUcsRUFBRSxHQUFHLE9BQU8sYUFBYTtZQUM1QixLQUFLLEVBQUUsZ0JBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDO1NBQ2pFLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFBLCtCQUFZLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLEdBQUcsT0FBTyxHQUFHLFlBQVksT0FBTyxLQUFLLEVBQUUsRUFBRTtvQkFDbkUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO29CQUMzQix1QkFBdUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCO29CQUNyRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7aUJBQzVCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLElBQUEsMkJBQWEsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBakVELDRDQWlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIEZuIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyByb3V0ZTUzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbVwiO1xuaW1wb3J0IHsgdG9QYXNjYWxDYXNlLCBnZXRTYWZlWm9uZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZ1wiO1xuaW1wb3J0IHsgRG9tYWluQ2VydGlmaWNhdGUgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL2RvbWFpbkNlcnRpZmljYXRlXCI7XG5pbXBvcnQgdHlwZSB7IERvbWFpbkRlbGVnYXRlZFByb3BzIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9kb21haW5cIjtcbmltcG9ydCB7IGdldERvbWFpbkV4cG9ydE5hbWVzLCBhZGREbnNSZWNvcmRzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2RvbWFpblR5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBEb21haW5EZWxlZ2F0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGhvc3RlZFpvbmVJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaG9zdGVkWm9uZTogcm91dGU1My5Ib3N0ZWRab25lO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEb21haW5EZWxlZ2F0ZWRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBwYXJlbnRGaXJzdExhYmVsID0gcHJvcHMucGFyZW50Wm9uZU5hbWUuc3BsaXQoXCIuXCIpWzBdID8/IFwiZGVmYXVsdFwiO1xuICAgIGNvbnN0IGRlbGVnYXRpb25Sb2xlQXJuID0gRm4uaW1wb3J0VmFsdWUoXG4gICAgICBgJHtwYXJlbnRGaXJzdExhYmVsfURlbGVnYXRlSG9zdGVkWm9uZVJvbGVBcm5gXG4gICAgKTtcblxuICAgIGNvbnN0IGhvc3RlZFpvbmVEZWxlZ2F0aW9uUm9sZSA9IFJvbGUuZnJvbVJvbGVBcm4oXG4gICAgICB0aGlzLFxuICAgICAgXCJIb3N0ZWRab25lRGVsZWdhdGlvblJvbGVcIixcbiAgICAgIGRlbGVnYXRpb25Sb2xlQXJuXG4gICAgKTtcblxuICAgIGNvbnN0IHNhZmVab25lID0gZ2V0U2FmZVpvbmVOYW1lKHByb3BzLnpvbmVOYW1lKTtcblxuICAgIHRoaXMuaG9zdGVkWm9uZSA9IG5ldyByb3V0ZTUzLkhvc3RlZFpvbmUodGhpcywgYCR7c2FmZVpvbmV9SG9zdGVkWm9uZWAsIHtcbiAgICAgIHpvbmVOYW1lOiBwcm9wcy56b25lTmFtZVxuICAgIH0pO1xuXG4gICAgdGhpcy5ob3N0ZWRab25lSWQgPSB0aGlzLmhvc3RlZFpvbmUuaG9zdGVkWm9uZUlkO1xuXG4gICAgbmV3IHJvdXRlNTMuQ3Jvc3NBY2NvdW50Wm9uZURlbGVnYXRpb25SZWNvcmQoXG4gICAgICB0aGlzLFxuICAgICAgYCR7c2FmZVpvbmV9RGVsZWdhdGlvblJlY29yZGAsXG4gICAgICB7XG4gICAgICAgIGRlbGVnYXRpb25Sb2xlOiBob3N0ZWRab25lRGVsZWdhdGlvblJvbGUsXG4gICAgICAgIGRlbGVnYXRlZFpvbmU6IHRoaXMuaG9zdGVkWm9uZSxcbiAgICAgICAgcGFyZW50SG9zdGVkWm9uZU5hbWU6IHByb3BzLnBhcmVudFpvbmVOYW1lXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHNhZmVLZXkgPSB0b1Bhc2NhbENhc2Uoc2FmZVpvbmUpO1xuICAgIGNvbnN0IGV4cG9ydHMgPSBnZXREb21haW5FeHBvcnROYW1lcyhwcm9wcy56b25lTmFtZSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3NhZmVLZXl9SG9zdGVkWm9uZUlkYCwge1xuICAgICAga2V5OiBgJHtzYWZlS2V5fUhvc3RlZFpvbmVJZGAsXG4gICAgICB2YWx1ZTogdGhpcy5ob3N0ZWRab25lSWQsXG4gICAgICBleHBvcnROYW1lOiBleHBvcnRzLmhvc3RlZFpvbmVJZFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtzYWZlS2V5fU5hbWVzZXJ2ZXJzYCwge1xuICAgICAga2V5OiBgJHtzYWZlS2V5fU5hbWVzZXJ2ZXJzYCxcbiAgICAgIHZhbHVlOiBGbi5qb2luKFwiLFwiLCB0aGlzLmhvc3RlZFpvbmUuaG9zdGVkWm9uZU5hbWVTZXJ2ZXJzID8/IFtdKVxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmNlcnRpZmljYXRlcykge1xuICAgICAgcHJvcHMuY2VydGlmaWNhdGVzLmZvckVhY2goKGNlcnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDZXJ0TmFtZSA9IHRvUGFzY2FsQ2FzZShjZXJ0LmRvbWFpbk5hbWUuc3BsaXQoXCIuXCIpLmpvaW4oXCJcIikpO1xuICAgICAgICBuZXcgRG9tYWluQ2VydGlmaWNhdGUodGhpcywgYCR7c2FmZUtleX0ke3NhZmVDZXJ0TmFtZX1DZXJ0JHtpbmRleH1gLCB7XG4gICAgICAgICAgZG9tYWluTmFtZTogY2VydC5kb21haW5OYW1lLFxuICAgICAgICAgIHN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzOiBjZXJ0LnN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzLFxuICAgICAgICAgIGhvc3RlZFpvbmU6IHRoaXMuaG9zdGVkWm9uZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5yZWNvcmRzKSB7XG4gICAgICBhZGREbnNSZWNvcmRzKHRoaXMsIHRoaXMuaG9zdGVkWm9uZSwgcHJvcHMuem9uZU5hbWUsIHByb3BzLnJlY29yZHMpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,8 +1,23 @@
1
- import { type Construct } from "constructs";
2
- import { Domain } from "../../resources/aws/networking/domain";
3
- import { DomainDelegation } from "./domainDelegation";
4
- import type { DomainApexProps, DomainDelegatedProps } from "./interfaces/domain";
1
+ import { Construct } from "constructs";
2
+ import type { IHostedZone } from "aws-cdk-lib/aws-route53";
3
+ import { DomainDelegation } from "./domainDelegation.js";
4
+ import type { DomainApexProps, DomainDelegatedProps } from "./interfaces/domain.js";
5
+ /**
6
+ * @internal
7
+ * Apex domain composition — combines HostedZone, per-type DNS records, and
8
+ * certificates. Defined inline here rather than in its own file because Phase 1
9
+ * replaces this class wholesale with the user-facing `Domain` construct. Extracting
10
+ * now would be over-investment in a doomed abstraction.
11
+ *
12
+ * Exported only so pattern-layer tests can assert `instanceof ApexDomain`.
13
+ */
14
+ export declare class ApexDomain extends Construct {
15
+ readonly hostedZone: IHostedZone;
16
+ readonly hostedZoneId: string;
17
+ constructor(scope: Construct, id: string, props: DomainApexProps);
18
+ private addCertificates;
19
+ }
5
20
  export declare class DomainFactory {
6
- static build(id: string, props: DomainApexProps): (scope: Construct) => Domain;
21
+ static build(id: string, props: DomainApexProps): (scope: Construct) => ApexDomain;
7
22
  static build(id: string, props: DomainDelegatedProps): (scope: Construct) => DomainDelegation;
8
23
  }
@@ -1,16 +1,56 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DomainFactory = void 0;
4
- const domain_1 = require("../../resources/aws/networking/domain");
5
- const domainDelegation_1 = require("./domainDelegation");
6
- class DomainFactory {
1
+ import { Construct } from "constructs";
2
+ import { HostedZone } from "../../resources/aws/networking/hostedZone.js";
3
+ import { DomainCertificate } from "../../resources/aws/networking/domainCertificate.js";
4
+ import { toPascalCase } from "../../utils/capitaliseString.js";
5
+ import { DomainDelegation } from "./domainDelegation.js";
6
+ import { composeDnsRecords } from "./dnsRecordComposer.js";
7
+ /**
8
+ * @internal
9
+ * Apex domain composition — combines HostedZone, per-type DNS records, and
10
+ * certificates. Defined inline here rather than in its own file because Phase 1
11
+ * replaces this class wholesale with the user-facing `Domain` construct. Extracting
12
+ * now would be over-investment in a doomed abstraction.
13
+ *
14
+ * Exported only so pattern-layer tests can assert `instanceof ApexDomain`.
15
+ */
16
+ export class ApexDomain extends Construct {
17
+ hostedZone;
18
+ hostedZoneId;
19
+ constructor(scope, id, props) {
20
+ super(scope, id);
21
+ const zone = new HostedZone(this, "Zone", {
22
+ zoneName: props.zoneName,
23
+ hostedZoneId: props.hostedZoneId
24
+ });
25
+ this.hostedZone = zone.hostedZone;
26
+ this.hostedZoneId = zone.hostedZoneId;
27
+ if (props.records) {
28
+ composeDnsRecords(this, zone.hostedZone, props.zoneName, props.records);
29
+ }
30
+ if (props.certificates) {
31
+ this.addCertificates(props.certificates, props.zoneName);
32
+ }
33
+ }
34
+ addCertificates(certificates, zoneName) {
35
+ const safeZone = toPascalCase(zoneName.split(".").join(""));
36
+ certificates.forEach((cert, index) => {
37
+ const safeCertName = toPascalCase(cert.domainName.split(".").join(""));
38
+ new DomainCertificate(this, `${safeZone}${safeCertName}Cert${index}`, {
39
+ domainName: cert.domainName,
40
+ subjectAlternativeNames: cert.subjectAlternativeNames,
41
+ hostedZone: this.hostedZone
42
+ });
43
+ });
44
+ }
45
+ }
46
+ export class DomainFactory {
7
47
  static build(id, props) {
8
48
  return (scope) => {
9
49
  switch (props.type) {
10
50
  case "domain":
11
- return new domain_1.Domain(scope, id, props);
51
+ return new ApexDomain(scope, id, props);
12
52
  case "delegated":
13
- return new domainDelegation_1.DomainDelegation(scope, id, props);
53
+ return new DomainDelegation(scope, id, props);
14
54
  default: {
15
55
  const _exhaustive = props;
16
56
  throw new Error(`Unsupported domain type: ${String(_exhaustive.type)}`);
@@ -19,5 +59,3 @@ class DomainFactory {
19
59
  };
20
60
  }
21
61
  }
22
- exports.DomainFactory = DomainFactory;
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvZG9tYWluRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxrRUFBK0Q7QUFDL0QseURBQXNEO0FBT3RELE1BQWEsYUFBYTtJQVN4QixNQUFNLENBQUMsS0FBSyxDQUNWLEVBQVUsRUFDVixLQUFtQjtRQUVuQixPQUFPLENBQUMsS0FBZ0IsRUFBRSxFQUFFO1lBQzFCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuQixLQUFLLFFBQVE7b0JBQ1gsT0FBTyxJQUFJLGVBQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN0QyxLQUFLLFdBQVc7b0JBQ2QsT0FBTyxJQUFJLG1DQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ1IsTUFBTSxXQUFXLEdBQVUsS0FBSyxDQUFDO29CQUNqQyxNQUFNLElBQUksS0FBSyxDQUNiLDRCQUE0QixNQUFNLENBQUUsV0FBNEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN6RSxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBNUJELHNDQTRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IERvbWFpbiB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvZG9tYWluXCI7XG5pbXBvcnQgeyBEb21haW5EZWxlZ2F0aW9uIH0gZnJvbSBcIi4vZG9tYWluRGVsZWdhdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuICBEb21haW5BcGV4UHJvcHMsXG4gIERvbWFpbkRlbGVnYXRlZFByb3BzLFxuICBJRG9tYWluUHJvcHNcbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy9kb21haW5cIjtcblxuZXhwb3J0IGNsYXNzIERvbWFpbkZhY3Rvcnkge1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogRG9tYWluQXBleFByb3BzXG4gICk6IChzY29wZTogQ29uc3RydWN0KSA9PiBEb21haW47XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBEb21haW5EZWxlZ2F0ZWRQcm9wc1xuICApOiAoc2NvcGU6IENvbnN0cnVjdCkgPT4gRG9tYWluRGVsZWdhdGlvbjtcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElEb21haW5Qcm9wc1xuICApOiAoc2NvcGU6IENvbnN0cnVjdCkgPT4gRG9tYWluIHwgRG9tYWluRGVsZWdhdGlvbiB7XG4gICAgcmV0dXJuIChzY29wZTogQ29uc3RydWN0KSA9PiB7XG4gICAgICBzd2l0Y2ggKHByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImRvbWFpblwiOlxuICAgICAgICAgIHJldHVybiBuZXcgRG9tYWluKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgICAgICBjYXNlIFwiZGVsZWdhdGVkXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBEb21haW5EZWxlZ2F0aW9uKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gcHJvcHM7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFVuc3VwcG9ydGVkIGRvbWFpbiB0eXBlOiAke1N0cmluZygoX2V4aGF1c3RpdmUgYXMgSURvbWFpblByb3BzKS50eXBlKX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import type { Construct } from "constructs";
2
+ import type { DomainProps } from "./interfaces/domain.js";
3
+ /**
4
+ * Synchronous synth-time validator for `DomainProps`. Throws on hard errors
5
+ * (CDK catches and surfaces the stack trace pointing at the `new Domain(...)`
6
+ * call site). Emits CDK warnings (non-fatal) for advisories such as alias
7
+ * records carrying a runtime TTL that Route53 silently ignores.
8
+ *
9
+ * Pure: no I/O, no CDK side effects other than `Annotations.of(scope).addWarning`.
10
+ */
11
+ export declare function validateDomainProps(scope: Construct, props: DomainProps): void;