cdk-nextjs-standalone
Version:
Deploy a NextJS app to AWS using CDK and OpenNext.
79 lines • 14.1 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NextjsBucketDeployment = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const path = 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 common_lambda_props_1 = require("./utils/common-lambda-props");
/**
* Similar to CDK's `BucketDeployment` construct, but with a focus on replacing
* template placeholders (i.e. environment variables) and configuring PUT
* options like cache control.
*/
class NextjsBucketDeployment extends constructs_1.Construct {
/**
* Formats a string as a template value so custom resource knows to replace.
*/
static getSubstitutionValue(v) {
return `{{ ${v} }}`;
}
/**
* Creates `substitutionConfig` an object by extracting unresolved tokens.
*/
static getSubstitutionConfig(env) {
const substitutionConfig = {};
for (const [k, v] of Object.entries(env)) {
if (aws_cdk_lib_1.Token.isUnresolved(v)) {
substitutionConfig[NextjsBucketDeployment.getSubstitutionValue(k)] = v;
}
}
return substitutionConfig;
}
constructor(scope, id, props) {
super(scope, id);
this.props = props;
this.function = this.createFunction();
this.createCustomResource(this.function.functionArn);
}
createFunction() {
const fn = new aws_lambda_1.Function(this, 'Fn', {
...(0, common_lambda_props_1.getCommonFunctionProps)(this),
code: aws_lambda_1.Code.fromAsset(path.resolve(__dirname, '..', 'assets', 'lambdas', 'nextjs-bucket-deployment')),
handler: 'index.handler',
timeout: aws_cdk_lib_1.Duration.minutes(5),
...this.props.overrides?.functionProps,
});
if (this.props.debug) {
fn.addEnvironment('DEBUG', '1');
}
this.props.asset.grantRead(fn);
this.props.destinationBucket.grantReadWrite(fn);
return fn;
}
createCustomResource(serviceToken) {
const properties = {
sourceBucketName: this.props.asset.s3BucketName,
sourceKeyPrefix: this.props.asset.s3ObjectKey,
destinationBucketName: this.props.destinationBucket.bucketName,
destinationKeyPrefix: this.props.destinationKeyPrefix,
putConfig: this.props.putConfig,
prune: this.props.prune ?? false,
substitutionConfig: this.props.substitutionConfig,
zip: this.props.zip,
queueSize: this.props.queueSize,
};
return new aws_cdk_lib_1.CustomResource(this, 'CustomResource', {
properties,
resourceType: 'Custom::NextjsBucketDeployment',
serviceToken,
...this.props.overrides?.customResourceProps,
});
}
}
exports.NextjsBucketDeployment = NextjsBucketDeployment;
_a = JSII_RTTI_SYMBOL_1;
NextjsBucketDeployment[_a] = { fqn: "cdk-nextjs-standalone.NextjsBucketDeployment", version: "4.3.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmV4dGpzQnVja2V0RGVwbG95bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9OZXh0anNCdWNrZXREZXBsb3ltZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0NBQWtDO0FBQ2xDLDZDQUE4RDtBQUM5RCx1REFBd0Q7QUFHeEQsMkNBQXVDO0FBRXZDLHFFQUFxRTtBQXNGckU7Ozs7R0FJRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsc0JBQVM7SUFDbkQ7O09BRUc7SUFDSCxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBUztRQUNuQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUNEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEdBQTJCO1FBQ3RELE1BQU0sa0JBQWtCLEdBQTJCLEVBQUUsQ0FBQztRQUN0RCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pDLElBQUksbUJBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekUsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7SUFPRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtDO1FBQzFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxxQkFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDbEMsR0FBRyxJQUFBLDRDQUFzQixFQUFDLElBQUksQ0FBQztZQUMvQixJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztZQUNwRyxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYTtTQUN2QyxDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxZQUFvQjtRQUMvQyxNQUFNLFVBQVUsR0FBNkI7WUFDM0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWTtZQUMvQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVztZQUM3QyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFVBQVU7WUFDOUQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0I7WUFDckQsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSztZQUNoQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQjtZQUNqRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7U0FDaEMsQ0FBQztRQUNGLE9BQU8sSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNoRCxVQUFVO1lBQ1YsWUFBWSxFQUFFLGdDQUFnQztZQUM5QyxZQUFZO1lBQ1osR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxtQkFBbUI7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFsRUgsd0RBbUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIER1cmF0aW9uLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvZGUsIEZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IE9wdGlvbmFsQ3VzdG9tUmVzb3VyY2VQcm9wcywgT3B0aW9uYWxGdW5jdGlvblByb3BzIH0gZnJvbSAnLi9nZW5lcmF0ZWQtc3RydWN0cyc7XG5pbXBvcnQgeyBnZXRDb21tb25GdW5jdGlvblByb3BzIH0gZnJvbSAnLi91dGlscy9jb21tb24tbGFtYmRhLXByb3BzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNCdWNrZXREZXBsb3ltZW50T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25Qcm9wcz86IE9wdGlvbmFsRnVuY3Rpb25Qcm9wcztcbiAgcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2VQcm9wcz86IE9wdGlvbmFsQ3VzdG9tUmVzb3VyY2VQcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNCdWNrZXREZXBsb3ltZW50UHJvcHMge1xuICAvKipcbiAgICogU291cmNlIGBBc3NldGBcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0OiBBc3NldDtcbiAgLyoqXG4gICAqIEVuYWJsZSB2ZXJib3NlIG91dHB1dCBvZiBDdXN0b20gUmVzb3VyY2UgTGFtYmRhXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkZWJ1Zz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZW4gZGVsZXRlIG9sZCBvYmplY3RzIGluIGBkZXN0aW5hdGlvbkJ1Y2tldGAvYGRlc3RpbmF0aW9uS2V5UHJlZml4YFxuICAgKiAqKmFmdGVyKiogdXBsb2FkaW5nIG5ldyBvYmplY3RzLiBPbmx5IGFwcGxpZXMgaWYgYHppcGAgaXMgYGZhbHNlYC5cbiAgICpcbiAgICogT2xkIG9iamVjdHMgYXJlIGRldGVybWluZWQgYnkgbGlzdGluZyBvYmplY3RzXG4gICAqIGluIGJ1Y2tldCBiZWZvcmUgY3JlYXRpbmcgbmV3IG9iamVjdHMgYW5kIGZpbmRpbmcgdGhlIG9iamVjdHMgdGhhdCBhcmVuJ3QgaW5cbiAgICogdGhlIG5ldyBvYmplY3RzLlxuICAgKlxuICAgKiBOb3RlLCBpZiB0aGlzIGlzIHNldCB0byB0cnVlIHRoZW4gY2xpZW50cyB3aG8gaGF2ZSBvbGQgSFRNTCBmaWxlcyAoYnJvd3NlciB0YWJzIG9wZW5lZCBiZWZvcmUgZGVwbG95bWVudClcbiAgICogd2lsbCByZWZlcmVuY2UgSlMsIENTUyBmaWxlcyB0aGF0IGRvIG5vdCBleGlzdCBpbiBTMyByZXNsdGluZyBpbiA0MDRzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJ1bmU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogTWFwcGluZyBvZiBmaWxlcyB0byBQVVQgb3B0aW9ucyBmb3IgYFB1dE9iamVjdENvbW1hbmRgLiBLZXlzIG9mXG4gICAqIHJlY29yZCBtdXN0IGJlIGEgZ2xvYiBwYXR0ZXJuICh1c2VzIG1pY3JvbWF0Y2gpLiBWYWx1ZXMgb2YgcmVjb3JkIGFyZSBvcHRpb25zXG4gICAqIGZvciBQVVQgY29tbWFuZCBmb3IgQVdTIFNESyBKUyBWMy4gU2VlIFtoZXJlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy92My9sYXRlc3QvUGFja2FnZS8tYXdzLXNkay1jbGllbnQtczMvSW50ZXJmYWNlL1B1dE9iamVjdFJlcXVlc3QvKVxuICAgKiBmb3Igb3B0aW9ucy4gSWYgYSBmaWxlIG1hdGNoZXMgbXVsdGlwbGUgZ2xvYnMsIGNvbmZpZ3VyYXRpb24gd2lsbCBiZVxuICAgKiBtZXJnZWQuIExhdGVyIGVudHJpZXMgb3ZlcnJpZGUgZWFybGllciBlbnRyaWVzLlxuICAgKlxuICAgKiBgQnVja2V0YCwgYEtleWAsIGFuZCBgQm9keWAgUFVUIG9wdGlvbnMgY2Fubm90IGJlIHNldC5cbiAgICovXG4gIHJlYWRvbmx5IHB1dENvbmZpZz86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICAvKipcbiAgICogRGVzdGluYXRpb24gUzMgQnVja2V0XG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkJ1Y2tldDogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIFMzIEJ1Y2tldCBLZXkgUHJlZml4XG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbktleVByZWZpeD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIGZvciBldmVyeSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNCdWNrZXREZXBsb3ltZW50T3ZlcnJpZGVzO1xuICAvKipcbiAgICogUmVwbGFjZSBwbGFjZWhvbGRlcnMgaW4gYWxsIGZpbGVzIGluIGBhc3NldGAuIFBsYWNlaG9sZGVyIHRhcmdldHMgYXJlXG4gICAqIGRlZmluZWQgYnkga2V5cyBvZiByZWNvcmQuIFZhbHVlcyB0byByZXBsYWNlIHBsYWNlaG9sZGVycyB3aXRoIGFyZSBkZWZpbmVkXG4gICAqIGJ5IHZhbHVlcyBvZiByZWNvcmQuXG4gICAqL1xuICByZWFkb25seSBzdWJzdGl0dXRpb25Db25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKipcbiAgICogSWYgYHRydWVgIHRoZW4gZmlsZXMgd2lsbCBiZSB6aXBwZWQgYmVmb3JlIHdyaXRpbmcgdG8gZGVzdGluYXRpb24gYnVja2V0LlxuICAgKlxuICAgKiBVc2VmdWwgZm9yIExhbWJkYSBmdW5jdGlvbnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB6aXA/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBmaWxlcyB0byB1cGxvYWQgaW4gcGFyYWxsZWwuXG4gICAqL1xuICByZWFkb25seSBxdWV1ZVNpemU/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzIHtcbiAgZGVzdGluYXRpb25CdWNrZXROYW1lOiBzdHJpbmc7XG4gIGRlc3RpbmF0aW9uS2V5UHJlZml4Pzogc3RyaW5nO1xuICBwcnVuZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHB1dENvbmZpZz86IE5leHRqc0J1Y2tldERlcGxveW1lbnRQcm9wc1sncHV0Q29uZmlnJ107XG4gIHF1ZXVlU2l6ZT86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgc3Vic3RpdHV0aW9uQ29uZmlnPzogTmV4dGpzQnVja2V0RGVwbG95bWVudFByb3BzWydzdWJzdGl0dXRpb25Db25maWcnXTtcbiAgc291cmNlQnVja2V0TmFtZTogc3RyaW5nO1xuICBzb3VyY2VLZXlQcmVmaXg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHppcD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU2ltaWxhciB0byBDREsncyBgQnVja2V0RGVwbG95bWVudGAgY29uc3RydWN0LCBidXQgd2l0aCBhIGZvY3VzIG9uIHJlcGxhY2luZ1xuICogdGVtcGxhdGUgcGxhY2Vob2xkZXJzIChpLmUuIGVudmlyb25tZW50IHZhcmlhYmxlcykgYW5kIGNvbmZpZ3VyaW5nIFBVVFxuICogb3B0aW9ucyBsaWtlIGNhY2hlIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXh0anNCdWNrZXREZXBsb3ltZW50IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBzdHJpbmcgYXMgYSB0ZW1wbGF0ZSB2YWx1ZSBzbyBjdXN0b20gcmVzb3VyY2Uga25vd3MgdG8gcmVwbGFjZS5cbiAgICovXG4gIHN0YXRpYyBnZXRTdWJzdGl0dXRpb25WYWx1ZSh2OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBge3sgJHt2fSB9fWA7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYHN1YnN0aXR1dGlvbkNvbmZpZ2AgYW4gb2JqZWN0IGJ5IGV4dHJhY3RpbmcgdW5yZXNvbHZlZCB0b2tlbnMuXG4gICAqL1xuICBzdGF0aWMgZ2V0U3Vic3RpdHV0aW9uQ29uZmlnKGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkNvbmZpZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGVudikpIHtcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodikpIHtcbiAgICAgICAgc3Vic3RpdHV0aW9uQ29uZmlnW05leHRqc0J1Y2tldERlcGxveW1lbnQuZ2V0U3Vic3RpdHV0aW9uVmFsdWUoayldID0gdjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbkNvbmZpZztcbiAgfVxuICAvKipcbiAgICogTGFtYmRhIEZ1bmN0aW9uIFByb3ZpZGVyIGZvciBDdXN0b20gUmVzb3VyY2VcbiAgICovXG4gIGZ1bmN0aW9uOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBwcm9wczogTmV4dGpzQnVja2V0RGVwbG95bWVudFByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXh0anNCdWNrZXREZXBsb3ltZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmZ1bmN0aW9uID0gdGhpcy5jcmVhdGVGdW5jdGlvbigpO1xuICAgIHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UodGhpcy5mdW5jdGlvbi5mdW5jdGlvbkFybik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdGbicsIHtcbiAgICAgIC4uLmdldENvbW1vbkZ1bmN0aW9uUHJvcHModGhpcyksXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnYXNzZXRzJywgJ2xhbWJkYXMnLCAnbmV4dGpzLWJ1Y2tldC1kZXBsb3ltZW50JykpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5mdW5jdGlvblByb3BzLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnByb3BzLmRlYnVnKSB7XG4gICAgICBmbi5hZGRFbnZpcm9ubWVudCgnREVCVUcnLCAnMScpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLmFzc2V0LmdyYW50UmVhZChmbik7XG4gICAgdGhpcy5wcm9wcy5kZXN0aW5hdGlvbkJ1Y2tldC5ncmFudFJlYWRXcml0ZShmbik7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21SZXNvdXJjZShzZXJ2aWNlVG9rZW46IHN0cmluZykge1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IEN1c3RvbVJlc291cmNlUHJvcGVydGllcyA9IHtcbiAgICAgIHNvdXJjZUJ1Y2tldE5hbWU6IHRoaXMucHJvcHMuYXNzZXQuczNCdWNrZXROYW1lLFxuICAgICAgc291cmNlS2V5UHJlZml4OiB0aGlzLnByb3BzLmFzc2V0LnMzT2JqZWN0S2V5LFxuICAgICAgZGVzdGluYXRpb25CdWNrZXROYW1lOiB0aGlzLnByb3BzLmRlc3RpbmF0aW9uQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogdGhpcy5wcm9wcy5kZXN0aW5hdGlvbktleVByZWZpeCxcbiAgICAgIHB1dENvbmZpZzogdGhpcy5wcm9wcy5wdXRDb25maWcsXG4gICAgICBwcnVuZTogdGhpcy5wcm9wcy5wcnVuZSA/PyBmYWxzZSxcbiAgICAgIHN1YnN0aXR1dGlvbkNvbmZpZzogdGhpcy5wcm9wcy5zdWJzdGl0dXRpb25Db25maWcsXG4gICAgICB6aXA6IHRoaXMucHJvcHMuemlwLFxuICAgICAgcXVldWVTaXplOiB0aGlzLnByb3BzLnF1ZXVlU2l6ZSxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ0N1c3RvbVJlc291cmNlJywge1xuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHJlc291cmNlVHlwZTogJ0N1c3RvbTo6TmV4dGpzQnVja2V0RGVwbG95bWVudCcsXG4gICAgICBzZXJ2aWNlVG9rZW4sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uY3VzdG9tUmVzb3VyY2VQcm9wcyxcbiAgICB9KTtcbiAgfVxufVxuIl19