UNPKG

@pepperize/cdk-route53-health-check

Version:

Create Route53 HealthChecks to monitor TCP, HTTP, HTTPS endpoints, CloudWatch Alarms and other Route53 HealthChecks.

93 lines 15.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Failover = exports.HealthCheckBase = void 0; const aws_cdk_lib_1 = require("aws-cdk-lib"); const cloudwatch = require("aws-cdk-lib/aws-cloudwatch"); const route53 = require("aws-cdk-lib/aws-route53"); /** * @internal */ class HealthCheckBase extends aws_cdk_lib_1.Resource { constructor() { super(...arguments); this.tags = new aws_cdk_lib_1.TagManager(aws_cdk_lib_1.TagType.STANDARD, "AWS::Route53::HealthCheck"); } /** * Import an existing Route53 HealthCheck. */ static fromHealthCheckId(scope, id, healthCheckId) { return new (class Imported extends HealthCheckBase { constructor() { super(scope, id); this.healthCheckId = healthCheckId; } })(); } resolveSafeTags() { return aws_cdk_lib_1.Lazy.any({ produce: () => { const raw = this.tags.renderedTags; if (aws_cdk_lib_1.Token.isUnresolved(raw)) { return raw; } const arr = raw; function isSafeString(v) { if (typeof v !== "string") return false; const allowed = /^[a-zA-Z0-9 _.:\/=+\-@]+$/; return allowed.test(v) && !v.includes("${") && !v.includes("}") && !v.includes("$"); } return arr.filter((t) => isSafeString(t.value)).map((t) => ({ key: t.key, value: t.value })); }, }); } failover(recordSet, evaluateTargetHealth, failover) { const resource = recordSet.node.defaultChild; if (!(resource instanceof route53.CfnRecordSet)) { throw new Error(`RecordSet ${recordSet.node.path} doesn't have a default child of type CfnRecordSet`); } resource.healthCheckId = this.healthCheckId; if (failover) { resource.failover = failover; } if (evaluateTargetHealth) { resource.addPropertyOverride("AliasTarget.EvaluateTargetHealth", evaluateTargetHealth); } } failoverPrimary(recordSet, evaluateTargetHealth) { this.failover(recordSet, evaluateTargetHealth, Failover.PRIMARY); } failoverSecondary(recordSet, evaluateTargetHealth) { this.failover(recordSet, evaluateTargetHealth, Failover.SECONDARY); } /** * Return the given named metric for this HealthCheck. */ metric(metricName, props) { return new cloudwatch.Metric({ namespace: "AWS/Route53", metricName, dimensionsMap: { HealthCheckId: this.healthCheckId }, ...props, }).attachTo(this); } /** * Route53 health checkers report that the HealthCheck is healthy or unhealthy. */ metricHealthCheckStatus(props) { return this.metric("HealthCheckStatus", { statistic: cloudwatch.Statistic.MINIMUM, ...props }); } } exports.HealthCheckBase = HealthCheckBase; var Failover; (function (Failover) { /** * The primary record set */ Failover["PRIMARY"] = "PRIMARY"; /** * The secondary record set */ Failover["SECONDARY"] = "SECONDARY"; })(Failover || (exports.Failover = Failover = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLWNoZWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hlYWx0aC1jaGVjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBaUc7QUFDakcseURBQXlEO0FBQ3pELG1EQUFtRDtBQWlFbkQ7O0dBRUc7QUFDSCxNQUFzQixlQUFnQixTQUFRLHNCQUFRO0lBQXREOztRQWVXLFNBQUksR0FBRyxJQUFJLHdCQUFVLENBQUMscUJBQU8sQ0FBQyxRQUFRLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztJQW1FaEYsQ0FBQztJQWpGQzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxhQUFxQjtRQUNqRixPQUFPLElBQUksQ0FBQyxNQUFNLFFBQVMsU0FBUSxlQUFlO1lBRWhEO2dCQUNFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBRkgsa0JBQWEsR0FBRyxhQUFhLENBQUM7WUFHOUMsQ0FBQztTQUNGLENBQUMsRUFBRSxDQUFDO0lBQ1AsQ0FBQztJQU1TLGVBQWU7UUFDdkIsT0FBTyxrQkFBSSxDQUFDLEdBQUcsQ0FBQztZQUNkLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ1osTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBRW5DLElBQUksbUJBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsT0FBTyxHQUFHLENBQUM7Z0JBQ2IsQ0FBQztnQkFFRCxNQUFNLEdBQUcsR0FBRyxHQUFpRSxDQUFDO2dCQUU5RSxTQUFTLFlBQVksQ0FBQyxDQUFVO29CQUM5QixJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7d0JBQUUsT0FBTyxLQUFLLENBQUM7b0JBQ3hDLE1BQU0sT0FBTyxHQUFHLDJCQUEyQixDQUFDO29CQUM1QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RGLENBQUM7Z0JBRUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakcsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsU0FBb0IsRUFBRSxvQkFBOEIsRUFBRSxRQUFtQjtRQUNoRixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUU3QyxJQUFJLENBQUMsQ0FBQyxRQUFRLFlBQVksT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFFRCxRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFFNUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQy9CLENBQUM7UUFFRCxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDekIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLGtDQUFrQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDekYsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsU0FBNEIsRUFBRSxvQkFBOEI7UUFDMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUE0QixFQUFFLG9CQUE4QjtRQUM1RSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFVBQWtCLEVBQUUsS0FBZ0M7UUFDekQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDM0IsU0FBUyxFQUFFLGFBQWE7WUFDeEIsVUFBVTtZQUNWLGFBQWEsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BELEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUNEOztPQUVHO0lBQ0gsdUJBQXVCLENBQUMsS0FBZ0M7UUFDdEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0NBQ0Y7QUFsRkQsMENBa0ZDO0FBRUQsSUFBWSxRQVNYO0FBVEQsV0FBWSxRQUFRO0lBQ2xCOztPQUVHO0lBQ0gsK0JBQW1CLENBQUE7SUFDbkI7O09BRUc7SUFDSCxtQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBVFcsUUFBUSx3QkFBUixRQUFRLFFBU25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlc29sdmFibGUsIElUYWdnYWJsZSwgTGF6eSwgUmVzb3VyY2UsIFRhZ01hbmFnZXIsIFRhZ1R5cGUsIFRva2VuIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IFJlY29yZFNldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIZWFsdGhDaGVja09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGlzIFJvdXRlNTMgSGVhbHRoQ2hlY2tcbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW52ZXJ0IHRoZSBzdGF0dXMgb2YgdGhlIFJvdXRlNTMgaGVhbHRoIGNoZWNrIHN0YXR1cy5cbiAgICovXG4gIHJlYWRvbmx5IGludmVydGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSGVhbHRoQ2hlY2sge1xuICByZWFkb25seSBoZWFsdGhDaGVja0lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXRzIGB0aGlzLmhlYWx0aENoZWNrSWRgIGFzIHRoZSB2YWx1ZSBmb3IgYEhlYWx0aENoZWNrSWRgIG9uIHRoZSBnaXZlbiBSZWNvcmRTZXQuXG4gICAqXG4gICAqIDxiPkFwcGxpZXMgb25seSB0byBhbGlhcywgZmFpbG92ZXIgYWxpYXMsIGdlb2xvY2F0aW9uIGFsaWFzLCBsYXRlbmN5IGFsaWFzLCBhbmQgd2VpZ2h0ZWQgYWxpYXMgcmVzb3VyY2UgcmVjb3JkIHNldHM8L2I+XG4gICAqXG4gICAqIEBwYXJhbSByZWNvcmRTZXQgVGhlIFJvdXRlNTMgUmVjb3JkU2V0IHRvIGNvbmZpZ3VyZSBmYWlsb3ZlclxuICAgKiBAcGFyYW0gZXZhbHVhdGVUYXJnZXRIZWFsdGggSW5oZXJpdCB0aGUgaGVhbHRoIG9mIHRoZSByZWZlcmVuY2VkIEFsaWFzIFJlY29yZFNldCBUYXJnZXRcbiAgICogQHBhcmFtIGZhaWxvdmVyIFNldHMgYFBSSU1BUllgIG9yIGBTRUNPTkRBUllgIGFzIHRoZSB2YWx1ZSBmb3IgYEZhaWxvdmVyYCBvbiB0aGUgZ2l2ZW4gUmVjb3JkU2V0LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLXJvdXRlNTMtYWxpYXN0YXJnZXQuaHRtbCNjZm4tcm91dGU1My1hbGlhc3RhcmdldC1ldmFsdWF0ZXRhcmdldGhlYWx0aFxuICAgKi9cbiAgZmFpbG92ZXIocmVjb3JkU2V0OiBSZWNvcmRTZXQsIGV2YWx1YXRlVGFyZ2V0SGVhbHRoPzogYm9vbGVhbiwgZmFpbG92ZXI/OiBGYWlsb3Zlcik6IHZvaWQ7XG4gIC8qKlxuICAgKiBTZXRzIGBQUklNQVJZYCBhcyB0aGUgdmFsdWUgZm9yIGBGYWlsb3ZlcmAgb24gdGhlIGdpdmVuIFJlY29yZFNldC4gQWRkaXRpb25hbGx5LCBzZXRzIGB0aGlzLmhlYWx0aENoZWNrSWRgIGFzIHRoZSB2YWx1ZSBmb3IgYEhlYWx0aENoZWNrSWRgLlxuICAgKlxuICAgKiA8Yj5BcHBsaWVzIG9ubHkgdG8gYWxpYXMsIGZhaWxvdmVyIGFsaWFzLCBnZW9sb2NhdGlvbiBhbGlhcywgbGF0ZW5jeSBhbGlhcywgYW5kIHdlaWdodGVkIGFsaWFzIHJlc291cmNlIHJlY29yZCBzZXRzPC9iPlxuICAgKlxuICAgKiBAcGFyYW0gcmVjb3JkU2V0IFRoZSBSb3V0ZTUzIFJlY29yZFNldCB0byBjb25maWd1cmUgZmFpbG92ZXJcbiAgICogQHBhcmFtIGV2YWx1YXRlVGFyZ2V0SGVhbHRoIEluaGVyaXQgdGhlIGhlYWx0aCBvZiB0aGUgcmVmZXJlbmNlZCBBbGlhcyBSZWNvcmRTZXQgVGFyZ2V0XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcm91dGU1My1hbGlhc3RhcmdldC5odG1sI2Nmbi1yb3V0ZTUzLWFsaWFzdGFyZ2V0LWV2YWx1YXRldGFyZ2V0aGVhbHRoXG4gICAqL1xuICBmYWlsb3ZlclByaW1hcnkocmVjb3JkU2V0OiByb3V0ZTUzLlJlY29yZFNldCwgZXZhbHVhdGVUYXJnZXRIZWFsdGg/OiBib29sZWFuKTogdm9pZDtcbiAgLyoqXG4gICAqIFNldHMgYFBSSU1BUllgIGFzIHRoZSB2YWx1ZSBmb3IgYEZhaWxvdmVyYCBvbiB0aGUgZ2l2ZW4gUmVjb3JkU2V0LiBBZGRpdGlvbmFsbHksIHNldHMgYHRoaXMuaGVhbHRoQ2hlY2tJZGAgYXMgdGhlIHZhbHVlIGZvciBgSGVhbHRoQ2hlY2tJZGAuXG4gICAqXG4gICAqIDxiPkFwcGxpZXMgb25seSB0byBhbGlhcywgZmFpbG92ZXIgYWxpYXMsIGdlb2xvY2F0aW9uIGFsaWFzLCBsYXRlbmN5IGFsaWFzLCBhbmQgd2VpZ2h0ZWQgYWxpYXMgcmVzb3VyY2UgcmVjb3JkIHNldHM8L2I+XG4gICAqXG4gICAqIEBwYXJhbSByZWNvcmRTZXQgVGhlIFJvdXRlNTMgUmVjb3JkU2V0IHRvIGNvbmZpZ3VyZSBmYWlsb3ZlclxuICAgKiBAcGFyYW0gZXZhbHVhdGVUYXJnZXRIZWFsdGggSW5oZXJpdCB0aGUgaGVhbHRoIG9mIHRoZSByZWZlcmVuY2VkIEFsaWFzIFJlY29yZFNldCBUYXJnZXRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yb3V0ZTUzLWFsaWFzdGFyZ2V0Lmh0bWwjY2ZuLXJvdXRlNTMtYWxpYXN0YXJnZXQtZXZhbHVhdGV0YXJnZXRoZWFsdGhcbiAgICovXG4gIGZhaWxvdmVyU2Vjb25kYXJ5KHJlY29yZFNldDogcm91dGU1My5SZWNvcmRTZXQsIGV2YWx1YXRlVGFyZ2V0SGVhbHRoPzogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBIZWFsdGhDaGVjay5cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJvdXRlNTMgaGVhbHRoIGNoZWNrZXJzIHJlcG9ydCB0aGF0IHRoZSBIZWFsdGhDaGVjayBpcyBoZWFsdGh5IG9yIHVuaGVhbHRoeS5cbiAgICovXG4gIG1ldHJpY0hlYWx0aENoZWNrU3RhdHVzKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBIZWFsdGhDaGVja0Jhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElIZWFsdGhDaGVjaywgSVRhZ2dhYmxlIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBSb3V0ZTUzIEhlYWx0aENoZWNrLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSGVhbHRoQ2hlY2tJZChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBoZWFsdGhDaGVja0lkOiBzdHJpbmcpOiBJSGVhbHRoQ2hlY2sge1xuICAgIHJldHVybiBuZXcgKGNsYXNzIEltcG9ydGVkIGV4dGVuZHMgSGVhbHRoQ2hlY2tCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBoZWFsdGhDaGVja0lkID0gaGVhbHRoQ2hlY2tJZDtcbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaGVhbHRoQ2hlY2tJZDogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IHRhZ3MgPSBuZXcgVGFnTWFuYWdlcihUYWdUeXBlLlNUQU5EQVJELCBcIkFXUzo6Um91dGU1Mzo6SGVhbHRoQ2hlY2tcIik7XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVTYWZlVGFncygpOiByb3V0ZTUzLkNmbkhlYWx0aENoZWNrLkhlYWx0aENoZWNrVGFnUHJvcGVydHlbXSB8IElSZXNvbHZhYmxlIHtcbiAgICByZXR1cm4gTGF6eS5hbnkoe1xuICAgICAgcHJvZHVjZTogKCkgPT4ge1xuICAgICAgICBjb25zdCByYXcgPSB0aGlzLnRhZ3MucmVuZGVyZWRUYWdzO1xuXG4gICAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQocmF3KSkge1xuICAgICAgICAgIHJldHVybiByYXc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcnIgPSByYXcgYXMgdW5rbm93biBhcyByb3V0ZTUzLkNmbkhlYWx0aENoZWNrLkhlYWx0aENoZWNrVGFnUHJvcGVydHlbXTtcblxuICAgICAgICBmdW5jdGlvbiBpc1NhZmVTdHJpbmcodjogdW5rbm93bikge1xuICAgICAgICAgIGlmICh0eXBlb2YgdiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGNvbnN0IGFsbG93ZWQgPSAvXlthLXpBLVowLTkgXy46XFwvPStcXC1AXSskLztcbiAgICAgICAgICByZXR1cm4gYWxsb3dlZC50ZXN0KHYpICYmICF2LmluY2x1ZGVzKFwiJHtcIikgJiYgIXYuaW5jbHVkZXMoXCJ9XCIpICYmICF2LmluY2x1ZGVzKFwiJFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnIuZmlsdGVyKCh0KSA9PiBpc1NhZmVTdHJpbmcodC52YWx1ZSkpLm1hcCgodCkgPT4gKHsga2V5OiB0LmtleSEsIHZhbHVlOiB0LnZhbHVlISB9KSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZmFpbG92ZXIocmVjb3JkU2V0OiBSZWNvcmRTZXQsIGV2YWx1YXRlVGFyZ2V0SGVhbHRoPzogYm9vbGVhbiwgZmFpbG92ZXI/OiBGYWlsb3Zlcikge1xuICAgIGNvbnN0IHJlc291cmNlID0gcmVjb3JkU2V0Lm5vZGUuZGVmYXVsdENoaWxkO1xuXG4gICAgaWYgKCEocmVzb3VyY2UgaW5zdGFuY2VvZiByb3V0ZTUzLkNmblJlY29yZFNldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjb3JkU2V0ICR7cmVjb3JkU2V0Lm5vZGUucGF0aH0gZG9lc24ndCBoYXZlIGEgZGVmYXVsdCBjaGlsZCBvZiB0eXBlIENmblJlY29yZFNldGApO1xuICAgIH1cblxuICAgIHJlc291cmNlLmhlYWx0aENoZWNrSWQgPSB0aGlzLmhlYWx0aENoZWNrSWQ7XG5cbiAgICBpZiAoZmFpbG92ZXIpIHtcbiAgICAgIHJlc291cmNlLmZhaWxvdmVyID0gZmFpbG92ZXI7XG4gICAgfVxuXG4gICAgaWYgKGV2YWx1YXRlVGFyZ2V0SGVhbHRoKSB7XG4gICAgICByZXNvdXJjZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKFwiQWxpYXNUYXJnZXQuRXZhbHVhdGVUYXJnZXRIZWFsdGhcIiwgZXZhbHVhdGVUYXJnZXRIZWFsdGgpO1xuICAgIH1cbiAgfVxuXG4gIGZhaWxvdmVyUHJpbWFyeShyZWNvcmRTZXQ6IHJvdXRlNTMuUmVjb3JkU2V0LCBldmFsdWF0ZVRhcmdldEhlYWx0aD86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZhaWxvdmVyKHJlY29yZFNldCwgZXZhbHVhdGVUYXJnZXRIZWFsdGgsIEZhaWxvdmVyLlBSSU1BUlkpO1xuICB9XG5cbiAgZmFpbG92ZXJTZWNvbmRhcnkocmVjb3JkU2V0OiByb3V0ZTUzLlJlY29yZFNldCwgZXZhbHVhdGVUYXJnZXRIZWFsdGg/OiBib29sZWFuKSB7XG4gICAgdGhpcy5mYWlsb3ZlcihyZWNvcmRTZXQsIGV2YWx1YXRlVGFyZ2V0SGVhbHRoLCBGYWlsb3Zlci5TRUNPTkRBUlkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIEhlYWx0aENoZWNrLlxuICAgKi9cbiAgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBuYW1lc3BhY2U6IFwiQVdTL1JvdXRlNTNcIixcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IEhlYWx0aENoZWNrSWQ6IHRoaXMuaGVhbHRoQ2hlY2tJZCB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSkuYXR0YWNoVG8odGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIFJvdXRlNTMgaGVhbHRoIGNoZWNrZXJzIHJlcG9ydCB0aGF0IHRoZSBIZWFsdGhDaGVjayBpcyBoZWFsdGh5IG9yIHVuaGVhbHRoeS5cbiAgICovXG4gIG1ldHJpY0hlYWx0aENoZWNrU3RhdHVzKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIkhlYWx0aENoZWNrU3RhdHVzXCIsIHsgc3RhdGlzdGljOiBjbG91ZHdhdGNoLlN0YXRpc3RpYy5NSU5JTVVNLCAuLi5wcm9wcyB9KTtcbiAgfVxufVxuXG5leHBvcnQgZW51bSBGYWlsb3ZlciB7XG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSByZWNvcmQgc2V0XG4gICAqL1xuICBQUklNQVJZID0gXCJQUklNQVJZXCIsXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IHJlY29yZCBzZXRcbiAgICovXG4gIFNFQ09OREFSWSA9IFwiU0VDT05EQVJZXCIsXG59XG4iXX0=