awscdk-resources-mongodbatlas
Version:
MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources
135 lines • 19.4 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AtlasEncryptionAtRestExpress = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
// Copyright 2023 MongoDB Inc
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
const constructs_1 = require("constructs");
const atlas = require("../../index");
const NODE_COUNT = 3;
const NODE_COUNT_ANALYTICS = 1;
const BACKUP_ENABLED = true;
const INSTANCE_SIZE = "M30";
const MONGODB_VERSION = "5.0";
const ENCRYPTION_AT_REST_PROVIDER = atlas.CfnClusterPropsEncryptionAtRestProvider.AWS;
const REGION = "US_EAST_1";
const EBS_VOLUME_TYPE = "STANDARD";
const ENABLE_ENCRYPTION_AT_REST = true;
const CLUSTER_TYPE = "REPLICASET";
const DB_NAME = "admin";
const USERNAME = "cdkUser";
const ROLE = [
{
roleName: "atlasAdmin",
databaseName: "admin",
},
];
function randomNumber() {
const min = 10;
const max = 9999999;
return Math.floor(Math.random() * (max - min + 1) + min);
}
function getClusterProps(inputClusterProps) {
return {
name: inputClusterProps.name || "atlas-cluster-".concat(String(randomNumber())),
mongoDbMajorVersion: inputClusterProps.mongoDbMajorVersion || MONGODB_VERSION,
backupEnabled: inputClusterProps.backupEnabled ?? BACKUP_ENABLED,
diskSizeGb: inputClusterProps.diskSizeGb,
clusterType: inputClusterProps.clusterType || CLUSTER_TYPE,
biConnector: inputClusterProps.biConnector,
encryptionAtRestProvider: inputClusterProps.encryptionAtRestProvider || ENCRYPTION_AT_REST_PROVIDER,
labels: inputClusterProps.labels,
paused: inputClusterProps.paused,
pitEnabled: inputClusterProps.pitEnabled,
rootCertType: inputClusterProps.rootCertType,
terminationProtectionEnabled: inputClusterProps.terminationProtectionEnabled,
versionReleaseSystem: inputClusterProps.versionReleaseSystem,
advancedSettings: inputClusterProps.advancedSettings,
replicationSpecs: inputClusterProps.replicationSpecs || getDefaultClusterReplicationSpec(),
projectId: "",
};
}
function getDefaultClusterReplicationSpec() {
return [
{
numShards: 1,
advancedRegionConfigs: [
{
analyticsSpecs: {
ebsVolumeType: EBS_VOLUME_TYPE,
instanceSize: INSTANCE_SIZE,
nodeCount: NODE_COUNT_ANALYTICS,
},
electableSpecs: {
ebsVolumeType: EBS_VOLUME_TYPE,
instanceSize: INSTANCE_SIZE,
nodeCount: NODE_COUNT,
},
priority: 7,
regionName: REGION,
},
],
},
];
}
class AtlasEncryptionAtRestExpress extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, id);
this.encryptionAtRest = new atlas.CfnEncryptionAtRest(this, "encryption-at-rest-".concat(id), {
awsKmsConfig: {
customerMasterKeyId: props.encryptionAtRest.customerMasterKeyId,
roleId: props.encryptionAtRest.roleId,
enabled: props.encryptionAtRest.enabledEncryptionAtRest ||
ENABLE_ENCRYPTION_AT_REST,
region: props.encryptionAtRest.region || REGION,
},
projectId: props.projectId,
profile: props.profile,
});
if (props.cluster) {
// Create a new MongoDB Atlas Cluster and pass project ID
const clusterProps = getClusterProps(props.cluster);
this.cluster = new atlas.CfnCluster(this, "cluster-".concat(id), {
...clusterProps,
profile: props.profile,
projectId: props.projectId,
});
}
if (props.databaseUser) {
// Create a new MongoDB Atlas Database User
this.databaseUser = new atlas.CfnDatabaseUser(this, "db-user-".concat(id), {
...props.databaseUser,
profile: props.profile,
databaseName: props.databaseUser?.databaseName || DB_NAME,
projectId: props.projectId,
username: props.databaseUser?.username || USERNAME,
roles: props.databaseUser?.roles || ROLE,
password: props.databaseUser.password,
});
}
if (props.accessList) {
// Create a new MongoDB Atlas Project IP Access List
this.accessList = new atlas.CfnProjectIpAccessList(this, "access-list-".concat(id), {
...props.accessList,
profile: props.profile,
projectId: props.projectId,
});
}
}
}
exports.AtlasEncryptionAtRestExpress = AtlasEncryptionAtRestExpress;
_a = JSII_RTTI_SYMBOL_1;
AtlasEncryptionAtRestExpress[_a] = { fqn: "awscdk-resources-mongodbatlas.AtlasEncryptionAtRestExpress", version: "3.13.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDMtcmVzb3VyY2VzL2VuY3J5cHRpb24tYXQtcmVzdC1leHByZXNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLEVBQUU7QUFDRixrRUFBa0U7QUFDbEUsbUVBQW1FO0FBQ25FLDBDQUEwQztBQUMxQyxFQUFFO0FBQ0Ysa0RBQWtEO0FBQ2xELEVBQUU7QUFDRixzRUFBc0U7QUFDdEUsb0VBQW9FO0FBQ3BFLDJFQUEyRTtBQUMzRSxzRUFBc0U7QUFDdEUsaUNBQWlDO0FBRWpDLDJDQUF1QztBQUN2QyxxQ0FBcUM7QUFPckMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDNUIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQzlCLE1BQU0sMkJBQTJCLEdBQy9CLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxHQUFHLENBQUM7QUFDcEQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDO0FBQzNCLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQztBQUNuQyxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQztBQUN2QyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDbEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3hCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUMzQixNQUFNLElBQUksR0FBRztJQUNYO1FBQ0UsUUFBUSxFQUFFLFlBQVk7UUFDdEIsWUFBWSxFQUFFLE9BQU87S0FDdEI7Q0FDRixDQUFDO0FBRUYsU0FBUyxZQUFZO0lBQ25CLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNmLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQztJQUNw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Q0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOztBQXJFSCxvRUFzRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyMyBNb25nb0RCIEluY1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBhdGxhcyBmcm9tIFwiLi4vLi4vaW5kZXhcIjtcbmltcG9ydCB7XG4gIENsdXN0ZXJQcm9wcyxcbiAgRGF0YWJhc2VVc2VyUHJvcHMsXG4gIElwQWNjZXNzTGlzdFByb3BzLFxufSBmcm9tIFwiLi4vY29tbW9uL3Byb3BzXCI7XG5cbmNvbnN0IE5PREVfQ09VTlQgPSAzO1xuY29uc3QgTk9ERV9DT1VOVF9BTkFMWVRJQ1MgPSAxO1xuY29uc3QgQkFDS1VQX0VOQUJMRUQgPSB0cnVlO1xuY29uc3QgSU5TVEFOQ0VfU0laRSA9IFwiTTMwXCI7XG5jb25zdCBNT05HT0RCX1ZFUlNJT04gPSBcIjUuMFwiO1xuY29uc3QgRU5DUllQVElPTl9BVF9SRVNUX1BST1ZJREVSID1cbiAgYXRsYXMuQ2ZuQ2x1c3RlclByb3BzRW5jcnlwdGlvbkF0UmVzdFByb3ZpZGVyLkFXUztcbmNvbnN0IFJFR0lPTiA9IFwiVVNfRUFTVF8xXCI7XG5jb25zdCBFQlNfVk9MVU1FX1RZUEUgPSBcIlNUQU5EQVJEXCI7XG5jb25zdCBFTkFCTEVfRU5DUllQVElPTl9BVF9SRVNUID0gdHJ1ZTtcbmNvbnN0IENMVVNURVJfVFlQRSA9IFwiUkVQTElDQVNFVFwiO1xuY29uc3QgREJfTkFNRSA9IFwiYWRtaW5cIjtcbmNvbnN0IFVTRVJOQU1FID0gXCJjZGtVc2VyXCI7XG5jb25zdCBST0xFID0gW1xuICB7XG4gICAgcm9sZU5hbWU6IFwiYXRsYXNBZG1pblwiLFxuICAgIGRhdGFiYXNlTmFtZTogXCJhZG1pblwiLFxuICB9LFxuXTtcblxuZnVuY3Rpb24gcmFuZG9tTnVtYmVyKCkge1xuICBjb25zdCBtaW4gPSAxMDtcbiAgY29uc3QgbWF4ID0gOTk5OTk5OTtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbik7XG59XG5cbmZ1bmN0aW9uIGdldENsdXN0ZXJQcm9wcyhcbiAgaW5wdXRDbHVzdGVyUHJvcHM6IENsdXN0ZXJQcm9wc1xuKTogYXRsYXMuQ2ZuQ2x1c3RlclByb3BzIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOlxuICAgICAgaW5wdXRDbHVzdGVyUHJvcHMubmFtZSB8fCBcImF0bGFzLWNsdXN0ZXItXCIuY29uY2F0KFN0cmluZyhyYW5kb21OdW1iZXIoKSkpLFxuICAgIG1vbmdvRGJNYWpvclZlcnNpb246XG4gICAgICBpbnB1dENsdXN0ZXJQcm9wcy5tb25nb0RiTWFqb3JWZXJzaW9uIHx8IE1PTkdPREJfVkVSU0lPTixcbiAgICBiYWNrdXBFbmFibGVkOiBpbnB1dENsdXN0ZXJQcm9wcy5iYWNrdXBFbmFibGVkID8/IEJBQ0tVUF9FTkFCTEVELFxuICAgIGRpc2tTaXplR2I6IGlucHV0Q2x1c3RlclByb3BzLmRpc2tTaXplR2IsXG4gICAgY2x1c3RlclR5cGU6IGlucHV0Q2x1c3RlclByb3BzLmNsdXN0ZXJUeXBlIHx8IENMVVNURVJfVFlQRSxcbiAgICBiaUNvbm5lY3RvcjogaW5wdXRDbHVzdGVyUHJvcHMuYmlDb25uZWN0b3IsXG4gICAgZW5jcnlwdGlvbkF0UmVzdFByb3ZpZGVyOlxuICAgICAgaW5wdXRDbHVzdGVyUHJvcHMuZW5jcnlwdGlvbkF0UmVzdFByb3ZpZGVyIHx8IEVOQ1JZUFRJT05fQVRfUkVTVF9QUk9WSURFUixcbiAgICBsYWJlbHM6IGlucHV0Q2x1c3RlclByb3BzLmxhYmVscyxcbiAgICBwYXVzZWQ6IGlucHV0Q2x1c3RlclByb3BzLnBhdXNlZCxcbiAgICBwaXRFbmFibGVkOiBpbnB1dENsdXN0ZXJQcm9wcy5waXRFbmFibGVkLFxuICAgIHJvb3RDZXJ0VHlwZTogaW5wdXRDbHVzdGVyUHJvcHMucm9vdENlcnRUeXBlLFxuICAgIHRlcm1pbmF0aW9uUHJvdGVjdGlvbkVuYWJsZWQ6XG4gICAgICBpbnB1dENsdXN0ZXJQcm9wcy50ZXJtaW5hdGlvblByb3RlY3Rpb25FbmFibGVkLFxuICAgIHZlcnNpb25SZWxlYXNlU3lzdGVtOiBpbnB1dENsdXN0ZXJQcm9wcy52ZXJzaW9uUmVsZWFzZVN5c3RlbSxcbiAgICBhZHZhbmNlZFNldHRpbmdzOiBpbnB1dENsdXN0ZXJQcm9wcy5hZHZhbmNlZFNldHRpbmdzLFxuICAgIHJlcGxpY2F0aW9uU3BlY3M6XG4gICAgICBpbnB1dENsdXN0ZXJQcm9wcy5yZXBsaWNhdGlvblNwZWNzIHx8IGdldERlZmF1bHRDbHVzdGVyUmVwbGljYXRpb25TcGVjKCksXG4gICAgcHJvamVjdElkOiBcIlwiLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0Q2x1c3RlclJlcGxpY2F0aW9uU3BlYygpOiBhdGxhcy5BZHZhbmNlZFJlcGxpY2F0aW9uU3BlY1tdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBudW1TaGFyZHM6IDEsXG4gICAgICBhZHZhbmNlZFJlZ2lvbkNvbmZpZ3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFuYWx5dGljc1NwZWNzOiB7XG4gICAgICAgICAgICBlYnNWb2x1bWVUeXBlOiBFQlNfVk9MVU1FX1RZUEUsXG4gICAgICAgICAgICBpbnN0YW5jZVNpemU6IElOU1RBTkNFX1NJWkUsXG4gICAgICAgICAgICBub2RlQ291bnQ6IE5PREVfQ09VTlRfQU5BTFlUSUNTLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZWxlY3RhYmxlU3BlY3M6IHtcbiAgICAgICAgICAgIGVic1ZvbHVtZVR5cGU6IEVCU19WT0xVTUVfVFlQRSxcbiAgICAgICAgICAgIGluc3RhbmNlU2l6ZTogSU5TVEFOQ0VfU0laRSxcbiAgICAgICAgICAgIG5vZGVDb3VudDogTk9ERV9DT1VOVCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByaW9yaXR5OiA3LFxuICAgICAgICAgIHJlZ2lvbk5hbWU6IFJFR0lPTixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0aW9uQXRSZXN0UHJvcHMge1xuICAvKipcbiAgICogSUQgb2YgYW4gQVdTIElBTSByb2xlIGF1dGhvcml6ZWQgdG8gbWFuYWdlIGFuIEFXUyBjdXN0b21lciBtYXN0ZXIga2V5LlxuICAgKlxuICAgKiBAc2NoZW1hIEF3c0ttcyNSb2xlSURcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFXUyBjdXN0b21lciBtYXN0ZXIga2V5IHVzZWQgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdCB0aGUgTW9uZ29EQiBtYXN0ZXIga2V5cy5cbiAgICpcbiAgICogQHNjaGVtYSBBd3NLbXMjQ3VzdG9tZXJNYXN0ZXJLZXlJRFxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJNYXN0ZXJLZXlJZDogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgRW5jcnlwdGlvbiBhdCBSZXN0IGlzIGVuYWJsZWQgZm9yIGFuIEF0bGFzIHByb2plY3QuIFRvIGRpc2FibGUgRW5jcnlwdGlvbiBhdCBSZXN0LCBwYXNzIG9ubHkgdGhpcyBwYXJhbWV0ZXIgd2l0aCBhIHZhbHVlIG9mIGZhbHNlLiBXaGVuIHlvdSBkaXNhYmxlIEVuY3J5cHRpb24gYXQgUmVzdCwgQXRsYXMgYWxzbyByZW1vdmVzIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMuXG4gICAqIERlZmF1bHQgVmFsdWU6IHRydWVcbiAgICogQHNjaGVtYSBBd3NLbXMjRW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZEVuY3J5cHRpb25BdFJlc3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHJlZ2lvbiBpbiB3aGljaCB0aGUgQVdTIGN1c3RvbWVyIG1hc3RlciBrZXkgZXhpc3RzLlxuICAgKlxuICAgKiBAc2NoZW1hIEF3c0ttcyNSZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdGxhc0VuY3J5cHRpb25BdFJlc3RFeHByZXNzUHJvcHMge1xuICByZWFkb25seSBjbHVzdGVyPzogQ2x1c3RlclByb3BzO1xuICByZWFkb25seSBhY2Nlc3NMaXN0PzogSXBBY2Nlc3NMaXN0UHJvcHM7XG4gIHJlYWRvbmx5IGVuY3J5cHRpb25BdFJlc3Q6IEVuY3J5cHRpb25BdFJlc3RQcm9wcztcbiAgcmVhZG9ubHkgZGF0YWJhc2VVc2VyPzogRGF0YWJhc2VVc2VyUHJvcHM7XG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2plY3RJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQXRsYXNFbmNyeXB0aW9uQXRSZXN0RXhwcmVzcyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGVuY3J5cHRpb25BdFJlc3Q6IGF0bGFzLkNmbkVuY3J5cHRpb25BdFJlc3Q7XG4gIHJlYWRvbmx5IGNsdXN0ZXI/OiBhdGxhcy5DZm5DbHVzdGVyO1xuICByZWFkb25seSBhY2Nlc3NMaXN0PzogYXRsYXMuQ2ZuUHJvamVjdElwQWNjZXNzTGlzdDtcbiAgcmVhZG9ubHkgZGF0YWJhc2VVc2VyPzogYXRsYXMuQ2ZuRGF0YWJhc2VVc2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQXRsYXNFbmNyeXB0aW9uQXRSZXN0RXhwcmVzc1Byb3BzXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmVuY3J5cHRpb25BdFJlc3QgPSBuZXcgYXRsYXMuQ2ZuRW5jcnlwdGlvbkF0UmVzdChcbiAgICAgIHRoaXMsXG4gICAgICBcImVuY3J5cHRpb24tYXQtcmVzdC1cIi5jb25jYXQoaWQpLFxuICAgICAge1xuICAgICAgICBhd3NLbXNDb25maWc6IHtcbiAgICAgICAgICBjdXN0b21lck1hc3RlcktleUlkOiBwcm9wcy5lbmNyeXB0aW9uQXRSZXN0LmN1c3RvbWVyTWFzdGVyS2V5SWQsXG4gICAgICAgICAgcm9sZUlkOiBwcm9wcy5lbmNyeXB0aW9uQXRSZXN0LnJvbGVJZCxcbiAgICAgICAgICBlbmFibGVkOlxuICAgICAgICAgICAgcHJvcHMuZW5jcnlwdGlvbkF0UmVzdC5lbmFibGVkRW5jcnlwdGlvbkF0UmVzdCB8fFxuICAgICAgICAgICAgRU5BQkxFX0VOQ1JZUFRJT05fQVRfUkVTVCxcbiAgICAgICAgICByZWdpb246IHByb3BzLmVuY3J5cHRpb25BdFJlc3QucmVnaW9uIHx8IFJFR0lPTixcbiAgICAgICAgfSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9wcy5wcm9qZWN0SWQsXG4gICAgICAgIHByb2ZpbGU6IHByb3BzLnByb2ZpbGUsXG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmIChwcm9wcy5jbHVzdGVyKSB7XG4gICAgICAvLyBDcmVhdGUgYSBuZXcgTW9uZ29EQiBBdGxhcyBDbHVzdGVyIGFuZCBwYXNzIHByb2plY3QgSURcbiAgICAgIGNvbnN0IGNsdXN0ZXJQcm9wcyA9IGdldENsdXN0ZXJQcm9wcyhwcm9wcy5jbHVzdGVyKTtcbiAgICAgIHRoaXMuY2x1c3RlciA9IG5ldyBhdGxhcy5DZm5DbHVzdGVyKHRoaXMsIFwiY2x1c3Rlci1cIi5jb25jYXQoaWQpLCB7XG4gICAgICAgIC4uLmNsdXN0ZXJQcm9wcyxcbiAgICAgICAgcHJvZmlsZTogcHJvcHMucHJvZmlsZSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9wcy5wcm9qZWN0SWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZGF0YWJhc2VVc2VyKSB7XG4gICAgICAvLyBDcmVhdGUgYSBuZXcgTW9uZ29EQiBBdGxhcyBEYXRhYmFzZSBVc2VyXG4gICAgICB0aGlzLmRhdGFiYXNlVXNlciA9IG5ldyBhdGxhcy5DZm5EYXRhYmFzZVVzZXIoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiZGItdXNlci1cIi5jb25jYXQoaWQpLFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucHJvcHMuZGF0YWJhc2VVc2VyLFxuICAgICAgICAgIHByb2ZpbGU6IHByb3BzLnByb2ZpbGUsXG4gICAgICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZVVzZXI/LmRhdGFiYXNlTmFtZSB8fCBEQl9OQU1FLFxuICAgICAgICAgIHByb2plY3RJZDogcHJvcHMucHJvamVjdElkLFxuICAgICAgICAgIHVzZXJuYW1lOiBwcm9wcy5kYXRhYmFzZVVzZXI/LnVzZXJuYW1lIHx8IFVTRVJOQU1FLFxuICAgICAgICAgIHJvbGVzOiBwcm9wcy5kYXRhYmFzZVVzZXI/LnJvbGVzIHx8IFJPTEUsXG4gICAgICAgICAgcGFzc3dvcmQ6IHByb3BzLmRhdGFiYXNlVXNlci5wYXNzd29yZCxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuYWNjZXNzTGlzdCkge1xuICAgICAgLy8gQ3JlYXRlIGEgbmV3IE1vbmdvREIgQXRsYXMgUHJvamVjdCBJUCBBY2Nlc3MgTGlzdFxuICAgICAgdGhpcy5hY2Nlc3NMaXN0ID0gbmV3IGF0bGFzLkNmblByb2plY3RJcEFjY2Vzc0xpc3QoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiYWNjZXNzLWxpc3QtXCIuY29uY2F0KGlkKSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLnByb3BzLmFjY2Vzc0xpc3QsXG4gICAgICAgICAgcHJvZmlsZTogcHJvcHMucHJvZmlsZSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IHByb3BzLnByb2plY3RJZCxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==