@fjall/components-infrastructure 0.89.4 → 0.89.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +61 -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 +82 -70
- package/dist/lib/resources/aws/database/dynamodb.js +27 -28
- 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,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const storage_1 = require("./storage");
|
|
8
|
-
const compute_1 = require("./compute");
|
|
9
|
-
const validationLogger_js_1 = require("../../utils/validationLogger.js");
|
|
1
|
+
import { Fn } from "aws-cdk-lib";
|
|
2
|
+
import { Certificate } from "aws-cdk-lib/aws-certificatemanager";
|
|
3
|
+
import { CloudFrontDistribution } from "../../resources/aws/cdn/index.js";
|
|
4
|
+
import { isStorage } from "./storage.js";
|
|
5
|
+
import { isCompute, isEcsCompute, isLambdaCompute } from "./compute.js";
|
|
6
|
+
import { FjallLogger } from "../../utils/validationLogger.js";
|
|
10
7
|
/**
|
|
11
8
|
* Validates CDN props and logs warnings for misconfigured options.
|
|
12
9
|
*/
|
|
@@ -14,17 +11,17 @@ function validateCdnProps(props) {
|
|
|
14
11
|
const hasCertificate = !!(props.certificate || props.certificateArn);
|
|
15
12
|
// Validate certificate region warning
|
|
16
13
|
if (hasCertificate && props.domainNames && props.domainNames.length > 0) {
|
|
17
|
-
|
|
14
|
+
FjallLogger.info("CloudFront certificates must be in us-east-1 region. " +
|
|
18
15
|
"Ensure your certificate was created in us-east-1.");
|
|
19
16
|
}
|
|
20
17
|
// Validate domain names require certificate
|
|
21
18
|
if (props.domainNames && props.domainNames.length > 0 && !hasCertificate) {
|
|
22
|
-
|
|
19
|
+
FjallLogger.warn("'domainNames' provided but no 'certificate' specified. " +
|
|
23
20
|
"Custom domain names require an ACM certificate in us-east-1.");
|
|
24
21
|
}
|
|
25
22
|
// Validate ALB origin
|
|
26
23
|
if (props.originType === "alb") {
|
|
27
|
-
if (
|
|
24
|
+
if (isCompute(props.loadBalancer) && isEcsCompute(props.loadBalancer)) {
|
|
28
25
|
const lb = props.loadBalancer.getLoadBalancer();
|
|
29
26
|
if (!lb) {
|
|
30
27
|
throw new Error("Compute resource does not have a load balancer. " +
|
|
@@ -34,14 +31,14 @@ function validateCdnProps(props) {
|
|
|
34
31
|
}
|
|
35
32
|
// Validate smart origin
|
|
36
33
|
if (props.originType === "auto") {
|
|
37
|
-
if (
|
|
38
|
-
if (
|
|
34
|
+
if (isCompute(props.origin)) {
|
|
35
|
+
if (isEcsCompute(props.origin)) {
|
|
39
36
|
if (!props.origin.getLoadBalancer()) {
|
|
40
37
|
throw new Error("ECS compute must have a load balancer for CDN origin. " +
|
|
41
38
|
"Enable loadBalancer in your ECS compute configuration.");
|
|
42
39
|
}
|
|
43
40
|
}
|
|
44
|
-
else if (
|
|
41
|
+
else if (isLambdaCompute(props.origin)) {
|
|
45
42
|
if (!props.origin.getFunctionUrl()) {
|
|
46
43
|
throw new Error("Lambda compute must have a function URL for CDN origin. " +
|
|
47
44
|
"Enable functionUrl in your Lambda compute configuration.");
|
|
@@ -58,7 +55,7 @@ function validateCdnProps(props) {
|
|
|
58
55
|
/**
|
|
59
56
|
* CDN wrapper class that extends CloudFrontDistribution with Fjall patterns.
|
|
60
57
|
*/
|
|
61
|
-
class Cdn extends
|
|
58
|
+
export class Cdn extends CloudFrontDistribution {
|
|
62
59
|
constructor(scope, id, props) {
|
|
63
60
|
const resolvedProps = Cdn.resolveProps(scope, id, props);
|
|
64
61
|
super(scope, id, resolvedProps);
|
|
@@ -71,7 +68,7 @@ class Cdn extends cdn_1.CloudFrontDistribution {
|
|
|
71
68
|
const behaviours = Cdn.resolveBehaviours(props.behaviours);
|
|
72
69
|
const certificate = props.certificate ??
|
|
73
70
|
(props.certificateArn
|
|
74
|
-
?
|
|
71
|
+
? Certificate.fromCertificateArn(scope, `${id}Certificate`, props.certificateArn)
|
|
75
72
|
: undefined);
|
|
76
73
|
return {
|
|
77
74
|
defaultOrigin,
|
|
@@ -108,7 +105,7 @@ class Cdn extends cdn_1.CloudFrontDistribution {
|
|
|
108
105
|
static resolveDefaultOrigin(props) {
|
|
109
106
|
switch (props.originType) {
|
|
110
107
|
case "s3": {
|
|
111
|
-
const bucket =
|
|
108
|
+
const bucket = isStorage(props.bucket)
|
|
112
109
|
? props.bucket.getBucket()
|
|
113
110
|
: props.bucket;
|
|
114
111
|
return {
|
|
@@ -119,8 +116,8 @@ class Cdn extends cdn_1.CloudFrontDistribution {
|
|
|
119
116
|
}
|
|
120
117
|
case "alb": {
|
|
121
118
|
let loadBalancer;
|
|
122
|
-
if (
|
|
123
|
-
if (
|
|
119
|
+
if (isCompute(props.loadBalancer)) {
|
|
120
|
+
if (isEcsCompute(props.loadBalancer)) {
|
|
124
121
|
const lb = props.loadBalancer.getLoadBalancer();
|
|
125
122
|
if (!lb) {
|
|
126
123
|
throw new Error("Compute resource does not have a load balancer. " +
|
|
@@ -169,14 +166,14 @@ class Cdn extends cdn_1.CloudFrontDistribution {
|
|
|
169
166
|
};
|
|
170
167
|
}
|
|
171
168
|
// Storage → S3 origin
|
|
172
|
-
if (
|
|
169
|
+
if (isStorage(resource)) {
|
|
173
170
|
return {
|
|
174
171
|
type: "s3",
|
|
175
172
|
bucket: resource.getBucket()
|
|
176
173
|
};
|
|
177
174
|
}
|
|
178
175
|
// ECS Compute → ALB origin
|
|
179
|
-
if (
|
|
176
|
+
if (isEcsCompute(resource)) {
|
|
180
177
|
const loadBalancer = resource.getLoadBalancer();
|
|
181
178
|
if (loadBalancer) {
|
|
182
179
|
return {
|
|
@@ -186,7 +183,7 @@ class Cdn extends cdn_1.CloudFrontDistribution {
|
|
|
186
183
|
}
|
|
187
184
|
}
|
|
188
185
|
// Lambda Compute → HTTP origin (function URL)
|
|
189
|
-
if (
|
|
186
|
+
if (isLambdaCompute(resource)) {
|
|
190
187
|
const functionUrl = resource.getFunctionUrl();
|
|
191
188
|
if (functionUrl) {
|
|
192
189
|
// Lambda function URL is an HTTP origin
|
|
@@ -194,7 +191,7 @@ class Cdn extends cdn_1.CloudFrontDistribution {
|
|
|
194
191
|
// URL format: https://<domain>/
|
|
195
192
|
// Split by "/" gives ["https:", "", "<domain>", ""]
|
|
196
193
|
// Select index 2 to get the domain
|
|
197
|
-
const domainName =
|
|
194
|
+
const domainName = Fn.select(2, Fn.split("/", functionUrl));
|
|
198
195
|
return {
|
|
199
196
|
type: "http",
|
|
200
197
|
domainName
|
|
@@ -205,7 +202,6 @@ class Cdn extends cdn_1.CloudFrontDistribution {
|
|
|
205
202
|
"Provide explicit origin configuration using originType.");
|
|
206
203
|
}
|
|
207
204
|
}
|
|
208
|
-
exports.Cdn = Cdn;
|
|
209
205
|
/**
|
|
210
206
|
* Factory for creating CDN (CloudFront) distributions.
|
|
211
207
|
*
|
|
@@ -241,7 +237,7 @@ exports.Cdn = Cdn;
|
|
|
241
237
|
* certificate: myCert
|
|
242
238
|
* }));
|
|
243
239
|
*/
|
|
244
|
-
class CdnFactory {
|
|
240
|
+
export class CdnFactory {
|
|
245
241
|
/**
|
|
246
242
|
* Build a CDN factory function.
|
|
247
243
|
*
|
|
@@ -256,5 +252,3 @@ class CdnFactory {
|
|
|
256
252
|
};
|
|
257
253
|
}
|
|
258
254
|
}
|
|
259
|
-
exports.CdnFactory = CdnFactory;
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9jZG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQWlDO0FBR2pDLCtFQUc0QztBQUk1QyxpREFPaUM7QUFFakMsdUNBQW9EO0FBQ3BELHVDQUttQjtBQUNuQix5RUFBOEQ7QUFxRTlEOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFnQjtJQUN4QyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVyRSxzQ0FBc0M7SUFDdEMsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxpQ0FBVyxDQUFDLElBQUksQ0FDZCx1REFBdUQ7WUFDckQsbURBQW1ELENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6RSxpQ0FBVyxDQUFDLElBQUksQ0FDZCx5REFBeUQ7WUFDdkQsOERBQThELENBQ2pFLENBQUM7SUFDSixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLElBQUEsbUJBQVMsRUFBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksSUFBQSxzQkFBWSxFQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFD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T0FBTyxDQUFDLElBQVMsRUFBRSxLQUFnQixFQUFPLEVBQUU7WUFDMUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWRELGdDQWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRm4gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IHR5cGUgSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQge1xuICB0eXBlIElDZXJ0aWZpY2F0ZSxcbiAgQ2VydGlmaWNhdGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgSUNhY2hlUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5cbmltcG9ydCB0eXBlIEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5pbXBvcnQge1xuICBDbG91ZEZyb250RGlzdHJpYnV0aW9uLFxuICB0eXBlIENsb3VkRnJvbnREaXN0cmlidXRpb25Qcm9wcyxcbiAgdHlwZSBDZG5PcmlnaW5Db25maWcsXG4gIHR5cGUgQ2RuQmVoYXZpb3VyLFxuICB0eXBlIENhY2hlUG9saWN5UHJlc2V0LFxuICB0eXBlIEFjY2Vzc0dhdGVDb25maWdcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY2RuXCI7XG5pbXBvcnQgeyB0eXBlIElDZG4gfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2NkblwiO1xuaW1wb3J0IHsgdHlwZSBTdG9yYWdlLCBpc1N0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5pbXBvcnQge1xuICB0eXBlIEFueUNvbXB1dGUsXG4gIGlzQ29tcHV0ZSxcbiAgaXNFY3NDb21wdXRlLFxuICBpc0xhbWJkYUNvbXB1dGVcbn0gZnJvbSBcIi4vY29tcHV0ZVwiO1xuaW1wb3J0IHsgRmphbGxMb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdmFsaWRhdGlvbkxvZ2dlci5qc1wiO1xuXG4vKipcbiAqIENvbW1vbiBDRE4gcHJvcHMgc2hhcmVkIGFjcm9zcyBhbGwgb3JpZ2luIHR5cGVzLlxuICovXG5pbnRlcmZhY2UgQmFzZUNkblByb3BzIHtcbiAgY2FjaGVQb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeTtcbiAgZGVmYXVsdEFsbG93ZWRNZXRob2RzPzogXCJHRVRfSEVBRFwiIHwgXCJHRVRfSEVBRF9PUFRJT05TXCIgfCBcIkFMTFwiO1xuICBiZWhhdmlvdXJzPzogU21hcnRDZG5CZWhhdmlvdXJbXTtcbiAgZG9tYWluTmFtZXM/OiBzdHJpbmdbXTtcbiAgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGU7XG4gIGNlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBlbmFibGVMb2dnaW5nPzogYm9vbGVhbjtcbiAgbG9nQnVja2V0PzogSUJ1Y2tldDtcbiAgcHJpY2VDbGFzcz86IFwiUHJpY2VDbGFzc18xMDBcIiB8IFwiUHJpY2VDbGFzc18yMDBcIiB8IFwiUHJpY2VDbGFzc19BbGxcIjtcbiAgZm9yd2FyZEhvc3RIZWFkZXI/OiBib29sZWFuO1xuICBhY2Nlc3NHYXRlPzogZmFsc2UgfCBBY2Nlc3NHYXRlQ29uZmlnO1xufVxuXG4vKipcbiAqIFMzIG9yaWdpbiBDRE4gcHJvcHMgLSB1c2Ugd2l0aCBTMyBidWNrZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM0NkblByb3BzIGV4dGVuZHMgQmFzZUNkblByb3BzIHtcbiAgb3JpZ2luVHlwZTogXCJzM1wiO1xuICBidWNrZXQ6IElCdWNrZXQgfCBTdG9yYWdlO1xuICBvcmlnaW5QYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFMQiBvcmlnaW4gQ0ROIHByb3BzIC0gdXNlIHdpdGggQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFsYkNkblByb3BzIGV4dGVuZHMgQmFzZUNkblByb3BzIHtcbiAgb3JpZ2luVHlwZTogXCJhbGJcIjtcbiAgbG9hZEJhbGFuY2VyOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIgfCBBbnlDb21wdXRlO1xuICBwcm90b2NvbFBvbGljeT86IFwiSFRUUF9PTkxZXCIgfCBcIkhUVFBTX09OTFlcIiB8IFwiTUFUQ0hfVklFV0VSXCI7XG59XG5cbi8qKlxuICogSFRUUCBvcmlnaW4gQ0ROIHByb3BzIC0gdXNlIHdpdGggY3VzdG9tIEhUVFAgZW5kcG9pbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ2RuUHJvcHMgZXh0ZW5kcyBCYXNlQ2RuUHJvcHMge1xuICBvcmlnaW5UeXBlOiBcImh0dHBcIjtcbiAgZG9tYWluTmFtZTogc3RyaW5nO1xuICBvcmlnaW5QYXRoPzogc3RyaW5nO1xuICBwcm90b2NvbFBvbGljeT86IFwiSFRUUF9PTkxZXCIgfCBcIkhUVFBTX09OTFlcIiB8IFwiTUFUQ0hfVklFV0VSXCI7XG59XG5cbi8qKlxuICogU21hcnQgb3JpZ2luIENETiBwcm9wcyAtIGF1dG8tZGV0ZWN0IG9yaWdpbiB0eXBlIGZyb20gRmphbGwgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbWFydENkblByb3BzIGV4dGVuZHMgQmFzZUNkblByb3BzIHtcbiAgb3JpZ2luVHlwZTogXCJhdXRvXCI7XG4gIG9yaWdpbjogU3RvcmFnZSB8IEFueUNvbXB1dGUgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIElDZG5Qcm9wcyA9IFMzQ2RuUHJvcHMgfCBBbGJDZG5Qcm9wcyB8IEh0dHBDZG5Qcm9wcyB8IFNtYXJ0Q2RuUHJvcHM7XG5cbi8qKlxuICogU21hcnQgYmVoYXZpb3VyIHR5cGUgdGhhdCBhY2NlcHRzIEZqYWxsIHJlc291cmNlcyBhcyBvcmlnaW5zLlxuICogVGhlIGZhY3Rvcnkgd2lsbCB0cmFuc2Zvcm0gdGhlc2UgdG8gcHJvcGVyIENkbkJlaGF2aW91ciBvYmplY3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0Q2RuQmVoYXZpb3VyIHtcbiAgcGF0aFBhdHRlcm46IHN0cmluZztcbiAgb3JpZ2luOiBTdG9yYWdlIHwgQW55Q29tcHV0ZSB8IHN0cmluZztcbiAgY2FjaGVQb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeTtcbiAgYWxsb3dlZE1ldGhvZHM/OiBcIkdFVF9IRUFEXCIgfCBcIkdFVF9IRUFEX09QVElPTlNcIiB8IFwiQUxMXCI7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIENETiBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgbWlzY29uZmlndXJlZCBvcHRpb25zLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNkblByb3BzKHByb3BzOiBJQ2RuUHJvcHMpOiB2b2lkIHtcbiAgY29uc3QgaGFzQ2VydGlmaWNhdGUgPSAhIShwcm9wcy5jZXJ0aWZpY2F0ZSB8fCBwcm9wcy5jZXJ0aWZpY2F0ZUFybik7XG5cbiAgLy8gVmFsaWRhdGUgY2VydGlmaWNhdGUgcmVnaW9uIHdhcm5pbmdcbiAgaWYgKGhhc0NlcnRpZmljYXRlICYmIHByb3BzLmRvbWFpbk5hbWVzICYmIHByb3BzLmRvbWFpbk5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICBGamFsbExvZ2dlci5pbmZvKFxuICAgICAgXCJDbG91ZEZyb250IGNlcnRpZmljYXRlcyBtdXN0IGJlIGluIHVzLWVhc3QtMSByZWdpb24uIFwiICtcbiAgICAgICAgXCJFbnN1cmUgeW91ciBjZXJ0aWZpY2F0ZSB3YXMgY3JlYXRlZCBpbiB1cy1lYXN0LTEuXCJcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgZG9tYWluIG5hbWVzIHJlcXVpcmUgY2VydGlmaWNhdGVcbiAgaWYgKHByb3BzLmRvbWFpbk5hbWVzICYmIHByb3BzLmRvbWFpbk5hbWVzLmxlbmd0aCA+IDAgJiYgIWhhc0NlcnRpZmljYXRlKSB7XG4gICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgIFwiJ2RvbWFpbk5hbWVzJyBwcm92aWRlZCBidXQgbm8gJ2NlcnRpZmljYXRlJyBzcGVjaWZpZWQuIFwiICtcbiAgICAgICAgXCJDdXN0b20gZG9tYWluIG5hbWVzIHJlcXVpcmUgYW4gQUNNIGNlcnRpZmljYXRlIGluIHVzLWVhc3QtMS5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBBTEIgb3JpZ2luXG4gIGlmIChwcm9wcy5vcmlnaW5UeXBlID09PSBcImFsYlwiKSB7XG4gICAgaWYgKGlzQ29tcHV0ZShwcm9wcy5sb2FkQmFsYW5jZXIpICYmIGlzRWNzQ29tcHV0ZShwcm9wcy5sb2FkQmFsYW5jZXIpKSB7XG4gICAgICBjb25zdCBsYiA9IHByb3BzLmxvYWRCYWxhbmNlci5nZXRMb2FkQmFsYW5jZXIoKTtcbiAgICAgIGlmICghbGIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ29tcHV0ZSByZXNvdXJjZSBkb2VzIG5vdCBoYXZlIGEgbG9hZCBiYWxhbmNlci4gXCIgK1xuICAgICAgICAgICAgXCJFbnN1cmUgRUNTIGNvbXB1dGUgaGFzIGxvYWRCYWxhbmNlciBlbmFibGVkIGZvciBDRE4gb3JpZ2luLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgc21hcnQgb3JpZ2luXG4gIGlmIChwcm9wcy5vcmlnaW5UeXBlID09PSBcImF1dG9cIikge1xuICAgIGlmIChpc0NvbXB1dGUocHJvcHMub3JpZ2luKSkge1xuICAgICAgaWYgKGlzRWNzQ29tcHV0ZShwcm9wcy5vcmlnaW4pKSB7XG4gICAgICAgIGlmICghcHJvcHMub3JpZ2luLmdldExvYWRCYWxhbmNlcigpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFQ1MgY29tcHV0ZSBtdXN0IGhhdmUgYSBsb2FkIGJhbGFuY2VyIGZvciBDRE4gb3JpZ2luLiBcIiArXG4gICAgICAgICAgICAgIFwiRW5hYmxlIGxvYWRCYWxhbmNlciBpbiB5b3VyIEVDUyBjb21wdXRlIGNvbmZpZ3VyYXRpb24uXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzTGFtYmRhQ29tcHV0ZShwcm9wcy5vcmlnaW4pKSB7XG4gICAgICAgIGlmICghcHJvcHMub3JpZ2luLmdldEZ1bmN0aW9uVXJsKCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkxhbWJkYSBjb21wdXRlIG11c3QgaGF2ZSBhIGZ1bmN0aW9uIFVSTCBmb3IgQ0ROIG9yaWdpbi4gXCIgK1xuICAgICAgICAgICAgICBcIkVuYWJsZSBmdW5jdGlvblVybCBpbiB5b3VyIExhbWJkYSBjb21wdXRlIGNvbmZpZ3VyYXRpb24uXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNdXN0IGJlIEVDMlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFQzIgY29tcHV0ZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIENETiBvcmlnaW4uIFwiICtcbiAgICAgICAgICAgIFwiVXNlIEVDUyB3aXRoIGxvYWQgYmFsYW5jZXIgb3IgTGFtYmRhIHdpdGggZnVuY3Rpb24gVVJMLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ0ROIHdyYXBwZXIgY2xhc3MgdGhhdCBleHRlbmRzIENsb3VkRnJvbnREaXN0cmlidXRpb24gd2l0aCBGamFsbCBwYXR0ZXJucy5cbiAqL1xuZXhwb3J0IGNsYXNzIENkbiBleHRlbmRzIENsb3VkRnJvbnREaXN0cmlidXRpb24gaW1wbGVtZW50cyBJQ2RuIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElDZG5Qcm9wcykge1xuICAgIGNvbnN0IHJlc29sdmVkUHJvcHMgPSBDZG4ucmVzb2x2ZVByb3BzKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcmVzb2x2ZWRQcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBJQ2RuUHJvcHMgdG8gQ2xvdWRGcm9udERpc3RyaWJ1dGlvblByb3BzLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVzb2x2ZVByb3BzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUNkblByb3BzXG4gICk6IENsb3VkRnJvbnREaXN0cmlidXRpb25Qcm9wcyB7XG4gICAgY29uc3QgZGVmYXVsdE9yaWdpbiA9IENkbi5yZXNvbHZlRGVmYXVsdE9yaWdpbihwcm9wcyk7XG4gICAgY29uc3QgYmVoYXZpb3VycyA9IENkbi5yZXNvbHZlQmVoYXZpb3Vycyhwcm9wcy5iZWhhdmlvdXJzKTtcblxuICAgIGNvbnN0IGNlcnRpZmljYXRlID1cbiAgICAgIHByb3BzLmNlcnRpZmljYXRlID8/XG4gICAgICAocHJvcHMuY2VydGlmaWNhdGVBcm5cbiAgICAgICAgPyBDZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVBcm4oXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGAke2lkfUNlcnRpZmljYXRlYCxcbiAgICAgICAgICAgIHByb3BzLmNlcnRpZmljYXRlQXJuXG4gICAgICAgICAgKVxuICAgICAgICA6IHVuZGVmaW5lZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGVmYXVsdE9yaWdpbixcbiAgICAgIGRlZmF1bHRDYWNoZVBvbGljeTogcHJvcHMuY2FjaGVQb2xpY3ksXG4gICAgICBkZWZhdWx0QWxsb3dlZE1ldGhvZHM6IHByb3BzLmRlZmF1bHRBbGxvd2VkTWV0aG9kcyxcbiAgICAgIGJlaGF2aW91cnMsXG4gICAgICBkb21haW5OYW1lczogcHJvcHMuZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnQsXG4gICAgICBlbmFibGVMb2dnaW5nOiBwcm9wcy5lbmFibGVMb2dnaW5nLFxuICAgICAgbG9nQnVja2V0OiBwcm9wcy5sb2dCdWNrZXQsXG4gICAgICBwcmljZUNsYXNzOiBwcm9wcy5wcmljZUNsYXNzLFxuICAgICAgZm9yd2FyZEhvc3RIZWFkZXI6IHByb3BzLmZvcndhcmRIb3N0SGVhZGVyLFxuICAgICAgYWNjZXNzR2F0ZTogcHJvcHMuYWNjZXNzR2F0ZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHNtYXJ0IGJlaGF2aW91cnMgdG8gQ2RuQmVoYXZpb3VyIG9iamVjdHMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZXNvbHZlQmVoYXZpb3VycyhcbiAgICBiZWhhdmlvdXJzPzogU21hcnRDZG5CZWhhdmlvdXJbXVxuICApOiBDZG5CZWhhdmlvdXJbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFiZWhhdmlvdXJzIHx8IGJlaGF2aW91cnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBiZWhhdmlvdXJzLm1hcCgoYmVoYXZpb3VyKSA9PiAoe1xuICAgICAgcGF0aFBhdHRlcm46IGJlaGF2aW91ci5wYXRoUGF0dGVybixcbiAgICAgIG9yaWdpbjogQ2RuLmRldGVjdE9yaWdpbkZyb21SZXNvdXJjZShiZWhhdmlvdXIub3JpZ2luKSxcbiAgICAgIGNhY2hlUG9saWN5OiBiZWhhdmlvdXIuY2FjaGVQb2xpY3ksXG4gICAgICBhbGxvd2VkTWV0aG9kczogYmVoYXZpb3VyLmFsbG93ZWRNZXRob2RzXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGRlZmF1bHQgb3JpZ2luIGZyb20gSUNkblByb3BzLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVzb2x2ZURlZmF1bHRPcmlnaW4ocHJvcHM6IElDZG5Qcm9wcyk6IENkbk9yaWdpbkNvbmZpZyB7XG4gICAgc3dpdGNoIChwcm9wcy5vcmlnaW5UeXBlKSB7XG4gICAgICBjYXNlIFwiczNcIjoge1xuICAgICAgICBjb25zdCBidWNrZXQgPSBpc1N0b3JhZ2UocHJvcHMuYnVja2V0KVxuICAgICAgICAgID8gcHJvcHMuYnVja2V0LmdldEJ1Y2tldCgpXG4gICAgICAgICAgOiBwcm9wcy5idWNrZXQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJzM1wiLFxuICAgICAgICAgIGJ1Y2tldCxcbiAgICAgICAgICBvcmlnaW5QYXRoOiBwcm9wcy5vcmlnaW5QYXRoXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNhc2UgXCJhbGJcIjoge1xuICAgICAgICBsZXQgbG9hZEJhbGFuY2VyOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXI7XG4gICAgICAgIGlmIChpc0NvbXB1dGUocHJvcHMubG9hZEJhbGFuY2VyKSkge1xuICAgICAgICAgIGlmIChpc0Vjc0NvbXB1dGUocHJvcHMubG9hZEJhbGFuY2VyKSkge1xuICAgICAgICAgICAgY29uc3QgbGIgPSBwcm9wcy5sb2FkQmFsYW5jZXIuZ2V0TG9hZEJhbGFuY2VyKCk7XG4gICAgICAgICAgICBpZiAoIWxiKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkNvbXB1dGUgcmVzb3VyY2UgZG9lcyBub3QgaGF2ZSBhIGxvYWQgYmFsYW5jZXIuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiRW5zdXJlIEVDUyBjb21wdXRlIGhhcyBsb2FkQmFsYW5jZXIgZW5hYmxlZCBmb3IgQ0ROIG9yaWdpbi5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9hZEJhbGFuY2VyID0gbGI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgXCJPbmx5IEVDUyBjb21wdXRlIHdpdGggbG9hZCBiYWxhbmNlciBpcyBzdXBwb3J0ZWQgZm9yIEFMQiBvcmlnaW4uIFwiICtcbiAgICAgICAgICAgICAgICBcIkxhbWJkYSBhbmQgRUMyIGNvbXB1dGUgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvYWRCYWxhbmNlciA9IHByb3BzLmxvYWRCYWxhbmNlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiYWxiXCIsXG4gICAgICAgICAgbG9hZEJhbGFuY2VyLFxuICAgICAgICAgIHByb3RvY29sUG9saWN5OiBwcm9wcy5wcm90b2NvbFBvbGljeVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlIFwiaHR0cFwiOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiaHR0cFwiLFxuICAgICAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICAgICAgb3JpZ2luUGF0aDogcHJvcHMub3JpZ2luUGF0aCxcbiAgICAgICAgICBwcm90b2NvbFBvbGljeTogcHJvcHMucHJvdG9jb2xQb2xpY3lcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSBcImF1dG9cIjpcbiAgICAgICAgcmV0dXJuIENkbi5kZXRlY3RPcmlnaW5Gcm9tUmVzb3VyY2UocHJvcHMub3JpZ2luKTtcblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBwcm9wcztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBVbnN1cHBvcnRlZCBDRE4gb3JpZ2luIHR5cGU6ICR7KHByb3BzIGFzIElDZG5Qcm9wcykub3JpZ2luVHlwZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dG8tZGV0ZWN0IG9yaWdpbiBjb25maWd1cmF0aW9uIGZyb20gYSBGamFsbCByZXNvdXJjZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGRldGVjdE9yaWdpbkZyb21SZXNvdXJjZShcbiAgICByZXNvdXJjZTogU3RvcmFnZSB8IEFueUNvbXB1dGUgfCBzdHJpbmdcbiAgKTogQ2RuT3JpZ2luQ29uZmlnIHtcbiAgICAvLyBTdHJpbmcg4oaSIEhUVFAgb3JpZ2luXG4gICAgaWYgKHR5cGVvZiByZXNvdXJjZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJodHRwXCIsXG4gICAgICAgIGRvbWFpbk5hbWU6IHJlc291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFN0b3JhZ2Ug4oaSIFMzIG9yaWdpblxuICAgIGlmIChpc1N0b3JhZ2UocmVzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInMzXCIsXG4gICAgICAgIGJ1Y2tldDogcmVzb3VyY2UuZ2V0QnVja2V0KClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRUNTIENvbXB1dGUg4oaSIEFMQiBvcmlnaW5cbiAgICBpZiAoaXNFY3NDb21wdXRlKHJlc291cmNlKSkge1xuICAgICAgY29uc3QgbG9hZEJhbGFuY2VyID0gcmVzb3VyY2UuZ2V0TG9hZEJhbGFuY2VyKCk7XG4gICAgICBpZiAobG9hZEJhbGFuY2VyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJhbGJcIixcbiAgICAgICAgICBsb2FkQmFsYW5jZXJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYW1iZGEgQ29tcHV0ZSDihpIgSFRUUCBvcmlnaW4gKGZ1bmN0aW9uIFVSTClcbiAgICBpZiAoaXNMYW1iZGFDb21wdXRlKHJlc291cmNlKSkge1xuICAgICAgY29uc3QgZnVuY3Rpb25VcmwgPSByZXNvdXJjZS5nZXRGdW5jdGlvblVybCgpO1xuICAgICAgaWYgKGZ1bmN0aW9uVXJsKSB7XG4gICAgICAgIC8vIExhbWJkYSBmdW5jdGlvbiBVUkwgaXMgYW4gSFRUUCBvcmlnaW5cbiAgICAgICAgLy8gRXh0cmFjdCBkb21haW4gZnJvbSBVUkwgdG9rZW4gdXNpbmcgQ2xvdWRGb3JtYXRpb24gaW50cmluc2ljc1xuICAgICAgICAvLyBVUkwgZm9ybWF0OiBodHRwczovLzxkb21haW4+L1xuICAgICAgICAvLyBTcGxpdCBieSBcIi9cIiBnaXZlcyBbXCJodHRwczpcIiwgXCJcIiwgXCI8ZG9tYWluPlwiLCBcIlwiXVxuICAgICAgICAvLyBTZWxlY3QgaW5kZXggMiB0byBnZXQgdGhlIGRvbWFpblxuICAgICAgICBjb25zdCBkb21haW5OYW1lID0gRm4uc2VsZWN0KDIsIEZuLnNwbGl0KFwiL1wiLCBmdW5jdGlvblVybCkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiaHR0cFwiLFxuICAgICAgICAgIGRvbWFpbk5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5hYmxlIHRvIGRldGVjdCBDRE4gb3JpZ2luIGZyb20gcmVzb3VyY2U6ICR7dHlwZW9mIHJlc291cmNlfS4gYCArXG4gICAgICAgIFwiUHJvdmlkZSBleHBsaWNpdCBvcmlnaW4gY29uZmlndXJhdGlvbiB1c2luZyBvcmlnaW5UeXBlLlwiXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgZm9yIGNyZWF0aW5nIENETiAoQ2xvdWRGcm9udCkgZGlzdHJpYnV0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUzMgb3JpZ2luXG4gKiBjb25zdCBhc3NldHMgPSBhcHAuYWRkU3RvcmFnZShTdG9yYWdlRmFjdG9yeS5idWlsZChcIkFzc2V0c1wiLCB7fSkpO1xuICogYXBwLmFkZENkbihDZG5GYWN0b3J5LmJ1aWxkKFwiQXNzZXRzQ2RuXCIsIHtcbiAqICAgb3JpZ2luVHlwZTogXCJzM1wiLFxuICogICBidWNrZXQ6IGFzc2V0c1xuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBTEIgb3JpZ2luIChFQ1MpXG4gKiBjb25zdCBhcGkgPSBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIkFwaVwiLCB7IHR5cGU6IFwiZWNzXCIsIC4uLiB9KSk7XG4gKiBhcHAuYWRkQ2RuKENkbkZhY3RvcnkuYnVpbGQoXCJBcGlDZG5cIiwge1xuICogICBvcmlnaW5UeXBlOiBcImFsYlwiLFxuICogICBsb2FkQmFsYW5jZXI6IGFwaVxuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTbWFydCBkZXRlY3Rpb25cbiAqIGFwcC5hZGRDZG4oQ2RuRmFjdG9yeS5idWlsZChcIkFwcENkblwiLCB7XG4gKiAgIG9yaWdpblR5cGU6IFwiYXV0b1wiLFxuICogICBvcmlnaW46IGFzc2V0c1xuICogfSkpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDdXN0b20gZG9tYWluXG4gKiBhcHAuYWRkQ2RuKENkbkZhY3RvcnkuYnVpbGQoXCJBcHBDZG5cIiwge1xuICogICBvcmlnaW5UeXBlOiBcInMzXCIsXG4gKiAgIGJ1Y2tldDogYXNzZXRzLFxuICogICBkb21haW5OYW1lczogW1wiYXBwLmV4YW1wbGUuY29tXCJdLFxuICogICBjZXJ0aWZpY2F0ZTogbXlDZXJ0XG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBDZG5GYWN0b3J5IHtcbiAgLyoqXG4gICAqIEJ1aWxkIGEgQ0ROIGZhY3RvcnkgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgQ0ROXG4gICAqIEBwYXJhbSBwcm9wcyAtIENETiBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIENETiB3aGVuIGludm9rZWRcbiAgICovXG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogSUNkblByb3BzKSB7XG4gICAgcmV0dXJuIChfYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpOiBDZG4gPT4ge1xuICAgICAgdmFsaWRhdGVDZG5Qcm9wcyhwcm9wcyk7XG4gICAgICByZXR1cm4gbmV3IENkbihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Runtime } from "aws-cdk-lib/aws-lambda";
|
|
2
2
|
import { type Construct } from "constructs";
|
|
3
3
|
import { type IEcsCompute, type ILambdaCompute, type IEc2Compute, type AnyCompute, isCompute, isEcsCompute, isLambdaCompute, isEc2Compute } from "./interfaces/compute.js";
|
|
4
|
-
import type App from "../../app";
|
|
4
|
+
import type App from "../../app.js";
|
|
5
5
|
import { EcsCompute, type EcsComputeProps, type EcsServiceConfig, type EcsContainerConfig, type EcsScalingConfig, type EcsClusterConfig, type EcsRoutingConfig, type EcsCapacityProviderConfig, ECS_CAPACITY_PROVIDER_CONFIG, getEcsCapacityProviderConfig, ScalingType, type EcsCapacityProvider, type Ec2CapacityConfig, validateEcsProps, buildContainerConfigs, type ResolvedScalingConfig, resolveScalingConfig } from "./computeEcs.js";
|
|
6
6
|
import { LambdaCompute, type LambdaComputeProps, type ContainerLambdaProps, type CodeLambdaProps, type FunctionUrlConfig, type ResolvedLambdaDeployment, resolveLambdaDeployment, Architecture, HttpMethod, InvokeMode, type FunctionUrlCorsOptions } from "./computeLambda.js";
|
|
7
7
|
import { Ec2Compute, type Ec2ComputeProps, type SshConfig } from "./computeEc2.js";
|
|
@@ -1,32 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
exports.getComputeTypeConfig = getComputeTypeConfig;
|
|
5
|
-
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
6
|
-
const compute_js_1 = require("./interfaces/compute.js");
|
|
7
|
-
Object.defineProperty(exports, "isCompute", { enumerable: true, get: function () { return compute_js_1.isCompute; } });
|
|
8
|
-
Object.defineProperty(exports, "isEcsCompute", { enumerable: true, get: function () { return compute_js_1.isEcsCompute; } });
|
|
9
|
-
Object.defineProperty(exports, "isLambdaCompute", { enumerable: true, get: function () { return compute_js_1.isLambdaCompute; } });
|
|
10
|
-
Object.defineProperty(exports, "isEc2Compute", { enumerable: true, get: function () { return compute_js_1.isEc2Compute; } });
|
|
11
|
-
const validationLogger_js_1 = require("../../utils/validationLogger.js");
|
|
1
|
+
import { Runtime } from "aws-cdk-lib/aws-lambda";
|
|
2
|
+
import { isCompute, isEcsCompute, isLambdaCompute, isEc2Compute } from "./interfaces/compute.js";
|
|
3
|
+
import { warnIfPropertiesIgnored } from "../../utils/validationLogger.js";
|
|
12
4
|
// Import and re-export from per-pattern files
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
Object.defineProperty(exports, "HttpMethod", { enumerable: true, get: function () { return computeLambda_js_1.HttpMethod; } });
|
|
26
|
-
Object.defineProperty(exports, "InvokeMode", { enumerable: true, get: function () { return computeLambda_js_1.InvokeMode; } });
|
|
27
|
-
const computeEc2_js_1 = require("./computeEc2.js");
|
|
28
|
-
Object.defineProperty(exports, "Ec2Compute", { enumerable: true, get: function () { return computeEc2_js_1.Ec2Compute; } });
|
|
29
|
-
exports.COMPUTE_TYPE_CONFIG = {
|
|
5
|
+
import { EcsCompute, ECS_CAPACITY_PROVIDER_CONFIG, getEcsCapacityProviderConfig, ScalingType, validateEcsProps, buildContainerConfigs, resolveScalingConfig } from "./computeEcs.js";
|
|
6
|
+
import { LambdaCompute, resolveLambdaDeployment, Architecture, HttpMethod, InvokeMode } from "./computeLambda.js";
|
|
7
|
+
import { Ec2Compute } from "./computeEc2.js";
|
|
8
|
+
// Re-export everything from per-pattern files
|
|
9
|
+
export {
|
|
10
|
+
// ECS
|
|
11
|
+
EcsCompute, ECS_CAPACITY_PROVIDER_CONFIG, getEcsCapacityProviderConfig, ScalingType, validateEcsProps, buildContainerConfigs, resolveScalingConfig,
|
|
12
|
+
// Lambda
|
|
13
|
+
LambdaCompute, resolveLambdaDeployment, Architecture, HttpMethod, InvokeMode,
|
|
14
|
+
// EC2
|
|
15
|
+
Ec2Compute };
|
|
16
|
+
export const COMPUTE_TYPE_CONFIG = {
|
|
30
17
|
ecs: {
|
|
31
18
|
defaultPort: 80,
|
|
32
19
|
defaultScaling: { minCapacity: 2, maxCapacity: 5 },
|
|
@@ -47,7 +34,7 @@ exports.COMPUTE_TYPE_CONFIG = {
|
|
|
47
34
|
* Default values for compute resource configuration.
|
|
48
35
|
* Centralised constants to ensure consistency across the codebase.
|
|
49
36
|
*/
|
|
50
|
-
|
|
37
|
+
export const COMPUTE_DEFAULTS = {
|
|
51
38
|
EC2: {
|
|
52
39
|
INSTANCE_TYPE: "t4g.micro",
|
|
53
40
|
MIN_CAPACITY: 1,
|
|
@@ -61,12 +48,12 @@ exports.COMPUTE_DEFAULTS = {
|
|
|
61
48
|
},
|
|
62
49
|
LAMBDA: {
|
|
63
50
|
HANDLER: "index.handler",
|
|
64
|
-
RUNTIME:
|
|
65
|
-
ARCHITECTURE:
|
|
51
|
+
RUNTIME: Runtime.NODEJS_22_X,
|
|
52
|
+
ARCHITECTURE: Architecture.ARM_64
|
|
66
53
|
}
|
|
67
54
|
};
|
|
68
|
-
function getComputeTypeConfig(type) {
|
|
69
|
-
return
|
|
55
|
+
export function getComputeTypeConfig(type) {
|
|
56
|
+
return COMPUTE_TYPE_CONFIG[type];
|
|
70
57
|
}
|
|
71
58
|
/**
|
|
72
59
|
* Validates compute props and logs warnings for ignored or misconfigured options.
|
|
@@ -75,14 +62,14 @@ function getComputeTypeConfig(type) {
|
|
|
75
62
|
*/
|
|
76
63
|
function validateComputeProps(props) {
|
|
77
64
|
// ECS-specific options on non-ECS compute
|
|
78
|
-
|
|
65
|
+
warnIfPropertiesIgnored(props, ["capacityProvider", "ec2Config", "services", "cluster"], "ecs", "ECS compute");
|
|
79
66
|
// Lambda-specific options on non-Lambda compute
|
|
80
|
-
|
|
67
|
+
warnIfPropertiesIgnored(props, ["functionUrl", "handler", "runtime"], "lambda", "Lambda compute");
|
|
81
68
|
// EC2-specific options on non-EC2 compute
|
|
82
|
-
|
|
69
|
+
warnIfPropertiesIgnored(props, ["ssh", "userData", "machineImage"], "ec2", "EC2 compute");
|
|
83
70
|
// ECS-specific validation - type narrowing handled by discriminated union
|
|
84
71
|
if (props.type === "ecs") {
|
|
85
|
-
|
|
72
|
+
validateEcsProps(props);
|
|
86
73
|
}
|
|
87
74
|
}
|
|
88
75
|
/**
|
|
@@ -117,13 +104,13 @@ function validateComputeProps(props) {
|
|
|
117
104
|
* }));
|
|
118
105
|
* ec2.getAutoScalingGroup(); // Available on Ec2Compute
|
|
119
106
|
*/
|
|
120
|
-
class ComputeFactory {
|
|
107
|
+
export class ComputeFactory {
|
|
121
108
|
// Implementation signature
|
|
122
109
|
static build(id, props) {
|
|
123
110
|
return (app, scope) => {
|
|
124
111
|
validateComputeProps(props);
|
|
125
112
|
// Auto-derive appName from App instance for ECS compute
|
|
126
|
-
const typeConfig =
|
|
113
|
+
const typeConfig = COMPUTE_TYPE_CONFIG[props.type];
|
|
127
114
|
const needsVpc = typeConfig.requiresVpc ||
|
|
128
115
|
("connections" in props &&
|
|
129
116
|
Array.isArray(props.connections) &&
|
|
@@ -184,7 +171,7 @@ class ComputeFactory {
|
|
|
184
171
|
`/${appName}/${clusterName}/${service.name}`;
|
|
185
172
|
collector.addService(manifestService);
|
|
186
173
|
}
|
|
187
|
-
return new
|
|
174
|
+
return new EcsCompute(scope, id, computeProps);
|
|
188
175
|
}
|
|
189
176
|
case "lambda": {
|
|
190
177
|
// Add appName to props for Lambda (needed for secrets path derivation)
|
|
@@ -206,10 +193,10 @@ class ComputeFactory {
|
|
|
206
193
|
manifestLambda.secrets = lambdaComputeProps.secrets;
|
|
207
194
|
}
|
|
208
195
|
collector.addLambda(manifestLambda);
|
|
209
|
-
return new
|
|
196
|
+
return new LambdaCompute(scope, id, lambdaComputeProps);
|
|
210
197
|
}
|
|
211
198
|
case "ec2":
|
|
212
|
-
return new
|
|
199
|
+
return new Ec2Compute(scope, id, computeProps);
|
|
213
200
|
default: {
|
|
214
201
|
const _exhaustive = computeProps;
|
|
215
202
|
throw new Error(`Unsupported compute type: ${String(_exhaustive.type)}`);
|
|
@@ -218,5 +205,5 @@ class ComputeFactory {
|
|
|
218
205
|
};
|
|
219
206
|
}
|
|
220
207
|
}
|
|
221
|
-
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErSkEsb0RBRUM7QUFqS0QsdURBQWlEO0FBSWpELHdEQVNpQztBQWlYeEIsMEZBclhQLHNCQUFTLE9BcVhPO0FBQUUsNkZBcFhsQix5QkFBWSxPQW9Ya0I7QUFBRSxnR0FuWGhDLDRCQUFlLE9BbVhnQztBQUFFLDZGQWxYakQseUJBQVksT0FrWGlEO0FBaFgvRCx5RUFBMEU7QUFRMUUsOENBQThDO0FBQzlDLG1EQWtCeUI7QUF5QnZCLDJGQTFDQSwwQkFBVSxPQTBDQTtBQVFWLDZHQTFDQSw0Q0FBNEIsT0EwQ0E7QUFDNUIsNkdBMUNBLDRDQUE0QixPQTBDQTtBQUM1Qiw0RkExQ0EsMkJBQVcsT0EwQ0E7QUFHWCxpR0ExQ0EsZ0NBQWdCLE9BMENBO0FBQ2hCLHNHQTFDQSxxQ0FBcUIsT0EwQ0E7QUFFckIscUdBMUNBLG9DQUFvQixPQTBDQTtBQXZDdEIseURBWTRCO0FBNkIxQiw4RkF4Q0EsZ0NBQWEsT0F3Q0E7QUFNYix3R0F4Q0EsMENBQXVCLE9Bd0NBO0FBQ3ZCLDZGQXhDQSwrQkFBWSxPQXdDQTtBQUNaLDJGQXhDQSw2QkFBVSxPQXdDQTtBQUNWLDJGQXhDQSw2QkFBVSxPQXdDQTtBQXBDWixtREFJeUI7QUFtQ3ZCLDJGQXRDQSwwQkFBVSxPQXNDQTtBQXNCQyxRQUFBLG1CQUFtQixHQUEyQztJQUN6RSxHQUFHLEVBQUU7UUFDSCxXQUFXLEVBQUUsRUFBRTtRQUNmLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtRQUNsRCxXQUFXLEVBQUUsSUFBSTtLQUNsQjtJQUNELEdBQUcsRUFBRTtRQUNILFdBQVcsRUFBRSxFQUFFO1FBQ2YsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUs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QUFDLGNBQWM7NEJBQ2pDLElBQUksa0JBQWtCLENBQUMsT0FBTyxXQUFXLEVBQUUsRUFBRTtxQkFDaEQsQ0FBQztvQkFDRixJQUNFLGtCQUFrQixDQUFDLE9BQU87d0JBQzFCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNyQyxDQUFDO3dCQUNELGNBQWMsQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO29CQUN0RCxDQUFDO29CQUNELFNBQVMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBRXBDLE9BQU8sSUFBSSxnQ0FBYSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxLQUFLLEtBQUs7b0JBQ1IsT0FBTyxJQUFJLDBCQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDakQsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDUixNQUFNLFdBQVcsR0FBVSxZQUFZLENBQUM7b0JBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkJBQTZCLE1BQU0sQ0FBRSxXQUE2QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQzNFLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUExSUQsd0NBMElDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUnVudGltZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5cbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHtcbiAgdHlwZSBJRWNzQ29tcHV0ZSxcbiAgdHlwZSBJTGFtYmRhQ29tcHV0ZSxcbiAgdHlwZSBJRWMyQ29tcHV0ZSxcbiAgdHlwZSBBbnlDb21wdXRlLFxuICBpc0NvbXB1dGUsXG4gIGlzRWNzQ29tcHV0ZSxcbiAgaXNMYW1iZGFDb21wdXRlLFxuICBpc0VjMkNvbXB1dGVcbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jb21wdXRlLmpzXCI7XG5pbXBvcnQgeyB3YXJuSWZQcm9wZXJ0aWVzSWdub3JlZCB9IGZyb20gXCIuLi8uLi91dGlscy92YWxpZGF0aW9uTG9nZ2VyLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIE1hbmlmZXN0U2VydmljZSxcbiAgdHlwZSBNYW5pZmVzdExhbWJkYVxufSBmcm9tIFwiLi4vLi4vdXRpbHMvbWFuaWZlc3RXcml0ZXIuanNcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcblxuLy8gSW1wb3J0IGFuZCByZS1leHBvcnQgZnJvbSBwZXItcGF0dGVybiBmaWxlc1xuaW1wb3J0IHtcbiAgRWNzQ29tcHV0ZSxcbiAgdHlwZSBFY3NDb21wdXRlUHJvcHMsXG4gIHR5cGUgRWNzU2VydmljZUNvbmZpZyxcbiAgdHlwZSBFY3NDb250YWluZXJDb25maWcsXG4gIHR5cGUgRWNzU2NhbGluZ0NvbmZpZyxcbiAgdHlwZSBFY3NDbHVzdGVyQ29uZmlnLFxuICB0eXBlIEVjc1JvdXRpbmdDb25maWcsXG4gIHR5cGUgRWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyxcbiAgRUNTX0NBUEFDSVRZX1BST1ZJREVSX0NPTkZJRyxcbiAgZ2V0RWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyxcbiAgU2NhbGluZ1R5cGUsXG4gIHR5cGUgRWNzQ2FwYWNpdHlQcm92aWRlcixcbiAgdHlwZSBFYzJDYXBhY2l0eUNvbmZpZyxcbiAgdmFsaWRhdGVFY3NQcm9wcyxcbiAgYnVpbGRDb250YWluZXJDb25maWdzLFxuICB0eXBlIFJlc29sdmVkU2NhbGluZ0NvbmZpZyxcbiAgcmVzb2x2ZVNjYWxpbmdDb25maWdcbn0gZnJvbSBcIi4vY29tcHV0ZUVjcy5qc1wiO1xuXG5pbXBvcnQge1xuICBMYW1iZGFDb21wdXRlLFxuICB0eXBlIExhbWJkYUNvbXB1dGVQcm9wcyxcbiAgdHlwZSBDb250YWluZXJMYW1iZGFQcm9wcyxcbiAgdHlwZSBDb2RlTGFtYmRhUHJvcHMsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb25maWcsXG4gIHR5cGUgUmVzb2x2ZWRMYW1iZGFEZXBsb3ltZW50LFxuICByZXNvbHZlTGFtYmRhRGVwbG95bWVudCxcbiAgQXJjaGl0ZWN0dXJlLFxuICBIdHRwTWV0aG9kLFxuICBJbnZva2VNb2RlLFxuICB0eXBlIEZ1bmN0aW9uVXJsQ29yc09wdGlvbnNcbn0gZnJvbSBcIi4vY29tcHV0ZUxhbWJkYS5qc1wiO1xuXG5pbXBvcnQge1xuICBFYzJDb21wdXRlLFxuICB0eXBlIEVjMkNvbXB1dGVQcm9wcyxcbiAgdHlwZSBTc2hDb25maWdcbn0gZnJvbSBcIi4vY29tcHV0ZUVjMi5qc1wiO1xuXG4vLyBSZS1leHBvcnQgZXZlcnl0aGluZyBmcm9tIHBlci1wYXR0ZXJuIGZpbGVzXG5leHBvcnQge1xuICAvLyBFQ1NcbiAgRWNzQ29tcHV0ZSxcbiAgdHlwZSBFY3NDb21wdXRlUHJvcHMsXG4gIHR5cGUgRWNzU2VydmljZUNvbmZpZyxcbiAgdHlwZSBFY3NDb250YWluZXJDb25maWcsXG4gIHR5cGUgRWNzU2NhbGluZ0NvbmZpZyxcbiAgdHlwZSBFY3NDbHVzdGVyQ29uZmlnLFxuICB0eXBlIEVjc1JvdXRpbmdDb25maWcsXG4gIHR5cGUgRWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyxcbiAgRUNTX0NBUEFDSVRZX1BST1ZJREVSX0NPTkZJRyxcbiAgZ2V0RWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyxcbiAgU2NhbGluZ1R5cGUsXG4gIHR5cGUgRWNzQ2FwYWNpdHlQcm92aWRlcixcbiAgdHlwZSBFYzJDYXBhY2l0eUNvbmZpZyxcbiAgdmFsaWRhdGVFY3NQcm9wcyxcbiAgYnVpbGRDb250YWluZXJDb25maWdzLFxuICB0eXBlIFJlc29sdmVkU2NhbGluZ0NvbmZpZyxcbiAgcmVzb2x2ZVNjYWxpbmdDb25maWcsXG4gIC8vIExhbWJkYVxuICBMYW1iZGFDb21wdXRlLFxuICB0eXBlIExhbWJkYUNvbXB1dGVQcm9wcyxcbiAgdHlwZSBDb250YWluZXJMYW1iZGFQcm9wcyxcbiAgdHlwZSBDb2RlTGFtYmRhUHJvcHMsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb25maWcsXG4gIHR5cGUgUmVzb2x2ZWRMYW1iZGFEZXBsb3ltZW50LFxuICByZXNvbHZlTGFtYmRhRGVwbG95bWVudCxcbiAgQXJjaGl0ZWN0dXJlLFxuICBIdHRwTWV0aG9kLFxuICBJbnZva2VNb2RlLFxuICB0eXBlIEZ1bmN0aW9uVXJsQ29yc09wdGlvbnMsXG4gIC8vIEVDMlxuICBFYzJDb21wdXRlLFxuICB0eXBlIEVjMkNvbXB1dGVQcm9wcyxcbiAgdHlwZSBTc2hDb25maWdcbn07XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVUeXBlID0gXCJlY3NcIiB8IFwiZWMyXCIgfCBcImxhbWJkYVwiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZGVmYXVsdHMgZm9yIGVhY2ggY29tcHV0ZSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVUeXBlQ29uZmlnIHtcbiAgLyoqIERlZmF1bHQgcG9ydCBmb3IgdGhlIGNvbXB1dGUgdHlwZS4gRUNTOiA4MCwgRUMyOiAyMiwgTGFtYmRhOiAwIChubyBwb3J0KSAqL1xuICBkZWZhdWx0UG9ydDogbnVtYmVyO1xuICAvKiogRGVmYXVsdCBzY2FsaW5nIGxpbWl0cyAqL1xuICBkZWZhdWx0U2NhbGluZzoge1xuICAgIG1pbkNhcGFjaXR5OiBudW1iZXI7XG4gICAgbWF4Q2FwYWNpdHk6IG51bWJlcjtcbiAgfTtcbiAgLyoqIFdoZXRoZXIgdGhpcyBjb21wdXRlIHR5cGUgcmVxdWlyZXMgYSBWUEMgKi9cbiAgcmVxdWlyZXNWcGM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBDT01QVVRFX1RZUEVfQ09ORklHOiBSZWNvcmQ8Q29tcHV0ZVR5cGUsIENvbXB1dGVUeXBlQ29uZmlnPiA9IHtcbiAgZWNzOiB7XG4gICAgZGVmYXVsdFBvcnQ6IDgwLFxuICAgIGRlZmF1bHRTY2FsaW5nOiB7IG1pbkNhcGFjaXR5OiAyLCBtYXhDYXBhY2l0eTogNSB9LFxuICAgIHJlcXVpcmVzVnBjOiB0cnVlXG4gIH0sXG4gIGVjMjoge1xuICAgIGRlZmF1bHRQb3J0OiAyMixcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDMgfSxcbiAgICByZXF1aXJlc1ZwYzogdHJ1ZVxuICB9LFxuICBsYW1iZGE6IHtcbiAgICBkZWZhdWx0UG9ydDogMCxcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMCwgbWF4Q2FwYWNpdHk6IDEwMCB9LFxuICAgIHJlcXVpcmVzVnBjOiBmYWxzZVxuICB9XG59O1xuXG4vKipcbiAqIERlZmF1bHQgdmFsdWVzIGZvciBjb21wdXRlIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBDZW50cmFsaXNlZCBjb25zdGFudHMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgY29kZWJhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QVVRFX0RFRkFVTFRTID0ge1xuICBFQzI6IHtcbiAgICBJTlNUQU5DRV9UWVBFOiBcInQ0Zy5taWNyb1wiLFxuICAgIE1JTl9DQVBBQ0lUWTogMSxcbiAgICBNQVhfQ0FQQUNJVFk6IDFcbiAgfSxcbiAgRUNTOiB7XG4gICAgLyoqIEFXUyBzYW1wbGUgaW1hZ2UgdXNlZCB3aGVuIG5vIEVDUiByZXBvc2l0b3J5IGlzIHByb3ZpZGVkICovXG4gICAgRkFMTEJBQ0tfSU1BR0U6IFwiYW1hem9uL2FtYXpvbi1lY3Mtc2FtcGxlXCIsXG4gICAgLyoqIERlZmF1bHQgdGFnIGZvciBFQ1IgaW1hZ2VzICovXG4gICAgSU1BR0VfVEFHOiBcImxhdGVzdFwiXG4gIH0sXG4gIExBTUJEQToge1xuICAgIEhBTkRMRVI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgIFJVTlRJTUU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgQVJDSElURUNUVVJFOiBBcmNoaXRlY3R1cmUuQVJNXzY0XG4gIH1cbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlVHlwZUNvbmZpZyh0eXBlOiBDb21wdXRlVHlwZSk6IENvbXB1dGVUeXBlQ29uZmlnIHtcbiAgcmV0dXJuIENPTVBVVEVfVFlQRV9DT05GSUdbdHlwZV07XG59XG5cbi8vIFR5cGUtc2FmZSBwcm9wcyB3aXRoIGxpdGVyYWwgZGlzY3JpbWluYXRvcnMgZm9yIGZhY3Rvcnkgb3ZlcmxvYWRzXG5leHBvcnQgdHlwZSBJRWNzQ29tcHV0ZVByb3BzID0gRWNzQ29tcHV0ZVByb3BzO1xuZXhwb3J0IHR5cGUgSUxhbWJkYUNvbXB1dGVQcm9wcyA9IExhbWJkYUNvbXB1dGVQcm9wcztcbmV4cG9ydCB0eXBlIElFYzJDb21wdXRlUHJvcHMgPSBFYzJDb21wdXRlUHJvcHM7XG5cbmV4cG9ydCB0eXBlIElDb21wdXRlUHJvcHMgPVxuICB8IElFY3NDb21wdXRlUHJvcHNcbiAgfCBJTGFtYmRhQ29tcHV0ZVByb3BzXG4gIHwgSUVjMkNvbXB1dGVQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgY29tcHV0ZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBUaGVzZSBjaGVja3MgaGVscCBjYXRjaCBpc3N1ZXMgd2hlbiBwcm9wcyBjb21lIGZyb20gZHluYW1pYyBzb3VyY2VzIHdoZXJlXG4gKiBUeXBlU2NyaXB0J3MgY29tcGlsZS10aW1lIGNoZWNrcyBtYXkgbm90IGFwcGx5LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvbXB1dGVQcm9wcyhwcm9wczogSUNvbXB1dGVQcm9wcyk6IHZvaWQge1xuICAvLyBFQ1Mtc3BlY2lmaWMgb3B0aW9ucyBvbiBub24tRUNTIGNvbXB1dGVcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWQoXG4gICAgcHJvcHMsXG4gICAgW1wiY2FwYWNpdHlQcm92aWRlclwiLCBcImVjMkNvbmZpZ1wiLCBcInNlcnZpY2VzXCIsIFwiY2x1c3RlclwiXSxcbiAgICBcImVjc1wiLFxuICAgIFwiRUNTIGNvbXB1dGVcIlxuICApO1xuXG4gIC8vIExhbWJkYS1zcGVjaWZpYyBvcHRpb25zIG9uIG5vbi1MYW1iZGEgY29tcHV0ZVxuICB3YXJuSWZQcm9wZXJ0aWVzSWdub3JlZChcbiAgICBwcm9wcyxcbiAgICBbXCJmdW5jdGlvblVybFwiLCBcImhhbmRsZXJcIiwgXCJydW50aW1lXCJdLFxuICAgIFwibGFtYmRhXCIsXG4gICAgXCJMYW1iZGEgY29tcHV0ZVwiXG4gICk7XG5cbiAgLy8gRUMyLXNwZWNpZmljIG9wdGlvbnMgb24gbm9uLUVDMiBjb21wdXRlXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcInNzaFwiLCBcInVzZXJEYXRhXCIsIFwibWFjaGluZUltYWdlXCJdLFxuICAgIFwiZWMyXCIsXG4gICAgXCJFQzIgY29tcHV0ZVwiXG4gICk7XG5cbiAgLy8gRUNTLXNwZWNpZmljIHZhbGlkYXRpb24gLSB0eXBlIG5hcnJvd2luZyBoYW5kbGVkIGJ5IGRpc2NyaW1pbmF0ZWQgdW5pb25cbiAgaWYgKHByb3BzLnR5cGUgPT09IFwiZWNzXCIpIHtcbiAgICB2YWxpZGF0ZUVjc1Byb3BzKHByb3BzKTtcbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgZm9yIGNyZWF0aW5nIGNvbXB1dGUgcmVzb3VyY2VzIHdpdGggdHlwZS1zYWZlIHJldHVybiB0eXBlcy5cbiAqXG4gKiBUaGUgZmFjdG9yeSB1c2VzIG92ZXJsb2FkcyB0byBpbmZlciB0aGUgc3BlY2lmaWMgY29tcHV0ZSB0eXBlIGZyb20gcHJvcHMsXG4gKiBlbnN1cmluZyBUeXBlU2NyaXB0IHByb3ZpZGVzIG9ubHkgdGhlIHJlbGV2YW50IG1ldGhvZHMgZm9yIGVhY2ggY29tcHV0ZSB0eXBlLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFQ1MgY29tcHV0ZSAtIHJldHVybnMgRWNzQ29tcHV0ZSB3aXRoIEVDUy1zcGVjaWZpYyBtZXRob2RzXG4gKiBjb25zdCBlY3MgPSBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldlYkFwcFwiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgZG9tYWluOiBcImFwcC5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIHNlcnZpY2VzOiBbeyBuYW1lOiBcIndlYlwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1dXG4gKiB9KSk7XG4gKiBlY3MuZ2V0TG9hZEJhbGFuY2VyKCk7IC8vIEF2YWlsYWJsZSBvbiBFY3NDb21wdXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIExhbWJkYSBjb21wdXRlIC0gcmV0dXJucyBMYW1iZGFDb21wdXRlIHdpdGggTGFtYmRhLXNwZWNpZmljIG1ldGhvZHNcbiAqIGNvbnN0IGxhbWJkYSA9IGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiRm5cIiwge1xuICogICB0eXBlOiBcImxhbWJkYVwiLFxuICogICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAqICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXCIuL2xhbWJkYVwiKVxuICogfSkpO1xuICogbGFtYmRhLmdldEZ1bmN0aW9uVXJsKCk7IC8vIEF2YWlsYWJsZSBvbiBMYW1iZGFDb21wdXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVDMiBjb21wdXRlIC0gcmV0dXJucyBFYzJDb21wdXRlIHdpdGggRUMyLXNwZWNpZmljIG1ldGhvZHNcbiAqIGNvbnN0IGVjMiA9IGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiSW5zdGFuY2VcIiwge1xuICogICB0eXBlOiBcImVjMlwiLFxuICogICBpbnN0YW5jZVR5cGU6IFwidDRnLm1pY3JvXCJcbiAqIH0pKTtcbiAqIGVjMi5nZXRBdXRvU2NhbGluZ0dyb3VwKCk7IC8vIEF2YWlsYWJsZSBvbiBFYzJDb21wdXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wdXRlRmFjdG9yeSB7XG4gIC8vIE92ZXJsb2FkOiBFQ1MgcHJvcHMgcmV0dXJucyBFY3NDb21wdXRlXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJRWNzQ29tcHV0ZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gRWNzQ29tcHV0ZTtcbiAgLy8gT3ZlcmxvYWQ6IExhbWJkYSBwcm9wcyByZXR1cm5zIExhbWJkYUNvbXB1dGVcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElMYW1iZGFDb21wdXRlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBMYW1iZGFDb21wdXRlO1xuICAvLyBPdmVybG9hZDogRUMyIHByb3BzIHJldHVybnMgRWMyQ29tcHV0ZVxuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUVjMkNvbXB1dGVQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IEVjMkNvbXB1dGU7XG4gIC8vIEltcGxlbWVudGF0aW9uIHNpZ25hdHVyZVxuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUNvbXB1dGVQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IEFueUNvbXB1dGUge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpOiBBbnlDb21wdXRlID0+IHtcbiAgICAgIHZhbGlkYXRlQ29tcHV0ZVByb3BzKHByb3BzKTtcblxuICAgICAgLy8gQXV0by1kZXJpdmUgYXBwTmFtZSBmcm9tIEFwcCBpbnN0YW5jZSBmb3IgRUNTIGNvbXB1dGVcbiAgICAgIGNvbnN0IHR5cGVDb25maWcgPSBDT01QVVRFX1RZUEVfQ09ORklHW3Byb3BzLnR5cGVdO1xuICAgICAgY29uc3QgbmVlZHNWcGMgPVxuICAgICAgICB0eXBlQ29uZmlnLnJlcXVpcmVzVnBjIHx8XG4gICAgICAgIChcImNvbm5lY3Rpb25zXCIgaW4gcHJvcHMgJiZcbiAgICAgICAgICBBcnJheS5pc0FycmF5KHByb3BzLmNvbm5lY3Rpb25zKSAmJlxuICAgICAgICAgIHByb3BzLmNvbm5lY3Rpb25zLmxlbmd0aCA+IDApO1xuICAgICAgbGV0IGNvbXB1dGVQcm9wczogSUNvbXB1dGVQcm9wcyA9IHtcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwYzogbmVlZHNWcGMgPyBhcHAuZ2V0VnBjKCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgZWNyUmVwb3NpdG9yeTogYXBwLmdldERlZmF1bHRDb250YWluZXJSZWdpc3RyeSgpXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnByb3BzXG4gICAgICB9O1xuXG4gICAgICBpZiAoY29tcHV0ZVByb3BzLnR5cGUgPT09IFwiZWNzXCIpIHtcbiAgICAgICAgY29tcHV0ZVByb3BzID0ge1xuICAgICAgICAgIC4uLmNvbXB1dGVQcm9wcyxcbiAgICAgICAgICBhcHBOYW1lOiBjb21wdXRlUHJvcHMuYXBwTmFtZSA/PyBhcHAuZ2V0TmFtZSgpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBzcGVjaWZpYyBjb21wdXRlIGNsYXNzIGJhc2VkIG9uIHR5cGUgZGlzY3JpbWluYXRvclxuICAgICAgc3dpdGNoIChjb21wdXRlUHJvcHMudHlwZSkge1xuICAgICAgICBjYXNlIFwiZWNzXCI6IHtcbiAgICAgICAgICAvLyBSZWdpc3RlciBFQ1Mgc2VydmljZXMgd2l0aCBtYW5pZmVzdCBjb2xsZWN0b3IgZm9yIENMSSBkaXNjb3ZlcnlcbiAgICAgICAgICBjb25zdCBjb2xsZWN0b3IgPSBhcHAuZ2V0TWFuaWZlc3RDb2xsZWN0b3IoKTtcbiAgICAgICAgICBjb25zdCBjbHVzdGVyTmFtZSA9IGlkO1xuICAgICAgICAgIGNvbnN0IGFwcE5hbWUgPSBjb21wdXRlUHJvcHMuYXBwTmFtZSA/PyBhcHAuZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIGNvbXB1dGVQcm9wcy5zZXJ2aWNlcykge1xuICAgICAgICAgICAgY29uc3QgbWFuaWZlc3RTZXJ2aWNlOiBNYW5pZmVzdFNlcnZpY2UgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHNlcnZpY2UubmFtZSxcbiAgICAgICAgICAgICAgY2x1c3Rlck5hbWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIEluY2x1ZGUgZG9ja2VyZmlsZVBhdGggaWYgc3BlY2lmaWVkIChtZXRhZGF0YSBmb3IgQ0xJKVxuICAgICAgICAgICAgaWYgKHNlcnZpY2UuZG9ja2VyZmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgbWFuaWZlc3RTZXJ2aWNlLmRvY2tlcmZpbGVQYXRoID0gc2VydmljZS5kb2NrZXJmaWxlUGF0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSW5jbHVkZSBkb2NrZXJUYXJnZXQgaWYgc3BlY2lmaWVkIChtZXRhZGF0YSBmb3IgQ0xJKVxuICAgICAgICAgICAgaWYgKHNlcnZpY2UuZG9ja2VyVGFyZ2V0KSB7XG4gICAgICAgICAgICAgIG1hbmlmZXN0U2VydmljZS5kb2NrZXJUYXJnZXQgPSBzZXJ2aWNlLmRvY2tlclRhcmdldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRmluZCBjb250YWluZXIgcG9ydCBmcm9tIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydFxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyV2l0aFBvcnQgPSBzZXJ2aWNlLmNvbnRhaW5lcnM/LmZpbmQoXG4gICAgICAgICAgICAgIChjKSA9PiBjLnBvcnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjb250YWluZXJXaXRoUG9ydD8ucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIG1hbmlmZXN0U2VydmljZS5jb250YWluZXJQb3J0ID0gY29udGFpbmVyV2l0aFBvcnQucG9ydDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWdncmVnYXRlIHNlY3JldHMgZnJvbSBhbGwgY29udGFpbmVycyAoZGVkdXBsaWNhdGVkKVxuICAgICAgICAgICAgY29uc3QgYWxsU2VjcmV0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2Ygc2VydmljZS5jb250YWluZXJzID8/IFtdKSB7XG4gICAgICAgICAgICAgIGlmIChjb250YWluZXIuc2VjcmV0cykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VjcmV0IG9mIGNvbnRhaW5lci5zZWNyZXRzKSB7XG4gICAgICAgICAgICAgICAgICBhbGxTZWNyZXRzLmFkZChzZWNyZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbFNlY3JldHMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgbWFuaWZlc3RTZXJ2aWNlLnNlY3JldHMgPSBBcnJheS5mcm9tKGFsbFNlY3JldHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbmNsdWRlIHNzbVNlY3JldHNQYXRoIChleHBsaWNpdCBvciBkZXJpdmVkKVxuICAgICAgICAgICAgbWFuaWZlc3RTZXJ2aWNlLnNzbVNlY3JldHNQYXRoID1cbiAgICAgICAgICAgICAgc2VydmljZS5zc21TZWNyZXRzUGF0aCA/P1xuICAgICAgICAgICAgICBgLyR7YXBwTmFtZX0vJHtjbHVzdGVyTmFtZX0vJHtzZXJ2aWNlLm5hbWV9YDtcblxuICAgICAgICAgICAgY29sbGVjdG9yLmFkZFNlcnZpY2UobWFuaWZlc3RTZXJ2aWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBFY3NDb21wdXRlKHNjb3BlLCBpZCwgY29tcHV0ZVByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwibGFtYmRhXCI6IHtcbiAgICAgICAgICAvLyBBZGQgYXBwTmFtZSB0byBwcm9wcyBmb3IgTGFtYmRhIChuZWVkZWQgZm9yIHNlY3JldHMgcGF0aCBkZXJpdmF0aW9uKVxuICAgICAgICAgIGNvbnN0IGxhbWJkYUNvbXB1dGVQcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLmNvbXB1dGVQcm9wcyxcbiAgICAgICAgICAgIGFwcE5hbWU6IGFwcC5nZXROYW1lKClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gQWx3YXlzIHJlZ2lzdGVyIExhbWJkYSB3aXRoIG1hbmlmZXN0IGNvbGxlY3RvciBmb3IgQ0xJIGRpc2NvdmVyeVxuICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyBhbGwgTGFtYmRhcyBhcmUgZGlzY292ZXJhYmxlIGZvciBzZWNyZXRzIG1hbmFnZW1lbnQsXG4gICAgICAgICAgLy8gZXZlbiB0aG9zZSB0aGF0IGRvbid0IGN1cnJlbnRseSBoYXZlIHNlY3JldHMgY29uZmlndXJlZFxuICAgICAgICAgIGNvbnN0IGNvbGxlY3RvciA9IGFwcC5nZXRNYW5pZmVzdENvbGxlY3RvcigpO1xuICAgICAgICAgIGNvbnN0IG1hbmlmZXN0TGFtYmRhOiBNYW5pZmVzdExhbWJkYSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGlkLFxuICAgICAgICAgICAgc3NtU2VjcmV0c1BhdGg6XG4gICAgICAgICAgICAgIGxhbWJkYUNvbXB1dGVQcm9wcy5zc21TZWNyZXRzUGF0aCB8fFxuICAgICAgICAgICAgICBgLyR7bGFtYmRhQ29tcHV0ZVByb3BzLmFwcE5hbWV9L2xhbWJkYS8ke2lkfWBcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxhbWJkYUNvbXB1dGVQcm9wcy5zZWNyZXRzICYmXG4gICAgICAgICAgICBsYW1iZGFDb21wdXRlUHJvcHMuc2VjcmV0cy5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBtYW5pZmVzdExhbWJkYS5zZWNyZXRzID0gbGFtYmRhQ29tcHV0ZVByb3BzLnNlY3JldHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbGxlY3Rvci5hZGRMYW1iZGEobWFuaWZlc3RMYW1iZGEpO1xuXG4gICAgICAgICAgcmV0dXJuIG5ldyBMYW1iZGFDb21wdXRlKHNjb3BlLCBpZCwgbGFtYmRhQ29tcHV0ZVByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZWMyXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBFYzJDb21wdXRlKHNjb3BlLCBpZCwgY29tcHV0ZVByb3BzKTtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IGNvbXB1dGVQcm9wcztcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVW5zdXBwb3J0ZWQgY29tcHV0ZSB0eXBlOiAke1N0cmluZygoX2V4aGF1c3RpdmUgYXMgSUNvbXB1dGVQcm9wcykudHlwZSl9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIFJlLWV4cG9ydCB0eXBlIGd1YXJkcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IGlzQ29tcHV0ZSwgaXNFY3NDb21wdXRlLCBpc0xhbWJkYUNvbXB1dGUsIGlzRWMyQ29tcHV0ZSB9O1xuZXhwb3J0IHR5cGUgeyBJRWNzQ29tcHV0ZSwgSUxhbWJkYUNvbXB1dGUsIElFYzJDb21wdXRlLCBBbnlDb21wdXRlIH07XG4iXX0=
|
|
208
|
+
// Re-export type guards for convenience
|
|
209
|
+
export { isCompute, isEcsCompute, isLambdaCompute, isEc2Compute };
|
|
@@ -2,7 +2,7 @@ import { type Connections, type IVpc, type UserData, type IMachineImage, type IS
|
|
|
2
2
|
import { type IAutoScalingGroup } from "aws-cdk-lib/aws-autoscaling";
|
|
3
3
|
import { Construct } from "constructs";
|
|
4
4
|
import { type IEc2Compute } from "./interfaces/compute.js";
|
|
5
|
-
import { Ec2Instance } from "../../resources/aws/compute/ec2";
|
|
5
|
+
import { Ec2Instance } from "../../resources/aws/compute/ec2.js";
|
|
6
6
|
/**
|
|
7
7
|
* SSH access configuration for EC2 instances.
|
|
8
8
|
* - Omit: disabled (default)
|
|
@@ -1,30 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const constructs_1 = require("constructs");
|
|
5
|
-
const ec2_1 = require("../../resources/aws/compute/ec2");
|
|
6
|
-
const compute_js_1 = require("./compute.js");
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { Ec2Instance } from "../../resources/aws/compute/ec2.js";
|
|
3
|
+
import { COMPUTE_DEFAULTS } from "./compute.js";
|
|
7
4
|
/**
|
|
8
5
|
* EC2 compute wrapper implementing IEc2Compute.
|
|
9
6
|
* Provides type-safe access to EC2-specific resources.
|
|
10
7
|
*/
|
|
11
|
-
class Ec2Compute extends
|
|
8
|
+
export class Ec2Compute extends Construct {
|
|
9
|
+
computeType = "ec2";
|
|
10
|
+
connections;
|
|
11
|
+
ec2Instance;
|
|
12
12
|
constructor(scope, id, props) {
|
|
13
13
|
super(scope, id);
|
|
14
|
-
this.computeType = "ec2";
|
|
15
14
|
const enableSSH = props.ssh !== undefined && props.ssh !== false;
|
|
16
15
|
const ec2Props = {
|
|
17
16
|
serviceName: `${id}Service`,
|
|
18
|
-
instanceType: props.instanceType ||
|
|
17
|
+
instanceType: props.instanceType || COMPUTE_DEFAULTS.EC2.INSTANCE_TYPE,
|
|
19
18
|
enableSSH,
|
|
20
19
|
userData: props.userData,
|
|
21
20
|
machineImage: props.machineImage,
|
|
22
|
-
minCapacity: props.minCapacity ||
|
|
23
|
-
maxCapacity: props.maxCapacity ||
|
|
21
|
+
minCapacity: props.minCapacity || COMPUTE_DEFAULTS.EC2.MIN_CAPACITY,
|
|
22
|
+
maxCapacity: props.maxCapacity || COMPUTE_DEFAULTS.EC2.MAX_CAPACITY,
|
|
24
23
|
vpc: props.vpc,
|
|
25
24
|
spotCapacityPercentage: props.spotCapacityPercentage
|
|
26
25
|
};
|
|
27
|
-
this.ec2Instance = new
|
|
26
|
+
this.ec2Instance = new Ec2Instance(scope, `${id}Ec2`, ec2Props);
|
|
28
27
|
this.connections = this.ec2Instance.connections;
|
|
29
28
|
}
|
|
30
29
|
/** Get the Auto Scaling Group. */
|
|
@@ -42,5 +41,3 @@ class Ec2Compute extends constructs_1.Construct {
|
|
|
42
41
|
return this.ec2Instance;
|
|
43
42
|
}
|
|
44
43
|
}
|
|
45
|
-
exports.Ec2Compute = Ec2Compute;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZUVjMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZUVjMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSwyQ0FBdUM7QUFJdkMseURBQThEO0FBRTlELDZDQUFnRDtBQWtEaEQ7OztHQUdHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFNdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTkgsZ0JBQVcsR0FBRyxLQUFjLENBQUM7UUFRM0MsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUM7UUFFakUsTUFBTSxRQUFRLEdBQUc7WUFDZixXQUFXLEVBQUUsR0FBRyxFQUFFLFNBQVM7WUFDM0IsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksNkJBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWE7WUFDdEUsU0FBUztZQUNULFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksNkJBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVk7WUFDbkUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksNkJBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVk7WUFDbkUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2Qsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQjtTQUNyRCxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGlCQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQTNDRCxnQ0EyQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENvbm5lY3Rpb25zLFxuICB0eXBlIElWcGMsXG4gIHR5cGUgVXNlckRhdGEsXG4gIHR5cGUgSU1hY2hpbmVJbWFnZSxcbiAgdHlwZSBJU2VjdXJpdHlHcm91cFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgdHlwZSBJQXV0b1NjYWxpbmdHcm91cCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXV0b3NjYWxpbmdcIjtcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW1wb3J0IHsgdHlwZSBJRWMyQ29tcHV0ZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvY29tcHV0ZS5qc1wiO1xuXG5pbXBvcnQgeyBFYzJJbnN0YW5jZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWMyXCI7XG5cbmltcG9ydCB7IENPTVBVVEVfREVGQVVMVFMgfSBmcm9tIFwiLi9jb21wdXRlLmpzXCI7XG5cbi8qKlxuICogU1NIIGFjY2VzcyBjb25maWd1cmF0aW9uIGZvciBFQzIgaW5zdGFuY2VzLlxuICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIGF1dG8tZ2VuZXJhdGVkIGtleVxuICogLSBgeyBrZXlOYW1lOiBcIm15LWtleVwiIH1gOiBlbmFibGVkIHdpdGggZXhpc3Rpbmcga2V5XG4gKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTc2hDb25maWcge1xuICAvKiogU1NIIGtleSBwYWlyIG5hbWUgKi9cbiAga2V5TmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93ZWQgQ0lEUiBibG9ja3MgZm9yIFNTSCBhY2Nlc3MgKi9cbiAgYWxsb3dlZENpZHJzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWMyQ29tcHV0ZVByb3BzIHtcbiAgdHlwZTogXCJlYzJcIjtcbiAgdnBjPzogSVZwYztcblxuICAvKiogRUMyIGluc3RhbmNlIHR5cGUuIERlZmF1bHQ6IFwidDRnLm1pY3JvXCIgKi9cbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTU0ggYWNjZXNzIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gICAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIGRlZmF1bHRzXG4gICAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICAgKi9cbiAgc3NoPzogU3NoQ29uZmlnIHwgZmFsc2U7XG4gIC8qKiBVc2VyIGRhdGEgc2NyaXB0ICovXG4gIHVzZXJEYXRhPzogVXNlckRhdGE7XG4gIC8qKiBNYWNoaW5lIGltYWdlIChBTUkpICovXG4gIG1hY2hpbmVJbWFnZT86IElNYWNoaW5lSW1hZ2U7XG4gIC8qKiBNaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMuIERlZmF1bHQ6IDEgKi9cbiAgbWluQ2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMuIERlZmF1bHQ6IDEgKi9cbiAgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQZXJjZW50YWdlIG9mIGNhcGFjaXR5IHRvIHJ1biBvbiBTcG90IGluc3RhbmNlcyAoMC0xMDApLlxuICAgKiAtIE9taXQgb3IgMDogQWxsIE9uLURlbWFuZCBpbnN0YW5jZXMgKGRlZmF1bHQpXG4gICAqIC0gMTAwOiBBbGwgU3BvdCBpbnN0YW5jZXNcbiAgICogLSA1MDogSGFsZiBTcG90LCBoYWxmIE9uLURlbWFuZFxuICAgKlxuICAgKiBTcG90IGluc3RhbmNlcyBjYW4gcmVkdWNlIGNvc3RzIGJ5IHVwIHRvIDkwJSBidXQgbWF5IGJlIGludGVycnVwdGVkLlxuICAgKiBVc2UgZm9yIGZhdWx0LXRvbGVyYW50IHdvcmtsb2Fkcy5cbiAgICovXG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRUMyIGNvbXB1dGUgd3JhcHBlciBpbXBsZW1lbnRpbmcgSUVjMkNvbXB1dGUuXG4gKiBQcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIEVDMi1zcGVjaWZpYyByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBFYzJDb21wdXRlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUVjMkNvbXB1dGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcHV0ZVR5cGUgPSBcImVjMlwiIGFzIGNvbnN0O1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZWMySW5zdGFuY2U6IEVjMkluc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFYzJDb21wdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZW5hYmxlU1NIID0gcHJvcHMuc3NoICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuc3NoICE9PSBmYWxzZTtcblxuICAgIGNvbnN0IGVjMlByb3BzID0ge1xuICAgICAgc2VydmljZU5hbWU6IGAke2lkfVNlcnZpY2VgLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5pbnN0YW5jZVR5cGUgfHwgQ09NUFVURV9ERUZBVUxUUy5FQzIuSU5TVEFOQ0VfVFlQRSxcbiAgICAgIGVuYWJsZVNTSCxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIG1hY2hpbmVJbWFnZTogcHJvcHMubWFjaGluZUltYWdlLFxuICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLm1pbkNhcGFjaXR5IHx8IENPTVBVVEVfREVGQVVMVFMuRUMyLk1JTl9DQVBBQ0lUWSxcbiAgICAgIG1heENhcGFjaXR5OiBwcm9wcy5tYXhDYXBhY2l0eSB8fCBDT01QVVRFX0RFRkFVTFRTLkVDMi5NQVhfQ0FQQUNJVFksXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IHByb3BzLnNwb3RDYXBhY2l0eVBlcmNlbnRhZ2VcbiAgICB9O1xuXG4gICAgdGhpcy5lYzJJbnN0YW5jZSA9IG5ldyBFYzJJbnN0YW5jZShzY29wZSwgYCR7aWR9RWMyYCwgZWMyUHJvcHMpO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmVjMkluc3RhbmNlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgQXV0byBTY2FsaW5nIEdyb3VwLiAqL1xuICBnZXRBdXRvU2NhbGluZ0dyb3VwKCk6IElBdXRvU2NhbGluZ0dyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5lYzJJbnN0YW5jZS5nZXRBdXRvU2NhbGluZ0dyb3VwKCk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBzZWN1cml0eSBncm91cC4gKi9cbiAgZ2V0U2VjdXJpdHlHcm91cCgpOiBJU2VjdXJpdHlHcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZWMySW5zdGFuY2UuYXNnU2VjdXJpdHlHcm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgRUMyIGluc3RhbmNlIGNvbnN0cnVjdC5cbiAgICovXG4gIGdldEVjMkluc3RhbmNlKCk6IEVjMkluc3RhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5lYzJJbnN0YW5jZTtcbiAgfVxufVxuIl19
|
|
@@ -4,10 +4,12 @@ import { type Connections, type IVpc, type ISecurityGroup } from "aws-cdk-lib/aw
|
|
|
4
4
|
import { type PolicyDocument, type IManagedPolicy, type IGrantable, Grant } from "aws-cdk-lib/aws-iam";
|
|
5
5
|
import { type IApplicationLoadBalancer, type ApplicationListener } from "aws-cdk-lib/aws-elasticloadbalancingv2";
|
|
6
6
|
import { Construct } from "constructs";
|
|
7
|
+
import type { ITopic } from "aws-cdk-lib/aws-sns";
|
|
7
8
|
import { type IEcsCompute } from "./interfaces/compute.js";
|
|
8
9
|
import { type ConnectionSpec } from "./interfaces/connector.js";
|
|
9
|
-
import EcsCluster, { type EcsClusterProps, ScalingType, type DomainConfig, type EcsCapacityProvider, type Ec2CapacityConfig } from "../../resources/aws/compute/ecs";
|
|
10
|
-
import {
|
|
10
|
+
import EcsCluster, { type EcsClusterProps, ScalingType, type DomainConfig, type EcsCapacityProvider, type Ec2CapacityConfig } from "../../resources/aws/compute/ecs.js";
|
|
11
|
+
import type { EcsServiceAlarmThresholds } from "../../resources/aws/monitoring/index.js";
|
|
12
|
+
import { type SecretImport } from "../../resources/aws/secrets/index.js";
|
|
11
13
|
export { ScalingType };
|
|
12
14
|
export type { EcsCapacityProvider, Ec2CapacityConfig };
|
|
13
15
|
/**
|
|
@@ -316,6 +318,13 @@ export interface EcsServiceConfig {
|
|
|
316
318
|
* ssmSecretsPath: "/custom/path/to/secrets"
|
|
317
319
|
*/
|
|
318
320
|
ssmSecretsPath?: string;
|
|
321
|
+
/**
|
|
322
|
+
* Per-service alarm configuration.
|
|
323
|
+
* - undefined: use defaults (CPU, memory, running tasks, 5xx if ALB)
|
|
324
|
+
* - false: disable alarms for this service
|
|
325
|
+
* - object: override specific thresholds
|
|
326
|
+
*/
|
|
327
|
+
alarms?: EcsServiceAlarmThresholds | false;
|
|
319
328
|
}
|
|
320
329
|
/**
|
|
321
330
|
* ECS compute configuration.
|
|
@@ -383,6 +392,13 @@ export interface EcsComputeProps {
|
|
|
383
392
|
* not used during CDK synthesis.
|
|
384
393
|
*/
|
|
385
394
|
dockerfilePath?: string;
|
|
395
|
+
/**
|
|
396
|
+
* SNS topic for alarm notifications. Resolved to ITopic and passed to EcsCluster.
|
|
397
|
+
* Accepts either an ITopic directly or a topic ARN string (resolved internally).
|
|
398
|
+
*/
|
|
399
|
+
alertsTopic?: ITopic | string;
|
|
400
|
+
/** Application ID for alarm tagging (used by webhook to map alarms to applications). */
|
|
401
|
+
applicationId?: string;
|
|
386
402
|
}
|
|
387
403
|
/**
|
|
388
404
|
* Validates ECS-specific props.
|