UNPKG

cdk-nextjs

Version:

Deploy Next.js apps on AWS with CDK

78 lines 14.2 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.NextjsPostDeploy = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const node_path_1 = require("node:path"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const aws_lambda_1 = require("aws-cdk-lib/aws-lambda"); const constructs_1 = require("constructs"); const constants_1 = require("./constants"); const get_architecture_1 = require("./utils/get-architecture"); /** * Performs post deployment tasks in custom resource. * * 1. CloudFront Invalidation (defaults to /*) * 2. Prunes FileSystem by removing directories that don't match this deployments BUILD_ID * 3. Prune S3 by removing objects that don't have next-build-id metadata of * current build id AND are older than `msTtl` */ class NextjsPostDeploy extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); this.props = props; this.lambdaFunction = this.createFunction(); this.customResource = this.createCustomResource(); } createFunction() { const fn = new aws_lambda_1.Function(this, "Fn", { architecture: (0, get_architecture_1.getLambdaArchitecture)(), code: aws_lambda_1.Code.fromAsset((0, node_path_1.join)(__dirname, "../assets/lambdas/post-deploy/post-deploy.lambda")), filesystem: aws_lambda_1.FileSystem.fromEfsAccessPoint(this.props.accessPoint, constants_1.MOUNT_PATH), handler: "index.handler", memorySize: 2048, runtime: new aws_lambda_1.Runtime("nodejs22.x", aws_lambda_1.RuntimeFamily.NODEJS), timeout: aws_cdk_lib_1.Duration.minutes(5), vpc: this.props.vpc, ...this.props.overrides?.functionProps, }); this.props.distribution?.grantCreateInvalidation(fn); if (this.props.debug !== false) { fn.addEnvironment("DEBUG", "1"); } this.props.staticAssetsBucket?.grantReadWrite(fn); return fn; } createCustomResource() { const properties = { // ensures this CR runs each time new builder image buildId: this.props.buildId, buildImageDigest: this.props.buildImageDigest, msTtl: (1000 * 60 * 60 * 24 * 30).toString(), // 1 month staticAssetsBucketName: this.props.staticAssetsBucket?.bucketName, createInvalidationCommandInput: this.props.distribution ? { distributionId: this.props.distribution.distributionId, invalidationBatch: { callerReference: new Date().toISOString(), paths: { quantity: 1, items: ["/*"], }, }, } : undefined, ...this.props.overrides?.customResourceProperties, }; return new aws_cdk_lib_1.CustomResource(this, "CustomResource", { properties, resourceType: "Custom::NextjsPostDeploy", serviceToken: this.lambdaFunction.functionArn, ...this.props.overrides?.customResourceProps, }); } } exports.NextjsPostDeploy = NextjsPostDeploy; _a = JSII_RTTI_SYMBOL_1; NextjsPostDeploy[_a] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.4.10" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXBvc3QtZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25leHRqcy1wb3N0LWRlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlDQUFpQztBQUNqQyw2Q0FBdUQ7QUFJdkQsdURBTWdDO0FBRWhDLDJDQUF1QztBQUN2QywyQ0FBeUM7QUFJekMsK0RBQWlFO0FBZ0ZqRTs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxzQkFBUztJQU03QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEVBQUUsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUN4QyxZQUFZLEVBQUUsSUFBQSx3Q0FBcUIsR0FBRTtZQUNyQyxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQ2xCLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUsa0RBQWtELENBQUMsQ0FDcEU7WUFDRCxVQUFVLEVBQUUsdUJBQVUsQ0FBQyxrQkFBa0IsQ0FDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQ3RCLHNCQUFVLENBQ1g7WUFDRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsSUFBSTtZQUNoQixPQUFPLEVBQUUsSUFBSSxvQkFBTyxDQUFDLFlBQVksRUFBRSwwQkFBYSxDQUFDLE1BQU0sQ0FBQztZQUN4RCxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDbkIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxhQUFhO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLFVBQVUsR0FBdUM7WUFDckQsbURBQW1EO1lBQ25ELE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDM0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7WUFDN0MsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVU7WUFDeEQsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxVQUFVO1lBQ2pFLDhCQUE4QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDckQsQ0FBQyxDQUFDO29CQUNFLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjO29CQUN0RCxpQkFBaUIsRUFBRTt3QkFDakIsZUFBZSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO3dCQUN6QyxLQUFLLEVBQUU7NEJBQ0wsUUFBUSxFQUFFLENBQUM7NEJBQ1gsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO3lCQUNkO3FCQUNGO2lCQUNGO2dCQUNILENBQUMsQ0FBQyxTQUFTO1lBQ2IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0I7U0FDbEQsQ0FBQztRQUNGLE9BQU8sSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNoRCxVQUFVO1lBQ1YsWUFBWSxFQUFFLDBCQUEwQjtZQUN4QyxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXO1lBQzdDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsbUJBQW1CO1NBQzdDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBakVILDRDQWtFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IElWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgQWNjZXNzUG9pbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVmc1wiO1xuaW1wb3J0IHtcbiAgQ29kZSxcbiAgRmlsZVN5c3RlbSxcbiAgRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb24sXG4gIFJ1bnRpbWUsXG4gIFJ1bnRpbWVGYW1pbHksXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTU9VTlRfUEFUSCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxDdXN0b21SZXNvdXJjZVByb3BzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxDdXN0b21SZXNvdXJjZVByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbEZ1bmN0aW9uUHJvcHMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbEZ1bmN0aW9uUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsUG9zdERlcGxveUN1c3RvbVJlc291cmNlUHJvcGVydGllcyB9IGZyb20gXCIuL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsUG9zdERlcGxveUN1c3RvbVJlc291cmNlUHJvcGVydGllc1wiO1xuaW1wb3J0IHsgZ2V0TGFtYmRhQXJjaGl0ZWN0dXJlIH0gZnJvbSBcIi4vdXRpbHMvZ2V0LWFyY2hpdGVjdHVyZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1Bvc3REZXBsb3lPdmVycmlkZXMge1xuICByZWFkb25seSBmdW5jdGlvblByb3BzPzogT3B0aW9uYWxGdW5jdGlvblByb3BzO1xuICAvKipcbiAgICogUHJvcHMgdGhhdCBkZWZpbmUgdGhlIGN1c3RvbSByZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2VQcm9wcz86IE9wdGlvbmFsQ3VzdG9tUmVzb3VyY2VQcm9wcztcbiAgLyoqXG4gICAqIFByb3BlcnRpZXMgcGFzc2VkIGludG8gY3VzdG9tIHJlc291cmNlIHRoYXQgYXJlIHBhc3NlZCB0byBMYW1iZGEgZXZlbnQgaGFuZGxlci5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUHJvcGVydGllcz86IE9wdGlvbmFsUG9zdERlcGxveUN1c3RvbVJlc291cmNlUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNQb3N0RGVwbG95UHJvcHMge1xuICByZWFkb25seSBhY2Nlc3NQb2ludDogQWNjZXNzUG9pbnQ7XG4gIHJlYWRvbmx5IGJ1aWxkSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEBzZWUge0BsaW5rIE5leHRqc0J1aWxkLmJ1aWxkSW1hZ2VEaWdlc3R9XG4gICAqL1xuICByZWFkb25seSBidWlsZEltYWdlRGlnZXN0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBsb2dzIGRldGFpbHMgaW4gY3VzdG9tIHJlc291cmNlIGxhbWJkYVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBkZWJ1Zz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDbG91ZEZyb250IERpc3RyaWJ1dGlvbiB0byBpbnZhbGlkYXRlXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb24/OiBJRGlzdHJpYnV0aW9uO1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgZm9yIGV2ZXJ5IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc1Bvc3REZXBsb3lPdmVycmlkZXM7XG4gIC8qKlxuICAgKiBAc2VlIHtAbGluayBOZXh0anNCYXNlUHJvcHMucmVsYXRpdmVQYXRoVG9QYWNrYWdlfVxuICAgKi9cbiAgcmVhZG9ubHkgcmVsYXRpdmVQYXRoVG9QYWNrYWdlPzogc3RyaW5nO1xuICAvKipcbiAgICogUmVxdWlyZWQgZm9yIGBOZXh0anNUeXBlLkdsb2JhbEZ1bmN0aW9uc2AgYW5kIGBOZXh0anNUeXBlLkdsb2JhbENvbnRhaW5lcnNgXG4gICAqL1xuICByZWFkb25seSBzdGF0aWNBc3NldHNCdWNrZXQ/OiBCdWNrZXQ7XG4gIHJlYWRvbmx5IHZwYzogSVZwYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3N0RGVwbG95Q3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIEJ1aWxkIElEIG9mIGN1cnJlbnQgZGVwbG95bWVudC4gVXNlZCB0byBwcnVuZSBGaWxlU3lzdGVtIG9mIGRpcmVjdG9yaWVzXG4gICAqIHdpdGggb2xkIGJ1aWxkIGlkcyBhbmQgcHJ1bmUgUzMgYmFzZWQgb24gbWV0YWRhdCBhbmQgYG1zVHRsYFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRJZDogc3RyaW5nO1xuICAvKipcbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQnVpbGQuYnVpbGRJbWFnZURpZ2VzdH1cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSW1hZ2VEaWdlc3Q6IHN0cmluZztcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L2NsaWVudC9jbG91ZGZyb250L2NvbW1hbmQvQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZC9cbiAgICogQGRlZmF1bHRcbiAgICoge1xuICAgICAgICBkaXN0cmlidXRpb25JZDogdGhpcy5wcm9wcy5kaXN0cmlidXRpb24/LmRpc3RyaWJ1dGlvbklkLFxuICAgICAgICBpbnZhbGlkYXRpb25CYXRjaDoge1xuICAgICAgICAgIGNhbGxlclJlZmVyZW5jZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgICAgIGl0ZW1zOiBbXCIvKlwiXSwgLy8gaW52YWxpZGF0ZSBhbGwgcGF0aHNcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZElucHV0PzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRpbWUgdG8gbGl2ZSBpbiBtaWxsaXNlY29uZHNcbiAgICpcbiAgICogTXVzdCBiZSBzdHJpbmcgYmVjYXVzZSBvZiBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2UgbGltaXRhdGlvblxuICAgKiBAZGVmYXVsdCAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDMwKS50b1N0cmluZygpXG4gICAqL1xuICByZWFkb25seSBtc1R0bDogc3RyaW5nO1xuICByZWFkb25seSBzdGF0aWNBc3NldHNCdWNrZXROYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlcmZvcm1zIHBvc3QgZGVwbG95bWVudCB0YXNrcyBpbiBjdXN0b20gcmVzb3VyY2UuXG4gKlxuICogMS4gQ2xvdWRGcm9udCBJbnZhbGlkYXRpb24gKGRlZmF1bHRzIHRvIC8qKVxuICogMi4gUHJ1bmVzIEZpbGVTeXN0ZW0gYnkgcmVtb3ZpbmcgZGlyZWN0b3JpZXMgdGhhdCBkb24ndCBtYXRjaCB0aGlzIGRlcGxveW1lbnRzIEJVSUxEX0lEXG4gKiAzLiBQcnVuZSBTMyBieSByZW1vdmluZyBvYmplY3RzIHRoYXQgZG9uJ3QgaGF2ZSBuZXh0LWJ1aWxkLWlkIG1ldGFkYXRhIG9mXG4gKiBjdXJyZW50IGJ1aWxkIGlkIEFORCBhcmUgb2xkZXIgdGhhbiBgbXNUdGxgXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXh0anNQb3N0RGVwbG95IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY3VzdG9tUmVzb3VyY2U6IEN1c3RvbVJlc291cmNlO1xuICBsYW1iZGFGdW5jdGlvbjogTGFtYmRhRnVuY3Rpb247XG5cbiAgcHJpdmF0ZSBwcm9wczogTmV4dGpzUG9zdERlcGxveVByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXh0anNQb3N0RGVwbG95UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmxhbWJkYUZ1bmN0aW9uID0gdGhpcy5jcmVhdGVGdW5jdGlvbigpO1xuICAgIHRoaXMuY3VzdG9tUmVzb3VyY2UgPSB0aGlzLmNyZWF0ZUN1c3RvbVJlc291cmNlKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIFwiRm5cIiwge1xuICAgICAgYXJjaGl0ZWN0dXJlOiBnZXRMYW1iZGFBcmNoaXRlY3R1cmUoKSxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBqb2luKF9fZGlybmFtZSwgXCIuLi9hc3NldHMvbGFtYmRhcy9wb3N0LWRlcGxveS9wb3N0LWRlcGxveS5sYW1iZGFcIiksXG4gICAgICApLFxuICAgICAgZmlsZXN5c3RlbTogRmlsZVN5c3RlbS5mcm9tRWZzQWNjZXNzUG9pbnQoXG4gICAgICAgIHRoaXMucHJvcHMuYWNjZXNzUG9pbnQsXG4gICAgICAgIE1PVU5UX1BBVEgsXG4gICAgICApLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBtZW1vcnlTaXplOiAyMDQ4LFxuICAgICAgcnVudGltZTogbmV3IFJ1bnRpbWUoXCJub2RlanMyMi54XCIsIFJ1bnRpbWVGYW1pbHkuTk9ERUpTKSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICB2cGM6IHRoaXMucHJvcHMudnBjLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmZ1bmN0aW9uUHJvcHMsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9wcy5kaXN0cmlidXRpb24/LmdyYW50Q3JlYXRlSW52YWxpZGF0aW9uKGZuKTtcbiAgICBpZiAodGhpcy5wcm9wcy5kZWJ1ZyAhPT0gZmFsc2UpIHtcbiAgICAgIGZuLmFkZEVudmlyb25tZW50KFwiREVCVUdcIiwgXCIxXCIpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldD8uZ3JhbnRSZWFkV3JpdGUoZm4pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ3VzdG9tUmVzb3VyY2UoKSB7XG4gICAgY29uc3QgcHJvcGVydGllczogUG9zdERlcGxveUN1c3RvbVJlc291cmNlUHJvcGVydGllcyA9IHtcbiAgICAgIC8vIGVuc3VyZXMgdGhpcyBDUiBydW5zIGVhY2ggdGltZSBuZXcgYnVpbGRlciBpbWFnZVxuICAgICAgYnVpbGRJZDogdGhpcy5wcm9wcy5idWlsZElkLFxuICAgICAgYnVpbGRJbWFnZURpZ2VzdDogdGhpcy5wcm9wcy5idWlsZEltYWdlRGlnZXN0LFxuICAgICAgbXNUdGw6ICgxMDAwICogNjAgKiA2MCAqIDI0ICogMzApLnRvU3RyaW5nKCksIC8vIDEgbW9udGhcbiAgICAgIHN0YXRpY0Fzc2V0c0J1Y2tldE5hbWU6IHRoaXMucHJvcHMuc3RhdGljQXNzZXRzQnVja2V0Py5idWNrZXROYW1lLFxuICAgICAgY3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZElucHV0OiB0aGlzLnByb3BzLmRpc3RyaWJ1dGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRpc3RyaWJ1dGlvbklkOiB0aGlzLnByb3BzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZCxcbiAgICAgICAgICAgIGludmFsaWRhdGlvbkJhdGNoOiB7XG4gICAgICAgICAgICAgIGNhbGxlclJlZmVyZW5jZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgICAgIHF1YW50aXR5OiAxLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXCIvKlwiXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5jdXN0b21SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiQ3VzdG9tUmVzb3VyY2VcIiwge1xuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206Ok5leHRqc1Bvc3REZXBsb3lcIixcbiAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5sYW1iZGFGdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5jdXN0b21SZXNvdXJjZVByb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=