@decaf-ts/fabric-weaver
Version:
template for ts projects
119 lines • 13.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FabricOSNAdminCommandBuilder = void 0;
const logging_1 = require("@decaf-ts/logging");
const fabric_binaries_1 = require("../constants/fabric-binaries.cjs");
const fabric_orderer_1 = require("../constants/fabric-orderer.cjs");
const child_process_1 = require("../../utils/child-process.cjs");
class FabricOSNAdminCommandBuilder {
constructor(logger) {
this.binName = fabric_binaries_1.FabricBinaries.OSNADMIN;
this.baseCommand = fabric_orderer_1.OSN_ADMIN_BASE_COMMAND;
this.command = fabric_orderer_1.OSN_ADMIN_SUBCOMMANDS.JOIN;
this.args = [];
if (!logger)
this.log = logging_1.Logging.for(FabricOSNAdminCommandBuilder);
else
this.log = logger.for(FabricOSNAdminCommandBuilder.name);
}
setCommand(command) {
if (command !== undefined) {
this.log.debug(`Setting command to ${command}`);
this.command = command;
}
return this;
}
setHelp(show) {
if (show !== undefined && show === true) {
this.log.debug(`Setting help flag: ${show}`);
this.args.push("--help");
}
return this;
}
setOrdererAddress(address) {
if (address !== undefined) {
this.log.debug(`Setting orderer address: ${address}`);
this.args.push(`--orderer-address=${address}`);
}
return this;
}
setCAFile(caFile) {
if (caFile !== undefined) {
this.log.debug(`Setting CA file: ${caFile}`);
this.args.push(`--ca-file=${caFile}`);
}
return this;
}
setClientCert(clientCert) {
if (clientCert !== undefined) {
this.log.debug(`Setting client cert: ${clientCert}`);
this.args.push(`--client-cert=${clientCert}`);
}
return this;
}
setClientKey(clientKey) {
if (clientKey !== undefined) {
this.log.debug(`Setting client key: ${clientKey}`);
this.args.push(`--client-key=${clientKey}`);
}
return this;
}
setNoStatus(noStatus) {
if (noStatus !== undefined && noStatus === true) {
this.log.debug(`Setting no-status to ${noStatus}`);
this.args.push("--no-status");
}
return this;
}
setChannelID(channelID) {
if (channelID !== undefined) {
this.log.debug(`Setting channel ID to ${channelID}`);
this.args.push(`--channelID=${channelID}`);
}
return this;
}
setConfigBlock(configBlock) {
if (configBlock !== undefined) {
this.log.debug(`Setting config block to ${configBlock}`);
this.args.push(`--config-block=${configBlock}`);
}
return this;
}
build() {
const command = [
this.getBinary(),
this.getBaseCommand(),
this.getCommand(),
...[...new Set(this.args)],
].join(" ");
this.log.debug(`Built command: ${command}`);
return command;
}
getBaseCommand() {
return this.baseCommand;
}
getCommand() {
return this.command;
}
getBinary() {
return this.binName;
}
getArgs() {
return [...new Set(this.args)];
}
async execute() {
const bin = this.getBinary();
const argz = [this.getBaseCommand(), this.getCommand(), ...this.getArgs()];
try {
// const regex = /\[\s*INFO\s*\] Listening on http/;
// can be used as a promise but to lock the logs running as execsync
await (0, child_process_1.runCommand)(bin, argz);
}
catch (error) {
this.log.error(`Error: Failed to execute the command: ${error}`);
process.exit(1);
}
}
}
exports.FabricOSNAdminCommandBuilder = FabricOSNAdminCommandBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmljLW9zbi1hZG1pbi1jb21tYW5kLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmFicmljL29yZGVyZXIvZmFicmljLW9zbi1hZG1pbi1jb21tYW5kLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBQW9EO0FBQ3BELGtFQUE4RDtBQUM5RCxnRUFHcUM7QUFDckMsNkRBQXVEO0FBRXZELE1BQWEsNEJBQTRCO0lBU3ZDLFlBQVksTUFBZTtRQU5uQixZQUFPLEdBQW1CLGdDQUFjLENBQUMsUUFBUSxDQUFDO1FBQ2xELGdCQUFXLEdBQUcsdUNBQXNCLENBQUM7UUFDckMsWUFBTyxHQUEwQixzQ0FBcUIsQ0FBQyxJQUFJLENBQUM7UUFFNUQsU0FBSSxHQUFhLEVBQUUsQ0FBQztRQUcxQixJQUFJLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsaUJBQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQzs7WUFDN0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBK0I7UUFDeEMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDekIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFjO1FBQ3BCLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDLENBQUM7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b20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgRmFicmljQmluYXJpZXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzL2ZhYnJpYy1iaW5hcmllc1wiO1xuaW1wb3J0IHtcbiAgT1NOX0FETUlOX0JBU0VfQ09NTUFORCxcbiAgT1NOX0FETUlOX1NVQkNPTU1BTkRTLFxufSBmcm9tIFwiLi4vY29uc3RhbnRzL2ZhYnJpYy1vcmRlcmVyXCI7XG5pbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NoaWxkLXByb2Nlc3NcIjtcblxuZXhwb3J0IGNsYXNzIEZhYnJpY09TTkFkbWluQ29tbWFuZEJ1aWxkZXIge1xuICBwcml2YXRlIGxvZzogTG9nZ2VyO1xuXG4gIHByaXZhdGUgYmluTmFtZTogRmFicmljQmluYXJpZXMgPSBGYWJyaWNCaW5hcmllcy5PU05BRE1JTjtcbiAgcHJpdmF0ZSBiYXNlQ29tbWFuZCA9IE9TTl9BRE1JTl9CQVNFX0NPTU1BTkQ7XG4gIHByaXZhdGUgY29tbWFuZDogT1NOX0FETUlOX1NVQkNPTU1BTkRTID0gT1NOX0FETUlOX1NVQkNPTU1BTkRTLkpPSU47XG5cbiAgcHJpdmF0ZSBhcmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGxvZ2dlcj86IExvZ2dlcikge1xuICAgIGlmICghbG9nZ2VyKSB0aGlzLmxvZyA9IExvZ2dpbmcuZm9yKEZhYnJpY09TTkFkbWluQ29tbWFuZEJ1aWxkZXIpO1xuICAgIGVsc2UgdGhpcy5sb2cgPSBsb2dnZXIuZm9yKEZhYnJpY09TTkFkbWluQ29tbWFuZEJ1aWxkZXIubmFtZSk7XG4gIH1cblxuICBzZXRDb21tYW5kKGNvbW1hbmQ/OiBPU05fQURNSU5fU1VCQ09NTUFORFMpOiB0aGlzIHtcbiAgICBpZiAoY29tbWFuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBjb21tYW5kIHRvICR7Y29tbWFuZH1gKTtcbiAgICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRIZWxwKHNob3c/OiBib29sZWFuKTogdGhpcyB7XG4gICAgaWYgKHNob3cgIT09IHVuZGVmaW5lZCAmJiBzaG93ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBoZWxwIGZsYWc6ICR7c2hvd31gKTtcbiAgICAgIHRoaXMuYXJncy5wdXNoKFwiLS1oZWxwXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldE9yZGVyZXJBZGRyZXNzKGFkZHJlc3M/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoYWRkcmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBvcmRlcmVyIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICAgIHRoaXMuYXJncy5wdXNoKGAtLW9yZGVyZXItYWRkcmVzcz0ke2FkZHJlc3N9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0Q0FGaWxlKGNhRmlsZT86IHN0cmluZyk6IHRoaXMge1xuICAgIGlmIChjYUZpbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgQ0EgZmlsZTogJHtjYUZpbGV9YCk7XG4gICAgICB0aGlzLmFyZ3MucHVzaChgLS1jYS1maWxlPSR7Y2FGaWxlfWApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldENsaWVudENlcnQoY2xpZW50Q2VydD86IHN0cmluZyk6IHRoaXMge1xuICAgIGlmIChjbGllbnRDZXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTZXR0aW5nIGNsaWVudCBjZXJ0OiAke2NsaWVudENlcnR9YCk7XG4gICAgICB0aGlzLmFyZ3MucHVzaChgLS1jbGllbnQtY2VydD0ke2NsaWVudENlcnR9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0Q2xpZW50S2V5KGNsaWVudEtleT86IHN0cmluZyk6IHRoaXMge1xuICAgIGlmIChjbGllbnRLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgY2xpZW50IGtleTogJHtjbGllbnRLZXl9YCk7XG4gICAgICB0aGlzLmFyZ3MucHVzaChgLS1jbGllbnQta2V5PSR7Y2xpZW50S2V5fWApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldE5vU3RhdHVzKG5vU3RhdHVzPzogYm9vbGVhbik6IHRoaXMge1xuICAgIGlmIChub1N0YXR1cyAhPT0gdW5kZWZpbmVkICYmIG5vU3RhdHVzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBuby1zdGF0dXMgdG8gJHtub1N0YXR1c31gKTtcbiAgICAgIHRoaXMuYXJncy5wdXNoKFwiLS1uby1zdGF0dXNcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0Q2hhbm5lbElEKGNoYW5uZWxJRD86IHN0cmluZyk6IHRoaXMge1xuICAgIGlmIChjaGFubmVsSUQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgY2hhbm5lbCBJRCB0byAke2NoYW5uZWxJRH1gKTtcbiAgICAgIHRoaXMuYXJncy5wdXNoKGAtLWNoYW5uZWxJRD0ke2NoYW5uZWxJRH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRDb25maWdCbG9jayhjb25maWdCbG9jaz86IHN0cmluZyk6IHRoaXMge1xuICAgIGlmIChjb25maWdCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBjb25maWcgYmxvY2sgdG8gJHtjb25maWdCbG9ja31gKTtcbiAgICAgIHRoaXMuYXJncy5wdXNoKGAtLWNvbmZpZy1ibG9jaz0ke2NvbmZpZ0Jsb2NrfWApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGJ1aWxkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tbWFuZDogc3RyaW5nID0gW1xuICAgICAgdGhpcy5nZXRCaW5hcnkoKSxcbiAgICAgIHRoaXMuZ2V0QmFzZUNvbW1hbmQoKSxcbiAgICAgIHRoaXMuZ2V0Q29tbWFuZCgpLFxuICAgICAgLi4uWy4uLm5ldyBTZXQodGhpcy5hcmdzKV0sXG4gICAgXS5qb2luKFwiIFwiKTtcblxuICAgIHRoaXMubG9nLmRlYnVnKGBCdWlsdCBjb21tYW5kOiAke2NvbW1hbmR9YCk7XG4gICAgcmV0dXJuIGNvbW1hbmQ7XG4gIH1cblxuICBnZXRCYXNlQ29tbWFuZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VDb21tYW5kO1xuICB9XG5cbiAgZ2V0Q29tbWFuZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQ7XG4gIH1cblxuICBnZXRCaW5hcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iaW5OYW1lO1xuICB9XG5cbiAgZ2V0QXJncygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KHRoaXMuYXJncyldO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBiaW4gPSB0aGlzLmdldEJpbmFyeSgpO1xuICAgIGNvbnN0IGFyZ3ogPSBbdGhpcy5nZXRCYXNlQ29tbWFuZCgpLCB0aGlzLmdldENvbW1hbmQoKSwgLi4udGhpcy5nZXRBcmdzKCldO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGNvbnN0IHJlZ2V4ID0gL1xcW1xccypJTkZPXFxzKlxcXSBMaXN0ZW5pbmcgb24gaHR0cC87XG4gICAgICAvLyBjYW4gYmUgdXNlZCBhcyBhIHByb21pc2UgYnV0IHRvIGxvY2sgdGhlIGxvZ3MgcnVubmluZyBhcyBleGVjc3luY1xuICAgICAgYXdhaXQgcnVuQ29tbWFuZChiaW4sIGFyZ3opO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihgRXJyb3I6IEZhaWxlZCB0byBleGVjdXRlIHRoZSBjb21tYW5kOiAke2Vycm9yfWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxufVxuIl19