UNPKG

awscdk-resources-mongodbatlas

Version:

MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources

135 lines 19.4 kB
"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==