UNPKG

@aws-cdk/aws-msk-alpha

Version:

The CDK Construct Library for AWS::MSK

204 lines 22.6 kB
"use strict"; 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==