raindancers-network
Version:
Extensions to the ec2.Vpc Constructs
176 lines • 25.4 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CoreNetworkSegment = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const cdk = require("aws-cdk-lib");
const constructs = require("constructs");
const cloudWanEnum = require("./cloudWanEnum");
/**
* Create a Network Segment in a core network
*/
class CoreNetworkSegment extends constructs.Construct {
constructor(scope, id, props) {
super(scope, id);
this.updateDependsOn = props.updateDependsOn;
this.segmentName = props.segmentName;
this.policyTableServiceToken = props.policyTableServiceToken;
}
addSimpleShareAction(props) {
if (typeof props.shareWith === 'string') {
if (!(props.shareWith === '*')) {
throw new Error('Only * can be provided as a string');
}
}
const segmentAction = {};
segmentAction.description = props.description;
segmentAction.action = cloudWanEnum.SegmentActionType.SHARE,
segmentAction.mode = cloudWanEnum.SegmentActionMode.ATTACHMENT_ROUTE,
segmentAction.segment = this.segmentName;
if (props.shareWith === '*') {
segmentAction['share-with'] = props.shareWith;
}
else {
let segments = [];
props.shareWith.forEach((segment) => {
segments.push(segment.segmentName);
});
segmentAction['share-with'] = segments;
}
console.log('*** segment action ***');
console.log(segmentAction);
const segmentaction = new cdk.CustomResource(this, `CloudwanSegmentAction${this.segmentName}`, {
serviceToken: this.policyTableServiceToken,
properties: {
// the properties are base64 encoded, so the types make it into the lambda,
// the customresource otherwise makes everything a string
segmentAction: cdk.Fn.base64(cdk.Stack.of(this).toJsonString(segmentAction)),
},
});
this.updateDependsOn.push(segmentaction);
}
// commonservices.addSegmentAction({
// description: 'sharetoall',
// action: CloudWan.SegmentActionType.SHARE,
// mode: CloudWan.SegmentActionMode.ATTACHMENT_ROUTE,
// shareWith: '*',
// });
/**
* Add an Action to the Segment, ( Share or Route )
* @param props segment action
*/
addSegmentAction(props) {
const segmentAction = {};
segmentAction.description = props.description;
segmentAction.action = props.action;
segmentAction.segment = this.segmentName;
if (typeof props.shareWith === 'string') {
if (!(props.shareWith === '*')) {
throw new Error('Only * can be provided as a string');
}
}
if (props.action === cloudWanEnum.SegmentActionType.SHARE) {
if (props.shareWith === undefined) {
throw Error('shareWith must be defined for a share action');
}
segmentAction.mode = props.mode;
segmentAction['share-with'] = props.shareWith;
if (props.except === undefined) {
segmentAction.except = props.except;
}
}
if (props.action === cloudWanEnum.SegmentActionType.CREATE_ROUTE) {
if (props.destinationCidrBlocks === undefined || props.destinations === undefined) {
throw new Error('Both destinationCidrBlock and destinations are requried for a create-route action');
}
segmentAction['destination-cidr-blocks'] = props.destinationCidrBlocks;
segmentAction.destinations = props.destinations;
}
console.log('*** segment action ***');
console.log(segmentAction);
const segmentaction = new cdk.CustomResource(this, `CloudwanSegmentAction${this.segmentName}`, {
serviceToken: this.policyTableServiceToken,
properties: {
// the properties are base64 encoded, so the types make it into the lambda,
// the customresource otherwise makes everything a string
segmentAction: cdk.Fn.base64(cdk.Stack.of(this).toJsonString(segmentAction)),
},
});
this.updateDependsOn.push(segmentaction);
}
addSimpleAttachmentPolicy(props) {
const attachmentPolicy = {};
attachmentPolicy['rule-number'] = Number(props.ruleNumber);
attachmentPolicy.conditions = [
{
type: cloudWanEnum.AttachmentCondition.TAG_VALUE,
key: 'NetworkSegment',
value: this.segmentName,
operator: cloudWanEnum.Operators.EQUALS,
},
];
if (props.account) {
attachmentPolicy.conditions.push({
type: cloudWanEnum.AttachmentCondition.ACCOUNT_ID,
value: props.account,
operator: cloudWanEnum.Operators.EQUALS,
});
attachmentPolicy['condition-logic'] = cloudWanEnum.ConditionLogic.AND;
}
attachmentPolicy.action = {
'association-method': cloudWanEnum.AssociationMethod.CONSTANT,
'segment': this.segmentName,
};
attachmentPolicy.action['association-method'] = cloudWanEnum.AssociationMethod.CONSTANT;
attachmentPolicy.action.segment = this.segmentName;
const segmentpolicy = new cdk.CustomResource(this, `AttachmentPolicy${props.ruleNumber}`, {
serviceToken: this.policyTableServiceToken,
properties: {
attachmentPolicy: cdk.Fn.base64(cdk.Stack.of(this).toJsonString(attachmentPolicy)),
},
});
this.updateDependsOn?.push(segmentpolicy);
}
/**
* Add an AttachmentPolicy to a segment
* @param props An attachment policy
*/
addAttachmentPolicy(props) {
const attachmentPolicy = {};
// check construction of policy
if (props.conditions.length > 1 && props.conditionLogic === undefined) {
throw Error('conditionLogic must be set when there is more than 1 condition');
}
attachmentPolicy['rule-number'] = Number(props.ruleNumber); //ok
attachmentPolicy.conditions = props.conditions; // ok
//deal to key naming issues for the action
let localAction = {};
localAction.segment = props.action.segment;
if ('associationMethod' in props.action) {
localAction['association-method'] = props.action.associationMethod;
}
attachmentPolicy.action = localAction;
if (props.action.requireAcceptance) {
localAction['require-acceptance'] = props.action.requireAcceptance;
}
if (props.conditionLogic !== undefined) {
attachmentPolicy['condition-logic'] = props.conditionLogic;
}
if (props.description !== undefined) {
attachmentPolicy.description = props.description;
}
console.log('*** attachment policy ***');
console.log(attachmentPolicy);
const segmentpolicy = new cdk.CustomResource(this, `AttachmentPolicy${props.ruleNumber}`, {
serviceToken: this.policyTableServiceToken,
properties: {
attachmentPolicy: cdk.Fn.base64(cdk.Stack.of(this).toJsonString(attachmentPolicy)),
},
});
this.updateDependsOn?.push(segmentpolicy);
}
}
exports.CoreNetworkSegment = CoreNetworkSegment;
_a = JSII_RTTI_SYMBOL_1;
CoreNetworkSegment[_a] = { fqn: "raindancers-network.cloudwan.CoreNetworkSegment", version: "1.29.3" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZU5ldHdvcmtTZWdtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nsb3Vkd2FuL2NvcmVOZXR3b3JrU2VnbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFtQztBQUNuQyx5Q0FBeUM7QUFHekMsK0NBQStDO0FBRS9DOztHQUVHO0FBRUgsTUFBYSxrQkFBbUIsU0FBUSxVQUFVLENBQUMsU0FBUztJQVkxRCxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQTRDO1FBQy9GLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixDQUFDO0lBQy9ELENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxLQUEwQztRQUVwRSxJQUFJLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDdkMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUMsRUFBRTtnQkFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0Y7UUFFRCxNQUFNLGFBQWEsR0FBdUIsRUFBRSxDQUFDO1FBRTdDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUM5QyxhQUFhLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLO1lBQzNELGFBQWEsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQjtZQUNwRSxhQUFhLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFekMsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLEdBQUcsRUFBRTtZQUMzQixhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztTQUMvQzthQUFNO1lBQ0wsSUFBSSxRQUFRLEdBQWEsRUFBRSxDQUFDO1lBQzVCLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBRUgsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQztTQUN4QztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTNCLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUM3RixZQUFZLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtZQUMxQyxVQUFVLEVBQUU7Z0JBQ1YsMkVBQTJFO2dCQUMzRSx5REFBeUQ7Z0JBQ3pELGFBQWEsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDN0U7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUUzQyxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLCtCQUErQjtJQUMvQiw4Q0FBOEM7SUFDOUMsdURBQXVEO0lBQ3ZELG9CQUFvQjtJQUNwQixNQUFNO0lBR047OztTQUdFO0lBQ0ssZ0JBQWdCLENBQUMsS0FBaUM7UUFFdkQsTUFBTSxhQUFhLEdBQXVCLEVBQUUsQ0FBQztRQUU3QyxhQUFhLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDOUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3BDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUV6QyxJQUFJLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDdkMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUMsRUFBRTtnQkFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0Y7UUFHRCxJQUFLLEtBQUssQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRztZQUMzRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO2dCQUNqQyxNQUFNLEtBQUssQ0FBRSw4Q0FBOEMsQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ2hDLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBRTlDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQzlCLGFBQWEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzthQUNyQztTQUNGO1FBR0QsSUFBSyxLQUFLLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUc7WUFFbEUsSUFBSyxLQUFLLENBQUMscUJBQXFCLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFHO2dCQUNuRixNQUFNLElBQUksS0FBSyxDQUFDLG1GQUFtRixDQUFDLENBQUM7YUFDdEc7WUFFRCxhQUFhLENBQUMseUJBQXlCLENBQUMsR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUM7WUFDdkUsYUFBYSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1NBQ2pEO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSx3QkFBd0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzdGLFlBQVksRUFBRSxJQUFJLENBQUMsdUJBQXVCO1lBQzFDLFVBQVUsRUFBRTtnQkFDViwyRUFBMkU7Z0JBQzNFLHlEQUF5RDtnQkFDekQsYUFBYSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUM3RTtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFHTSx5QkFBeUIsQ0FDOUIsS0FBK0M7UUFFL0MsTUFBTSxnQkFBZ0IsR0FBdUIsRUFBRSxDQUFDO1FBRWhELGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0QsZ0JBQWdCLENBQUMsVUFBVSxHQUFHO1lBQzVCO2dCQUNFLElBQUksRUFBRSxZQUFZLENBQUMsbUJBQW1CLENBQUMsU0FBUztnQkFDaEQsR0FBRyxFQUFFLGdCQUFnQjtnQkFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUN2QixRQUFRLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNO2FBQ3hDO1NBQ0YsQ0FBQztRQUVGLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNqQixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUM5QjtnQkFDRSxJQUFJLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixDQUFDLFVBQVU7Z0JBQ2pELEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDcEIsUUFBUSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTTthQUN4QyxDQUNGLENBQUM7WUFFRixnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO1NBRXZFO1FBRUQsZ0JBQWdCLENBQUMsTUFBTSxHQUFHO1lBQ3hCLG9CQUFvQixFQUFFLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRO1lBQzdELFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVztTQUM1QixDQUFDO1FBRUYsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUN4RixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFbkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxtQkFBbUIsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3hGLFlBQVksRUFBRSxJQUFJLENBQUMsdUJBQXVCO1lBQzFDLFVBQVUsRUFBRTtnQkFDVixnQkFBZ0IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUNuRjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFHRDs7O1NBR0U7SUFDSyxtQkFBbUIsQ0FDeEIsS0FBb0M7UUFHcEMsTUFBTSxnQkFBZ0IsR0FBdUIsRUFBRSxDQUFDO1FBRWhELCtCQUErQjtRQUMvQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUNyRSxNQUFNLEtBQUssQ0FBRSxnRUFBZ0UsQ0FBQyxDQUFDO1NBQ2hGO1FBRUQsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDaEUsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLO1FBR3JELDBDQUEwQztRQUMxQyxJQUFJLFdBQVcsR0FBdUIsRUFBRSxDQUFDO1FBQ3pDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFFM0MsSUFBSSxtQkFBbUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7U0FDcEU7UUFFRCxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1FBRXRDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtZQUNsQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1NBQ3BFO1FBRUQsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUN0QyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7U0FDNUQ7UUFFRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO1lBQ25DLGdCQUFnQixDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU5QixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLG1CQUFtQixLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDeEYsWUFBWSxFQUFFLElBQUksQ0FBQyx1QkFBdUI7WUFDMUMsVUFBVSxFQUFFO2dCQUNWLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQ25GO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7QUFsT0gsZ0RBbU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5cblxuaW1wb3J0ICogYXMgY2xvdWRXYW5FbnVtIGZyb20gJy4vY2xvdWRXYW5FbnVtJztcblxuLyoqXG4gKiBDcmVhdGUgYSBOZXR3b3JrIFNlZ21lbnQgaW4gYSBjb3JlIG5ldHdvcmtcbiAqL1xuXG5leHBvcnQgY2xhc3MgQ29yZU5ldHdvcmtTZWdtZW50IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuXG4gIC8qKiB0aGUgbmFtZSBmb3IgdGhlIHNlZ21lbnQgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlZ21lbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFNlcnZpY2UgdG9rZW4gZm9yICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcG9saWN5VGFibGVTZXJ2aWNlVG9rZW46IHN0cmluZztcblxuICAvKiogcmVzb3VyY2VzIHdoaWNoIHVwZGF0ZSBkZXBlbmRzIG9uICovXG4gIHByaXZhdGUgdXBkYXRlRGVwZW5kc09uOiBjZGsuQ3VzdG9tUmVzb3VyY2VbXTtcblxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGNsb3VkV2FuRW51bS5JQ29yZU5ldHdvcmtTZWdtZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy51cGRhdGVEZXBlbmRzT24gPSBwcm9wcy51cGRhdGVEZXBlbmRzT247XG4gICAgdGhpcy5zZWdtZW50TmFtZSA9IHByb3BzLnNlZ21lbnROYW1lO1xuICAgIHRoaXMucG9saWN5VGFibGVTZXJ2aWNlVG9rZW4gPSBwcm9wcy5wb2xpY3lUYWJsZVNlcnZpY2VUb2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBhZGRTaW1wbGVTaGFyZUFjdGlvbihwcm9wczogY2xvdWRXYW5FbnVtLlNpbXBsZVNoYXJlQWN0aW9uUHJvcHMpOiB2b2lkIHtcblxuICAgIGlmICh0eXBlb2YgcHJvcHMuc2hhcmVXaXRoID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCEocHJvcHMuc2hhcmVXaXRoID09PSAnKicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSAqIGNhbiBiZSBwcm92aWRlZCBhcyBhIHN0cmluZycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNlZ21lbnRBY3Rpb246IHtbazogc3RyaW5nXTogYW55fSA9IHt9O1xuXG4gICAgc2VnbWVudEFjdGlvbi5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIHNlZ21lbnRBY3Rpb24uYWN0aW9uID0gY2xvdWRXYW5FbnVtLlNlZ21lbnRBY3Rpb25UeXBlLlNIQVJFLFxuICAgIHNlZ21lbnRBY3Rpb24ubW9kZSA9IGNsb3VkV2FuRW51bS5TZWdtZW50QWN0aW9uTW9kZS5BVFRBQ0hNRU5UX1JPVVRFLFxuICAgIHNlZ21lbnRBY3Rpb24uc2VnbWVudCA9IHRoaXMuc2VnbWVudE5hbWU7XG5cbiAgICBpZiAocHJvcHMuc2hhcmVXaXRoID09PSAnKicpIHtcbiAgICAgIHNlZ21lbnRBY3Rpb25bJ3NoYXJlLXdpdGgnXSA9IHByb3BzLnNoYXJlV2l0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHNlZ21lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgcHJvcHMuc2hhcmVXaXRoLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgICAgc2VnbWVudHMucHVzaChzZWdtZW50LnNlZ21lbnROYW1lKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZWdtZW50QWN0aW9uWydzaGFyZS13aXRoJ10gPSBzZWdtZW50cztcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnKioqIHNlZ21lbnQgYWN0aW9uICoqKicpO1xuICAgIGNvbnNvbGUubG9nKHNlZ21lbnRBY3Rpb24pO1xuXG4gICAgY29uc3Qgc2VnbWVudGFjdGlvbiA9IG5ldyBjZGsuQ3VzdG9tUmVzb3VyY2UodGhpcywgYENsb3Vkd2FuU2VnbWVudEFjdGlvbiR7dGhpcy5zZWdtZW50TmFtZX1gLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHRoaXMucG9saWN5VGFibGVTZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC8vIHRoZSBwcm9wZXJ0aWVzIGFyZSBiYXNlNjQgZW5jb2RlZCwgc28gdGhlIHR5cGVzIG1ha2UgaXQgaW50byB0aGUgbGFtYmRhLFxuICAgICAgICAvLyB0aGUgY3VzdG9tcmVzb3VyY2Ugb3RoZXJ3aXNlIG1ha2VzIGV2ZXJ5dGhpbmcgYSBzdHJpbmdcbiAgICAgICAgc2VnbWVudEFjdGlvbjogY2RrLkZuLmJhc2U2NChjZGsuU3RhY2sub2YodGhpcykudG9Kc29uU3RyaW5nKHNlZ21lbnRBY3Rpb24pKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZURlcGVuZHNPbi5wdXNoKHNlZ21lbnRhY3Rpb24pO1xuXG4gIH1cblxuICAvLyBjb21tb25zZXJ2aWNlcy5hZGRTZWdtZW50QWN0aW9uKHtcbiAgLy8gICBkZXNjcmlwdGlvbjogJ3NoYXJldG9hbGwnLFxuICAvLyAgIGFjdGlvbjogQ2xvdWRXYW4uU2VnbWVudEFjdGlvblR5cGUuU0hBUkUsXG4gIC8vICAgbW9kZTogQ2xvdWRXYW4uU2VnbWVudEFjdGlvbk1vZGUuQVRUQUNITUVOVF9ST1VURSxcbiAgLy8gICBzaGFyZVdpdGg6ICcqJyxcbiAgLy8gfSk7XG5cblxuICAvKipcblx0ICogQWRkIGFuIEFjdGlvbiB0byB0aGUgU2VnbWVudCwgKCBTaGFyZSBvciBSb3V0ZSApXG5cdCAqIEBwYXJhbSBwcm9wcyBzZWdtZW50IGFjdGlvblxuXHQgKi9cbiAgcHVibGljIGFkZFNlZ21lbnRBY3Rpb24ocHJvcHM6IGNsb3VkV2FuRW51bS5TZWdtZW50QWN0aW9uKTogdm9pZCB7XG5cbiAgICBjb25zdCBzZWdtZW50QWN0aW9uOiB7W2s6IHN0cmluZ106IGFueX0gPSB7fTtcblxuICAgIHNlZ21lbnRBY3Rpb24uZGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbjtcbiAgICBzZWdtZW50QWN0aW9uLmFjdGlvbiA9IHByb3BzLmFjdGlvbjtcbiAgICBzZWdtZW50QWN0aW9uLnNlZ21lbnQgPSB0aGlzLnNlZ21lbnROYW1lO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5zaGFyZVdpdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIShwcm9wcy5zaGFyZVdpdGggPT09ICcqJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5ICogY2FuIGJlIHByb3ZpZGVkIGFzIGEgc3RyaW5nJyk7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICBpZiAoIHByb3BzLmFjdGlvbiA9PT0gY2xvdWRXYW5FbnVtLlNlZ21lbnRBY3Rpb25UeXBlLlNIQVJFICkge1xuICAgICAgaWYgKHByb3BzLnNoYXJlV2l0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IEVycm9yICgnc2hhcmVXaXRoIG11c3QgYmUgZGVmaW5lZCBmb3IgYSBzaGFyZSBhY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIHNlZ21lbnRBY3Rpb24ubW9kZSA9IHByb3BzLm1vZGU7XG4gICAgICBzZWdtZW50QWN0aW9uWydzaGFyZS13aXRoJ10gPSBwcm9wcy5zaGFyZVdpdGg7XG5cbiAgICAgIGlmIChwcm9wcy5leGNlcHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZWdtZW50QWN0aW9uLmV4Y2VwdCA9IHByb3BzLmV4Y2VwdDtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIGlmICggcHJvcHMuYWN0aW9uID09PSBjbG91ZFdhbkVudW0uU2VnbWVudEFjdGlvblR5cGUuQ1JFQVRFX1JPVVRFICkge1xuXG4gICAgICBpZiAoIHByb3BzLmRlc3RpbmF0aW9uQ2lkckJsb2NrcyA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmRlc3RpbmF0aW9ucyA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggZGVzdGluYXRpb25DaWRyQmxvY2sgYW5kIGRlc3RpbmF0aW9ucyBhcmUgcmVxdXJpZWQgZm9yIGEgY3JlYXRlLXJvdXRlIGFjdGlvbicpO1xuICAgICAgfVxuXG4gICAgICBzZWdtZW50QWN0aW9uWydkZXN0aW5hdGlvbi1jaWRyLWJsb2NrcyddID0gcHJvcHMuZGVzdGluYXRpb25DaWRyQmxvY2tzO1xuICAgICAgc2VnbWVudEFjdGlvbi5kZXN0aW5hdGlvbnMgPSBwcm9wcy5kZXN0aW5hdGlvbnM7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJyoqKiBzZWdtZW50IGFjdGlvbiAqKionKTtcbiAgICBjb25zb2xlLmxvZyhzZWdtZW50QWN0aW9uKTtcblxuICAgIGNvbnN0IHNlZ21lbnRhY3Rpb24gPSBuZXcgY2RrLkN1c3RvbVJlc291cmNlKHRoaXMsIGBDbG91ZHdhblNlZ21lbnRBY3Rpb24ke3RoaXMuc2VnbWVudE5hbWV9YCwge1xuICAgICAgc2VydmljZVRva2VuOiB0aGlzLnBvbGljeVRhYmxlU2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAvLyB0aGUgcHJvcGVydGllcyBhcmUgYmFzZTY0IGVuY29kZWQsIHNvIHRoZSB0eXBlcyBtYWtlIGl0IGludG8gdGhlIGxhbWJkYSxcbiAgICAgICAgLy8gdGhlIGN1c3RvbXJlc291cmNlIG90aGVyd2lzZSBtYWtlcyBldmVyeXRoaW5nIGEgc3RyaW5nXG4gICAgICAgIHNlZ21lbnRBY3Rpb246IGNkay5Gbi5iYXNlNjQoY2RrLlN0YWNrLm9mKHRoaXMpLnRvSnNvblN0cmluZyhzZWdtZW50QWN0aW9uKSksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVEZXBlbmRzT24ucHVzaChzZWdtZW50YWN0aW9uKTtcbiAgfVxuXG5cbiAgcHVibGljIGFkZFNpbXBsZUF0dGFjaG1lbnRQb2xpY3koXG4gICAgcHJvcHM6IGNsb3VkV2FuRW51bS5TaW1wbGVBdHRhY2htZW50UG9saWN5UHJvcHMsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRQb2xpY3k6IHtbazogc3RyaW5nXTogYW55fSA9IHt9O1xuXG4gICAgYXR0YWNobWVudFBvbGljeVsncnVsZS1udW1iZXInXSA9IE51bWJlcihwcm9wcy5ydWxlTnVtYmVyKTtcbiAgICBhdHRhY2htZW50UG9saWN5LmNvbmRpdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IGNsb3VkV2FuRW51bS5BdHRhY2htZW50Q29uZGl0aW9uLlRBR19WQUxVRSxcbiAgICAgICAga2V5OiAnTmV0d29ya1NlZ21lbnQnLFxuICAgICAgICB2YWx1ZTogdGhpcy5zZWdtZW50TmFtZSxcbiAgICAgICAgb3BlcmF0b3I6IGNsb3VkV2FuRW51bS5PcGVyYXRvcnMuRVFVQUxTLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKHByb3BzLmFjY291bnQpIHtcbiAgICAgIGF0dGFjaG1lbnRQb2xpY3kuY29uZGl0aW9ucy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY2xvdWRXYW5FbnVtLkF0dGFjaG1lbnRDb25kaXRpb24uQUNDT1VOVF9JRCxcbiAgICAgICAgICB2YWx1ZTogcHJvcHMuYWNjb3VudCxcbiAgICAgICAgICBvcGVyYXRvcjogY2xvdWRXYW5FbnVtLk9wZXJhdG9ycy5FUVVBTFMsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBhdHRhY2htZW50UG9saWN5Wydjb25kaXRpb24tbG9naWMnXSA9IGNsb3VkV2FuRW51bS5Db25kaXRpb25Mb2dpYy5BTkQ7XG5cbiAgICB9XG5cbiAgICBhdHRhY2htZW50UG9saWN5LmFjdGlvbiA9IHtcbiAgICAgICdhc3NvY2lhdGlvbi1tZXRob2QnOiBjbG91ZFdhbkVudW0uQXNzb2NpYXRpb25NZXRob2QuQ09OU1RBTlQsXG4gICAgICAnc2VnbWVudCc6IHRoaXMuc2VnbWVudE5hbWUsXG4gICAgfTtcblxuICAgIGF0dGFjaG1lbnRQb2xpY3kuYWN0aW9uWydhc3NvY2lhdGlvbi1tZXRob2QnXSA9IGNsb3VkV2FuRW51bS5Bc3NvY2lhdGlvbk1ldGhvZC5DT05TVEFOVDtcbiAgICBhdHRhY2htZW50UG9saWN5LmFjdGlvbi5zZWdtZW50ID0gdGhpcy5zZWdtZW50TmFtZTtcblxuICAgIGNvbnN0IHNlZ21lbnRwb2xpY3kgPSBuZXcgY2RrLkN1c3RvbVJlc291cmNlKHRoaXMsIGBBdHRhY2htZW50UG9saWN5JHtwcm9wcy5ydWxlTnVtYmVyfWAsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5wb2xpY3lUYWJsZVNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYXR0YWNobWVudFBvbGljeTogY2RrLkZuLmJhc2U2NChjZGsuU3RhY2sub2YodGhpcykudG9Kc29uU3RyaW5nKGF0dGFjaG1lbnRQb2xpY3kpKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZURlcGVuZHNPbj8ucHVzaChzZWdtZW50cG9saWN5KTtcbiAgfVxuXG5cbiAgLyoqXG5cdCAqIEFkZCBhbiBBdHRhY2htZW50UG9saWN5IHRvIGEgc2VnbWVudFxuXHQgKiBAcGFyYW0gcHJvcHMgQW4gYXR0YWNobWVudCBwb2xpY3lcblx0ICovXG4gIHB1YmxpYyBhZGRBdHRhY2htZW50UG9saWN5KFxuICAgIHByb3BzOiBjbG91ZFdhbkVudW0uQXR0YWNobWVudFBvbGljeSxcbiAgKTogdm9pZCB7XG5cbiAgICBjb25zdCBhdHRhY2htZW50UG9saWN5OiB7W2s6IHN0cmluZ106IGFueX0gPSB7fTtcblxuICAgIC8vIGNoZWNrIGNvbnN0cnVjdGlvbiBvZiBwb2xpY3lcbiAgICBpZiAocHJvcHMuY29uZGl0aW9ucy5sZW5ndGggPiAxICYmIHByb3BzLmNvbmRpdGlvbkxvZ2ljID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IEVycm9yICgnY29uZGl0aW9uTG9naWMgbXVzdCBiZSBzZXQgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gMSBjb25kaXRpb24nKTtcbiAgICB9XG5cbiAgICBhdHRhY2htZW50UG9saWN5WydydWxlLW51bWJlciddID0gTnVtYmVyKHByb3BzLnJ1bGVOdW1iZXIpOyAvL29rXG4gICAgYXR0YWNobWVudFBvbGljeS5jb25kaXRpb25zID0gcHJvcHMuY29uZGl0aW9uczsgLy8gb2tcblxuXG4gICAgLy9kZWFsIHRvIGtleSBuYW1pbmcgaXNzdWVzIGZvciB0aGUgYWN0aW9uXG4gICAgbGV0IGxvY2FsQWN0aW9uOiB7W2s6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgICBsb2NhbEFjdGlvbi5zZWdtZW50ID0gcHJvcHMuYWN0aW9uLnNlZ21lbnQ7XG5cbiAgICBpZiAoJ2Fzc29jaWF0aW9uTWV0aG9kJyBpbiBwcm9wcy5hY3Rpb24pIHtcbiAgICAgIGxvY2FsQWN0aW9uWydhc3NvY2lhdGlvbi1tZXRob2QnXSA9IHByb3BzLmFjdGlvbi5hc3NvY2lhdGlvbk1ldGhvZDtcbiAgICB9XG5cbiAgICBhdHRhY2htZW50UG9saWN5LmFjdGlvbiA9IGxvY2FsQWN0aW9uO1xuXG4gICAgaWYgKHByb3BzLmFjdGlvbi5yZXF1aXJlQWNjZXB0YW5jZSkge1xuICAgICAgbG9jYWxBY3Rpb25bJ3JlcXVpcmUtYWNjZXB0YW5jZSddID0gcHJvcHMuYWN0aW9uLnJlcXVpcmVBY2NlcHRhbmNlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5jb25kaXRpb25Mb2dpYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhdHRhY2htZW50UG9saWN5Wydjb25kaXRpb24tbG9naWMnXSA9IHByb3BzLmNvbmRpdGlvbkxvZ2ljO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhdHRhY2htZW50UG9saWN5LmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCcqKiogYXR0YWNobWVudCBwb2xpY3kgKioqJyk7XG4gICAgY29uc29sZS5sb2coYXR0YWNobWVudFBvbGljeSk7XG5cbiAgICBjb25zdCBzZWdtZW50cG9saWN5ID0gbmV3IGNkay5DdXN0b21SZXNvdXJjZSh0aGlzLCBgQXR0YWNobWVudFBvbGljeSR7cHJvcHMucnVsZU51bWJlcn1gLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHRoaXMucG9saWN5VGFibGVTZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGF0dGFjaG1lbnRQb2xpY3k6IGNkay5Gbi5iYXNlNjQoY2RrLlN0YWNrLm9mKHRoaXMpLnRvSnNvblN0cmluZyhhdHRhY2htZW50UG9saWN5KSksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVEZXBlbmRzT24/LnB1c2goc2VnbWVudHBvbGljeSk7XG4gIH1cbn0iXX0=