UNPKG

@aws-cdk/aws-msk-alpha

Version:

The CDK Construct Library for AWS::MSK

120 lines 16.6 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var _a; 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 ec2 = require("aws-cdk-lib/aws-ec2"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const _1 = require("."); const aws_msk_1 = require("aws-cdk-lib/aws-msk"); const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource"); const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable"); /** * Create a MSK Serverless Cluster. * * @resource AWS::MSK::ServerlessCluster */ let ServerlessCluster = class ServerlessCluster extends _1.ClusterBase { /** * Reference an existing cluster, defined outside of the CDK code, by name. */ static fromClusterArn(scope, id, clusterArn) { class Import extends _1.ClusterBase { constructor() { super(...arguments); this.clusterArn = clusterArn; this.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); } 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 }), }), }); this._securityGroups = []; 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(`\`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 */ const resource = new aws_msk_1.CfnServerlessCluster(this, 'Resource', { clusterName: this.physicalName, clientAuthentication: { sasl: { iam: { enabled: true, }, }, }, vpcConfigs, }); this.clusterName = this.getResourceNameAttribute(aws_cdk_lib_1.Fn.select(1, aws_cdk_lib_1.Fn.split('/', resource.ref))); this.clusterArn = 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(`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(`\`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), }; } }; exports.ServerlessCluster = ServerlessCluster; _a = JSII_RTTI_SYMBOL_1; ServerlessCluster[_a] = { fqn: "@aws-cdk/aws-msk-alpha.ServerlessCluster", version: "2.211.0-alpha.0" }; /** Uniquely identifies this class. */ ServerlessCluster.PROPERTY_INJECTION_ID = '@aws-cdk.aws-msk-alpha.ServerlessCluster'; exports.ServerlessCluster = ServerlessCluster = __decorate([ prop_injectable_1.propertyInjectable ], ServerlessCluster); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVybGVzcy1jbHVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VydmVybGVzcy1jbHVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUEyQztBQUMzQyw2Q0FBK0Q7QUFFL0Qsd0JBQTBDO0FBQzFDLGlEQUEyRDtBQUMzRCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBOEMxRTs7OztHQUlHO0FBRUksSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBa0IsU0FBUSxjQUFXO0lBSWhEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FDMUIsS0FBMkIsRUFDM0IsRUFBVSxFQUNWLFVBQWtCO1FBRWxCLE1BQU0sTUFBTyxTQUFRLGNBQVc7WUFBaEM7O2dCQUNrQixlQUFVLEdBQUcsVUFBVSxDQUFDO2dCQUN4QixnQkFBVyxHQUFHLGdCQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxnQkFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9FQUFvRTtZQUM3SSxDQUFDO1NBQUE7UUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM5QjtJQU9ELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQzdCLGtCQUFJLENBQUMsTUFBTSxDQUFDO29CQUNWLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxtQkFBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztpQkFDakUsQ0FBQztTQUNMLENBQUMsQ0FBQztRQVJHLG9CQUFlLEdBQXlCLEVBQUUsQ0FBQzs7Ozs7OytDQXZCeEMsaUJBQWlCOzs7O1FBZ0MxQixtQ0FBbUM7UUFDbkMs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Y0FBYyxFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUM7U0FDdEYsQ0FBQztLQUNIOztBQW5HVSw4Q0FBaUI7OztBQUM1QixzQ0FBc0M7QUFDZix1Q0FBcUIsR0FBVywwQ0FBMEMsQUFBckQsQ0FBc0Q7NEJBRnZGLGlCQUFpQjtJQUQ3QixvQ0FBa0I7R0FDTixpQkFBaUIsQ0FvRzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgRm4sIExhenksIE5hbWVzLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ2x1c3RlckJhc2UsIElDbHVzdGVyIH0gZnJvbSAnLic7XG5pbXBvcnQgeyBDZm5TZXJ2ZXJsZXNzQ2x1c3RlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1tc2snO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuXG4vKipcbiAqICBQcm9wZXJ0aWVzIGZvciBhIE1TSyBTZXJ2ZXJsZXNzIENsdXN0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzQ2x1c3RlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwaHlzaWNhbCBuYW1lIG9mIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgQW1hem9uIFZQQ3MgZm9yIHRoZSBjbHVzdGVyLlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gNSBWUEMgY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSB2cGNDb25maWdzOiBWcGNDb25maWdbXTtcbn1cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgQW1hem9uIFZQQ3MgZm9yIHRoZSBjbHVzdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0NvbmZpZyB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSB2aXJ0dWFsIG5ldHdvcmtpbmcgZW52aXJvbm1lbnQgZm9yIHRoaXMgY2x1c3Rlci5cbiAgICogTXVzdCBoYXZlIGF0IGxlYXN0IDIgc3VibmV0cyBpbiB0d28gZGlmZmVyZW50IEFacy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2x1c3Rlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgVnBjIGRlZmF1bHQgc3RyYXRlZ3kgaWYgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2x1c3Rlci5cbiAgICogWW91IGNhbiBzcGVjaWZ5IHVwIHRvIDUgc2VjdXJpdHkgZ3JvdXBzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNyZWF0ZSBuZXcgc2VjdXJpdHkgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogZWMyLklTZWN1cml0eUdyb3VwW107XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgTVNLIFNlcnZlcmxlc3MgQ2x1c3Rlci5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpNU0s6OlNlcnZlcmxlc3NDbHVzdGVyXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBTZXJ2ZXJsZXNzQ2x1c3RlciBleHRlbmRzIENsdXN0ZXJCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtbXNrLWFscGhhLlNlcnZlcmxlc3NDbHVzdGVyJztcblxuICAvKipcbiAgICogUmVmZXJlbmNlIGFuIGV4aXN0aW5nIGNsdXN0ZXIsIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgQ0RLIGNvZGUsIGJ5IG5hbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21DbHVzdGVyQXJuKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGNsdXN0ZXJBcm46IHN0cmluZyxcbiAgKTogSUNsdXN0ZXIge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIENsdXN0ZXJCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjbHVzdGVyQXJuID0gY2x1c3RlckFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjbHVzdGVyTmFtZSA9IEZuLnNlbGVjdCgxLCBGbi5zcGxpdCgnLycsIGNsdXN0ZXJBcm4pKTsgLy8gWydhcm46cGFydGl0aW9uOmthZmthOnJlZ2lvbjphY2NvdW50LWlkJywgY2x1c3Rlck5hbWUsIGNsdXN0ZXJJZF1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJOYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfc2VjdXJpdHlHcm91cHM6IGVjMi5JU2VjdXJpdHlHcm91cFtdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VydmVybGVzc0NsdXN0ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5jbHVzdGVyTmFtZSA/P1xuICAgICAgICBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiA2NCB9KSxcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMudnBjQ29uZmlncy5sZW5ndGggPCAxIHx8IHByb3BzLnZwY0NvbmZpZ3MubGVuZ3RoID4gNSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgXFxgdnBjQ29uZmlnc1xcYCBtdXN0IGNvbnRhaW4gYmV0d2VlbiAxIGFuZCA1IGNvbmZpZ3VyYXRpb25zLCBnb3QgJHtwcm9wcy52cGNDb25maWdzLmxlbmd0aH0gY29uZmlndXJhdGlvbnMuYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3QgdnBjQ29uZmlncyA9IHByb3BzLnZwY0NvbmZpZ3MubWFwKCh2cGNDb25maWcsIGluZGV4KSA9PiB0aGlzLl9yZW5kZXJWcGNDb25maWcodnBjQ29uZmlnLCBpbmRleCkpO1xuXG4gICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiB0aGlzLl9zZWN1cml0eUdyb3VwcyxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRPRE8gQXQgdGhlIHRpbWUgb2YgaW1wbGVtZW50YXRpb24sIE1TSyBTZXJ2ZXJsZXNzIG9ubHkgc3VwcG9ydHMgSUFNIGF1dGhlbnRpY2F0aW9uLCBzbyBpdCBjYW5ub3QgYmUgZGlzYWJsZWQuXG4gICAgICogSWYgaXQgYmVjb21lcyBjb25maWd1cmFibGUgaW4gdGhlIGZ1dHVyZSwgdGhlIHByb3BlcnR5IHdpbGwgbmVlZCB0byBiZSBleHBvc2VkLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbXNrL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2ZXJsZXNzLmh0bWxcbiAgICAgKi9cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5TZXJ2ZXJsZXNzQ2x1c3Rlcih0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjbHVzdGVyTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBjbGllbnRBdXRoZW50aWNhdGlvbjoge1xuICAgICAgICBzYXNsOiB7XG4gICAgICAgICAgaWFtOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdnBjQ29uZmlncyxcbiAgICB9KTtcblxuICAgIHRoaXMuY2x1c3Rlck5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShcbiAgICAgIEZuLnNlbGVjdCgxLCBGbi5zcGxpdCgnLycsIHJlc291cmNlLnJlZikpLFxuICAgICk7XG4gICAgdGhpcy5jbHVzdGVyQXJuID0gcmVzb3VyY2UucmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBWcGMgQ29uZmlnIHByb3BlcnR5XG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJWcGNDb25maWcodnBjQ29uZmlnOiBWcGNDb25maWcsIGluZGV4OiBudW1iZXIpOiBDZm5TZXJ2ZXJsZXNzQ2x1c3Rlci5WcGNDb25maWdQcm9wZXJ0eSB7XG4gICAgY29uc3Qgc3VibmV0U2VsZWN0aW9uID0gdnBjQ29uZmlnLnZwYy5zZWxlY3RTdWJuZXRzKHZwY0NvbmZpZy52cGNTdWJuZXRzKTtcblxuICAgIGlmIChzdWJuZXRTZWxlY3Rpb24uc3VibmV0cy5sZW5ndGggPCAyKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBDbHVzdGVyIHJlcXVpcmVzIGF0IGxlYXN0IDIgc3VibmV0cywgZ290ICR7c3VibmV0U2VsZWN0aW9uLnN1Ym5ldHMubGVuZ3RofSBzdWJuZXQuYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgbGV0IHNlY3VyaXR5R3JvdXBzOiBlYzIuSVNlY3VyaXR5R3JvdXBbXSA9IFtdO1xuXG4gICAgaWYgKHZwY0NvbmZpZy5zZWN1cml0eUdyb3Vwcykge1xuICAgICAgaWYgKHZwY0NvbmZpZy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPCAxIHx8IHZwY0NvbmZpZy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPiA1KSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFxcYHNlY3VyaXR5R3JvdXBzXFxgIG11c3QgY29udGFpbiBiZXR3ZWVuIDEgYW5kIDUgZWxlbWVudHMsIGdvdCAke3ZwY0NvbmZpZy5zZWN1cml0eUdyb3Vwcy5sZW5ndGh9IGVsZW1lbnRzLmAsIHRoaXMpO1xuICAgICAgfVxuICAgICAgc2VjdXJpdHlHcm91cHMgPSB2cGNDb25maWcuc2VjdXJpdHlHcm91cHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzLnB1c2gobmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIGBTZWN1cml0eUdyb3VwLSR7aW5kZXh9YCwge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ01TSyBTZXJ2ZXJsZXNzIHNlY3VyaXR5IGdyb3VwJyxcbiAgICAgICAgdnBjOiB2cGNDb25maWcudnBjLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHRoaXMuX3NlY3VyaXR5R3JvdXBzLnB1c2goLi4uc2VjdXJpdHlHcm91cHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Ym5ldElkczogc3VibmV0U2VsZWN0aW9uLnN1Ym5ldHMubWFwKChzdWJuZXQpID0+IHN1Ym5ldC5zdWJuZXRJZCksXG4gICAgICBzZWN1cml0eUdyb3Vwczogc2VjdXJpdHlHcm91cHM/Lm1hcCgoc2VjdXJpdHlHcm91cCkgPT4gc2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwSWQpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==