raindancers-network
Version:
Extensions to the ec2.Vpc Constructs
116 lines • 14.8 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LakeFormation = exports.Permissions = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const cdk = require("aws-cdk-lib");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const constructs = require("constructs");
const gluedatabase = require("../glue/database/gluedatabase");
/**
* Permissions that can be used as part of a LakeFormation Permissions
* refer https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_GrantPermissions.html
*/
var Permissions;
(function (Permissions) {
Permissions["ALL"] = "ALL";
Permissions["SELECT"] = "SELECT";
Permissions["ALTER"] = "ALTER";
Permissions["DROP"] = "DROP";
Permissions["DELETE"] = "DELETE";
Permissions["INSERT"] = "INSERT";
Permissions["DESCRIBE"] = "DESCRIBE";
Permissions["CREATE_DATABASE"] = "CREATE_DATABASE";
Permissions["CREATE_TABLE"] = "CREATE_TABLE";
Permissions["DATA_LOCATION_ACCESS"] = "DATA_LOCATION_ACESS";
Permissions["CREATE_TAG"] = "CREATE_TAG";
Permissions["ASSOCIATE"] = "ASSOCIATE";
Permissions["CREATE_TABLE_READ_WRITE"] = "CREATE_TABLE_READ_WRITE";
})(Permissions = exports.Permissions || (exports.Permissions = {}));
/**
* Create a Class for the methods
* the methods that we use to operate on our 'Datalake'
*/
class LakeFormation extends constructs.Construct {
constructor(scope, id, props) {
super(scope, id);
if (props.nonproduction ?? false) {
this.nonproduction = true;
}
;
}
/**
* Create a new bucket and associate it to the the Lakeformation.
* @param props AddNewBucketToLakeFormationProps
* @returns s3.Bucket
*/
addNewBucketToLakeFormation(props) {
var bucket;
// this lifecycle policy will be applied to the bucket by default if non is applied.
const defaultLifeCycleRules = [
{
abortIncompleteMultipartUploadAfter: cdk.Duration.days(90),
transitions: [
{
storageClass: aws_cdk_lib_1.aws_s3.StorageClass.INFREQUENT_ACCESS,
transitionAfter: cdk.Duration.days(30),
},
{
storageClass: aws_cdk_lib_1.aws_s3.StorageClass.INTELLIGENT_TIERING,
transitionAfter: cdk.Duration.days(60),
},
{
storageClass: aws_cdk_lib_1.aws_s3.StorageClass.GLACIER,
transitionAfter: cdk.Duration.days(180),
},
{
storageClass: aws_cdk_lib_1.aws_s3.StorageClass.DEEP_ARCHIVE,
transitionAfter: cdk.Duration.days(365),
},
],
},
];
var autoDeleteObjects = false;
var removalPolicy = cdk.RemovalPolicy.RETAIN;
if (this.nonproduction ?? false) {
autoDeleteObjects = true;
removalPolicy = cdk.RemovalPolicy.DESTROY;
}
const lifecycleRules = (props.lifecycleRules ?? defaultLifeCycleRules);
bucket = new aws_cdk_lib_1.aws_s3.Bucket(this, props.name, {
bucketName: cdk.PhysicalName.GENERATE_IF_NEEDED,
blockPublicAccess: aws_cdk_lib_1.aws_s3.BlockPublicAccess.BLOCK_ALL,
encryption: aws_cdk_lib_1.aws_s3.BucketEncryption.S3_MANAGED,
autoDeleteObjects: autoDeleteObjects,
removalPolicy: removalPolicy,
lifecycleRules: lifecycleRules,
});
if (props.role) {
new aws_cdk_lib_1.aws_lakeformation.CfnResource(this, `associateBucket${props.name}`, {
resourceArn: bucket.bucketArn,
roleArn: props.role.roleArn,
useServiceLinkedRole: false,
});
}
else {
new aws_cdk_lib_1.aws_lakeformation.CfnResource(this, `associateBucket${props.name}`, {
resourceArn: bucket.bucketArn,
useServiceLinkedRole: true,
});
}
return bucket;
}
/**
* @param props AddDatabaseProps
* @returns gluedatabase.GlueDataBase
*/
addDatabase(props) {
return new gluedatabase.GlueDataBase(this, props.databaseName, {
databaseName: props.databaseName,
});
}
}
exports.LakeFormation = LakeFormation;
_a = JSII_RTTI_SYMBOL_1;
LakeFormation[_a] = { fqn: "raindancers-network.lakeformation.LakeFormation", version: "1.29.3" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWZvcm1hdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYWtlZm9ybWF0aW9uL2xha2Vmb3JtYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUM7QUFDbkMsNkNBSXFCO0FBRXJCLHlDQUF5QztBQUN6Qyw4REFBOEQ7QUFHOUQ7OztHQUdHO0FBQ0gsSUFBWSxXQWNYO0FBZEQsV0FBWSxXQUFXO0lBQ3JCLDBCQUFXLENBQUE7SUFDWCxnQ0FBaUIsQ0FBQTtJQUNqQiw4QkFBZSxDQUFBO0lBQ2YsNEJBQWEsQ0FBQTtJQUNiLGdDQUFpQixDQUFBO0lBQ2pCLGdDQUFpQixDQUFBO0lBQ2pCLG9DQUFxQixDQUFBO0lBQ3JCLGtEQUFtQyxDQUFBO0lBQ25DLDRDQUE2QixDQUFBO0lBQzdCLDJEQUE0QyxDQUFBO0lBQzVDLHdDQUF5QixDQUFBO0lBQ3pCLHNDQUF1QixDQUFBO0lBQ3ZCLGtFQUFtRCxDQUFBO0FBQ3JELENBQUMsRUFkVyxXQUFXLEdBQVgsbUJBQVcsS0FBWCxtQkFBVyxRQWN0QjtBQThDRDs7O0dBR0c7QUFDSCxNQUFhLGFBQWMsU0FBUSxVQUFVLENBQUMsU0FBUztJQU9yRCxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQzVFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssRUFBRTtZQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUMzQjtRQUFBLENBQUM7SUFDSixDQUFDO0lBR0Q7Ozs7T0FJRztJQUNJLDJCQUEyQixDQUFDLEtBQXVDO1FBRXhFLElBQUksTUFBaUIsQ0FBQztRQUV0QixvRkFBb0Y7UUFDcEYsTUFBTSxxQkFBcUIsR0FBRztZQUM1QjtnQkFDRSxtQ0FBbUMsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzFELFdBQVcsRUFBRTtvQkFDWDt3QkFDRSxZQUFZLEVBQUUsb0JBQUUsQ0FBQyxZQUFZLENBQUMsaUJBQWlCO3dCQUMvQyxlQUFlLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3FCQUN2QztvQkFDRDt3QkFDRSxZQUFZLEVBQUUsb0JBQUUsQ0FBQyxZQUFZLENBQUMsbUJBQW1CO3dCQUNqRCxlQUFlLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3FCQUN2QztvQkFDRDt3QkFDRSxZQUFZLEVBQUUsb0JBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTzt3QkFDckMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztxQkFDeEM7b0JBQ0Q7d0JBQ0UsWUFBWSxFQUFFLG9CQUFFLENBQUMsWUFBWSxDQUFDLFlBQVk7d0JBQzFDLGVBQWUsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7cUJBQ3hDO2lCQUNGO2FBQ0Y7U0FDRixDQUFDO1FBRUYsSUFBSSxpQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDdkMsSUFBSSxhQUFhLEdBQXNCLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBRWhFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLEVBQUU7WUFDL0IsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLGFBQWEsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztTQUMzQztRQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDO1FBRXZFLE1BQU0sR0FBRyxJQUFJLG9CQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLFVBQVUsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLGtCQUFrQjtZQUMvQyxpQkFBaUIsRUFBRSxvQkFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVM7WUFDakQsVUFBVSxFQUFFLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtZQUMxQyxpQkFBaUIsRUFBRSxpQkFBaUI7WUFDcEMsYUFBYSxFQUFFLGFBQWE7WUFDNUIsY0FBYyxFQUFFLGNBQWM7U0FDL0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2QsSUFBSSwrQkFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDbEUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxTQUFTO2dCQUM3QixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUMzQixvQkFBb0IsRUFBRSxLQUFLO2FBQzVCLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLCtCQUFhLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxrQkFBa0IsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNsRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0JBQzdCLG9CQUFvQixFQUFFLElBQUk7YUFDM0IsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVyxDQUFDLEtBQXVCO1FBRXhDLE9BQU8sSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQzdELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTdGSCxzQ0E4RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgYXdzX3MzIGFzIHMzLFxuICBhd3NfbGFrZWZvcm1hdGlvbiBhcyBsYWtlZm9ybWF0aW9uLFxuICBhd3NfaWFtIGFzIGlhbSxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuXG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgZ2x1ZWRhdGFiYXNlIGZyb20gJy4uL2dsdWUvZGF0YWJhc2UvZ2x1ZWRhdGFiYXNlJztcblxuXG4vKipcbiAqIFBlcm1pc3Npb25zIHRoYXQgY2FuIGJlIHVzZWQgYXMgcGFydCBvZiBhIExha2VGb3JtYXRpb24gUGVybWlzc2lvbnNcbiAqIHJlZmVyIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYWtlLWZvcm1hdGlvbi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HcmFudFBlcm1pc3Npb25zLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gUGVybWlzc2lvbnMge1xuICBBTEwgPSAnQUxMJyxcbiAgU0VMRUNUID0gJ1NFTEVDVCcsXG4gIEFMVEVSID0gJ0FMVEVSJyxcbiAgRFJPUCA9ICdEUk9QJyxcbiAgREVMRVRFID0gJ0RFTEVURScsXG4gIElOU0VSVCA9ICdJTlNFUlQnLFxuICBERVNDUklCRSA9ICdERVNDUklCRScsXG4gIENSRUFURV9EQVRBQkFTRSA9ICdDUkVBVEVfREFUQUJBU0UnLFxuICBDUkVBVEVfVEFCTEUgPSAnQ1JFQVRFX1RBQkxFJyxcbiAgREFUQV9MT0NBVElPTl9BQ0NFU1MgPSAnREFUQV9MT0NBVElPTl9BQ0VTUycsXG4gIENSRUFURV9UQUcgPSAnQ1JFQVRFX1RBRycsXG4gIEFTU09DSUFURSA9ICdBU1NPQ0lBVEUnLFxuICBDUkVBVEVfVEFCTEVfUkVBRF9XUklURSA9ICdDUkVBVEVfVEFCTEVfUkVBRF9XUklURScsXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBBZGROZXdCdWNrZXRUb0xha2VGb3JtYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIEJ1Y2tldFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogYW5kIG9wdGlvbmFsIHJvbGUgdG8gdXNlIHRvIGpvaW4gdGhlIExha2UuIFRoaXMgd2lsbCBkZWZhdWx0IHRoZSB0aGUgc3RhbmRhcmQgU2VydmljZSBydWxlLCBpZiBub3RcbiAgICogc3BlY2lmaWVkLCB3aGljaCBpcyB0aGUgcmVjb21tZW5kZWQgYXBwcm9hY2guXG4gICAqL1xuICByZWFkb25seSByb2xlPzogaWFtLlJvbGU7XG4gIC8qKlxuICAgKiBMaWZlY3ljbGUgUnVsZXMgZm9yIG9iamVjdHMgdGhhdCBhcmUgc3RvcmVkIGluIHRoZSBCdWNrZXQuIFRoaXMgd2lsbCBkZWZhdWx0IHRvIGxpZmVjY3lsZSBwYXR0ZXJuIHRoYXQgd2lsbFxuICAgKiBldmVudHVhbGx5IG1vdmUgdW51c2VkIG9iZWplY3RzIHRvIGdsYWNpZXIuXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGVSdWxlcz86IHMzLkxpZmVjeWNsZVJ1bGVbXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHbHVlIERhdGFiYXNlIHRoYXQgaG9sZHMgaW5nZXN0IFRhYmxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGREYXRhYmFzZVByb3BzIHtcblxuICAvKipcbiAgICogTmFtZSBmb3IgZGF0YWJhc2VcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nO1xufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZUZvcm1hdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIE9wdCBvdXQgb2YgTWVjaGFuaXNtcyBmb3IgaGlnaCBkYXRhIHByb3RlY3Rpb24sIHRoYXQgYXJlIGFwcHJvcHJpYXRlIGZvciBwcm9kdWN0aW9uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBub25wcm9kdWN0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBjZGsgZXhlYyByb2xlIHdpbGwgYmUgY3JlYXRpbmcgRGF0YWxha2UgT2JqZWN0cyBzbyB3aWxsIHJlcXVpcmUgcGVybWlzc2lvblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBtYWtlQ2RrRXhlY1JvbGVMYWtlQWRtaW4/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgQ2xhc3MgZm9yIHRoZSBtZXRob2RzXG4gKiB0aGUgbWV0aG9kcyB0aGF0IHdlIHVzZSB0byBvcGVyYXRlIG9uIG91ciAnRGF0YWxha2UnXG4gKi9cbmV4cG9ydCBjbGFzcyBMYWtlRm9ybWF0aW9uIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVybWluZSBpZiBidWNrZXRzIGFyZSBiYWNrZWR1cCwgYW5kIHByb3RlY3RlZCBmcm9tIFN0YWNrIERlc3RydWN0aW9uLlxuICAgKi9cbiAgbm9ucHJvZHVjdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMYWtlRm9ybWF0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzLm5vbnByb2R1Y3Rpb24gPz8gZmFsc2UpIHtcbiAgICAgIHRoaXMubm9ucHJvZHVjdGlvbiA9IHRydWU7XG4gICAgfTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBidWNrZXQgYW5kIGFzc29jaWF0ZSBpdCB0byB0aGUgdGhlIExha2Vmb3JtYXRpb24uXG4gICAqIEBwYXJhbSBwcm9wcyBBZGROZXdCdWNrZXRUb0xha2VGb3JtYXRpb25Qcm9wc1xuICAgKiBAcmV0dXJucyBzMy5CdWNrZXRcbiAgICovXG4gIHB1YmxpYyBhZGROZXdCdWNrZXRUb0xha2VGb3JtYXRpb24ocHJvcHM6IEFkZE5ld0J1Y2tldFRvTGFrZUZvcm1hdGlvblByb3BzKTogczMuQnVja2V0IHtcblxuICAgIHZhciBidWNrZXQ6IHMzLkJ1Y2tldDtcblxuICAgIC8vIHRoaXMgbGlmZWN5Y2xlIHBvbGljeSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGJ1Y2tldCBieSBkZWZhdWx0IGlmIG5vbiBpcyBhcHBsaWVkLlxuICAgIGNvbnN0IGRlZmF1bHRMaWZlQ3ljbGVSdWxlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQWZ0ZXI6IGNkay5EdXJhdGlvbi5kYXlzKDkwKSxcbiAgICAgICAgdHJhbnNpdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdG9yYWdlQ2xhc3M6IHMzLlN0b3JhZ2VDbGFzcy5JTkZSRVFVRU5UX0FDQ0VTUyxcbiAgICAgICAgICAgIHRyYW5zaXRpb25BZnRlcjogY2RrLkR1cmF0aW9uLmRheXMoMzApLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RvcmFnZUNsYXNzOiBzMy5TdG9yYWdlQ2xhc3MuSU5URUxMSUdFTlRfVElFUklORyxcbiAgICAgICAgICAgIHRyYW5zaXRpb25BZnRlcjogY2RrLkR1cmF0aW9uLmRheXMoNjApLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RvcmFnZUNsYXNzOiBzMy5TdG9yYWdlQ2xhc3MuR0xBQ0lFUixcbiAgICAgICAgICAgIHRyYW5zaXRpb25BZnRlcjogY2RrLkR1cmF0aW9uLmRheXMoMTgwKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0b3JhZ2VDbGFzczogczMuU3RvcmFnZUNsYXNzLkRFRVBfQVJDSElWRSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25BZnRlcjogY2RrLkR1cmF0aW9uLmRheXMoMzY1KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgdmFyIGF1dG9EZWxldGVPYmplY3RzOiBib29sZWFuID0gZmFsc2U7XG4gICAgdmFyIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5ID0gY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOO1xuXG4gICAgaWYgKHRoaXMubm9ucHJvZHVjdGlvbiA/PyBmYWxzZSkge1xuICAgICAgYXV0b0RlbGV0ZU9iamVjdHMgPSB0cnVlO1xuICAgICAgcmVtb3ZhbFBvbGljeSA9IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1k7XG4gICAgfVxuXG4gICAgY29uc3QgbGlmZWN5Y2xlUnVsZXMgPSAocHJvcHMubGlmZWN5Y2xlUnVsZXMgPz8gZGVmYXVsdExpZmVDeWNsZVJ1bGVzKTtcblxuICAgIGJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgcHJvcHMubmFtZSwge1xuICAgICAgYnVja2V0TmFtZTogY2RrLlBoeXNpY2FsTmFtZS5HRU5FUkFURV9JRl9ORUVERUQsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELCAvLyB0aGlzIGlzIHdyb25nLlxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IGF1dG9EZWxldGVPYmplY3RzLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcmVtb3ZhbFBvbGljeSxcbiAgICAgIGxpZmVjeWNsZVJ1bGVzOiBsaWZlY3ljbGVSdWxlcyxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5yb2xlKSB7XG4gICAgICBuZXcgbGFrZWZvcm1hdGlvbi5DZm5SZXNvdXJjZSh0aGlzLCBgYXNzb2NpYXRlQnVja2V0JHtwcm9wcy5uYW1lfWAsIHtcbiAgICAgICAgcmVzb3VyY2VBcm46IGJ1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgIHJvbGVBcm46IHByb3BzLnJvbGUucm9sZUFybixcbiAgICAgICAgdXNlU2VydmljZUxpbmtlZFJvbGU6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ldyBsYWtlZm9ybWF0aW9uLkNmblJlc291cmNlKHRoaXMsIGBhc3NvY2lhdGVCdWNrZXQke3Byb3BzLm5hbWV9YCwge1xuICAgICAgICByZXNvdXJjZUFybjogYnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgdXNlU2VydmljZUxpbmtlZFJvbGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Y2tldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcHJvcHMgQWRkRGF0YWJhc2VQcm9wc1xuICAgKiBAcmV0dXJucyBnbHVlZGF0YWJhc2UuR2x1ZURhdGFCYXNlXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0YWJhc2UocHJvcHM6IEFkZERhdGFiYXNlUHJvcHMpOiBnbHVlZGF0YWJhc2UuR2x1ZURhdGFCYXNlIHtcblxuICAgIHJldHVybiBuZXcgZ2x1ZWRhdGFiYXNlLkdsdWVEYXRhQmFzZSh0aGlzLCBwcm9wcy5kYXRhYmFzZU5hbWUsIHtcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgIH0pO1xuICB9XG59XG4iXX0=