@fjall/components-infrastructure 0.75.3 → 0.77.1
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/dist/lib/app.d.ts +125 -20
- package/dist/lib/app.js +171 -56
- package/dist/lib/aspects/resourceInventory.d.ts +41 -0
- package/dist/lib/aspects/resourceInventory.js +56 -0
- package/dist/lib/config/audit.d.ts +18 -0
- package/dist/lib/config/audit.js +22 -0
- package/dist/lib/config/aws/backupGlobalSettings.d.ts +1 -1
- package/dist/lib/config/aws/backupGlobalSettings.js +1 -1
- package/dist/lib/config/aws/cloudTrail.d.ts +1 -1
- package/dist/lib/config/aws/cloudTrail.js +2 -2
- package/dist/lib/config/aws/disasterRecovery.js +1 -1
- package/dist/lib/config/aws/ecrDefaultImage.d.ts +1 -1
- package/dist/lib/config/aws/ecrDefaultImage.js +4 -4
- package/dist/lib/config/aws/identityCenter.d.ts +3 -3
- package/dist/lib/config/aws/identityCenter.js +1 -1
- package/dist/lib/config/aws/identityCenterGroupMembership.d.ts +2 -2
- package/dist/lib/config/aws/identityCenterGroupMembership.js +1 -1
- package/dist/lib/config/aws/ipam.js +2 -4
- package/dist/lib/config/aws/organisation.d.ts +3 -3
- package/dist/lib/config/aws/organisation.js +1 -1
- package/dist/lib/config/aws/organisationsAccess.d.ts +1 -1
- package/dist/lib/config/aws/organisationsAccess.js +1 -1
- package/dist/lib/config/monitoring.d.ts +18 -0
- package/dist/lib/config/monitoring.js +22 -0
- package/dist/lib/patterns/aws/auditRole.d.ts +44 -0
- package/dist/lib/patterns/aws/auditRole.js +58 -0
- package/dist/lib/patterns/aws/buildkite.d.ts +3 -3
- package/dist/lib/patterns/aws/buildkite.js +1 -1
- package/dist/lib/patterns/aws/compute.d.ts +17 -11
- package/dist/lib/patterns/aws/compute.js +7 -7
- package/dist/lib/patterns/aws/database.d.ts +185 -24
- package/dist/lib/patterns/aws/database.js +280 -42
- package/dist/lib/patterns/aws/ec2.d.ts +43 -0
- package/dist/lib/patterns/aws/ec2.js +123 -0
- package/dist/lib/patterns/aws/fivetranProxy.d.ts +5 -5
- package/dist/lib/patterns/aws/fivetranProxy.js +1 -1
- package/dist/lib/patterns/aws/hostedZone.d.ts +2 -2
- package/dist/lib/patterns/aws/hostedZone.js +1 -1
- package/dist/lib/patterns/aws/index.d.ts +1 -0
- package/dist/lib/patterns/aws/index.js +2 -1
- package/dist/lib/patterns/aws/managedAccount.d.ts +2 -2
- package/dist/lib/patterns/aws/managedAccount.js +1 -1
- package/dist/lib/patterns/aws/managedIdentityCenter.js +1 -1
- package/dist/lib/patterns/aws/managedOrganisation.d.ts +3 -3
- package/dist/lib/patterns/aws/managedOrganisation.js +1 -1
- package/dist/lib/patterns/aws/managedPlatform.d.ts +2 -2
- package/dist/lib/patterns/aws/managedPlatform.js +2 -4
- package/dist/lib/patterns/aws/network.d.ts +75 -0
- package/dist/lib/patterns/aws/network.js +99 -0
- package/dist/lib/patterns/aws/storage.d.ts +4 -55
- package/dist/lib/patterns/aws/storage.js +3 -103
- package/dist/lib/resources/aws/audit/auditRole.d.ts +32 -0
- package/dist/lib/resources/aws/audit/auditRole.js +46 -0
- package/dist/lib/resources/aws/backup/backupPlan.d.ts +2 -2
- package/dist/lib/resources/aws/backup/backupPlan.js +1 -1
- package/dist/lib/resources/aws/backup/backupVault.d.ts +2 -2
- package/dist/lib/resources/aws/backup/backupVault.js +1 -1
- package/dist/lib/resources/aws/base/awsStack.js +1 -4
- package/dist/lib/resources/aws/compute/ec2.d.ts +4 -3
- package/dist/lib/resources/aws/compute/ec2.js +5 -3
- package/dist/lib/resources/aws/compute/ecs.d.ts +9 -9
- package/dist/lib/resources/aws/compute/ecs.js +68 -20
- package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +6 -7
- package/dist/lib/resources/aws/compute/ecsFreeTier.js +17 -10
- package/dist/lib/resources/aws/compute/ecsSpot.d.ts +6 -7
- package/dist/lib/resources/aws/compute/ecsSpot.js +19 -14
- package/dist/lib/resources/aws/compute/lambda.d.ts +15 -10
- package/dist/lib/resources/aws/compute/lambda.js +27 -19
- package/dist/lib/resources/aws/database/database.d.ts +2 -2
- package/dist/lib/resources/aws/database/database.js +1 -1
- package/dist/lib/resources/aws/database/databaseInstance.d.ts +2 -2
- package/dist/lib/resources/aws/database/databaseInstance.js +2 -2
- package/dist/lib/resources/aws/database/index.d.ts +0 -1
- package/dist/lib/resources/aws/database/index.js +1 -2
- package/dist/lib/resources/aws/database/rdsAurora.d.ts +24 -6
- package/dist/lib/resources/aws/database/rdsAurora.js +212 -85
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +41 -6
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +38 -8
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +19 -10
- package/dist/lib/resources/aws/database/rdsInstance.js +220 -73
- package/dist/lib/resources/aws/iam/identityCenter/assignment.d.ts +1 -1
- package/dist/lib/resources/aws/iam/identityCenter/assignment.js +1 -1
- package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.d.ts +1 -1
- package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -1
- package/dist/lib/resources/aws/iam/identityCenter/group.d.ts +1 -1
- package/dist/lib/resources/aws/iam/identityCenter/group.js +1 -1
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +2 -2
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +1 -1
- package/dist/lib/resources/aws/iam/instanceProfile.d.ts +1 -1
- package/dist/lib/resources/aws/iam/instanceProfile.js +1 -1
- package/dist/lib/resources/aws/iam/managedPolicy.d.ts +1 -1
- package/dist/lib/resources/aws/iam/managedPolicy.js +1 -1
- package/dist/lib/resources/aws/iam/policy.d.ts +1 -1
- package/dist/lib/resources/aws/iam/policy.js +1 -1
- package/dist/lib/resources/aws/iam/role.d.ts +1 -1
- package/dist/lib/resources/aws/iam/role.js +1 -1
- package/dist/lib/resources/aws/iam/securityGroup.d.ts +1 -1
- package/dist/lib/resources/aws/iam/securityGroup.js +1 -1
- package/dist/lib/resources/aws/index.d.ts +1 -0
- package/dist/lib/resources/aws/index.js +2 -1
- package/dist/lib/resources/aws/logging/logGroup.d.ts +2 -2
- package/dist/lib/resources/aws/logging/logGroup.js +1 -1
- package/dist/lib/resources/aws/monitoring/index.d.ts +1 -0
- package/dist/lib/resources/aws/monitoring/index.js +18 -0
- package/dist/lib/resources/aws/monitoring/monitoringRole.d.ts +28 -0
- package/dist/lib/resources/aws/monitoring/monitoringRole.js +69 -0
- package/dist/lib/resources/aws/networking/index.d.ts +0 -1
- package/dist/lib/resources/aws/networking/index.js +1 -2
- package/dist/lib/resources/aws/networking/ipam.d.ts +1 -1
- package/dist/lib/resources/aws/networking/ipam.js +1 -1
- package/dist/lib/resources/aws/networking/ipamPool.d.ts +1 -1
- package/dist/lib/resources/aws/networking/ipamPool.js +1 -2
- package/dist/lib/resources/aws/networking/vpc.d.ts +42 -23
- package/dist/lib/resources/aws/networking/vpc.js +185 -36
- package/dist/lib/resources/aws/secrets/alias.d.ts +1 -1
- package/dist/lib/resources/aws/secrets/alias.js +1 -1
- package/dist/lib/resources/aws/secrets/parameter.d.ts +1 -1
- package/dist/lib/resources/aws/secrets/parameter.js +1 -1
- package/dist/lib/resources/aws/secrets/secret.d.ts +8 -4
- package/dist/lib/resources/aws/secrets/secret.js +19 -2
- package/dist/lib/resources/aws/storage/ecr.d.ts +4 -4
- package/dist/lib/resources/aws/storage/ecr.js +1 -1
- package/dist/lib/resources/aws/storage/s3.d.ts +2 -2
- package/dist/lib/resources/aws/storage/s3.js +1 -1
- package/dist/lib/resources/aws/utilities/awsCustomResource.d.ts +1 -1
- package/dist/lib/resources/aws/utilities/awsCustomResource.js +1 -1
- package/dist/lib/resources/aws/utilities/cfnOutput.d.ts +1 -1
- package/dist/lib/resources/aws/utilities/cfnOutput.js +1 -1
- package/dist/lib/resources/aws/utilities/codeBuild.d.ts +1 -1
- package/dist/lib/resources/aws/utilities/codeBuild.js +1 -1
- package/dist/lib/resources/aws/utilities/customResource.d.ts +9 -7
- package/dist/lib/resources/aws/utilities/customResource.js +35 -11
- package/dist/lib/resources/aws/utilities/customResourceProvider.d.ts +2 -2
- package/dist/lib/resources/aws/utilities/customResourceProvider.js +1 -1
- package/dist/lib/resources/aws/utilities/resourceShare.d.ts +2 -2
- package/dist/lib/resources/aws/utilities/resourceShare.js +1 -1
- package/dist/lib/utils/getAsync.d.ts +1 -1
- package/dist/lib/utils/getAsync.js +1 -1
- package/dist/lib/utils/getCidr.d.ts +8 -0
- package/dist/lib/utils/getCidr.js +40 -0
- package/dist/lib/utils/getConfig.d.ts +2 -2
- package/dist/lib/utils/getConfig.js +3 -3
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +2 -1
- package/dist/lib/utils/resourceNaming.d.ts +41 -0
- package/dist/lib/utils/resourceNaming.js +77 -0
- package/dist/lib/utils/standardTagsAspect.d.ts +2 -2
- package/dist/lib/utils/standardTagsAspect.js +6 -5
- package/dist/lib/utils/tagResource.d.ts +1 -1
- package/dist/lib/utils/tagResource.js +1 -1
- package/package.json +3 -3
- package/dist/lib/__tests__/patterns/__snapshots__/compute.test.js.snap +0 -433
- package/dist/lib/__tests__/patterns/compute.test.d.ts +0 -1
- package/dist/lib/__tests__/patterns/compute.test.js +0 -137
- package/dist/lib/__tests__/simple.test.d.ts +0 -0
- package/dist/lib/__tests__/simple.test.js +0 -12
- package/dist/lib/resources/aws/organisations/account.d.ts +0 -37
- package/dist/lib/resources/aws/organisations/account.js +0 -220
- package/dist/lib/resources/aws/organisations/delegatedAdministrator.d.ts +0 -14
- package/dist/lib/resources/aws/organisations/delegatedAdministrator.js +0 -61
- package/dist/lib/resources/aws/organisations/index.d.ts +0 -8
- package/dist/lib/resources/aws/organisations/index.js +0 -22
- package/dist/lib/resources/aws/organisations/interfaces.d.ts +0 -105
- package/dist/lib/resources/aws/organisations/interfaces.js +0 -3
- package/dist/lib/resources/aws/organisations/organisation.d.ts +0 -47
- package/dist/lib/resources/aws/organisations/organisation.js +0 -263
- package/dist/lib/resources/aws/organisations/organisationalUnit.d.ts +0 -28
- package/dist/lib/resources/aws/organisations/organisationalUnit.js +0 -170
- package/dist/lib/resources/aws/organisations/policy.d.ts +0 -17
- package/dist/lib/resources/aws/organisations/policy.js +0 -93
- package/dist/lib/resources/aws/organisations/trustedServiceAccess.d.ts +0 -13
- package/dist/lib/resources/aws/organisations/trustedServiceAccess.js +0 -58
- package/dist/lib/resources/aws/organisations/types.d.ts +0 -165
- package/dist/lib/resources/aws/organisations/types.js +0 -36
- package/dist/lib/utils/directTagging.d.ts +0 -31
- package/dist/lib/utils/directTagging.js +0 -86
- package/dist/lib/utils/fjallConstruct.d.ts +0 -8
- package/dist/lib/utils/fjallConstruct.js +0 -18
- package/dist/lib/utils/fjallStackSynthesizer.d.ts +0 -9
- package/dist/lib/utils/fjallStackSynthesizer.js +0 -22
- package/dist/lib/utils/tagContext.d.ts +0 -28
- package/dist/lib/utils/tagContext.js +0 -53
- package/dist/lib/utils/tagSynthesizer.d.ts +0 -13
- package/dist/lib/utils/tagSynthesizer.js +0 -55
|
@@ -49,7 +49,7 @@ class ComputeFactory {
|
|
|
49
49
|
return (app, scope) => {
|
|
50
50
|
const computeProps = {
|
|
51
51
|
...{
|
|
52
|
-
vpc: app.
|
|
52
|
+
vpc: app.getVpc(),
|
|
53
53
|
ecrRepository: app.getDefaultContainerRegistry()
|
|
54
54
|
},
|
|
55
55
|
...props
|
|
@@ -92,8 +92,8 @@ class Compute extends constructs_1.Construct {
|
|
|
92
92
|
this.compute = new ec2_1.Ec2Instance(this.scope, `${this.id}Ec2`, ec2Props);
|
|
93
93
|
this.connections = this.compute.connections;
|
|
94
94
|
if (props.connections) {
|
|
95
|
-
for (
|
|
96
|
-
this.compute.connections.
|
|
95
|
+
for (const conn of props.connections) {
|
|
96
|
+
this.compute.connections.allowToDefaultPort(conn);
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
}
|
|
@@ -129,8 +129,8 @@ class Compute extends constructs_1.Construct {
|
|
|
129
129
|
this.compute = new ecs_1.default(this.scope, `${this.id}Fargate`, fargateProps);
|
|
130
130
|
}
|
|
131
131
|
if (props.connections) {
|
|
132
|
-
for (
|
|
133
|
-
this.compute.connections.
|
|
132
|
+
for (const conn of props.connections) {
|
|
133
|
+
this.compute.connections.allowToDefaultPort(conn);
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
this.connections = this.compute.connections;
|
|
@@ -158,7 +158,7 @@ class Compute extends constructs_1.Construct {
|
|
|
158
158
|
memorySize: props.memorySize,
|
|
159
159
|
lambdaDescription: props.lambdaDescription,
|
|
160
160
|
roleDescription: props.roleDescription,
|
|
161
|
-
inlinePolicy: props.inlinePolicy ||
|
|
161
|
+
inlinePolicy: props.inlinePolicy || [],
|
|
162
162
|
enableFunctionUrl: props.enableFunctionUrl,
|
|
163
163
|
functionUrlAuthType: props.functionUrlAuthType,
|
|
164
164
|
functionUrlCors: convertCorsOptions(props.functionUrlCors),
|
|
@@ -171,4 +171,4 @@ class Compute extends constructs_1.Construct {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
exports.Compute = Compute;
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpREFBaUQ7QUFDakQsaURBUTZCO0FBQzdCLHVEQU1nQztBQUloQywyQ0FBdUM7QUFJdkMseURBTXlDO0FBQ3pDLHlFQUFrRTtBQUNsRSxpRUFBMEQ7QUFDMUQseURBQThEO0FBQzlELCtEQUFvRTtBQTZGcEUsb0VBQW9FO0FBQ3BFLFNBQVMsa0JBQWtCLENBQUMsT0FBMkI7SUFDckQsTUFBTSxTQUFTLEdBQXlDO1FBQ3RELEdBQUcsRUFBRSx1QkFBVSxDQUFDLEdBQUc7UUFDbkIsSUFBSSxFQUFFLHVCQUFVLENBQUMsSUFBSTtRQUNyQixHQUFHLEVBQUUsdUJBQVUsQ0FBQyxHQUFHO1FBQ25CLE1BQU0sRUFBRSx1QkFBVSxDQUFDLE1BQU07UUFDekIsSUFBSSxFQUFFLHVCQUFVLENBQUMsSUFBSTtRQUNyQixPQUFPLEVBQUUsdUJBQVUsQ0FBQyxPQUFPO1FBQzNCLEtBQUssRUFBRSx1QkFBVSxDQUFDLEtBQUs7S0FDeEIsQ0FBQztJQUVGLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQzVCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FDYix3QkFBd0IsTUFBTSx3QkFBd0IsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDMUYsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxzREFBc0Q7QUFDdEQsU0FBUyxrQkFBa0IsQ0FDekIsY0FBc0M7SUFFdEMsSUFB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QUN0QixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FDYixxRUFBcUUsQ0FDdEUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUc7WUFDbEIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO1lBQ3pDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLG9CQUFPLENBQUMsV0FBVztZQUM3QyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUU7WUFDdEMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUMxQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CO1lBQzlDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQzFELFdBQVcsRUFBRSxLQUFLLENBQUMsb0JBQW9CO1NBQ3hDLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksdUJBQWMsQ0FDL0IsSUFBSSxDQUFDLEtBQUssRUFDVixHQUFHLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFDbEIsV0FBVyxDQUNaLENBQUM7UUFFRixnRUFBZ0U7UUFDaEUsOERBQThEO1FBQzlELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxxQkFBVyxFQUFFLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBeEpELDBCQXdKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcG9zaXRvcnlJbWFnZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIjtcbmltcG9ydCB7XG4gIENvbm5lY3Rpb25zLFxuICBJQ29ubmVjdGFibGUsXG4gIElWcGMsXG4gIFBvcnQsXG4gIFN1Ym5ldFR5cGUsXG4gIFVzZXJEYXRhLFxuICBJTWFjaGluZUltYWdlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBSdW50aW1lLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICBIdHRwTWV0aG9kLFxuICBGdW5jdGlvblVybENvcnNPcHRpb25zXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUG9saWN5RG9jdW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcblxuaW1wb3J0IEZhcmdhdGVDbHVzdGVyLCB7XG4gIENvbnRhaW5lclNlY3JldCxcbiAgRmFyZ2F0ZUNsdXN0ZXJQcm9wcyxcbiAgUHJvdG9jb2wsXG4gIFNjYWxpbmdUeXBlLFxuICBEb21haW5Db25maWdcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3NcIjtcbmltcG9ydCBFY3NGcmVlVGllciBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc0ZyZWVUaWVyXCI7XG5pbXBvcnQgRWNzU3BvdCBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1Nwb3RcIjtcbmltcG9ydCB7IEVjMkluc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lYzJcIjtcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGFcIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBTZWNyZXRJbXBvcnQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5cbi8vIFVzZXItZnJpZW5kbHkgSFRUUCBtZXRob2QgdHlwZVxuZXhwb3J0IHR5cGUgSHR0cE1ldGhvZFN0cmluZyA9XG4gIHwgXCJHRVRcIlxuICB8IFwiUE9TVFwiXG4gIHwgXCJQVVRcIlxuICB8IFwiREVMRVRFXCJcbiAgfCBcIkhFQURcIlxuICB8IFwiT1BUSU9OU1wiXG4gIHwgXCJQQVRDSFwiO1xuXG4vLyBVc2VyLWZyaWVuZGx5IENPUlMgb3B0aW9ucyB0aGF0IGFjY2VwdCBzdHJpbmcgbWV0aG9kc1xuZXhwb3J0IGludGVyZmFjZSBTaW1wbGlmaWVkQ29yc09wdGlvbnMge1xuICBhbGxvd2VkT3JpZ2lucz86IHN0cmluZ1tdO1xuICBhbGxvd2VkTWV0aG9kcz86IEh0dHBNZXRob2RTdHJpbmdbXTtcbiAgYWxsb3dlZEhlYWRlcnM/OiBzdHJpbmdbXTtcbiAgbWF4QWdlPzogRHVyYXRpb247XG4gIGFsbG93Q3JlZGVudGlhbHM/OiBib29sZWFuO1xuICBleHBvc2VIZWFkZXJzPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJQ29tcHV0ZVByb3BzIHtcbiAgdnBjPzogSVZwYztcbiAgZWNyUmVwb3NpdG9yeT86IFJlcG9zaXRvcnkgfCBSZXBvc2l0b3J5SW1hZ2U7XG5cbiAgLy8gQ29tcHV0ZSB0eXBlIHNlbGVjdGlvblxuICB0eXBlPzogXCJlY3NcIiB8IFwiZWMyXCIgfCBcImxhbWJkYVwiO1xuXG4gIC8vIEVDUyBzdWJ0eXBlIHNlbGVjdGlvbiAob25seSBhcHBsaWNhYmxlIHdoZW4gdHlwZSBpcyBcImVjc1wiKVxuICBlY3NUeXBlPzogXCJmYXJnYXRlXCIgfCBcImZyZWV0aWVyXCIgfCBcInNwb3RcIjtcblxuICAvLyBFQ1Mtc3BlY2lmaWMgcHJvcGVydGllc1xuICBwYXJlbnREb21haW4/OiBzdHJpbmc7XG4gIGRvbWFpbkNvbmZpZz86IERvbWFpbkNvbmZpZztcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyBjdXN0b20gaW1hZ2UuXG4gICAqIE5vdGU6IFRoaXMgaXMgbWV0YWRhdGEgZm9yIHRoZSBDTEkgYnVpbGQgcHJvY2VzcyxcbiAgICogbm90IHVzZWQgZHVyaW5nIENESyBzeW50aGVzaXNcbiAgICovXG4gIGRvY2tlcmZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb3J0IHRoZSBjb250YWluZXIgbGlzdGVucyBvbiAoZGVmYXVsdDogODApXG4gICAqL1xuICBjb250YWluZXJQb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubW5ldCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUgY29udGFpbmVyXG4gICAqL1xuICBjb250YWluZXJFbnZpcm9ubWVudD86IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNhZmVseSBpbXBvcnQgc2VjcmV0cyBmcm9tIGFub3RoZXIgcmVzb3VyY2UsXG4gICAqICBvYmplY3Qga2V5IGlzIHVzZWQgYXMgbmFtZSB3aGVuIHBhc3NpbmcgdG8gY29udGFpbmVyXG4gICAqL1xuICBjb250YWluZXJTZWNyZXRzSW1wb3J0Pzoge1xuICAgIFtrZXk6IHN0cmluZ106IFNlY3JldEltcG9ydDtcbiAgfTtcblxuICAvLyBFQzItc3BlY2lmaWMgcHJvcGVydGllc1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG4gIGVuYWJsZVNTSD86IGJvb2xlYW47XG4gIHVzZXJEYXRhPzogVXNlckRhdGE7XG4gIG1hY2hpbmVJbWFnZT86IElNYWNoaW5lSW1hZ2U7XG4gIG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcblxuICAvLyBMYW1iZGEtc3BlY2lmaWMgcHJvcGVydGllc1xuICBydW50aW1lPzogUnVudGltZTtcbiAgaGFuZGxlcj86IHN0cmluZztcbiAgY29kZT86IENvZGU7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIGxhbWJkYURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlubGluZVBvbGljeT86IHtcbiAgICBbbmFtZTogc3RyaW5nXTogUG9saWN5RG9jdW1lbnQ7XG4gIH07XG5cbiAgLy8gTGFtYmRhIFVSTCBwcm9wZXJ0aWVzXG4gIGVuYWJsZUZ1bmN0aW9uVXJsPzogYm9vbGVhbjtcbiAgZnVuY3Rpb25VcmxBdXRoVHlwZT86IEZ1bmN0aW9uVXJsQXV0aFR5cGU7XG4gIGZ1bmN0aW9uVXJsQ29ycz86IFNpbXBsaWZpZWRDb3JzT3B0aW9ucztcblxuICBjb25uZWN0aW9ucz86IElDb25uZWN0YWJsZVtdO1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBzdHJpbmcgSFRUUCBtZXRob2RzIHRvIEh0dHBNZXRob2QgZW51bVxuZnVuY3Rpb24gY29udmVydEh0dHBNZXRob2RzKG1ldGhvZHM6IEh0dHBNZXRob2RTdHJpbmdbXSk6IEh0dHBNZXRob2RbXSB7XG4gIGNvbnN0IG1ldGhvZE1hcDogUmVjb3JkPEh0dHBNZXRob2RTdHJpbmcsIEh0dHBNZXRob2Q+ID0ge1xuICAgIEdFVDogSHR0cE1ldGhvZC5HRVQsXG4gICAgUE9TVDogSHR0cE1ldGhvZC5QT1NULFxuICAgIFBVVDogSHR0cE1ldGhvZC5QVVQsXG4gICAgREVMRVRFOiBIdHRwTWV0aG9kLkRFTEVURSxcbiAgICBIRUFEOiBIdHRwTWV0aG9kLkhFQUQsXG4gICAgT1BUSU9OUzogSHR0cE1ldGhvZC5PUFRJT05TLFxuICAgIFBBVENIOiBIdHRwTWV0aG9kLlBBVENIXG4gIH07XG5cbiAgcmV0dXJuIG1ldGhvZHMubWFwKChtZXRob2QpID0+IHtcbiAgICBjb25zdCBodHRwTWV0aG9kID0gbWV0aG9kTWFwW21ldGhvZF07XG4gICAgaWYgKCFodHRwTWV0aG9kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIEhUVFAgbWV0aG9kOiAke21ldGhvZH0uIFZhbGlkIG1ldGhvZHMgYXJlOiAke09iamVjdC5rZXlzKG1ldGhvZE1hcCkuam9pbihcIiwgXCIpfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBodHRwTWV0aG9kO1xuICB9KTtcbn1cblxuLy8gQ29udmVydCBzaW1wbGlmaWVkIENPUlMgb3B0aW9ucyB0byBDREsgQ09SUyBvcHRpb25zXG5mdW5jdGlvbiBjb252ZXJ0Q29yc09wdGlvbnMoXG4gIHNpbXBsaWZpZWRDb3JzPzogU2ltcGxpZmllZENvcnNPcHRpb25zXG4pOiBGdW5jdGlvblVybENvcnNPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFzaW1wbGlmaWVkQ29ycykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIGFsbG93ZWRPcmlnaW5zOiBzaW1wbGlmaWVkQ29ycy5hbGxvd2VkT3JpZ2lucyxcbiAgICBhbGxvd2VkTWV0aG9kczogc2ltcGxpZmllZENvcnMuYWxsb3dlZE1ldGhvZHNcbiAgICAgID8gY29udmVydEh0dHBNZXRob2RzKHNpbXBsaWZpZWRDb3JzLmFsbG93ZWRNZXRob2RzKVxuICAgICAgOiB1bmRlZmluZWQsXG4gICAgYWxsb3dlZEhlYWRlcnM6IHNpbXBsaWZpZWRDb3JzLmFsbG93ZWRIZWFkZXJzLFxuICAgIG1heEFnZTogc2ltcGxpZmllZENvcnMubWF4QWdlLFxuICAgIGFsbG93Q3JlZGVudGlhbHM6IHNpbXBsaWZpZWRDb3JzLmFsbG93Q3JlZGVudGlhbHMsXG4gICAgZXhwb3NlZEhlYWRlcnM6IHNpbXBsaWZpZWRDb3JzLmV4cG9zZUhlYWRlcnNcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXB1dGVGYWN0b3J5IHtcbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgY29uc3QgY29tcHV0ZVByb3BzID0ge1xuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjOiBhcHAuZ2V0RGVmYXVsdFZwYygpLFxuICAgICAgICAgIGVjclJlcG9zaXRvcnk6IGFwcC5nZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKVxuICAgICAgICB9LFxuICAgICAgICAuLi5wcm9wc1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wdXRlKHNjb3BlLCBpZCwgY29tcHV0ZVByb3BzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wdXRlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyBzY29wZTogQ29uc3RydWN0O1xuICBwdWJsaWMgdnBjOiBJVnBjO1xuXG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSBjb21wdXRlOlxuICAgIHwgRmFyZ2F0ZUNsdXN0ZXJcbiAgICB8IEVjc0ZyZWVUaWVyXG4gICAgfCBFY3NTcG90XG4gICAgfCBFYzJJbnN0YW5jZVxuICAgIHwgTGFtYmRhRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElDb21wdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG5cbiAgICB0aGlzLmFkZENvbXB1dGUocHJvcHMpO1xuICB9XG5cbiAgYWRkQ29tcHV0ZShwcm9wczogSUNvbXB1dGVQcm9wcykge1xuICAgIGNvbnN0IGNvbXB1dGVUeXBlID0gcHJvcHMudHlwZSB8fCBcImVjc1wiO1xuXG4gICAgaWYgKGNvbXB1dGVUeXBlID09PSBcImVjMlwiKSB7XG4gICAgICB0aGlzLmFkZEVjMkNvbXB1dGUocHJvcHMpO1xuICAgIH0gZWxzZSBpZiAoY29tcHV0ZVR5cGUgPT09IFwibGFtYmRhXCIpIHtcbiAgICAgIHRoaXMuYWRkTGFtYmRhQ29tcHV0ZShwcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRWNzQ29tcHV0ZShwcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRFYzJDb21wdXRlKHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgY29uc3QgZWMyUHJvcHMgPSB7XG4gICAgICBzZXJ2aWNlTmFtZTogYCR7dGhpcy5pZH1TZXJ2aWNlYCxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlIHx8IFwidDMubWljcm9cIixcbiAgICAgIGVuYWJsZVNTSDogcHJvcHMuZW5hYmxlU1NIIHx8IGZhbHNlLFxuICAgICAgdXNlckRhdGE6IHByb3BzLnVzZXJEYXRhLFxuICAgICAgbWFjaGluZUltYWdlOiBwcm9wcy5tYWNoaW5lSW1hZ2UsXG4gICAgICBtaW5DYXBhY2l0eTogcHJvcHMubWluQ2FwYWNpdHkgfHwgMSxcbiAgICAgIG1heENhcGFjaXR5OiBwcm9wcy5tYXhDYXBhY2l0eSB8fCAxLFxuICAgICAgdnBjOiBwcm9wcy52cGNcbiAgICB9O1xuXG4gICAgdGhpcy5jb21wdXRlID0gbmV3IEVjMkluc3RhbmNlKHRoaXMuc2NvcGUsIGAke3RoaXMuaWR9RWMyYCwgZWMyUHJvcHMpO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmNvbXB1dGUuY29ubmVjdGlvbnM7XG5cbiAgICBpZiAocHJvcHMuY29ubmVjdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGNvbm4gb2YgcHJvcHMuY29ubmVjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jb21wdXRlLmNvbm5lY3Rpb25zLmFsbG93VG8oY29ubiwgUG9ydC5hbGxUY3AoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRFY3NDb21wdXRlKHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgY29uc3QgZWNzVHlwZSA9IHByb3BzLmVjc1R5cGUgfHwgXCJmYXJnYXRlXCI7XG5cbiAgICAvLyBDb21tb24gRUNTIHByb3BzXG4gICAgY29uc3QgYmFzZUVjc1Byb3BzID0ge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBjb250YWluZXJQb3J0OiBwcm9wcy5jb250YWluZXJQb3J0IHx8IDgwLFxuICAgICAgc2VydmljZU5hbWU6IGAke3RoaXMuaWR9U2VydmljZWAsXG4gICAgICBjbHVzdGVyTmFtZTogYCR7dGhpcy5pZH1DbHVzdGVyYCxcbiAgICAgIGVjclJlcG9zaXRvcnk6IHByb3BzLmVjclJlcG9zaXRvcnkgfHwgXCJhbWF6b24vYW1hem9uLWVjcy1zYW1wbGVcIixcbiAgICAgIGNvbnRhaW5lckVudmlyb25tZW50OiBwcm9wcy5jb250YWluZXJFbnZpcm9ubWVudCB8fCB7fSxcbiAgICAgIGNvbnRhaW5lclNlY3JldHNJbXBvcnQ6IHByb3BzLmNvbnRhaW5lclNlY3JldHNJbXBvcnQgfHwge30sXG4gICAgICB2cGM6IHByb3BzLnZwY1xuICAgIH07XG5cbiAgICBpZiAoZWNzVHlwZSA9PT0gXCJmcmVldGllclwiKSB7XG4gICAgICAvLyBVc2UgRUMyLWJhc2VkIEVDUyBmb3IgZnJlZSB0aWVyXG4gICAgICB0aGlzLmNvbXB1dGUgPSBuZXcgRWNzRnJlZVRpZXIoXG4gICAgICAgIHRoaXMuc2NvcGUsXG4gICAgICAgIGAke3RoaXMuaWR9RWNzRnJlZVRpZXJgLFxuICAgICAgICBiYXNlRWNzUHJvcHNcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlY3NUeXBlID09PSBcInNwb3RcIikge1xuICAgICAgLy8gVXNlIEVDMiBTcG90IGluc3RhbmNlcyBmb3IgY29zdCBvcHRpbWl6YXRpb25cbiAgICAgIHRoaXMuY29tcHV0ZSA9IG5ldyBFY3NTcG90KHRoaXMuc2NvcGUsIGAke3RoaXMuaWR9RWNzU3BvdGAsIGJhc2VFY3NQcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQgdG8gRmFyZ2F0ZVxuICAgICAgY29uc3QgZmFyZ2F0ZVByb3BzID0ge1xuICAgICAgICAuLi5iYXNlRWNzUHJvcHMsXG4gICAgICAgIHNjYWxpbmdUeXBlOiBTY2FsaW5nVHlwZS5DUFUsXG4gICAgICAgIHByb3RvY29sOiBwcm9wcy5kb21haW5Db25maWcgPyBQcm90b2NvbC5IVFRQUyA6IFByb3RvY29sLkhUVFAsXG4gICAgICAgIGRvbWFpbkNvbmZpZzogcHJvcHMuZG9tYWluQ29uZmlnXG4gICAgICB9IGFzIEZhcmdhdGVDbHVzdGVyUHJvcHM7XG5cbiAgICAgIHRoaXMuY29tcHV0ZSA9IG5ldyBGYXJnYXRlQ2x1c3RlcihcbiAgICAgICAgdGhpcy5zY29wZSxcbiAgICAgICAgYCR7dGhpcy5pZH1GYXJnYXRlYCxcbiAgICAgICAgZmFyZ2F0ZVByb3BzXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5jb25uZWN0aW9ucykge1xuICAgICAgZm9yICh2YXIgY29ubiBvZiBwcm9wcy5jb25uZWN0aW9ucykge1xuICAgICAgICB0aGlzLmNvbXB1dGUuY29ubmVjdGlvbnMuYWxsb3dUbyhjb25uLCBQb3J0LmFsbFRjcCgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5jb21wdXRlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRMYW1iZGFDb21wdXRlKHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgbGV0IGNvZGUgPSBwcm9wcy5jb2RlO1xuXG4gICAgaWYgKCFjb2RlKSB7XG4gICAgICBpZiAoIXByb3BzLmVjclJlcG9zaXRvcnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiRWl0aGVyIGNvZGUgb3IgZWNyUmVwb3NpdG9yeSBtdXN0IGJlIHByb3ZpZGVkIGZvciBMYW1iZGEgY29tcHV0ZSB0eXBlXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmVjclJlcG9zaXRvcnkgaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSB7XG4gICAgICAgIGNvZGUgPSBDb2RlLmZyb21FY3JJbWFnZShwcm9wcy5lY3JSZXBvc2l0b3J5LCB7XG4gICAgICAgICAgdGFnT3JEaWdlc3Q6IFwibGF0ZXN0XCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJlY3JSZXBvc2l0b3J5IG11c3QgYmUgYSBSZXBvc2l0b3J5IGluc3RhbmNlIGZvciBMYW1iZGEgY29tcHV0ZSB0eXBlXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsYW1iZGFQcm9wcyA9IHtcbiAgICAgIGNvZGU6IGNvZGUsXG4gICAgICBoYW5kbGVyOiBwcm9wcy5oYW5kbGVyIHx8IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSB8fCBSdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dCxcbiAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemUsXG4gICAgICBsYW1iZGFEZXNjcmlwdGlvbjogcHJvcHMubGFtYmRhRGVzY3JpcHRpb24sXG4gICAgICByb2xlRGVzY3JpcHRpb246IHByb3BzLnJvbGVEZXNjcmlwdGlvbixcbiAgICAgIGlubGluZVBvbGljeTogcHJvcHMuaW5saW5lUG9saWN5IHx8IHt9LFxuICAgICAgZW5hYmxlRnVuY3Rpb25Vcmw6IHByb3BzLmVuYWJsZUZ1bmN0aW9uVXJsLFxuICAgICAgZnVuY3Rpb25VcmxBdXRoVHlwZTogcHJvcHMuZnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgICAgIGZ1bmN0aW9uVXJsQ29yczogY29udmVydENvcnNPcHRpb25zKHByb3BzLmZ1bmN0aW9uVXJsQ29ycyksXG4gICAgICBlbnZpcm9ubWVudDogcHJvcHMuY29udGFpbmVyRW52aXJvbm1lbnRcbiAgICB9O1xuXG4gICAgdGhpcy5jb21wdXRlID0gbmV3IExhbWJkYUZ1bmN0aW9uKFxuICAgICAgdGhpcy5zY29wZSxcbiAgICAgIGAke3RoaXMuaWR9TGFtYmRhYCxcbiAgICAgIGxhbWJkYVByb3BzXG4gICAgKTtcblxuICAgIC8vIExhbWJkYSBmdW5jdGlvbnMgZG9uJ3QgdXNlIHNlY3VyaXR5IGdyb3VwcyB1bmxlc3MgVlBDLWVuYWJsZWRcbiAgICAvLyBDcmVhdGUgZW1wdHkgY29ubmVjdGlvbnMgb2JqZWN0IGZvciBpbnRlcmZhY2UgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoKTtcbiAgfVxufVxuIl19
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpREFBaUQ7QUFDakQsaURBTTZCO0FBQzdCLHVEQU1nQztBQUloQywyQ0FBdUM7QUFJdkMseURBS3lDO0FBQ3pDLHlFQUFrRTtBQUNsRSxpRUFBMEQ7QUFDMUQseURBQThEO0FBQzlELCtEQUFvRTtBQW9HcEUsb0VBQW9FO0FBQ3BFLFNBQVMsa0JBQWtCLENBQUMsT0FBMkI7SUFDckQsTUFBTSxTQUFTLEdBQXlDO1FBQ3RELEdBQUcsRUFBRSx1QkFBVSxDQUFDLEdBQUc7UUFDbkIsSUFBSSxFQUFFLHVCQUFVLENBQUMsSUFBSTtRQUNyQixHQUFHLEVBQUUsdUJBQVUsQ0FBQyxHQUFHO1FBQ25CLE1BQU0sRUFBRSx1QkFBVSxDQUFDLE1BQU07UUFDekIsSUFBSSxFQUFFLHVCQUFVLENBQUMsSUFBSTtRQUNyQixPQUFPLEVBQUUsdUJBQVUsQ0FBQyxPQUFPO1FBQzNCLEtBQUssRUFBRSx1QkFBVSxDQUFDLEtBQUs7S0FDeEIsQ0FBQztJQUVGLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQzVCLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FDYix3QkFBd0IsTUFBTSx3QkFBd0IsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDMUYsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxzREFBc0Q7QUFDdEQsU0FBUyxrQkFBa0IsQ0FDekIsY0FBc0M7SUFFdEMsSUFB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LElBQUksS0FBSyxDQUNiLHFFQUFxRSxDQUN0RSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRztZQUNsQixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWU7WUFDekMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksb0JBQU8sQ0FBQyxXQUFXO1lBQzdDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUMxQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7WUFDdEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRTtZQUN0QyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1lBQzFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUI7WUFDOUMsZUFBZSxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDMUQsV0FBVyxFQUFFLEtBQUssQ0FBQyxvQkFBb0I7U0FDeEMsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSx1QkFBYyxDQUMvQixJQUFJLENBQUMsS0FBSyxFQUNWLEdBQUcsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUNsQixXQUFXLENBQ1osQ0FBQztRQUVGLGdFQUFnRTtRQUNoRSw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHFCQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUF4SkQsMEJBd0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBSZXBvc2l0b3J5SW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCI7XG5pbXBvcnQge1xuICBDb25uZWN0aW9ucyxcbiAgdHlwZSBJQ29ubmVjdGFibGUsXG4gIHR5cGUgSVZwYyxcbiAgdHlwZSBVc2VyRGF0YSxcbiAgdHlwZSBJTWFjaGluZUltYWdlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBSdW50aW1lLFxuICB0eXBlIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIEh0dHBNZXRob2QsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgdHlwZSBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgdHlwZSBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuXG5pbXBvcnQgRmFyZ2F0ZUNsdXN0ZXIsIHtcbiAgdHlwZSBGYXJnYXRlQ2x1c3RlclByb3BzLFxuICBQcm90b2NvbCxcbiAgU2NhbGluZ1R5cGUsXG4gIHR5cGUgRG9tYWluQ29uZmlnXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWNzXCI7XG5pbXBvcnQgRWNzRnJlZVRpZXIgZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3NGcmVlVGllclwiO1xuaW1wb3J0IEVjc1Nwb3QgZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3NTcG90XCI7XG5pbXBvcnQgeyBFYzJJbnN0YW5jZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWMyXCI7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvbGFtYmRhXCI7XG5pbXBvcnQgeyB0eXBlIFNlY3JldEltcG9ydCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcblxuLy8gVXNlci1mcmllbmRseSBIVFRQIG1ldGhvZCB0eXBlXG5leHBvcnQgdHlwZSBIdHRwTWV0aG9kU3RyaW5nID1cbiAgfCBcIkdFVFwiXG4gIHwgXCJQT1NUXCJcbiAgfCBcIlBVVFwiXG4gIHwgXCJERUxFVEVcIlxuICB8IFwiSEVBRFwiXG4gIHwgXCJPUFRJT05TXCJcbiAgfCBcIlBBVENIXCI7XG5cbi8vIFVzZXItZnJpZW5kbHkgQ09SUyBvcHRpb25zIHRoYXQgYWNjZXB0IHN0cmluZyBtZXRob2RzXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsaWZpZWRDb3JzT3B0aW9ucyB7XG4gIGFsbG93ZWRPcmlnaW5zPzogc3RyaW5nW107XG4gIGFsbG93ZWRNZXRob2RzPzogSHR0cE1ldGhvZFN0cmluZ1tdO1xuICBhbGxvd2VkSGVhZGVycz86IHN0cmluZ1tdO1xuICBtYXhBZ2U/OiBEdXJhdGlvbjtcbiAgYWxsb3dDcmVkZW50aWFscz86IGJvb2xlYW47XG4gIGV4cG9zZUhlYWRlcnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElDb21wdXRlUHJvcHMge1xuICB2cGM/OiBJVnBjO1xuICBlY3JSZXBvc2l0b3J5PzogUmVwb3NpdG9yeSB8IFJlcG9zaXRvcnlJbWFnZTtcblxuICAvLyBDb21wdXRlIHR5cGUgc2VsZWN0aW9uXG4gIHR5cGU/OiBcImVjc1wiIHwgXCJlYzJcIiB8IFwibGFtYmRhXCI7XG5cbiAgLy8gRUNTIHN1YnR5cGUgc2VsZWN0aW9uIChvbmx5IGFwcGxpY2FibGUgd2hlbiB0eXBlIGlzIFwiZWNzXCIpXG4gIGVjc1R5cGU/OiBcImZhcmdhdGVcIiB8IFwiZnJlZXRpZXJcIiB8IFwic3BvdFwiO1xuXG4gIC8vIEVDUy1zcGVjaWZpYyBwcm9wZXJ0aWVzXG4gIHBhcmVudERvbWFpbj86IHN0cmluZztcbiAgZG9tYWluQ29uZmlnPzogRG9tYWluQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIERvY2tlcmZpbGUgZm9yIGJ1aWxkaW5nIGN1c3RvbSBpbWFnZS5cbiAgICogTm90ZTogVGhpcyBpcyBtZXRhZGF0YSBmb3IgdGhlIENMSSBidWlsZCBwcm9jZXNzLFxuICAgKiBub3QgdXNlZCBkdXJpbmcgQ0RLIHN5bnRoZXNpc1xuICAgKi9cbiAgZG9ja2VyZmlsZVBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBvcnQgdGhlIGNvbnRhaW5lciBsaXN0ZW5zIG9uIChkZWZhdWx0OiA4MClcbiAgICovXG4gIGNvbnRhaW5lclBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENQVSB1bml0cyBmb3IgRmFyZ2F0ZSB0YXNrcyAoMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDQwOTYpXG4gICAqL1xuICBjcHU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1lbW9yeSBpbiBNaUIgZm9yIEZhcmdhdGUgdGFza3MgKDUxMi0zMDcyMClcbiAgICovXG4gIG1lbW9yeUxpbWl0TWlCPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubW5ldCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUgY29udGFpbmVyXG4gICAqL1xuICBjb250YWluZXJFbnZpcm9ubWVudD86IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNhZmVseSBpbXBvcnQgc2VjcmV0cyBmcm9tIGFub3RoZXIgcmVzb3VyY2UsXG4gICAqICBvYmplY3Qga2V5IGlzIHVzZWQgYXMgbmFtZSB3aGVuIHBhc3NpbmcgdG8gY29udGFpbmVyXG4gICAqL1xuICBjb250YWluZXJTZWNyZXRzSW1wb3J0Pzoge1xuICAgIFtrZXk6IHN0cmluZ106IFNlY3JldEltcG9ydDtcbiAgfTtcblxuICAvLyBFQzItc3BlY2lmaWMgcHJvcGVydGllc1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG4gIGVuYWJsZVNTSD86IGJvb2xlYW47XG4gIHVzZXJEYXRhPzogVXNlckRhdGE7XG4gIG1hY2hpbmVJbWFnZT86IElNYWNoaW5lSW1hZ2U7XG4gIG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcblxuICAvLyBMYW1iZGEtc3BlY2lmaWMgcHJvcGVydGllc1xuICBydW50aW1lPzogUnVudGltZTtcbiAgaGFuZGxlcj86IHN0cmluZztcbiAgY29kZT86IENvZGU7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIGxhbWJkYURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlubGluZVBvbGljeT86IFBvbGljeVN0YXRlbWVudFtdO1xuXG4gIC8vIExhbWJkYSBVUkwgcHJvcGVydGllc1xuICBlbmFibGVGdW5jdGlvblVybD86IGJvb2xlYW47XG4gIGZ1bmN0aW9uVXJsQXV0aFR5cGU/OiBGdW5jdGlvblVybEF1dGhUeXBlO1xuICBmdW5jdGlvblVybENvcnM/OiBTaW1wbGlmaWVkQ29yc09wdGlvbnM7XG5cbiAgY29ubmVjdGlvbnM/OiBJQ29ubmVjdGFibGVbXTtcbn1cblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgc3RyaW5nIEhUVFAgbWV0aG9kcyB0byBIdHRwTWV0aG9kIGVudW1cbmZ1bmN0aW9uIGNvbnZlcnRIdHRwTWV0aG9kcyhtZXRob2RzOiBIdHRwTWV0aG9kU3RyaW5nW10pOiBIdHRwTWV0aG9kW10ge1xuICBjb25zdCBtZXRob2RNYXA6IFJlY29yZDxIdHRwTWV0aG9kU3RyaW5nLCBIdHRwTWV0aG9kPiA9IHtcbiAgICBHRVQ6IEh0dHBNZXRob2QuR0VULFxuICAgIFBPU1Q6IEh0dHBNZXRob2QuUE9TVCxcbiAgICBQVVQ6IEh0dHBNZXRob2QuUFVULFxuICAgIERFTEVURTogSHR0cE1ldGhvZC5ERUxFVEUsXG4gICAgSEVBRDogSHR0cE1ldGhvZC5IRUFELFxuICAgIE9QVElPTlM6IEh0dHBNZXRob2QuT1BUSU9OUyxcbiAgICBQQVRDSDogSHR0cE1ldGhvZC5QQVRDSFxuICB9O1xuXG4gIHJldHVybiBtZXRob2RzLm1hcCgobWV0aG9kKSA9PiB7XG4gICAgY29uc3QgaHR0cE1ldGhvZCA9IG1ldGhvZE1hcFttZXRob2RdO1xuICAgIGlmICghaHR0cE1ldGhvZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBIVFRQIG1ldGhvZDogJHttZXRob2R9LiBWYWxpZCBtZXRob2RzIGFyZTogJHtPYmplY3Qua2V5cyhtZXRob2RNYXApLmpvaW4oXCIsIFwiKX1gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cE1ldGhvZDtcbiAgfSk7XG59XG5cbi8vIENvbnZlcnQgc2ltcGxpZmllZCBDT1JTIG9wdGlvbnMgdG8gQ0RLIENPUlMgb3B0aW9uc1xuZnVuY3Rpb24gY29udmVydENvcnNPcHRpb25zKFxuICBzaW1wbGlmaWVkQ29ycz86IFNpbXBsaWZpZWRDb3JzT3B0aW9uc1xuKTogRnVuY3Rpb25VcmxDb3JzT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gIGlmICghc2ltcGxpZmllZENvcnMpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGxvd2VkT3JpZ2luczogc2ltcGxpZmllZENvcnMuYWxsb3dlZE9yaWdpbnMsXG4gICAgYWxsb3dlZE1ldGhvZHM6IHNpbXBsaWZpZWRDb3JzLmFsbG93ZWRNZXRob2RzXG4gICAgICA/IGNvbnZlcnRIdHRwTWV0aG9kcyhzaW1wbGlmaWVkQ29ycy5hbGxvd2VkTWV0aG9kcylcbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIGFsbG93ZWRIZWFkZXJzOiBzaW1wbGlmaWVkQ29ycy5hbGxvd2VkSGVhZGVycyxcbiAgICBtYXhBZ2U6IHNpbXBsaWZpZWRDb3JzLm1heEFnZSxcbiAgICBhbGxvd0NyZWRlbnRpYWxzOiBzaW1wbGlmaWVkQ29ycy5hbGxvd0NyZWRlbnRpYWxzLFxuICAgIGV4cG9zZWRIZWFkZXJzOiBzaW1wbGlmaWVkQ29ycy5leHBvc2VIZWFkZXJzXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wdXRlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogSUNvbXB1dGVQcm9wcykge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IGNvbXB1dGVQcm9wcyA9IHtcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwYzogYXBwLmdldFZwYygpLFxuICAgICAgICAgIGVjclJlcG9zaXRvcnk6IGFwcC5nZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKVxuICAgICAgICB9LFxuICAgICAgICAuLi5wcm9wc1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wdXRlKHNjb3BlLCBpZCwgY29tcHV0ZVByb3BzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wdXRlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyBzY29wZTogQ29uc3RydWN0O1xuICBwdWJsaWMgdnBjOiBJVnBjO1xuXG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSBjb21wdXRlOlxuICAgIHwgRmFyZ2F0ZUNsdXN0ZXJcbiAgICB8IEVjc0ZyZWVUaWVyXG4gICAgfCBFY3NTcG90XG4gICAgfCBFYzJJbnN0YW5jZVxuICAgIHwgTGFtYmRhRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElDb21wdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG5cbiAgICB0aGlzLmFkZENvbXB1dGUocHJvcHMpO1xuICB9XG5cbiAgYWRkQ29tcHV0ZShwcm9wczogSUNvbXB1dGVQcm9wcykge1xuICAgIGNvbnN0IGNvbXB1dGVUeXBlID0gcHJvcHMudHlwZSB8fCBcImVjc1wiO1xuXG4gICAgaWYgKGNvbXB1dGVUeXBlID09PSBcImVjMlwiKSB7XG4gICAgICB0aGlzLmFkZEVjMkNvbXB1dGUocHJvcHMpO1xuICAgIH0gZWxzZSBpZiAoY29tcHV0ZVR5cGUgPT09IFwibGFtYmRhXCIpIHtcbiAgICAgIHRoaXMuYWRkTGFtYmRhQ29tcHV0ZShwcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRWNzQ29tcHV0ZShwcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRFYzJDb21wdXRlKHByb3BzOiBJQ29tcHV0ZVByb3BzKSB7XG4gICAgY29uc3QgZWMyUHJvcHMgPSB7XG4gICAgICBzZXJ2aWNlTmFtZTogYCR7dGhpcy5pZH1TZXJ2aWNlYCxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlIHx8IFwidDMubWljcm9cIixcbiAgICAgIGVuYWJsZVNTSDogcHJvcHMuZW5hYmxlU1NIIHx8IGZhbHNlLFxuICAgICAgdXNlckRhdGE6IHByb3BzLnVzZXJEYXRhLFxuICAgICAgbWFjaGluZUltYWdlOiBwcm9wcy5tYWNoaW5lSW1hZ2UsXG4gICAgICBtaW5DYXBhY2l0eTogcHJvcHMubWluQ2FwYWNpdHkgfHwgMSxcbiAgICAgIG1heENhcGFjaXR5OiBwcm9wcy5tYXhDYXBhY2l0eSB8fCAxLFxuICAgICAgdnBjOiBwcm9wcy52cGNcbiAgICB9O1xuXG4gICAgdGhpcy5jb21wdXRlID0gbmV3IEVjMkluc3RhbmNlKHRoaXMuc2NvcGUsIGAke3RoaXMuaWR9RWMyYCwgZWMyUHJvcHMpO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmNvbXB1dGUuY29ubmVjdGlvbnM7XG5cbiAgICBpZiAocHJvcHMuY29ubmVjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgY29ubiBvZiBwcm9wcy5jb25uZWN0aW9ucykge1xuICAgICAgICB0aGlzLmNvbXB1dGUuY29ubmVjdGlvbnMuYWxsb3dUb0RlZmF1bHRQb3J0KGNvbm4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRWNzQ29tcHV0ZShwcm9wczogSUNvbXB1dGVQcm9wcykge1xuICAgIGNvbnN0IGVjc1R5cGUgPSBwcm9wcy5lY3NUeXBlIHx8IFwiZmFyZ2F0ZVwiO1xuXG4gICAgLy8gQ29tbW9uIEVDUyBwcm9wc1xuICAgIGNvbnN0IGJhc2VFY3NQcm9wcyA9IHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgY29udGFpbmVyUG9ydDogcHJvcHMuY29udGFpbmVyUG9ydCB8fCA4MCxcbiAgICAgIHNlcnZpY2VOYW1lOiBgJHt0aGlzLmlkfVNlcnZpY2VgLFxuICAgICAgY2x1c3Rlck5hbWU6IGAke3RoaXMuaWR9Q2x1c3RlcmAsXG4gICAgICBlY3JSZXBvc2l0b3J5OiBwcm9wcy5lY3JSZXBvc2l0b3J5IHx8IFwiYW1hem9uL2FtYXpvbi1lY3Mtc2FtcGxlXCIsXG4gICAgICBjb250YWluZXJFbnZpcm9ubWVudDogcHJvcHMuY29udGFpbmVyRW52aXJvbm1lbnQgfHwge30sXG4gICAgICBjb250YWluZXJTZWNyZXRzSW1wb3J0OiBwcm9wcy5jb250YWluZXJTZWNyZXRzSW1wb3J0IHx8IHt9LFxuICAgICAgdnBjOiBwcm9wcy52cGNcbiAgICB9O1xuXG4gICAgaWYgKGVjc1R5cGUgPT09IFwiZnJlZXRpZXJcIikge1xuICAgICAgLy8gVXNlIEVDMi1iYXNlZCBFQ1MgZm9yIGZyZWUgdGllclxuICAgICAgdGhpcy5jb21wdXRlID0gbmV3IEVjc0ZyZWVUaWVyKFxuICAgICAgICB0aGlzLnNjb3BlLFxuICAgICAgICBgJHt0aGlzLmlkfUVjc0ZyZWVUaWVyYCxcbiAgICAgICAgYmFzZUVjc1Byb3BzXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZWNzVHlwZSA9PT0gXCJzcG90XCIpIHtcbiAgICAgIC8vIFVzZSBFQzIgU3BvdCBpbnN0YW5jZXMgZm9yIGNvc3Qgb3B0aW1pemF0aW9uXG4gICAgICB0aGlzLmNvbXB1dGUgPSBuZXcgRWNzU3BvdCh0aGlzLnNjb3BlLCBgJHt0aGlzLmlkfUVjc1Nwb3RgLCBiYXNlRWNzUHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IHRvIEZhcmdhdGVcbiAgICAgIGNvbnN0IGZhcmdhdGVQcm9wcyA9IHtcbiAgICAgICAgLi4uYmFzZUVjc1Byb3BzLFxuICAgICAgICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGUuQ1BVLFxuICAgICAgICBwcm90b2NvbDogcHJvcHMuZG9tYWluQ29uZmlnID8gUHJvdG9jb2wuSFRUUFMgOiBQcm90b2NvbC5IVFRQLFxuICAgICAgICBkb21haW5Db25maWc6IHByb3BzLmRvbWFpbkNvbmZpZ1xuICAgICAgfSBhcyBGYXJnYXRlQ2x1c3RlclByb3BzO1xuXG4gICAgICB0aGlzLmNvbXB1dGUgPSBuZXcgRmFyZ2F0ZUNsdXN0ZXIoXG4gICAgICAgIHRoaXMuc2NvcGUsXG4gICAgICAgIGAke3RoaXMuaWR9RmFyZ2F0ZWAsXG4gICAgICAgIGZhcmdhdGVQcm9wc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuY29ubmVjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgY29ubiBvZiBwcm9wcy5jb25uZWN0aW9ucykge1xuICAgICAgICB0aGlzLmNvbXB1dGUuY29ubmVjdGlvbnMuYWxsb3dUb0RlZmF1bHRQb3J0KGNvbm4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmNvbXB1dGUuY29ubmVjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZExhbWJkYUNvbXB1dGUocHJvcHM6IElDb21wdXRlUHJvcHMpIHtcbiAgICBsZXQgY29kZSA9IHByb3BzLmNvZGU7XG5cbiAgICBpZiAoIWNvZGUpIHtcbiAgICAgIGlmICghcHJvcHMuZWNyUmVwb3NpdG9yeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJFaXRoZXIgY29kZSBvciBlY3JSZXBvc2l0b3J5IG11c3QgYmUgcHJvdmlkZWQgZm9yIExhbWJkYSBjb21wdXRlIHR5cGVcIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuZWNyUmVwb3NpdG9yeSBpbnN0YW5jZW9mIFJlcG9zaXRvcnkpIHtcbiAgICAgICAgY29kZSA9IENvZGUuZnJvbUVjckltYWdlKHByb3BzLmVjclJlcG9zaXRvcnksIHtcbiAgICAgICAgICB0YWdPckRpZ2VzdDogXCJsYXRlc3RcIlxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcImVjclJlcG9zaXRvcnkgbXVzdCBiZSBhIFJlcG9zaXRvcnkgaW5zdGFuY2UgZm9yIExhbWJkYSBjb21wdXRlIHR5cGVcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxhbWJkYVByb3BzID0ge1xuICAgICAgY29kZTogY29kZSxcbiAgICAgIGhhbmRsZXI6IHByb3BzLmhhbmRsZXIgfHwgXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBydW50aW1lOiBwcm9wcy5ydW50aW1lIHx8IFJ1bnRpbWUuTk9ERUpTXzE4X1gsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSxcbiAgICAgIGxhbWJkYURlc2NyaXB0aW9uOiBwcm9wcy5sYW1iZGFEZXNjcmlwdGlvbixcbiAgICAgIHJvbGVEZXNjcmlwdGlvbjogcHJvcHMucm9sZURlc2NyaXB0aW9uLFxuICAgICAgaW5saW5lUG9saWN5OiBwcm9wcy5pbmxpbmVQb2xpY3kgfHwgW10sXG4gICAgICBlbmFibGVGdW5jdGlvblVybDogcHJvcHMuZW5hYmxlRnVuY3Rpb25VcmwsXG4gICAgICBmdW5jdGlvblVybEF1dGhUeXBlOiBwcm9wcy5mdW5jdGlvblVybEF1dGhUeXBlLFxuICAgICAgZnVuY3Rpb25VcmxDb3JzOiBjb252ZXJ0Q29yc09wdGlvbnMocHJvcHMuZnVuY3Rpb25VcmxDb3JzKSxcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcy5jb250YWluZXJFbnZpcm9ubWVudFxuICAgIH07XG5cbiAgICB0aGlzLmNvbXB1dGUgPSBuZXcgTGFtYmRhRnVuY3Rpb24oXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgYCR7dGhpcy5pZH1MYW1iZGFgLFxuICAgICAgbGFtYmRhUHJvcHNcbiAgICApO1xuXG4gICAgLy8gTGFtYmRhIGZ1bmN0aW9ucyBkb24ndCB1c2Ugc2VjdXJpdHkgZ3JvdXBzIHVubGVzcyBWUEMtZW5hYmxlZFxuICAgIC8vIENyZWF0ZSBlbXB0eSBjb25uZWN0aW9ucyBvYmplY3QgZm9yIGludGVyZmFjZSBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucygpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,33 +1,194 @@
|
|
|
1
|
-
import { Stack } from "aws-cdk-lib";
|
|
2
1
|
import { Construct } from "constructs";
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
[key: string]: string;
|
|
2
|
+
import type App from "../../app";
|
|
3
|
+
import { type Secret } from "../../resources/aws/secrets";
|
|
4
|
+
import { type Connections, type IConnectable, type IVpc, type SubnetSelection } from "aws-cdk-lib/aws-ec2";
|
|
5
|
+
import { type IInstanceEngine, type IClusterEngine } from "aws-cdk-lib/aws-rds";
|
|
6
|
+
import { type Duration } from "aws-cdk-lib";
|
|
7
|
+
import { type IKey } from "aws-cdk-lib/aws-kms";
|
|
8
|
+
export type DatabaseEngine = "postgresql" | "mysql";
|
|
9
|
+
export interface EngineConfig {
|
|
10
|
+
defaultUsername: string;
|
|
11
|
+
sslParameters: Record<string, string>;
|
|
12
|
+
rotationAppName: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const DATABASE_ENGINE_CONFIG: Record<DatabaseEngine, {
|
|
15
|
+
aurora: {
|
|
16
|
+
version: string;
|
|
17
|
+
majorVersion: string;
|
|
20
18
|
};
|
|
19
|
+
instance: {
|
|
20
|
+
version: string;
|
|
21
|
+
majorVersion: string;
|
|
22
|
+
};
|
|
23
|
+
defaultUsername: string;
|
|
24
|
+
sslParameters: Record<string, string>;
|
|
25
|
+
rotationAppName: string;
|
|
26
|
+
}>;
|
|
27
|
+
export declare function getAuroraClusterEngine(engine: DatabaseEngine): IClusterEngine;
|
|
28
|
+
export declare function getInstanceEngine(engine: DatabaseEngine): IInstanceEngine;
|
|
29
|
+
export declare function getEngineConfig(engine: DatabaseEngine): EngineConfig;
|
|
30
|
+
export interface ProxyConfig {
|
|
31
|
+
maxConnections?: number;
|
|
32
|
+
maxIdleConnections?: number;
|
|
33
|
+
connectionBorrowTimeout?: number;
|
|
34
|
+
requireTLS?: boolean;
|
|
35
|
+
vpcSubnets?: SubnetSelection;
|
|
36
|
+
}
|
|
37
|
+
export interface ReadReplicaConfig {
|
|
38
|
+
instanceType?: string;
|
|
39
|
+
availabilityZone?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface CredentialsConfig {
|
|
42
|
+
username?: string;
|
|
43
|
+
secretRotation?: SecretRotationConfig | false;
|
|
44
|
+
}
|
|
45
|
+
export interface SecretRotationConfig {
|
|
46
|
+
automaticallyAfter?: Duration;
|
|
47
|
+
}
|
|
48
|
+
export interface EncryptionConfig {
|
|
49
|
+
storageKey?: EncryptionKeySpec;
|
|
50
|
+
}
|
|
51
|
+
export type PerformanceInsightsRetentionPeriod = 7 | 31 | 93 | 186 | 372 | 731;
|
|
52
|
+
export interface PerformanceInsightsConfig {
|
|
53
|
+
encryptionKey?: EncryptionKeySpec;
|
|
54
|
+
/** Retention period in days. Default: 31 (1 month). */
|
|
55
|
+
retentionPeriod?: PerformanceInsightsRetentionPeriod;
|
|
21
56
|
}
|
|
57
|
+
export interface AwsManagedKey {
|
|
58
|
+
readonly awsManaged: true;
|
|
59
|
+
}
|
|
60
|
+
export interface CustomerManagedKeyMarker {
|
|
61
|
+
readonly useCMK: true;
|
|
62
|
+
}
|
|
63
|
+
export type EncryptionKeySpec = IKey | AwsManagedKey | CustomerManagedKeyMarker;
|
|
64
|
+
export declare function isAwsManagedKey(spec: EncryptionKeySpec | undefined): spec is AwsManagedKey;
|
|
22
65
|
/**
|
|
23
|
-
*
|
|
66
|
+
* Type guard to check if CMK is explicitly requested.
|
|
24
67
|
*/
|
|
25
|
-
export declare
|
|
26
|
-
|
|
68
|
+
export declare function isCMKRequested(spec: EncryptionKeySpec | undefined): spec is CustomerManagedKeyMarker;
|
|
69
|
+
/**
|
|
70
|
+
* Convenience constant for specifying AWS managed encryption (the default).
|
|
71
|
+
* @example
|
|
72
|
+
* encryption: { storageKey: AWS_MANAGED }
|
|
73
|
+
*/
|
|
74
|
+
export declare const AWS_MANAGED: AwsManagedKey;
|
|
75
|
+
/**
|
|
76
|
+
* Convenience constant for explicitly requesting CMK.
|
|
77
|
+
* @example
|
|
78
|
+
* encryption: { storageKey: USE_CMK }
|
|
79
|
+
*/
|
|
80
|
+
export declare const USE_CMK: CustomerManagedKeyMarker;
|
|
81
|
+
/**
|
|
82
|
+
* **DESTRUCTIVE**: Changing `storageKey` after cluster creation causes cluster REPLACEMENT.
|
|
83
|
+
*/
|
|
84
|
+
export interface AuroraEncryptionConfig {
|
|
85
|
+
/** DESTRUCTIVE: Changing after creation causes cluster replacement */
|
|
86
|
+
storageKey?: EncryptionKeySpec;
|
|
87
|
+
}
|
|
88
|
+
export interface AuroraReaderConfig {
|
|
89
|
+
scaleWithWriter?: boolean;
|
|
90
|
+
enablePerformanceInsights?: boolean;
|
|
91
|
+
identifierSuffix?: string;
|
|
92
|
+
availabilityZone?: string;
|
|
93
|
+
}
|
|
94
|
+
export interface AuroraWriterConfig {
|
|
95
|
+
enablePerformanceInsights?: boolean;
|
|
96
|
+
identifierSuffix?: string;
|
|
97
|
+
availabilityZone?: string;
|
|
98
|
+
}
|
|
99
|
+
export interface AuroraReadersConfig {
|
|
100
|
+
/** Mutually exclusive with instances */
|
|
101
|
+
count?: number;
|
|
102
|
+
/** Mutually exclusive with count */
|
|
103
|
+
instances?: AuroraReaderConfig[];
|
|
104
|
+
defaultEnablePerformanceInsights?: boolean;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Base props for database configuration.
|
|
108
|
+
*/
|
|
109
|
+
type BaseDatabaseProps = {
|
|
110
|
+
vpc?: IVpc;
|
|
111
|
+
databaseName: string;
|
|
112
|
+
instanceType?: string;
|
|
113
|
+
};
|
|
114
|
+
export interface AuroraDatabaseProps extends BaseDatabaseProps {
|
|
115
|
+
type: "Aurora";
|
|
116
|
+
databaseEngine?: DatabaseEngine;
|
|
117
|
+
/** Overrides databaseEngine if provided */
|
|
118
|
+
engine?: IClusterEngine;
|
|
119
|
+
writer?: AuroraWriterConfig;
|
|
120
|
+
readers?: AuroraReadersConfig | false;
|
|
121
|
+
proxy?: ProxyConfig | false;
|
|
122
|
+
credentials?: CredentialsConfig;
|
|
123
|
+
/** DESTRUCTIVE: Changing storageKey causes cluster replacement */
|
|
124
|
+
encryption?: AuroraEncryptionConfig;
|
|
125
|
+
backupRetention?: number;
|
|
126
|
+
monitoringInterval?: Duration;
|
|
127
|
+
preferredMaintenanceWindow?: string;
|
|
128
|
+
port?: number;
|
|
129
|
+
performanceInsights?: PerformanceInsightsConfig | false;
|
|
130
|
+
/** ARN or identifier of DB cluster snapshot to restore from */
|
|
131
|
+
snapshotIdentifier?: string;
|
|
132
|
+
}
|
|
133
|
+
export interface GlobalAuroraDatabaseProps extends BaseDatabaseProps {
|
|
134
|
+
type: "GlobalAurora";
|
|
135
|
+
primaryRegion: string;
|
|
136
|
+
secondaryRegions?: string[];
|
|
137
|
+
globalClusterIdentifier?: string;
|
|
138
|
+
enableGlobalWriteForwarding?: boolean;
|
|
139
|
+
databaseEngine?: DatabaseEngine;
|
|
140
|
+
/** Overrides databaseEngine if provided */
|
|
141
|
+
engine?: IClusterEngine;
|
|
142
|
+
writer?: AuroraWriterConfig;
|
|
143
|
+
readers?: AuroraReadersConfig | false;
|
|
144
|
+
proxy?: ProxyConfig | false;
|
|
145
|
+
credentials?: CredentialsConfig;
|
|
146
|
+
/** DESTRUCTIVE: Changing storageKey causes cluster replacement */
|
|
147
|
+
encryption?: AuroraEncryptionConfig;
|
|
148
|
+
backupRetention?: number;
|
|
149
|
+
monitoringInterval?: Duration;
|
|
150
|
+
preferredMaintenanceWindow?: string;
|
|
151
|
+
port?: number;
|
|
152
|
+
performanceInsights?: PerformanceInsightsConfig | false;
|
|
153
|
+
/** ARN or identifier of DB cluster snapshot to restore from */
|
|
154
|
+
snapshotIdentifier?: string;
|
|
155
|
+
}
|
|
156
|
+
export interface InstanceDatabaseProps extends BaseDatabaseProps {
|
|
157
|
+
type: "Instance";
|
|
158
|
+
databaseEngine?: DatabaseEngine;
|
|
159
|
+
/** Overrides databaseEngine if provided */
|
|
160
|
+
engine?: IInstanceEngine;
|
|
161
|
+
allocatedStorage?: number;
|
|
162
|
+
port?: number;
|
|
163
|
+
multiAz?: boolean;
|
|
164
|
+
performanceInsights?: PerformanceInsightsConfig | false;
|
|
165
|
+
proxy?: ProxyConfig | false;
|
|
166
|
+
readReplica?: ReadReplicaConfig | false;
|
|
167
|
+
credentials?: CredentialsConfig;
|
|
168
|
+
encryption?: EncryptionConfig;
|
|
169
|
+
publiclyAccessible?: boolean;
|
|
170
|
+
/** ARN or identifier of DB instance snapshot to restore from */
|
|
171
|
+
snapshotIdentifier?: string;
|
|
172
|
+
}
|
|
173
|
+
export type IDatabaseProps = AuroraDatabaseProps | InstanceDatabaseProps | GlobalAuroraDatabaseProps;
|
|
174
|
+
export declare class DatabaseFactory {
|
|
175
|
+
static build<T extends IDatabaseProps>(id: string, props: T): (app: App, scope: Construct) => Database;
|
|
176
|
+
}
|
|
177
|
+
export declare class Database extends Construct implements IConnectable {
|
|
178
|
+
id: string;
|
|
179
|
+
scope: Construct;
|
|
27
180
|
vpc: IVpc;
|
|
181
|
+
connections: Connections;
|
|
182
|
+
private databaseName;
|
|
28
183
|
private database;
|
|
29
|
-
constructor(scope: Construct, id: string, props:
|
|
30
|
-
|
|
31
|
-
|
|
184
|
+
constructor(scope: Construct, id: string, props: IDatabaseProps);
|
|
185
|
+
addDatabase(props: IDatabaseProps): void;
|
|
186
|
+
private addAurora;
|
|
187
|
+
private addAuroraGlobal;
|
|
188
|
+
private addRdsInstance;
|
|
189
|
+
getCredentials(): Secret;
|
|
190
|
+
getHostEndpoint(): string;
|
|
191
|
+
getHostPort(): string;
|
|
192
|
+
getDatabaseName(): string;
|
|
32
193
|
}
|
|
33
194
|
export {};
|