@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
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
const capitaliseString_js_1 = require("../../utils/capitaliseString.js");
|
|
14
|
-
const aws_rds_1 = require("aws-cdk-lib/aws-rds");
|
|
15
|
-
const aws_cdk_lib_2 = require("aws-cdk-lib");
|
|
16
|
-
var databaseTypes_1 = require("../../utils/databaseTypes");
|
|
17
|
-
Object.defineProperty(exports, "isAwsManagedKey", { enumerable: true, get: function () { return databaseTypes_1.isAwsManagedKey; } });
|
|
18
|
-
Object.defineProperty(exports, "isCMKRequested", { enumerable: true, get: function () { return databaseTypes_1.isCMKRequested; } });
|
|
19
|
-
Object.defineProperty(exports, "AWS_MANAGED", { enumerable: true, get: function () { return databaseTypes_1.AWS_MANAGED; } });
|
|
20
|
-
Object.defineProperty(exports, "USE_CMK", { enumerable: true, get: function () { return databaseTypes_1.USE_CMK; } });
|
|
21
|
-
exports.DATABASE_ENGINE_CONFIG = Object.freeze({
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { CfnOutput, Fn, Stack } from "aws-cdk-lib";
|
|
3
|
+
import { Topic } from "aws-cdk-lib/aws-sns";
|
|
4
|
+
import { RdsAurora, RdsInstance } from "../../resources/aws/database/index.js";
|
|
5
|
+
import { RdsAuroraGlobal } from "../../resources/aws/database/rdsAuroraGlobal.js";
|
|
6
|
+
import { DynamoDBTable } from "../../resources/aws/database/dynamodb.js";
|
|
7
|
+
import { FjallLogger, warnIfPropertiesIgnored } from "../../utils/validationLogger.js";
|
|
8
|
+
import { toPascalCase } from "../../utils/capitaliseString.js";
|
|
9
|
+
import { DatabaseClusterEngine, DatabaseInstanceEngine, AuroraPostgresEngineVersion, AuroraMysqlEngineVersion, PostgresEngineVersion, MysqlEngineVersion } from "aws-cdk-lib/aws-rds";
|
|
10
|
+
import { Duration } from "aws-cdk-lib";
|
|
11
|
+
export { isAwsManagedKey, isCMKRequested, AWS_MANAGED, USE_CMK } from "../../utils/databaseTypes.js";
|
|
12
|
+
export const DATABASE_ENGINE_CONFIG = Object.freeze({
|
|
22
13
|
postgresql: {
|
|
23
14
|
aurora: { version: "16.6", majorVersion: "16" },
|
|
24
15
|
instance: { version: "17.5", majorVersion: "17" },
|
|
@@ -37,40 +28,40 @@ exports.DATABASE_ENGINE_CONFIG = Object.freeze({
|
|
|
37
28
|
});
|
|
38
29
|
const AURORA_ENGINE_FACTORIES = {
|
|
39
30
|
postgresql: () => {
|
|
40
|
-
const { version, majorVersion } =
|
|
41
|
-
return
|
|
42
|
-
version:
|
|
31
|
+
const { version, majorVersion } = DATABASE_ENGINE_CONFIG.postgresql.aurora;
|
|
32
|
+
return DatabaseClusterEngine.auroraPostgres({
|
|
33
|
+
version: AuroraPostgresEngineVersion.of(version, majorVersion)
|
|
43
34
|
});
|
|
44
35
|
},
|
|
45
36
|
mysql: () => {
|
|
46
|
-
const { version, majorVersion } =
|
|
47
|
-
return
|
|
48
|
-
version:
|
|
37
|
+
const { version, majorVersion } = DATABASE_ENGINE_CONFIG.mysql.aurora;
|
|
38
|
+
return DatabaseClusterEngine.auroraMysql({
|
|
39
|
+
version: AuroraMysqlEngineVersion.of(version, majorVersion)
|
|
49
40
|
});
|
|
50
41
|
}
|
|
51
42
|
};
|
|
52
43
|
const INSTANCE_ENGINE_FACTORIES = {
|
|
53
44
|
postgresql: () => {
|
|
54
|
-
const { version, majorVersion } =
|
|
55
|
-
return
|
|
56
|
-
version:
|
|
45
|
+
const { version, majorVersion } = DATABASE_ENGINE_CONFIG.postgresql.instance;
|
|
46
|
+
return DatabaseInstanceEngine.postgres({
|
|
47
|
+
version: PostgresEngineVersion.of(version, majorVersion)
|
|
57
48
|
});
|
|
58
49
|
},
|
|
59
50
|
mysql: () => {
|
|
60
|
-
const { version, majorVersion } =
|
|
61
|
-
return
|
|
62
|
-
version:
|
|
51
|
+
const { version, majorVersion } = DATABASE_ENGINE_CONFIG.mysql.instance;
|
|
52
|
+
return DatabaseInstanceEngine.mysql({
|
|
53
|
+
version: MysqlEngineVersion.of(version, majorVersion)
|
|
63
54
|
});
|
|
64
55
|
}
|
|
65
56
|
};
|
|
66
|
-
function getAuroraClusterEngine(engine) {
|
|
57
|
+
export function getAuroraClusterEngine(engine) {
|
|
67
58
|
return AURORA_ENGINE_FACTORIES[engine]();
|
|
68
59
|
}
|
|
69
|
-
function getInstanceEngine(engine) {
|
|
60
|
+
export function getInstanceEngine(engine) {
|
|
70
61
|
return INSTANCE_ENGINE_FACTORIES[engine]();
|
|
71
62
|
}
|
|
72
|
-
function getEngineConfig(engine) {
|
|
73
|
-
const config =
|
|
63
|
+
export function getEngineConfig(engine) {
|
|
64
|
+
const config = DATABASE_ENGINE_CONFIG[engine];
|
|
74
65
|
return {
|
|
75
66
|
defaultUsername: config.defaultUsername,
|
|
76
67
|
sslParameters: config.sslParameters,
|
|
@@ -84,14 +75,14 @@ function validateDynamoDBProps(props) {
|
|
|
84
75
|
// Validate provisioned capacity
|
|
85
76
|
if (props.billingMode === "PROVISIONED") {
|
|
86
77
|
if (!props.readCapacity || !props.writeCapacity) {
|
|
87
|
-
|
|
78
|
+
FjallLogger.warn("'billingMode' is PROVISIONED but capacity not specified. " +
|
|
88
79
|
"Using default values. Consider specifying 'readCapacity' and 'writeCapacity'.");
|
|
89
80
|
}
|
|
90
81
|
}
|
|
91
82
|
// Warn about capacity with on-demand billing
|
|
92
83
|
if (props.billingMode !== "PROVISIONED") {
|
|
93
84
|
if (props.readCapacity || props.writeCapacity) {
|
|
94
|
-
|
|
85
|
+
FjallLogger.warn("'readCapacity' or 'writeCapacity' specified but 'billingMode' " +
|
|
95
86
|
"is not PROVISIONED. Capacity settings will be ignored.");
|
|
96
87
|
}
|
|
97
88
|
}
|
|
@@ -101,7 +92,7 @@ function validateDynamoDBProps(props) {
|
|
|
101
92
|
for (const gsi of props.globalSecondaryIndexes) {
|
|
102
93
|
if (gsi.partitionKey.name === tablePartitionKey &&
|
|
103
94
|
gsi.sortKey?.name === props.sortKey?.name) {
|
|
104
|
-
|
|
95
|
+
FjallLogger.warn(`GSI '${gsi.indexName}' has the same key schema as the table. ` +
|
|
105
96
|
"This may not provide the query flexibility you need.");
|
|
106
97
|
}
|
|
107
98
|
}
|
|
@@ -119,11 +110,11 @@ function validateRelationalDatabaseProps(props) {
|
|
|
119
110
|
"Specify the AWS region where the primary cluster will be created.");
|
|
120
111
|
}
|
|
121
112
|
// Instance-only options on Aurora/GlobalAurora
|
|
122
|
-
|
|
113
|
+
warnIfPropertiesIgnored(props, ["readReplica", "multiAz", "allocatedStorage"], "Instance", "Instance database");
|
|
123
114
|
// Aurora-only options on Instance
|
|
124
|
-
|
|
115
|
+
warnIfPropertiesIgnored(props, ["readers", "writer", "backupRetention"], ["Aurora", "GlobalAurora"], "Aurora database");
|
|
125
116
|
// GlobalAurora-only options on non-global databases
|
|
126
|
-
|
|
117
|
+
warnIfPropertiesIgnored(props, ["primaryRegion", "secondaryRegions", "enableGlobalWriteForwarding"], "GlobalAurora", "GlobalAurora database");
|
|
127
118
|
}
|
|
128
119
|
/**
|
|
129
120
|
* Validates database props and logs warnings for ignored or misconfigured options.
|
|
@@ -157,7 +148,7 @@ function validateDatabaseProps(props) {
|
|
|
157
148
|
* cache.getTableName(); // Available
|
|
158
149
|
* cache.grantReadWriteData(lambda); // Available
|
|
159
150
|
*/
|
|
160
|
-
class DatabaseFactory {
|
|
151
|
+
export class DatabaseFactory {
|
|
161
152
|
static build(id, props) {
|
|
162
153
|
return (app, scope) => {
|
|
163
154
|
validateDatabaseProps(props);
|
|
@@ -172,7 +163,6 @@ class DatabaseFactory {
|
|
|
172
163
|
};
|
|
173
164
|
}
|
|
174
165
|
}
|
|
175
|
-
exports.DatabaseFactory = DatabaseFactory;
|
|
176
166
|
/**
|
|
177
167
|
* DynamoDB database wrapper implementing IDynamoDBDatabase interface.
|
|
178
168
|
* Provides type-safe access to DynamoDB table operations.
|
|
@@ -184,11 +174,13 @@ exports.DatabaseFactory = DatabaseFactory;
|
|
|
184
174
|
* }));
|
|
185
175
|
* cache.grantReadWriteData(lambda);
|
|
186
176
|
*/
|
|
187
|
-
class DynamoDBDatabase extends
|
|
177
|
+
export class DynamoDBDatabase extends Construct {
|
|
178
|
+
databaseType = "DynamoDB";
|
|
179
|
+
connectorType = "dynamodb";
|
|
180
|
+
id;
|
|
181
|
+
table;
|
|
188
182
|
constructor(scope, id, props) {
|
|
189
183
|
super(scope, id);
|
|
190
|
-
this.databaseType = "DynamoDB";
|
|
191
|
-
this.connectorType = "dynamodb";
|
|
192
184
|
this.id = id;
|
|
193
185
|
const tableProps = {
|
|
194
186
|
partitionKey: props.partitionKey,
|
|
@@ -203,7 +195,7 @@ class DynamoDBDatabase extends constructs_1.Construct {
|
|
|
203
195
|
encryption: props.encryption,
|
|
204
196
|
removalPolicy: props.removalPolicy
|
|
205
197
|
};
|
|
206
|
-
this.table = new
|
|
198
|
+
this.table = new DynamoDBTable(this, id, tableProps);
|
|
207
199
|
}
|
|
208
200
|
getTableName() {
|
|
209
201
|
return this.table.getTableName();
|
|
@@ -233,7 +225,6 @@ class DynamoDBDatabase extends constructs_1.Construct {
|
|
|
233
225
|
return this.table.grantStreamRead(grantee);
|
|
234
226
|
}
|
|
235
227
|
}
|
|
236
|
-
exports.DynamoDBDatabase = DynamoDBDatabase;
|
|
237
228
|
/**
|
|
238
229
|
* Relational database wrapper implementing IRelationalDatabase interface.
|
|
239
230
|
* Supports Aurora, RDS Instance, and GlobalAurora database types.
|
|
@@ -245,10 +236,17 @@ exports.DynamoDBDatabase = DynamoDBDatabase;
|
|
|
245
236
|
* }));
|
|
246
237
|
* db.grantConnect(lambda);
|
|
247
238
|
*/
|
|
248
|
-
class RelationalDatabase extends
|
|
239
|
+
export class RelationalDatabase extends Construct {
|
|
240
|
+
id;
|
|
241
|
+
scope;
|
|
242
|
+
vpc;
|
|
243
|
+
databaseType;
|
|
244
|
+
connectorType = "relational";
|
|
245
|
+
connections;
|
|
246
|
+
_databaseName;
|
|
247
|
+
database;
|
|
249
248
|
constructor(scope, id, props) {
|
|
250
249
|
super(scope, id);
|
|
251
|
-
this.connectorType = "relational";
|
|
252
250
|
this.id = id;
|
|
253
251
|
this.scope = scope;
|
|
254
252
|
this.databaseType = props.type;
|
|
@@ -259,6 +257,17 @@ class RelationalDatabase extends constructs_1.Construct {
|
|
|
259
257
|
this._databaseName = props.databaseName;
|
|
260
258
|
this.addDatabase(props);
|
|
261
259
|
}
|
|
260
|
+
resolveAlertsTopic(alertsTopic) {
|
|
261
|
+
if (alertsTopic === undefined)
|
|
262
|
+
return undefined;
|
|
263
|
+
if (typeof alertsTopic === "string") {
|
|
264
|
+
const arn = alertsTopic.startsWith("import:")
|
|
265
|
+
? Fn.importValue(alertsTopic.slice("import:".length))
|
|
266
|
+
: alertsTopic;
|
|
267
|
+
return Topic.fromTopicArn(this, "AlertsTopic", arn);
|
|
268
|
+
}
|
|
269
|
+
return alertsTopic;
|
|
270
|
+
}
|
|
262
271
|
addDatabase(props) {
|
|
263
272
|
switch (props.type) {
|
|
264
273
|
case "Aurora":
|
|
@@ -283,10 +292,10 @@ class RelationalDatabase extends constructs_1.Construct {
|
|
|
283
292
|
const resolvedEngine = props.engine ?? getAuroraClusterEngine(resolvedDatabaseEngine);
|
|
284
293
|
const engineConfig = getEngineConfig(resolvedDatabaseEngine);
|
|
285
294
|
if (props.publiclyAccessible) {
|
|
286
|
-
|
|
295
|
+
FjallLogger.warn(`Aurora database '${props.databaseName}' is configured with public accessibility. ` +
|
|
287
296
|
"This is a security risk and should only be used for development.");
|
|
288
297
|
}
|
|
289
|
-
this.database = new
|
|
298
|
+
this.database = new RdsAurora(this, `${props.databaseName}Rds`, {
|
|
290
299
|
vpc: props.vpc,
|
|
291
300
|
databaseName: props.databaseName,
|
|
292
301
|
engine: resolvedEngine,
|
|
@@ -306,7 +315,10 @@ class RelationalDatabase extends constructs_1.Construct {
|
|
|
306
315
|
snapshotUsername: props.snapshotUsername,
|
|
307
316
|
allowVpcAccess: props.allowVpcAccess,
|
|
308
317
|
publiclyAccessible: props.publiclyAccessible,
|
|
309
|
-
allowedIpCidr: props.allowedIpCidr
|
|
318
|
+
allowedIpCidr: props.allowedIpCidr,
|
|
319
|
+
alertsTopic: this.resolveAlertsTopic(props.alertsTopic),
|
|
320
|
+
alarms: props.alarms,
|
|
321
|
+
applicationId: props.applicationId
|
|
310
322
|
});
|
|
311
323
|
this.connections = this.database.connections;
|
|
312
324
|
this.addDatabaseOutputs(props);
|
|
@@ -319,7 +331,7 @@ class RelationalDatabase extends constructs_1.Construct {
|
|
|
319
331
|
const resolvedDatabaseEngine = props.databaseEngine ?? "postgresql";
|
|
320
332
|
const resolvedEngine = props.engine ?? getAuroraClusterEngine(resolvedDatabaseEngine);
|
|
321
333
|
const engineConfig = getEngineConfig(resolvedDatabaseEngine);
|
|
322
|
-
this.database = new
|
|
334
|
+
this.database = new RdsAuroraGlobal(this, `${props.databaseName}RdsGlobal`, {
|
|
323
335
|
vpc: props.vpc,
|
|
324
336
|
databaseName: props.databaseName,
|
|
325
337
|
primaryRegion: props.primaryRegion,
|
|
@@ -351,7 +363,7 @@ class RelationalDatabase extends constructs_1.Construct {
|
|
|
351
363
|
const resolvedDatabaseEngine = props.databaseEngine ?? "postgresql";
|
|
352
364
|
const resolvedEngine = props.engine ?? getInstanceEngine(resolvedDatabaseEngine);
|
|
353
365
|
const engineConfig = getEngineConfig(resolvedDatabaseEngine);
|
|
354
|
-
this.database = new
|
|
366
|
+
this.database = new RdsInstance(this, `${props.databaseName}Rds`, {
|
|
355
367
|
vpc: props.vpc,
|
|
356
368
|
databaseName: props.databaseName,
|
|
357
369
|
instanceType: props.instanceType,
|
|
@@ -361,7 +373,7 @@ class RelationalDatabase extends constructs_1.Construct {
|
|
|
361
373
|
engineConfig,
|
|
362
374
|
multiAz: props.multiAz,
|
|
363
375
|
backupRetention: props.backupRetention !== undefined
|
|
364
|
-
?
|
|
376
|
+
? Duration.days(props.backupRetention)
|
|
365
377
|
: undefined,
|
|
366
378
|
databaseInsights: props.databaseInsights,
|
|
367
379
|
proxy: props.proxy,
|
|
@@ -371,36 +383,39 @@ class RelationalDatabase extends constructs_1.Construct {
|
|
|
371
383
|
publiclyAccessible: props.publiclyAccessible,
|
|
372
384
|
deletionProtection: props.deletionProtection,
|
|
373
385
|
snapshotIdentifier: props.snapshotIdentifier,
|
|
374
|
-
snapshotUsername: props.snapshotUsername
|
|
386
|
+
snapshotUsername: props.snapshotUsername,
|
|
387
|
+
alertsTopic: this.resolveAlertsTopic(props.alertsTopic),
|
|
388
|
+
alarms: props.alarms,
|
|
389
|
+
applicationId: props.applicationId
|
|
375
390
|
});
|
|
376
391
|
this.connections = this.database.connections;
|
|
377
392
|
this.addDatabaseOutputs(props);
|
|
378
393
|
}
|
|
379
394
|
addDatabaseOutputs(props) {
|
|
380
395
|
const endpoint = this.database.getHostEndpoint();
|
|
381
|
-
const stackName =
|
|
396
|
+
const stackName = Stack.of(this).stackName;
|
|
382
397
|
// Sanitise for CfnOutput names — CloudFormation export names only allow [a-zA-Z0-9:-]
|
|
383
|
-
const outputName =
|
|
384
|
-
new
|
|
398
|
+
const outputName = toPascalCase(props.databaseName);
|
|
399
|
+
new CfnOutput(this, `${outputName}Endpoint`, {
|
|
385
400
|
key: `${stackName}${outputName}Endpoint`,
|
|
386
401
|
exportName: `${stackName}${outputName}Endpoint`,
|
|
387
402
|
value: endpoint,
|
|
388
403
|
description: `Database Endpoint for ${props.databaseName}`
|
|
389
404
|
});
|
|
390
|
-
new
|
|
405
|
+
new CfnOutput(this, `${outputName}Port`, {
|
|
391
406
|
key: `${stackName}${outputName}Port`,
|
|
392
407
|
exportName: `${stackName}${outputName}Port`,
|
|
393
408
|
value: this.database.getHostPort(),
|
|
394
409
|
description: `Database Port for ${props.databaseName}`
|
|
395
410
|
});
|
|
396
|
-
new
|
|
411
|
+
new CfnOutput(this, `${outputName}DatabaseName`, {
|
|
397
412
|
key: `${stackName}${outputName}DatabaseName`,
|
|
398
413
|
exportName: `${stackName}${outputName}DatabaseName`,
|
|
399
414
|
value: props.databaseName,
|
|
400
415
|
description: `Database Name for ${props.databaseName}`
|
|
401
416
|
});
|
|
402
417
|
const credentials = this.database.getCredentials();
|
|
403
|
-
new
|
|
418
|
+
new CfnOutput(this, `${outputName}SecretArn`, {
|
|
404
419
|
key: `${stackName}${outputName}SecretArn`,
|
|
405
420
|
exportName: `${stackName}${outputName}SecretArn`,
|
|
406
421
|
value: credentials.secret.secretArn,
|
|
@@ -427,12 +442,5 @@ class RelationalDatabase extends constructs_1.Construct {
|
|
|
427
442
|
this.connections.allowDefaultPortFrom(grantee);
|
|
428
443
|
}
|
|
429
444
|
}
|
|
430
|
-
exports.RelationalDatabase = RelationalDatabase;
|
|
431
445
|
// Re-export interface types
|
|
432
|
-
|
|
433
|
-
Object.defineProperty(exports, "isRelationalDatabase", { enumerable: true, get: function () { return database_js_1.isRelationalDatabase; } });
|
|
434
|
-
Object.defineProperty(exports, "isDynamoDBDatabase", { enumerable: true, get: function () { return database_js_1.isDynamoDBDatabase; } });
|
|
435
|
-
Object.defineProperty(exports, "isAuroraDatabase", { enumerable: true, get: function () { return database_js_1.isAuroraDatabase; } });
|
|
436
|
-
Object.defineProperty(exports, "isInstanceDatabase", { enumerable: true, get: function () { return database_js_1.isInstanceDatabase; } });
|
|
437
|
-
Object.defineProperty(exports, "isGlobalAuroraDatabase", { enumerable: true, get: function () { return database_js_1.isGlobalAuroraDatabase; } });
|
|
438
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2RhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRJQSx3REFFQztBQUVELDhDQUVDO0FBRUQsMENBT0M7QUEzSkQsMkNBQXVDO0FBQ3ZDLDZDQUErQztBQUcvQywyREFBc0U7QUFDdEUsa0ZBQStFO0FBQy9FLG9FQUsrQztBQUMvQyx5RUFHeUM7QUFDekMseUVBQStEO0FBb0IvRCxpREFTNkI7QUFDN0IsNkNBQXVDO0FBZXZDLDJEQWtCbUM7QUFKakMsZ0hBQUEsZUFBZSxPQUFBO0FBQ2YsK0dBQUEsY0FBYyxPQUFBO0FBQ2QsNEdBQUEsV0FBVyxPQUFBO0FBQ1gsd0dBQUEsT0FBTyxPQUFBO0FBR0ksUUFBQSxzQkFBc0IsR0FTL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixVQUFVLEVBQUU7UUFDVixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7UUFDL0MsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFO1FBQ2pELGVBQWUsRUFBRSxVQUFVO1FBQzNCLGFBQWEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDdkMsZUFBZSxFQUFFLDhDQUE4QztLQUNoRTtJQUNELEtBQUssRUFBRTtRQUNMLHdFQUF3RTtRQUN4RSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRTtRQUN0RSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7UUFDbkQsZUFBZSxFQUFFLE9BQU87UUFDeEIsYUFBYSxFQUFFLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFO1FBQ2pELGVBQWUsRUFBRSx5Q0FBeUM7S0FDM0Q7Q0FD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QUFDO0lBQ2pELENBQUM7Q0FDRjtBQWxPRCxnREFrT0M7QUFTRCw0QkFBNEI7QUFDNUIsd0RBV2tDO0FBTGhDLG1IQUFBLG9CQUFvQixPQUFBO0FBQ3BCLGlIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLCtHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLGlIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHFIQUFBLHNCQUFzQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7IFJkc0F1cm9yYSwgUmRzSW5zdGFuY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZVwiO1xuaW1wb3J0IHsgUmRzQXVyb3JhR2xvYmFsIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzQXVyb3JhR2xvYmFsXCI7XG5pbXBvcnQge1xuICBEeW5hbW9EQlRhYmxlLFxuICB0eXBlIER5bmFtb0RCS2V5U2NoZW1hLFxuICB0eXBlIER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXgsXG4gIHR5cGUgRHluYW1vREJUYWJsZVByb3BzXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2R5bmFtb2RiXCI7XG5pbXBvcnQge1xuICBGamFsbExvZ2dlcixcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWRcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7IHRvUGFzY2FsQ2FzZSB9IGZyb20gXCIuLi8uLi91dGlscy9jYXBpdGFsaXNlU3RyaW5nLmpzXCI7XG5cbmltcG9ydCB7XG4gIHR5cGUgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSUNvbm5lY3RhYmxlLFxuICB0eXBlIElWcGNcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IHR5cGUgSVRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHsgdHlwZSBTZWNyZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5pbXBvcnQgeyB0eXBlIElHcmFudGFibGUsIHR5cGUgR3JhbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJUmVsYXRpb25hbERhdGFiYXNlLFxuICB0eXBlIElEeW5hbW9EQkRhdGFiYXNlLFxuICB0eXBlIEFueURhdGFiYXNlLFxuICB0eXBlIFJlbGF0aW9uYWxEYXRhYmFzZVR5cGVcbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy9kYXRhYmFzZS5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBJRHluYW1vREJDb25uZWN0b3IsXG4gIHR5cGUgSVNlY3VyaXR5R3JvdXBDb25uZWN0b3Jcbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jb25uZWN0b3IuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgSUluc3RhbmNlRW5naW5lLFxuICB0eXBlIElDbHVzdGVyRW5naW5lLFxuICBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUsXG4gIERhdGFiYXNlSW5zdGFuY2VFbmdpbmUsXG4gIEF1cm9yYVBvc3RncmVzRW5naW5lVmVyc2lvbixcbiAgQXVyb3JhTXlzcWxFbmdpbmVWZXJzaW9uLFxuICBQb3N0Z3Jlc0VuZ2luZVZlcnNpb24sXG4gIE15c3FsRW5naW5lVmVyc2lvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIHR5cGUgRGF0YWJhc2VFbmdpbmUsXG4gIHR5cGUgRW5naW5lQ29uZmlnLFxuICB0eXBlIFByb3h5Q29uZmlnLFxuICB0eXBlIFJlYWRSZXBsaWNhQ29uZmlnLFxuICB0eXBlIENyZWRlbnRpYWxzQ29uZmlnLFxuICB0eXBlIEVuY3J5cHRpb25Db25maWcsXG4gIHR5cGUgRGF0YWJhc2VJbnNpZ2h0c0NvbmZpZyxcbiAgdHlwZSBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnLFxuICB0eXBlIEF1cm9yYVdyaXRlckNvbmZpZyxcbiAgdHlwZSBBdXJvcmFSZWFkZXJzQ29uZmlnXG59IGZyb20gXCIuLi8uLi91dGlscy9kYXRhYmFzZVR5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIHsgRGF0YWJhc2VFbmdpbmUsIEVuZ2luZUNvbmZpZyB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRhYmFzZVR5cGVzXCI7XG5leHBvcnQge1xuICB0eXBlIFByb3h5Q29uZmlnLFxuICB0eXBlIFJlYWRSZXBsaWNhQ29uZmlnLFxuICB0eXBlIENyZWRlbnRpYWxzQ29uZmlnLFxuICB0eXBlIFNlY3JldFJvdGF0aW9uQ29uZmlnLFxuICB0eXBlIEVuY3J5cHRpb25Db25maWcsXG4gIHR5cGUgRGF0YWJhc2VJbnNpZ2h0c0NvbmZpZyxcbiAgdHlwZSBBd3NNYW5hZ2VkS2V5LFxuICB0eXBlIEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlcixcbiAgdHlwZSBFbmNyeXB0aW9uS2V5U3BlYyxcbiAgdHlwZSBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnLFxuICB0eXBlIEF1cm9yYVJlYWRlckNvbmZpZyxcbiAgdHlwZSBBdXJvcmFXcml0ZXJDb25maWcsXG4gIHR5cGUgQXVyb3JhUmVhZGVyc0NvbmZpZyxcbiAgaXNBd3NNYW5hZ2VkS2V5LFxuICBpc0NNS1JlcXVlc3RlZCxcbiAgQVdTX01BTkFHRUQsXG4gIFVTRV9DTUtcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGFiYXNlVHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IERBVEFCQVNFX0VOR0lORV9DT05GSUc6IFJlY29yZDxcbiAgRGF0YWJhc2VFbmdpbmUsXG4gIHtcbiAgICBhdXJvcmE6IHsgdmVyc2lvbjogc3RyaW5nOyBtYWpvclZlcnNpb246IHN0cmluZyB9O1xuICAgIGluc3RhbmNlOiB7IHZlcnNpb246IHN0cmluZzsgbWFqb3JWZXJzaW9uOiBzdHJpbmcgfTtcbiAgICBkZWZhdWx0VXNlcm5hbWU6IHN0cmluZztcbiAgICBzc2xQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHJvdGF0aW9uQXBwTmFtZTogc3RyaW5nO1xuICB9XG4+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHBvc3RncmVzcWw6IHtcbiAgICBhdXJvcmE6IHsgdmVyc2lvbjogXCIxNi42XCIsIG1ham9yVmVyc2lvbjogXCIxNlwiIH0sXG4gICAgaW5zdGFuY2U6IHsgdmVyc2lvbjogXCIxNy41XCIsIG1ham9yVmVyc2lvbjogXCIxN1wiIH0sXG4gICAgZGVmYXVsdFVzZXJuYW1lOiBcInBvc3RncmVzXCIsXG4gICAgc3NsUGFyYW1ldGVyczogeyBcInJkcy5mb3JjZV9zc2xcIjogXCIxXCIgfSxcbiAgICByb3RhdGlvbkFwcE5hbWU6IFwiU2VjcmV0c01hbmFnZXJSRFNQb3N0Z3JlU1FMUm90YXRpb25NdWx0aVVzZXJcIlxuICB9LFxuICBteXNxbDoge1xuICAgIC8vIG1ham9yVmVyc2lvbiBtdXN0IGJlIEF1cm9yYSB2ZXJzaW9uICgzLjA4LjApLCBOT1QgTXlTUUwgdmVyc2lvbiAoOC4wKVxuICAgIGF1cm9yYTogeyB2ZXJzaW9uOiBcIjguMC5teXNxbF9hdXJvcmEuMy4wOC4wXCIsIG1ham9yVmVyc2lvbjogXCIzLjA4LjBcIiB9LFxuICAgIGluc3RhbmNlOiB7IHZlcnNpb246IFwiOC40LjRcIiwgbWFqb3JWZXJzaW9uOiBcIjguNFwiIH0sXG4gICAgZGVmYXVsdFVzZXJuYW1lOiBcImFkbWluXCIsXG4gICAgc3NsUGFyYW1ldGVyczogeyByZXF1aXJlX3NlY3VyZV90cmFuc3BvcnQ6IFwiT05cIiB9LFxuICAgIHJvdGF0aW9uQXBwTmFtZTogXCJTZWNyZXRzTWFuYWdlclJEU015U1FMUm90YXRpb25NdWx0aVVzZXJcIlxuICB9XG59KTtcblxuY29uc3QgQVVST1JBX0VOR0lORV9GQUNUT1JJRVM6IFJlY29yZDxEYXRhYmFzZUVuZ2luZSwgKCkgPT4gSUNsdXN0ZXJFbmdpbmU+ID0ge1xuICBwb3N0Z3Jlc3FsOiAoKSA9PiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9IERBVEFCQVNFX0VOR0lORV9DT05GSUcucG9zdGdyZXNxbC5hdXJvcmE7XG4gICAgcmV0dXJuIERhdGFiYXNlQ2x1c3RlckVuZ2luZS5hdXJvcmFQb3N0Z3Jlcyh7XG4gICAgICB2ZXJzaW9uOiBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgIH0pO1xuICB9LFxuICBteXNxbDogKCkgPT4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgbWFqb3JWZXJzaW9uIH0gPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHLm15c3FsLmF1cm9yYTtcbiAgICByZXR1cm4gRGF0YWJhc2VDbHVzdGVyRW5naW5lLmF1cm9yYU15c3FsKHtcbiAgICAgIHZlcnNpb246IEF1cm9yYU15c3FsRW5naW5lVmVyc2lvbi5vZih2ZXJzaW9uLCBtYWpvclZlcnNpb24pXG4gICAgfSk7XG4gIH1cbn07XG5cbmNvbnN0IElOU1RBTkNFX0VOR0lORV9GQUNUT1JJRVM6IFJlY29yZDxEYXRhYmFzZUVuZ2luZSwgKCkgPT4gSUluc3RhbmNlRW5naW5lPiA9XG4gIHtcbiAgICBwb3N0Z3Jlc3FsOiAoKSA9PiB7XG4gICAgICBjb25zdCB7IHZlcnNpb24sIG1ham9yVmVyc2lvbiB9ID1cbiAgICAgICAgREFUQUJBU0VfRU5HSU5FX0NPTkZJRy5wb3N0Z3Jlc3FsLmluc3RhbmNlO1xuICAgICAgcmV0dXJuIERhdGFiYXNlSW5zdGFuY2VFbmdpbmUucG9zdGdyZXMoe1xuICAgICAgICB2ZXJzaW9uOiBQb3N0Z3Jlc0VuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBteXNxbDogKCkgPT4ge1xuICAgICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9IERBVEFCQVNFX0VOR0lORV9DT05GSUcubXlzcWwuaW5zdGFuY2U7XG4gICAgICByZXR1cm4gRGF0YWJhc2VJbnN0YW5jZUVuZ2luZS5teXNxbCh7XG4gICAgICAgIHZlcnNpb246IE15c3FsRW5naW5lVmVyc2lvbi5vZih2ZXJzaW9uLCBtYWpvclZlcnNpb24pXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdXJvcmFDbHVzdGVyRW5naW5lKGVuZ2luZTogRGF0YWJhc2VFbmdpbmUpOiBJQ2x1c3RlckVuZ2luZSB7XG4gIHJldHVybiBBVVJPUkFfRU5HSU5FX0ZBQ1RPUklFU1tlbmdpbmVdKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnN0YW5jZUVuZ2luZShlbmdpbmU6IERhdGFiYXNlRW5naW5lKTogSUluc3RhbmNlRW5naW5lIHtcbiAgcmV0dXJuIElOU1RBTkNFX0VOR0lORV9GQUNUT1JJRVNbZW5naW5lXSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5naW5lQ29uZmlnKGVuZ2luZTogRGF0YWJhc2VFbmdpbmUpOiBFbmdpbmVDb25maWcge1xuICBjb25zdCBjb25maWcgPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHW2VuZ2luZV07XG4gIHJldHVybiB7XG4gICAgZGVmYXVsdFVzZXJuYW1lOiBjb25maWcuZGVmYXVsdFVzZXJuYW1lLFxuICAgIHNzbFBhcmFtZXRlcnM6IGNvbmZpZy5zc2xQYXJhbWV0ZXJzLFxuICAgIHJvdGF0aW9uQXBwTmFtZTogY29uZmlnLnJvdGF0aW9uQXBwTmFtZVxuICB9O1xufVxuXG4vKipcbiAqIEJhc2UgcHJvcHMgZm9yIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbnR5cGUgQmFzZURhdGFiYXNlUHJvcHMgPSB7XG4gIHZwYz86IElWcGM7XG4gIGRhdGFiYXNlTmFtZTogc3RyaW5nO1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG4gIGRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1cm9yYURhdGFiYXNlUHJvcHMgZXh0ZW5kcyBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gIHR5cGU6IFwiQXVyb3JhXCI7XG4gIGRhdGFiYXNlRW5naW5lPzogRGF0YWJhc2VFbmdpbmU7XG4gIC8qKiBPdmVycmlkZXMgZGF0YWJhc2VFbmdpbmUgaWYgcHJvdmlkZWQgKi9cbiAgZW5naW5lPzogSUNsdXN0ZXJFbmdpbmU7XG4gIHdyaXRlcj86IEF1cm9yYVdyaXRlckNvbmZpZztcbiAgcmVhZGVycz86IEF1cm9yYVJlYWRlcnNDb25maWcgfCBmYWxzZTtcbiAgcHJveHk/OiBQcm94eUNvbmZpZyB8IGZhbHNlO1xuICBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzQ29uZmlnO1xuICAvKiogREVTVFJVQ1RJVkU6IENoYW5naW5nIHN0b3JhZ2VLZXkgY2F1c2VzIGNsdXN0ZXIgcmVwbGFjZW1lbnQgKi9cbiAgZW5jcnlwdGlvbj86IEF1cm9yYUVuY3J5cHRpb25Db25maWc7XG4gIGJhY2t1cFJldGVudGlvbj86IG51bWJlcjtcbiAgbW9uaXRvcmluZ0ludGVydmFsPzogRHVyYXRpb247XG4gIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93Pzogc3RyaW5nO1xuICBwb3J0PzogbnVtYmVyO1xuICBkYXRhYmFzZUluc2lnaHRzPzogRGF0YWJhc2VJbnNpZ2h0c0NvbmZpZyB8IGZhbHNlO1xuICAvKiogQVJOIG9yIGlkZW50aWZpZXIgb2YgREIgY2x1c3RlciBzbmFwc2hvdCB0byByZXN0b3JlIGZyb20gKi9cbiAgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgZnJvbSB0aGUgc25hcHNob3QgKHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIGZyb20gc25hcHNob3QgdG8gcmVzZXQgcGFzc3dvcmQpICovXG4gIHNuYXBzaG90VXNlcm5hbWU/OiBzdHJpbmc7XG4gIC8qKiBBbGxvdyBhY2Nlc3MgZnJvbSBWUEMgQ0lEUiAoYXZvaWRzIGNyb3NzLXN0YWNrIGN5Y2xpYyBkZXBlbmRlbmNpZXMgd2l0aCBMYW1iZGEpICovXG4gIGFsbG93VnBjQWNjZXNzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1ha2UgZGF0YWJhc2UgcHVibGljbHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBpbnRlcm5ldC5cbiAgICogV0FSTklORzogVGhpcyBpcyBhIHNlY3VyaXR5IHJpc2sgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRldmVsb3BtZW50XG4gICAqIG9yIHdoZW4gYnVpbGRpbmcgUGF5bG9hZCBhcHBzIGxvY2FsbHkgdGhhdCBuZWVkIGRhdGFiYXNlIGFjY2Vzcy5cbiAgICogV2hlbiBlbmFibGVkLCB0aGUgZGF0YWJhc2UgaXMgcGxhY2VkIGluIHB1YmxpYyBzdWJuZXRzLlxuICAgKi9cbiAgcHVibGljbHlBY2Nlc3NpYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElQIGFkZHJlc3MgdG8gYWxsb3cgYWNjZXNzIGZyb20gd2hlbiBwdWJsaWNseUFjY2Vzc2libGUgaXMgdHJ1ZS5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgYWNjZXNzIGlzIHJlc3RyaWN0ZWQgdG8gVlBDIG9ubHkgZXZlbiB3aGVuIHB1YmxpYy5cbiAgICogRm9ybWF0OiBDSURSIG5vdGF0aW9uIChlLmcuLCBcIjIwMy4wLjExMy4wLzMyXCIgZm9yIHNpbmdsZSBJUClcbiAgICovXG4gIGFsbG93ZWRJcENpZHI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wcyBleHRlbmRzIEJhc2VEYXRhYmFzZVByb3BzIHtcbiAgdHlwZTogXCJHbG9iYWxBdXJvcmFcIjtcbiAgcHJpbWFyeVJlZ2lvbjogc3RyaW5nO1xuICBzZWNvbmRhcnlSZWdpb25zPzogc3RyaW5nW107XG4gIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nO1xuICBlbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmc/OiBib29sZWFuO1xuICBkYXRhYmFzZUVuZ2luZT86IERhdGFiYXNlRW5naW5lO1xuICAvKiogT3ZlcnJpZGVzIGRhdGFiYXNlRW5naW5lIGlmIHByb3ZpZGVkICovXG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xuICB3cml0ZXI/OiBBdXJvcmFXcml0ZXJDb25maWc7XG4gIHJlYWRlcnM/OiBBdXJvcmFSZWFkZXJzQ29uZmlnIHwgZmFsc2U7XG4gIHByb3h5PzogUHJveHlDb25maWcgfCBmYWxzZTtcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc0NvbmZpZztcbiAgLyoqIERFU1RSVUNUSVZFOiBDaGFuZ2luZyBzdG9yYWdlS2V5IGNhdXNlcyBjbHVzdGVyIHJlcGxhY2VtZW50ICovXG4gIGVuY3J5cHRpb24/OiBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnO1xuICBiYWNrdXBSZXRlbnRpb24/OiBudW1iZXI7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgZGF0YWJhc2VJbnNpZ2h0cz86IERhdGFiYXNlSW5zaWdodHNDb25maWcgfCBmYWxzZTtcbiAgLyoqIEFSTiBvciBpZGVudGlmaWVyIG9mIERCIGNsdXN0ZXIgc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tICovXG4gIHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgLyoqIFVzZXJuYW1lIGZyb20gdGhlIHNuYXBzaG90IChyZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBmcm9tIHNuYXBzaG90IHRvIHJlc2V0IHBhc3N3b3JkKSAqL1xuICBzbmFwc2hvdFVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlRGF0YWJhc2VQcm9wcyBleHRlbmRzIEJhc2VEYXRhYmFzZVByb3BzIHtcbiAgdHlwZTogXCJJbnN0YW5jZVwiO1xuICBkYXRhYmFzZUVuZ2luZT86IERhdGFiYXNlRW5naW5lO1xuICAvKiogT3ZlcnJpZGVzIGRhdGFiYXNlRW5naW5lIGlmIHByb3ZpZGVkICovXG4gIGVuZ2luZT86IElJbnN0YW5jZUVuZ2luZTtcbiAgYWxsb2NhdGVkU3RvcmFnZT86IG51bWJlcjtcbiAgcG9ydD86IG51bWJlcjtcbiAgbXVsdGlBej86IGJvb2xlYW47XG4gIGJhY2t1cFJldGVudGlvbj86IG51bWJlcjtcbiAgZGF0YWJhc2VJbnNpZ2h0cz86IERhdGFiYXNlSW5zaWdodHNDb25maWcgfCBmYWxzZTtcbiAgcHJveHk/OiBQcm94eUNvbmZpZyB8IGZhbHNlO1xuICByZWFkUmVwbGljYT86IFJlYWRSZXBsaWNhQ29uZmlnIHwgZmFsc2U7XG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNDb25maWc7XG4gIGVuY3J5cHRpb24/OiBFbmNyeXB0aW9uQ29uZmlnO1xuICBwdWJsaWNseUFjY2Vzc2libGU/OiBib29sZWFuO1xuICAvKiogQVJOIG9yIGlkZW50aWZpZXIgb2YgREIgaW5zdGFuY2Ugc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tICovXG4gIHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgLyoqIFVzZXJuYW1lIGZyb20gdGhlIHNuYXBzaG90IChyZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBmcm9tIHNuYXBzaG90IHRvIHJlc2V0IHBhc3N3b3JkKSAqL1xuICBzbmFwc2hvdFVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIER5bmFtb0RCIHRhYmxlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEeW5hbW9EQkRhdGFiYXNlUHJvcHMge1xuICB0eXBlOiBcIkR5bmFtb0RCXCI7XG4gIHBhcnRpdGlvbktleTogRHluYW1vREJLZXlTY2hlbWE7XG4gIHNvcnRLZXk/OiBEeW5hbW9EQktleVNjaGVtYTtcbiAgYmlsbGluZ01vZGU/OiBcIlBBWV9QRVJfUkVRVUVTVFwiIHwgXCJQUk9WSVNJT05FRFwiO1xuICByZWFkQ2FwYWNpdHk/OiBudW1iZXI7XG4gIHdyaXRlQ2FwYWNpdHk/OiBudW1iZXI7XG4gIGdsb2JhbFNlY29uZGFyeUluZGV4ZXM/OiBEeW5hbW9EQkdsb2JhbFNlY29uZGFyeUluZGV4W107XG4gIHRpbWVUb0xpdmVBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHN0cmVhbT86IFwiTkVXX0lNQUdFXCIgfCBcIk9MRF9JTUFHRVwiIHwgXCJORVdfQU5EX09MRF9JTUFHRVNcIiB8IFwiS0VZU19PTkxZXCI7XG4gIHBvaW50SW5UaW1lUmVjb3Zlcnk/OiBib29sZWFuO1xuICBlbmNyeXB0aW9uPzogXCJBV1NfT1dORURcIiB8IFwiQVdTX01BTkFHRURcIiB8IFwiQ1VTVE9NRVJfTUFOQUdFRFwiO1xuICByZW1vdmFsUG9saWN5PzogXCJERVNUUk9ZXCIgfCBcIlJFVEFJTlwiIHwgXCJTTkFQU0hPVFwiO1xufVxuXG4vKipcbiAqIFJlbGF0aW9uYWwgZGF0YWJhc2UgcHJvcHMgdW5pb24gKEF1cm9yYSwgSW5zdGFuY2UsIEdsb2JhbEF1cm9yYSkuXG4gKi9cbmV4cG9ydCB0eXBlIElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcyA9XG4gIHwgQXVyb3JhRGF0YWJhc2VQcm9wc1xuICB8IEluc3RhbmNlRGF0YWJhc2VQcm9wc1xuICB8IEdsb2JhbEF1cm9yYURhdGFiYXNlUHJvcHM7XG5cbi8qKlxuICogQWxsIGRhdGFiYXNlIHByb3BzIHVuaW9uLlxuICovXG5leHBvcnQgdHlwZSBJRGF0YWJhc2VQcm9wcyA9XG4gIHwgQXVyb3JhRGF0YWJhc2VQcm9wc1xuICB8IEluc3RhbmNlRGF0YWJhc2VQcm9wc1xuICB8IEdsb2JhbEF1cm9yYURhdGFiYXNlUHJvcHNcbiAgfCBEeW5hbW9EQkRhdGFiYXNlUHJvcHM7XG5cbi8qKlxuICogVmFsaWRhdGVzIER5bmFtb0RCIHByb3BzIGFuZCBsb2dzIHdhcm5pbmdzIGZvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRHluYW1vREJQcm9wcyhwcm9wczogRHluYW1vREJEYXRhYmFzZVByb3BzKTogdm9pZCB7XG4gIC8vIFZhbGlkYXRlIHByb3Zpc2lvbmVkIGNhcGFjaXR5XG4gIGlmIChwcm9wcy5iaWxsaW5nTW9kZSA9PT0gXCJQUk9WSVNJT05FRFwiKSB7XG4gICAgaWYgKCFwcm9wcy5yZWFkQ2FwYWNpdHkgfHwgIXByb3BzLndyaXRlQ2FwYWNpdHkpIHtcbiAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgIFwiJ2JpbGxpbmdNb2RlJyBpcyBQUk9WSVNJT05FRCBidXQgY2FwYWNpdHkgbm90IHNwZWNpZmllZC4gXCIgK1xuICAgICAgICAgIFwiVXNpbmcgZGVmYXVsdCB2YWx1ZXMuIENvbnNpZGVyIHNwZWNpZnlpbmcgJ3JlYWRDYXBhY2l0eScgYW5kICd3cml0ZUNhcGFjaXR5Jy5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBXYXJuIGFib3V0IGNhcGFjaXR5IHdpdGggb24tZGVtYW5kIGJpbGxpbmdcbiAgaWYgKHByb3BzLmJpbGxpbmdNb2RlICE9PSBcIlBST1ZJU0lPTkVEXCIpIHtcbiAgICBpZiAocHJvcHMucmVhZENhcGFjaXR5IHx8IHByb3BzLndyaXRlQ2FwYWNpdHkpIHtcbiAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgIFwiJ3JlYWRDYXBhY2l0eScgb3IgJ3dyaXRlQ2FwYWNpdHknIHNwZWNpZmllZCBidXQgJ2JpbGxpbmdNb2RlJyBcIiArXG4gICAgICAgICAgXCJpcyBub3QgUFJPVklTSU9ORUQuIENhcGFjaXR5IHNldHRpbmdzIHdpbGwgYmUgaWdub3JlZC5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBHU0kgcGFydGl0aW9uIGtleXMgYXJlIGRpZmZlcmVudCBmcm9tIHRhYmxlIHBhcnRpdGlvbiBrZXlcbiAgaWYgKHByb3BzLmdsb2JhbFNlY29uZGFyeUluZGV4ZXMpIHtcbiAgICBjb25zdCB0YWJsZVBhcnRpdGlvbktleSA9IHByb3BzLnBhcnRpdGlvbktleS5uYW1lO1xuICAgIGZvciAoY29uc3QgZ3NpIG9mIHByb3BzLmdsb2JhbFNlY29uZGFyeUluZGV4ZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZ3NpLnBhcnRpdGlvbktleS5uYW1lID09PSB0YWJsZVBhcnRpdGlvbktleSAmJlxuICAgICAgICBnc2kuc29ydEtleT8ubmFtZSA9PT0gcHJvcHMuc29ydEtleT8ubmFtZVxuICAgICAgKSB7XG4gICAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgICAgYEdTSSAnJHtnc2kuaW5kZXhOYW1lfScgaGFzIHRoZSBzYW1lIGtleSBzY2hlbWEgYXMgdGhlIHRhYmxlLiBgICtcbiAgICAgICAgICAgIFwiVGhpcyBtYXkgbm90IHByb3ZpZGUgdGhlIHF1ZXJ5IGZsZXhpYmlsaXR5IHlvdSBuZWVkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHJlbGF0aW9uYWwgZGF0YWJhc2UgcHJvcHMgYW5kIGxvZ3Mgd2FybmluZ3MgZm9yIGlnbm9yZWQgb3IgbWlzY29uZmlndXJlZCBvcHRpb25zLlxuICogVGhlc2UgY2hlY2tzIGhlbHAgY2F0Y2ggaXNzdWVzIHdoZW4gcHJvcHMgY29tZSBmcm9tIGR5bmFtaWMgc291cmNlcyB3aGVyZVxuICogVHlwZVNjcmlwdCdzIGNvbXBpbGUtdGltZSBjaGVja3MgbWF5IG5vdCBhcHBseS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcyhcbiAgcHJvcHM6IElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wc1xuKTogdm9pZCB7XG4gIC8vIEdsb2JhbEF1cm9yYSByZXF1aXJlcyBwcmltYXJ5UmVnaW9uXG4gIGlmIChwcm9wcy50eXBlID09PSBcIkdsb2JhbEF1cm9yYVwiICYmICFwcm9wcy5wcmltYXJ5UmVnaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJHbG9iYWxBdXJvcmEgZGF0YWJhc2UgcmVxdWlyZXMgJ3ByaW1hcnlSZWdpb24nLiBcIiArXG4gICAgICAgIFwiU3BlY2lmeSB0aGUgQVdTIHJlZ2lvbiB3aGVyZSB0aGUgcHJpbWFyeSBjbHVzdGVyIHdpbGwgYmUgY3JlYXRlZC5cIlxuICAgICk7XG4gIH1cblxuICAvLyBJbnN0YW5jZS1vbmx5IG9wdGlvbnMgb24gQXVyb3JhL0dsb2JhbEF1cm9yYVxuICB3YXJuSWZQcm9wZXJ0aWVzSWdub3JlZChcbiAgICBwcm9wcyxcbiAgICBbXCJyZWFkUmVwbGljYVwiLCBcIm11bHRpQXpcIiwgXCJhbGxvY2F0ZWRTdG9yYWdlXCJdLFxuICAgIFwiSW5zdGFuY2VcIixcbiAgICBcIkluc3RhbmNlIGRhdGFiYXNlXCJcbiAgKTtcblxuICAvLyBBdXJvcmEtb25seSBvcHRpb25zIG9uIEluc3RhbmNlXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcInJlYWRlcnNcIiwgXCJ3cml0ZXJcIiwgXCJiYWNrdXBSZXRlbnRpb25cIl0sXG4gICAgW1wiQXVyb3JhXCIsIFwiR2xvYmFsQXVyb3JhXCJdLFxuICAgIFwiQXVyb3JhIGRhdGFiYXNlXCJcbiAgKTtcblxuICAvLyBHbG9iYWxBdXJvcmEtb25seSBvcHRpb25zIG9uIG5vbi1nbG9iYWwgZGF0YWJhc2VzXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcInByaW1hcnlSZWdpb25cIiwgXCJzZWNvbmRhcnlSZWdpb25zXCIsIFwiZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nXCJdLFxuICAgIFwiR2xvYmFsQXVyb3JhXCIsXG4gICAgXCJHbG9iYWxBdXJvcmEgZGF0YWJhc2VcIlxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBkYXRhYmFzZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBEaXNwYXRjaGVzIHRvIHR5cGUtc3BlY2lmaWMgdmFsaWRhdG9ycyBiYXNlZCBvbiB0aGUgZGF0YWJhc2UgdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVEYXRhYmFzZVByb3BzKHByb3BzOiBJRGF0YWJhc2VQcm9wcyk6IHZvaWQge1xuICBpZiAocHJvcHMudHlwZSA9PT0gXCJEeW5hbW9EQlwiKSB7XG4gICAgdmFsaWRhdGVEeW5hbW9EQlByb3BzKHByb3BzKTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKHByb3BzKTtcbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgZm9yIGNyZWF0aW5nIHR5cGUtc2FmZSBkYXRhYmFzZSByZXNvdXJjZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEF1cm9yYSBkYXRhYmFzZSAtIHJldHVybnMgUmVsYXRpb25hbERhdGFiYXNlXG4gKiBjb25zdCBhdXJvcmEgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiTWFpblwiLCB7XG4gKiAgIHR5cGU6IFwiQXVyb3JhXCIsXG4gKiAgIGRhdGFiYXNlTmFtZTogXCJteV9hcHBcIlxuICogfSkpO1xuICogYXVyb3JhLmdldEhvc3RFbmRwb2ludCgpOyAvLyBBdmFpbGFibGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRHluYW1vREIgdGFibGUgLSByZXR1cm5zIER5bmFtb0RCRGF0YWJhc2VcbiAqIGNvbnN0IGNhY2hlID0gYXBwLmFkZERhdGFiYXNlKERhdGFiYXNlRmFjdG9yeS5idWlsZChcIkNhY2hlXCIsIHtcbiAqICAgdHlwZTogXCJEeW5hbW9EQlwiLFxuICogICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJpZFwiLCB0eXBlOiBcIlNcIiB9XG4gKiB9KSk7XG4gKiBjYWNoZS5nZXRUYWJsZU5hbWUoKTsgLy8gQXZhaWxhYmxlXG4gKiBjYWNoZS5ncmFudFJlYWRXcml0ZURhdGEobGFtYmRhKTsgLy8gQXZhaWxhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhYmFzZUZhY3Rvcnkge1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQXVyb3JhRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEluc3RhbmNlRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEdsb2JhbEF1cm9yYURhdGFiYXNlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBSZWxhdGlvbmFsRGF0YWJhc2U7XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBEeW5hbW9EQkRhdGFiYXNlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBEeW5hbW9EQkRhdGFiYXNlO1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSURhdGFiYXNlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBBbnlEYXRhYmFzZSB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCk6IEFueURhdGFiYXNlID0+IHtcbiAgICAgIHZhbGlkYXRlRGF0YWJhc2VQcm9wcyhwcm9wcyk7XG5cbiAgICAgIGlmIChwcm9wcy50eXBlID09PSBcIkR5bmFtb0RCXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEeW5hbW9EQkRhdGFiYXNlKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhYmFzZVByb3BzOiBJUmVsYXRpb25hbERhdGFiYXNlUHJvcHMgPSB7XG4gICAgICAgIC4uLnsgdnBjOiBhcHAuZ2V0VnBjKCkgfSxcbiAgICAgICAgLi4ucHJvcHNcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IFJlbGF0aW9uYWxEYXRhYmFzZShzY29wZSwgaWQsIGRhdGFiYXNlUHJvcHMpO1xuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBEeW5hbW9EQiBkYXRhYmFzZSB3cmFwcGVyIGltcGxlbWVudGluZyBJRHluYW1vREJEYXRhYmFzZSBpbnRlcmZhY2UuXG4gKiBQcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIER5bmFtb0RCIHRhYmxlIG9wZXJhdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNhY2hlID0gYXBwLmFkZERhdGFiYXNlKERhdGFiYXNlRmFjdG9yeS5idWlsZChcIkNhY2hlXCIsIHtcbiAqICAgdHlwZTogXCJEeW5hbW9EQlwiLFxuICogICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJpZFwiLCB0eXBlOiBcIlNcIiB9XG4gKiB9KSk7XG4gKiBjYWNoZS5ncmFudFJlYWRXcml0ZURhdGEobGFtYmRhKTtcbiAqL1xuZXhwb3J0IGNsYXNzIER5bmFtb0RCRGF0YWJhc2VcbiAgZXh0ZW5kcyBDb25zdHJ1Y3RcbiAgaW1wbGVtZW50cyBJRHluYW1vREJEYXRhYmFzZSwgSUR5bmFtb0RCQ29ubmVjdG9yXG57XG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZVR5cGUgPSBcIkR5bmFtb0RCXCIgYXMgY29uc3Q7XG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0b3JUeXBlID0gXCJkeW5hbW9kYlwiIGFzIGNvbnN0O1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlOiBEeW5hbW9EQlRhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEeW5hbW9EQkRhdGFiYXNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuaWQgPSBpZDtcblxuICAgIGNvbnN0IHRhYmxlUHJvcHM6IER5bmFtb0RCVGFibGVQcm9wcyA9IHtcbiAgICAgIHBhcnRpdGlvbktleTogcHJvcHMucGFydGl0aW9uS2V5LFxuICAgICAgc29ydEtleTogcHJvcHMuc29ydEtleSxcbiAgICAgIGJpbGxpbmdNb2RlOiBwcm9wcy5iaWxsaW5nTW9kZSxcbiAgICAgIHJlYWRDYXBhY2l0eTogcHJvcHMucmVhZENhcGFjaXR5LFxuICAgICAgd3JpdGVDYXBhY2l0eTogcHJvcHMud3JpdGVDYXBhY2l0eSxcbiAgICAgIGdsb2JhbFNlY29uZGFyeUluZGV4ZXM6IHByb3BzLmdsb2JhbFNlY29uZGFyeUluZGV4ZXMsXG4gICAgICB0aW1lVG9MaXZlQXR0cmlidXRlOiBwcm9wcy50aW1lVG9MaXZlQXR0cmlidXRlLFxuICAgICAgc3RyZWFtOiBwcm9wcy5zdHJlYW0sXG4gICAgICBwb2ludEluVGltZVJlY292ZXJ5OiBwcm9wcy5wb2ludEluVGltZVJlY292ZXJ5LFxuICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbixcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3lcbiAgICB9O1xuICAgIHRoaXMudGFibGUgPSBuZXcgRHluYW1vREJUYWJsZSh0aGlzLCBpZCwgdGFibGVQcm9wcyk7XG4gIH1cblxuICBnZXRUYWJsZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5nZXRUYWJsZU5hbWUoKTtcbiAgfVxuXG4gIGdldFRhYmxlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ2V0VGFibGVBcm4oKTtcbiAgfVxuXG4gIGdldFRhYmxlKCk6IElUYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ2V0VGFibGUoKTtcbiAgfVxuXG4gIGdldFN0cmVhbUFybigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdldFRhYmxlU3RyZWFtQXJuKCk7XG4gIH1cblxuICBncmFudFJlYWREYXRhKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRSZWFkKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRXcml0ZURhdGEoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFdyaXRlKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRSZWFkV3JpdGVEYXRhKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRSZWFkV3JpdGUoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudEZ1bGxBY2Nlc3MoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudEZ1bGxBY2Nlc3MoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFN0cmVhbVJlYWQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFN0cmVhbVJlYWQoZ3JhbnRlZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWxhdGlvbmFsIGRhdGFiYXNlIHdyYXBwZXIgaW1wbGVtZW50aW5nIElSZWxhdGlvbmFsRGF0YWJhc2UgaW50ZXJmYWNlLlxuICogU3VwcG9ydHMgQXVyb3JhLCBSRFMgSW5zdGFuY2UsIGFuZCBHbG9iYWxBdXJvcmEgZGF0YWJhc2UgdHlwZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGRiID0gYXBwLmFkZERhdGFiYXNlKERhdGFiYXNlRmFjdG9yeS5idWlsZChcIk1haW5cIiwge1xuICogICB0eXBlOiBcIkF1cm9yYVwiLFxuICogICBkYXRhYmFzZU5hbWU6IFwibXlfYXBwXCJcbiAqIH0pKTtcbiAqIGRiLmdyYW50Q29ubmVjdChsYW1iZGEpO1xuICovXG5leHBvcnQgY2xhc3MgUmVsYXRpb25hbERhdGFiYXNlXG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgSVJlbGF0aW9uYWxEYXRhYmFzZSwgSVNlY3VyaXR5R3JvdXBDb25uZWN0b3JcbntcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzY29wZTogQ29uc3RydWN0O1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjOiBJVnBjO1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YWJhc2VUeXBlOiBSZWxhdGlvbmFsRGF0YWJhc2VUeXBlO1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdG9yVHlwZSA9IFwicmVsYXRpb25hbFwiIGFzIGNvbnN0O1xuXG4gIHB1YmxpYyBjb25uZWN0aW9ucyE6IENvbm5lY3Rpb25zO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFiYXNlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGRhdGFiYXNlITogUmRzQXVyb3JhIHwgUmRzSW5zdGFuY2UgfCBSZHNBdXJvcmFHbG9iYWw7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLmRhdGFiYXNlVHlwZSA9IHByb3BzLnR5cGU7XG4gICAgaWYgKCFwcm9wcy52cGMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgcmVsYXRpb25hbCBkYXRhYmFzZVwiKTtcbiAgICB9XG4gICAgdGhpcy52cGMgPSBwcm9wcy52cGM7XG5cbiAgICB0aGlzLl9kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWU7XG4gICAgdGhpcy5hZGREYXRhYmFzZShwcm9wcyk7XG4gIH1cblxuICBhZGREYXRhYmFzZShwcm9wczogSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKSB7XG4gICAgc3dpdGNoIChwcm9wcy50eXBlKSB7XG4gICAgICBjYXNlIFwiQXVyb3JhXCI6XG4gICAgICAgIHRoaXMuYWRkQXVyb3JhKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiR2xvYmFsQXVyb3JhXCI6XG4gICAgICAgIHRoaXMuYWRkQXVyb3JhR2xvYmFsKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiSW5zdGFuY2VcIjpcbiAgICAgICAgdGhpcy5hZGRSZHNJbnN0YW5jZShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBwcm9wcztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBVbnN1cHBvcnRlZCBkYXRhYmFzZSB0eXBlOiAke1N0cmluZygoX2V4aGF1c3RpdmUgYXMgSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKS50eXBlKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdXJvcmEocHJvcHM6IEF1cm9yYURhdGFiYXNlUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnZwYykgdGhyb3cgbmV3IEVycm9yKFwiVlBDIGlzIHJlcXVpcmVkIGZvciBBdXJvcmEgZGF0YWJhc2VcIik7XG5cbiAgICBjb25zdCByZXNvbHZlZERhdGFiYXNlRW5naW5lID0gcHJvcHMuZGF0YWJhc2VFbmdpbmUgPz8gXCJwb3N0Z3Jlc3FsXCI7XG4gICAgY29uc3QgcmVzb2x2ZWRFbmdpbmUgPVxuICAgICAgcHJvcHMuZW5naW5lID8/IGdldEF1cm9yYUNsdXN0ZXJFbmdpbmUocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG4gICAgY29uc3QgZW5naW5lQ29uZmlnID0gZ2V0RW5naW5lQ29uZmlnKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuXG4gICAgaWYgKHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgYEF1cm9yYSBkYXRhYmFzZSAnJHtwcm9wcy5kYXRhYmFzZU5hbWV9JyBpcyBjb25maWd1cmVkIHdpdGggcHVibGljIGFjY2Vzc2liaWxpdHkuIGAgK1xuICAgICAgICAgIFwiVGhpcyBpcyBhIHNlY3VyaXR5IHJpc2sgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRldmVsb3BtZW50LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzQXVyb3JhKHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgZW5naW5lOiByZXNvbHZlZEVuZ2luZSxcbiAgICAgIGVuZ2luZUNvbmZpZyxcbiAgICAgIHdyaXRlcjogcHJvcHMud3JpdGVyLFxuICAgICAgcmVhZGVyczogcHJvcHMucmVhZGVycyxcbiAgICAgIHByb3h5OiBwcm9wcy5wcm94eSxcbiAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5jcmVkZW50aWFscyxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgICBiYWNrdXBSZXRlbnRpb246IHByb3BzLmJhY2t1cFJldGVudGlvbixcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogcHJvcHMubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93LFxuICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgIGRhdGFiYXNlSW5zaWdodHM6IHByb3BzLmRhdGFiYXNlSW5zaWdodHMsXG4gICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbixcbiAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogcHJvcHMuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgc25hcHNob3RVc2VybmFtZTogcHJvcHMuc25hcHNob3RVc2VybmFtZSxcbiAgICAgIGFsbG93VnBjQWNjZXNzOiBwcm9wcy5hbGxvd1ZwY0FjY2VzcyxcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogcHJvcHMucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgYWxsb3dlZElwQ2lkcjogcHJvcHMuYWxsb3dlZElwQ2lkclxuICAgIH0pO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmRhdGFiYXNlLmNvbm5lY3Rpb25zO1xuICAgIHRoaXMuYWRkRGF0YWJhc2VPdXRwdXRzKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXVyb3JhR2xvYmFsKHByb3BzOiBHbG9iYWxBdXJvcmFEYXRhYmFzZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWUEMgaXMgcmVxdWlyZWQgZm9yIEdsb2JhbCBBdXJvcmEgZGF0YWJhc2VcIik7XG4gICAgaWYgKCFwcm9wcy5wcmltYXJ5UmVnaW9uKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJpbWFyeVJlZ2lvbiBpcyByZXF1aXJlZCBmb3IgR2xvYmFsIEF1cm9yYSBkYXRhYmFzZVwiKTtcblxuICAgIGNvbnN0IHJlc29sdmVkRGF0YWJhc2VFbmdpbmUgPSBwcm9wcy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIjtcbiAgICBjb25zdCByZXNvbHZlZEVuZ2luZSA9XG4gICAgICBwcm9wcy5lbmdpbmUgPz8gZ2V0QXVyb3JhQ2x1c3RlckVuZ2luZShyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcbiAgICBjb25zdCBlbmdpbmVDb25maWcgPSBnZXRFbmdpbmVDb25maWcocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0F1cm9yYUdsb2JhbChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzR2xvYmFsYCxcbiAgICAgIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBwcmltYXJ5UmVnaW9uOiBwcm9wcy5wcmltYXJ5UmVnaW9uLFxuICAgICAgICBzZWNvbmRhcnlSZWdpb25zOiBwcm9wcy5zZWNvbmRhcnlSZWdpb25zLFxuICAgICAgICBnbG9iYWxDbHVzdGVySWRlbnRpZmllcjogcHJvcHMuZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXIsXG4gICAgICAgIGVuZ2luZTogcmVzb2x2ZWRFbmdpbmUsXG4gICAgICAgIGVuZ2luZUNvbmZpZyxcbiAgICAgICAgZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nOiBwcm9wcy5lbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmcsXG4gICAgICAgIHdyaXRlcjogcHJvcHMud3JpdGVyLFxuICAgICAgICByZWFkZXJzOiBwcm9wcy5yZWFkZXJzLFxuICAgICAgICBwcm94eTogcHJvcHMucHJveHksXG4gICAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5jcmVkZW50aWFscyxcbiAgICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbixcbiAgICAgICAgYmFja3VwUmV0ZW50aW9uOiBwcm9wcy5iYWNrdXBSZXRlbnRpb24sXG4gICAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogcHJvcHMubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdzogcHJvcHMucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3csXG4gICAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICAgIGRhdGFiYXNlSW5zaWdodHM6IHByb3BzLmRhdGFiYXNlSW5zaWdodHMsXG4gICAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uLFxuICAgICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHByb3BzLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgICAgc25hcHNob3RVc2VybmFtZTogcHJvcHMuc25hcHNob3RVc2VybmFtZVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gICAgdGhpcy5hZGREYXRhYmFzZU91dHB1dHMocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZHNJbnN0YW5jZShwcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgSW5zdGFuY2UgZGF0YWJhc2VcIik7XG5cbiAgICBjb25zdCByZXNvbHZlZERhdGFiYXNlRW5naW5lID0gcHJvcHMuZGF0YWJhc2VFbmdpbmUgPz8gXCJwb3N0Z3Jlc3FsXCI7XG4gICAgY29uc3QgcmVzb2x2ZWRFbmdpbmUgPVxuICAgICAgcHJvcHMuZW5naW5lID8/IGdldEluc3RhbmNlRW5naW5lKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuICAgIGNvbnN0IGVuZ2luZUNvbmZpZyA9IGdldEVuZ2luZUNvbmZpZyhyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcblxuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzSW5zdGFuY2UodGhpcywgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJkc2AsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZSxcbiAgICAgIGFsbG9jYXRlZFN0b3JhZ2U6IHByb3BzLmFsbG9jYXRlZFN0b3JhZ2UsXG4gICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgZW5naW5lOiByZXNvbHZlZEVuZ2luZSxcbiAgICAgIGVuZ2luZUNvbmZpZyxcbiAgICAgIG11bHRpQXo6IHByb3BzLm11bHRpQXosXG4gICAgICBiYWNrdXBSZXRlbnRpb246XG4gICAgICAgIHByb3BzLmJhY2t1cFJldGVudGlvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBEdXJhdGlvbi5kYXlzKHByb3BzLmJhY2t1cFJldGVudGlvbilcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRhdGFiYXNlSW5zaWdodHM6IHByb3BzLmRhdGFiYXNlSW5zaWdodHMsXG4gICAgICBwcm94eTogcHJvcHMucHJveHksXG4gICAgICByZWFkUmVwbGljYTogcHJvcHMucmVhZFJlcGxpY2EsXG4gICAgICBjcmVkZW50aWFsczogcHJvcHMuY3JlZGVudGlhbHMsXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgcHVibGljbHlBY2Nlc3NpYmxlOiBwcm9wcy5wdWJsaWNseUFjY2Vzc2libGUsXG4gICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbixcbiAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogcHJvcHMuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgc25hcHNob3RVc2VybmFtZTogcHJvcHMuc25hcHNob3RVc2VybmFtZVxuICAgIH0pO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmRhdGFiYXNlLmNvbm5lY3Rpb25zO1xuICAgIHRoaXMuYWRkRGF0YWJhc2VPdXRwdXRzKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGF0YWJhc2VPdXRwdXRzKHByb3BzOiBJUmVsYXRpb25hbERhdGFiYXNlUHJvcHMpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuZGF0YWJhc2UuZ2V0SG9zdEVuZHBvaW50KCk7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gU3RhY2sub2YodGhpcykuc3RhY2tOYW1lO1xuICAgIC8vIFNhbml0aXNlIGZvciBDZm5PdXRwdXQgbmFtZXMg4oCUIENsb3VkRm9ybWF0aW9uIGV4cG9ydCBuYW1lcyBvbmx5IGFsbG93IFthLXpBLVowLTk6LV1cbiAgICBjb25zdCBvdXRwdXROYW1lID0gdG9QYXNjYWxDYXNlKHByb3BzLmRhdGFiYXNlTmFtZSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9RW5kcG9pbnRgLCB7XG4gICAgICBrZXk6IGAke3N0YWNrTmFtZX0ke291dHB1dE5hbWV9RW5kcG9pbnRgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1FbmRwb2ludGAsXG4gICAgICB2YWx1ZTogZW5kcG9pbnQsXG4gICAgICBkZXNjcmlwdGlvbjogYERhdGFiYXNlIEVuZHBvaW50IGZvciAke3Byb3BzLmRhdGFiYXNlTmFtZX1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9UG9ydGAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1Qb3J0YCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke291dHB1dE5hbWV9UG9ydGAsXG4gICAgICB2YWx1ZTogdGhpcy5kYXRhYmFzZS5nZXRIb3N0UG9ydCgpLFxuICAgICAgZGVzY3JpcHRpb246IGBEYXRhYmFzZSBQb3J0IGZvciAke3Byb3BzLmRhdGFiYXNlTmFtZX1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9RGF0YWJhc2VOYW1lYCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtvdXRwdXROYW1lfURhdGFiYXNlTmFtZWAsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9JHtvdXRwdXROYW1lfURhdGFiYXNlTmFtZWAsXG4gICAgICB2YWx1ZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBEYXRhYmFzZSBOYW1lIGZvciAke3Byb3BzLmRhdGFiYXNlTmFtZX1gXG4gICAgfSk7XG5cbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuZGF0YWJhc2UuZ2V0Q3JlZGVudGlhbHMoKTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9U2VjcmV0QXJuYCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtvdXRwdXROYW1lfVNlY3JldEFybmAsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9JHtvdXRwdXROYW1lfVNlY3JldEFybmAsXG4gICAgICB2YWx1ZTogY3JlZGVudGlhbHMuc2VjcmV0LnNlY3JldEFybixcbiAgICAgIGRlc2NyaXB0aW9uOiBgRGF0YWJhc2UgQ3JlZGVudGlhbHMgU2VjcmV0IEFSTiBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q3JlZGVudGlhbHMoKTogU2VjcmV0IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRDcmVkZW50aWFscygpO1xuICB9XG5cbiAgZ2V0SG9zdEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0SG9zdEVuZHBvaW50KCk7XG4gIH1cblxuICBnZXRIb3N0UG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldEhvc3RQb3J0KCk7XG4gIH1cblxuICBnZXREYXRhYmFzZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2VOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IGNvbm5lY3QgcGVybWlzc2lvbnMgdG8gYSBncmFudGVlIGJ5IGFkZGluZyBpdCB0byB0aGUgZGF0YWJhc2Ugc2VjdXJpdHkgZ3JvdXAuXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBjb25uZWN0YWJsZSBwcmluY2lwYWwgdG8gZ3JhbnQgY29ubmVjdCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgZ3JhbnRDb25uZWN0KGdyYW50ZWU6IElDb25uZWN0YWJsZSk6IHZvaWQge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuYWxsb3dEZWZhdWx0UG9ydEZyb20oZ3JhbnRlZSk7XG4gIH1cbn1cblxuLy8gUmUtZXhwb3J0IER5bmFtb0RCIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUge1xuICBEeW5hbW9EQktleVNjaGVtYSxcbiAgRHluYW1vREJHbG9iYWxTZWNvbmRhcnlJbmRleCxcbiAgRHluYW1vREJUYWJsZVByb3BzXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2R5bmFtb2RiXCI7XG5cbi8vIFJlLWV4cG9ydCBpbnRlcmZhY2UgdHlwZXNcbmV4cG9ydCB7XG4gIHR5cGUgSVJlbGF0aW9uYWxEYXRhYmFzZSxcbiAgdHlwZSBJRHluYW1vREJEYXRhYmFzZSxcbiAgdHlwZSBBbnlEYXRhYmFzZSxcbiAgdHlwZSBEYXRhYmFzZVR5cGUsXG4gIHR5cGUgUmVsYXRpb25hbERhdGFiYXNlVHlwZSxcbiAgaXNSZWxhdGlvbmFsRGF0YWJhc2UsXG4gIGlzRHluYW1vREJEYXRhYmFzZSxcbiAgaXNBdXJvcmFEYXRhYmFzZSxcbiAgaXNJbnN0YW5jZURhdGFiYXNlLFxuICBpc0dsb2JhbEF1cm9yYURhdGFiYXNlXG59IGZyb20gXCIuL2ludGVyZmFjZXMvZGF0YWJhc2UuanNcIjtcbiJdfQ==
|
|
446
|
+
export { isRelationalDatabase, isDynamoDBDatabase, isAuroraDatabase, isInstanceDatabase, isGlobalAuroraDatabase } from "./interfaces/database.js";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { 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 type { ExternalDelegatedProps, ManualRecord } from "./interfaces/domain.js";
|
|
5
|
+
export interface DelegatedDomainPatternResult {
|
|
6
|
+
readonly hostedZone: IHostedZone;
|
|
7
|
+
readonly certificates: Map<string, ICertificate>;
|
|
8
|
+
readonly nameServers: string[];
|
|
9
|
+
readonly manualRecords: ManualRecord[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Composition for `registrar: "external-delegated"`. Creates a hosted zone
|
|
13
|
+
* for `{delegatedSubdomain}.{zoneName}` — the user adds NS records at their
|
|
14
|
+
* external registrar to delegate the subdomain to Fjall. No cross-account
|
|
15
|
+
* delegation role is required because Fjall is not creating the parent zone.
|
|
16
|
+
*/
|
|
17
|
+
export declare function composeDelegatedDomain(scope: Construct, props: ExternalDelegatedProps): DelegatedDomainPatternResult;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { HostedZone } from "../../resources/aws/networking/hostedZone.js";
|
|
2
|
+
import { DomainCertificate } from "../../resources/aws/networking/domainCertificate.js";
|
|
3
|
+
import { composeTypedDnsRecords } from "./dnsRecordComposer.js";
|
|
4
|
+
import { toPascalCase, getSafeZoneName } from "../../utils/capitaliseString.js";
|
|
5
|
+
/**
|
|
6
|
+
* Composition for `registrar: "external-delegated"`. Creates a hosted zone
|
|
7
|
+
* for `{delegatedSubdomain}.{zoneName}` — the user adds NS records at their
|
|
8
|
+
* external registrar to delegate the subdomain to Fjall. No cross-account
|
|
9
|
+
* delegation role is required because Fjall is not creating the parent zone.
|
|
10
|
+
*/
|
|
11
|
+
export function composeDelegatedDomain(scope, props) {
|
|
12
|
+
const effectiveZone = `${props.delegatedSubdomain}.${props.zoneName}`;
|
|
13
|
+
const safeZone = toPascalCase(getSafeZoneName(effectiveZone));
|
|
14
|
+
const hostedZoneConstruct = new HostedZone(scope, `${safeZone}HostedZone`, {
|
|
15
|
+
zoneName: effectiveZone,
|
|
16
|
+
createDelegationRole: false,
|
|
17
|
+
costAllocationEnvironment: props.costAllocationEnvironment,
|
|
18
|
+
costAllocationDomain: props.zoneName
|
|
19
|
+
});
|
|
20
|
+
const certificates = new Map();
|
|
21
|
+
(props.certificates ?? []).forEach((cert, index) => {
|
|
22
|
+
const normalised = normaliseCertificate(cert);
|
|
23
|
+
const safeCertName = toPascalCase(normalised.domainName.split(".").join(""));
|
|
24
|
+
const dc = new DomainCertificate(scope, `${safeZone}${safeCertName}Cert${index}`, {
|
|
25
|
+
domainName: normalised.domainName,
|
|
26
|
+
subjectAlternativeNames: normalised.subjectAlternativeNames,
|
|
27
|
+
transparencyLogging: normalised.transparencyLogging,
|
|
28
|
+
hostedZone: hostedZoneConstruct.hostedZone,
|
|
29
|
+
costAllocationEnvironment: props.costAllocationEnvironment,
|
|
30
|
+
costAllocationDomain: props.zoneName
|
|
31
|
+
});
|
|
32
|
+
certificates.set(normalised.domainName, dc.certificate);
|
|
33
|
+
});
|
|
34
|
+
if (props.records && props.records.length > 0) {
|
|
35
|
+
composeTypedDnsRecords(scope, hostedZoneConstruct.hostedZone, effectiveZone, props.records);
|
|
36
|
+
}
|
|
37
|
+
const nameServers = hostedZoneConstruct.nameServers ?? [];
|
|
38
|
+
return {
|
|
39
|
+
hostedZone: hostedZoneConstruct.hostedZone,
|
|
40
|
+
certificates,
|
|
41
|
+
nameServers,
|
|
42
|
+
manualRecords: []
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function normaliseCertificate(cert) {
|
|
46
|
+
if (typeof cert === "string") {
|
|
47
|
+
return { domainName: cert };
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
domainName: cert.domainName,
|
|
51
|
+
subjectAlternativeNames: cert.subjectAlternativeNames,
|
|
52
|
+
transparencyLogging: cert.transparencyLogging
|
|
53
|
+
};
|
|
54
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Construct } from "constructs";
|
|
2
|
+
import type { IHostedZone } from "aws-cdk-lib/aws-route53";
|
|
3
|
+
import type { DnsRecord, DnsRecordInput } from "./interfaces/domain.js";
|
|
4
|
+
/**
|
|
5
|
+
* Legacy composer consumed by `DomainFactory` (deleted in Phase 2). Accepts
|
|
6
|
+
* the `DnsRecordInput` shape from the BIND-primary era where ALIAS sentinels
|
|
7
|
+
* live in `value`. Typed targets are not supported here; use
|
|
8
|
+
* `composeTypedDnsRecords` instead.
|
|
9
|
+
*/
|
|
10
|
+
export declare function composeDnsRecords(scope: Construct, zone: IHostedZone, zoneName: string, records: DnsRecordInput[]): void;
|
|
11
|
+
/**
|
|
12
|
+
* Typed composer consumed by the new `Domain` construct. Accepts the
|
|
13
|
+
* discriminated `DnsRecord` union (`StandardRecord | AliasRecord`).
|
|
14
|
+
*
|
|
15
|
+
* `AliasRecord` entries MUST carry a `target` produced by `fjallApp()`,
|
|
16
|
+
* `fjallCdn()`, `fjallBucket()`, or `aliasTo()` — those helpers return
|
|
17
|
+
* `FjallTarget & IAliasRecordTarget` so `target.bind()` is guaranteed. A
|
|
18
|
+
* runtime guard catches user-crafted `{ kind, ... }` literals that lack
|
|
19
|
+
* `bind()`.
|
|
20
|
+
*
|
|
21
|
+
* Construct-id formula (`${safeZone}${safeName}${type}Record${index}`) is
|
|
22
|
+
* byte-identical to the legacy composer — this is an eject-contract
|
|
23
|
+
* invariant (Phase 3 depends on stable IDs).
|
|
24
|
+
*/
|
|
25
|
+
export declare function composeTypedDnsRecords(scope: Construct, zone: IHostedZone, zoneName: string, records: DnsRecord[]): void;
|