cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
157 lines • 26.5 kB
JavaScript
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AwsConsoleUrlFactory = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const monitoring_1 = require("../../monitoring");
class AwsConsoleUrlFactory {
constructor(props) {
this.awsAccountId = props.awsAccountId;
this.awsAccountRegion = props.awsAccountRegion;
}
getAwsConsoleUrl(destinationUrl) {
if (this.awsAccountId) {
return aws_cdk_lib_1.Lazy.uncachedString({
produce: (context) => {
if (destinationUrl) {
return this.getResolvedDestinationUrl(context, destinationUrl);
}
// simply go to the home page of the AWS console
return `https://${this.awsAccountRegion}.console.aws.amazon.com`;
},
});
}
return undefined;
}
getApiGatewayUrl(restApiId) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/apigateway/home?region=${region}#/apis/${restApiId}/dashboard`;
return this.getAwsConsoleUrl(destinationUrl);
}
getCloudFrontDistributionUrl(distributionId) {
const destinationUrl = `https://console.aws.amazon.com/cloudfront/v2/home#/monitoring/${distributionId}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getCloudWatchLogGroupUrl(logGroupName) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/cloudwatch/home?region=${region}#logsV2:log-groups/log-group/${logGroupName}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getCodeBuildProjectUrl(projectName) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/codebuild/home?region=${region}#/projects/${projectName}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getDocumentDbClusterUrl(clusterId) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/docdb/home?region=${region}#cluster-details/${clusterId}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getDynamoTableUrl(tableName) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/dynamodb/home?region=${region}#tables:selected=${tableName}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getElastiCacheClusterUrl(clusterId, clusterType) {
const region = this.awsAccountRegion;
switch (clusterType) {
case monitoring_1.ElastiCacheClusterType.MEMCACHED:
const destinationUrlMemcached = `https://${region}.console.aws.amazon.com/elasticache/home?region=${region}#/memcached/${clusterId}`;
return this.getAwsConsoleUrl(destinationUrlMemcached);
case monitoring_1.ElastiCacheClusterType.REDIS:
const destinationUrlRedis = `https://${region}.console.aws.amazon.com/elasticache/home?region=${region}#/redis/${clusterId}`;
return this.getAwsConsoleUrl(destinationUrlRedis);
default:
throw new Error(`Invalid cache type: ${clusterType}`);
}
}
getKinesisAnalyticsUrl(application) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/kinesisanalytics/home?region=${region}#/details?applicationName=${application}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getKinesisDataStreamUrl(streamName) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/kinesis/home?region=${region}#/streams/details/${streamName}/monitoring`;
return this.getAwsConsoleUrl(destinationUrl);
}
getKinesisFirehoseDeliveryStreamUrl(streamName) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/firehose/home?region=${region}#/details/${streamName}/monitoring`;
return this.getAwsConsoleUrl(destinationUrl);
}
getLambdaFunctionUrl(functionName) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/lambda/home?region=${region}#/functions/${functionName}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getOpenSearchClusterUrl(domainName) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/es/home?region=${region}#domain:resource=${domainName};action=dashboard;tab=TAB_CLUSTER_HEALTH_ID_V2`;
return this.getAwsConsoleUrl(destinationUrl);
}
getOpenSearchServerlessCollectionUrl(collectionName) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/aos/home?region=${region}#opensearch/collections/${collectionName}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getOsisPipelineUrl(pipelineName) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/aos/osis/home?region=${region}#osis/ingestion-pipelines/${pipelineName}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getRdsClusterUrl(clusterId) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/rds/home?region=${region}#database:id=${clusterId};is-cluster=true;tab=monitoring`;
return this.getAwsConsoleUrl(destinationUrl);
}
getRdsInstanceUrl(instanceId) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/rds/home?region=${region}#database:id=${instanceId};is-cluster=false;tab=monitoring`;
return this.getAwsConsoleUrl(destinationUrl);
}
getRedshiftClusterUrl(clusterId) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/redshiftv2/home?region=${region}#cluster-details?cluster=${clusterId}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getSnsTopicUrl(topicArn) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/sns/v3/home?region=${region}#/topic/${topicArn}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getStateMachineUrl(stateMachineArn) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/states/home?region=${region}#/statemachines/view/${stateMachineArn}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getSqsQueueUrl(queueUrl) {
const region = this.awsAccountRegion;
const destinationUrl = `https://${region}.console.aws.amazon.com/sqs/v3/home?region=${region}#/queues/${queueUrl}`;
return this.getAwsConsoleUrl(destinationUrl);
}
getS3BucketUrl(bucketName) {
const region = this.awsAccountRegion;
const destinationUrl = `https://s3.console.aws.amazon.com/s3/buckets/${bucketName}?region=${region}&tab=metrics`;
return this.getAwsConsoleUrl(destinationUrl);
}
/**
* Resolves a destination URL within a resolution context.
* @param context The resolution context.
* @param destinationUrl The destination URL to resolve since it may contain CDK tokens.
* @see https://docs.aws.amazon.com/cdk/latest/guide/tokens.html
*/
getResolvedDestinationUrl(context, destinationUrl) {
let resolvedDestination = context.resolve(destinationUrl);
if (typeof resolvedDestination !== "string") {
// keep unresolved since we do not know how to deal with objects
resolvedDestination = destinationUrl;
}
return resolvedDestination;
}
}
exports.AwsConsoleUrlFactory = AwsConsoleUrlFactory;
_a = JSII_RTTI_SYMBOL_1;
AwsConsoleUrlFactory[_a] = { fqn: "cdk-monitoring-constructs.AwsConsoleUrlFactory", version: "9.15.2" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXdzQ29uc29sZVVybEZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBd3NDb25zb2xlVXJsRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFvRDtBQUVwRCxpREFBMEQ7QUFPMUQsTUFBYSxvQkFBb0I7SUFJL0IsWUFBWSxLQUFnQztRQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsY0FBdUI7UUFDdEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLE9BQU8sa0JBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3pCLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNuQixJQUFJLGNBQWMsRUFBRTt3QkFDbEIsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO3FCQUNoRTtvQkFDRCxnREFBZ0Q7b0JBQ2hELE9BQU8sV0FBVyxJQUFJLENBQUMsZ0JBQWdCLHlCQUF5QixDQUFDO2dCQUNuRSxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLFdBQVcsTUFBTSxrREFBa0QsTUFBTSxVQUFVLFNBQVMsWUFBWSxDQUFDO1FBQ2hJLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxjQUFzQjtRQUNqRCxNQUFNLGNBQWMsR0FBRyxpRUFBaUUsY0FBYyxFQUFFLENBQUM7UUFDekcsT0FBTyxJQUFJLENB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QixDQUFDO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLFdBQVcsTUFBTSw4Q0FBOEMsTUFBTSxZQUFZLFFBQVEsRUFBRSxDQUFDO1FBQ25ILE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjLENBQUMsVUFBa0I7UUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLGdEQUFnRCxVQUFVLFdBQVcsTUFBTSxjQUFjLENBQUM7UUFDakgsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08seUJBQXlCLENBQ2pDLE9BQXdCLEVBQ3hCLGNBQXNCO1FBRXRCLElBQUksbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUxRCxJQUFJLE9BQU8sbUJBQW1CLEtBQUssUUFBUSxFQUFFO1lBQzNDLGdFQUFnRTtZQUNoRSxtQkFBbUIsR0FBRyxjQUFjLENBQUM7U0FDdEM7UUFFRCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7O0FBcExILG9EQXFMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZXNvbHZlQ29udGV4dCwgTGF6eSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5pbXBvcnQgeyBFbGFzdGlDYWNoZUNsdXN0ZXJUeXBlIH0gZnJvbSBcIi4uLy4uL21vbml0b3JpbmdcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBd3NDb25zb2xlVXJsRmFjdG9yeVByb3BzIHtcbiAgcmVhZG9ubHkgYXdzQWNjb3VudElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF3c0FjY291bnRSZWdpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEF3c0NvbnNvbGVVcmxGYWN0b3J5IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF3c0FjY291bnRJZDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXdzQWNjb3VudFJlZ2lvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBBd3NDb25zb2xlVXJsRmFjdG9yeVByb3BzKSB7XG4gICAgdGhpcy5hd3NBY2NvdW50SWQgPSBwcm9wcy5hd3NBY2NvdW50SWQ7XG4gICAgdGhpcy5hd3NBY2NvdW50UmVnaW9uID0gcHJvcHMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgfVxuXG4gIGdldEF3c0NvbnNvbGVVcmwoZGVzdGluYXRpb25Vcmw/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmF3c0FjY291bnRJZCkge1xuICAgICAgcmV0dXJuIExhenkudW5jYWNoZWRTdHJpbmcoe1xuICAgICAgICBwcm9kdWNlOiAoY29udGV4dCkgPT4ge1xuICAgICAgICAgIGlmIChkZXN0aW5hdGlvblVybCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb2x2ZWREZXN0aW5hdGlvblVybChjb250ZXh0LCBkZXN0aW5hdGlvblVybCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNpbXBseSBnbyB0byB0aGUgaG9tZSBwYWdlIG9mIHRoZSBBV1MgY29uc29sZVxuICAgICAgICAgIHJldHVybiBgaHR0cHM6Ly8ke3RoaXMuYXdzQWNjb3VudFJlZ2lvbn0uY29uc29sZS5hd3MuYW1hem9uLmNvbWA7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFwaUdhdGV3YXlVcmwocmVzdEFwaUlkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblVybCA9IGBodHRwczovLyR7cmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvaG9tZT9yZWdpb249JHtyZWdpb259Iy9hcGlzLyR7cmVzdEFwaUlkfS9kYXNoYm9hcmRgO1xuICAgIHJldHVybiB0aGlzLmdldEF3c0NvbnNvbGVVcmwoZGVzdGluYXRpb25VcmwpO1xuICB9XG5cbiAgZ2V0Q2xvdWRGcm9udERpc3RyaWJ1dGlvblVybChkaXN0cmlidXRpb25JZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvblVybCA9IGBodHRwczovL2NvbnNvbGUuYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC92Mi9ob21lIy9tb25pdG9yaW5nLyR7ZGlzdHJpYnV0aW9uSWR9YDtcbiAgICByZXR1cm4gdGhpcy5nZXRBd3NDb25zb2xlVXJsKGRlc3RpbmF0aW9uVXJsKTtcbiAgfVxuXG4gIGdldENsb3VkV2F0Y2hMb2dHcm91cFVybChsb2dHcm91cE5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVnaW9uID0gdGhpcy5hd3NBY2NvdW50UmVnaW9uO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uVXJsID0gYGh0dHBzOi8vJHtyZWdpb259LmNvbnNvbGUuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9ob21lP3JlZ2lvbj0ke3JlZ2lvbn0jbG9nc1YyOmxvZy1ncm91cHMvbG9nLWdyb3VwLyR7bG9nR3JvdXBOYW1lfWA7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXdzQ29uc29sZVVybChkZXN0aW5hdGlvblVybCk7XG4gIH1cblxuICBnZXRDb2RlQnVpbGRQcm9qZWN0VXJsKHByb2plY3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblVybCA9IGBodHRwczovLyR7cmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL2NvZGVidWlsZC9ob21lP3JlZ2lvbj0ke3JlZ2lvbn0jL3Byb2plY3RzLyR7cHJvamVjdE5hbWV9YDtcbiAgICByZXR1cm4gdGhpcy5nZXRBd3NDb25zb2xlVXJsKGRlc3RpbmF0aW9uVXJsKTtcbiAgfVxuXG4gIGdldERvY3VtZW50RGJDbHVzdGVyVXJsKGNsdXN0ZXJJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWdpb24gPSB0aGlzLmF3c0FjY291bnRSZWdpb247XG4gICAgY29uc3QgZGVzdGluYXRpb25VcmwgPSBgaHR0cHM6Ly8ke3JlZ2lvbn0uY29uc29sZS5hd3MuYW1hem9uLmNvbS9kb2NkYi9ob21lP3JlZ2lvbj0ke3JlZ2lvbn0jY2x1c3Rlci1kZXRhaWxzLyR7Y2x1c3RlcklkfWA7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXdzQ29uc29sZVVybChkZXN0aW5hdGlvblVybCk7XG4gIH1cblxuICBnZXREeW5hbW9UYWJsZVVybCh0YWJsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVnaW9uID0gdGhpcy5hd3NBY2NvdW50UmVnaW9uO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uVXJsID0gYGh0dHBzOi8vJHtyZWdpb259LmNvbnNvbGUuYXdzLmFtYXpvbi5jb20vZHluYW1vZGIvaG9tZT9yZWdpb249JHtyZWdpb259I3RhYmxlczpzZWxlY3RlZD0ke3RhYmxlTmFtZX1gO1xuICAgIHJldHVybiB0aGlzLmdldEF3c0NvbnNvbGVVcmwoZGVzdGluYXRpb25VcmwpO1xuICB9XG5cbiAgZ2V0RWxhc3RpQ2FjaGVDbHVzdGVyVXJsKFxuICAgIGNsdXN0ZXJJZDogc3RyaW5nLFxuICAgIGNsdXN0ZXJUeXBlOiBFbGFzdGlDYWNoZUNsdXN0ZXJUeXBlLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgICBzd2l0Y2ggKGNsdXN0ZXJUeXBlKSB7XG4gICAgICBjYXNlIEVsYXN0aUNhY2hlQ2x1c3RlclR5cGUuTUVNQ0FDSEVEOlxuICAgICAgICBjb25zdCBkZXN0aW5hdGlvblVybE1lbWNhY2hlZCA9IGBodHRwczovLyR7cmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL2VsYXN0aWNhY2hlL2hvbWU/cmVnaW9uPSR7cmVnaW9ufSMvbWVtY2FjaGVkLyR7Y2x1c3RlcklkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF3c0NvbnNvbGVVcmwoZGVzdGluYXRpb25VcmxNZW1jYWNoZWQpO1xuICAgICAgY2FzZSBFbGFzdGlDYWNoZUNsdXN0ZXJUeXBlLlJFRElTOlxuICAgICAgICBjb25zdCBkZXN0aW5hdGlvblVybFJlZGlzID0gYGh0dHBzOi8vJHtyZWdpb259LmNvbnNvbGUuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2FjaGUvaG9tZT9yZWdpb249JHtyZWdpb259Iy9yZWRpcy8ke2NsdXN0ZXJJZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBd3NDb25zb2xlVXJsKGRlc3RpbmF0aW9uVXJsUmVkaXMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNhY2hlIHR5cGU6ICR7Y2x1c3RlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0S2luZXNpc0FuYWx5dGljc1VybChhcHBsaWNhdGlvbjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWdpb24gPSB0aGlzLmF3c0FjY291bnRSZWdpb247XG4gICAgY29uc3QgZGVzdGluYXRpb25VcmwgPSBgaHR0cHM6Ly8ke3JlZ2lvbn0uY29uc29sZS5hd3MuYW1hem9uLmNvbS9raW5lc2lzYW5hbHl0aWNzL2hvbWU/cmVnaW9uPSR7cmVnaW9ufSMvZGV0YWlscz9hcHBsaWNhdGlvbk5hbWU9JHthcHBsaWNhdGlvbn1gO1xuICAgIHJldHVybiB0aGlzLmdldEF3c0NvbnNvbGVVcmwoZGVzdGluYXRpb25VcmwpO1xuICB9XG5cbiAgZ2V0S2luZXNpc0RhdGFTdHJlYW1Vcmwoc3RyZWFtTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWdpb24gPSB0aGlzLmF3c0FjY291bnRSZWdpb247XG4gICAgY29uc3QgZGVzdGluYXRpb25VcmwgPSBgaHR0cHM6Ly8ke3JlZ2lvbn0uY29uc29sZS5hd3MuYW1hem9uLmNvbS9raW5lc2lzL2hvbWU/cmVnaW9uPSR7cmVnaW9ufSMvc3RyZWFtcy9kZXRhaWxzLyR7c3RyZWFtTmFtZX0vbW9uaXRvcmluZ2A7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXdzQ29uc29sZVVybChkZXN0aW5hdGlvblVybCk7XG4gIH1cblxuICBnZXRLaW5lc2lzRmlyZWhvc2VEZWxpdmVyeVN0cmVhbVVybChzdHJlYW1OYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblVybCA9IGBodHRwczovLyR7cmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL2ZpcmVob3NlL2hvbWU/cmVnaW9uPSR7cmVnaW9ufSMvZGV0YWlscy8ke3N0cmVhbU5hbWV9L21vbml0b3JpbmdgO1xuICAgIHJldHVybiB0aGlzLmdldEF3c0NvbnNvbGVVcmwoZGVzdGluYXRpb25VcmwpO1xuICB9XG5cbiAgZ2V0TGFtYmRhRnVuY3Rpb25VcmwoZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblVybCA9IGBodHRwczovLyR7cmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL2xhbWJkYS9ob21lP3JlZ2lvbj0ke3JlZ2lvbn0jL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uTmFtZX1gO1xuICAgIHJldHVybiB0aGlzLmdldEF3c0NvbnNvbGVVcmwoZGVzdGluYXRpb25VcmwpO1xuICB9XG5cbiAgZ2V0T3BlblNlYXJjaENsdXN0ZXJVcmwoZG9tYWluTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWdpb24gPSB0aGlzLmF3c0FjY291bnRSZWdpb247XG4gICAgY29uc3QgZGVzdGluYXRpb25VcmwgPSBgaHR0cHM6Ly8ke3JlZ2lvbn0uY29uc29sZS5hd3MuYW1hem9uLmNvbS9lcy9ob21lP3JlZ2lvbj0ke3JlZ2lvbn0jZG9tYWluOnJlc291cmNlPSR7ZG9tYWluTmFtZX07YWN0aW9uPWRhc2hib2FyZDt0YWI9VEFCX0NMVVNURVJfSEVBTFRIX0lEX1YyYDtcbiAgICByZXR1cm4gdGhpcy5nZXRBd3NDb25zb2xlVXJsKGRlc3RpbmF0aW9uVXJsKTtcbiAgfVxuXG4gIGdldE9wZW5TZWFyY2hTZXJ2ZXJsZXNzQ29sbGVjdGlvblVybChcbiAgICBjb2xsZWN0aW9uTmFtZTogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblVybCA9IGBodHRwczovLyR7cmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL2Fvcy9ob21lP3JlZ2lvbj0ke3JlZ2lvbn0jb3BlbnNlYXJjaC9jb2xsZWN0aW9ucy8ke2NvbGxlY3Rpb25OYW1lfWA7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXdzQ29uc29sZVVybChkZXN0aW5hdGlvblVybCk7XG4gIH1cblxuICBnZXRPc2lzUGlwZWxpbmVVcmwocGlwZWxpbmVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblVybCA9IGBodHRwczovLyR7cmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL2Fvcy9vc2lzL2hvbWU/cmVnaW9uPSR7cmVnaW9ufSNvc2lzL2luZ2VzdGlvbi1waXBlbGluZXMvJHtwaXBlbGluZU5hbWV9YDtcbiAgICByZXR1cm4gdGhpcy5nZXRBd3NDb25zb2xlVXJsKGRlc3RpbmF0aW9uVXJsKTtcbiAgfVxuXG4gIGdldFJkc0NsdXN0ZXJVcmwoY2x1c3RlcklkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblVybCA9IGBodHRwczovLyR7cmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL3Jkcy9ob21lP3JlZ2lvbj0ke3JlZ2lvbn0jZGF0YWJhc2U6aWQ9JHtjbHVzdGVySWR9O2lzLWNsdXN0ZXI9dHJ1ZTt0YWI9bW9uaXRvcmluZ2A7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXdzQ29uc29sZVVybChkZXN0aW5hdGlvblVybCk7XG4gIH1cblxuICBnZXRSZHNJbnN0YW5jZVVybChpbnN0YW5jZUlkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblVybCA9IGBodHRwczovLyR7cmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL3Jkcy9ob21lP3JlZ2lvbj0ke3JlZ2lvbn0jZGF0YWJhc2U6aWQ9JHtpbnN0YW5jZUlkfTtpcy1jbHVzdGVyPWZhbHNlO3RhYj1tb25pdG9yaW5nYDtcbiAgICByZXR1cm4gdGhpcy5nZXRBd3NDb25zb2xlVXJsKGRlc3RpbmF0aW9uVXJsKTtcbiAgfVxuXG4gIGdldFJlZHNoaWZ0Q2x1c3RlclVybChjbHVzdGVySWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVnaW9uID0gdGhpcy5hd3NBY2NvdW50UmVnaW9uO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uVXJsID0gYGh0dHBzOi8vJHtyZWdpb259LmNvbnNvbGUuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnR2Mi9ob21lP3JlZ2lvbj0ke3JlZ2lvbn0jY2x1c3Rlci1kZXRhaWxzP2NsdXN0ZXI9JHtjbHVzdGVySWR9YDtcbiAgICByZXR1cm4gdGhpcy5nZXRBd3NDb25zb2xlVXJsKGRlc3RpbmF0aW9uVXJsKTtcbiAgfVxuXG4gIGdldFNuc1RvcGljVXJsKHRvcGljQXJuOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuYXdzQWNjb3VudFJlZ2lvbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblVybCA9IGBodHRwczovLyR7cmVnaW9ufS5jb25zb2xlLmF3cy5hbWF6b24uY29tL3Nucy92My9ob21lP3JlZ2lvbj0ke3JlZ2lvbn0jL3RvcGljLyR7dG9waWNBcm59YDtcbiAgICByZXR1cm4gdGhpcy5nZXRBd3NDb25zb2xlVXJsKGRlc3RpbmF0aW9uVXJsKTtcbiAgfVxuXG4gIGdldFN0YXRlTWFjaGluZVVybChzdGF0ZU1hY2hpbmVBcm46IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVnaW9uID0gdGhpcy5hd3NBY2NvdW50UmVnaW9uO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uVXJsID0gYGh0dHBzOi8vJHtyZWdpb259LmNvbnNvbGUuYXdzLmFtYXpvbi5jb20vc3RhdGVzL2hvbWU/cmVnaW9uPSR7cmVnaW9ufSMvc3RhdGVtYWNoaW5lcy92aWV3LyR7c3RhdGVNYWNoaW5lQXJufWA7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXdzQ29uc29sZVVybChkZXN0aW5hdGlvblVybCk7XG4gIH1cblxuICBnZXRTcXNRdWV1ZVVybChxdWV1ZVVybDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWdpb24gPSB0aGlzLmF3c0FjY291bnRSZWdpb247XG4gICAgY29uc3QgZGVzdGluYXRpb25VcmwgPSBgaHR0cHM6Ly8ke3JlZ2lvbn0uY29uc29sZS5hd3MuYW1hem9uLmNvbS9zcXMvdjMvaG9tZT9yZWdpb249JHtyZWdpb259Iy9xdWV1ZXMvJHtxdWV1ZVVybH1gO1xuICAgIHJldHVybiB0aGlzLmdldEF3c0NvbnNvbGVVcmwoZGVzdGluYXRpb25VcmwpO1xuICB9XG5cbiAgZ2V0UzNCdWNrZXRVcmwoYnVja2V0TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWdpb24gPSB0aGlzLmF3c0FjY291bnRSZWdpb247XG4gICAgY29uc3QgZGVzdGluYXRpb25VcmwgPSBgaHR0cHM6Ly9zMy5jb25zb2xlLmF3cy5hbWF6b24uY29tL3MzL2J1Y2tldHMvJHtidWNrZXROYW1lfT9yZWdpb249JHtyZWdpb259JnRhYj1tZXRyaWNzYDtcbiAgICByZXR1cm4gdGhpcy5nZXRBd3NDb25zb2xlVXJsKGRlc3RpbmF0aW9uVXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIGRlc3RpbmF0aW9uIFVSTCB3aXRoaW4gYSByZXNvbHV0aW9uIGNvbnRleHQuXG4gICAqIEBwYXJhbSBjb250ZXh0IFRoZSByZXNvbHV0aW9uIGNvbnRleHQuXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvblVybCBUaGUgZGVzdGluYXRpb24gVVJMIHRvIHJlc29sdmUgc2luY2UgaXQgbWF5IGNvbnRhaW4gQ0RLIHRva2Vucy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2xhdGVzdC9ndWlkZS90b2tlbnMuaHRtbFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFJlc29sdmVkRGVzdGluYXRpb25VcmwoXG4gICAgY29udGV4dDogSVJlc29sdmVDb250ZXh0LFxuICAgIGRlc3RpbmF0aW9uVXJsOiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IHJlc29sdmVkRGVzdGluYXRpb24gPSBjb250ZXh0LnJlc29sdmUoZGVzdGluYXRpb25VcmwpO1xuXG4gICAgaWYgKHR5cGVvZiByZXNvbHZlZERlc3RpbmF0aW9uICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBrZWVwIHVucmVzb2x2ZWQgc2luY2Ugd2UgZG8gbm90IGtub3cgaG93IHRvIGRlYWwgd2l0aCBvYmplY3RzXG4gICAgICByZXNvbHZlZERlc3RpbmF0aW9uID0gZGVzdGluYXRpb25Vcmw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkRGVzdGluYXRpb247XG4gIH1cbn1cbiJdfQ==
;