@aws-cdk/aws-glue-alpha
Version:
The CDK Construct Library for AWS::Glue
255 lines • 30.4 kB
JavaScript
"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;
var Connection_1;
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 {
constructor(name) {
this.name = name;
}
/**
* The connection type name as expected by Connection resource.
*/
toString() {
return this.name;
}
}
exports.ConnectionType = ConnectionType;
_a = JSII_RTTI_SYMBOL_1;
ConnectionType[_a] = { fqn: "@aws-cdk/aws-glue-alpha.ConnectionType", version: "2.218.0-alpha.0" };
/**
* Designates a connection to a database through Java Database Connectivity (JDBC).
*/
ConnectionType.JDBC = new ConnectionType('JDBC');
/**
* Designates a connection to an Apache Kafka streaming platform.
*/
ConnectionType.KAFKA = new ConnectionType('KAFKA');
/**
* Designates a connection to a MongoDB document database.
*/
ConnectionType.MONGODB = new ConnectionType('MONGODB');
/**
* Designates a connection used for view validation by Amazon Redshift.
*/
ConnectionType.VIEW_VALIDATION_REDSHIFT = new ConnectionType('VIEW_VALIDATION_REDSHIFT');
/**
* Designates a connection used for view validation by Amazon Athena.
*/
ConnectionType.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).
*/
ConnectionType.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.
*/
ConnectionType.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.
*/
ConnectionType.CUSTOM = new ConnectionType('CUSTOM');
/**
* Designates a connection to Facebook Ads.
*/
ConnectionType.FACEBOOKADS = new ConnectionType('FACEBOOKADS');
/**
* Designates a connection to Google Ads.
*/
ConnectionType.GOOGLEADS = new ConnectionType('GOOGLEADS');
/**
* Designates a connection to Google Sheets.
*/
ConnectionType.GOOGLESHEETS = new ConnectionType('GOOGLESHEETS');
/**
* Designates a connection to Google Analytics 4.
*/
ConnectionType.GOOGLEANALYTICS4 = new ConnectionType('GOOGLEANALYTICS4');
/**
* Designates a connection to HubSpot.
*/
ConnectionType.HUBSPOT = new ConnectionType('HUBSPOT');
/**
* Designates a connection to Instagram Ads.
*/
ConnectionType.INSTAGRAMADS = new ConnectionType('INSTAGRAMADS');
/**
* Designates a connection to Intercom.
*/
ConnectionType.INTERCOM = new ConnectionType('INTERCOM');
/**
* Designates a connection to Jira Cloud.
*/
ConnectionType.JIRACLOUD = new ConnectionType('JIRACLOUD');
/**
* Designates a connection to Adobe Marketo Engage.
*/
ConnectionType.MARKETO = new ConnectionType('MARKETO');
/**
* Designates a connection to Oracle NetSuite.
*/
ConnectionType.NETSUITEERP = new ConnectionType('NETSUITEERP');
/**
* Designates a connection to Salesforce using OAuth authentication.
*/
ConnectionType.SALESFORCE = new ConnectionType('SALESFORCE');
/**
* Designates a connection to Salesforce Marketing Cloud.
*/
ConnectionType.SALESFORCEMARKETINGCLOUD = new ConnectionType('SALESFORCEMARKETINGCLOUD');
/**
* Designates a connection to Salesforce Marketing Cloud Account Engagement (MCAE).
*/
ConnectionType.SALESFORCEPARDOT = new ConnectionType('SALESFORCEPARDOT');
/**
* Designates a connection to SAP OData.
*/
ConnectionType.SAPODATA = new ConnectionType('SAPODATA');
/**
* Designates a connection to ServiceNow.
*/
ConnectionType.SERVICENOW = new ConnectionType('SERVICENOW');
/**
* Designates a connection to Slack.
*/
ConnectionType.SLACK = new ConnectionType('SLACK');
/**
* Designates a connection to Snapchat Ads.
*/
ConnectionType.SNAPCHATADS = new ConnectionType('SNAPCHATADS');
/**
* Designates a connection to Stripe.
*/
ConnectionType.STRIPE = new ConnectionType('STRIPE');
/**
* Designates a connection to Zendesk.
*/
ConnectionType.ZENDESK = new ConnectionType('ZENDESK');
/**
* Designates a connection to Zoho CRM.
*/
ConnectionType.ZOHOCRM = new ConnectionType('ZOHOCRM');
/**
* An AWS Glue connection to a data source.
*/
let Connection = Connection_1 = class Connection extends cdk.Resource {
/**
* 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 {
constructor() {
super(...arguments);
this.connectionName = cdk.Arn.extractResourceName(connectionArn, 'connection');
this.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 {
constructor() {
super(...arguments);
this.connectionName = connectionName;
this.connectionArn = Connection_1.buildConnectionArn(scope, connectionName);
}
}
return new Import(scope, id);
}
static buildConnectionArn(scope, connectionName) {
return cdk.Stack.of(scope).formatArn({
service: 'glue',
resource: 'connection',
resourceName: connectionName,
});
}
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_1.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;
}
};
exports.Connection = Connection;
_b = JSII_RTTI_SYMBOL_1;
Connection[_b] = { fqn: "@aws-cdk/aws-glue-alpha.Connection", version: "2.218.0-alpha.0" };
/** Uniquely identifies this class. */
Connection.PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.Connection';
__decorate([
(0, metadata_resource_1.MethodMetadata)()
], Connection.prototype, "addProperty", null);
exports.Connection = Connection = Connection_1 = __decorate([
prop_injectable_1.propertyInjectable
], Connection);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbm5lY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBLHdDQUF3QztBQUV4QyxtREFBcUQ7QUFDckQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUUxRTs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxjQUFjO0lBb0p6QixZQUFZLElBQVk7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7S0FDbEI7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDbEI7O0FBN0pILHdDQThKQzs7O0FBN0pDOztHQUVHO0FBQ29CLG1CQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFekQ7O0dBRUc7QUFDb0Isb0JBQUssR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUUzRDs7R0FFRztBQUNvQixzQkFBTyxHQUFHLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRS9EOztHQUVHO0FBQ29CLHVDQUF3QixHQUFHLElBQUksY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFakc7O0dBRUc7QUFDb0IscUNBQXNCLEdBQUcsSUFBSSxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUU3Rjs7R0FFRztBQUNvQixzQkFBTyxHQUFHLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRS9EOzs7R0FHRztBQUNvQiwwQkFBVyxHQUFHLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRXZFOzs7R0FHRztBQUNvQixxQkFBTSxHQUFHLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRTdEOztHQUVHO0FBQ29CLDBCQUFXLEdBQUcsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFdkU7O0dBRUc7QUFDb0Isd0JBQVMsR0FBRyxJ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cy1lYzInO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENmbkNvbm5lY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuXG4vKipcbiAqIFRoZSB0eXBlIG9mIHRoZSBnbHVlIGNvbm5lY3Rpb25cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byB1c2UgYSBjb25uZWN0aW9uIHR5cGUgdGhhdCBkb2Vzbid0IGV4aXN0IGFzIGEgc3RhdGljIG1lbWJlciwgeW91XG4gKiBjYW4gaW5zdGFudGlhdGUgYSBgQ29ubmVjdGlvblR5cGVgIG9iamVjdCwgZS5nOiBgbmV3IENvbm5lY3Rpb25UeXBlKCdORVdfVFlQRScpYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWdsdWUtY29ubmVjdGlvbi1jb25uZWN0aW9uaW5wdXQuaHRtbCNjZm4tZ2x1ZS1jb25uZWN0aW9uLWNvbm5lY3Rpb25pbnB1dC1jb25uZWN0aW9udHlwZVxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvblR5cGUge1xuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSB0aHJvdWdoIEphdmEgRGF0YWJhc2UgQ29ubmVjdGl2aXR5IChKREJDKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSkRCQyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnSkRCQycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBhbiBBcGFjaGUgS2Fma2Egc3RyZWFtaW5nIHBsYXRmb3JtLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBLQUZLQSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnS0FGS0EnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gYSBNb25nb0RCIGRvY3VtZW50IGRhdGFiYXNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT05HT0RCID0gbmV3IENvbm5lY3Rpb25UeXBlKCdNT05HT0RCJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHVzZWQgZm9yIHZpZXcgdmFsaWRhdGlvbiBieSBBbWF6b24gUmVkc2hpZnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZJRVdfVkFMSURBVElPTl9SRURTSElGVCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnVklFV19WQUxJREFUSU9OX1JFRFNISUZUJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHVzZWQgZm9yIHZpZXcgdmFsaWRhdGlvbiBieSBBbWF6b24gQXRoZW5hLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWSUVXX1ZBTElEQVRJT05fQVRIRU5BID0gbmV3IENvbm5lY3Rpb25UeXBlKCdWSUVXX1ZBTElEQVRJT05fQVRIRU5BJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBuZXR3b3JrIGNvbm5lY3Rpb24gdG8gYSBkYXRhIHNvdXJjZSB3aXRoaW4gYW4gQW1hem9uIFZpcnR1YWwgUHJpdmF0ZSBDbG91ZCBlbnZpcm9ubWVudCAoQW1hem9uIFZQQykuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5FVFdPUksgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ05FVFdPUksnKTtcblxuICAvKipcbiAgICogVXNlcyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGNvbnRhaW5lZCBpbiBhIGNvbm5lY3RvciBwdXJjaGFzZWQgZnJvbSBBV1MgTWFya2V0cGxhY2VcbiAgICogdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byBkYXRhIHN0b3JlcyB0aGF0IGFyZSBub3QgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IEFXUyBHbHVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVJLRVRQTEFDRSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnTUFSS0VUUExBQ0UnKTtcblxuICAvKipcbiAgICogVXNlcyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGNvbnRhaW5lZCBpbiBhIGN1c3RvbSBjb25uZWN0b3IgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byBkYXRhIHN0b3Jlc1xuICAgKiB0aGF0IGFyZSBub3QgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IEFXUyBHbHVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDVVNUT00gPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0NVU1RPTScpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBGYWNlYm9vayBBZHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZBQ0VCT09LQURTID0gbmV3IENvbm5lY3Rpb25UeXBlKCdGQUNFQk9PS0FEUycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBHb29nbGUgQWRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHT09HTEVBRFMgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0dPT0dMRUFEUycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBHb29nbGUgU2hlZXRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHT09HTEVTSEVFVFMgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0dPT0dMRVNIRUVUUycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBHb29nbGUgQW5hbHl0aWNzIDQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdPT0dMRUFOQUxZVElDUzQgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0dPT0dMRUFOQUxZVElDUzQnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gSHViU3BvdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSFVCU1BPVCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnSFVCU1BPVCcpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBJbnN0YWdyYW0gQWRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlNUQUdSQU1BRFMgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0lOU1RBR1JBTUFEUycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBJbnRlcmNvbS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5URVJDT00gPSBuZXcgQ29ubmVjdGlvblR5cGUoJ0lOVEVSQ09NJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEppcmEgQ2xvdWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpJUkFDTE9VRCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnSklSQUNMT1VEJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIEFkb2JlIE1hcmtldG8gRW5nYWdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVJLRVRPID0gbmV3IENvbm5lY3Rpb25UeXBlKCdNQVJLRVRPJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIE9yYWNsZSBOZXRTdWl0ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkVUU1VJVEVFUlAgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ05FVFNVSVRFRVJQJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNhbGVzZm9yY2UgdXNpbmcgT0F1dGggYXV0aGVudGljYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBTEVTRk9SQ0UgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NBTEVTRk9SQ0UnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU2FsZXNmb3JjZSBNYXJrZXRpbmcgQ2xvdWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBTEVTRk9SQ0VNQVJLRVRJTkdDTE9VRCA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU0FMRVNGT1JDRU1BUktFVElOR0NMT1VEJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNhbGVzZm9yY2UgTWFya2V0aW5nIENsb3VkIEFjY291bnQgRW5nYWdlbWVudCAoTUNBRSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBTEVTRk9SQ0VQQVJET1QgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NBTEVTRk9SQ0VQQVJET1QnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU0FQIE9EYXRhLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTQVBPREFUQSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU0FQT0RBVEEnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gU2VydmljZU5vdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VSVklDRU5PVyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnU0VSVklDRU5PVycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBTbGFjay5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0xBQ0sgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NMQUNLJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFNuYXBjaGF0IEFkcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU05BUENIQVRBRFMgPSBuZXcgQ29ubmVjdGlvblR5cGUoJ1NOQVBDSEFUQURTJyk7XG5cbiAgLyoqXG4gICAqIERlc2lnbmF0ZXMgYSBjb25uZWN0aW9uIHRvIFN0cmlwZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSSVBFID0gbmV3IENvbm5lY3Rpb25UeXBlKCdTVFJJUEUnKTtcblxuICAvKipcbiAgICogRGVzaWduYXRlcyBhIGNvbm5lY3Rpb24gdG8gWmVuZGVzay5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgWkVOREVTSyA9IG5ldyBDb25uZWN0aW9uVHlwZSgnWkVOREVTSycpO1xuXG4gIC8qKlxuICAgKiBEZXNpZ25hdGVzIGEgY29ubmVjdGlvbiB0byBab2hvIENSTS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgWk9IT0NSTSA9IG5ldyBDb25uZWN0aW9uVHlwZSgnWk9IT0NSTScpO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIENvbm5lY3Rpb25UeXBlLCBhcyBleHBlY3RlZCBieSBDb25uZWN0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb25uZWN0aW9uIHR5cGUgbmFtZSBhcyBleHBlY3RlZCBieSBDb25uZWN0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgYSBjcmVhdGVkIG9yIGFuIGltcG9ydGVkIGBDb25uZWN0aW9uYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb25uZWN0aW9uIGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29ubmVjdGlvblxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25Bcm46IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIENvbm5lY3Rpb24gT3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb25uZWN0aW9uXG4gICAqIEBkZWZhdWx0IGNsb3VkZm9ybWF0aW9uIGdlbmVyYXRlZCBuYW1lXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb25uZWN0aW9uLlxuICAgKiBAZGVmYXVsdCBubyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqICBLZXktVmFsdWUgcGFpcnMgdGhhdCBkZWZpbmUgcGFyYW1ldGVycyBmb3IgdGhlIGNvbm5lY3Rpb24uXG4gICAqICBAZGVmYXVsdCBlbXB0eSBwcm9wZXJ0aWVzXG4gICAqICBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC9kZy9hd3MtZ2x1ZS1wcm9ncmFtbWluZy1ldGwtY29ubmVjdC5odG1sXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGNyaXRlcmlhIHRoYXQgY2FuIGJlIHVzZWQgaW4gc2VsZWN0aW5nIHRoaXMgY29ubmVjdGlvbi5cbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGZpbHRlcmluZyB0aGUgcmVzdWx0cyBvZiBodHRwczovL2F3c2NsaS5hbWF6b25hd3MuY29tL3YyL2RvY3VtZW50YXRpb24vYXBpL2xhdGVzdC9yZWZlcmVuY2UvZ2x1ZS9nZXQtY29ubmVjdGlvbnMuaHRtbFxuICAgKiBAZGVmYXVsdCBubyBtYXRjaCBjcml0ZXJpYVxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hDcml0ZXJpYT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBzZWN1cml0eSBncm91cHMgbmVlZGVkIHRvIHN1Y2Nlc3NmdWxseSBtYWtlIHRoaXMgY29ubmVjdGlvbiBlLmcuIHRvIHN1Y2Nlc3NmdWxseSBjb25uZWN0IHRvIFZQQy5cbiAgICogQGRlZmF1bHQgbm8gc2VjdXJpdHkgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogZWMyLklTZWN1cml0eUdyb3VwW107XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgc3VibmV0IHRvIGNvbm5lY3QgdG8gcmVzb3VyY2VzIHdpdGhpbiBhIFZQQy4gU2VlIG1vcmUgYXQgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL3N0YXJ0LWNvbm5lY3RpbmcuaHRtbC5cbiAgICogQGRlZmF1bHQgbm8gc3VibmV0XG4gICAqL1xuICByZWFkb25seSBzdWJuZXQ/OiBlYzIuSVN1Ym5ldDtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYENvbm5lY3Rpb25gXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblByb3BzIGV4dGVuZHMgQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IENvbm5lY3Rpb25UeXBlO1xufVxuXG4vKipcbiAqIEFuIEFXUyBHbHVlIGNvbm5lY3Rpb24gdG8gYSBkYXRhIHNvdXJjZS5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb24gZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJQ29ubmVjdGlvbiB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuQ29ubmVjdGlvbic7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIGNvbnN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBpZC5cbiAgICogQHBhcmFtIGNvbm5lY3Rpb25Bcm4gYXJuIG9mIGV4dGVybmFsIGNvbm5lY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db25uZWN0aW9uQXJuKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29ubmVjdGlvbkFybjogc3RyaW5nKTogSUNvbm5lY3Rpb24ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElDb25uZWN0aW9uIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uTmFtZSA9IGNkay5Bcm4uZXh0cmFjdFJlc291cmNlTmFtZShjb25uZWN0aW9uQXJuLCAnY29ubmVjdGlvbicpO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25Bcm4gPSBjb25uZWN0aW9uQXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gY29uc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhbiBleHRlcm5hbCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApLlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCdzIGlkLlxuICAgKiBAcGFyYW0gY29ubmVjdGlvbk5hbWUgbmFtZSBvZiBleHRlcm5hbCBjb25uZWN0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29ubmVjdGlvbk5hbWUoc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25uZWN0aW9uTmFtZTogc3RyaW5nKTogSUNvbm5lY3Rpb24ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElDb25uZWN0aW9uIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uTmFtZSA9IGNvbm5lY3Rpb25OYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25Bcm4gPSBDb25uZWN0aW9uLmJ1aWxkQ29ubmVjdGlvbkFybihzY29wZSwgY29ubmVjdGlvbk5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWlsZENvbm5lY3Rpb25Bcm4oc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBjb25uZWN0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2RrLlN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ2dsdWUnLFxuICAgICAgcmVzb3VyY2U6ICdjb25uZWN0aW9uJyxcbiAgICAgIHJlc291cmNlTmFtZTogY29ubmVjdGlvbk5hbWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25Bcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbm5lY3Rpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uTmFtZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuY29ubmVjdGlvbk5hbWUsXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wcy5wcm9wZXJ0aWVzIHx8IHt9O1xuXG4gICAgY29uc3QgcGh5c2ljYWxDb25uZWN0aW9uUmVxdWlyZW1lbnRzID0gcHJvcHMuc3VibmV0IHx8IHByb3BzLnNlY3VyaXR5R3JvdXBzID8ge1xuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuc3VibmV0ID8gcHJvcHMuc3VibmV0LmF2YWlsYWJpbGl0eVpvbmUgOiB1bmRlZmluZWQsXG4gICAgICBzdWJuZXRJZDogcHJvcHMuc3VibmV0ID8gcHJvcHMuc3VibmV0LnN1Ym5ldElkIDogdW5kZWZpbmVkLFxuICAgICAgc2VjdXJpdHlHcm91cElkTGlzdDogcHJvcHMuc2VjdXJpdHlHcm91cHMgPyBwcm9wcy5zZWN1cml0eUdyb3Vwcy5tYXAoc2cgPT4gc2cuc2VjdXJpdHlHcm91cElkKSA6IHVuZGVmaW5lZCxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29ubmVjdGlvblJlc291cmNlID0gbmV3IENmbkNvbm5lY3Rpb24odGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgY2F0YWxvZ0lkOiBjZGsuU3RhY2sub2YodGhpcykuYWNjb3VudCxcbiAgICAgIGNvbm5lY3Rpb25JbnB1dDoge1xuICAgICAgICBjb25uZWN0aW9uUHJvcGVydGllczogY2RrLkxhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5sZW5ndGggPiAwID8gdGhpcy5wcm9wZXJ0aWVzIDogdW5kZWZpbmVkIH0pLFxuICAgICAgICBjb25uZWN0aW9uVHlwZTogcHJvcHMudHlwZS5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgIG1hdGNoQ3JpdGVyaWE6IHByb3BzLm1hdGNoQ3JpdGVyaWEsXG4gICAgICAgIG5hbWU6IHByb3BzLmNvbm5lY3Rpb25OYW1lLFxuICAgICAgICBwaHlzaWNhbENvbm5lY3Rpb25SZXF1aXJlbWVudHMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gdGhpcy5nZXRSZXNvdXJjZU5hbWVBdHRyaWJ1dGUoY29ubmVjdGlvblJlc291cmNlLnJlZik7XG4gICAgdGhpcy5jb25uZWN0aW9uQXJuID0gQ29ubmVjdGlvbi5idWlsZENvbm5lY3Rpb25Bcm4odGhpcywgcmVzb3VyY2VOYW1lKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25OYW1lID0gcmVzb3VyY2VOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhZGRpdGlvbmFsIGNvbm5lY3Rpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ga2V5IHBhcmFtZXRlciBrZXlcbiAgICogQHBhcmFtIHZhbHVlIHBhcmFtZXRlciB2YWx1ZVxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZFByb3BlcnR5KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuIl19