UNPKG

@pepperize/cdk-ssm-parameters-cross-region

Version:
158 lines 24.8 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.StringParameter = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const ssm = require("aws-cdk-lib/aws-ssm"); const cxschema = require("aws-cdk-lib/cloud-assembly-schema"); const custom_resources = require("aws-cdk-lib/custom-resources"); const parameter_base_1 = require("./parameter-base"); const validators_1 = require("./validators"); const RESOURCE_TYPE = "Custom::SSM_String_Parameter_Cross_Region"; class StringParameter extends parameter_base_1.ParameterBase { /** * Imports an external string parameter with name and optional version. */ static fromStringParameterAttributes(scope, id, attrs) { if (!attrs.parameterName) { throw new Error("parameterName cannot be an empty string"); } const parameterType = attrs.type ?? ssm.ParameterType.STRING; const parameterName = attrs.version ? `${attrs.parameterName}:${aws_cdk_lib_1.Tokenization.stringifyNumber(attrs.version)}` : attrs.parameterName; class Import extends parameter_base_1.ParameterBase { constructor() { super(scope, id); this.parameterArn = aws_cdk_lib_1.Stack.of(this).formatArn({ service: "ssm", resource: `parameter${parameterName}`, region: attrs.region, }); const parameter = new custom_resources.AwsCustomResource(this, "Resource", { resourceType: RESOURCE_TYPE, onCreate: { region: attrs.region, service: "SSM", action: "getParameter", // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html#getParameter-property parameters: { Name: parameterName, }, physicalResourceId: custom_resources.PhysicalResourceId.of(this.parameterArn), }, onUpdate: { region: attrs.region, service: "SSM", action: "getParameter", // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html#getParameter-property parameters: { Name: parameterName, }, physicalResourceId: custom_resources.PhysicalResourceId.of(this.parameterArn), }, policy: custom_resources.AwsCustomResourcePolicy.fromSdkCalls({ resources: custom_resources.AwsCustomResourcePolicy.ANY_RESOURCE, }), }); this.parameterName = attrs.parameterName; this.parameterType = parameterType; this.stringValue = parameter.getResponseField("Parameter.Value"); } } return new Import(); } /** * Imports an external string parameter by name and region. */ static fromStringParameterName(scope, id, region, parameterName) { return this.fromStringParameterAttributes(scope, id, { parameterName: parameterName, region: region }); } /** * Reads the value of an SSM parameter during synthesis through an * environmental context provider. * * Requires that the stack this scope is defined in will have explicit * account information. Otherwise, it will fail during synthesis. */ static valueFromLookup(scope, region, parameterName) { return aws_cdk_lib_1.ContextProvider.getValue(scope, { provider: cxschema.ContextProvider.SSM_PARAMETER_PROVIDER, props: { parameterName: parameterName, region: region }, dummyValue: `dummy-value-for-${parameterName}`, }).value; } constructor(scope, id, props) { super(scope, id, { physicalName: props.parameterName, }); this.tags = new aws_cdk_lib_1.TagManager(aws_cdk_lib_1.TagType.KEY_VALUE, RESOURCE_TYPE); if (props.allowedPattern) { validators_1.Validators.parameterValue(props.stringValue, props.allowedPattern); } validators_1.Validators.parameterName(props.parameterName); validators_1.Validators.description(props.description); this.parameterArn = aws_cdk_lib_1.Stack.of(this).formatArn({ service: "ssm", resource: `parameter${props.parameterName}`, region: props.region, }); const removalPolicy = props.removalPolicy ?? aws_cdk_lib_1.RemovalPolicy.DESTROY; new custom_resources.AwsCustomResource(this, "Resource", { resourceType: RESOURCE_TYPE, onCreate: { region: props.region, service: "SSM", action: "putParameter", // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html#putParameter-property parameters: { Name: props.parameterName, Value: props.stringValue, AllowedPattern: props.allowedPattern, DataType: props.dataType, Description: props.description, Tags: this.tags.renderedTags, Tier: props.tier, Type: ssm.ParameterType.STRING, }, physicalResourceId: custom_resources.PhysicalResourceId.of(this.parameterArn), }, onUpdate: { region: props.region, service: "SSM", action: "putParameter", // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html#putParameter-property parameters: { Name: props.parameterName, Value: props.stringValue, AllowedPattern: props.allowedPattern, DataType: props.dataType, Description: props.description, Tags: this.tags.renderedTags, Tier: props.tier, Type: ssm.ParameterType.STRING, Overwrite: true, }, physicalResourceId: custom_resources.PhysicalResourceId.of(this.parameterArn), }, onDelete: removalPolicy != aws_cdk_lib_1.RemovalPolicy.RETAIN ? { region: props.region, service: "SSM", action: "deleteParameter", // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html#deleteParameter-property parameters: { Name: props.parameterName, }, physicalResourceId: custom_resources.PhysicalResourceId.of(this.parameterArn), } : undefined, policy: custom_resources.AwsCustomResourcePolicy.fromSdkCalls({ resources: custom_resources.AwsCustomResourcePolicy.ANY_RESOURCE, }), }); this.parameterName = props.parameterName; this.parameterType = ssm.ParameterType.STRING; this.stringValue = props.stringValue; } } exports.StringParameter = StringParameter; _a = JSII_RTTI_SYMBOL_1; StringParameter[_a] = { fqn: "@pepperize/cdk-ssm-parameters-cross-region.StringParameter", version: "0.0.536" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXBhcmFtZXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdHJpbmctcGFyYW1ldGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXVHO0FBQ3ZHLDJDQUEyQztBQUUzQyw4REFBOEQ7QUFDOUQsaUVBQWlFO0FBRWpFLHFEQUFtRTtBQUNuRSw2Q0FBMEM7QUFrRDFDLE1BQU0sYUFBYSxHQUFHLDJDQUEyQyxDQUFDO0FBRWxFLE1BQWEsZUFBZ0IsU0FBUSw4QkFBYTtJQUNoRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyw2QkFBNkIsQ0FDekMsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQWdDO1FBRWhDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBRTdELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPO1lBQ2pDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksMEJBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBRXhCLE1BQU0sTUFBTyxTQUFRLDhCQUFhO1lBTWhDO2dCQUNFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRWpCLElBQUksQ0FBQyxZQUFZLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUMzQyxPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsWUFBWSxhQUFhLEVBQUU7b0JBQ3JDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtpQkFDckIsQ0FB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QUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDdkMsQ0FBQzs7QUFoTEgsMENBaUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dFByb3ZpZGVyLCBSZW1vdmFsUG9saWN5LCBTdGFjaywgVGFnTWFuYWdlciwgVGFnVHlwZSwgVG9rZW5pemF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIjtcbmltcG9ydCB7IElTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSBcImF3cy1jZGstbGliL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYVwiO1xuaW1wb3J0ICogYXMgY3VzdG9tX3Jlc291cmNlcyBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFBhcmFtZXRlckJhc2UsIFBhcmFtZXRlck9wdGlvbnMgfSBmcm9tIFwiLi9wYXJhbWV0ZXItYmFzZVwiO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gXCIuL3ZhbGlkYXRvcnNcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG5lZWRlZCB0byBjcmVhdGUgYSBTdHJpbmcgU1NNIHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdQYXJhbWV0ZXJQcm9wcyBleHRlbmRzIFBhcmFtZXRlck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICpcbiAgICogSXQgbWF5IG5vdCBiZSBhXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IENsb3VkRm9ybWF0aW9uXG4gICAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdG8gY3JlYXRlIHRoZSBwYXJhbWV0ZXIgaW4uIFNlZSBBV1MuU1NNLnJlZ2lvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICpcbiAgICogSXQgbWF5IG5vdCByZWZlcmVuY2UgYW5vdGhlciBwYXJhbWV0ZXIgYW5kIGBge3t9fWBgIGNhbm5vdCBiZSB1c2VkIGluIHRoZSB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0cmluZ1ZhbHVlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmFtZXRlciwgc3VjaCBhcyBgdGV4dGAgb3IgYGF3czplYzI6aW1hZ2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVR5cGU/OiBzc20uUGFyYW1ldGVyRGF0YVR5cGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0YWluIG9yIGRlbGV0ZSB0aGUgcGFyYW1ldGVyIG9uIENsb3VkRm9ybWF0aW9uIGRlbGV0ZSBldmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzIGV4dGVuZHMgc3NtLlN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIHJlZ2lvbiB0byByZXRyaWV2ZSB0aGUgcGFyYW1ldGVyIGZyb20uIFNlZSBBV1MuU1NNLnJlZ2lvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xufVxuXG5jb25zdCBSRVNPVVJDRV9UWVBFID0gXCJDdXN0b206OlNTTV9TdHJpbmdfUGFyYW1ldGVyX0Nyb3NzX1JlZ2lvblwiO1xuXG5leHBvcnQgY2xhc3MgU3RyaW5nUGFyYW1ldGVyIGV4dGVuZHMgUGFyYW1ldGVyQmFzZSBpbXBsZW1lbnRzIHNzbS5JU3RyaW5nUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIEltcG9ydHMgYW4gZXh0ZXJuYWwgc3RyaW5nIHBhcmFtZXRlciB3aXRoIG5hbWUgYW5kIG9wdGlvbmFsIHZlcnNpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlc1xuICApOiBzc20uSVN0cmluZ1BhcmFtZXRlciB7XG4gICAgaWYgKCFhdHRycy5wYXJhbWV0ZXJOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXJOYW1lIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmdcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IGF0dHJzLnR5cGUgPz8gc3NtLlBhcmFtZXRlclR5cGUuU1RSSU5HO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IGF0dHJzLnZlcnNpb25cbiAgICAgID8gYCR7YXR0cnMucGFyYW1ldGVyTmFtZX06JHtUb2tlbml6YXRpb24uc3RyaW5naWZ5TnVtYmVyKGF0dHJzLnZlcnNpb24pfWBcbiAgICAgIDogYXR0cnMucGFyYW1ldGVyTmFtZTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFBhcmFtZXRlckJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJBcm46IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJUeXBlOiBzc20uUGFyYW1ldGVyVHlwZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdHJpbmdWYWx1ZTogc3RyaW5nO1xuXG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICB0aGlzLnBhcmFtZXRlckFybiA9IFN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgICAgc2VydmljZTogXCJzc21cIixcbiAgICAgICAgICByZXNvdXJjZTogYHBhcmFtZXRlciR7cGFyYW1ldGVyTmFtZX1gLFxuICAgICAgICAgIHJlZ2lvbjogYXR0cnMucmVnaW9uLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgY3VzdG9tX3Jlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IFJFU09VUkNFX1RZUEUsXG4gICAgICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgICAgIHJlZ2lvbjogYXR0cnMucmVnaW9uLFxuICAgICAgICAgICAgc2VydmljZTogXCJTU01cIixcbiAgICAgICAgICAgIGFjdGlvbjogXCJnZXRQYXJhbWV0ZXJcIiwgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9TU00uaHRtbCNnZXRQYXJhbWV0ZXItcHJvcGVydHlcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbV9yZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKHRoaXMucGFyYW1ldGVyQXJuKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgICAgICByZWdpb246IGF0dHJzLnJlZ2lvbixcbiAgICAgICAgICAgIHNlcnZpY2U6IFwiU1NNXCIsXG4gICAgICAgICAgICBhY3Rpb246IFwiZ2V0UGFyYW1ldGVyXCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvU1NNLmh0bWwjZ2V0UGFyYW1ldGVyLXByb3BlcnR5XG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIE5hbWU6IHBhcmFtZXRlck5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjdXN0b21fcmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZih0aGlzLnBhcmFtZXRlckFybiksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwb2xpY3k6IGN1c3RvbV9yZXNvdXJjZXMuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVNka0NhbGxzKHtcbiAgICAgICAgICAgIHJlc291cmNlczogY3VzdG9tX3Jlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5BTllfUkVTT1VSQ0UsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucGFyYW1ldGVyTmFtZSA9IGF0dHJzLnBhcmFtZXRlck5hbWU7XG4gICAgICAgIHRoaXMucGFyYW1ldGVyVHlwZSA9IHBhcmFtZXRlclR5cGU7XG4gICAgICAgIHRoaXMuc3RyaW5nVmFsdWUgPSBwYXJhbWV0ZXIuZ2V0UmVzcG9uc2VGaWVsZChcIlBhcmFtZXRlci5WYWx1ZVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYW4gZXh0ZXJuYWwgc3RyaW5nIHBhcmFtZXRlciBieSBuYW1lIGFuZCByZWdpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmdcbiAgKTogSVN0cmluZ1BhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IHBhcmFtZXRlck5hbWU6IHBhcmFtZXRlck5hbWUsIHJlZ2lvbjogcmVnaW9uIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSB2YWx1ZSBvZiBhbiBTU00gcGFyYW1ldGVyIGR1cmluZyBzeW50aGVzaXMgdGhyb3VnaCBhblxuICAgKiBlbnZpcm9ubWVudGFsIGNvbnRleHQgcHJvdmlkZXIuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIHN0YWNrIHRoaXMgc2NvcGUgaXMgZGVmaW5lZCBpbiB3aWxsIGhhdmUgZXhwbGljaXRcbiAgICogYWNjb3VudCBpbmZvcm1hdGlvbi4gT3RoZXJ3aXNlLCBpdCB3aWxsIGZhaWwgZHVyaW5nIHN5bnRoZXNpcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsdWVGcm9tTG9va3VwKHNjb3BlOiBDb25zdHJ1Y3QsIHJlZ2lvbjogc3RyaW5nLCBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBDb250ZXh0UHJvdmlkZXIuZ2V0VmFsdWUoc2NvcGUsIHtcbiAgICAgIHByb3ZpZGVyOiBjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuU1NNX1BBUkFNRVRFUl9QUk9WSURFUixcbiAgICAgIHByb3BzOiB7IHBhcmFtZXRlck5hbWU6IHBhcmFtZXRlck5hbWUsIHJlZ2lvbjogcmVnaW9uIH0sXG4gICAgICBkdW1teVZhbHVlOiBgZHVtbXktdmFsdWUtZm9yLSR7cGFyYW1ldGVyTmFtZX1gLFxuICAgIH0pLnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlckFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RyaW5nVmFsdWU6IHN0cmluZztcblxuICByZWFkb25seSB0YWdzID0gbmV3IFRhZ01hbmFnZXIoVGFnVHlwZS5LRVlfVkFMVUUsIFJFU09VUkNFX1RZUEUpO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdHJpbmdQYXJhbWV0ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5wYXJhbWV0ZXJOYW1lLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmFsbG93ZWRQYXR0ZXJuKSB7XG4gICAgICBWYWxpZGF0b3JzLnBhcmFtZXRlclZhbHVlKHByb3BzLnN0cmluZ1ZhbHVlLCBwcm9wcy5hbGxvd2VkUGF0dGVybik7XG4gICAgfVxuICAgIFZhbGlkYXRvcnMucGFyYW1ldGVyTmFtZShwcm9wcy5wYXJhbWV0ZXJOYW1lKTtcbiAgICBWYWxpZGF0b3JzLmRlc2NyaXB0aW9uKHByb3BzLmRlc2NyaXB0aW9uKTtcblxuICAgIHRoaXMucGFyYW1ldGVyQXJuID0gU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6IFwic3NtXCIsXG4gICAgICByZXNvdXJjZTogYHBhcmFtZXRlciR7cHJvcHMucGFyYW1ldGVyTmFtZX1gLFxuICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZW1vdmFsUG9saWN5ID0gcHJvcHMucmVtb3ZhbFBvbGljeSA/PyBSZW1vdmFsUG9saWN5LkRFU1RST1k7XG5cbiAgICBuZXcgY3VzdG9tX3Jlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIHJlc291cmNlVHlwZTogUkVTT1VSQ0VfVFlQRSxcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgICBzZXJ2aWNlOiBcIlNTTVwiLFxuICAgICAgICBhY3Rpb246IFwicHV0UGFyYW1ldGVyXCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvU1NNLmh0bWwjcHV0UGFyYW1ldGVyLXByb3BlcnR5XG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBOYW1lOiBwcm9wcy5wYXJhbWV0ZXJOYW1lLFxuICAgICAgICAgIFZhbHVlOiBwcm9wcy5zdHJpbmdWYWx1ZSxcbiAgICAgICAgICBBbGxvd2VkUGF0dGVybjogcHJvcHMuYWxsb3dlZFBhdHRlcm4sXG4gICAgICAgICAgRGF0YVR5cGU6IHByb3BzLmRhdGFUeXBlLFxuICAgICAgICAgIERlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICBUYWdzOiB0aGlzLnRhZ3MucmVuZGVyZWRUYWdzLFxuICAgICAgICAgIFRpZXI6IHByb3BzLnRpZXIsXG4gICAgICAgICAgVHlwZTogc3NtLlBhcmFtZXRlclR5cGUuU1RSSU5HLFxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbV9yZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKHRoaXMucGFyYW1ldGVyQXJuKSxcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICByZWdpb246IHByb3BzLnJlZ2lvbixcbiAgICAgICAgc2VydmljZTogXCJTU01cIixcbiAgICAgICAgYWN0aW9uOiBcInB1dFBhcmFtZXRlclwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL1NTTS5odG1sI3B1dFBhcmFtZXRlci1wcm9wZXJ0eVxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgTmFtZTogcHJvcHMucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICBWYWx1ZTogcHJvcHMuc3RyaW5nVmFsdWUsXG4gICAgICAgICAgQWxsb3dlZFBhdHRlcm46IHByb3BzLmFsbG93ZWRQYXR0ZXJuLFxuICAgICAgICAgIERhdGFUeXBlOiBwcm9wcy5kYXRhVHlwZSxcbiAgICAgICAgICBEZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgVGFnczogdGhpcy50YWdzLnJlbmRlcmVkVGFncyxcbiAgICAgICAgICBUaWVyOiBwcm9wcy50aWVyLFxuICAgICAgICAgIFR5cGU6IHNzbS5QYXJhbWV0ZXJUeXBlLlNUUklORyxcbiAgICAgICAgICBPdmVyd3JpdGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tX3Jlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YodGhpcy5wYXJhbWV0ZXJBcm4pLFxuICAgICAgfSxcbiAgICAgIG9uRGVsZXRlOlxuICAgICAgICByZW1vdmFsUG9saWN5ICE9IFJlbW92YWxQb2xpY3kuUkVUQUlOXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgICAgICAgICBzZXJ2aWNlOiBcIlNTTVwiLFxuICAgICAgICAgICAgICBhY3Rpb246IFwiZGVsZXRlUGFyYW1ldGVyXCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvU1NNLmh0bWwjZGVsZXRlUGFyYW1ldGVyLXByb3BlcnR5XG4gICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICBOYW1lOiBwcm9wcy5wYXJhbWV0ZXJOYW1lLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbV9yZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKHRoaXMucGFyYW1ldGVyQXJuKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHBvbGljeTogY3VzdG9tX3Jlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICByZXNvdXJjZXM6IGN1c3RvbV9yZXNvdXJjZXMuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuQU5ZX1JFU09VUkNFLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhcmFtZXRlck5hbWUgPSBwcm9wcy5wYXJhbWV0ZXJOYW1lO1xuICAgIHRoaXMucGFyYW1ldGVyVHlwZSA9IHNzbS5QYXJhbWV0ZXJUeXBlLlNUUklORztcbiAgICB0aGlzLnN0cmluZ1ZhbHVlID0gcHJvcHMuc3RyaW5nVmFsdWU7XG4gIH1cbn1cbiJdfQ==