testcafe
Version:
Automated browser testing for the modern web development stack.
125 lines • 16.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const temp_directory_1 = __importDefault(require("../../../../../utils/temp-directory"));
const promisified_functions_1 = require("../../../../../utils/promisified-functions");
const mime_db_1 = __importDefault(require("mime-db"));
function getMimeTypes() {
const mimeTypes = Object.keys(mime_db_1.default);
return mimeTypes.filter(mimeType => {
// @ts-ignore: Export of the 'mime-db' module has no index signature.
const { extensions } = mime_db_1.default[mimeType];
return extensions && extensions.length;
}).join(',');
}
async function generatePreferences(profileDir, { marionettePort, config }) {
const prefsFileName = path_1.default.join(profileDir, 'user.js');
const mimeTypes = getMimeTypes();
let prefs = [
'user_pref("browser.link.open_newwindow.override.external", 2);',
'user_pref("app.update.enabled", false);',
'user_pref("app.update.auto", false);',
'user_pref("app.update.mode", 0);',
'user_pref("app.update.service.enabled", false);',
'user_pref("browser.shell.checkDefaultBrowser", false);',
'user_pref("browser.usedOnWindows10", true);',
'user_pref("browser.rights.3.shown", true);',
'user_pref("browser.startup.homepage_override.mstone","ignore");',
'user_pref("browser.tabs.warnOnCloseOtherTabs", false);',
'user_pref("browser.tabs.warnOnClose", false);',
'user_pref("browser.sessionstore.resume_from_crash", false);',
`user_pref("browser.helperApps.neverAsk.saveToDisk", "${mimeTypes}");`,
`user_pref("pdfjs.disabled", true);`,
'user_pref("toolkit.telemetry.reportingpolicy.firstRun", false);',
'user_pref("toolkit.telemetry.enabled", false);',
'user_pref("toolkit.telemetry.rejected", true);',
'user_pref("datareporting.healthreport.uploadEnabled", false);',
'user_pref("datareporting.healthreport.service.enabled", false);',
'user_pref("datareporting.healthreport.service.firstRun", false);',
'user_pref("datareporting.policy.dataSubmissionEnabled", false);',
'user_pref("datareporting.policy.dataSubmissionPolicyBypassNotification", true);',
'user_pref("app.shield.optoutstudies.enabled", false);',
'user_pref("extensions.shield-recipe-client.enabled", false);',
'user_pref("extensions.shield-recipe-client.first_run", false);',
'user_pref("extensions.shield-recipe-client.startupExperimentPrefs.browser.newtabpage.activity-stream.enabled", false);',
'user_pref("devtools.toolbox.host", "window");',
'user_pref("devtools.toolbox.previousHost", "bottom");',
'user_pref("signon.rememberSignons", false);',
// NOTE: dom.min_background_timeout_value should be equal to dom.min_timeout_value
'user_pref("dom.min_background_timeout_value", 4);',
'user_pref("dom.timeout.throttling_delay", 0);',
'user_pref("dom.timeout.budget_throttling_max_delay", 0);',
// NOTE: We set the foreground configuration for the background budget throttling parameters
'user_pref("dom.timeout.background_throttling_max_budget", -1);',
'user_pref("dom.timeout.background_budget_regeneration_rate", 1);',
'user_pref("security.enterprise_roots.enabled", true);',
];
if (marionettePort) {
prefs = prefs.concat([
`user_pref("marionette.port", ${marionettePort});`,
'user_pref("marionette.enabled", true);',
]);
}
if (config.disableMultiprocessing) {
prefs = prefs.concat([
'user_pref("browser.tabs.remote.autostart", false);',
'user_pref("browser.tabs.remote.autostart.2", false);',
]);
}
mimeTypes.split(',').forEach(mimeType => {
const type = mimeType.split('/')[1];
prefs.push(`user_pref("browser.download.viewableInternally.typeWasRegistered.${type}", true);`);
});
await (0, promisified_functions_1.writeFile)(prefsFileName, prefs.join('\n'));
}
async function writeHandlersFile(profileDir) {
// NOTE: The definitions of actions are there https://searchfox.org/mozilla-release/source/netwerk/mime/nsIMIMEInfo.idl#115
const handlersFileName = path_1.default.join(profileDir, 'handlers.json');
const handlers = {
defaultHandlersVersion: {
ru: 5,
},
mimeTypes: {
'application/pdf': {
action: 0,
extensions: [
'pdf',
],
},
'text/xml': {
action: 0,
extensions: [
'xml',
'xsl',
'xbl',
],
},
'image/svg+xml': {
action: 0,
extensions: [
'svg',
],
},
'image/webp': {
action: 0,
extensions: [
'webp',
],
},
},
schemes: {},
};
await (0, promisified_functions_1.writeFile)(handlersFileName, JSON.stringify(handlers));
}
async function default_1(runtimeInfo) {
const tmpDir = await temp_directory_1.default.createDirectory('firefox-profile');
await generatePreferences(tmpDir.path, runtimeInfo);
await writeHandlersFile(tmpDir.path);
return tmpDir;
}
exports.default = default_1;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRlbXAtcHJvZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9icm93c2VyL3Byb3ZpZGVyL2J1aWx0LWluL2RlZGljYXRlZC9maXJlZm94L2NyZWF0ZS10ZW1wLXByb2ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBd0I7QUFDeEIseUZBQWdFO0FBQ2hFLHNGQUF1RTtBQUN2RSxzREFBeUI7QUFFekIsU0FBUyxZQUFZO0lBQ2pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQUUsQ0FBQyxDQUFDO0lBRWxDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUMvQixxRUFBcUU7UUFDckUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLGlCQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsT0FBTyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUVELEtBQUssVUFBVSxtQkFBbUIsQ0FBRSxVQUFrQixFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBMkM7SUFDdkgsTUFBTSxhQUFhLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsTUFBTSxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUM7SUFFakMsSUFBSSxLQUFLLEdBQUc7UUFDUixnRUFBZ0U7UUFDaEUseUNBQXlDO1FBQ3pDLHNDQUFzQztRQUN0QyxrQ0FBa0M7UUFDbEMsaURBQWlEO1FBQ2pELHdEQUF3RDtRQUN4RCw2Q0FBNkM7UUFDN0MsNENBQTRDO1FBQzVDLGlFQUFpRTtRQUNqRSx3REFBd0Q7UUFDeEQsK0NBQStDO1FBQy9DLDZEQUE2RDtRQUM3RCx3REFBd0QsU0FBUyxLQUFLO1FBQ3RFLG9DQUFvQztRQUNwQyxpRUFBaUU7UUFDakUsZ0RBQWdEO1FBQ2hELGdEQUFnRDtRQUNoRCwrREFBK0Q7UUFDL0QsaUVBQWlFO1FBQ2pFLGtFQUFrRTtRQUNsRSxpRUFBaUU7UUFDakUsaUZBQWlGO1FBQ2pGLHVEQUF1RDtRQUN2RCw4REFBOEQ7UUFDOUQsZ0VBQWdFO1FBQ2hFLHdIQUF3SDtRQUN4SCwrQ0FBK0M7UUFDL0MsdURBQXVEO1FBQ3ZELDZDQUE2QztRQUM3QyxrRkFBa0Y7UUFDbEYsbURBQW1EO1FBQ25ELCtDQUErQztRQUMvQywwREFBMEQ7UUFDMUQsNEZBQTRGO1FBQzVGLGdFQUFnRTtRQUNoRSxrRUFBa0U7UUFDbEUsdURBQXVEO0tBQzFELENBQUM7SUFFRixJQUFJLGNBQWMsRUFBRTtRQUNoQixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQixnQ0FBZ0MsY0FBYyxJQUFJO1lBQ2xELHdDQUF3QztTQUMzQyxDQUFDLENBQUM7S0FDTjtJQUVELElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFO1FBQy9CLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2pCLG9EQUFvRDtZQUNwRCxzREFBc0Q7U0FDekQsQ0FBQyxDQUFDO0tBQ047SUFFRCxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNwQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBDLEtBQUssQ0FBQyxJQUFJLENBQUMsb0VBQW9FLElBQUksV0FBVyxDQUFDLENBQUM7SUFDcEcsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUEsaUNBQVMsRUFBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxLQUFLLFVBQVUsaUJBQWlCLENBQUUsVUFBa0I7SUFDaEQsMkhBQTJIO0lBQzNILE1BQU0sZ0JBQWdCLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDaEUsTUFBTSxRQUFRLEdBQVc7UUFDckIsc0JBQXNCLEVBQUU7WUFDcEIsRUFBRSxFQUFFLENBQUM7U0FDUjtRQUNELFNBQVMsRUFBRTtZQUNQLGlCQUFpQixFQUFFO2dCQUNmLE1BQU0sRUFBTSxDQUFDO2dCQUNiLFVBQVUsRUFBRTtvQkFDUixLQUFLO2lCQUNSO2FBQ0o7WUFDRCxVQUFVLEVBQUU7Z0JBQ1IsTUFBTSxFQUFNLENBQUM7Z0JBQ2IsVUFBVSxFQUFFO29CQUNSLEtBQUs7b0JBQ0wsS0FBSztvQkFDTCxLQUFLO2lCQUNSO2FBQ0o7WUFDRCxlQUFlLEVBQUU7Z0JBQ2IsTUFBTSxFQUFNLENBQUM7Z0JBQ2IsVUFBVSxFQUFFO29CQUNSLEtBQUs7aUJBQ1I7YUFDSjtZQUNELFlBQVksRUFBRTtnQkFDVixNQUFNLEVBQU0sQ0FBQztnQkFDYixVQUFVLEVBQUU7b0JBQ1IsTUFBTTtpQkFDVDthQUNKO1NBQ0o7UUFDRCxPQUFPLEVBQUUsRUFBRTtLQUNkLENBQUM7SUFFRixNQUFNLElBQUEsaUNBQVMsRUFBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUdjLEtBQUssb0JBQVcsV0FBZ0I7SUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSx3QkFBYSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRCxNQUFNLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVyQyxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBUEQsNEJBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBUZW1wRGlyZWN0b3J5IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWxzL3RlbXAtZGlyZWN0b3J5JztcbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWxzL3Byb21pc2lmaWVkLWZ1bmN0aW9ucyc7XG5pbXBvcnQgZGIgZnJvbSAnbWltZS1kYic7XG5cbmZ1bmN0aW9uIGdldE1pbWVUeXBlcyAoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaW1lVHlwZXMgPSBPYmplY3Qua2V5cyhkYik7XG5cbiAgICByZXR1cm4gbWltZVR5cGVzLmZpbHRlcihtaW1lVHlwZSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IEV4cG9ydCBvZiB0aGUgJ21pbWUtZGInIG1vZHVsZSBoYXMgbm8gaW5kZXggc2lnbmF0dXJlLlxuICAgICAgICBjb25zdCB7IGV4dGVuc2lvbnMgfSA9IGRiW21pbWVUeXBlXTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9ucyAmJiBleHRlbnNpb25zLmxlbmd0aDtcbiAgICB9KS5qb2luKCcsJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlUHJlZmVyZW5jZXMgKHByb2ZpbGVEaXI6IHN0cmluZywgeyBtYXJpb25ldHRlUG9ydCwgY29uZmlnIH06IHsgbWFyaW9uZXR0ZVBvcnQ6IG51bWJlcjsgY29uZmlnOiBhbnkgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByZWZzRmlsZU5hbWUgPSBwYXRoLmpvaW4ocHJvZmlsZURpciwgJ3VzZXIuanMnKTtcbiAgICBjb25zdCBtaW1lVHlwZXMgPSBnZXRNaW1lVHlwZXMoKTtcblxuICAgIGxldCBwcmVmcyA9IFtcbiAgICAgICAgJ3VzZXJfcHJlZihcImJyb3dzZXIubGluay5vcGVuX25ld3dpbmRvdy5vdmVycmlkZS5leHRlcm5hbFwiLCAyKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwiYXBwLnVwZGF0ZS5lbmFibGVkXCIsIGZhbHNlKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwiYXBwLnVwZGF0ZS5hdXRvXCIsIGZhbHNlKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwiYXBwLnVwZGF0ZS5tb2RlXCIsIDApOycsXG4gICAgICAgICd1c2VyX3ByZWYoXCJhcHAudXBkYXRlLnNlcnZpY2UuZW5hYmxlZFwiLCBmYWxzZSk7JyxcbiAgICAgICAgJ3VzZXJfcHJlZihcImJyb3dzZXIuc2hlbGwuY2hlY2tEZWZhdWx0QnJvd3NlclwiLCBmYWxzZSk7JyxcbiAgICAgICAgJ3VzZXJfcHJlZihcImJyb3dzZXIudXNlZE9uV2luZG93czEwXCIsIHRydWUpOycsXG4gICAgICAgICd1c2VyX3ByZWYoXCJicm93c2VyLnJpZ2h0cy4zLnNob3duXCIsIHRydWUpOycsXG4gICAgICAgICd1c2VyX3ByZWYoXCJicm93c2VyLnN0YXJ0dXAuaG9tZXBhZ2Vfb3ZlcnJpZGUubXN0b25lXCIsXCJpZ25vcmVcIik7JyxcbiAgICAgICAgJ3VzZXJfcHJlZihcImJyb3dzZXIudGFicy53YXJuT25DbG9zZU90aGVyVGFic1wiLCBmYWxzZSk7JyxcbiAgICAgICAgJ3VzZXJfcHJlZihcImJyb3dzZXIudGFicy53YXJuT25DbG9zZVwiLCBmYWxzZSk7JyxcbiAgICAgICAgJ3VzZXJfcHJlZihcImJyb3dzZXIuc2Vzc2lvbnN0b3JlLnJlc3VtZV9mcm9tX2NyYXNoXCIsIGZhbHNlKTsnLFxuICAgICAgICBgdXNlcl9wcmVmKFwiYnJvd3Nlci5oZWxwZXJBcHBzLm5ldmVyQXNrLnNhdmVUb0Rpc2tcIiwgXCIke21pbWVUeXBlc31cIik7YCxcbiAgICAgICAgYHVzZXJfcHJlZihcInBkZmpzLmRpc2FibGVkXCIsIHRydWUpO2AsXG4gICAgICAgICd1c2VyX3ByZWYoXCJ0b29sa2l0LnRlbGVtZXRyeS5yZXBvcnRpbmdwb2xpY3kuZmlyc3RSdW5cIiwgZmFsc2UpOycsXG4gICAgICAgICd1c2VyX3ByZWYoXCJ0b29sa2l0LnRlbGVtZXRyeS5lbmFibGVkXCIsIGZhbHNlKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwidG9vbGtpdC50ZWxlbWV0cnkucmVqZWN0ZWRcIiwgdHJ1ZSk7JyxcbiAgICAgICAgJ3VzZXJfcHJlZihcImRhdGFyZXBvcnRpbmcuaGVhbHRocmVwb3J0LnVwbG9hZEVuYWJsZWRcIiwgZmFsc2UpOycsXG4gICAgICAgICd1c2VyX3ByZWYoXCJkYXRhcmVwb3J0aW5nLmhlYWx0aHJlcG9ydC5zZXJ2aWNlLmVuYWJsZWRcIiwgZmFsc2UpOycsXG4gICAgICAgICd1c2VyX3ByZWYoXCJkYXRhcmVwb3J0aW5nLmhlYWx0aHJlcG9ydC5zZXJ2aWNlLmZpcnN0UnVuXCIsIGZhbHNlKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwiZGF0YXJlcG9ydGluZy5wb2xpY3kuZGF0YVN1Ym1pc3Npb25FbmFibGVkXCIsIGZhbHNlKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwiZGF0YXJlcG9ydGluZy5wb2xpY3kuZGF0YVN1Ym1pc3Npb25Qb2xpY3lCeXBhc3NOb3RpZmljYXRpb25cIiwgdHJ1ZSk7JyxcbiAgICAgICAgJ3VzZXJfcHJlZihcImFwcC5zaGllbGQub3B0b3V0c3R1ZGllcy5lbmFibGVkXCIsIGZhbHNlKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwiZXh0ZW5zaW9ucy5zaGllbGQtcmVjaXBlLWNsaWVudC5lbmFibGVkXCIsIGZhbHNlKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwiZXh0ZW5zaW9ucy5zaGllbGQtcmVjaXBlLWNsaWVudC5maXJzdF9ydW5cIiwgZmFsc2UpOycsXG4gICAgICAgICd1c2VyX3ByZWYoXCJleHRlbnNpb25zLnNoaWVsZC1yZWNpcGUtY2xpZW50LnN0YXJ0dXBFeHBlcmltZW50UHJlZnMuYnJvd3Nlci5uZXd0YWJwYWdlLmFjdGl2aXR5LXN0cmVhbS5lbmFibGVkXCIsIGZhbHNlKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwiZGV2dG9vbHMudG9vbGJveC5ob3N0XCIsIFwid2luZG93XCIpOycsXG4gICAgICAgICd1c2VyX3ByZWYoXCJkZXZ0b29scy50b29sYm94LnByZXZpb3VzSG9zdFwiLCBcImJvdHRvbVwiKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwic2lnbm9uLnJlbWVtYmVyU2lnbm9uc1wiLCBmYWxzZSk7JyxcbiAgICAgICAgLy8gTk9URTogZG9tLm1pbl9iYWNrZ3JvdW5kX3RpbWVvdXRfdmFsdWUgc2hvdWxkIGJlIGVxdWFsIHRvIGRvbS5taW5fdGltZW91dF92YWx1ZVxuICAgICAgICAndXNlcl9wcmVmKFwiZG9tLm1pbl9iYWNrZ3JvdW5kX3RpbWVvdXRfdmFsdWVcIiwgNCk7JyxcbiAgICAgICAgJ3VzZXJfcHJlZihcImRvbS50aW1lb3V0LnRocm90dGxpbmdfZGVsYXlcIiwgMCk7JyxcbiAgICAgICAgJ3VzZXJfcHJlZihcImRvbS50aW1lb3V0LmJ1ZGdldF90aHJvdHRsaW5nX21heF9kZWxheVwiLCAwKTsnLFxuICAgICAgICAvLyBOT1RFOiBXZSBzZXQgdGhlIGZvcmVncm91bmQgY29uZmlndXJhdGlvbiBmb3IgdGhlIGJhY2tncm91bmQgYnVkZ2V0IHRocm90dGxpbmcgcGFyYW1ldGVyc1xuICAgICAgICAndXNlcl9wcmVmKFwiZG9tLnRpbWVvdXQuYmFja2dyb3VuZF90aHJvdHRsaW5nX21heF9idWRnZXRcIiwgLTEpOycsXG4gICAgICAgICd1c2VyX3ByZWYoXCJkb20udGltZW91dC5iYWNrZ3JvdW5kX2J1ZGdldF9yZWdlbmVyYXRpb25fcmF0ZVwiLCAxKTsnLFxuICAgICAgICAndXNlcl9wcmVmKFwic2VjdXJpdHkuZW50ZXJwcmlzZV9yb290cy5lbmFibGVkXCIsIHRydWUpOycsXG4gICAgXTtcblxuICAgIGlmIChtYXJpb25ldHRlUG9ydCkge1xuICAgICAgICBwcmVmcyA9IHByZWZzLmNvbmNhdChbXG4gICAgICAgICAgICBgdXNlcl9wcmVmKFwibWFyaW9uZXR0ZS5wb3J0XCIsICR7bWFyaW9uZXR0ZVBvcnR9KTtgLFxuICAgICAgICAgICAgJ3VzZXJfcHJlZihcIm1hcmlvbmV0dGUuZW5hYmxlZFwiLCB0cnVlKTsnLFxuICAgICAgICBdKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmRpc2FibGVNdWx0aXByb2Nlc3NpbmcpIHtcbiAgICAgICAgcHJlZnMgPSBwcmVmcy5jb25jYXQoW1xuICAgICAgICAgICAgJ3VzZXJfcHJlZihcImJyb3dzZXIudGFicy5yZW1vdGUuYXV0b3N0YXJ0XCIsIGZhbHNlKTsnLFxuICAgICAgICAgICAgJ3VzZXJfcHJlZihcImJyb3dzZXIudGFicy5yZW1vdGUuYXV0b3N0YXJ0LjJcIiwgZmFsc2UpOycsXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIG1pbWVUeXBlcy5zcGxpdCgnLCcpLmZvckVhY2gobWltZVR5cGUgPT4ge1xuICAgICAgICBjb25zdCB0eXBlID0gbWltZVR5cGUuc3BsaXQoJy8nKVsxXTtcblxuICAgICAgICBwcmVmcy5wdXNoKGB1c2VyX3ByZWYoXCJicm93c2VyLmRvd25sb2FkLnZpZXdhYmxlSW50ZXJuYWxseS50eXBlV2FzUmVnaXN0ZXJlZC4ke3R5cGV9XCIsIHRydWUpO2ApO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgd3JpdGVGaWxlKHByZWZzRmlsZU5hbWUsIHByZWZzLmpvaW4oJ1xcbicpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVIYW5kbGVyc0ZpbGUgKHByb2ZpbGVEaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE5PVEU6IFRoZSBkZWZpbml0aW9ucyBvZiBhY3Rpb25zIGFyZSB0aGVyZSBodHRwczovL3NlYXJjaGZveC5vcmcvbW96aWxsYS1yZWxlYXNlL3NvdXJjZS9uZXR3ZXJrL21pbWUvbnNJTUlNRUluZm8uaWRsIzExNVxuICAgIGNvbnN0IGhhbmRsZXJzRmlsZU5hbWUgPSBwYXRoLmpvaW4ocHJvZmlsZURpciwgJ2hhbmRsZXJzLmpzb24nKTtcbiAgICBjb25zdCBoYW5kbGVycyAgICAgICAgID0ge1xuICAgICAgICBkZWZhdWx0SGFuZGxlcnNWZXJzaW9uOiB7XG4gICAgICAgICAgICBydTogNSxcbiAgICAgICAgfSxcbiAgICAgICAgbWltZVR5cGVzOiB7XG4gICAgICAgICAgICAnYXBwbGljYXRpb24vcGRmJzoge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogICAgIDAsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uczogW1xuICAgICAgICAgICAgICAgICAgICAncGRmJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICd0ZXh0L3htbCc6IHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICAgICAwLFxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ3htbCcsXG4gICAgICAgICAgICAgICAgICAgICd4c2wnLFxuICAgICAgICAgICAgICAgICAgICAneGJsJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdpbWFnZS9zdmcreG1sJzoge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogICAgIDAsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uczogW1xuICAgICAgICAgICAgICAgICAgICAnc3ZnJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdpbWFnZS93ZWJwJzoge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogICAgIDAsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uczogW1xuICAgICAgICAgICAgICAgICAgICAnd2VicCcsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNjaGVtZXM6IHt9LFxuICAgIH07XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoaGFuZGxlcnNGaWxlTmFtZSwgSlNPTi5zdHJpbmdpZnkoaGFuZGxlcnMpKTtcbn1cblxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAocnVudGltZUluZm86IGFueSk6IFByb21pc2U8VGVtcERpcmVjdG9yeT4ge1xuICAgIGNvbnN0IHRtcERpciA9IGF3YWl0IFRlbXBEaXJlY3RvcnkuY3JlYXRlRGlyZWN0b3J5KCdmaXJlZm94LXByb2ZpbGUnKTtcblxuICAgIGF3YWl0IGdlbmVyYXRlUHJlZmVyZW5jZXModG1wRGlyLnBhdGgsIHJ1bnRpbWVJbmZvKTtcbiAgICBhd2FpdCB3cml0ZUhhbmRsZXJzRmlsZSh0bXBEaXIucGF0aCk7XG5cbiAgICByZXR1cm4gdG1wRGlyO1xufVxuIl19