@cdklabs/cdk-amazonmq
Version:
<!--BEGIN STABILITY BANNER-->
139 lines • 19.6 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BrokerConfiguration = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/*
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
const aws_cdk_lib_1 = require("aws-cdk-lib");
const aws_amazonmq_1 = require("aws-cdk-lib/aws-amazonmq");
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
const activemq_authentication_strategy_1 = require("./activemq/activemq-authentication-strategy");
const configuration_association_1 = require("./configuration-association");
class BrokerConfiguration extends aws_cdk_lib_1.Resource {
/***
* @internal
*/
static _fromAttributes(scope, logicalId, attrs) {
if (attrs.id === undefined && attrs.arn === undefined) {
throw new Error("Either 'id' or 'arn' needs to be defined");
}
const { id, arn } = attrs;
class Import extends aws_cdk_lib_1.Resource {
constructor() {
super(scope, logicalId);
this.revision = attrs.revision;
this.arn = arn
? arn
: aws_cdk_lib_1.Stack.of(this).formatArn({
service: "mq",
resource: "configuration",
resourceName: id,
arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
});
this.id = id
? id
: aws_cdk_lib_1.Arn.split(arn, aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME).resourceName;
}
}
return new Import();
}
constructor(scope, id, props) {
super(scope, id, {
physicalName: props.configurationName ||
aws_cdk_lib_1.Lazy.string({
produce: () => aws_cdk_lib_1.Names.uniqueResourceName(this, {
maxLength: 150,
allowedSpecialCharacters: "-._~",
}),
}),
});
this.isAuthenticationStrategySet = false;
this.isEngineVersionSet = false;
const resource = new aws_amazonmq_1.CfnConfiguration(this, "Resource", {
name: this.physicalName,
description: props.description,
data: aws_cdk_lib_1.Fn.base64(props.data),
engineType: props.engine,
authenticationStrategy: aws_cdk_lib_1.Lazy.string({
produce: () => this._authenticationStrategy,
}),
engineVersion: aws_cdk_lib_1.Lazy.string({ produce: () => this._engineVersion }),
});
this.id = this.getResourceNameAttribute(resource.ref);
this.arn = this.getResourceArnAttribute(resource.attrArn, {
service: "mq",
resource: "configuration",
resourceName: this.physicalName,
arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
});
this.revision = resource.attrRevision;
this.configureEngineVersion(props.engineVersion);
this.configureAuthenticationStrategy(props.authenticationStrategy);
}
configureEngineVersion(engineVersion) {
if (engineVersion) {
if (!this.isEngineVersionSet) {
this._engineVersion = engineVersion;
this.isEngineVersionSet = true;
}
else if (this._engineVersion !== engineVersion) {
throw new Error(`A configuraiton can be associated with only one engine version. (current: ${this._engineVersion}, new: ${engineVersion})`);
}
}
}
configureAuthenticationStrategy(authenticationStrategy) {
// TODO: think if this is the best approach
// maybe we should compeare and fail if things are/aren't set
if (!this.isAuthenticationStrategySet) {
this._authenticationStrategy = authenticationStrategy;
this.isAuthenticationStrategySet = true;
}
else if (this._authenticationStrategy !== authenticationStrategy) {
// INFO: this way, as the default is simple, so an undefined will equal SIMPLE
if (this._authenticationStrategy === activemq_authentication_strategy_1.ActiveMqAuthenticationStrategy.LDAP ||
authenticationStrategy === activemq_authentication_strategy_1.ActiveMqAuthenticationStrategy.LDAP) {
throw new Error(`A configuration can be assigned only a single authentication strategy. (current: ${this._authenticationStrategy}, new: ${authenticationStrategy})`);
}
}
}
/***
* @internal
*/
_associateWith(broker) {
this.configureEngineVersion(broker._engineVersion);
this.configureAuthenticationStrategy(broker._authenticationStrategy);
return new configuration_association_1.ConfigurationAssociation(this, "Configuration", {
broker,
configuration: this,
});
}
/***
* @internal
*/
_createRevisor(data, description) {
const call = {
service: "mq",
action: "UpdateConfiguration",
parameters: {
ConfigurationId: this.id,
Data: aws_cdk_lib_1.Fn.base64(data),
Description: description,
},
physicalResourceId: custom_resources_1.PhysicalResourceId.fromResponse("Id"),
};
const revisor = new custom_resources_1.AwsCustomResource(this, "Revisor", {
onCreate: call,
policy: custom_resources_1.AwsCustomResourcePolicy.fromSdkCalls({
resources: [this.arn],
}),
});
return revisor;
}
}
exports.BrokerConfiguration = BrokerConfiguration;
_a = JSII_RTTI_SYMBOL_1;
BrokerConfiguration[_a] = { fqn: "@cdklabs/cdk-amazonmq.BrokerConfiguration", version: "0.1.8" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7OztFQUdFO0FBQ0YsNkNBU3FCO0FBQ3JCLDJEQUE0RDtBQUM1RCxtRUFLc0M7QUFFdEMsa0dBQTZGO0FBRTdGLDJFQUF1RTtBQXVCdkUsTUFBc0IsbUJBQ3BCLFNBQVEsc0JBQVE7SUFHaEI7O09BRUc7SUFDTyxNQUFNLENBQUMsZUFBZSxDQUM5QixLQUFnQixFQUNoQixTQUFpQixFQUNqQixLQUFvQztRQUVwQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUUxQixNQUFNLE1BQU8sU0FBUSxzQkFBUTtZQUkzQjtnQkFDRSxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRztvQkFDWixDQUFDLENBQUMsR0FBRztvQkFDTCxDQUFDLENBQUMsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO3dCQUN2QixPQUFPLEVBQUUsSUFBSTt3QkFDYixRQUFRLEVBQUUsZUFBZTt3QkFDekIsWUFBWSxFQUFFLEVBQUU7d0JBQ2hCLFNBQVMsRUFBRSx1QkFBUyxDQUFDLG1CQUFtQjtxQkFDekMsQ0FBQyxDQUFDO2dCQUNQLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRTtvQkFDVixDQUFDLENBQUMsRUFBRTtvQkFDSixDQUFDLENBQUMsaUJB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LEVBQUUsMENBQXVCLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ3RCLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOztBQWxLSCxrREFtS0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuKi9cbmltcG9ydCB7XG4gIEFybixcbiAgQXJuRm9ybWF0LFxuICBGbixcbiAgSVJlc291cmNlLFxuICBMYXp5LFxuICBOYW1lcyxcbiAgUmVzb3VyY2UsXG4gIFN0YWNrLFxufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENmbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFtYXpvbm1xXCI7XG5pbXBvcnQge1xuICBBd3NDdXN0b21SZXNvdXJjZSxcbiAgQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3ksXG4gIEF3c1Nka0NhbGwsXG4gIFBoeXNpY2FsUmVzb3VyY2VJZCxcbn0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBY3RpdmVNcUF1dGhlbnRpY2F0aW9uU3RyYXRlZ3kgfSBmcm9tIFwiLi9hY3RpdmVtcS9hY3RpdmVtcS1hdXRoZW50aWNhdGlvbi1zdHJhdGVneVwiO1xuaW1wb3J0IHsgQnJva2VyRW5naW5lLCBJQnJva2VyRGVwbG95bWVudCB9IGZyb20gXCIuL2Jyb2tlci1kZXBsb3ltZW50XCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uQXNzb2NpYXRpb24gfSBmcm9tIFwiLi9jb25maWd1cmF0aW9uLWFzc29jaWF0aW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJhdGlvblByb3BzIHtcbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSBkYXRhOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVuZ2luZTogQnJva2VyRW5naW5lO1xuICByZWFkb25seSBlbmdpbmVWZXJzaW9uPzogc3RyaW5nO1xuICByZWFkb25seSBhdXRoZW50aWNhdGlvblN0cmF0ZWd5PzogQWN0aXZlTXFBdXRoZW50aWNhdGlvblN0cmF0ZWd5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCcm9rZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldmlzaW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJva2VyQ29uZmlndXJhdGlvbkF0dHJpYnV0ZXMge1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkgYXJuPzogc3RyaW5nO1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnJva2VyQ29uZmlndXJhdGlvblxuICBleHRlbmRzIFJlc291cmNlXG4gIGltcGxlbWVudHMgSUJyb2tlckNvbmZpZ3VyYXRpb25cbntcbiAgLyoqKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgX2Zyb21BdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgbG9naWNhbElkOiBzdHJpbmcsXG4gICAgYXR0cnM6IEJyb2tlckNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzLFxuICApOiBJQnJva2VyQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGF0dHJzLmlkID09PSB1bmRlZmluZWQgJiYgYXR0cnMuYXJuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVpdGhlciAnaWQnIG9yICdhcm4nIG5lZWRzIHRvIGJlIGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBpZCwgYXJuIH0gPSBhdHRycztcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSUJyb2tlckNvbmZpZ3VyYXRpb24ge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcmV2aXNpb246IG51bWJlcjtcbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihzY29wZSwgbG9naWNhbElkKTtcbiAgICAgICAgdGhpcy5yZXZpc2lvbiA9IGF0dHJzLnJldmlzaW9uO1xuICAgICAgICB0aGlzLmFybiA9IGFyblxuICAgICAgICAgID8gYXJuXG4gICAgICAgICAgOiBTdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgICBzZXJ2aWNlOiBcIm1xXCIsXG4gICAgICAgICAgICAgIHJlc291cmNlOiBcImNvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBpZCxcbiAgICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlkID0gaWRcbiAgICAgICAgICA/IGlkXG4gICAgICAgICAgOiBBcm4uc3BsaXQoYXJuISwgQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUpLnJlc291cmNlTmFtZSE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBhcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIF9hdXRoZW50aWNhdGlvblN0cmF0ZWd5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNBdXRoZW50aWNhdGlvblN0cmF0ZWd5U2V0OiBib29sZWFuID0gZmFsc2U7XG4gIC8qKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2VuZ2luZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpc0VuZ2luZVZlcnNpb25TZXQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29uZmlndXJhdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6XG4gICAgICAgIHByb3BzLmNvbmZpZ3VyYXRpb25OYW1lIHx8XG4gICAgICAgIExhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAxNTAsXG4gICAgICAgICAgICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogXCItLl9+XCIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5Db25maWd1cmF0aW9uKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBkYXRhOiBGbi5iYXNlNjQocHJvcHMuZGF0YSksXG4gICAgICBlbmdpbmVUeXBlOiBwcm9wcy5lbmdpbmUsXG4gICAgICBhdXRoZW50aWNhdGlvblN0cmF0ZWd5OiBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuX2F1dGhlbnRpY2F0aW9uU3RyYXRlZ3ksXG4gICAgICB9KSxcbiAgICAgIGVuZ2luZVZlcnNpb246IExhenkuc3RyaW5nKHsgcHJvZHVjZTogKCkgPT4gdGhpcy5fZW5naW5lVmVyc2lvbiB9KSxcbiAgICB9KTtcblxuICAgIHRoaXMuaWQgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShyZXNvdXJjZS5yZWYpO1xuICAgIHRoaXMuYXJuID0gdGhpcy5nZXRSZXNvdXJjZUFybkF0dHJpYnV0ZShyZXNvdXJjZS5hdHRyQXJuLCB7XG4gICAgICBzZXJ2aWNlOiBcIm1xXCIsXG4gICAgICByZXNvdXJjZTogXCJjb25maWd1cmF0aW9uXCIsXG4gICAgICByZXNvdXJjZU5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICB9KTtcblxuICAgIHRoaXMucmV2aXNpb24gPSByZXNvdXJjZS5hdHRyUmV2aXNpb247XG4gICAgdGhpcy5jb25maWd1cmVFbmdpbmVWZXJzaW9uKHByb3BzLmVuZ2luZVZlcnNpb24pO1xuICAgIHRoaXMuY29uZmlndXJlQXV0aGVudGljYXRpb25TdHJhdGVneShwcm9wcy5hdXRoZW50aWNhdGlvblN0cmF0ZWd5KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlRW5naW5lVmVyc2lvbihlbmdpbmVWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoZW5naW5lVmVyc2lvbikge1xuICAgICAgaWYgKCF0aGlzLmlzRW5naW5lVmVyc2lvblNldCkge1xuICAgICAgICB0aGlzLl9lbmdpbmVWZXJzaW9uID0gZW5naW5lVmVyc2lvbjtcbiAgICAgICAgdGhpcy5pc0VuZ2luZVZlcnNpb25TZXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9lbmdpbmVWZXJzaW9uICE9PSBlbmdpbmVWZXJzaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQSBjb25maWd1cmFpdG9uIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggb25seSBvbmUgZW5naW5lIHZlcnNpb24uIChjdXJyZW50OiAke3RoaXMuX2VuZ2luZVZlcnNpb259LCBuZXc6ICR7ZW5naW5lVmVyc2lvbn0pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZUF1dGhlbnRpY2F0aW9uU3RyYXRlZ3koXG4gICAgYXV0aGVudGljYXRpb25TdHJhdGVneTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICAvLyBUT0RPOiB0aGluayBpZiB0aGlzIGlzIHRoZSBiZXN0IGFwcHJvYWNoXG4gICAgLy8gICAgICAgbWF5YmUgd2Ugc2hvdWxkIGNvbXBlYXJlIGFuZCBmYWlsIGlmIHRoaW5ncyBhcmUvYXJlbid0IHNldFxuICAgIGlmICghdGhpcy5pc0F1dGhlbnRpY2F0aW9uU3RyYXRlZ3lTZXQpIHtcbiAgICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uU3RyYXRlZ3kgPSBhdXRoZW50aWNhdGlvblN0cmF0ZWd5O1xuICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0aW9uU3RyYXRlZ3lTZXQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fYXV0aGVudGljYXRpb25TdHJhdGVneSAhPT0gYXV0aGVudGljYXRpb25TdHJhdGVneSkge1xuICAgICAgLy8gSU5GTzogdGhpcyB3YXksIGFzIHRoZSBkZWZhdWx0IGlzIHNpbXBsZSwgc28gYW4gdW5kZWZpbmVkIHdpbGwgZXF1YWwgU0lNUExFXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uU3RyYXRlZ3kgPT09IEFjdGl2ZU1xQXV0aGVudGljYXRpb25TdHJhdGVneS5MREFQIHx8XG4gICAgICAgIGF1dGhlbnRpY2F0aW9uU3RyYXRlZ3kgPT09IEFjdGl2ZU1xQXV0aGVudGljYXRpb25TdHJhdGVneS5MREFQXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGFzc2lnbmVkIG9ubHkgYSBzaW5nbGUgYXV0aGVudGljYXRpb24gc3RyYXRlZ3kuIChjdXJyZW50OiAke3RoaXMuX2F1dGhlbnRpY2F0aW9uU3RyYXRlZ3l9LCBuZXc6ICR7YXV0aGVudGljYXRpb25TdHJhdGVneX0pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKioqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIF9hc3NvY2lhdGVXaXRoKGJyb2tlcjogSUJyb2tlckRlcGxveW1lbnQpIHtcbiAgICB0aGlzLmNvbmZpZ3VyZUVuZ2luZVZlcnNpb24oYnJva2VyLl9lbmdpbmVWZXJzaW9uKTtcbiAgICB0aGlzLmNvbmZpZ3VyZUF1dGhlbnRpY2F0aW9uU3RyYXRlZ3koYnJva2VyLl9hdXRoZW50aWNhdGlvblN0cmF0ZWd5KTtcblxuICAgIHJldHVybiBuZXcgQ29uZmlndXJhdGlvbkFzc29jaWF0aW9uKHRoaXMsIFwiQ29uZmlndXJhdGlvblwiLCB7XG4gICAgICBicm9rZXIsXG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfY3JlYXRlUmV2aXNvcihkYXRhOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgY29uc3QgY2FsbDogQXdzU2RrQ2FsbCA9IHtcbiAgICAgIHNlcnZpY2U6IFwibXFcIixcbiAgICAgIGFjdGlvbjogXCJVcGRhdGVDb25maWd1cmF0aW9uXCIsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIENvbmZpZ3VyYXRpb25JZDogdGhpcy5pZCxcbiAgICAgICAgRGF0YTogRm4uYmFzZTY0KGRhdGEpLFxuICAgICAgICBEZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICB9LFxuICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQuZnJvbVJlc3BvbnNlKFwiSWRcIiksXG4gICAgfTtcblxuICAgIGNvbnN0IHJldmlzb3IgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJSZXZpc29yXCIsIHtcbiAgICAgIG9uQ3JlYXRlOiBjYWxsLFxuICAgICAgcG9saWN5OiBBd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICByZXNvdXJjZXM6IFt0aGlzLmFybl0sXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXZpc29yO1xuICB9XG59XG4iXX0=