@aws/cloudfront-hosting-toolkit
Version:
CloudFront Hosting Toolkit offers the convenience of a managed frontend hosting service while retaining full control over the hosting and deployment infrastructure to make it your own.
164 lines (161 loc) • 20.9 kB
JavaScript
;
/*
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License").
You may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.hostingInfrastructureDeletionConfirmation = exports.manualGitHubConfigConfirmationQuestion = exports.cloudFrontAssociationQuestion = exports.hostedZoneIdQuestion = exports.domainNameDetailsQuestions = exports.continueConfirmationQuestion = exports.getDomainNameQuestion = exports.getFrameworkSelectionQuestions = exports.getS3BucketConfigurationQuestions = exports.getGithubRepositoryQuestions = void 0;
const helper_1 = require("./helper");
//export const getFrameworkSelectionQuestions = (initialValue?: string) => {
const getGithubRepositoryQuestions = (initialUrl, initialBranch) => {
const question = [
{
type: "text",
name: "repoUrl",
message: "Please provide your GitHub repository URL",
...(initialUrl !== undefined && { initial: initialUrl }), // Conditionally include 'initial'
validate: (value) => (0, helper_1.isValidGithubUrl)(value)
? true
: "GitHub repository format must be https://github.com/USERNAME/REPOSITORY.git or git@github.com:USERNAME/REPOSITORY.git and can be added only once",
},
{
type: "text",
name: "branchName",
message: "What is the name of the branch you would like to use? Hit Enter to confirm or change the selection.",
initial: initialBranch || "main",
validate: (value) => value.length > 0 ? true : "Branch name is mandatory",
},
];
return question;
};
exports.getGithubRepositoryQuestions = getGithubRepositoryQuestions;
const getS3BucketConfigurationQuestions = (defaultBucket, defaultPath = "") => [
{
type: "text",
name: "s3bucket",
...(defaultBucket !== undefined && { initial: defaultBucket }),
message: "Please enter the name of the bucket you would like to use",
validate: (value) => (0, helper_1.isValidBucketName)(value) ? true : "The bucket name must not be empty, and the corresponding bucket must exist",
},
{
type: "text",
name: "s3path",
...(defaultPath !== undefined && { initial: defaultPath }),
message: "If you would like to specify a prefix, please enter it below. Otherwise, leave it blank",
validate: (value) => (0, helper_1.validateNoLeadingTrailingSlashes)(value) ? true : "The prefix should not have leading or trailing slashes",
},
];
exports.getS3BucketConfigurationQuestions = getS3BucketConfigurationQuestions;
function findIndexByValue(objects, value) {
if (!value)
return 0;
for (let i = 0; i < objects.length; i++) {
if (objects[i].value === value) {
return i;
}
}
return 0;
}
const getFrameworkSelectionQuestions = (initialValue) => {
const index = findIndexByValue((0, helper_1.frameworkList)(), initialValue);
const question = {
type: "select",
name: "framework",
message: "Which framework did you use for website construction? Press Enter to confirm or change the selection.",
choices: (0, helper_1.frameworkList)(),
initial: index,
};
return [question];
};
exports.getFrameworkSelectionQuestions = getFrameworkSelectionQuestions;
const getDomainNameQuestion = (defaultDomainName) => [
{
type: "select",
name: "value",
message: "Do you own a domain name that you would like to use?",
choices: [
{ title: "Yes", value: "yes" },
{ title: "No", value: "no" },
],
initial: defaultDomainName ? 0 : 1,
},
];
exports.getDomainNameQuestion = getDomainNameQuestion;
exports.continueConfirmationQuestion = {
type: "text",
name: "value",
message: "Please complete the operation and type 'ok' to continue ",
validate: (value) => value.toLowerCase() == "ok" ? true : "You have to type OK to continue",
};
const domainNameDetailsQuestions = (defaultDomainName) => [
{
type: "text",
name: "domainName",
...(defaultDomainName !== undefined && { initial: defaultDomainName }),
message: "Please provide your domain name in the following formats: www.mydomainname.com or mydomainname.com ?",
validate: (value) => (0, helper_1.isValidDomainName)(value)
? true
: "Domain name format must be www.mydomainname.com or mydomainname.com",
},
{
type: "select",
name: "registrar",
message: "Where is the authoritative DNS server of this domain?",
choices: [
{ title: "Elsewhere", value: "another" },
{ title: "Route 53 in this AWS Account", value: "current" },
],
initial: 1,
},
];
exports.domainNameDetailsQuestions = domainNameDetailsQuestions;
const hostedZoneIdQuestion = (defaultHostedZoneId) => [
{
type: "text",
name: "hostedZoneId",
...(defaultHostedZoneId !== undefined && { initial: defaultHostedZoneId }),
message: "Please type the hosted zone ID",
validate: (value) => value.length > 0 ? true : "The hosted zone must not be empty",
},
];
exports.hostedZoneIdQuestion = hostedZoneIdQuestion;
exports.cloudFrontAssociationQuestion = {
type: "select",
name: "value",
message: "Would you like to associate the domain name to the CloudFront distribution automatically now, or would you prefer to do it later?",
choices: [
{ title: "Associate automatically now.", value: "yes" },
{ title: "Do it later.", value: "no" },
],
initial: 0,
};
exports.manualGitHubConfigConfirmationQuestion = {
type: "select",
name: "value",
message: "Would you like to manually enter your GitHub repository information?",
choices: [
{ title: "Yes", value: "manual" },
{ title: "No, exit", value: "exit" },
],
initial: 0,
};
exports.hostingInfrastructureDeletionConfirmation = {
type: "select",
name: "value",
message: "Are you sure you want to completely remove the hosting infrastructure from your AWS account?",
choices: [
{ title: "Yes", value: "save" },
{ title: "No", value: "exit" },
],
initial: 1,
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0X3F1ZXN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb21wdF9xdWVzdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTs7O0FBRUYscUNBQW1JO0FBRW5JLDRFQUE0RTtBQUVyRSxNQUFNLDRCQUE0QixHQUFHLENBQzFDLFVBQW1CLEVBQ25CLGFBQXNCLEVBQ3RCLEVBQUU7SUFDRixNQUFNLFFBQVEsR0FBRztRQUNmO1lBQ0UsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsU0FBUztZQUNmLE9BQU8sRUFBRSwyQ0FBMkM7WUFDcEQsR0FBRyxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxrQ0FBa0M7WUFDNUYsUUFBUSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDMUIsSUFBQSx5QkFBZ0IsRUFBQyxLQUFLLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxJQUFJO2dCQUNOLENBQUMsQ0FBQyxrSkFBa0o7U0FDeko7UUFDRDtZQUNFLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLFlBQVk7WUFDbEIsT0FBTyxFQUNMLHFHQUFxRztZQUN2RyxPQUFPLEVBQUUsYUFBYSxJQUFJLE1BQU07WUFDaEMsUUFBUSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDMUIsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMEJBQTBCO1NBQ3ZEO0tBQ0YsQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQTNCVyxRQUFBLDRCQUE0QixnQ0EyQnZDO0FBRUssTUFBTSxpQ0FBaUMsR0FBRyxDQUMvQyxhQUFxQixFQUNyQixjQUFzQixFQUFFLEVBQ3hCLEVBQUUsQ0FBQztJQUNIO1FBQ0UsSUFBSSxFQUFFLE1BQU07UUFDWixJQUFJLEVB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OEIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1FBQ3ZELEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0tBQ3ZDO0lBQ0QsT0FBTyxFQUFFLENBQUM7Q0FDWCxDQUFDO0FBSVcsUUFBQSxzQ0FBc0MsR0FBRztJQUNwRCxJQUFJLEVBQUUsUUFBUTtJQUNkLElBQUksRUFBRSxPQUFPO0lBQ2IsT0FBTyxFQUNMLHNFQUFzRTtJQUN4RSxPQUFPLEVBQUU7UUFDUCxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtRQUNqQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtLQUNyQztJQUNELE9BQU8sRUFBRSxDQUFDO0NBQ1gsQ0FBQztBQUVXLFFBQUEseUNBQXlDLEdBQUc7SUFDdkQsSUFBSSxFQUFFLFFBQVE7SUFDZCxJQUFJLEVBQUUsT0FBTztJQUNiLE9BQU8sRUFDTCw4RkFBOEY7SUFDaEcsT0FBTyxFQUFFO1FBQ1AsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFDL0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7S0FDL0I7SUFDRCxPQUFPLEVBQUUsQ0FBQztDQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vKlxuICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAgXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuXG4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIFxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gIFxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgeyBmcmFtZXdvcmtMaXN0LCBpc1ZhbGlkQnVja2V0TmFtZSwgaXNWYWxpZERvbWFpbk5hbWUsIGlzVmFsaWRHaXRodWJVcmwsIHZhbGlkYXRlTm9MZWFkaW5nVHJhaWxpbmdTbGFzaGVzIH0gZnJvbSBcIi4vaGVscGVyXCI7XG5cbi8vZXhwb3J0IGNvbnN0IGdldEZyYW1ld29ya1NlbGVjdGlvblF1ZXN0aW9ucyA9IChpbml0aWFsVmFsdWU/OiBzdHJpbmcpID0+IHtcblxuZXhwb3J0IGNvbnN0IGdldEdpdGh1YlJlcG9zaXRvcnlRdWVzdGlvbnMgPSAoXG4gIGluaXRpYWxVcmw/OiBzdHJpbmcsXG4gIGluaXRpYWxCcmFuY2g/OiBzdHJpbmdcbikgPT4ge1xuICBjb25zdCBxdWVzdGlvbiA9IFtcbiAgICB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG5hbWU6IFwicmVwb1VybFwiLFxuICAgICAgbWVzc2FnZTogXCJQbGVhc2UgcHJvdmlkZSB5b3VyIEdpdEh1YiByZXBvc2l0b3J5IFVSTFwiLFxuICAgICAgLi4uKGluaXRpYWxVcmwgIT09IHVuZGVmaW5lZCAmJiB7IGluaXRpYWw6IGluaXRpYWxVcmwgfSksIC8vIENvbmRpdGlvbmFsbHkgaW5jbHVkZSAnaW5pdGlhbCdcbiAgICAgIHZhbGlkYXRlOiAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgaXNWYWxpZEdpdGh1YlVybCh2YWx1ZSlcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IFwiR2l0SHViIHJlcG9zaXRvcnkgZm9ybWF0IG11c3QgYmUgaHR0cHM6Ly9naXRodWIuY29tL1VTRVJOQU1FL1JFUE9TSVRPUlkuZ2l0IG9yIGdpdEBnaXRodWIuY29tOlVTRVJOQU1FL1JFUE9TSVRPUlkuZ2l0IGFuZCBjYW4gYmUgYWRkZWQgb25seSBvbmNlXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIG5hbWU6IFwiYnJhbmNoTmFtZVwiLFxuICAgICAgbWVzc2FnZTpcbiAgICAgICAgXCJXaGF0IGlzIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggeW91IHdvdWxkIGxpa2UgdG8gdXNlPyBIaXQgRW50ZXIgdG8gY29uZmlybSBvciBjaGFuZ2UgdGhlIHNlbGVjdGlvbi5cIixcbiAgICAgIGluaXRpYWw6IGluaXRpYWxCcmFuY2ggfHwgXCJtYWluXCIsXG4gICAgICB2YWxpZGF0ZTogKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICAgIHZhbHVlLmxlbmd0aCA+IDAgPyB0cnVlIDogXCJCcmFuY2ggbmFtZSBpcyBtYW5kYXRvcnlcIixcbiAgICB9LFxuICBdO1xuXG4gIHJldHVybiBxdWVzdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTM0J1Y2tldENvbmZpZ3VyYXRpb25RdWVzdGlvbnMgPSAoXG4gIGRlZmF1bHRCdWNrZXQ6IHN0cmluZyxcbiAgZGVmYXVsdFBhdGg6IHN0cmluZyA9IFwiXCJcbikgPT4gW1xuICB7XG4gICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgbmFtZTogXCJzM2J1Y2tldFwiLFxuICAgIC4uLihkZWZhdWx0QnVja2V0ICE9PSB1bmRlZmluZWQgJiYgeyBpbml0aWFsOiBkZWZhdWx0QnVja2V0IH0pLFxuICAgIG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBidWNrZXQgeW91IHdvdWxkIGxpa2UgdG8gdXNlXCIsXG4gICAgdmFsaWRhdGU6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgIGlzVmFsaWRCdWNrZXROYW1lKHZhbHVlKSA/IHRydWUgOiBcIlRoZSBidWNrZXQgbmFtZSBtdXN0IG5vdCBiZSBlbXB0eSwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGJ1Y2tldCBtdXN0IGV4aXN0XCIsXG4gIH0sXG4gIHtcbiAgICB0eXBlOiBcInRleHRcIixcbiAgICBuYW1lOiBcInMzcGF0aFwiLFxuICAgIC4uLihkZWZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmIHsgaW5pdGlhbDogZGVmYXVsdFBhdGggfSksXG4gICAgbWVzc2FnZTpcbiAgICBcIklmIHlvdSB3b3VsZCBsaWtlIHRvIHNwZWNpZnkgYSBwcmVmaXgsIHBsZWFzZSBlbnRlciBpdCBiZWxvdy4gT3RoZXJ3aXNlLCBsZWF2ZSBpdCBibGFua1wiLFxuICAgIHZhbGlkYXRlOiAodmFsdWU6c3RyaW5nKSA9PiB2YWxpZGF0ZU5vTGVhZGluZ1RyYWlsaW5nU2xhc2hlcyh2YWx1ZSkgPyB0cnVlIDogIFwiVGhlIHByZWZpeCBzaG91bGQgbm90IGhhdmUgbGVhZGluZyBvciB0cmFpbGluZyBzbGFzaGVzXCIsXG4gIFxuICB9LFxuXTtcblxuZnVuY3Rpb24gZmluZEluZGV4QnlWYWx1ZShcbiAgb2JqZWN0czogeyB0aXRsZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSxcbiAgdmFsdWU/OiBzdHJpbmdcbikge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9iamVjdHNbaV0udmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGcmFtZXdvcmtTZWxlY3Rpb25RdWVzdGlvbnMgPSAoaW5pdGlhbFZhbHVlPzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gZmluZEluZGV4QnlWYWx1ZShmcmFtZXdvcmtMaXN0KCksIGluaXRpYWxWYWx1ZSk7XG4gIGNvbnN0IHF1ZXN0aW9uID0ge1xuICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgbmFtZTogXCJmcmFtZXdvcmtcIixcbiAgICBtZXNzYWdlOlxuICAgICAgXCJXaGljaCBmcmFtZXdvcmsgZGlkIHlvdSB1c2UgZm9yIHdlYnNpdGUgY29uc3RydWN0aW9uPyBQcmVzcyBFbnRlciB0byBjb25maXJtIG9yIGNoYW5nZSB0aGUgc2VsZWN0aW9uLlwiLFxuICAgIGNob2ljZXM6IGZyYW1ld29ya0xpc3QoKSxcbiAgICBpbml0aWFsOiBpbmRleCxcbiAgfTtcbiAgcmV0dXJuIFtxdWVzdGlvbl07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RG9tYWluTmFtZVF1ZXN0aW9uID0gKGRlZmF1bHREb21haW5OYW1lPzogc3RyaW5nKSA9PiBbXG4gIHtcbiAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgIG5hbWU6IFwidmFsdWVcIixcbiAgICBtZXNzYWdlOiBcIkRvIHlvdSBvd24gYSBkb21haW4gbmFtZSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIHVzZT9cIixcbiAgICBjaG9pY2VzOiBbXG4gICAgICB7IHRpdGxlOiBcIlllc1wiLCB2YWx1ZTogXCJ5ZXNcIiB9LFxuICAgICAgeyB0aXRsZTogXCJOb1wiLCB2YWx1ZTogXCJub1wiIH0sXG4gICAgXSxcbiAgICBpbml0aWFsOiBkZWZhdWx0RG9tYWluTmFtZSA/IDAgOiAxLFxuICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbnRpbnVlQ29uZmlybWF0aW9uUXVlc3Rpb24gPSB7XG4gIHR5cGU6IFwidGV4dFwiLFxuICBuYW1lOiBcInZhbHVlXCIsXG4gIG1lc3NhZ2U6IFwiUGxlYXNlIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gYW5kIHR5cGUgJ29rJyB0byBjb250aW51ZSBcIixcbiAgdmFsaWRhdGU6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gXCJva1wiID8gdHJ1ZSA6IFwiWW91IGhhdmUgdG8gdHlwZSBPSyB0byBjb250aW51ZVwiLFxufTtcblxuZXhwb3J0IGNvbnN0IGRvbWFpbk5hbWVEZXRhaWxzUXVlc3Rpb25zID0gKGRlZmF1bHREb21haW5OYW1lPzogc3RyaW5nKSA9PiBbXG4gIHtcbiAgICB0eXBlOiBcInRleHRcIixcbiAgICBuYW1lOiBcImRvbWFpbk5hbWVcIixcbiAgICAuLi4oZGVmYXVsdERvbWFpbk5hbWUgIT09IHVuZGVmaW5lZCAmJiB7IGluaXRpYWw6IGRlZmF1bHREb21haW5OYW1lIH0pLFxuXG4gICAgbWVzc2FnZTpcbiAgICAgIFwiUGxlYXNlIHByb3ZpZGUgeW91ciBkb21haW4gbmFtZSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6IHd3dy5teWRvbWFpbm5hbWUuY29tIG9yIG15ZG9tYWlubmFtZS5jb20gP1wiLFxuICAgIHZhbGlkYXRlOiAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgIGlzVmFsaWREb21haW5OYW1lKHZhbHVlKVxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBcIkRvbWFpbiBuYW1lIGZvcm1hdCBtdXN0IGJlIHd3dy5teWRvbWFpbm5hbWUuY29tIG9yIG15ZG9tYWlubmFtZS5jb21cIixcbiAgfSxcbiAge1xuICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgbmFtZTogXCJyZWdpc3RyYXJcIixcbiAgICBtZXNzYWdlOiBcIldoZXJlIGlzIHRoZSBhdXRob3JpdGF0aXZlIEROUyBzZXJ2ZXIgb2YgdGhpcyBkb21haW4/XCIsXG4gICAgY2hvaWNlczogW1xuICAgICAgeyB0aXRsZTogXCJFbHNld2hlcmVcIiwgdmFsdWU6IFwiYW5vdGhlclwiIH0sXG4gICAgICB7IHRpdGxlOiBcIlJvdXRlIDUzIGluIHRoaXMgQVdTIEFjY291bnRcIiwgdmFsdWU6IFwiY3VycmVudFwiIH0sXG4gICAgXSxcbiAgICBpbml0aWFsOiAxLFxuICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IGhvc3RlZFpvbmVJZFF1ZXN0aW9uID0gKGRlZmF1bHRIb3N0ZWRab25lSWQ/OiBzdHJpbmcpID0+IFtcbiAge1xuICAgIHR5cGU6IFwidGV4dFwiLFxuICAgIG5hbWU6IFwiaG9zdGVkWm9uZUlkXCIsXG4gICAgLi4uKGRlZmF1bHRIb3N0ZWRab25lSWQgIT09IHVuZGVmaW5lZCAmJiB7IGluaXRpYWw6IGRlZmF1bHRIb3N0ZWRab25lSWQgfSksXG4gICAgbWVzc2FnZTogXCJQbGVhc2UgdHlwZSB0aGUgaG9zdGVkIHpvbmUgSURcIixcbiAgICB2YWxpZGF0ZTogKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICB2YWx1ZS5sZW5ndGggPiAwID8gdHJ1ZSA6IFwiVGhlIGhvc3RlZCB6b25lIG11c3Qgbm90IGJlIGVtcHR5XCIsXG4gIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgY2xvdWRGcm9udEFzc29jaWF0aW9uUXVlc3Rpb24gPSB7XG4gIHR5cGU6IFwic2VsZWN0XCIsXG4gIG5hbWU6IFwidmFsdWVcIixcbiAgbWVzc2FnZTpcbiAgICBcIldvdWxkIHlvdSBsaWtlIHRvIGFzc29jaWF0ZSB0aGUgZG9tYWluIG5hbWUgdG8gdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIGF1dG9tYXRpY2FsbHkgbm93LCBvciB3b3VsZCB5b3UgcHJlZmVyIHRvIGRvIGl0IGxhdGVyP1wiLFxuICBjaG9pY2VzOiBbXG4gICAgeyB0aXRsZTogXCJBc3NvY2lhdGUgYXV0b21hdGljYWxseSBub3cuXCIsIHZhbHVlOiBcInllc1wiIH0sXG4gICAgeyB0aXRsZTogXCJEbyBpdCBsYXRlci5cIiwgdmFsdWU6IFwibm9cIiB9LFxuICBdLFxuICBpbml0aWFsOiAwLFxufTtcblxuXG5cbmV4cG9ydCBjb25zdCBtYW51YWxHaXRIdWJDb25maWdDb25maXJtYXRpb25RdWVzdGlvbiA9IHtcbiAgdHlwZTogXCJzZWxlY3RcIixcbiAgbmFtZTogXCJ2YWx1ZVwiLFxuICBtZXNzYWdlOlxuICAgIFwiV291bGQgeW91IGxpa2UgdG8gbWFudWFsbHkgZW50ZXIgeW91ciBHaXRIdWIgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbj9cIixcbiAgY2hvaWNlczogW1xuICAgIHsgdGl0bGU6IFwiWWVzXCIsIHZhbHVlOiBcIm1hbnVhbFwiIH0sXG4gICAgeyB0aXRsZTogXCJObywgZXhpdFwiLCB2YWx1ZTogXCJleGl0XCIgfSxcbiAgXSxcbiAgaW5pdGlhbDogMCxcbn07XG5cbmV4cG9ydCBjb25zdCBob3N0aW5nSW5mcmFzdHJ1Y3R1cmVEZWxldGlvbkNvbmZpcm1hdGlvbiA9IHtcbiAgdHlwZTogXCJzZWxlY3RcIixcbiAgbmFtZTogXCJ2YWx1ZVwiLFxuICBtZXNzYWdlOlxuICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbXBsZXRlbHkgcmVtb3ZlIHRoZSBob3N0aW5nIGluZnJhc3RydWN0dXJlIGZyb20geW91ciBBV1MgYWNjb3VudD9cIixcbiAgY2hvaWNlczogW1xuICAgIHsgdGl0bGU6IFwiWWVzXCIsIHZhbHVlOiBcInNhdmVcIiB9LFxuICAgIHsgdGl0bGU6IFwiTm9cIiwgdmFsdWU6IFwiZXhpdFwiIH0sXG4gIF0sXG4gIGluaXRpYWw6IDEsXG59O1xuXG4iXX0=