cdk-amazon-chime-resources
Version:

120 lines • 16.3 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MessagingResources = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/* eslint-disable @typescript-eslint/indent */
const aws_cdk_lib_1 = require("aws-cdk-lib");
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
const constructs_1 = require("constructs");
const messaging_function_1 = require("../resources/messaging/messaging-function");
class MessagingResources extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, id);
this.lambda = this.ensureLambda();
const MessagingResourceProvider = new custom_resources_1.Provider(this, 'MessagingResourceProvider', {
onEventHandler: this.lambda,
});
this.messagingCustomResource = new aws_cdk_lib_1.CustomResource(this, 'messagingCustomResource', {
serviceToken: MessagingResourceProvider.serviceToken,
properties: { ...props },
});
}
ensureLambda() {
const stack = aws_cdk_lib_1.Stack.of(this);
const constructName = 'MessagingResources';
const existing = stack.node.tryFindChild(constructName);
/* istanbul ignore next */
if (existing) {
return existing;
}
const messagingCustomResourceRole = new aws_iam_1.Role(this, 'messagingCustomResourceRole', {
description: 'Amazon Chime SDK Messaging Resources',
assumedBy: new aws_iam_1.ServicePrincipal('lambda.amazonaws.com'),
inlinePolicies: {
['chimePolicy']: new aws_iam_1.PolicyDocument({
statements: [
new aws_iam_1.PolicyStatement({
resources: ['*'],
actions: [
'chime:CreateAppInstance',
'chime:CreateChannelFlow',
'chime:DeleteChannelFlow',
'chime:DescribeAppInstance',
'chime:ListAppInstances',
'chime:UpdateAppInstance',
'chime:DeleteAppInstance',
'chime:CreateAppInstanceUser',
'chime:DeleteAppInstanceUser',
'chime:ListAppInstanceUsers',
'chime:UpdateAppInstanceUser',
'chime:DescribeAppInstanceUser',
'chime:CreateAppInstanceAdmin',
'chime:DescribeAppInstanceAdmin',
'chime:ListAppInstanceAdmins',
'chime:DeleteAppInstanceAdmin',
'chime:PutAppInstanceRetentionSettings',
'chime:GetAppInstanceRetentionSettings',
'chime:PutAppInstanceStreamingConfigurations',
'chime:GetAppInstanceStreamingConfigurations',
'chime:DeleteAppInstanceStreamingConfigurations',
'chime:TagResource',
'chime:UntagResource',
'chime:ListTagsForResource',
'lambda:GetPolicy',
'lambda:AddPermission',
'iam:PutRolePolicy',
'iam:CreateServiceLinkedRole',
],
}),
],
}),
['kinesisPolicy']: new aws_iam_1.PolicyDocument({
statements: [
new aws_iam_1.PolicyStatement({
resources: [
`arn:aws:kinesis:${stack.region}:${stack.account}:stream/chime-messaging-*`,
],
actions: ['kinesis:DescribeStream'],
}),
],
}),
['ssmPolicy']: new aws_iam_1.PolicyDocument({
statements: [
new aws_iam_1.PolicyStatement({
resources: [
`arn:aws:ssm:${stack.region}:${stack.account}:parameter/chime/*`,
],
actions: [
'ssm:PutParameter',
'ssm:GetParameter',
'ssm:DeleteParameter',
],
}),
],
}),
},
managedPolicies: [
aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'),
],
});
const fn = new messaging_function_1.MessagingFunction(this, 'messagingResourcesFunction', {
role: messagingCustomResourceRole,
timeout: aws_cdk_lib_1.Duration.seconds(60),
});
// const fn = new NodejsFunction(this, 'messagingResourcesFunction', {
// entry: 'src/resources/messaging/index.ts',
// handler: 'handler',
// runtime: Runtime.NODEJS_18_X,
// architecture: Architecture.ARM_64,
// role: messagingCustomResourceRole,
// timeout: Duration.seconds(60),
// });
return fn;
}
}
exports.MessagingResources = MessagingResources;
_a = JSII_RTTI_SYMBOL_1;
MessagingResources[_a] = { fqn: "cdk-amazon-chime-resources.MessagingResources", version: "2.3.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nQ3VzdG9tUmVzb3VyY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lc3NhZ2luZy9tZXNzYWdpbmdDdXN0b21SZXNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4Q0FBOEM7QUFDOUMsNkNBQTZFO0FBQzdFLGlEQU02QjtBQU83QixtRUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLGtGQUE4RTtBQWU5RSxNQUFhLGtCQUFtQixTQUFRLHNCQUFTO0lBSS9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsQyxNQUFNLHlCQUF5QixHQUFHLElBQUksMkJBQVEsQ0FDNUMsSUFBSSxFQUNKLDJCQUEyQixFQUMzQjtZQUNFLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTTtTQUM1QixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSw0QkFBYyxDQUMvQyxJQUFJLEVBQ0oseUJBQXlCLEVBQ3pCO1lBQ0UsWUFBWSxFQUFFLHlCQUF5QixDQUFDLFlBQVk7WUFDcEQsVUFBVSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUU7U0FDekIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsMEJBQTBCO1FBQzFCLElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxRQUFvQixDQUFDO1NBQzdCO1FBRUQsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQUksQ0FDMUMsSUFBSSxFQUNKLDZCQUE2QixFQUM3QjtZQUNFLFdBQVcsRUFBRSxzQ0FBc0M7WUFDbkQsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMsc0JBQXNCLENBQUM7WUFDdkQsY0FBYyxFQUFFO2dCQUNkLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSx3QkFBYyxDQUFDO29CQUNsQyxVQUFVLEVBQUU7d0JBQ1YsSUFBSSx5QkFBZSxDQUFDOzRCQUNsQixTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7NEJBQ2hCLE9BQU8sRUFBRTtnQ0FDUCx5QkFBeUI7Z0NBQ3pCLHlCQUF5QjtnQ0FDekIseUJBQXlCO2dDQUN6QiwyQkFBMkI7Z0NBQzNCLHdCQUF3QjtnQ0FDeEIseUJBQXlCO2dDQUN6Qix5QkFBeUI7Z0NBQ3pCLDZCQUE2QjtnQ0FDN0IsNkJBQTZCO2dDQUM3Qiw0QkFBNEI7Z0NBQzVCLDZCQUE2QjtnQ0FDN0IsK0JBQStCO2dDQUMvQiw4QkFBOEI7Z0NBQzlCLGdDQUFnQztnQ0FDaEMsNkJBQTZCO2dDQUM3Qiw4QkFBOEI7Z0NBQzlCLHVDQUF1QztnQ0FDdkMsdUNBQXVDO2dDQUN2Qyw2Q0FBNkM7Z0NBQzdDLDZDQUE2QztnQ0FDN0MsZ0RBQWdEO2dDQUNoRCxtQkFBbUI7Z0NBQ25CLHFCQUFxQjtnQ0FDckIsMkJBQTJCO2dDQUMzQixrQkFBa0I7Z0NBQ2xCLHNCQUFzQjtnQ0FDdEIsbUJBQW1CO2dDQUNuQiw2QkFBNkI7NkJBQzlCO3lCQUNGLENBQUM7cUJBQ0g7aUJBQ0YsQ0FBQztnQkFDRixDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksd0JBQWMsQ0FBQztvQkFDcEMsVUFBVSxFQUFFO3dCQUNWLElBQUkseUJBQWUsQ0FBQzs0QkFDbEIsU0FBUyxFQUFFO2dDQUNULG1CQUFtQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLDJCQUEyQjs2QkFDNUU7NEJBQ0QsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7eUJBQ3BDLENBQUM7cUJBQ0g7aUJBQ0YsQ0FBQztnQkFDRixDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksd0JBQWMsQ0FBQztvQkFDaEMsVUFBVSxFQUFFO3dCQUNWLElBQUkseUJBQWUsQ0FBQzs0QkFDbEIsU0FBUyxFQUFFO2dDQUNULGVBQWUsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxvQkFBb0I7NkJBQ2pFOzRCQUNELE9BQU8sRUFBRTtnQ0FDUCxrQkFBa0I7Z0NBQ2xCLGtCQUFrQjtnQ0FDbEIscUJBQXFCOzZCQUN0Qjt5QkFDRixDQUFDO3FCQUNIO2lCQUNGLENBQUM7YUFDSDtZQUNELGVBQWUsRUFBRTtnQkFDZix1QkFBYSxDQUFDLHdCQUF3QixDQUNwQywwQ0FBMEMsQ0FDM0M7YUFDRjtTQUNGLENBQ0YsQ0FBQztRQUVGLE1BQU0sRUFBRSxHQUFHLElBQUksc0NBQWlCLENBQUMsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQ25FLElBQUksRUFBRSwyQkFBMkI7WUFDakMsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUM5QixDQUFDLENBQUM7UUFDSCxzRUFBc0U7UUFDdEUsK0NBQStDO1FBQy9DLHdCQUF3QjtRQUN4QixrQ0FBa0M7UUFDbEMsdUNBQXVDO1FBQ3ZDLHVDQUF1QztRQUN2QyxtQ0FBbUM7UUFDbkMsTUFBTTtRQUVOLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7QUE5SEgsZ0RBK0hDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuaW1wb3J0IHsgRHVyYXRpb24sIEN1c3RvbVJlc291cmNlLCBSZXNvdXJjZVByb3BzLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIFNlcnZpY2VQcmluY2lwYWwsXG4gIFJvbGUsXG4gIE1hbmFnZWRQb2xpY3ksXG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHtcbiAgLy8gQXJjaGl0ZWN0dXJlLFxuICBJRnVuY3Rpb24sXG4gIEZ1bmN0aW9uLFxuICAvLyBSdW50aW1lLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1lc3NhZ2luZ0Z1bmN0aW9uIH0gZnJvbSAnLi4vcmVzb3VyY2VzL21lc3NhZ2luZy9tZXNzYWdpbmctZnVuY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2luZ1Jlc291cmNlUHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgcmVhZG9ubHkgcHJvcGVydGllczogeyBbcHJvcG5hbWU6IHN0cmluZ106IGFueSB9O1xuICByZWFkb25seSByZXNvdXJjZVR5cGU6XG4gICAgfCAnQXBwSW5zdGFuY2UnXG4gICAgfCAnQ2hhbm5lbEZsb3cnXG4gICAgfCAnQXBwSW5zdGFuY2VVc2VyJ1xuICAgIHwgJ0FwcEluc3RhbmNlQWRtaW4nXG4gICAgfCAnRGF0YVJldGVudGlvbidcbiAgICB8ICdTdHJlYW1pbmdDb25maWcnXG4gICAgfCAnQXBwSW5zdGFuY2VTdHJlYW1pbmdDb25maWd1cmF0aW9ucyc7XG4gIHJlYWRvbmx5IHVpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgTWVzc2FnaW5nUmVzb3VyY2VzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYTogSUZ1bmN0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgbWVzc2FnaW5nQ3VzdG9tUmVzb3VyY2U6IEN1c3RvbVJlc291cmNlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNZXNzYWdpbmdSZXNvdXJjZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmxhbWJkYSA9IHRoaXMuZW5zdXJlTGFtYmRhKCk7XG5cbiAgICBjb25zdCBNZXNzYWdpbmdSZXNvdXJjZVByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKFxuICAgICAgdGhpcyxcbiAgICAgICdNZXNzYWdpbmdSZXNvdXJjZVByb3ZpZGVyJyxcbiAgICAgIHtcbiAgICAgICAgb25FdmVudEhhbmRsZXI6IHRoaXMubGFtYmRhLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5tZXNzYWdpbmdDdXN0b21SZXNvdXJjZSA9IG5ldyBDdXN0b21SZXNvdXJjZShcbiAgICAgIHRoaXMsXG4gICAgICAnbWVzc2FnaW5nQ3VzdG9tUmVzb3VyY2UnLFxuICAgICAge1xuICAgICAgICBzZXJ2aWNlVG9rZW46IE1lc3NhZ2luZ1Jlc291cmNlUHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7IC4uLnByb3BzIH0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZUxhbWJkYSgpOiBGdW5jdGlvbiB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBjb25zdHJ1Y3ROYW1lID0gJ01lc3NhZ2luZ1Jlc291cmNlcyc7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChjb25zdHJ1Y3ROYW1lKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nIGFzIEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2luZ0N1c3RvbVJlc291cmNlUm9sZSA9IG5ldyBSb2xlKFxuICAgICAgdGhpcyxcbiAgICAgICdtZXNzYWdpbmdDdXN0b21SZXNvdXJjZVJvbGUnLFxuICAgICAge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FtYXpvbiBDaGltZSBTREsgTWVzc2FnaW5nIFJlc291cmNlcycsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgWydjaGltZVBvbGljeSddOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICdjaGltZTpDcmVhdGVBcHBJbnN0YW5jZScsXG4gICAgICAgICAgICAgICAgICAnY2hpbWU6Q3JlYXRlQ2hhbm5lbEZsb3cnLFxuICAgICAgICAgICAgICAgICAgJ2NoaW1lOkRlbGV0ZUNoYW5uZWxGbG93JyxcbiAgICAgICAgICAgICAgICAgICdjaGltZTpEZXNjcmliZUFwcEluc3RhbmNlJyxcbiAgICAgICAgICAgICAgICAgICdjaGltZTpMaXN0QXBwSW5zdGFuY2VzJyxcbiAgICAgICAgICAgICAgICAgICdjaGltZTpVcGRhdGVBcHBJbnN0YW5jZScsXG4gICAgICAgICAgICAgICAgICAnY2hpbWU6RGVsZXRlQXBwSW5zdGFuY2UnLFxuICAgICAgICAgICAgICAgICAgJ2NoaW1lOkNyZWF0ZUFwcEluc3RhbmNlVXNlcicsXG4gICAgICAgICAgICAgICAgICAnY2hpbWU6RGVsZXRlQXBwSW5zdGFuY2VVc2VyJyxcbiAgICAgICAgICAgICAgICAgICdjaGltZTpMaXN0QXBwSW5zdGFuY2VVc2VycycsXG4gICAgICAgICAgICAgICAgICAnY2hpbWU6VXBkYXRlQXBwSW5zdGFuY2VVc2VyJyxcbiAgICAgICAgICAgICAgICAgICdjaGltZTpEZXNjcmliZUFwcEluc3RhbmNlVXNlcicsXG4gICAgICAgICAgICAgICAgICAnY2hpbWU6Q3JlYXRlQXBwSW5zdGFuY2VBZG1pbicsXG4gICAgICAgICAgICAgICAgICAnY2hpbWU6RGVzY3JpYmVBcHBJbnN0YW5jZUFkbWluJyxcbiAgICAgICAgICAgICAgICAgICdjaGltZTpMaXN0QXBwSW5zdGFuY2VBZG1pbnMnLFxuICAgICAgICAgICAgICAgICAgJ2NoaW1lOkRlbGV0ZUFwcEluc3RhbmNlQWRtaW4nLFxuICAgICAgICAgICAgICAgICAgJ2NoaW1lOlB1dEFwcEluc3RhbmNlUmV0ZW50aW9uU2V0dGluZ3MnLFxuICAgICAgICAgICAgICAgICAgJ2NoaW1lOkdldEFwcEluc3RhbmNlUmV0ZW50aW9uU2V0dGluZ3MnLFxuICAgICAgICAgICAgICAgICAgJ2NoaW1lOlB1dEFwcEluc3RhbmNlU3RyZWFtaW5nQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgJ2NoaW1lOkdldEFwcEluc3RhbmNlU3RyZWFtaW5nQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgJ2NoaW1lOkRlbGV0ZUFwcEluc3RhbmNlU3RyZWFtaW5nQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgJ2NoaW1lOlRhZ1Jlc291cmNlJyxcbiAgICAgICAgICAgICAgICAgICdjaGltZTpVbnRhZ1Jlc291cmNlJyxcbiAgICAgICAgICAgICAgICAgICdjaGltZTpMaXN0VGFnc0ZvclJlc291cmNlJyxcbiAgICAgICAgICAgICAgICAgICdsYW1iZGE6R2V0UG9saWN5JyxcbiAgICAgICAgICAgICAgICAgICdsYW1iZGE6QWRkUGVybWlzc2lvbicsXG4gICAgICAgICAgICAgICAgICAnaWFtOlB1dFJvbGVQb2xpY3knLFxuICAgICAgICAgICAgICAgICAgJ2lhbTpDcmVhdGVTZXJ2aWNlTGlua2VkUm9sZScsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFsna2luZXNpc1BvbGljeSddOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmtpbmVzaXM6JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06c3RyZWFtL2NoaW1lLW1lc3NhZ2luZy0qYCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFsna2luZXNpczpEZXNjcmliZVN0cmVhbSddLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgWydzc21Qb2xpY3knXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICBgYXJuOmF3czpzc206JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06cGFyYW1ldGVyL2NoaW1lLypgLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgJ3NzbTpQdXRQYXJhbWV0ZXInLFxuICAgICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXInLFxuICAgICAgICAgICAgICAgICAgJ3NzbTpEZWxldGVQYXJhbWV0ZXInLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgICAnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScsXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGZuID0gbmV3IE1lc3NhZ2luZ0Z1bmN0aW9uKHRoaXMsICdtZXNzYWdpbmdSZXNvdXJjZXNGdW5jdGlvbicsIHtcbiAgICAgIHJvbGU6IG1lc3NhZ2luZ0N1c3RvbVJlc291cmNlUm9sZSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgIH0pO1xuICAgIC8vIGNvbnN0IGZuID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHRoaXMsICdtZXNzYWdpbmdSZXNvdXJjZXNGdW5jdGlvbicsIHtcbiAgICAvLyAgIGVudHJ5OiAnc3JjL3Jlc291cmNlcy9tZXNzYWdpbmcvaW5kZXgudHMnLFxuICAgIC8vICAgaGFuZGxlcjogJ2hhbmRsZXInLFxuICAgIC8vICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAvLyAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAvLyAgIHJvbGU6IG1lc3NhZ2luZ0N1c3RvbVJlc291cmNlUm9sZSxcbiAgICAvLyAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgIC8vIH0pO1xuXG4gICAgcmV0dXJuIGZuO1xuICB9XG59XG4iXX0=