@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,17 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class CloudFrontDistribution extends constructs_1.Construct {
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { CfnOutput } from "aws-cdk-lib";
|
|
3
|
+
import { toPascalCase } from "../../../utils/capitaliseString.js";
|
|
4
|
+
import { Distribution, PriceClass, ViewerProtocolPolicy, CachePolicy, OriginRequestPolicy, AllowedMethods, OriginProtocolPolicy, Function as CloudFrontFunction, FunctionCode, FunctionRuntime, FunctionEventType } from "aws-cdk-lib/aws-cloudfront";
|
|
5
|
+
import { S3BucketOrigin, LoadBalancerV2Origin, HttpOrigin } from "aws-cdk-lib/aws-cloudfront-origins";
|
|
6
|
+
export class CloudFrontDistribution extends Construct {
|
|
7
|
+
id;
|
|
8
|
+
distribution;
|
|
10
9
|
constructor(scope, id, props) {
|
|
11
10
|
super(scope, id);
|
|
12
11
|
this.id = id;
|
|
13
12
|
// Sanitise id for CloudFormation output keys (must be alphanumeric)
|
|
14
|
-
const outputName =
|
|
13
|
+
const outputName = toPascalCase(id);
|
|
15
14
|
const defaultOrigin = this.createOrigin(props.defaultOrigin);
|
|
16
15
|
const defaultCachePolicy = this.resolveCachePolicy(props.defaultCachePolicy);
|
|
17
16
|
// Build composable viewer request function (accessGate + forwardHostHeader)
|
|
@@ -20,7 +19,7 @@ class CloudFrontDistribution extends constructs_1.Construct {
|
|
|
20
19
|
? [
|
|
21
20
|
{
|
|
22
21
|
function: viewerRequestFunction,
|
|
23
|
-
eventType:
|
|
22
|
+
eventType: FunctionEventType.VIEWER_REQUEST
|
|
24
23
|
}
|
|
25
24
|
]
|
|
26
25
|
: undefined;
|
|
@@ -30,22 +29,22 @@ class CloudFrontDistribution extends constructs_1.Construct {
|
|
|
30
29
|
additionalBehaviors[behaviour.pathPattern] = {
|
|
31
30
|
origin: this.createOrigin(behaviour.origin),
|
|
32
31
|
cachePolicy: this.resolveCachePolicy(behaviour.cachePolicy),
|
|
33
|
-
viewerProtocolPolicy:
|
|
32
|
+
viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
34
33
|
allowedMethods: this.resolveAllowedMethods(behaviour.allowedMethods),
|
|
35
34
|
// Forward viewer headers (cookies, auth) to non-S3 origins
|
|
36
35
|
...(behaviour.origin.type !== "s3" && {
|
|
37
|
-
originRequestPolicy:
|
|
36
|
+
originRequestPolicy: OriginRequestPolicy.ALL_VIEWER_EXCEPT_HOST_HEADER
|
|
38
37
|
}),
|
|
39
38
|
...(functionAssociations !== undefined && { functionAssociations })
|
|
40
39
|
};
|
|
41
40
|
}
|
|
42
41
|
}
|
|
43
|
-
this.distribution = new
|
|
42
|
+
this.distribution = new Distribution(this, `${id}Distribution`, {
|
|
44
43
|
defaultBehavior: {
|
|
45
44
|
origin: defaultOrigin,
|
|
46
45
|
cachePolicy: defaultCachePolicy,
|
|
47
|
-
viewerProtocolPolicy:
|
|
48
|
-
originRequestPolicy:
|
|
46
|
+
viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
47
|
+
originRequestPolicy: OriginRequestPolicy.ALL_VIEWER_EXCEPT_HOST_HEADER,
|
|
49
48
|
allowedMethods: this.resolveAllowedMethods(props.defaultAllowedMethods),
|
|
50
49
|
...(functionAssociations !== undefined && { functionAssociations })
|
|
51
50
|
},
|
|
@@ -59,19 +58,20 @@ class CloudFrontDistribution extends constructs_1.Construct {
|
|
|
59
58
|
logBucket: props.logBucket,
|
|
60
59
|
priceClass: this.resolvePriceClass(props.priceClass)
|
|
61
60
|
});
|
|
62
|
-
new
|
|
61
|
+
new CfnOutput(this, `${outputName}DistributionDomainName`, {
|
|
63
62
|
key: `${outputName}DistributionDomainName`,
|
|
63
|
+
exportName: `${outputName}CdnDistributionDomainName`,
|
|
64
64
|
value: this.distribution.distributionDomainName,
|
|
65
65
|
description: `CloudFront distribution domain name for ${id}`
|
|
66
66
|
});
|
|
67
|
-
new
|
|
67
|
+
new CfnOutput(this, `${outputName}DistributionId`, {
|
|
68
68
|
key: `${outputName}DistributionId`,
|
|
69
69
|
value: this.distribution.distributionId,
|
|
70
70
|
description: `CloudFront distribution ID for ${id}`
|
|
71
71
|
});
|
|
72
72
|
// Output credentials hint when access gate is enabled
|
|
73
73
|
if (props.accessGate) {
|
|
74
|
-
new
|
|
74
|
+
new CfnOutput(this, `${outputName}AccessGateUsername`, {
|
|
75
75
|
key: `${outputName}AccessGateUsername`,
|
|
76
76
|
value: props.accessGate.username,
|
|
77
77
|
description: `Access gate username for ${id}`
|
|
@@ -105,9 +105,9 @@ class CloudFrontDistribution extends constructs_1.Construct {
|
|
|
105
105
|
" request.headers['x-forwarded-host'] = { value: request.headers.host.value };";
|
|
106
106
|
}
|
|
107
107
|
functionBody += " return request; }";
|
|
108
|
-
return new
|
|
109
|
-
code:
|
|
110
|
-
runtime:
|
|
108
|
+
return new CloudFrontFunction(this, `${id}ViewerRequestFn`, {
|
|
109
|
+
code: FunctionCode.fromInline(functionBody),
|
|
110
|
+
runtime: FunctionRuntime.JS_2_0
|
|
111
111
|
});
|
|
112
112
|
}
|
|
113
113
|
createOrigin(config) {
|
|
@@ -117,17 +117,17 @@ class CloudFrontDistribution extends constructs_1.Construct {
|
|
|
117
117
|
// See: https://github.com/aws/aws-cdk/issues/31462
|
|
118
118
|
// OAC creates bucket → CDN dependency (bucket policy references distribution)
|
|
119
119
|
// OAI works across stacks without triggering cyclic dependency errors
|
|
120
|
-
return
|
|
120
|
+
return S3BucketOrigin.withOriginAccessIdentity(config.bucket, {
|
|
121
121
|
originPath: config.originPath
|
|
122
122
|
});
|
|
123
123
|
case "alb":
|
|
124
|
-
return new
|
|
124
|
+
return new LoadBalancerV2Origin(config.loadBalancer, {
|
|
125
125
|
httpPort: config.httpPort,
|
|
126
126
|
httpsPort: config.httpsPort,
|
|
127
127
|
protocolPolicy: this.resolveOriginProtocolPolicy(config.protocolPolicy)
|
|
128
128
|
});
|
|
129
129
|
case "http":
|
|
130
|
-
return new
|
|
130
|
+
return new HttpOrigin(config.domainName, {
|
|
131
131
|
originPath: config.originPath,
|
|
132
132
|
httpPort: config.httpPort,
|
|
133
133
|
httpsPort: config.httpsPort,
|
|
@@ -137,16 +137,16 @@ class CloudFrontDistribution extends constructs_1.Construct {
|
|
|
137
137
|
}
|
|
138
138
|
resolveCachePolicy(policy) {
|
|
139
139
|
if (!policy) {
|
|
140
|
-
return
|
|
140
|
+
return CachePolicy.CACHING_OPTIMIZED;
|
|
141
141
|
}
|
|
142
142
|
if (typeof policy === "string") {
|
|
143
143
|
switch (policy) {
|
|
144
144
|
case "CACHING_OPTIMIZED":
|
|
145
|
-
return
|
|
145
|
+
return CachePolicy.CACHING_OPTIMIZED;
|
|
146
146
|
case "CACHING_DISABLED":
|
|
147
|
-
return
|
|
147
|
+
return CachePolicy.CACHING_DISABLED;
|
|
148
148
|
case "CACHING_OPTIMIZED_FOR_UNCOMPRESSED_OBJECTS":
|
|
149
|
-
return
|
|
149
|
+
return CachePolicy.CACHING_OPTIMIZED_FOR_UNCOMPRESSED_OBJECTS;
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
return policy;
|
|
@@ -154,35 +154,35 @@ class CloudFrontDistribution extends constructs_1.Construct {
|
|
|
154
154
|
resolveAllowedMethods(methods) {
|
|
155
155
|
switch (methods) {
|
|
156
156
|
case "GET_HEAD":
|
|
157
|
-
return
|
|
157
|
+
return AllowedMethods.ALLOW_GET_HEAD;
|
|
158
158
|
case "GET_HEAD_OPTIONS":
|
|
159
|
-
return
|
|
159
|
+
return AllowedMethods.ALLOW_GET_HEAD_OPTIONS;
|
|
160
160
|
case "ALL":
|
|
161
|
-
return
|
|
161
|
+
return AllowedMethods.ALLOW_ALL;
|
|
162
162
|
default:
|
|
163
|
-
return
|
|
163
|
+
return AllowedMethods.ALLOW_GET_HEAD;
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
resolveOriginProtocolPolicy(policy) {
|
|
167
167
|
switch (policy) {
|
|
168
168
|
case "HTTP_ONLY":
|
|
169
|
-
return
|
|
169
|
+
return OriginProtocolPolicy.HTTP_ONLY;
|
|
170
170
|
case "HTTPS_ONLY":
|
|
171
|
-
return
|
|
171
|
+
return OriginProtocolPolicy.HTTPS_ONLY;
|
|
172
172
|
case "MATCH_VIEWER":
|
|
173
|
-
return
|
|
173
|
+
return OriginProtocolPolicy.MATCH_VIEWER;
|
|
174
174
|
default:
|
|
175
|
-
return
|
|
175
|
+
return OriginProtocolPolicy.HTTPS_ONLY;
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
resolvePriceClass(priceClass) {
|
|
179
179
|
switch (priceClass) {
|
|
180
180
|
case "PriceClass_100":
|
|
181
|
-
return
|
|
181
|
+
return PriceClass.PRICE_CLASS_100;
|
|
182
182
|
case "PriceClass_200":
|
|
183
|
-
return
|
|
183
|
+
return PriceClass.PRICE_CLASS_200;
|
|
184
184
|
case "PriceClass_All":
|
|
185
|
-
return
|
|
185
|
+
return PriceClass.PRICE_CLASS_ALL;
|
|
186
186
|
default:
|
|
187
187
|
return undefined;
|
|
188
188
|
}
|
|
@@ -206,5 +206,3 @@ class CloudFrontDistribution extends constructs_1.Construct {
|
|
|
206
206
|
return this.distribution;
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
|
-
exports.CloudFrontDistribution = CloudFrontDistribution;
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRGcm9udC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2Nkbi9jbG91ZEZyb250LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyw2Q0FBd0M7QUFDeEMsc0VBQStEO0FBQy9ELCtEQWVvQztBQUNwQywrRUFJNEM7QUF1RTVDLE1BQWEsc0JBQXVCLFNBQVEsc0JBQVM7SUFJbkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBa0M7UUFFbEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUViLG9FQUFvRTtRQUNwRSxNQUFNLFVBQVUsR0FBRyxJQUFBLCtCQUFZLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ2hELEtBQUssQ0FBQyxrQkFBa0IsQ0FDekIsQ0FBQztRQUVGLDRFQUE0RTtRQUM1RSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDM0QsRUFBRSxFQUNGLEtBQUssQ0FBQyxpQkFBaUIsRUFDdkIsS0FBSyxDQUFDLFVBQVUsQ0FDakIsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCO1lBQ2hELENBQUMsQ0FBQztnQkFDRTtvQkFDRSxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixTQUFTLEVBQUUsa0NBQWlCLENBQUMsY0FBYztpQkFDNUM7YUFDRjtZQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxNQUFNLG1CQUFtQixHQUFvQyxFQUFFLENBQUM7UUFDaEUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsS0FBSyxN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SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQXBRRCx3REFvUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZ1wiO1xuaW1wb3J0IHtcbiAgRGlzdHJpYnV0aW9uLFxuICBQcmljZUNsYXNzLFxuICB0eXBlIElPcmlnaW4sXG4gIFZpZXdlclByb3RvY29sUG9saWN5LFxuICBDYWNoZVBvbGljeSxcbiAgdHlwZSBJQ2FjaGVQb2xpY3ksXG4gIE9yaWdpblJlcXVlc3RQb2xpY3ksXG4gIEFsbG93ZWRNZXRob2RzLFxuICBPcmlnaW5Qcm90b2NvbFBvbGljeSxcbiAgdHlwZSBCZWhhdmlvck9wdGlvbnMsXG4gIEZ1bmN0aW9uIGFzIENsb3VkRnJvbnRGdW5jdGlvbixcbiAgRnVuY3Rpb25Db2RlLFxuICBGdW5jdGlvblJ1bnRpbWUsXG4gIEZ1bmN0aW9uRXZlbnRUeXBlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHtcbiAgUzNCdWNrZXRPcmlnaW4sXG4gIExvYWRCYWxhbmNlclYyT3JpZ2luLFxuICBIdHRwT3JpZ2luXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zXCI7XG5pbXBvcnQgeyB0eXBlIElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyB0eXBlIElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHsgdHlwZSBJQ2VydGlmaWNhdGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuXG5leHBvcnQgdHlwZSBDYWNoZVBvbGljeVByZXNldCA9XG4gIHwgXCJDQUNISU5HX09QVElNSVpFRFwiXG4gIHwgXCJDQUNISU5HX0RJU0FCTEVEXCJcbiAgfCBcIkNBQ0hJTkdfT1BUSU1JWkVEX0ZPUl9VTkNPTVBSRVNTRURfT0JKRUNUU1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFMzT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJzM1wiO1xuICBidWNrZXQ6IElCdWNrZXQ7XG4gIG9yaWdpblBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxiT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJhbGJcIjtcbiAgbG9hZEJhbGFuY2VyOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXI7XG4gIHByb3RvY29sUG9saWN5PzogXCJIVFRQX09OTFlcIiB8IFwiSFRUUFNfT05MWVwiIHwgXCJNQVRDSF9WSUVXRVJcIjtcbiAgaHR0cFBvcnQ/OiBudW1iZXI7XG4gIGh0dHBzUG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdHRwT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJodHRwXCI7XG4gIGRvbWFpbk5hbWU6IHN0cmluZztcbiAgb3JpZ2luUGF0aD86IHN0cmluZztcbiAgcHJvdG9jb2xQb2xpY3k/OiBcIkhUVFBfT05MWVwiIHwgXCJIVFRQU19PTkxZXCIgfCBcIk1BVENIX1ZJRVdFUlwiO1xuICBodHRwUG9ydD86IG51bWJlcjtcbiAgaHR0cHNQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBDZG5PcmlnaW5Db25maWcgPVxuICB8IFMzT3JpZ2luQ29uZmlnXG4gIHwgQWxiT3JpZ2luQ29uZmlnXG4gIHwgSHR0cE9yaWdpbkNvbmZpZztcblxuZXhwb3J0IGludGVyZmFjZSBDZG5CZWhhdmlvdXIge1xuICBwYXRoUGF0dGVybjogc3RyaW5nO1xuICBvcmlnaW46IENkbk9yaWdpbkNvbmZpZztcbiAgY2FjaGVQb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeTtcbiAgYWxsb3dlZE1ldGhvZHM/OiBcIkdFVF9IRUFEXCIgfCBcIkdFVF9IRUFEX09QVElPTlNcIiB8IFwiQUxMXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzR2F0ZUNvbmZpZyB7XG4gIHR5cGU6IFwiYmFzaWMtYXV0aFwiO1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnJvbnREaXN0cmlidXRpb25Qcm9wcyB7XG4gIGRlZmF1bHRPcmlnaW46IENkbk9yaWdpbkNvbmZpZztcbiAgZGVmYXVsdENhY2hlUG9saWN5PzogQ2FjaGVQb2xpY3lQcmVzZXQgfCBJQ2FjaGVQb2xpY3k7XG4gIGRlZmF1bHRBbGxvd2VkTWV0aG9kcz86IFwiR0VUX0hFQURcIiB8IFwiR0VUX0hFQURfT1BUSU9OU1wiIHwgXCJBTExcIjtcbiAgYmVoYXZpb3Vycz86IENkbkJlaGF2aW91cltdO1xuICBkb21haW5OYW1lcz86IHN0cmluZ1tdO1xuICBjZXJ0aWZpY2F0ZT86IElDZXJ0aWZpY2F0ZTtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW5hYmxlTG9nZ2luZz86IGJvb2xlYW47XG4gIGxvZ0J1Y2tldD86IElCdWNrZXQ7XG4gIHByaWNlQ2xhc3M/OiBcIlByaWNlQ2xhc3NfMTAwXCIgfCBcIlByaWNlQ2xhc3NfMjAwXCIgfCBcIlByaWNlQ2xhc3NfQWxsXCI7XG4gIC8qKiBBZGRzIGEgQ2xvdWRGcm9udCBGdW5jdGlvbiB0byBjb3B5IHRoZSB2aWV3ZXIgSG9zdCBoZWFkZXIgaW50byBYLUZvcndhcmRlZC1Ib3N0LlxuICAgKiBSZXF1aXJlZCB3aGVuIHRoZSBvcmlnaW4gaXMgYSBMYW1iZGEgRnVuY3Rpb24gVVJMIG9yIEFMQiBiZWhpbmQgQ2xvdWRGcm9udCxcbiAgICogYmVjYXVzZSBBbGxWaWV3ZXJFeGNlcHRIb3N0SGVhZGVyIHJlcGxhY2VzIEhvc3Qgd2l0aCB0aGUgb3JpZ2luIGRvbWFpbi4gKi9cbiAgZm9yd2FyZEhvc3RIZWFkZXI/OiBib29sZWFuO1xuICAvKiogQWRkcyBhY2Nlc3MgZ2F0aW5nIHRvIHRoZSBkaXN0cmlidXRpb24gdmlhIGEgQ2xvdWRGcm9udCBGdW5jdGlvbi5cbiAgICogU2V0IHRvIGZhbHNlIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSAob3Igb21pdCkuICovXG4gIGFjY2Vzc0dhdGU/OiBmYWxzZSB8IEFjY2Vzc0dhdGVDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBDbG91ZEZyb250RGlzdHJpYnV0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgZGlzdHJpYnV0aW9uOiBEaXN0cmlidXRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDbG91ZEZyb250RGlzdHJpYnV0aW9uUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICAvLyBTYW5pdGlzZSBpZCBmb3IgQ2xvdWRGb3JtYXRpb24gb3V0cHV0IGtleXMgKG11c3QgYmUgYWxwaGFudW1lcmljKVxuICAgIGNvbnN0IG91dHB1dE5hbWUgPSB0b1Bhc2NhbENhc2UoaWQpO1xuXG4gICAgY29uc3QgZGVmYXVsdE9yaWdpbiA9IHRoaXMuY3JlYXRlT3JpZ2luKHByb3BzLmRlZmF1bHRPcmlnaW4pO1xuICAgIGNvbnN0IGRlZmF1bHRDYWNoZVBvbGljeSA9IHRoaXMucmVzb2x2ZUNhY2hlUG9saWN5KFxuICAgICAgcHJvcHMuZGVmYXVsdENhY2hlUG9saWN5XG4gICAgKTtcblxuICAgIC8vIEJ1aWxkIGNvbXBvc2FibGUgdmlld2VyIHJlcXVlc3QgZnVuY3Rpb24gKGFjY2Vzc0dhdGUgKyBmb3J3YXJkSG9zdEhlYWRlcilcbiAgICBjb25zdCB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb24gPSB0aGlzLmJ1aWxkVmlld2VyUmVxdWVzdEZ1bmN0aW9uKFxuICAgICAgaWQsXG4gICAgICBwcm9wcy5mb3J3YXJkSG9zdEhlYWRlcixcbiAgICAgIHByb3BzLmFjY2Vzc0dhdGVcbiAgICApO1xuXG4gICAgY29uc3QgZnVuY3Rpb25Bc3NvY2lhdGlvbnMgPSB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb25cbiAgICAgID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb24sXG4gICAgICAgICAgICBldmVudFR5cGU6IEZ1bmN0aW9uRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNUXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFkZGl0aW9uYWxCZWhhdmlvcnM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcbiAgICBpZiAocHJvcHMuYmVoYXZpb3Vycykge1xuICAgICAgZm9yIChjb25zdCBiZWhhdmlvdXIgb2YgcHJvcHMuYmVoYXZpb3Vycykge1xuICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzW2JlaGF2aW91ci5wYXRoUGF0dGVybl0gPSB7XG4gICAgICAgICAgb3JpZ2luOiB0aGlzLmNyZWF0ZU9yaWdpbihiZWhhdmlvdXIub3JpZ2luKSxcbiAgICAgICAgICBjYWNoZVBvbGljeTogdGhpcy5yZXNvbHZlQ2FjaGVQb2xpY3koYmVoYXZpb3VyLmNhY2hlUG9saWN5KSxcbiAgICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IHRoaXMucmVzb2x2ZUFsbG93ZWRNZXRob2RzKGJlaGF2aW91ci5hbGxvd2VkTWV0aG9kcyksXG4gICAgICAgICAgLy8gRm9yd2FyZCB2aWV3ZXIgaGVhZGVycyAoY29va2llcywgYXV0aCkgdG8gbm9uLVMzIG9yaWdpbnNcbiAgICAgICAgICAuLi4oYmVoYXZpb3VyLm9yaWdpbi50eXBlICE9PSBcInMzXCIgJiYge1xuICAgICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeTpcbiAgICAgICAgICAgICAgT3JpZ2luUmVxdWVzdFBvbGljeS5BTExfVklFV0VSX0VYQ0VQVF9IT1NUX0hFQURFUlxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLihmdW5jdGlvbkFzc29jaWF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHsgZnVuY3Rpb25Bc3NvY2lhdGlvbnMgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgYCR7aWR9RGlzdHJpYnV0aW9uYCwge1xuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogZGVmYXVsdE9yaWdpbixcbiAgICAgICAgY2FjaGVQb2xpY3k6IGRlZmF1bHRDYWNoZVBvbGljeSxcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBPcmlnaW5SZXF1ZXN0UG9saWN5LkFMTF9WSUVXRVJfRVhDRVBUX0hPU1RfSEVBREVSLFxuICAgICAgICBhbGxvd2VkTWV0aG9kczogdGhpcy5yZXNvbHZlQWxsb3dlZE1ldGhvZHMocHJvcHMuZGVmYXVsdEFsbG93ZWRNZXRob2RzKSxcbiAgICAgICAgLi4uKGZ1bmN0aW9uQXNzb2NpYXRpb25zICE9PSB1bmRlZmluZWQgJiYgeyBmdW5jdGlvbkFzc29jaWF0aW9ucyB9KVxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6XG4gICAgICAgIE9iamVjdC5rZXlzKGFkZGl0aW9uYWxCZWhhdmlvcnMpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGFkZGl0aW9uYWxCZWhhdmlvcnNcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRvbWFpbk5hbWVzOiBwcm9wcy5kb21haW5OYW1lcyxcbiAgICAgIGNlcnRpZmljYXRlOiBwcm9wcy5jZXJ0aWZpY2F0ZSxcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnQsXG4gICAgICBlbmFibGVMb2dnaW5nOiBwcm9wcy5lbmFibGVMb2dnaW5nLFxuICAgICAgbG9nQnVja2V0OiBwcm9wcy5sb2dCdWNrZXQsXG4gICAgICBwcmljZUNsYXNzOiB0aGlzLnJlc29sdmVQcmljZUNsYXNzKHByb3BzLnByaWNlQ2xhc3MpXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9RGlzdHJpYnV0aW9uRG9tYWluTmFtZWAsIHtcbiAgICAgIGtleTogYCR7b3V0cHV0TmFtZX1EaXN0cmlidXRpb25Eb21haW5OYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBkb21haW4gbmFtZSBmb3IgJHtpZH1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9RGlzdHJpYnV0aW9uSWRgLCB7XG4gICAgICBrZXk6IGAke291dHB1dE5hbWV9RGlzdHJpYnV0aW9uSWRgLFxuICAgICAgdmFsdWU6IHRoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkLFxuICAgICAgZGVzY3JpcHRpb246IGBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBJRCBmb3IgJHtpZH1gXG4gICAgfSk7XG5cbiAgICAvLyBPdXRwdXQgY3JlZGVudGlhbHMgaGludCB3aGVuIGFjY2VzcyBnYXRlIGlzIGVuYWJsZWRcbiAgICBpZiAocHJvcHMuYWNjZXNzR2F0ZSkge1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfUFjY2Vzc0dhdGVVc2VybmFtZWAsIHtcbiAgICAgICAga2V5OiBgJHtvdXRwdXROYW1lfUFjY2Vzc0dhdGVVc2VybmFtZWAsXG4gICAgICAgIHZhbHVlOiBwcm9wcy5hY2Nlc3NHYXRlLnVzZXJuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFjY2VzcyBnYXRlIHVzZXJuYW1lIGZvciAke2lkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBvc2FibGUgQ2xvdWRGcm9udCBGdW5jdGlvbiBmb3IgVklFV0VSX1JFUVVFU1QuXG4gICAqIE1lcmdlcyBhY2Nlc3NHYXRlIGFuZCBmb3J3YXJkSG9zdEhlYWRlciBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uXG4gICAqIChDbG91ZEZyb250IGFsbG93cyBvbmx5IG9uZSBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSkuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVmlld2VyUmVxdWVzdEZ1bmN0aW9uKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZm9yd2FyZEhvc3RIZWFkZXI/OiBib29sZWFuLFxuICAgIGFjY2Vzc0dhdGU/OiBmYWxzZSB8IEFjY2Vzc0dhdGVDb25maWdcbiAgKTogQ2xvdWRGcm9udEZ1bmN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWFjY2Vzc0dhdGUgJiYgIWZvcndhcmRIb3N0SGVhZGVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGxldCBmdW5jdGlvbkJvZHkgPSBcImZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsgdmFyIHJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1wiO1xuXG4gICAgaWYgKGFjY2Vzc0dhdGUpIHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oXG4gICAgICAgIGAke2FjY2Vzc0dhdGUudXNlcm5hbWV9OiR7YWNjZXNzR2F0ZS5wYXNzd29yZH1gXG4gICAgICApLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuXG4gICAgICBmdW5jdGlvbkJvZHkgKz1cbiAgICAgICAgYCB2YXIgYXV0aEhlYWRlciA9IHJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uO2AgK1xuICAgICAgICBgIGlmICghYXV0aEhlYWRlciB8fCBhdXRoSGVhZGVyLnZhbHVlICE9PSBcIkJhc2ljICR7Y3JlZGVudGlhbHN9XCIpIHtgICtcbiAgICAgICAgYCByZXR1cm4ge2AgK1xuICAgICAgICBgIHN0YXR1c0NvZGU6IDQwMSxgICtcbiAgICAgICAgYCBzdGF0dXNEZXNjcmlwdGlvbjogXCJVbmF1dGhvcml6ZWRcIixgICtcbiAgICAgICAgYCBoZWFkZXJzOiB7IFwid3d3LWF1dGhlbnRpY2F0ZVwiOiB7IHZhbHVlOiAnQmFzaWMgcmVhbG09XCJSZXN0cmljdGVkXCInIH0gfSxgICtcbiAgICAgICAgYCBib2R5OiB7IGVuY29kaW5nOiBcInRleHRcIiwgZGF0YTogXCJVbmF1dGhvcml6ZWRcIiB9YCArXG4gICAgICAgIGAgfTsgfWA7XG4gICAgfVxuXG4gICAgaWYgKGZvcndhcmRIb3N0SGVhZGVyKSB7XG4gICAgICBmdW5jdGlvbkJvZHkgKz1cbiAgICAgICAgXCIgcmVxdWVzdC5oZWFkZXJzWyd4LWZvcndhcmRlZC1ob3N0J10gPSB7IHZhbHVlOiByZXF1ZXN0LmhlYWRlcnMuaG9zdC52YWx1ZSB9O1wiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uQm9keSArPSBcIiByZXR1cm4gcmVxdWVzdDsgfVwiO1xuXG4gICAgcmV0dXJuIG5ldyBDbG91ZEZyb250RnVuY3Rpb24odGhpcywgYCR7aWR9Vmlld2VyUmVxdWVzdEZuYCwge1xuICAgICAgY29kZTogRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoZnVuY3Rpb25Cb2R5KSxcbiAgICAgIHJ1bnRpbWU6IEZ1bmN0aW9uUnVudGltZS5KU18yXzBcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3JpZ2luKGNvbmZpZzogQ2RuT3JpZ2luQ29uZmlnKTogSU9yaWdpbiB7XG4gICAgc3dpdGNoIChjb25maWcudHlwZSkge1xuICAgICAgY2FzZSBcInMzXCI6XG4gICAgICAgIC8vIFVzaW5nIE9BSSBpbnN0ZWFkIG9mIE9BQyB0byBhdm9pZCBjcm9zcy1zdGFjayBjaXJjdWxhciBkZXBlbmRlbmNpZXNcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzMxNDYyXG4gICAgICAgIC8vIE9BQyBjcmVhdGVzIGJ1Y2tldCDihpIgQ0ROIGRlcGVuZGVuY3kgKGJ1Y2tldCBwb2xpY3kgcmVmZXJlbmNlcyBkaXN0cmlidXRpb24pXG4gICAgICAgIC8vIE9BSSB3b3JrcyBhY3Jvc3Mgc3RhY2tzIHdpdGhvdXQgdHJpZ2dlcmluZyBjeWNsaWMgZGVwZW5kZW5jeSBlcnJvcnNcbiAgICAgICAgcmV0dXJuIFMzQnVja2V0T3JpZ2luLndpdGhPcmlnaW5BY2Nlc3NJZGVudGl0eShjb25maWcuYnVja2V0LCB7XG4gICAgICAgICAgb3JpZ2luUGF0aDogY29uZmlnLm9yaWdpblBhdGhcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgXCJhbGJcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBMb2FkQmFsYW5jZXJWMk9yaWdpbihjb25maWcubG9hZEJhbGFuY2VyLCB7XG4gICAgICAgICAgaHR0cFBvcnQ6IGNvbmZpZy5odHRwUG9ydCxcbiAgICAgICAgICBodHRwc1BvcnQ6IGNvbmZpZy5odHRwc1BvcnQsXG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IHRoaXMucmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgICAgICAgICAgY29uZmlnLnByb3RvY29sUG9saWN5XG4gICAgICAgICAgKVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSBcImh0dHBcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwT3JpZ2luKGNvbmZpZy5kb21haW5OYW1lLCB7XG4gICAgICAgICAgb3JpZ2luUGF0aDogY29uZmlnLm9yaWdpblBhdGgsXG4gICAgICAgICAgaHR0cFBvcnQ6IGNvbmZpZy5odHRwUG9ydCxcbiAgICAgICAgICBodHRwc1BvcnQ6IGNvbmZpZy5odHRwc1BvcnQsXG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IHRoaXMucmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgICAgICAgICAgY29uZmlnLnByb3RvY29sUG9saWN5XG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDYWNoZVBvbGljeShcbiAgICBwb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeVxuICApOiBJQ2FjaGVQb2xpY3kge1xuICAgIGlmICghcG9saWN5KSB7XG4gICAgICByZXR1cm4gQ2FjaGVQb2xpY3kuQ0FDSElOR19PUFRJTUlaRUQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwb2xpY3kgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHN3aXRjaCAocG9saWN5KSB7XG4gICAgICAgIGNhc2UgXCJDQUNISU5HX09QVElNSVpFRFwiOlxuICAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRDtcbiAgICAgICAgY2FzZSBcIkNBQ0hJTkdfRElTQUJMRURcIjpcbiAgICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRDtcbiAgICAgICAgY2FzZSBcIkNBQ0hJTkdfT1BUSU1JWkVEX0ZPUl9VTkNPTVBSRVNTRURfT0JKRUNUU1wiOlxuICAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRF9GT1JfVU5DT01QUkVTU0VEX09CSkVDVFM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvbGljeTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFsbG93ZWRNZXRob2RzKFxuICAgIG1ldGhvZHM/OiBcIkdFVF9IRUFEXCIgfCBcIkdFVF9IRUFEX09QVElPTlNcIiB8IFwiQUxMXCJcbiAgKTogQWxsb3dlZE1ldGhvZHMge1xuICAgIHN3aXRjaCAobWV0aG9kcykge1xuICAgICAgY2FzZSBcIkdFVF9IRUFEXCI6XG4gICAgICAgIHJldHVybiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRDtcbiAgICAgIGNhc2UgXCJHRVRfSEVBRF9PUFRJT05TXCI6XG4gICAgICAgIHJldHVybiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TO1xuICAgICAgY2FzZSBcIkFMTFwiOlxuICAgICAgICByZXR1cm4gQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgIHBvbGljeT86IFwiSFRUUF9PTkxZXCIgfCBcIkhUVFBTX09OTFlcIiB8IFwiTUFUQ0hfVklFV0VSXCJcbiAgKTogT3JpZ2luUHJvdG9jb2xQb2xpY3kge1xuICAgIHN3aXRjaCAocG9saWN5KSB7XG4gICAgICBjYXNlIFwiSFRUUF9PTkxZXCI6XG4gICAgICAgIHJldHVybiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQX09OTFk7XG4gICAgICBjYXNlIFwiSFRUUFNfT05MWVwiOlxuICAgICAgICByZXR1cm4gT3JpZ2luUHJvdG9jb2xQb2xpY3kuSFRUUFNfT05MWTtcbiAgICAgIGNhc2UgXCJNQVRDSF9WSUVXRVJcIjpcbiAgICAgICAgcmV0dXJuIE9yaWdpblByb3RvY29sUG9saWN5Lk1BVENIX1ZJRVdFUjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQU19PTkxZO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVByaWNlQ2xhc3MoXG4gICAgcHJpY2VDbGFzcz86IFwiUHJpY2VDbGFzc18xMDBcIiB8IFwiUHJpY2VDbGFzc18yMDBcIiB8IFwiUHJpY2VDbGFzc19BbGxcIlxuICApOiBQcmljZUNsYXNzIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKHByaWNlQ2xhc3MpIHtcbiAgICAgIGNhc2UgXCJQcmljZUNsYXNzXzEwMFwiOlxuICAgICAgICByZXR1cm4gUHJpY2VDbGFzcy5QUklDRV9DTEFTU18xMDA7XG4gICAgICBjYXNlIFwiUHJpY2VDbGFzc18yMDBcIjpcbiAgICAgICAgcmV0dXJuIFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMjAwO1xuICAgICAgY2FzZSBcIlByaWNlQ2xhc3NfQWxsXCI6XG4gICAgICAgIHJldHVybiBQcmljZUNsYXNzLlBSSUNFX0NMQVNTX0FMTDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gZG9tYWluIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdHJpYnV0aW9uRG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gSUQuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdHJpYnV0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1bmRlcmx5aW5nIENESyBEaXN0cmlidXRpb24gY29uc3RydWN0LlxuICAgKi9cbiAgcHVibGljIGdldERpc3RyaWJ1dGlvbigpOiBEaXN0cmlidXRpb24ge1xuICAgIHJldHVybiB0aGlzLmRpc3RyaWJ1dGlvbjtcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./cloudFront";
|
|
1
|
+
export * from "./cloudFront.js";
|
|
@@ -1,18 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./cloudFront"), exports);
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9jZG4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2Nsb3VkRnJvbnRcIjtcbiJdfQ==
|
|
1
|
+
export * from "./cloudFront.js";
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { InstanceType, LaunchTemplate, SubnetType, MachineImage, LaunchTemplateHttpTokens, KeyPair, SecurityGroup, Peer, Port, Connections } from "aws-cdk-lib/aws-ec2";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { resolvePrivateSubnetType } from "../../../utils/vpcUtils.js";
|
|
4
|
+
import { Duration, Stack } from "aws-cdk-lib";
|
|
5
|
+
import { AutoScalingGroup, GroupMetrics, TerminationPolicy, UpdatePolicy, OnDemandAllocationStrategy, SpotAllocationStrategy } from "aws-cdk-lib/aws-autoscaling";
|
|
6
|
+
import { AwsCustomResource } from "../utilities/awsCustomResource.js";
|
|
7
|
+
import { PhysicalResourceId } from "aws-cdk-lib/custom-resources";
|
|
8
|
+
import { Vpc } from "../networking/vpc.js";
|
|
9
|
+
export class Ec2Instance extends Construct {
|
|
10
|
+
launchTemplate;
|
|
11
|
+
vpc;
|
|
12
|
+
asgSecurityGroup;
|
|
13
|
+
autoScalingGroup;
|
|
14
|
+
keyPair;
|
|
15
|
+
connections;
|
|
13
16
|
constructor(scope, id, props) {
|
|
14
17
|
super(scope, id);
|
|
15
18
|
this.addVpc(props);
|
|
@@ -19,9 +22,9 @@ class Ec2Instance extends constructs_1.Construct {
|
|
|
19
22
|
this.suspendAutoScaling(props);
|
|
20
23
|
// Initialise connections with the security group and optional defaultPort
|
|
21
24
|
// When defaultPort is set, other resources can use allowToDefaultPort(ec2Instance)
|
|
22
|
-
this.connections = new
|
|
25
|
+
this.connections = new Connections({
|
|
23
26
|
securityGroups: [this.asgSecurityGroup],
|
|
24
|
-
defaultPort: props.defaultPort ?
|
|
27
|
+
defaultPort: props.defaultPort ? Port.tcp(props.defaultPort) : undefined
|
|
25
28
|
});
|
|
26
29
|
}
|
|
27
30
|
addVpc(props) {
|
|
@@ -29,7 +32,7 @@ class Ec2Instance extends constructs_1.Construct {
|
|
|
29
32
|
this.vpc = props.vpc;
|
|
30
33
|
}
|
|
31
34
|
else {
|
|
32
|
-
this.vpc = new
|
|
35
|
+
this.vpc = new Vpc(this, `${props.serviceName}Vpc`, {
|
|
33
36
|
accountId: props.accountId,
|
|
34
37
|
subnetConfiguration: props.subnetConfiguration
|
|
35
38
|
});
|
|
@@ -41,23 +44,23 @@ class Ec2Instance extends constructs_1.Construct {
|
|
|
41
44
|
}
|
|
42
45
|
else {
|
|
43
46
|
// TODO: Break out into a separate construct for use with better prop handling
|
|
44
|
-
this.keyPair = new
|
|
47
|
+
this.keyPair = new KeyPair(this, "KeyPair", {
|
|
45
48
|
keyPairName: `${props.serviceName}KeyPair`
|
|
46
49
|
});
|
|
47
50
|
}
|
|
48
51
|
}
|
|
49
52
|
addLaunchTemplate(props) {
|
|
50
|
-
this.asgSecurityGroup = new
|
|
53
|
+
this.asgSecurityGroup = new SecurityGroup(this, `AsgSecurityGroup`, {
|
|
51
54
|
vpc: this.vpc,
|
|
52
55
|
description: `Security group for the ${props.serviceName} auto scaling group`
|
|
53
56
|
});
|
|
54
57
|
if (props.enableSSH) {
|
|
55
|
-
this.asgSecurityGroup.addIngressRule(
|
|
58
|
+
this.asgSecurityGroup.addIngressRule(Peer.anyIpv4(), Port.tcp(22), "Allow SSH");
|
|
56
59
|
}
|
|
57
|
-
this.launchTemplate = new
|
|
60
|
+
this.launchTemplate = new LaunchTemplate(this, "LaunchTemplate", {
|
|
58
61
|
launchTemplateName: `${props.serviceName}LaunchTemplate`,
|
|
59
|
-
instanceType: new
|
|
60
|
-
machineImage: props.machineImage ||
|
|
62
|
+
instanceType: new InstanceType(`${props.instanceType}`),
|
|
63
|
+
machineImage: props.machineImage || MachineImage.latestAmazonLinux2023(),
|
|
61
64
|
userData: props.userData,
|
|
62
65
|
role: props.role,
|
|
63
66
|
blockDevices: props?.blockDevices,
|
|
@@ -65,7 +68,7 @@ class Ec2Instance extends constructs_1.Construct {
|
|
|
65
68
|
detailedMonitoring: true,
|
|
66
69
|
requireImdsv2: true,
|
|
67
70
|
httpPutResponseHopLimit: 2,
|
|
68
|
-
httpTokens:
|
|
71
|
+
httpTokens: LaunchTemplateHttpTokens.REQUIRED,
|
|
69
72
|
instanceMetadataTags: true,
|
|
70
73
|
keyPair: this.keyPair,
|
|
71
74
|
associatePublicIpAddress: !!this.keyPair
|
|
@@ -77,18 +80,18 @@ class Ec2Instance extends constructs_1.Construct {
|
|
|
77
80
|
vpc: this.vpc,
|
|
78
81
|
vpcSubnets: {
|
|
79
82
|
subnetType: props.enableSSH
|
|
80
|
-
?
|
|
81
|
-
:
|
|
83
|
+
? SubnetType.PUBLIC
|
|
84
|
+
: resolvePrivateSubnetType(this.vpc)
|
|
82
85
|
},
|
|
83
86
|
minCapacity: props.minCapacity,
|
|
84
87
|
maxCapacity: props.maxCapacity,
|
|
85
|
-
cooldown:
|
|
86
|
-
groupMetrics: [
|
|
87
|
-
updatePolicy:
|
|
88
|
+
cooldown: Duration.seconds(60),
|
|
89
|
+
groupMetrics: [GroupMetrics.all()],
|
|
90
|
+
updatePolicy: UpdatePolicy.replacingUpdate(),
|
|
88
91
|
newInstancesProtectedFromScaleIn: true,
|
|
89
92
|
terminationPolicies: [
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
TerminationPolicy.OLDEST_LAUNCH_CONFIGURATION,
|
|
94
|
+
TerminationPolicy.CLOSEST_TO_NEXT_INSTANCE_HOUR
|
|
92
95
|
],
|
|
93
96
|
ssmSessionPermissions: true
|
|
94
97
|
};
|
|
@@ -97,21 +100,21 @@ class Ec2Instance extends constructs_1.Construct {
|
|
|
97
100
|
props.spotCapacityPercentage > 0) {
|
|
98
101
|
const spotPercentage = Math.min(100, Math.max(0, props.spotCapacityPercentage));
|
|
99
102
|
const onDemandPercentage = 100 - spotPercentage;
|
|
100
|
-
this.autoScalingGroup = new
|
|
103
|
+
this.autoScalingGroup = new AutoScalingGroup(this, "AutoScalingGroup", {
|
|
101
104
|
...baseAsgProps,
|
|
102
105
|
mixedInstancesPolicy: {
|
|
103
106
|
instancesDistribution: {
|
|
104
|
-
onDemandAllocationStrategy:
|
|
107
|
+
onDemandAllocationStrategy: OnDemandAllocationStrategy.PRIORITIZED,
|
|
105
108
|
onDemandBaseCapacity: 0,
|
|
106
109
|
onDemandPercentageAboveBaseCapacity: onDemandPercentage,
|
|
107
|
-
spotAllocationStrategy:
|
|
110
|
+
spotAllocationStrategy: SpotAllocationStrategy.PRICE_CAPACITY_OPTIMIZED
|
|
108
111
|
},
|
|
109
112
|
launchTemplate: this.launchTemplate
|
|
110
113
|
}
|
|
111
114
|
});
|
|
112
115
|
}
|
|
113
116
|
else {
|
|
114
|
-
this.autoScalingGroup = new
|
|
117
|
+
this.autoScalingGroup = new AutoScalingGroup(this, "AutoScalingGroup", {
|
|
115
118
|
...baseAsgProps,
|
|
116
119
|
launchTemplate: this.launchTemplate
|
|
117
120
|
});
|
|
@@ -131,17 +134,16 @@ class Ec2Instance extends constructs_1.Construct {
|
|
|
131
134
|
AutoScalingGroupName: this.autoScalingGroup.autoScalingGroupName,
|
|
132
135
|
ScalingProcesses: ["AZRebalance"]
|
|
133
136
|
},
|
|
134
|
-
physicalResourceId:
|
|
137
|
+
physicalResourceId: PhysicalResourceId.of("suspendAutoScaling")
|
|
135
138
|
};
|
|
136
|
-
new
|
|
139
|
+
new AwsCustomResource(this, "SuspendAutoscaling", {
|
|
137
140
|
onCreate: suspendCall,
|
|
138
141
|
onUpdate: suspendCall,
|
|
139
142
|
resourceType: "Custom::suspendAutoscaling"
|
|
140
143
|
});
|
|
141
144
|
}
|
|
142
145
|
}
|
|
143
|
-
|
|
144
|
-
class Ec2InstanceStack extends aws_cdk_lib_1.Stack {
|
|
146
|
+
export class Ec2InstanceStack extends Stack {
|
|
145
147
|
constructor(scope, id, props) {
|
|
146
148
|
super(scope, id, props);
|
|
147
149
|
new Ec2Instance(this, id, {
|
|
@@ -149,5 +151,3 @@ class Ec2InstanceStack extends aws_cdk_lib_1.Stack {
|
|
|
149
151
|
});
|
|
150
152
|
}
|
|
151
153
|
}
|
|
152
|
-
exports.Ec2InstanceStack = Ec2InstanceStack;
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lYzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBa0I2QjtBQUM3QiwyQ0FBdUM7QUFDdkMsc0RBQW1FO0FBQ25FLDZDQUErRDtBQUUvRCxpRUFPcUM7QUFDckMsc0VBQW1FO0FBQ25FLG1FQUFrRTtBQUNsRSwyQ0FBd0M7QUFtQnhDLE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBUXhDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0IsMEVBQTBFO1FBQzFFLG1GQUFtRjtRQUNuRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkscUJBQVcsQ0FBQztZQUNqQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDdkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3pFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBdUI7UUFDNUIsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7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QUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBd0I7UUFDekMsTUFBTSxXQUFXLEdBQUc7WUFDbEIsT0FBTyxFQUFFLGFBQWE7WUFDdEIsTUFBTSxFQUFFLGtCQUFrQjtZQUMxQixVQUFVLEVBQUU7Z0JBQ1Ysb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQjtnQkFDaEUsZ0JBQWdCLEVBQUUsQ0FBQyxhQUFhLENBQUM7YUFDbEM7WUFDRCxrQkFBa0IsRUFBRSxxQ0FBa0IsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUM7U0FDaEUsQ0FBQztRQUVGLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ2hELFFBQVEsRUFBRSxXQUFXO1lBQ3JCLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLFlBQVksRUFBRSw0QkFBNEI7U0FDM0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBN0pELGtDQTZKQztBQUVELE1BQWEsZ0JBQWlCLFNBQVEsbUJBQUs7SUFDekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3hCLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVJELDRDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBCbG9ja0RldmljZSxcbiAgdHlwZSBJTWFjaGluZUltYWdlLFxuICBJbnN0YW5jZVR5cGUsXG4gIHR5cGUgSVZwYyxcbiAgTGF1bmNoVGVtcGxhdGUsXG4gIFN1Ym5ldFR5cGUsXG4gIHR5cGUgVXNlckRhdGEsXG4gIE1hY2hpbmVJbWFnZSxcbiAgTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLFxuICBLZXlQYWlyLFxuICB0eXBlIElLZXlQYWlyLFxuICBTZWN1cml0eUdyb3VwLFxuICBQZWVyLFxuICBQb3J0LFxuICB0eXBlIElDb25uZWN0YWJsZSxcbiAgQ29ubmVjdGlvbnMsXG4gIHR5cGUgU3VibmV0Q29uZmlndXJhdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHJlc29sdmVQcml2YXRlU3VibmV0VHlwZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy92cGNVdGlsc1wiO1xuaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgUm9sZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBBdXRvU2NhbGluZ0dyb3VwLFxuICBHcm91cE1ldHJpY3MsXG4gIFRlcm1pbmF0aW9uUG9saWN5LFxuICBVcGRhdGVQb2xpY3ksXG4gIE9uRGVtYW5kQWxsb2NhdGlvblN0cmF0ZWd5LFxuICBTcG90QWxsb2NhdGlvblN0cmF0ZWd5XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXV0b3NjYWxpbmdcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHsgUGh5c2ljYWxSZXNvdXJjZUlkIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi9uZXR3b3JraW5nL3ZwY1wiO1xuXG5pbnRlcmZhY2UgRWMySW5zdGFuY2VQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBzcG90Q2FwYWNpdHlQZXJjZW50YWdlPzogbnVtYmVyO1xuICBibG9ja0RldmljZXM/OiBCbG9ja0RldmljZVtdO1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHZwYz86IElWcGM7XG4gIHN1Ym5ldENvbmZpZ3VyYXRpb24/OiBTdWJuZXRDb25maWd1cmF0aW9uW107XG4gIG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgaW5zdGFuY2VUeXBlOiBzdHJpbmc7XG4gIG1hY2hpbmVJbWFnZT86IElNYWNoaW5lSW1hZ2U7XG4gIHVzZXJEYXRhPzogVXNlckRhdGE7XG4gIHJvbGU/OiBSb2xlO1xuICBlbmFibGVTU0g/OiBib29sZWFuO1xuICBkZWZhdWx0UG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEVjMkluc3RhbmNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHJpdmF0ZSBsYXVuY2hUZW1wbGF0ZSE6IExhdW5jaFRlbXBsYXRlO1xuICBwdWJsaWMgdnBjITogSVZwYztcbiAgcHVibGljIGFzZ1NlY3VyaXR5R3JvdXAhOiBTZWN1cml0eUdyb3VwO1xuICBwcml2YXRlIGF1dG9TY2FsaW5nR3JvdXAhOiBBdXRvU2NhbGluZ0dyb3VwO1xuICBwcml2YXRlIGtleVBhaXI6IElLZXlQYWlyIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFYzJJbnN0YW5jZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYWRkVnBjKHByb3BzKTtcbiAgICB0aGlzLmFkZEtleVBhaXIocHJvcHMpO1xuICAgIHRoaXMuYWRkTGF1bmNoVGVtcGxhdGUocHJvcHMpO1xuICAgIHRoaXMuYWRkQXV0b1NjYWxpbmdHcm91cChwcm9wcyk7XG4gICAgdGhpcy5zdXNwZW5kQXV0b1NjYWxpbmcocHJvcHMpO1xuXG4gICAgLy8gSW5pdGlhbGlzZSBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZWN1cml0eSBncm91cCBhbmQgb3B0aW9uYWwgZGVmYXVsdFBvcnRcbiAgICAvLyBXaGVuIGRlZmF1bHRQb3J0IGlzIHNldCwgb3RoZXIgcmVzb3VyY2VzIGNhbiB1c2UgYWxsb3dUb0RlZmF1bHRQb3J0KGVjMkluc3RhbmNlKVxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoe1xuICAgICAgc2VjdXJpdHlHcm91cHM6IFt0aGlzLmFzZ1NlY3VyaXR5R3JvdXBdLFxuICAgICAgZGVmYXVsdFBvcnQ6IHByb3BzLmRlZmF1bHRQb3J0ID8gUG9ydC50Y3AocHJvcHMuZGVmYXVsdFBvcnQpIDogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH1cblxuICBhZGRWcGMocHJvcHM6IEVjMkluc3RhbmNlUHJvcHMpIHtcbiAgICBpZiAocHJvcHMudnBjKSB7XG4gICAgICB0aGlzLnZwYyA9IHByb3BzLnZwYztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52cGMgPSBuZXcgVnBjKHRoaXMsIGAke3Byb3BzLnNlcnZpY2VOYW1lfVZwY2AsIHtcbiAgICAgICAgYWNjb3VudElkOiBwcm9wcy5hY2NvdW50SWQsXG4gICAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IHByb3BzLnN1Ym5ldENvbmZpZ3VyYXRpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFkZEtleVBhaXIocHJvcHM6IEVjMkluc3RhbmNlUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLmVuYWJsZVNTSCkge1xuICAgICAgdGhpcy5rZXlQYWlyID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBCcmVhayBvdXQgaW50byBhIHNlcGFyYXRlIGNvbnN0cnVjdCBmb3IgdXNlIHdpdGggYmV0dGVyIHByb3AgaGFuZGxpbmdcbiAgICAgIHRoaXMua2V5UGFpciA9IG5ldyBLZXlQYWlyKHRoaXMsIFwiS2V5UGFpclwiLCB7XG4gICAgICAgIGtleVBhaXJOYW1lOiBgJHtwcm9wcy5zZXJ2aWNlTmFtZX1LZXlQYWlyYFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYWRkTGF1bmNoVGVtcGxhdGUocHJvcHM6IEVjMkluc3RhbmNlUHJvcHMpIHtcbiAgICB0aGlzLmFzZ1NlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCBgQXNnU2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciB0aGUgJHtwcm9wcy5zZXJ2aWNlTmFtZX0gYXV0byBzY2FsaW5nIGdyb3VwYFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZVNTSCkge1xuICAgICAgdGhpcy5hc2dTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICBQZWVyLmFueUlwdjQoKSxcbiAgICAgICAgUG9ydC50Y3AoMjIpLFxuICAgICAgICBcIkFsbG93IFNTSFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMubGF1bmNoVGVtcGxhdGUgPSBuZXcgTGF1bmNoVGVtcGxhdGUodGhpcywgXCJMYXVuY2hUZW1wbGF0ZVwiLCB7XG4gICAgICBsYXVuY2hUZW1wbGF0ZU5hbWU6IGAke3Byb3BzLnNlcnZpY2VOYW1lfUxhdW5jaFRlbXBsYXRlYCxcbiAgICAgIGluc3RhbmNlVHlwZTogbmV3IEluc3RhbmNlVHlwZShgJHtwcm9wcy5pbnN0YW5jZVR5cGV9YCksXG4gICAgICBtYWNoaW5lSW1hZ2U6IHByb3BzLm1hY2hpbmVJbWFnZSB8fCBNYWNoaW5lSW1hZ2UubGF0ZXN0QW1hem9uTGludXgyMDIzKCksXG4gICAgICB1c2VyRGF0YTogcHJvcHMudXNlckRhdGEsXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgYmxvY2tEZXZpY2VzOiBwcm9wcz8uYmxvY2tEZXZpY2VzLFxuICAgICAgc2VjdXJpdHlHcm91cDogdGhpcy5hc2dTZWN1cml0eUdyb3VwLFxuICAgICAgZGV0YWlsZWRNb25pdG9yaW5nOiB0cnVlLFxuICAgICAgcmVxdWlyZUltZHN2MjogdHJ1ZSxcbiAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiAyLFxuICAgICAgaHR0cFRva2VuczogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLlJFUVVJUkVELFxuICAgICAgaW5zdGFuY2VNZXRhZGF0YVRhZ3M6IHRydWUsXG4gICAgICBrZXlQYWlyOiB0aGlzLmtleVBhaXIsXG4gICAgICBhc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3M6ICEhdGhpcy5rZXlQYWlyXG4gICAgfSk7XG4gIH1cblxuICBhZGRBdXRvU2NhbGluZ0dyb3VwKHByb3BzOiBFYzJJbnN0YW5jZVByb3BzKSB7XG4gICAgLy8gVE9ETzogSGFuZGxlIHRlcm1pbmF0aW5nIEVDMiBpbnN0YW5jZXMgd2hlbiB1cGRhdGluZywgY3VycmVudGx5IGhhbmdzLlxuICAgIGNvbnN0IGJhc2VBc2dQcm9wcyA9IHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgIHN1Ym5ldFR5cGU6IHByb3BzLmVuYWJsZVNTSFxuICAgICAgICAgID8gU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgICA6IHJlc29sdmVQcml2YXRlU3VibmV0VHlwZSh0aGlzLnZwYylcbiAgICAgIH0sXG4gICAgICBtaW5DYXBhY2l0eTogcHJvcHMubWluQ2FwYWNpdHksXG4gICAgICBtYXhDYXBhY2l0eTogcHJvcHMubWF4Q2FwYWNpdHksXG4gICAgICBjb29sZG93bjogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBncm91cE1ldHJpY3M6IFtHcm91cE1ldHJpY3MuYWxsKCldLFxuICAgICAgdXBkYXRlUG9saWN5OiBVcGRhdGVQb2xpY3kucmVwbGFjaW5nVXBkYXRlKCksXG4gICAgICBuZXdJbnN0YW5jZXNQcm90ZWN0ZWRGcm9tU2NhbGVJbjogdHJ1ZSxcbiAgICAgIHRlcm1pbmF0aW9uUG9saWNpZXM6IFtcbiAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuT0xERVNUX0xBVU5DSF9DT05GSUdVUkFUSU9OLFxuICAgICAgICBUZXJtaW5hdGlvblBvbGljeS5DTE9TRVNUX1RPX05FWFRfSU5TVEFOQ0VfSE9VUlxuICAgICAgXSxcbiAgICAgIHNzbVNlc3Npb25QZXJtaXNzaW9uczogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyBTdXBwb3J0IHNwb3QgaW5zdGFuY2VzIHZpYSBtaXhlZCBpbnN0YW5jZXMgcG9saWN5XG4gICAgaWYgKFxuICAgICAgcHJvcHMuc3BvdENhcGFjaXR5UGVyY2VudGFnZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwcm9wcy5zcG90Q2FwYWNpdHlQZXJjZW50YWdlID4gMFxuICAgICkge1xuICAgICAgY29uc3Qgc3BvdFBlcmNlbnRhZ2UgPSBNYXRoLm1pbihcbiAgICAgICAgMTAwLFxuICAgICAgICBNYXRoLm1heCgwLCBwcm9wcy5zcG90Q2FwYWNpdHlQZXJjZW50YWdlKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IG9uRGVtYW5kUGVyY2VudGFnZSA9IDEwMCAtIHNwb3RQZXJjZW50YWdlO1xuXG4gICAgICB0aGlzLmF1dG9TY2FsaW5nR3JvdXAgPSBuZXcgQXV0b1NjYWxpbmdHcm91cCh0aGlzLCBcIkF1dG9TY2FsaW5nR3JvdXBcIiwge1xuICAgICAgICAuLi5iYXNlQXNnUHJvcHMsXG4gICAgICAgIG1peGVkSW5zdGFuY2VzUG9saWN5OiB7XG4gICAgICAgICAgaW5zdGFuY2VzRGlzdHJpYnV0aW9uOiB7XG4gICAgICAgICAgICBvbkRlbWFuZEFsbG9jYXRpb25TdHJhdGVneTogT25EZW1hbmRBbGxvY2F0aW9uU3RyYXRlZ3kuUFJJT1JJVElaRUQsXG4gICAgICAgICAgICBvbkRlbWFuZEJhc2VDYXBhY2l0eTogMCxcbiAgICAgICAgICAgIG9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5OiBvbkRlbWFuZFBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBzcG90QWxsb2NhdGlvblN0cmF0ZWd5OlxuICAgICAgICAgICAgICBTcG90QWxsb2NhdGlvblN0cmF0ZWd5LlBSSUNFX0NBUEFDSVRZX09QVElNSVpFRFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGU6IHRoaXMubGF1bmNoVGVtcGxhdGVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXV0b1NjYWxpbmdHcm91cCA9IG5ldyBBdXRvU2NhbGluZ0dyb3VwKHRoaXMsIFwiQXV0b1NjYWxpbmdHcm91cFwiLCB7XG4gICAgICAgIC4uLmJhc2VBc2dQcm9wcyxcbiAgICAgICAgbGF1bmNoVGVtcGxhdGU6IHRoaXMubGF1bmNoVGVtcGxhdGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEF1dG8gU2NhbGluZyBHcm91cC5cbiAgICovXG4gIHB1YmxpYyBnZXRBdXRvU2NhbGluZ0dyb3VwKCk6IEF1dG9TY2FsaW5nR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmF1dG9TY2FsaW5nR3JvdXA7XG4gIH1cblxuICBzdXNwZW5kQXV0b1NjYWxpbmcoX3Byb3BzOiBFYzJJbnN0YW5jZVByb3BzKSB7XG4gICAgY29uc3Qgc3VzcGVuZENhbGwgPSB7XG4gICAgICBzZXJ2aWNlOiBcIkF1dG9TY2FsaW5nXCIsXG4gICAgICBhY3Rpb246IFwic3VzcGVuZFByb2Nlc3Nlc1wiLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBBdXRvU2NhbGluZ0dyb3VwTmFtZTogdGhpcy5hdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICBTY2FsaW5nUHJvY2Vzc2VzOiBbXCJBWlJlYmFsYW5jZVwiXVxuICAgICAgfSxcbiAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFwic3VzcGVuZEF1dG9TY2FsaW5nXCIpXG4gICAgfTtcblxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcIlN1c3BlbmRBdXRvc2NhbGluZ1wiLCB7XG4gICAgICBvbkNyZWF0ZTogc3VzcGVuZENhbGwsXG4gICAgICBvblVwZGF0ZTogc3VzcGVuZENhbGwsXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpzdXNwZW5kQXV0b3NjYWxpbmdcIlxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFYzJJbnN0YW5jZVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRWMySW5zdGFuY2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IEVjMkluc3RhbmNlKHRoaXMsIGlkLCB7XG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|