hivessh
Version:
HiveSsh is an innovative library designed to streamline SSH2 connections and simplify task execution on Linux servers.
135 lines • 17.9 kB
JavaScript
import { filterEmpty, trimAll } from "../../utils/base.js";
/**
* @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions
*/
export const dnfEnv = {
LANG: "en_US.UTF-8"
};
/**
* @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions
*/
export const ignoredErrMsgs = [
"transaction completed",
"base",
"cleaning up",
"warning",
];
/**
* @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions
* @param data
* @returns
*/
export const ignoreMessageFilter = (data) => {
let data2 = trimAll(data).toLowerCase();
for (const msg of ignoredErrMsgs) {
if (data2.includes(msg)) {
return undefined;
}
}
return data;
};
/**
* @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions
*/
export const parseDnfList = (exit) => {
const trimmedLines = filterEmpty(exit.out.split("\n"));
const packages = trimmedLines.slice(1).map((line) => line.split(/\s+/)[0]);
return packages;
};
/**
* @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions
* @param exit
* @returns
*/
export const parseDnfDescription = (exit) => {
const infoLines = exit.out.split("\n").filter((line) => line.includes(":"));
const fields = {};
for (const infoLine of infoLines) {
const [key, value] = infoLine.trim().split(":");
fields[key.toLowerCase()] = value.trim();
}
if (!fields.hasOwnProperty("name") || !fields.hasOwnProperty("version")) {
throw new Error("Required fields 'name' or 'version' missing in DNF package info");
}
return {
name: fields.name,
version: fields.version,
description: fields.description || "",
fields,
};
};
/**
* @deprecated The AbstractPackageManager (APM) feature will be removed in the future to more focus on the core problems and solutions
* @param sshHost
* @param cmdTimeoutMillis
* @returns
*/
export const initDnfApm = (sshHost, cmdTimeoutMillis) => {
return {
type: "dnf",
sshHost,
//### cache
updateCache: async () => {
return sshHost.exec('dnf makecache', {
sudo: true,
timeoutMillis: cmdTimeoutMillis,
mapErrOut: ignoreMessageFilter,
env: dnfEnv,
}).then();
},
clearCache: async () => {
return sshHost.exec('dnf clean all', {
sudo: true,
timeoutMillis: cmdTimeoutMillis,
mapErrOut: ignoreMessageFilter,
env: dnfEnv,
}).then();
},
//### edit
install: (...pkgs) => sshHost.exec("dnf install -y " + pkgs.join(" "), {
sudo: true,
timeoutMillis: cmdTimeoutMillis,
mapErrOut: ignoreMessageFilter,
env: dnfEnv,
}).then(),
uninstall: (...pkgs) => sshHost.exec("dnf remove - y " + pkgs.join(" "), {
sudo: true,
timeoutMillis: cmdTimeoutMillis,
mapErrOut: ignoreMessageFilter,
env: dnfEnv,
}).then(),
//### maintenance
upgradeAll: () => sshHost.exec("dnf upgrade -y", {
sudo: true,
timeoutMillis: cmdTimeoutMillis,
mapErrOut: ignoreMessageFilter,
env: dnfEnv,
}).then(),
uninstallUnused: () => sshHost.exec("dnf autoremove -y", {
sudo: true,
timeoutMillis: cmdTimeoutMillis,
mapErrOut: ignoreMessageFilter,
env: dnfEnv,
}).then(),
//### get
list: () => sshHost.exec("dnf list installed", {
sudo: true,
timeoutMillis: cmdTimeoutMillis,
mapErrOut: ignoreMessageFilter,
env: dnfEnv,
}).then(parseDnfList),
upgradable: () => sshHost.exec("dnf list updates", {
sudo: true,
timeoutMillis: cmdTimeoutMillis,
mapErrOut: ignoreMessageFilter,
env: dnfEnv,
}).then(parseDnfList),
describe: (pkg) => sshHost.exec("dnf info ${ pkg }", {
sudo: true,
timeoutMillis: cmdTimeoutMillis,
mapErrOut: ignoreMessageFilter,
env: dnfEnv,
}).then(parseDnfDescription),
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5mLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwbS9pbXBsL2RuZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWEsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBR3JFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHO0lBQ2xCLElBQUksRUFBRSxhQUFhO0NBQ3RCLENBQUE7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBYTtJQUNwQyx1QkFBdUI7SUFDdkIsTUFBTTtJQUNOLGFBQWE7SUFDYixTQUFTO0NBQ1osQ0FBQTtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBcUIsQ0FDakQsSUFBWSxFQUNkLEVBQUU7SUFDQSxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMvQixJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQ3JCLENBQUM7WUFDQyxPQUFPLFNBQVMsQ0FBQTtRQUNwQixDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFBO0FBQ2YsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FDeEIsSUFBb0IsRUFDWixFQUFFO0lBQ1YsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDdkIsQ0FBQTtJQUVELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENB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U0FDZCxDQUVKLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0tBQ2xDLENBQUE7QUFDTCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTc2hDaGFubmVsRXhpdCwgU3RyZWFtRGF0YU1hcHBlciB9IGZyb20gXCIuLi8uLi9Tc2hFeGVjLmpzXCJcbmltcG9ydCB7IFNzaEhvc3QgfSBmcm9tIFwiLi4vLi4vU3NoSG9zdC5qc1wiXG5pbXBvcnQgeyBBd2FpdGFibGUsIGZpbHRlckVtcHR5LCB0cmltQWxsIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Jhc2UuanNcIlxuaW1wb3J0IHsgQWJzdHJhY3RQYWNrYWdlLCBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyLCBBcG1Jbml0IH0gZnJvbSBcIi4uL2FwbS5qc1wiXG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhlIEFic3RyYWN0UGFja2FnZU1hbmFnZXIgKEFQTSkgZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB0byBtb3JlIGZvY3VzIG9uIHRoZSBjb3JlIHByb2JsZW1zIGFuZCBzb2x1dGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRuZkVudiA9IHtcbiAgICBMQU5HOiBcImVuX1VTLlVURi04XCJcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGUgQWJzdHJhY3RQYWNrYWdlTWFuYWdlciAoQVBNKSBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHRvIG1vcmUgZm9jdXMgb24gdGhlIGNvcmUgcHJvYmxlbXMgYW5kIHNvbHV0aW9uc1xuICovXG5leHBvcnQgY29uc3QgaWdub3JlZEVyck1zZ3M6IHN0cmluZ1tdID0gW1xuICAgIFwidHJhbnNhY3Rpb24gY29tcGxldGVkXCIsXG4gICAgXCJiYXNlXCIsXG4gICAgXCJjbGVhbmluZyB1cFwiLFxuICAgIFwid2FybmluZ1wiLFxuXVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFRoZSBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyIChBUE0pIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdG8gbW9yZSBmb2N1cyBvbiB0aGUgY29yZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zXG4gKiBAcGFyYW0gZGF0YSBcbiAqIEByZXR1cm5zIFxuICovXG5leHBvcnQgY29uc3QgaWdub3JlTWVzc2FnZUZpbHRlcjogU3RyZWFtRGF0YU1hcHBlciA9IChcbiAgICBkYXRhOiBzdHJpbmdcbikgPT4ge1xuICAgIGxldCBkYXRhMiA9IHRyaW1BbGwoZGF0YSkudG9Mb3dlckNhc2UoKVxuICAgIGZvciAoY29uc3QgbXNnIG9mIGlnbm9yZWRFcnJNc2dzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGEyLmluY2x1ZGVzKG1zZylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGUgQWJzdHJhY3RQYWNrYWdlTWFuYWdlciAoQVBNKSBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHRvIG1vcmUgZm9jdXMgb24gdGhlIGNvcmUgcHJvYmxlbXMgYW5kIHNvbHV0aW9uc1xuICovXG5leHBvcnQgY29uc3QgcGFyc2VEbmZMaXN0ID0gKFxuICAgIGV4aXQ6IFNzaENoYW5uZWxFeGl0XG4pOiBzdHJpbmdbXSA9PiB7XG4gICAgY29uc3QgdHJpbW1lZExpbmVzID0gZmlsdGVyRW1wdHkoXG4gICAgICAgIGV4aXQub3V0LnNwbGl0KFwiXFxuXCIpXG4gICAgKVxuXG4gICAgY29uc3QgcGFja2FnZXMgPSB0cmltbWVkTGluZXMuc2xpY2UoMSkubWFwKChsaW5lKSA9PiBsaW5lLnNwbGl0KC9cXHMrLylbMF0pXG4gICAgcmV0dXJuIHBhY2thZ2VzXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhlIEFic3RyYWN0UGFja2FnZU1hbmFnZXIgKEFQTSkgZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB0byBtb3JlIGZvY3VzIG9uIHRoZSBjb3JlIHByb2JsZW1zIGFuZCBzb2x1dGlvbnNcbiAqIEBwYXJhbSBleGl0IFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZURuZkRlc2NyaXB0aW9uID0gKFxuICAgIGV4aXQ6IFNzaENoYW5uZWxFeGl0XG4pOiBBYnN0cmFjdFBhY2thZ2UgPT4ge1xuICAgIGNvbnN0IGluZm9MaW5lcyA9IGV4aXQub3V0LnNwbGl0KFwiXFxuXCIpLmZpbHRlcigobGluZSkgPT4gbGluZS5pbmNsdWRlcyhcIjpcIikpXG5cbiAgICBjb25zdCBmaWVsZHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fVxuICAgIGZvciAoY29uc3QgaW5mb0xpbmUgb2YgaW5mb0xpbmVzKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGluZm9MaW5lLnRyaW0oKS5zcGxpdChcIjpcIilcbiAgICAgICAgZmllbGRzW2tleS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlLnRyaW0oKVxuICAgIH1cblxuICAgIGlmICghZmllbGRzLmhhc093blByb3BlcnR5KFwibmFtZVwiKSB8fCAhZmllbGRzLmhhc093blByb3BlcnR5KFwidmVyc2lvblwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlJlcXVpcmVkIGZpZWxkcyAnbmFtZScgb3IgJ3ZlcnNpb24nIG1pc3NpbmcgaW4gRE5GIHBhY2thZ2UgaW5mb1wiXG4gICAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBmaWVsZHMubmFtZSEsXG4gICAgICAgIHZlcnNpb246IGZpZWxkcy52ZXJzaW9uISxcbiAgICAgICAgZGVzY3JpcHRpb246IGZpZWxkcy5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgICBmaWVsZHMsXG4gICAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFRoZSBBYnN0cmFjdFBhY2thZ2VNYW5hZ2VyIChBUE0pIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdG8gbW9yZSBmb2N1cyBvbiB0aGUgY29yZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zXG4gKiBAcGFyYW0gc3NoSG9zdCBcbiAqIEBwYXJhbSBjbWRUaW1lb3V0TWlsbGlzIFxuICogQHJldHVybnMgXG4gKi9cblxuZXhwb3J0IGNvbnN0IGluaXREbmZBcG06IEFwbUluaXQgPSAoXG4gICAgc3NoSG9zdDogU3NoSG9zdCxcbiAgICBjbWRUaW1lb3V0TWlsbGlzPzogbnVtYmVyIHwgdW5kZWZpbmVkLFxuKTogQXdhaXRhYmxlPEFic3RyYWN0UGFja2FnZU1hbmFnZXI+ID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImRuZlwiLFxuICAgICAgICBzc2hIb3N0LFxuXG4gICAgICAgIC8vIyMjIGNhY2hlXG4gICAgICAgIHVwZGF0ZUNhY2hlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3NoSG9zdC5leGVjKFxuICAgICAgICAgICAgICAgICdkbmYgbWFrZWNhY2hlJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZG86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IGNtZFRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIG1hcEVyck91dDogaWdub3JlTWVzc2FnZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgZW52OiBkbmZFbnYsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS50aGVuKClcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJDYWNoZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHNzaEhvc3QuZXhlYyhcbiAgICAgICAgICAgICAgICAnZG5mIGNsZWFuIGFsbCcsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdWRvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBjbWRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICBtYXBFcnJPdXQ6IGlnbm9yZU1lc3NhZ2VGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGVudjogZG5mRW52LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkudGhlbigpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8jIyMgZWRpdFxuICAgICAgICBpbnN0YWxsOiAoLi4ucGtnczogc3RyaW5nW10pID0+XG4gICAgICAgICAgICBzc2hIb3N0LmV4ZWMoXG4gICAgICAgICAgICAgICAgXCJkbmYgaW5zdGFsbCAteSBcIiArIHBrZ3Muam9pbihcIiBcIiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdWRvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBjbWRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICBtYXBFcnJPdXQ6IGlnbm9yZU1lc3NhZ2VGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGVudjogZG5mRW52LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkudGhlbigpLFxuICAgICAgICB1bmluc3RhbGw6ICguLi5wa2dzOiBzdHJpbmdbXSkgPT5cbiAgICAgICAgICAgIHNzaEhvc3QuZXhlYyhcbiAgICAgICAgICAgICAgICBcImRuZiByZW1vdmUgLSB5IFwiICsgcGtncy5qb2luKFwiIFwiKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZG86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IGNtZFRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIG1hcEVyck91dDogaWdub3JlTWVzc2FnZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgZW52OiBkbmZFbnYsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS50aGVuKCksXG5cbiAgICAgICAgLy8jIyMgbWFpbnRlbmFuY2VcbiAgICAgICAgdXBncmFkZUFsbDogKCkgPT5cbiAgICAgICAgICAgIHNzaEhvc3QuZXhlYyhcbiAgICAgICAgICAgICAgICBcImRuZiB1cGdyYWRlIC15XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdWRvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBjbWRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICBtYXBFcnJPdXQ6IGlnbm9yZU1lc3NhZ2VGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGVudjogZG5mRW52LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkudGhlbigpLFxuICAgICAgICB1bmluc3RhbGxVbnVzZWQ6ICgpID0+XG4gICAgICAgICAgICBzc2hIb3N0LmV4ZWMoXG4gICAgICAgICAgICAgICAgXCJkbmYgYXV0b3JlbW92ZSAteVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3VkbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dE1pbGxpczogY21kVGltZW91dE1pbGxpcyxcbiAgICAgICAgICAgICAgICAgICAgbWFwRXJyT3V0OiBpZ25vcmVNZXNzYWdlRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICBlbnY6IGRuZkVudixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApLnRoZW4oKSxcblxuICAgICAgICAvLyMjIyBnZXRcbiAgICAgICAgbGlzdDogKCkgPT5cbiAgICAgICAgICAgIHNzaEhvc3QuZXhlYyhcbiAgICAgICAgICAgICAgICBcImRuZiBsaXN0IGluc3RhbGxlZFwiLFxuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdWRvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0TWlsbGlzOiBjbWRUaW1lb3V0TWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICBtYXBFcnJPdXQ6IGlnbm9yZU1lc3NhZ2VGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGVudjogZG5mRW52LFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKS50aGVuKHBhcnNlRG5mTGlzdCksXG4gICAgICAgIHVwZ3JhZGFibGU6ICgpID0+XG4gICAgICAgICAgICBzc2hIb3N0LmV4ZWMoXG4gICAgICAgICAgICAgICAgXCJkbmYgbGlzdCB1cGRhdGVzXCIsXG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZG86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IGNtZFRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIG1hcEVyck91dDogaWdub3JlTWVzc2FnZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgZW52OiBkbmZFbnYsXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICApLnRoZW4ocGFyc2VEbmZMaXN0KSxcbiAgICAgICAgZGVzY3JpYmU6IChwa2c6IHN0cmluZykgPT5cbiAgICAgICAgICAgIHNzaEhvc3QuZXhlYyhcbiAgICAgICAgICAgICAgICBcImRuZiBpbmZvICR7IHBrZyB9XCIsXG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZG86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRNaWxsaXM6IGNtZFRpbWVvdXRNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIG1hcEVyck91dDogaWdub3JlTWVzc2FnZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgZW52OiBkbmZFbnYsXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICApLnRoZW4ocGFyc2VEbmZEZXNjcmlwdGlvbiksXG4gICAgfVxufSJdfQ==