UNPKG

@aws-cdk/aws-glue-alpha

Version:

The CDK Construct Library for AWS::Glue

302 lines 34.2 kB
"use strict"; 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; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Connection = exports.ConnectionType = void 0; const jsiiDeprecationWarnings = require("../.warnings.jsii.js"); const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const cdk = require("aws-cdk-lib/core"); const aws_glue_1 = require("aws-cdk-lib/aws-glue"); 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 type of the glue connection * * If you need to use a connection type that doesn't exist as a static member, you * can instantiate a `ConnectionType` object, e.g: `new ConnectionType('NEW_TYPE')`. * * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-connection-connectioninput.html#cfn-glue-connection-connectioninput-connectiontype */ class ConnectionType { static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.ConnectionType", version: "2.225.0-alpha.0" }; /** * Designates a connection to a database through Java Database Connectivity (JDBC). */ static JDBC = new ConnectionType('JDBC'); /** * Designates a connection to an Apache Kafka streaming platform. */ static KAFKA = new ConnectionType('KAFKA'); /** * Designates a connection to a MongoDB document database. */ static MONGODB = new ConnectionType('MONGODB'); /** * Designates a connection used for view validation by Amazon Redshift. */ static VIEW_VALIDATION_REDSHIFT = new ConnectionType('VIEW_VALIDATION_REDSHIFT'); /** * Designates a connection used for view validation by Amazon Athena. */ static VIEW_VALIDATION_ATHENA = new ConnectionType('VIEW_VALIDATION_ATHENA'); /** * Designates a network connection to a data source within an Amazon Virtual Private Cloud environment (Amazon VPC). */ static NETWORK = new ConnectionType('NETWORK'); /** * Uses configuration settings contained in a connector purchased from AWS Marketplace * to read from and write to data stores that are not natively supported by AWS Glue. */ static MARKETPLACE = new ConnectionType('MARKETPLACE'); /** * Uses configuration settings contained in a custom connector to read from and write to data stores * that are not natively supported by AWS Glue. */ static CUSTOM = new ConnectionType('CUSTOM'); /** * Designates a connection to Facebook Ads. */ static FACEBOOKADS = new ConnectionType('FACEBOOKADS'); /** * Designates a connection to Google Ads. */ static GOOGLEADS = new ConnectionType('GOOGLEADS'); /** * Designates a connection to Google Sheets. */ static GOOGLESHEETS = new ConnectionType('GOOGLESHEETS'); /** * Designates a connection to Google Analytics 4. */ static GOOGLEANALYTICS4 = new ConnectionType('GOOGLEANALYTICS4'); /** * Designates a connection to HubSpot. */ static HUBSPOT = new ConnectionType('HUBSPOT'); /** * Designates a connection to Instagram Ads. */ static INSTAGRAMADS = new ConnectionType('INSTAGRAMADS'); /** * Designates a connection to Intercom. */ static INTERCOM = new ConnectionType('INTERCOM'); /** * Designates a connection to Jira Cloud. */ static JIRACLOUD = new ConnectionType('JIRACLOUD'); /** * Designates a connection to Adobe Marketo Engage. */ static MARKETO = new ConnectionType('MARKETO'); /** * Designates a connection to Oracle NetSuite. */ static NETSUITEERP = new ConnectionType('NETSUITEERP'); /** * Designates a connection to Salesforce using OAuth authentication. */ static SALESFORCE = new ConnectionType('SALESFORCE'); /** * Designates a connection to Salesforce Marketing Cloud. */ static SALESFORCEMARKETINGCLOUD = new ConnectionType('SALESFORCEMARKETINGCLOUD'); /** * Designates a connection to Salesforce Marketing Cloud Account Engagement (MCAE). */ static SALESFORCEPARDOT = new ConnectionType('SALESFORCEPARDOT'); /** * Designates a connection to SAP OData. */ static SAPODATA = new ConnectionType('SAPODATA'); /** * Designates a connection to ServiceNow. */ static SERVICENOW = new ConnectionType('SERVICENOW'); /** * Designates a connection to Slack. */ static SLACK = new ConnectionType('SLACK'); /** * Designates a connection to Snapchat Ads. */ static SNAPCHATADS = new ConnectionType('SNAPCHATADS'); /** * Designates a connection to Stripe. */ static STRIPE = new ConnectionType('STRIPE'); /** * Designates a connection to Zendesk. */ static ZENDESK = new ConnectionType('ZENDESK'); /** * Designates a connection to Zoho CRM. */ static ZOHOCRM = new ConnectionType('ZOHOCRM'); /** * The name of this ConnectionType, as expected by Connection resource. */ name; constructor(name) { this.name = name; } /** * The connection type name as expected by Connection resource. */ toString() { return this.name; } } exports.ConnectionType = ConnectionType; /** * An AWS Glue connection to a data source. */ let Connection = (() => { let _classDecorators = [prop_injectable_1.propertyInjectable]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = cdk.Resource; let _instanceExtraInitializers = []; let _addProperty_decorators; var Connection = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; _addProperty_decorators = [(0, metadata_resource_1.MethodMetadata)()]; __esDecorate(this, null, _addProperty_decorators, { kind: "method", name: "addProperty", static: false, private: false, access: { has: obj => "addProperty" in obj, get: obj => obj.addProperty }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); Connection = _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-glue-alpha.Connection", version: "2.225.0-alpha.0" }; /** Uniquely identifies this class. */ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.Connection'; /** * Creates a Connection construct that represents an external connection. * * @param scope The scope creating construct (usually `this`). * @param id The construct's id. * @param connectionArn arn of external connection. */ static fromConnectionArn(scope, id, connectionArn) { class Import extends cdk.Resource { connectionName = cdk.Arn.extractResourceName(connectionArn, 'connection'); connectionArn = connectionArn; } return new Import(scope, id); } /** * Creates a Connection construct that represents an external connection. * * @param scope The scope creating construct (usually `this`). * @param id The construct's id. * @param connectionName name of external connection. */ static fromConnectionName(scope, id, connectionName) { class Import extends cdk.Resource { connectionName = connectionName; connectionArn = Connection.buildConnectionArn(scope, connectionName); } return new Import(scope, id); } static buildConnectionArn(scope, connectionName) { return cdk.Stack.of(scope).formatArn({ service: 'glue', resource: 'connection', resourceName: connectionName, }); } /** * The ARN of the connection */ connectionArn = __runInitializers(this, _instanceExtraInitializers); /** * The name of the connection */ connectionName; properties; constructor(scope, id, props) { super(scope, id, { physicalName: props.connectionName, }); try { jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_ConnectionProps(props); } catch (error) { if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") { Error.captureStackTrace(error, Connection); } throw error; } // Enhanced CDK Analytics Telemetry (0, metadata_resource_1.addConstructMetadata)(this, props); this.properties = props.properties || {}; const physicalConnectionRequirements = props.subnet || props.securityGroups ? { availabilityZone: props.subnet ? props.subnet.availabilityZone : undefined, subnetId: props.subnet ? props.subnet.subnetId : undefined, securityGroupIdList: props.securityGroups ? props.securityGroups.map(sg => sg.securityGroupId) : undefined, } : undefined; const connectionResource = new aws_glue_1.CfnConnection(this, 'Resource', { catalogId: cdk.Stack.of(this).account, connectionInput: { connectionProperties: cdk.Lazy.any({ produce: () => Object.keys(this.properties).length > 0 ? this.properties : undefined }), connectionType: props.type.name, description: props.description, matchCriteria: props.matchCriteria, name: props.connectionName, physicalConnectionRequirements, }, }); const resourceName = this.getResourceNameAttribute(connectionResource.ref); this.connectionArn = Connection.buildConnectionArn(this, resourceName); this.connectionName = resourceName; } /** * Add additional connection parameters * @param key parameter key * @param value parameter value */ addProperty(key, value) { this.properties[key] = value; } static { __runInitializers(_classThis, _classExtraInitializers); } }; return Connection = _classThis; })(); exports.Connection = Connection; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbm5lY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0Esd0NBQXdDO0FBRXhDLG1EQUFxRDtBQUNyRCw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRTFFOzs7Ozs7O0dBT0c7QUFDSCxNQUFhLGNBQWM7O0lBQ3pCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV6RDs7T0FFRztJQUNJLE1BQU0sQ0FBVSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFM0Q7O09BRUc7SUFDSSxNQUFNLENBQVUsT0FBTyxHQUFHLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRS9EOztPQUVHO0lBQ0ksTUFBTSxDQUFVLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFFakc7O09BRUc7SUFDSSxNQUFNLENBQVUsc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUU3Rjs7T0FFRztJQUNJLE1BQU0sQ0FBVSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFL0Q7OztPQUdHO0lBQ0ksTUFBTSxDQUFVLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUV2RTs7O09BR0c7SUFDSSxNQUFNLENBQVUsTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTdEOztPQUVHO0lBQ0ksTUFBTSxDQUFVLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUV2RTs7T0FFRztJQUNJLE1BQU0sQ0FBVSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQUMsV0FBVyxDQUFD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WUFBWSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUM7U0FDcEM7UUFFRDs7OztXQUlHO1FBRUksV0FBVyxDQUFDLEdBQVcsRUFBRSxLQUFhO1lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQzlCOztZQWhHVSx1REFBVTs7Ozs7QUFBVixnQ0FBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBDZm5Db25uZWN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEsIE1ldGhvZE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcblxuLyoqXG4gKiBUaGUgdHlwZSBvZiB0aGUgZ2x1ZSBjb25uZWN0aW9uXG4gKlxuICogSWYgeW91IG5lZWQgdG8gdXNlIGEgY29ubmVjdGlvbiB0eXBlIHRoYXQgZG9lc24ndCBleGlzdCBhcyBhIHN0YXRpYyBtZW1iZXIsIHlvdVxuICogY2FuIGluc3RhbnRpYXRlIGEgYENvbm5lY3Rpb25UeXBlYCBvYmplY3QsIGUuZzogYG5ldyBDb25uZWN0aW9uVHlwZSgnTkVXX1RZUEUnKWAuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1nbHVlLWNvbm5lY3Rpb24tY29ubmVjdGlvbmlucHV0Lmh0bWwjY2ZuLWdsdWUtY29ubmVjdGlvbi1jb25uZWN0aW9uaW5wdXQtY29ubmVjdGlvbnR5cGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25UeXBlIHtcbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgdGhyb3VnaCBKYXZhIERhdGFiYXNlIENvbm5lY3Rpdml0eSAoSkRCQykuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpEQkMgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0pEQkMnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gYW4gQXBhY2hlIEthZmthIHN0cmVhbWluZyBwbGF0Zm9ybS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgS0FGS0EgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0tBRktBJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIGEgTW9uZ29EQiBkb2N1bWVudCBkYXRhYmFzZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9OR09EQiA9IG5ldyBDb25uZWN0aW9uVHlwZSgnTU9OR09EQicpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB1c2VkIGZvciB2aWV3IHZhbGlkYXRpb24gYnkgQW1hem9uIFJlZHNoaWZ0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWSUVXX1ZBTElEQVRJT05fUkVEU0hJRlQgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1ZJRVdfVkFMSURBVElPTl9SRURTSElGVCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB1c2VkIGZvciB2aWV3IHZhbGlkYXRpb24gYnkgQW1hem9uIEF0aGVuYS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVklFV19WQUxJREFUSU9OX0FUSEVOQSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnVklFV19WQUxJREFUSU9OX0FUSEVOQScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgbmV0d29yayBjb25uZWN0aW9uIHRvIGEgZGF0YSBzb3VyY2Ugd2l0aGluIGFuIEFtYXpvbiBWaXJ0dWFsIFByaXZhdGUgQ2xvdWQgZW52aXJvbm1lbnQgKEFtYXpvbiBWUEMpLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBORVRXT1JLID0gbmV3IENvbm5lY3Rpb25UeXBlKCdORVRXT1JLJyk7XG5cbiAgLyoqXG4gICAqIFVzZXMgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBjb250YWluZWQgaW4gYSBjb25uZWN0b3IgcHVyY2hhc2VkIGZyb20gQVdTIE1hcmtldHBsYWNlXG4gICAqIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gZGF0YSBzdG9yZXMgdGhhdCBhcmUgbm90IG5hdGl2ZWx5IHN1cHBvcnRlZCBieSBBV1MgR2x1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFSS0VUUExBQ0UgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ01BUktFVFBMQUNFJyk7XG5cbiAgLyoqXG4gICAqIFVzZXMgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBjb250YWluZWQgaW4gYSBjdXN0b20gY29ubmVjdG9yIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gZGF0YSBzdG9yZXNcbiAgICogdGhhdCBhcmUgbm90IG5hdGl2ZWx5IHN1cHBvcnRlZCBieSBBV1MgR2x1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ1VTVE9NID0gbmV3IENvbm5lY3Rpb25UeXBlKCdDVVNUT00nKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gRmFjZWJvb2sgQWRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGQUNFQk9PS0FEUyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnRkFDRUJPT0tBRFMnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gR29vZ2xlIEFkcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR09PR0xFQURTID0gbmV3IENvbm5lY3Rpb25UeXBlKCdHT09HTEVBRFMnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gR29vZ2xlIFNoZWV0cy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR09PR0xFU0hFRVRTID0gbmV3IENvbm5lY3Rpb25UeXBlKCdHT09HTEVTSEVFVFMnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gR29vZ2xlIEFuYWx5dGljcyA0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHT09HTEVBTkFMWVRJQ1M0ID0gbmV3IENvbm5lY3Rpb25UeXBlKCdHT09HTEVBTkFMWVRJQ1M0Jyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEh1YlNwb3QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhVQlNQT1QgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0hVQlNQT1QnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gSW5zdGFncmFtIEFkcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5TVEFHUkFNQURTID0gbmV3IENvbm5lY3Rpb25UeXBlKCdJTlNUQUdSQU1BRFMnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gSW50ZXJjb20uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOVEVSQ09NID0gbmV3IENvbm5lY3Rpb25UeXBlKCdJTlRFUkNPTScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBKaXJhIENsb3VkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKSVJBQ0xPVUQgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0pJUkFDTE9VRCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBBZG9iZSBNYXJrZXRvIEVuZ2FnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFSS0VUTyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnTUFSS0VUTycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBPcmFjbGUgTmV0U3VpdGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5FVFNVSVRFRVJQID0gbmV3IENvbm5lY3Rpb25UeXBlKCdORVRTVUlURUVSUCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBTYWxlc2ZvcmNlIHVzaW5nIE9BdXRoIGF1dGhlbnRpY2F0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTQUxFU0ZPUkNFID0gbmV3IENvbm5lY3Rpb25UeXBlKCdTQUxFU0ZPUkNFJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNhbGVzZm9yY2UgTWFya2V0aW5nIENsb3VkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTQUxFU0ZPUkNFTUFSS0VUSU5HQ0xPVUQgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NBTEVTRk9SQ0VNQVJLRVRJTkdDTE9VRCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBTYWxlc2ZvcmNlIE1hcmtldGluZyBDbG91ZCBBY2NvdW50IEVuZ2FnZW1lbnQgKE1DQUUpLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTQUxFU0ZPUkNFUEFSRE9UID0gbmV3IENvbm5lY3Rpb25UeXBlKCdTQUxFU0ZPUkNFUEFSRE9UJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNBUCBPRGF0YS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0FQT0RBVEEgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NBUE9EQVRBJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNlcnZpY2VOb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFUlZJQ0VOT1cgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NFUlZJQ0VOT1cnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU2xhY2suXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNMQUNLID0gbmV3IENvbm5lY3Rpb25UeXBlKCdTTEFDSycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBTbmFwY2hhdCBBZHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNOQVBDSEFUQURTID0gbmV3IENvbm5lY3Rpb25UeXBlKCdTTkFQQ0hBVEFEUycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBTdHJpcGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUklQRSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU1RSSVBFJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFplbmRlc2suXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFpFTkRFU0sgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1pFTkRFU0snKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gWm9obyBDUk0uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFpPSE9DUk0gPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1pPSE9DUk0nKTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBDb25uZWN0aW9uVHlwZSwgYXMgZXhwZWN0ZWQgYnkgQ29ubmVjdGlvbiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29ubmVjdGlvbiB0eXBlIG5hbWUgYXMgZXhwZWN0ZWQgYnkgQ29ubmVjdGlvbiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIGEgY3JlYXRlZCBvciBhbiBpbXBvcnRlZCBgQ29ubmVjdGlvbmBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29ubmVjdGlvbiBleHRlbmRzIGNkay5JUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbm5lY3Rpb25cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29ubmVjdGlvblxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uQXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQmFzZSBDb25uZWN0aW9uIE9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29ubmVjdGlvblxuICAgKiBAZGVmYXVsdCBjbG91ZGZvcm1hdGlvbiBnZW5lcmF0ZWQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29ubmVjdGlvbi5cbiAgICogQGRlZmF1bHQgbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAgS2V5LVZhbHVlIHBhaXJzIHRoYXQgZGVmaW5lIHBhcmFtZXRlcnMgZm9yIHRoZSBjb25uZWN0aW9uLlxuICAgKiAgQGRlZmF1bHQgZW1wdHkgcHJvcGVydGllc1xuICAgKiAgQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvYXdzLWdsdWUtcHJvZ3JhbW1pbmctZXRsLWNvbm5lY3QuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydGllcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBjcml0ZXJpYSB0aGF0IGNhbiBiZSB1c2VkIGluIHNlbGVjdGluZyB0aGlzIGNvbm5lY3Rpb24uXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBmaWx0ZXJpbmcgdGhlIHJlc3VsdHMgb2YgaHR0cHM6Ly9hd3NjbGkuYW1hem9uYXdzLmNvbS92Mi9kb2N1bWVudGF0aW9uL2FwaS9sYXRlc3QvcmVmZXJlbmNlL2dsdWUvZ2V0LWNvbm5lY3Rpb25zLmh0bWxcbiAgICogQGRlZmF1bHQgbm8gbWF0Y2ggY3JpdGVyaWFcbiAgICovXG4gIHJlYWRvbmx5IG1hdGNoQ3JpdGVyaWE/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc2VjdXJpdHkgZ3JvdXBzIG5lZWRlZCB0byBzdWNjZXNzZnVsbHkgbWFrZSB0aGlzIGNvbm5lY3Rpb24gZS5nLiB0byBzdWNjZXNzZnVsbHkgY29ubmVjdCB0byBWUEMuXG4gICAqIEBkZWZhdWx0IG5vIHNlY3VyaXR5IGdyb3VwXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIHN1Ym5ldCB0byBjb25uZWN0IHRvIHJlc291cmNlcyB3aXRoaW4gYSBWUEMuIFNlZSBtb3JlIGF0IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9zdGFydC1jb25uZWN0aW5nLmh0bWwuXG4gICAqIEBkZWZhdWx0IG5vIHN1Ym5ldFxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0PzogZWMyLklTdWJuZXQ7XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGBDb25uZWN0aW9uYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25Qcm9wcyBleHRlbmRzIENvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBDb25uZWN0aW9uVHlwZTtcbn1cblxuLyoqXG4gKiBBbiBBV1MgR2x1ZSBjb25uZWN0aW9uIHRvIGEgZGF0YSBzb3VyY2UuXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbm5lY3Rpb24ge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1nbHVlLWFscGhhLkNvbm5lY3Rpb24nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBjb25zdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGFuIGV4dGVybmFsIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgaWQuXG4gICAqIEBwYXJhbSBjb25uZWN0aW9uQXJuIGFybiBvZiBleHRlcm5hbCBjb25uZWN0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29ubmVjdGlvbkFybihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbm5lY3Rpb25Bcm46IHN0cmluZyk6IElDb25uZWN0aW9uIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJQ29ubmVjdGlvbiB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbk5hbWUgPSBjZGsuQXJuLmV4dHJhY3RSZXNvdXJjZU5hbWUoY29ubmVjdGlvbkFybiwgJ2Nvbm5lY3Rpb24nKTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uQXJuID0gY29ubmVjdGlvbkFybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIGNvbnN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBpZC5cbiAgICogQHBhcmFtIGNvbm5lY3Rpb25OYW1lIG5hbWUgb2YgZXh0ZXJuYWwgY29ubmVjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbm5lY3Rpb25OYW1lKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29ubmVjdGlvbk5hbWU6IHN0cmluZyk6IElDb25uZWN0aW9uIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJQ29ubmVjdGlvbiB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbk5hbWUgPSBjb25uZWN0aW9uTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uQXJuID0gQ29ubmVjdGlvbi5idWlsZENvbm5lY3Rpb25Bcm4oc2NvcGUsIGNvbm5lY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRDb25uZWN0aW9uQXJuKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgY29ubmVjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdnbHVlJyxcbiAgICAgIHJlc291cmNlOiAnY29ubmVjdGlvbicsXG4gICAgICByZXNvdXJjZU5hbWU6IGNvbm5lY3Rpb25OYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbm5lY3Rpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbk5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29ubmVjdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLmNvbm5lY3Rpb25OYW1lLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHMucHJvcGVydGllcyB8fCB7fTtcblxuICAgIGNvbnN0IHBoeXNpY2FsQ29ubmVjdGlvblJlcXVpcmVtZW50cyA9IHByb3BzLnN1Ym5ldCB8fCBwcm9wcy5zZWN1cml0eUdyb3VwcyA/IHtcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLnN1Ym5ldCA/IHByb3BzLnN1Ym5ldC5hdmFpbGFiaWxpdHlab25lIDogdW5kZWZpbmVkLFxuICAgICAgc3VibmV0SWQ6IHByb3BzLnN1Ym5ldCA/IHByb3BzLnN1Ym5ldC5zdWJuZXRJZCA6IHVuZGVmaW5lZCxcbiAgICAgIHNlY3VyaXR5R3JvdXBJZExpc3Q6IHByb3BzLnNlY3VyaXR5R3JvdXBzID8gcHJvcHMuc2VjdXJpdHlHcm91cHMubWFwKHNnID0+IHNnLnNlY3VyaXR5R3JvdXBJZCkgOiB1bmRlZmluZWQsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbm5lY3Rpb25SZXNvdXJjZSA9IG5ldyBDZm5Db25uZWN0aW9uKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGNhdGFsb2dJZDogY2RrLlN0YWNrLm9mKHRoaXMpLmFjY291bnQsXG4gICAgICBjb25uZWN0aW9uSW5wdXQ6IHtcbiAgICAgICAgY29ubmVjdGlvblByb3BlcnRpZXM6IGNkay5MYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykubGVuZ3RoID4gMCA/IHRoaXMucHJvcGVydGllcyA6IHVuZGVmaW5lZCB9KSxcbiAgICAgICAgY29ubmVjdGlvblR5cGU6IHByb3BzLnR5cGUubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICBtYXRjaENyaXRlcmlhOiBwcm9wcy5tYXRjaENyaXRlcmlhLFxuICAgICAgICBuYW1lOiBwcm9wcy5jb25uZWN0aW9uTmFtZSxcbiAgICAgICAgcGh5c2ljYWxDb25uZWN0aW9uUmVxdWlyZW1lbnRzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKGNvbm5lY3Rpb25SZXNvdXJjZS5yZWYpO1xuICAgIHRoaXMuY29ubmVjdGlvbkFybiA9IENvbm5lY3Rpb24uYnVpbGRDb25uZWN0aW9uQXJuKHRoaXMsIHJlc291cmNlTmFtZSk7XG4gICAgdGhpcy5jb25uZWN0aW9uTmFtZSA9IHJlc291cmNlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYWRkaXRpb25hbCBjb25uZWN0aW9uIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIGtleSBwYXJhbWV0ZXIga2V5XG4gICAqIEBwYXJhbSB2YWx1ZSBwYXJhbWV0ZXIgdmFsdWVcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRQcm9wZXJ0eShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJvcGVydGllc1trZXldID0gdmFsdWU7XG4gIH1cbn1cbiJdfQ==