@broadcom/endevor-for-zowe-cli
Version:
Endevor Plug-in for Zowe CLI
291 lines • 25.8 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EndevorRestUtils = void 0;
const imperative_1 = require("@zowe/imperative");
const index_1 = require("../index");
const fs = require("fs");
const path = require("path");
class EndevorRestUtils {
static setInstance(args) {
const requestInstance = args.instance;
if (requestInstance == null) {
throw new imperative_1.ImperativeError({
msg: "Missing arguments or location profile specification for instance"
});
}
return requestInstance;
}
static setupEndevorSession(args_1) {
return __awaiter(this, arguments, void 0, function* (args, doPrompting = true) {
var _a, _b;
let basePath = (_a = args.basePath) !== null && _a !== void 0 ? _a : index_1.ApiConstants.BASE_PATH;
if (basePath.startsWith("/"))
basePath = basePath.substring(1, basePath.length);
if (basePath.endsWith("/"))
basePath = basePath.substring(0, basePath.length - 1);
let sessCfg = {
hostname: args.host,
port: args.port,
rejectUnauthorized: args.rejectUnauthorized,
basePath,
protocol: (_b = args.protocol) !== null && _b !== void 0 ? _b : "https"
};
if (args.user && args.password) {
sessCfg.user = args.user;
sessCfg.password = args.password;
sessCfg.type = imperative_1.SessConstants.AUTH_TYPE_BASIC;
}
else if (args.tokenType && args.tokenValue) {
sessCfg.type = imperative_1.SessConstants.AUTH_TYPE_TOKEN;
sessCfg.tokenType = args.tokenType;
sessCfg.tokenValue = args.tokenValue;
}
sessCfg = yield imperative_1.ConnectionPropsForSessCfg.addPropsOrPrompt(sessCfg, args, {
doPrompting
});
const errorStack = [];
if (sessCfg.hostname == null) {
errorStack.push("host");
}
if (sessCfg.port == null) {
errorStack.push("port");
}
if (sessCfg.user == null && sessCfg.password == null && sessCfg.tokenType == null && sessCfg.tokenValue == null) {
errorStack.push("credentials");
}
if (errorStack.length > 0) {
throw new imperative_1.ImperativeError({
msg: "Missing specification for " + errorStack.join(", ")
});
}
return new imperative_1.Session(sessCfg);
});
}
static setupEndevorSessionWithoutCredential(args) {
var _a, _b;
const sessionHostname = args.host;
const sessionPort = args.port;
const sessionProtocol = args.protocol;
const sessionRejectUnauthorized = (_a = args["reject-unauthorized"]) !== null && _a !== void 0 ? _a : false;
let sessionBasePath = (_b = args["base-path"]) !== null && _b !== void 0 ? _b : index_1.ApiConstants.BASE_PATH;
const errorStack = [];
if (sessionHostname == null) {
errorStack.push("host");
}
if (sessionPort == null) {
errorStack.push("port");
}
if (errorStack.length > 0) {
throw new imperative_1.ImperativeError({
msg: "Missing specification for " + errorStack.join(", ")
});
}
if (sessionBasePath.startsWith("/"))
sessionBasePath = sessionBasePath.substring(1, sessionBasePath.length);
if (sessionBasePath.endsWith("/"))
sessionBasePath = sessionBasePath.substring(0, sessionBasePath.length - 1);
return new imperative_1.Session({
hostname: sessionHostname,
port: Number(sessionPort),
protocol: sessionProtocol,
rejectUnauthorized: sessionRejectUnauthorized,
basePath: sessionBasePath
});
}
static writeConsoleOutput(session, instance, reportURIs, isWriteReport, logStack, reportFileName, reportDir, suppressInfo, appendToFile) {
return __awaiter(this, void 0, void 0, function* () {
let reports = "";
const reportResult = {};
const reportIds = Object.keys(reportURIs);
if (reportIds.length > 0) {
yield Promise.all(reportIds.map((reportId) => __awaiter(this, void 0, void 0, function* () {
const reportURI = reportURIs[reportId];
if (reportURI != null)
reportResult[reportId] = yield index_1.EndevorRestClient.getReport(session, instance, reportURI);
})));
for (const repId of reportIds) {
const title = (reports.length > 0 ? "\n" : "") + `//\n// ${repId} - url: ${reportURIs[repId]}\n//\n\n`;
reports = reports.concat(title, reportResult[repId]);
}
if (isWriteReport) {
const now = new Date();
if (reportFileName == null || reportFileName == undefined) {
if (reportDir == null || reportDir == undefined) {
reportDir = ".";
}
if (!fs.existsSync(reportDir)) {
fs.mkdirSync(reportDir);
}
if (!reportDir.endsWith("/") && !reportDir.endsWith("\\")) {
reportDir = reportDir + "/";
}
reportFileName =
reportDir +
index_1.ApiConstants.REPORT_FILE_NAME_PREFIX +
index_1.EndevorUtils.formatDate(now, false) +
"-" +
index_1.EndevorUtils.formatTime(now, true, "") +
".txt";
}
else {
if (path.isAbsolute(reportFileName)) {
if (!(reportDir == null || reportDir == undefined)) {
logStack.push(`[WARN] Report file defined using absolute path (${reportFileName}), report directory parameter ignored.`);
}
}
else {
if (!(reportDir == null || reportDir == undefined)) {
if (!fs.existsSync(reportDir)) {
fs.mkdirSync(reportDir);
}
if (!reportDir.endsWith("/") && !reportDir.endsWith("\\")) {
reportDir = reportDir + "/";
}
reportFileName = reportDir + reportFileName;
}
}
}
if (appendToFile == null || !appendToFile) {
index_1.EndevorUtils.generalWriteFile(reportFileName, reports);
}
else {
index_1.EndevorUtils.generalAppendFile(reportFileName, reports);
}
if (suppressInfo == null || !suppressInfo) {
logStack.push(`[INFO] Endevor reports written in ${reportFileName}`);
}
}
}
return reports;
});
}
static isThisV1(session) {
var _a;
return ((_a = session.ISession.basePath) === null || _a === void 0 ? void 0 : _a.match(/\/rest\/?$|\/api\/v1\/?$/)) != null;
}
static failIfUsingV1(session) {
if (EndevorRestUtils.isThisV1(session)) {
throw new imperative_1.ImperativeError({
msg: "Endevor REST API v1 Not Supported",
errorCode: "1",
additionalDetails: "base-path '" +
session.ISession.basePath +
"' points to version 1 of the Endevor REST API, please update the base-path to use /api/v2 ."
});
}
}
static isThisApiMl(session) {
var _a;
return !((_a = session.ISession.basePath) === null || _a === void 0 ? void 0 : _a.includes("EndevorService"));
}
static getHeaderLinks(resHeader) {
const links = resHeader === null || resHeader === void 0 ? void 0 : resHeader.link;
const retLinks = {};
if (links != null) {
links.split(", ").forEach((link) => {
const m = link.match(/<?([^>]*)>(.*)rel="(.*)".*/);
if (m != null) {
const url = m[1];
const rel = m[3];
retLinks[rel] = url;
}
});
}
return retLinks;
}
static queryParameterString(resource, payload) {
if (payload == null) {
return resource;
}
const query = [];
for (const key of Object.keys(payload)) {
if (payload[key]) {
if (key === "status") {
const statusStr = payload[key];
if (statusStr.search(",")) {
const statusArray = statusStr.split(",");
statusArray.forEach((status) => {
query.push(`status=${status.trim()}`);
});
}
else {
query.push(`status=${payload[key]}`);
}
}
else {
query.push(`${key}=${encodeURIComponent(payload[key])}`);
}
}
}
resource += query.length > 0 ? "?" + query.join("&") : "";
return resource;
}
static isEndevorRestResponseBody(str) {
try {
const data = JSON.parse(str);
if ("returnCode" in data && "reasonCode" in data && "reports" in data && "data" in data) {
return true;
}
else {
return false;
}
}
catch (e) {
return false;
}
}
static isHTTPProtocolError(errorString, session) {
if (errorString === "Bad Request\r\nThis combination of host and port requires TLS.\r\n" &&
session.ISession.protocol === "http") {
return true;
}
else
return false;
}
static reportIdToURL(id) {
return `/reports/${id}`;
}
static reportIdToURLV1(session, id) {
return `${session.ISession.protocol}://${session.ISession.hostname}:${session.ISession.port}/endevor/reports/${id}`;
}
static addFileToFormData(formData, parmName, path, charset) {
const readStream = fs.createReadStream(path);
this.addFileStreamToFormData(formData, parmName, readStream, charset);
}
static addFileStreamToFormData(formData, parmName, inputSteam, charset) {
formData.append(parmName, inputSteam, { contentType: `application/octet-stream; charset="${charset}"` });
}
static isSemVer(input) {
const result = !input.split(".").some((part) => {
return isNaN(parseInt(part));
});
return result;
}
static isSemVerGreater(input1, input2) {
var _a, _b;
const parts1 = input1.split(".");
const parts2 = input2.split(".");
let i = 0;
while (i < parts1.length && i < parts2.length) {
const part1 = parseInt((_a = parts1[i]) !== null && _a !== void 0 ? _a : "0");
const part2 = parseInt((_b = parts2[i]) !== null && _b !== void 0 ? _b : "0");
if (part1 > part2)
return true;
if (part1 < part2)
return false;
i++;
}
return false;
}
}
exports.EndevorRestUtils = EndevorRestUtils;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5kZXZvclJlc3RVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvdXRpbHMvRW5kZXZvclJlc3RVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUF1QkEsaURBTzBCO0FBQzFCLG9DQVFrQjtBQUNsQix5QkFBMEI7QUFDMUIsNkJBQThCO0FBVTlCLE1BQWEsZ0JBQWdCO0lBVXBCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBd0I7UUFDaEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUV0QyxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksNEJBQWUsQ0FBQztnQkFDeEIsR0FBRyxFQUFFLGtFQUFrRTthQUN4RSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQVlNLE1BQU0sQ0FBTyxtQkFBbUI7NkRBQUMsSUFBdUIsRUFBRSxXQUFXLEdBQUcsSUFBSTs7WUFDakYsSUFBSSxRQUFRLEdBQUcsTUFBQSxJQUFJLENBQUMsUUFBUSxtQ0FBSSxvQkFBWSxDQUFDLFNBQVMsQ0FBQztZQUd2RCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2dCQUFFLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFBRSxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQVNsRixJQUFJLE9BQU8sR0FBYTtnQkFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2Ysa0JBQWtCLEVBQUUsSUFB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