@aws-cdk/aws-msk-alpha
Version:
The CDK Construct Library for AWS::MSK
204 lines • 22.6 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
var useValue = arguments.length > 2;
for (var i = 0; i < initializers.length; i++) {
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
}
return useValue ? value : void 0;
};
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
var _, done = false;
for (var i = decorators.length - 1; i >= 0; i--) {
var context = {};
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
if (kind === "accessor") {
if (result === void 0) continue;
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
if (_ = accept(result.get)) descriptor.get = _;
if (_ = accept(result.set)) descriptor.set = _;
if (_ = accept(result.init)) initializers.unshift(_);
}
else if (_ = accept(result)) {
if (kind === "field") initializers.unshift(_);
else descriptor[key] = _;
}
}
if (target) Object.defineProperty(target, contextIn.name, descriptor);
done = true;
};
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.ServerlessCluster = void 0;
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const ec2 = __importStar(require("aws-cdk-lib/aws-ec2"));
const aws_msk_1 = require("aws-cdk-lib/aws-msk");
const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
const _1 = require(".");
/**
* Create a MSK Serverless Cluster.
*
* @resource AWS::MSK::ServerlessCluster
*/
let ServerlessCluster = (() => {
let _classDecorators = [prop_injectable_1.propertyInjectable];
let _classDescriptor;
let _classExtraInitializers = [];
let _classThis;
let _classSuper = _1.ClusterBase;
let _instanceExtraInitializers = [];
let _get_clusterName_decorators;
let _get_clusterArn_decorators;
var ServerlessCluster = class extends _classSuper {
static { _classThis = this; }
static {
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
_get_clusterName_decorators = [helpers_internal_1.memoizedGetter];
_get_clusterArn_decorators = [helpers_internal_1.memoizedGetter];
__esDecorate(this, null, _get_clusterName_decorators, { kind: "getter", name: "clusterName", static: false, private: false, access: { has: obj => "clusterName" in obj, get: obj => obj.clusterName }, metadata: _metadata }, null, _instanceExtraInitializers);
__esDecorate(this, null, _get_clusterArn_decorators, { kind: "getter", name: "clusterArn", static: false, private: false, access: { has: obj => "clusterArn" in obj, get: obj => obj.clusterArn }, metadata: _metadata }, null, _instanceExtraInitializers);
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
ServerlessCluster = _classThis = _classDescriptor.value;
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
}
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-msk-alpha.ServerlessCluster", version: "2.260.0-alpha.0" };
/** Uniquely identifies this class. */
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-msk-alpha.ServerlessCluster';
/**
* Reference an existing cluster, defined outside of the CDK code, by name.
*/
static fromClusterArn(scope, id, clusterArn) {
class Import extends _1.ClusterBase {
clusterArn = clusterArn;
clusterName = aws_cdk_lib_1.Fn.select(1, aws_cdk_lib_1.Fn.split('/', clusterArn)); // ['arn:partition:kafka:region:account-id', clusterName, clusterId]
}
return new Import(scope, id);
}
resource = __runInitializers(this, _instanceExtraInitializers);
_securityGroups = [];
constructor(scope, id, props) {
super(scope, id, {
physicalName: props.clusterName ??
aws_cdk_lib_1.Lazy.string({
produce: () => aws_cdk_lib_1.Names.uniqueResourceName(this, { maxLength: 64 }),
}),
});
try {
jsiiDeprecationWarnings._aws_cdk_aws_msk_alpha_ServerlessClusterProps(props);
}
catch (error) {
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
Error.captureStackTrace(error, ServerlessCluster);
}
throw error;
}
// Enhanced CDK Analytics Telemetry
(0, metadata_resource_1.addConstructMetadata)(this, props);
if (props.vpcConfigs.length < 1 || props.vpcConfigs.length > 5) {
throw new aws_cdk_lib_1.ValidationError((0, helpers_internal_1.lit) `InvalidVpcConfigCount`, `\`vpcConfigs\` must contain between 1 and 5 configurations, got ${props.vpcConfigs.length} configurations.`, this);
}
const vpcConfigs = props.vpcConfigs.map((vpcConfig, index) => this._renderVpcConfig(vpcConfig, index));
this._connections = new ec2.Connections({
securityGroups: this._securityGroups,
});
/**
* TODO At the time of implementation, MSK Serverless only supports IAM authentication, so it cannot be disabled.
* If it becomes configurable in the future, the property will need to be exposed.
*
* @see https://docs.aws.amazon.com/msk/latest/developerguide/serverless.html
*/
this.resource = new aws_msk_1.CfnServerlessCluster(this, 'Resource', {
clusterName: this.physicalName,
clientAuthentication: {
sasl: {
iam: {
enabled: true,
},
},
},
vpcConfigs,
});
}
get clusterName() {
return this.getResourceNameAttribute(aws_cdk_lib_1.Fn.select(1, aws_cdk_lib_1.Fn.split('/', this.resource.ref)));
}
get clusterArn() {
return this.resource.ref;
}
/**
* Render Vpc Config property
*/
_renderVpcConfig(vpcConfig, index) {
const subnetSelection = vpcConfig.vpc.selectSubnets(vpcConfig.vpcSubnets);
if (subnetSelection.subnets.length < 2) {
throw new aws_cdk_lib_1.ValidationError((0, helpers_internal_1.lit) `ServerlessClusterInsufficientSubnets`, `Cluster requires at least 2 subnets, got ${subnetSelection.subnets.length} subnet.`, this);
}
let securityGroups = [];
if (vpcConfig.securityGroups) {
if (vpcConfig.securityGroups.length < 1 || vpcConfig.securityGroups.length > 5) {
throw new aws_cdk_lib_1.ValidationError((0, helpers_internal_1.lit) `InvalidSecurityGroupCount`, `\`securityGroups\` must contain between 1 and 5 elements, got ${vpcConfig.securityGroups.length} elements.`, this);
}
securityGroups = vpcConfig.securityGroups;
}
else {
securityGroups.push(new ec2.SecurityGroup(this, `SecurityGroup-${index}`, {
description: 'MSK Serverless security group',
vpc: vpcConfig.vpc,
}));
}
this._securityGroups.push(...securityGroups);
return {
subnetIds: subnetSelection.subnets.map((subnet) => subnet.subnetId),
securityGroups: securityGroups?.map((securityGroup) => securityGroup.securityGroupId),
};
}
static {
__runInitializers(_classThis, _classExtraInitializers);
}
};
return ServerlessCluster = _classThis;
})();
exports.ServerlessCluster = ServerlessCluster;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVybGVzcy1jbHVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VydmVybGVzcy1jbHVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUErRDtBQUMvRCx5REFBMkM7QUFDM0MsaURBQTJEO0FBQzNELDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRzFFLHdCQUFnQztBQThDaEM7Ozs7R0FJRztJQUVVLGlCQUFpQjs0QkFEN0Isb0NBQWtCOzs7O3NCQUNvQixjQUFXOzs7O2lDQUFuQixTQUFRLFdBQVc7Ozs7MkNBK0QvQyxpQ0FBYzswQ0FPZCxpQ0FBYztZQU5mLHdMQUFXLFdBQVcsNkRBSXJCO1lBR0QscUxBQVcsVUFBVSw2REFFcEI7WUF6RUgsNktBMEdDOzs7OztRQXpHQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLDBDQUEwQyxDQUFDO1FBRWxHOztXQUVHO1FBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FDMUIsS0FBMkIsRUFDM0IsRUFBVSxFQUNWLFVBQWtCO1lBRWxCLE1BQU0sTUFBTyxTQUFRLGNBQVc7Z0JBQ2QsVUFBVSxHQUFHLFVBQVUsQ0FBQztnQkFDeEIsV0FBVyxHQUFHLGdCQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxnQkFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9FQUFvRTthQUM1STtZQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlCO1FBRU8sUUFBUSxHQXBCTCxtREFBaUIsQ0FvQlc7UUFFL0IsZUFBZSxHQUF5QixFQUFFLENBQUM7UUFFbkQsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtZQUNoRixLQUFLLENB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QUFHLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxpQkFBaUIsS0FBSyxFQUFFLEVBQUU7b0JBQ3hFLFdBQVcsRUFBRSwrQkFBK0I7b0JBQzVDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRztpQkFDbkIsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1lBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztZQUU3QyxPQUFPO2dCQUNMLFNBQVMsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDbkUsY0FBYyxFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUM7YUFDdEYsQ0FBQztTQUNIOztZQXpHVSx1REFBaUI7Ozs7O0FBQWpCLDhDQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZuLCBMYXp5LCBOYW1lcywgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ2ZuU2VydmVybGVzc0NsdXN0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbXNrJztcbmltcG9ydCB7IG1lbW9pemVkR2V0dGVyLCBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSUNsdXN0ZXIgfSBmcm9tICcuJztcbmltcG9ydCB7IENsdXN0ZXJCYXNlIH0gZnJvbSAnLic7XG5cbi8qKlxuICogIFByb3BlcnRpZXMgZm9yIGEgTVNLIFNlcnZlcmxlc3MgQ2x1c3RlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlcmxlc3NDbHVzdGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIHBoeXNpY2FsIG5hbWUgb2YgdGhlIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3Rlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBBbWF6b24gVlBDcyBmb3IgdGhlIGNsdXN0ZXIuXG4gICAqIFlvdSBjYW4gc3BlY2lmeSB1cCB0byA1IFZQQyBjb25maWd1cmF0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0NvbmZpZ3M6IFZwY0NvbmZpZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBBbWF6b24gVlBDcyBmb3IgdGhlIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjQ29uZmlnIHtcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHZpcnR1YWwgbmV0d29ya2luZyBlbnZpcm9ubWVudCBmb3IgdGhpcyBjbHVzdGVyLlxuICAgKiBNdXN0IGhhdmUgYXQgbGVhc3QgMiBzdWJuZXRzIGluIHR3byBkaWZmZXJlbnQgQVpzLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcblxuICAvKipcbiAgICogVGhlIHN1Ym5ldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBWcGMgZGVmYXVsdCBzdHJhdGVneSBpZiBub3Qgc3BlY2lmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN1cml0eSBncm91cHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjbHVzdGVyLlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gNSBzZWN1cml0eSBncm91cHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY3JlYXRlIG5ldyBzZWN1cml0eSBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBlYzIuSVNlY3VyaXR5R3JvdXBbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBNU0sgU2VydmVybGVzcyBDbHVzdGVyLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6Ok1TSzo6U2VydmVybGVzc0NsdXN0ZXJcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFNlcnZlcmxlc3NDbHVzdGVyIGV4dGVuZHMgQ2x1c3RlckJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1tc2stYWxwaGEuU2VydmVybGVzc0NsdXN0ZXInO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgYW4gZXhpc3RpbmcgY2x1c3RlciwgZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSBDREsgY29kZSwgYnkgbmFtZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNsdXN0ZXJBcm4oXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY2x1c3RlckFybjogc3RyaW5nLFxuICApOiBJQ2x1c3RlciB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQ2x1c3RlckJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJBcm4gPSBjbHVzdGVyQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJOYW1lID0gRm4uc2VsZWN0KDEsIEZuLnNwbGl0KCcvJywgY2x1c3RlckFybikpOyAvLyBbJ2FybjpwYXJ0aXRpb246a2Fma2E6cmVnaW9uOmFjY291bnQtaWQnLCBjbHVzdGVyTmFtZSwgY2x1c3RlcklkXVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIHJlc291cmNlOiBDZm5TZXJ2ZXJsZXNzQ2x1c3RlcjtcblxuICBwcml2YXRlIF9zZWN1cml0eUdyb3VwczogZWMyLklTZWN1cml0eUdyb3VwW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTZXJ2ZXJsZXNzQ2x1c3RlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLmNsdXN0ZXJOYW1lID8/XG4gICAgICAgIExhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDY0IH0pLFxuICAgICAgICB9KSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy52cGNDb25maWdzLmxlbmd0aCA8IDEgfHwgcHJvcHMudnBjQ29uZmlncy5sZW5ndGggPiA1KSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkVnBjQ29uZmlnQ291bnRgLCBgXFxgdnBjQ29uZmlnc1xcYCBtdXN0IGNvbnRhaW4gYmV0d2VlbiAxIGFuZCA1IGNvbmZpZ3VyYXRpb25zLCBnb3QgJHtwcm9wcy52cGNDb25maWdzLmxlbmd0aH0gY29uZmlndXJhdGlvbnMuYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3QgdnBjQ29uZmlncyA9IHByb3BzLnZwY0NvbmZpZ3MubWFwKCh2cGNDb25maWcsIGluZGV4KSA9PiB0aGlzLl9yZW5kZXJWcGNDb25maWcodnBjQ29uZmlnLCBpbmRleCkpO1xuXG4gICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiB0aGlzLl9zZWN1cml0eUdyb3VwcyxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQXQgdGhlIHRpbWUgb2YgaW1wbGVtZW50YXRpb24sIE1TSyBTZXJ2ZXJsZXNzIG9ubHkgc3VwcG9ydHMgSUFNIGF1dGhlbnRpY2F0aW9uLCBzbyBpdCBjYW5ub3QgYmUgZGlzYWJsZWQuXG4gICAgICogSWYgaXQgYmVjb21lcyBjb25maWd1cmFibGUgaW4gdGhlIGZ1dHVyZSwgdGhlIHByb3BlcnR5IHdpbGwgbmVlZCB0byBiZSBleHBvc2VkLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbXNrL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2ZXJsZXNzLmh0bWxcbiAgICAgKi9cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblNlcnZlcmxlc3NDbHVzdGVyKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGNsdXN0ZXJOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGNsaWVudEF1dGhlbnRpY2F0aW9uOiB7XG4gICAgICAgIHNhc2w6IHtcbiAgICAgICAgICBpYW06IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB2cGNDb25maWdzLFxuICAgIH0pO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY2x1c3Rlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZU5hbWVBdHRyaWJ1dGUoXG4gICAgICBGbi5zZWxlY3QoMSwgRm4uc3BsaXQoJy8nLCB0aGlzLnJlc291cmNlLnJlZikpLFxuICAgICk7XG4gIH1cblxuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBjbHVzdGVyQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UucmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBWcGMgQ29uZmlnIHByb3BlcnR5XG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJWcGNDb25maWcodnBjQ29uZmlnOiBWcGNDb25maWcsIGluZGV4OiBudW1iZXIpOiBDZm5TZXJ2ZXJsZXNzQ2x1c3Rlci5WcGNDb25maWdQcm9wZXJ0eSB7XG4gICAgY29uc3Qgc3VibmV0U2VsZWN0aW9uID0gdnBjQ29uZmlnLnZwYy5zZWxlY3RTdWJuZXRzKHZwY0NvbmZpZy52cGNTdWJuZXRzKTtcblxuICAgIGlmIChzdWJuZXRTZWxlY3Rpb24uc3VibmV0cy5sZW5ndGggPCAyKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBTZXJ2ZXJsZXNzQ2x1c3Rlckluc3VmZmljaWVudFN1Ym5ldHNgLCBgQ2x1c3RlciByZXF1aXJlcyBhdCBsZWFzdCAyIHN1Ym5ldHMsIGdvdCAke3N1Ym5ldFNlbGVjdGlvbi5zdWJuZXRzLmxlbmd0aH0gc3VibmV0LmAsIHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBzZWN1cml0eUdyb3VwczogZWMyLklTZWN1cml0eUdyb3VwW10gPSBbXTtcblxuICAgIGlmICh2cGNDb25maWcuc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgIGlmICh2cGNDb25maWcuc2VjdXJpdHlHcm91cHMubGVuZ3RoIDwgMSB8fCB2cGNDb25maWcuc2VjdXJpdHlHcm91cHMubGVuZ3RoID4gNSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkU2VjdXJpdHlHcm91cENvdW50YCwgYFxcYHNlY3VyaXR5R3JvdXBzXFxgIG11c3QgY29udGFpbiBiZXR3ZWVuIDEgYW5kIDUgZWxlbWVudHMsIGdvdCAke3ZwY0NvbmZpZy5zZWN1cml0eUdyb3Vwcy5sZW5ndGh9IGVsZW1lbnRzLmAsIHRoaXMpO1xuICAgICAgfVxuICAgICAgc2VjdXJpdHlHcm91cHMgPSB2cGNDb25maWcuc2VjdXJpdHlHcm91cHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzLnB1c2gobmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIGBTZWN1cml0eUdyb3VwLSR7aW5kZXh9YCwge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ01TSyBTZXJ2ZXJsZXNzIHNlY3VyaXR5IGdyb3VwJyxcbiAgICAgICAgdnBjOiB2cGNDb25maWcudnBjLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHRoaXMuX3NlY3VyaXR5R3JvdXBzLnB1c2goLi4uc2VjdXJpdHlHcm91cHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Ym5ldElkczogc3VibmV0U2VsZWN0aW9uLnN1Ym5ldHMubWFwKChzdWJuZXQpID0+IHN1Ym5ldC5zdWJuZXRJZCksXG4gICAgICBzZWN1cml0eUdyb3Vwczogc2VjdXJpdHlHcm91cHM/Lm1hcCgoc2VjdXJpdHlHcm91cCkgPT4gc2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwSWQpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==