@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.
- package/LICENSE +50 -21
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -18
- package/dist/lib/app.d.ts +12 -12
- package/dist/lib/app.js +61 -56
- package/dist/lib/aspects/index.d.ts +1 -1
- package/dist/lib/aspects/index.js +1 -6
- package/dist/lib/aspects/resourceInventory.js +6 -13
- package/dist/lib/config/audit.js +1 -5
- package/dist/lib/config/aws/accessAnalyser.d.ts +11 -0
- package/dist/lib/config/aws/accessAnalyser.js +17 -0
- package/dist/lib/config/aws/accountAuditRole.js +11 -15
- package/dist/lib/config/aws/accountMonitoringRole.js +25 -29
- package/dist/lib/config/aws/alarmTopic.d.ts +8 -0
- package/dist/lib/config/aws/alarmTopic.js +19 -0
- package/dist/lib/config/aws/cloudTrail.js +4 -9
- package/dist/lib/config/aws/configRecorder.d.ts +16 -0
- package/dist/lib/config/aws/configRecorder.js +51 -0
- package/dist/lib/config/aws/configRulePreset.d.ts +13 -0
- package/dist/lib/config/aws/configRulePreset.js +62 -0
- package/dist/lib/config/aws/disasterRecovery.d.ts +1 -1
- package/dist/lib/config/aws/disasterRecovery.js +56 -73
- package/dist/lib/config/aws/ebsDefaultEncryption.d.ts +8 -0
- package/dist/lib/config/aws/ebsDefaultEncryption.js +41 -0
- package/dist/lib/config/aws/ecrDefaultImage.js +25 -30
- package/dist/lib/config/aws/eventBus.js +8 -11
- package/dist/lib/config/aws/guardDutyDetector.d.ts +16 -0
- package/dist/lib/config/aws/guardDutyDetector.js +26 -0
- package/dist/lib/config/aws/identityCenter.d.ts +1 -1
- package/dist/lib/config/aws/identityCenter.js +23 -25
- package/dist/lib/config/aws/identityCenterGroupMembership.js +18 -22
- package/dist/lib/config/aws/index.d.ts +19 -8
- package/dist/lib/config/aws/index.js +19 -25
- package/dist/lib/config/aws/inspectorEnablement.d.ts +9 -0
- package/dist/lib/config/aws/inspectorEnablement.js +51 -0
- package/dist/lib/config/aws/ipam.js +9 -13
- package/dist/lib/config/aws/oidcConnector.js +8 -12
- package/dist/lib/config/aws/platform.js +1 -5
- package/dist/lib/config/aws/s3BlockPublicAccess.d.ts +9 -0
- package/dist/lib/config/aws/s3BlockPublicAccess.js +55 -0
- package/dist/lib/config/aws/scpPreset.d.ts +21 -0
- package/dist/lib/config/aws/scpPreset.js +311 -0
- package/dist/lib/config/aws/securityBaseline.d.ts +15 -0
- package/dist/lib/config/aws/securityBaseline.js +27 -0
- package/dist/lib/config/aws/securityHubHub.d.ts +15 -0
- package/dist/lib/config/aws/securityHubHub.js +28 -0
- package/dist/lib/config/aws/securityServicesAdmin.d.ts +20 -0
- package/dist/lib/config/aws/securityServicesAdmin.js +115 -0
- package/dist/lib/config/index.d.ts +2 -2
- package/dist/lib/config/index.js +2 -21
- package/dist/lib/index.d.ts +4 -4
- package/dist/lib/index.js +5 -26
- package/dist/lib/patterns/aws/account.d.ts +17 -1
- package/dist/lib/patterns/aws/account.js +60 -33
- package/dist/lib/patterns/aws/apexDomainPattern.d.ts +26 -0
- package/dist/lib/patterns/aws/apexDomainPattern.js +91 -0
- package/dist/lib/patterns/aws/auditRole.js +13 -16
- package/dist/lib/patterns/aws/buildkite.d.ts +1 -1
- package/dist/lib/patterns/aws/buildkite.js +70 -75
- package/dist/lib/patterns/aws/cdn.d.ts +5 -5
- package/dist/lib/patterns/aws/cdn.js +22 -28
- package/dist/lib/patterns/aws/compute.d.ts +1 -1
- package/dist/lib/patterns/aws/compute.js +31 -44
- package/dist/lib/patterns/aws/computeEc2.d.ts +1 -1
- package/dist/lib/patterns/aws/computeEc2.js +11 -14
- package/dist/lib/patterns/aws/computeEcs.d.ts +18 -2
- package/dist/lib/patterns/aws/computeEcs.js +41 -31
- package/dist/lib/patterns/aws/computeLambda.d.ts +2 -2
- package/dist/lib/patterns/aws/computeLambda.js +24 -31
- package/dist/lib/patterns/aws/database.d.ts +16 -7
- package/dist/lib/patterns/aws/database.js +81 -73
- package/dist/lib/patterns/aws/delegatedDomainPattern.d.ts +17 -0
- package/dist/lib/patterns/aws/delegatedDomainPattern.js +54 -0
- package/dist/lib/patterns/aws/dnsRecordComposer.d.ts +25 -0
- package/dist/lib/patterns/aws/dnsRecordComposer.js +225 -0
- package/dist/lib/patterns/aws/domain.d.ts +32 -0
- package/dist/lib/patterns/aws/domain.js +115 -0
- package/dist/lib/patterns/aws/domainDelegation.d.ts +3 -3
- package/dist/lib/patterns/aws/domainDelegation.js +28 -37
- package/dist/lib/patterns/aws/domainFactory.d.ts +20 -5
- package/dist/lib/patterns/aws/domainFactory.js +48 -10
- package/dist/lib/patterns/aws/domainValidation.d.ts +11 -0
- package/dist/lib/patterns/aws/domainValidation.js +145 -0
- package/dist/lib/patterns/aws/externalRecordsPattern.d.ts +18 -0
- package/dist/lib/patterns/aws/externalRecordsPattern.js +141 -0
- package/dist/lib/patterns/aws/fivetranProxy.d.ts +1 -1
- package/dist/lib/patterns/aws/fivetranProxy.js +6 -11
- package/dist/lib/patterns/aws/index.d.ts +21 -19
- package/dist/lib/patterns/aws/index.js +25 -36
- package/dist/lib/patterns/aws/interfaces/cdn.js +1 -5
- package/dist/lib/patterns/aws/interfaces/compute.js +4 -11
- package/dist/lib/patterns/aws/interfaces/connector.js +1 -15
- package/dist/lib/patterns/aws/interfaces/database.d.ts +1 -1
- package/dist/lib/patterns/aws/interfaces/database.js +6 -15
- package/dist/lib/patterns/aws/interfaces/domain.d.ts +80 -2
- package/dist/lib/patterns/aws/interfaces/domain.js +1 -6
- package/dist/lib/patterns/aws/interfaces/index.js +8 -41
- package/dist/lib/patterns/aws/interfaces/messaging.js +4 -11
- package/dist/lib/patterns/aws/interfaces/organisation.d.ts +1 -1
- package/dist/lib/patterns/aws/interfaces/organisation.js +4 -11
- package/dist/lib/patterns/aws/interfaces/pattern.js +2 -7
- package/dist/lib/patterns/aws/interfaces/storage.js +1 -5
- package/dist/lib/patterns/aws/managedIdentityCenter.js +7 -12
- package/dist/lib/patterns/aws/messaging.d.ts +7 -7
- package/dist/lib/patterns/aws/messaging.js +22 -33
- package/dist/lib/patterns/aws/network.d.ts +2 -2
- package/dist/lib/patterns/aws/network.js +9 -14
- package/dist/lib/patterns/aws/organisation.d.ts +6 -2
- package/dist/lib/patterns/aws/organisation.js +34 -35
- package/dist/lib/patterns/aws/organisationFactory.d.ts +3 -3
- package/dist/lib/patterns/aws/organisationFactory.js +7 -12
- package/dist/lib/patterns/aws/pattern.js +6 -12
- package/dist/lib/patterns/aws/payload.js +73 -63
- package/dist/lib/patterns/aws/platform.d.ts +6 -3
- package/dist/lib/patterns/aws/platform.js +15 -15
- package/dist/lib/patterns/aws/storage.d.ts +6 -4
- package/dist/lib/patterns/aws/storage.js +35 -40
- package/dist/lib/patterns/aws/subdomainHostedZone.js +11 -16
- package/dist/lib/patterns/aws/targets/fjallTargets.d.ts +37 -0
- package/dist/lib/patterns/aws/targets/fjallTargets.js +66 -0
- package/dist/lib/patterns/aws/targets/index.d.ts +2 -0
- package/dist/lib/patterns/aws/targets/index.js +2 -0
- package/dist/lib/patterns/aws/targets/targetResolution.d.ts +76 -0
- package/dist/lib/patterns/aws/targets/targetResolution.js +119 -0
- package/dist/lib/patterns/index.d.ts +1 -0
- package/dist/lib/patterns/index.js +1 -0
- package/dist/lib/resources/aws/analytics/clickhouse.d.ts +15 -0
- package/dist/lib/resources/aws/analytics/clickhouse.js +292 -0
- package/dist/lib/resources/aws/analytics/clickhouseConstants.d.ts +73 -0
- package/dist/lib/resources/aws/analytics/clickhouseConstants.js +87 -0
- package/dist/lib/resources/aws/analytics/clickhouseSecurityGroup.d.ts +13 -0
- package/dist/lib/resources/aws/analytics/clickhouseSecurityGroup.js +28 -0
- package/dist/lib/resources/aws/analytics/clickhouseTypes.d.ts +47 -0
- package/dist/lib/resources/aws/analytics/clickhouseTypes.js +1 -0
- package/dist/lib/resources/aws/analytics/clickhouseUserData.d.ts +5 -0
- package/dist/lib/resources/aws/analytics/clickhouseUserData.js +248 -0
- package/dist/lib/resources/aws/analytics/index.d.ts +2 -0
- package/dist/lib/resources/aws/analytics/index.js +1 -0
- package/dist/lib/resources/aws/audit/auditRole.js +10 -15
- package/dist/lib/resources/aws/audit/index.d.ts +1 -1
- package/dist/lib/resources/aws/audit/index.js +1 -6
- package/dist/lib/resources/aws/backup/backupPlan.d.ts +1 -1
- package/dist/lib/resources/aws/backup/backupPlan.js +14 -16
- package/dist/lib/resources/aws/backup/backupVault.d.ts +1 -1
- package/dist/lib/resources/aws/backup/backupVault.js +13 -15
- package/dist/lib/resources/aws/backup/index.d.ts +2 -2
- package/dist/lib/resources/aws/backup/index.js +2 -19
- package/dist/lib/resources/aws/base/awsStack.js +17 -19
- package/dist/lib/resources/aws/base/index.d.ts +1 -1
- package/dist/lib/resources/aws/base/index.js +1 -18
- package/dist/lib/resources/aws/cdn/cloudFront.js +40 -42
- package/dist/lib/resources/aws/cdn/index.d.ts +1 -1
- package/dist/lib/resources/aws/cdn/index.js +1 -18
- package/dist/lib/resources/aws/compute/ec2.js +39 -39
- package/dist/lib/resources/aws/compute/ecs.d.ts +18 -396
- package/dist/lib/resources/aws/compute/ecs.js +105 -976
- package/dist/lib/resources/aws/compute/ecsCapacityProviderAspect.d.ts +22 -0
- package/dist/lib/resources/aws/compute/ecsCapacityProviderAspect.js +35 -0
- package/dist/lib/resources/aws/compute/ecsConstants.d.ts +20 -0
- package/dist/lib/resources/aws/compute/ecsConstants.js +49 -0
- package/dist/lib/resources/aws/compute/ecsContext.d.ts +12 -0
- package/dist/lib/resources/aws/compute/ecsContext.js +1 -0
- package/dist/lib/resources/aws/compute/ecsImages.d.ts +4 -0
- package/dist/lib/resources/aws/compute/ecsImages.js +35 -0
- package/dist/lib/resources/aws/compute/ecsNetworking.d.ts +28 -0
- package/dist/lib/resources/aws/compute/ecsNetworking.js +290 -0
- package/dist/lib/resources/aws/compute/ecsRoles.d.ts +15 -0
- package/dist/lib/resources/aws/compute/ecsRoles.js +110 -0
- package/dist/lib/resources/aws/compute/ecsServiceFactory.d.ts +33 -0
- package/dist/lib/resources/aws/compute/ecsServiceFactory.js +183 -0
- package/dist/lib/resources/aws/compute/ecsTaskDefinition.d.ts +30 -0
- package/dist/lib/resources/aws/compute/ecsTaskDefinition.js +168 -0
- package/dist/lib/resources/aws/compute/ecsTypes.d.ts +337 -0
- package/dist/lib/resources/aws/compute/ecsTypes.js +10 -0
- package/dist/lib/resources/aws/compute/ecsValidation.d.ts +18 -0
- package/dist/lib/resources/aws/compute/ecsValidation.js +72 -0
- package/dist/lib/resources/aws/compute/index.d.ts +3 -3
- package/dist/lib/resources/aws/compute/index.js +3 -20
- package/dist/lib/resources/aws/compute/lambda.d.ts +10 -2
- package/dist/lib/resources/aws/compute/lambda.js +81 -71
- package/dist/lib/resources/aws/database/dynamodb.js +24 -27
- package/dist/lib/resources/aws/database/index.d.ts +7 -7
- package/dist/lib/resources/aws/database/index.js +14 -33
- package/dist/lib/resources/aws/database/rdsAurora.d.ts +10 -2
- package/dist/lib/resources/aws/database/rdsAurora.js +76 -61
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +2 -2
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +24 -21
- package/dist/lib/resources/aws/database/rdsDefaults.js +3 -7
- package/dist/lib/resources/aws/database/rdsHelpers.d.ts +2 -2
- package/dist/lib/resources/aws/database/rdsHelpers.js +21 -29
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +11 -3
- package/dist/lib/resources/aws/database/rdsInstance.js +101 -83
- package/dist/lib/resources/aws/database/rdsProxyOutput.js +5 -9
- package/dist/lib/resources/aws/iam/delegationRole.d.ts +18 -0
- package/dist/lib/resources/aws/iam/delegationRole.js +60 -0
- package/dist/lib/resources/aws/iam/identityCenter/assignment.js +4 -9
- package/dist/lib/resources/aws/iam/identityCenter/group.js +5 -9
- package/dist/lib/resources/aws/iam/identityCenter/index.d.ts +3 -3
- package/dist/lib/resources/aws/iam/identityCenter/index.js +3 -20
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -1
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +5 -9
- package/dist/lib/resources/aws/iam/index.d.ts +5 -4
- package/dist/lib/resources/aws/iam/index.js +5 -21
- package/dist/lib/resources/aws/iam/instanceProfile.js +2 -7
- package/dist/lib/resources/aws/iam/managedPolicy.js +2 -7
- package/dist/lib/resources/aws/iam/policy.js +2 -7
- package/dist/lib/resources/aws/iam/role.js +2 -7
- package/dist/lib/resources/aws/index.d.ts +7 -7
- package/dist/lib/resources/aws/index.js +7 -24
- package/dist/lib/resources/aws/logging/cloudTrail.d.ts +1 -1
- package/dist/lib/resources/aws/logging/cloudTrail.js +18 -22
- package/dist/lib/resources/aws/logging/index.d.ts +2 -2
- package/dist/lib/resources/aws/logging/index.js +2 -19
- package/dist/lib/resources/aws/logging/logGroup.js +4 -10
- package/dist/lib/resources/aws/messaging/eventbridge.js +11 -14
- package/dist/lib/resources/aws/messaging/index.d.ts +4 -4
- package/dist/lib/resources/aws/messaging/index.js +4 -21
- package/dist/lib/resources/aws/messaging/sns.js +11 -14
- package/dist/lib/resources/aws/messaging/sqs.js +32 -34
- package/dist/lib/resources/aws/messaging/utils.d.ts +1 -1
- package/dist/lib/resources/aws/messaging/utils.js +1 -6
- package/dist/lib/resources/aws/monitoring/alarmDefaults.d.ts +36 -0
- package/dist/lib/resources/aws/monitoring/alarmDefaults.js +34 -0
- package/dist/lib/resources/aws/monitoring/ecsAlarms.d.ts +21 -0
- package/dist/lib/resources/aws/monitoring/ecsAlarms.js +88 -0
- package/dist/lib/resources/aws/monitoring/index.d.ts +4 -0
- package/dist/lib/resources/aws/monitoring/index.js +4 -5
- package/dist/lib/resources/aws/monitoring/lambdaAlarms.d.ts +18 -0
- package/dist/lib/resources/aws/monitoring/lambdaAlarms.js +44 -0
- package/dist/lib/resources/aws/monitoring/rdsAlarms.d.ts +20 -0
- package/dist/lib/resources/aws/monitoring/rdsAlarms.js +52 -0
- package/dist/lib/resources/aws/networking/crossAccountDelegationRecord.d.ts +17 -0
- package/dist/lib/resources/aws/networking/crossAccountDelegationRecord.js +26 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aRecord.js +21 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aaaaRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aaaaRecord.js +22 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aliasRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aliasRecord.js +23 -0
- package/dist/lib/resources/aws/networking/dnsRecord/caaRecord.d.ts +17 -0
- package/dist/lib/resources/aws/networking/dnsRecord/caaRecord.js +21 -0
- package/dist/lib/resources/aws/networking/dnsRecord/cnameRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/cnameRecord.js +22 -0
- package/dist/lib/resources/aws/networking/dnsRecord/dnsRecordBase.d.ts +17 -0
- package/dist/lib/resources/aws/networking/dnsRecord/dnsRecordBase.js +17 -0
- package/dist/lib/resources/aws/networking/dnsRecord/index.d.ts +10 -0
- package/dist/lib/resources/aws/networking/dnsRecord/index.js +10 -0
- package/dist/lib/resources/aws/networking/dnsRecord/mxRecord.d.ts +16 -0
- package/dist/lib/resources/aws/networking/dnsRecord/mxRecord.js +21 -0
- package/dist/lib/resources/aws/networking/dnsRecord/nsRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/nsRecord.js +21 -0
- package/dist/lib/resources/aws/networking/dnsRecord/srvRecord.d.ts +18 -0
- package/dist/lib/resources/aws/networking/dnsRecord/srvRecord.js +21 -0
- package/dist/lib/resources/aws/networking/dnsRecord/txtRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/txtRecord.js +21 -0
- package/dist/lib/resources/aws/networking/domain.d.ts +1 -1
- package/dist/lib/resources/aws/networking/domain.js +32 -34
- package/dist/lib/resources/aws/networking/domainCertificate.d.ts +8 -3
- package/dist/lib/resources/aws/networking/domainCertificate.js +22 -16
- package/dist/lib/resources/aws/networking/hostedZone.d.ts +23 -19
- package/dist/lib/resources/aws/networking/hostedZone.js +70 -134
- package/dist/lib/resources/aws/networking/index.d.ts +8 -7
- package/dist/lib/resources/aws/networking/index.js +8 -24
- package/dist/lib/resources/aws/networking/ipam.js +2 -7
- package/dist/lib/resources/aws/networking/ipamPool.d.ts +1 -1
- package/dist/lib/resources/aws/networking/ipamPool.js +45 -55
- package/dist/lib/resources/aws/networking/securityGroup.js +2 -7
- package/dist/lib/resources/aws/networking/vpc.d.ts +1 -1
- package/dist/lib/resources/aws/networking/vpc.js +17 -21
- package/dist/lib/resources/aws/organisation/costAllocationTagActivator.d.ts +1 -1
- package/dist/lib/resources/aws/organisation/costAllocationTagActivator.js +11 -15
- package/dist/lib/resources/aws/organisation/index.d.ts +5 -5
- package/dist/lib/resources/aws/organisation/index.js +4 -12
- package/dist/lib/resources/aws/organisation/organisation.js +5 -7
- package/dist/lib/resources/aws/organisation/organisationAccount.js +7 -10
- package/dist/lib/resources/aws/organisation/organisationPolicy.js +5 -9
- package/dist/lib/resources/aws/organisation/organisationalUnit.js +1 -3
- package/dist/lib/resources/aws/secrets/alias.js +2 -7
- package/dist/lib/resources/aws/secrets/index.d.ts +4 -4
- package/dist/lib/resources/aws/secrets/index.js +4 -21
- package/dist/lib/resources/aws/secrets/kms.js +15 -18
- package/dist/lib/resources/aws/secrets/parameter.d.ts +3 -3
- package/dist/lib/resources/aws/secrets/parameter.js +19 -22
- package/dist/lib/resources/aws/secrets/secret.d.ts +2 -2
- package/dist/lib/resources/aws/secrets/secret.js +12 -14
- package/dist/lib/resources/aws/storage/ecr.d.ts +2 -2
- package/dist/lib/resources/aws/storage/ecr.js +7 -13
- package/dist/lib/resources/aws/storage/index.d.ts +2 -2
- package/dist/lib/resources/aws/storage/index.js +2 -19
- package/dist/lib/resources/aws/storage/s3.d.ts +1 -1
- package/dist/lib/resources/aws/storage/s3.js +24 -12
- package/dist/lib/resources/aws/utilities/awsCustomResource.js +3 -7
- package/dist/lib/resources/aws/utilities/codeBuild.js +7 -12
- package/dist/lib/resources/aws/utilities/customResource.js +14 -17
- package/dist/lib/resources/aws/utilities/customResourceProvider.js +2 -7
- package/dist/lib/resources/aws/utilities/index.d.ts +5 -5
- package/dist/lib/resources/aws/utilities/index.js +5 -22
- package/dist/lib/resources/aws/utilities/resourceShare.js +2 -7
- package/dist/lib/resources/index.d.ts +1 -1
- package/dist/lib/resources/index.js +1 -18
- package/dist/lib/types.js +1 -3
- package/dist/lib/utils/accountsUtils.d.ts +5 -0
- package/dist/lib/utils/accountsUtils.js +18 -0
- package/dist/lib/utils/addSuffixToEmail.js +1 -5
- package/dist/lib/utils/backupTierMapping.js +2 -6
- package/dist/lib/utils/capitaliseString.js +1 -10
- package/dist/lib/utils/connections.js +9 -13
- package/dist/lib/utils/connector.js +10 -23
- package/dist/lib/utils/constructMap.d.ts +33 -0
- package/dist/lib/utils/constructMap.js +154 -0
- package/dist/lib/utils/databaseTypes.js +4 -10
- package/dist/lib/utils/dnsRecords.d.ts +1 -1
- package/dist/lib/utils/dnsRecords.js +23 -27
- package/dist/lib/utils/domainTypes.d.ts +0 -1
- package/dist/lib/utils/domainTypes.js +2 -10
- package/dist/lib/utils/env.js +14 -26
- package/dist/lib/utils/getAccountId.js +3 -7
- package/dist/lib/utils/getAsync.js +7 -10
- package/dist/lib/utils/getConfig.d.ts +0 -2
- package/dist/lib/utils/getConfig.js +29 -47
- package/dist/lib/utils/getStackOutput.js +4 -8
- package/dist/lib/utils/index.d.ts +12 -12
- package/dist/lib/utils/index.js +12 -29
- package/dist/lib/utils/manifestWriter.d.ts +14 -3
- package/dist/lib/utils/manifestWriter.js +60 -43
- package/dist/lib/utils/orgConfigParser.d.ts +14 -0
- package/dist/lib/utils/orgConfigParser.js +49 -0
- package/dist/lib/utils/removalPolicy.js +5 -9
- package/dist/lib/utils/resourceNaming.js +11 -16
- package/dist/lib/utils/standardTagsAspect.js +9 -16
- package/dist/lib/utils/stripAndCamelCase.js +1 -5
- package/dist/lib/utils/validationLogger.js +12 -18
- package/dist/lib/utils/vpcUtils.js +5 -10
- package/package.json +25 -8
- package/dist/lib/config/aws/accountId.d.ts +0 -6
- package/dist/lib/config/aws/accountId.js +0 -32
- package/dist/lib/config/aws/backupGlobalSettings.d.ts +0 -29
- package/dist/lib/config/aws/backupGlobalSettings.js +0 -49
- package/dist/lib/config/aws/costAllocationTags.d.ts +0 -12
- package/dist/lib/config/aws/costAllocationTags.js +0 -47
- package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +0 -8
- package/dist/lib/config/aws/ipamDelegateAdmin.js +0 -57
- package/dist/lib/config/aws/ipamPoolId.d.ts +0 -16
- package/dist/lib/config/aws/ipamPoolId.js +0 -42
- package/dist/lib/config/aws/organisation.d.ts +0 -30
- package/dist/lib/config/aws/organisation.js +0 -92
- package/dist/lib/config/aws/organisationId.d.ts +0 -7
- package/dist/lib/config/aws/organisationId.js +0 -45
- package/dist/lib/config/aws/organisationsAccess.d.ts +0 -10
- package/dist/lib/config/aws/organisationsAccess.js +0 -49
- package/dist/lib/config/aws/ramSharing.d.ts +0 -4
- package/dist/lib/config/aws/ramSharing.js +0 -34
- package/dist/lib/config/monitoring.d.ts +0 -18
- package/dist/lib/config/monitoring.js +0 -22
- package/dist/lib/patterns/aws/connections.d.ts +0 -46
- package/dist/lib/patterns/aws/connections.js +0 -159
- package/dist/lib/patterns/aws/hostedZone.d.ts +0 -28
- package/dist/lib/patterns/aws/hostedZone.js +0 -150
- package/dist/lib/patterns/aws/managedAccount.d.ts +0 -9
- package/dist/lib/patterns/aws/managedAccount.js +0 -55
- package/dist/lib/patterns/aws/managedOrganisation.d.ts +0 -36
- package/dist/lib/patterns/aws/managedOrganisation.js +0 -97
- package/dist/lib/patterns/aws/managedPlatform.d.ts +0 -12
- package/dist/lib/patterns/aws/managedPlatform.js +0 -29
- package/dist/lib/resources/aws/database/database.d.ts +0 -14
- package/dist/lib/resources/aws/database/database.js +0 -28
- package/dist/lib/resources/aws/database/databaseInstance.d.ts +0 -15
- package/dist/lib/resources/aws/database/databaseInstance.js +0 -30
- package/dist/lib/resources/aws/database/migrationLambda.d.ts +0 -80
- package/dist/lib/resources/aws/database/migrationLambda.js +0 -119
- package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.d.ts +0 -13
- package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +0 -51
- package/dist/lib/resources/aws/iam/securityGroup.d.ts +0 -5
- package/dist/lib/resources/aws/iam/securityGroup.js +0 -14
- package/dist/lib/resources/aws/monitoring/monitoringRole.d.ts +0 -29
- package/dist/lib/resources/aws/monitoring/monitoringRole.js +0 -120
- package/dist/lib/utils/capitalizeString.d.ts +0 -12
- 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
|
|
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:
|
|
6
|
+
readonly hostedZone: IHostedZone;
|
|
7
7
|
constructor(scope: Construct, id: string, props: DomainDelegatedProps);
|
|
8
8
|
}
|
|
@@ -1,54 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
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.
|
|
22
|
-
|
|
22
|
+
this.hostedZone = zone.hostedZone;
|
|
23
|
+
this.hostedZoneId = zone.hostedZoneId;
|
|
24
|
+
new CrossAccountDelegationRecord(this, `${safeZone}DelegationRecord`, {
|
|
23
25
|
delegationRole: hostedZoneDelegationRole,
|
|
24
|
-
delegatedZone:
|
|
26
|
+
delegatedZone: zone.hostedZone,
|
|
27
|
+
delegatedZoneName: props.zoneName,
|
|
25
28
|
parentHostedZoneName: props.parentZoneName
|
|
26
29
|
});
|
|
27
|
-
const safeKey =
|
|
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 =
|
|
41
|
-
new
|
|
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:
|
|
37
|
+
hostedZone: zone.hostedZone
|
|
45
38
|
});
|
|
46
39
|
});
|
|
47
40
|
}
|
|
48
41
|
if (props.records) {
|
|
49
|
-
(
|
|
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 {
|
|
2
|
-
import {
|
|
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) =>
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
|
51
|
+
return new ApexDomain(scope, id, props);
|
|
12
52
|
case "delegated":
|
|
13
|
-
return new
|
|
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;
|