UNPKG

@aws-cdk/aws-cloud9-alpha

Version:

The CDK Construct Library for AWS::Cloud9

207 lines 25.4 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, _b, _c; Object.defineProperty(exports, "__esModule", { value: true }); exports.Owner = exports.CloneRepository = exports.Ec2Environment = exports.ImageId = exports.ConnectionType = 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 cdk = require("aws-cdk-lib/core"); const aws_cloud9_1 = require("aws-cdk-lib/aws-cloud9"); const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource"); const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable"); /** * The connection type used for connecting to an Amazon EC2 environment. */ var ConnectionType; (function (ConnectionType) { /** * Connect through SSH */ ConnectionType["CONNECT_SSH"] = "CONNECT_SSH"; /** * Connect through AWS Systems Manager * When using SSM, service role and instance profile aren't automatically created. * See https://docs.aws.amazon.com/cloud9/latest/user-guide/ec2-ssm.html#service-role-ssm */ ConnectionType["CONNECT_SSM"] = "CONNECT_SSM"; })(ConnectionType || (exports.ConnectionType = ConnectionType = {})); /** * The image ID used for creating an Amazon EC2 environment. */ var ImageId; (function (ImageId) { /** * Create using Amazon Linux 2 */ ImageId["AMAZON_LINUX_2"] = "amazonlinux-2-x86_64"; /** * Create using Amazon Linux 2023 */ ImageId["AMAZON_LINUX_2023"] = "amazonlinux-2023-x86_64"; /** * Create using Ubuntu 18.04 * * @deprecated Since Ubuntu 18.04 has ended standard support as of May 31, 2023, we recommend you choose Ubuntu 22.04. */ ImageId["UBUNTU_18_04"] = "ubuntu-18.04-x86_64"; /** * Create using Ubuntu 22.04 */ ImageId["UBUNTU_22_04"] = "ubuntu-22.04-x86_64"; })(ImageId || (exports.ImageId = ImageId = {})); /** * A Cloud9 Environment with Amazon EC2 * @resource AWS::Cloud9::EnvironmentEC2 */ let Ec2Environment = class Ec2Environment extends cdk.Resource { /** * import from EnvironmentEc2Name */ static fromEc2EnvironmentName(scope, id, ec2EnvironmentName) { class Import extends cdk.Resource { constructor() { super(...arguments); this.ec2EnvironmentName = ec2EnvironmentName; this.ec2EnvironmentArn = cdk.Stack.of(this).formatArn({ service: 'cloud9', resource: 'environment', resourceName: this.ec2EnvironmentName, }); } } return new Import(scope, id); } constructor(scope, id, props) { super(scope, id); try { jsiiDeprecationWarnings._aws_cdk_aws_cloud9_alpha_Ec2EnvironmentProps(props); } catch (error) { if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") { Error.captureStackTrace(error, Ec2Environment); } throw error; } // Enhanced CDK Analytics Telemetry (0, metadata_resource_1.addConstructMetadata)(this, props); this.vpc = props.vpc; if (!props.subnetSelection && this.vpc.publicSubnets.length === 0) { throw new Error('no subnetSelection specified and no public subnet found in the vpc, please specify subnetSelection'); } if (!props.imageId) { throw new Error('No imageId specified, please specify imageId'); } const vpcSubnets = props.subnetSelection ?? { subnetType: ec2.SubnetType.PUBLIC }; const c9env = new aws_cloud9_1.CfnEnvironmentEC2(this, 'Resource', { name: props.ec2EnvironmentName, description: props.description, ownerArn: props.owner?.ownerArn, instanceType: props.instanceType?.toString() ?? ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO).toString(), subnetId: this.vpc.selectSubnets(vpcSubnets).subnetIds[0], repositories: props.clonedRepositories ? props.clonedRepositories.map(r => ({ repositoryUrl: r.repositoryUrl, pathComponent: r.pathComponent, })) : undefined, connectionType: props.connectionType ?? ConnectionType.CONNECT_SSH, imageId: props.imageId, automaticStopTimeMinutes: props.automaticStop?.toMinutes(), }); this.environmentId = c9env.ref; this.ec2EnvironmentArn = c9env.getAtt('Arn').toString(); this.ec2EnvironmentName = c9env.getAtt('Name').toString(); this.ideUrl = `https://${this.env.region}.console.aws.amazon.com/cloud9/ide/${this.environmentId}`; } }; exports.Ec2Environment = Ec2Environment; _a = JSII_RTTI_SYMBOL_1; Ec2Environment[_a] = { fqn: "@aws-cdk/aws-cloud9-alpha.Ec2Environment", version: "2.216.0-alpha.0" }; /** Uniquely identifies this class. */ Ec2Environment.PROPERTY_INJECTION_ID = '@aws-cdk.aws-cloud9-alpha.Ec2Environment'; exports.Ec2Environment = Ec2Environment = __decorate([ prop_injectable_1.propertyInjectable ], Ec2Environment); /** * The class for different repository providers */ class CloneRepository { /** * import repository to cloud9 environment from AWS CodeCommit * * @param repository the codecommit repository to clone from * @param path the target path in cloud9 environment */ static fromCodeCommit(repository, path) { return { repositoryUrl: repository.repositoryCloneUrlHttp, pathComponent: path, }; } constructor(repositoryUrl, pathComponent) { this.repositoryUrl = repositoryUrl; this.pathComponent = pathComponent; } } exports.CloneRepository = CloneRepository; _b = JSII_RTTI_SYMBOL_1; CloneRepository[_b] = { fqn: "@aws-cdk/aws-cloud9-alpha.CloneRepository", version: "2.216.0-alpha.0" }; /** * An environment owner * * */ class Owner { /** * Make an IAM user the environment owner * * User need to have AWSCloud9Administrator permissions * @see https://docs.aws.amazon.com/cloud9/latest/user-guide/share-environment.html#share-environment-about * * @param user the User object to use as the environment owner */ static user(user) { return { ownerArn: user.userArn }; } /** * Make an IAM assumed role the environment owner * * @param accountId The account id of the target account * @param roleName The name of the assumed role */ static assumedRole(accountId, roleName) { return { ownerArn: `arn:${cdk.Aws.PARTITION}:sts::${accountId}:assumed-role/${roleName}` }; } /** * Make an IAM federated user the environment owner * * @param accountId The AccountId of the target account * @param userName The name of the federated user */ static federatedUser(accountId, userName) { return { ownerArn: `arn:${cdk.Aws.PARTITION}:sts::${accountId}:federated-user/${userName}` }; } /** * Make the Account Root User the environment owner (not recommended) * * @param accountId the AccountId to use as the environment owner. */ static accountRoot(accountId) { return { ownerArn: `arn:${cdk.Aws.PARTITION}:iam::${accountId}:root` }; } /** * * @param ownerArn of environment owner. */ constructor(ownerArn) { this.ownerArn = ownerArn; } } exports.Owner = Owner; _c = JSII_RTTI_SYMBOL_1; Owner[_c] = { fqn: "@aws-cdk/aws-cloud9-alpha.Owner", version: "2.216.0-alpha.0" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDQSwyQ0FBMkM7QUFFM0Msd0NBQXdDO0FBRXhDLHVEQUEyRDtBQUMzRCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBc0IxRTs7R0FFRztBQUNILElBQVksY0FXWDtBQVhELFdBQVksY0FBYztJQUN4Qjs7T0FFRztJQUNILDZDQUEyQixDQUFBO0lBQzNCOzs7O09BSUc7SUFDSCw2Q0FBMkIsQ0FBQTtBQUM3QixDQUFDLEVBWFcsY0FBYyw4QkFBZCxjQUFjLFFBV3pCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLE9BbUJYO0FBbkJELFdBQVksT0FBTztJQUNqQjs7T0FFRztJQUNILGtEQUF1QyxDQUFBO0lBQ3ZDOztPQUVHO0lBQ0gsd0RBQTZDLENBQUE7SUFDN0M7Ozs7T0FJRztJQUNILCtDQUFvQyxDQUFBO0lBQ3BDOztPQUVHO0lBQ0gsK0NBQW9DLENBQUE7QUFDdEMsQ0FBQyxFQW5CVyxPQUFPLHVCQUFQLE9BQU8sUUFtQmxCO0FBbUZEOzs7R0FHRztBQUVJLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWUsU0FBUSxHQUFHLENBQUMsUUFBUTtJQUk5Qzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxrQkFBMEI7UUFDM0YsTUFBTSxNQUFPLFNBQVEsR0FBRyxDQUFDLFFBQVE7WUFBakM7O2dCQUNTLHVCQUFrQixHQUFHLGtCQUFrQixDQUFDO2dCQUN4QyxzQkFBaUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3RELE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsWUFBWSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7aUJBQ3RDLENBQUMsQ0FBQztZQUNM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b2RlY29tbWl0IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlY29tbWl0JztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IElVc2VyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENmbkVudmlyb25tZW50RUMyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkOSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5cbi8qKlxuICogQSBDbG91ZDkgRW52aXJvbm1lbnRcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUVjMkVudmlyb25tZW50IGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgRW52aXJvbm1lbnRFYzJcbiAgICpcbiAgICogQGF0dHJpYnV0ZSBlbnZpcm9ubWVudEVjMk5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGVjMkVudmlyb25tZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJuIG9mIHRoZSBFbnZpcm9ubWVudEVjMlxuICAgKlxuICAgKiBAYXR0cmlidXRlIGVudmlyb25tZW50RTJBcm5cbiAgICovXG4gIHJlYWRvbmx5IGVjMkVudmlyb25tZW50QXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGNvbm5lY3Rpb24gdHlwZSB1c2VkIGZvciBjb25uZWN0aW5nIHRvIGFuIEFtYXpvbiBFQzIgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBlbnVtIENvbm5lY3Rpb25UeXBlIHtcbiAgLyoqXG4gICAqIENvbm5lY3QgdGhyb3VnaCBTU0hcbiAgICovXG4gIENPTk5FQ1RfU1NIID0gJ0NPTk5FQ1RfU1NIJyxcbiAgLyoqXG4gICAqIENvbm5lY3QgdGhyb3VnaCBBV1MgU3lzdGVtcyBNYW5hZ2VyXG4gICAqIFdoZW4gdXNpbmcgU1NNLCBzZXJ2aWNlIHJvbGUgYW5kIGluc3RhbmNlIHByb2ZpbGUgYXJlbid0IGF1dG9tYXRpY2FsbHkgY3JlYXRlZC5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZDkvbGF0ZXN0L3VzZXItZ3VpZGUvZWMyLXNzbS5odG1sI3NlcnZpY2Utcm9sZS1zc21cbiAgICovXG4gIENPTk5FQ1RfU1NNID0gJ0NPTk5FQ1RfU1NNJyxcbn1cblxuLyoqXG4gKiBUaGUgaW1hZ2UgSUQgdXNlZCBmb3IgY3JlYXRpbmcgYW4gQW1hem9uIEVDMiBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGVudW0gSW1hZ2VJZCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgdXNpbmcgQW1hem9uIExpbnV4IDJcbiAgICovXG4gIEFNQVpPTl9MSU5VWF8yID0gJ2FtYXpvbmxpbnV4LTIteDg2XzY0JyxcbiAgLyoqXG4gICAqIENyZWF0ZSB1c2luZyBBbWF6b24gTGludXggMjAyM1xuICAgKi9cbiAgQU1BWk9OX0xJTlVYXzIwMjMgPSAnYW1hem9ubGludXgtMjAyMy14ODZfNjQnLFxuICAvKipcbiAgICogQ3JlYXRlIHVzaW5nIFVidW50dSAxOC4wNFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBTaW5jZSBVYnVudHUgMTguMDQgaGFzIGVuZGVkIHN0YW5kYXJkIHN1cHBvcnQgYXMgb2YgTWF5IDMxLCAyMDIzLCB3ZSByZWNvbW1lbmQgeW91IGNob29zZSBVYnVudHUgMjIuMDQuXG4gICAqL1xuICBVQlVOVFVfMThfMDQgPSAndWJ1bnR1LTE4LjA0LXg4Nl82NCcsXG4gIC8qKlxuICAgKiBDcmVhdGUgdXNpbmcgVWJ1bnR1IDIyLjA0XG4gICAqL1xuICBVQlVOVFVfMjJfMDQgPSAndWJ1bnR1LTIyLjA0LXg4Nl82NCcsXG59XG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEVjMkVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWMyRW52aXJvbm1lbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBPd25lciBvZiB0aGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIFRoZSBvd25lciBoYXMgZnVsbCBjb250cm9sIG9mIHRoZSBlbnZpcm9ubWVudCBhbmQgY2FuIGludml0ZSBhZGRpdGlvbmFsIG1lbWJlcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIGlkZW50aXR5IHRoYXQgQ2xvdWRGb3JtYXRpb24gZXhlY3V0ZXMgdW5kZXIgd2lsbCBiZSB0aGUgb3duZXJcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyPzogT3duZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8gdGhlIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHQyLm1pY3JvXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU/OiBlYzIuSW5zdGFuY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VibmV0U2VsZWN0aW9uIG9mIHRoZSBWUEMgdGhhdCBBV1MgQ2xvdWQ5IHdpbGwgdXNlIHRvIGNvbW11bmljYXRlIHdpdGhcbiAgICogdGhlIEFtYXpvbiBFQzIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHB1YmxpYyBzdWJuZXRzIG9mIHRoZSBWUEMgYXJlIHNlbGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0U2VsZWN0aW9uPzogZWMyLlN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogVGhlIFZQQyB0aGF0IEFXUyBDbG91ZDkgd2lsbCB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgQW1hem9uIEVsYXN0aWMgQ29tcHV0ZSBDbG91ZCAoQW1hem9uIEVDMikgaW5zdGFuY2UuXG4gICAqXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGVjMkVudmlyb25tZW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhlIGVudmlyb25tZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIENvZGVDb21taXQgcmVwb3NpdG9yeSB0byBiZSBjbG9uZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkbyBub3QgY2xvbmUgYW55IHJlcG9zaXRvcnlcbiAgICovXG4gIC8vIHJlYWRvbmx5IGNsb25lZFJlcG9zaXRvcmllcz86IENsb3VkOVJlcG9zaXRvcnlbXTtcbiAgcmVhZG9ubHkgY2xvbmVkUmVwb3NpdG9yaWVzPzogQ2xvbmVSZXBvc2l0b3J5W107XG5cbiAgLyoqXG4gICAqIFRoZSBjb25uZWN0aW9uIHR5cGUgdXNlZCBmb3IgY29ubmVjdGluZyB0byBhbiBBbWF6b24gRUMyIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBWYWxpZCB2YWx1ZXMgYXJlOiBDT05ORUNUX1NTSCAoZGVmYXVsdCkgYW5kIENPTk5FQ1RfU1NNIChjb25uZWN0ZWQgdGhyb3VnaCBBV1MgU3lzdGVtcyBNYW5hZ2VyKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENPTk5FQ1RfU1NIXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uVHlwZT86IENvbm5lY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgSUQgdXNlZCBmb3IgY3JlYXRpbmcgYW4gQW1hem9uIEVDMiBlbnZpcm9ubWVudC5cbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlSWQ6IEltYWdlSWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWludXRlcyB1bnRpbCB0aGUgcnVubmluZyBpbnN0YW5jZSBpcyBzaHV0IGRvd24gYWZ0ZXIgdGhlXG4gICAqIGVudmlyb25tZW50IHdhcyBsYXN0IHVzZWQuXG4gICAqXG4gICAqIFNldHRpbmcgYSB2YWx1ZSBvZiAwIG1lYW5zIHRoZSBpbnN0YW5jZSB3aWxsIG5ldmVyIGJlIGF1dG9tYXRpY2FsbHkgc2h1dCBkb3duLlwiXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIGluc3RhbmNlIHdpbGwgbm90IGJlIHNodXQgZG93biBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b21hdGljU3RvcD86IGNkay5EdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBIENsb3VkOSBFbnZpcm9ubWVudCB3aXRoIEFtYXpvbiBFQzJcbiAqIEByZXNvdXJjZSBBV1M6OkNsb3VkOTo6RW52aXJvbm1lbnRFQzJcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEVjMkVudmlyb25tZW50IGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUVjMkVudmlyb25tZW50IHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtY2xvdWQ5LWFscGhhLkVjMkVudmlyb25tZW50JztcblxuICAvKipcbiAgICogaW1wb3J0IGZyb20gRW52aXJvbm1lbnRFYzJOYW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FYzJFbnZpcm9ubWVudE5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZWMyRW52aXJvbm1lbnROYW1lOiBzdHJpbmcpOiBJRWMyRW52aXJvbm1lbnQge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIGNkay5SZXNvdXJjZSB7XG4gICAgICBwdWJsaWMgZWMyRW52aXJvbm1lbnROYW1lID0gZWMyRW52aXJvbm1lbnROYW1lO1xuICAgICAgcHVibGljIGVjMkVudmlyb25tZW50QXJuID0gY2RrLlN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdjbG91ZDknLFxuICAgICAgICByZXNvdXJjZTogJ2Vudmlyb25tZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLmVjMkVudmlyb25tZW50TmFtZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBuYW1lIG9mIHRoaXMgQ2xvdWQ5IGVudmlyb25tZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlYzJFbnZpcm9ubWVudE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IEFSTiBvZiB0aGlzIENsb3VkOSBlbnZpcm9ubWVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWMyRW52aXJvbm1lbnRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IElEIG9mIHRoaXMgQ2xvdWQ5IGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW52aXJvbm1lbnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tcGxldGUgSURFIFVSTCBvZiB0aGlzIENsb3VkOSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWUEMgSURcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFYzJFbnZpcm9ubWVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMudnBjID0gcHJvcHMudnBjO1xuICAgIGlmICghcHJvcHMuc3VibmV0U2VsZWN0aW9uICYmIHRoaXMudnBjLnB1YmxpY1N1Ym5ldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHN1Ym5ldFNlbGVjdGlvbiBzcGVjaWZpZWQgYW5kIG5vIHB1YmxpYyBzdWJuZXQgZm91bmQgaW4gdGhlIHZwYywgcGxlYXNlIHNwZWNpZnkgc3VibmV0U2VsZWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcy5pbWFnZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGltYWdlSWQgc3BlY2lmaWVkLCBwbGVhc2Ugc3BlY2lmeSBpbWFnZUlkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdnBjU3VibmV0cyA9IHByb3BzLnN1Ym5ldFNlbGVjdGlvbiA/PyB7IHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyB9O1xuICAgIGNvbnN0IGM5ZW52ID0gbmV3IENmbkVudmlyb25tZW50RUMyKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHByb3BzLmVjMkVudmlyb25tZW50TmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIG93bmVyQXJuOiBwcm9wcy5vd25lcj8ub3duZXJBcm4sXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZT8udG9TdHJpbmcoKSA/PyBlYzIuSW5zdGFuY2VUeXBlLm9mKGVjMi5JbnN0YW5jZUNsYXNzLkJVUlNUQUJMRTIsIGVjMi5JbnN0YW5jZVNpemUuTUlDUk8pLnRvU3RyaW5nKCksXG4gICAgICBzdWJuZXRJZDogdGhpcy52cGMuc2VsZWN0U3VibmV0cyh2cGNTdWJuZXRzKS5zdWJuZXRJZHNbMF0sXG4gICAgICByZXBvc2l0b3JpZXM6IHByb3BzLmNsb25lZFJlcG9zaXRvcmllcyA/IHByb3BzLmNsb25lZFJlcG9zaXRvcmllcy5tYXAociA9PiAoe1xuICAgICAgICByZXBvc2l0b3J5VXJsOiByLnJlcG9zaXRvcnlVcmwsXG4gICAgICAgIHBhdGhDb21wb25lbnQ6IHIucGF0aENvbXBvbmVudCxcbiAgICAgIH0pKSA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbm5lY3Rpb25UeXBlOiBwcm9wcy5jb25uZWN0aW9uVHlwZSA/PyBDb25uZWN0aW9uVHlwZS5DT05ORUNUX1NTSCxcbiAgICAgIGltYWdlSWQ6IHByb3BzLmltYWdlSWQsXG4gICAgICBhdXRvbWF0aWNTdG9wVGltZU1pbnV0ZXM6IHByb3BzLmF1dG9tYXRpY1N0b3A/LnRvTWludXRlcygpLFxuICAgIH0pO1xuICAgIHRoaXMuZW52aXJvbm1lbnRJZCA9IGM5ZW52LnJlZjtcbiAgICB0aGlzLmVjMkVudmlyb25tZW50QXJuID0gYzllbnYuZ2V0QXR0KCdBcm4nKS50b1N0cmluZygpO1xuICAgIHRoaXMuZWMyRW52aXJvbm1lbnROYW1lID0gYzllbnYuZ2V0QXR0KCdOYW1lJykudG9TdHJpbmcoKTtcbiAgICB0aGlzLmlkZVVybCA9IGBodHRwczovLyR7dGhpcy5lbnYucmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL2Nsb3VkOS9pZGUvJHt0aGlzLmVudmlyb25tZW50SWR9YDtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBjbGFzcyBmb3IgZGlmZmVyZW50IHJlcG9zaXRvcnkgcHJvdmlkZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG9uZVJlcG9zaXRvcnkge1xuICAvKipcbiAgICogaW1wb3J0IHJlcG9zaXRvcnkgdG8gY2xvdWQ5IGVudmlyb25tZW50IGZyb20gQVdTIENvZGVDb21taXRcbiAgICpcbiAgICogQHBhcmFtIHJlcG9zaXRvcnkgdGhlIGNvZGVjb21taXQgcmVwb3NpdG9yeSB0byBjbG9uZSBmcm9tXG4gICAqIEBwYXJhbSBwYXRoICB0aGUgdGFyZ2V0IHBhdGggaW4gY2xvdWQ5IGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db2RlQ29tbWl0KHJlcG9zaXRvcnk6IGNvZGVjb21taXQuSVJlcG9zaXRvcnksIHBhdGg6IHN0cmluZyk6IENsb25lUmVwb3NpdG9yeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcG9zaXRvcnlVcmw6IHJlcG9zaXRvcnkucmVwb3NpdG9yeUNsb25lVXJsSHR0cCxcbiAgICAgIHBhdGhDb21wb25lbnQ6IHBhdGgsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHJlcG9zaXRvcnlVcmw6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IHBhdGhDb21wb25lbnQ6IHN0cmluZykge31cbn1cblxuLyoqXG4gKiBBbiBlbnZpcm9ubWVudCBvd25lclxuICpcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBPd25lciB7XG4gIC8qKlxuICAgKiBNYWtlIGFuIElBTSB1c2VyIHRoZSBlbnZpcm9ubWVudCBvd25lclxuICAgKlxuICAgKiBVc2VyIG5lZWQgdG8gaGF2ZSBBV1NDbG91ZDlBZG1pbmlzdHJhdG9yIHBlcm1pc3Npb25zXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkOS9sYXRlc3QvdXNlci1ndWlkZS9zaGFyZS1lbnZpcm9ubWVudC5odG1sI3NoYXJlLWVudmlyb25tZW50LWFib3V0XG4gICAqXG4gICAqIEBwYXJhbSB1c2VyIHRoZSBVc2VyIG9iamVjdCB0byB1c2UgYXMgdGhlIGVudmlyb25tZW50IG93bmVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzZXIodXNlcjogSVVzZXIpOiBPd25lciB7XG4gICAgcmV0dXJuIHsgb3duZXJBcm46IHVzZXIudXNlckFybiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gSUFNIGFzc3VtZWQgcm9sZSB0aGUgZW52aXJvbm1lbnQgb3duZXJcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRJZCBUaGUgYWNjb3VudCBpZCBvZiB0aGUgdGFyZ2V0IGFjY291bnRcbiAgICogQHBhcmFtIHJvbGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBhc3N1bWVkIHJvbGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXNzdW1lZFJvbGUoYWNjb3VudElkOiBzdHJpbmcsIHJvbGVOYW1lOiBzdHJpbmcpOiBPd25lciB7XG4gICAgcmV0dXJuIHsgb3duZXJBcm46IGBhcm46JHtjZGsuQXdzLlBBUlRJVElPTn06c3RzOjoke2FjY291bnRJZH06YXNzdW1lZC1yb2xlLyR7cm9sZU5hbWV9YCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gSUFNIGZlZGVyYXRlZCB1c2VyIHRoZSBlbnZpcm9ubWVudCBvd25lclxuICAgKlxuICAgKiBAcGFyYW0gYWNjb3VudElkIFRoZSBBY2NvdW50SWQgb2YgdGhlIHRhcmdldCBhY2NvdW50XG4gICAqIEBwYXJhbSB1c2VyTmFtZSBUaGUgbmFtZSBvZiB0aGUgZmVkZXJhdGVkIHVzZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZmVkZXJhdGVkVXNlcihhY2NvdW50SWQ6IHN0cmluZywgdXNlck5hbWU6IHN0cmluZyk6IE93bmVyIHtcbiAgICByZXR1cm4geyBvd25lckFybjogYGFybjoke2Nkay5Bd3MuUEFSVElUSU9OfTpzdHM6OiR7YWNjb3VudElkfTpmZWRlcmF0ZWQtdXNlci8ke3VzZXJOYW1lfWAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHRoZSBBY2NvdW50IFJvb3QgVXNlciB0aGUgZW52aXJvbm1lbnQgb3duZXIgKG5vdCByZWNvbW1lbmRlZClcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRJZCB0aGUgQWNjb3VudElkIHRvIHVzZSBhcyB0aGUgZW52aXJvbm1lbnQgb3duZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFjY291bnRSb290KGFjY291bnRJZDogc3RyaW5nKTogT3duZXIge1xuICAgIHJldHVybiB7IG93bmVyQXJuOiBgYXJuOiR7Y2RrLkF3cy5QQVJUSVRJT059OmlhbTo6JHthY2NvdW50SWR9OnJvb3RgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG93bmVyQXJuIG9mIGVudmlyb25tZW50IG93bmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgb3duZXJBcm46IHN0cmluZykge31cbn1cbiJdfQ==