@pega/custom-dx-components
Version:
Utility for building custom UI components
177 lines (154 loc) • 5.45 kB
JavaScript
import fs from 'fs';
import chalk from 'chalk';
import fetch from 'node-fetch';
import {
getPegaServerConfig,
addDebugLog,
getApplicationAndVersionFromToken,
constructCompleteUrl,
getHttpsAgent,
validateRulesetVersion } from '../../util.js';
import { LIST_COMPONENT_LIBRARIES_SERVICE_REST_ENDPOINT, TOKEN_PATH } from '../../constants.js';
export const SOURCE_OF_COMPONENT_TYPES = {
SERVER: 'Server',
LOCAL: 'Local'
};
export const getDeleteLibraryQuestions = async () => {
addDebugLog("getDeleteLibraryQuestions", "", "");
const defaultPegaConfig = await getPegaServerConfig();
return [
{
name: 'sourceOfLibrary',
type: 'rawlist',
message: 'Delete library from Server or Local ?',
choices: Object.values(SOURCE_OF_COMPONENT_TYPES),
default: defaultPegaConfig.sourceOfComponents
}
];
};
export const getLibraryVersionQuestion = async (libraryName, libVersions) => {
addDebugLog("getLibraryVersionQuestion", `libraryName: ${libraryName}`, "");
return [
{
name: 'version',
type: 'rawlist',
message: `Select ${chalk.green.bold(`${libraryName}`)} library version (or ALL) to delete`,
choices: libVersions
}
];
};
export const getRulesetAndVersionQuestion = async (serverConfig) => {
return [
{
name: 'rulesetName',
message: 'Enter ruleset name',
default: serverConfig.rulesetName,
validate: value => {
if (value.trim()) {
return true;
}
return 'Ruleset name cannot be empty';
},
when: () => {
return serverConfig.serverType === 'infinity';
}
},
{
name: 'rulesetVersion',
message: 'Enter ruleset version',
default: serverConfig.rulesetVersion,
validate: value => {
if (validateRulesetVersion(value)) {
return true;
}
return 'Please provide compatible version e.g 01-01-01';
},
when: () => {
return serverConfig.serverType === 'infinity';
}
}
];
};
async function fetchComponentLibrariesFromInfinity(apiUrl, headers) {
addDebugLog("fetchComponentLibrariesFromInfinity", `apiUrl: ${apiUrl}`, "");
const serverConfig = await getPegaServerConfig();
return new Promise((resolve, reject) => {
let status = 500;
fetch(apiUrl, {
method: 'GET',
agent: getHttpsAgent(serverConfig),
headers
})
.then((response) => {
status = response.status;
if (status === 401) {
throw new Error('Error occurred in authentication. Please regenerate using authenticate');
}
else if (status === 404){
throw new Error('404: Server resource not found');
}
else if (status === 405){
throw new Error('405: Server method not allowed');
}
else if (status === 408){
throw new Error('408: Server timed out');
}
return response.json();
})
.then((resp) => {
// const respData = JSON.parse(resp);
if (status === 401) {
throw new Error('Error occurred in authentication. Please regenerate using authenticate');
// console.log(accessTokenUri, refreshToken);
/* TODO - Handle refresh_token */
} else if (status === 200) {
resolve(resp);
} else {
throw new Error(`${resp.message}`);
}
})
// eslint-disable-next-line prefer-promise-reject-errors
.catch((e) => reject(`${chalk.bold.red(e)}`));
});
}
// const getInfinityLibraries = async(rulesetName, rulesetVersion) => {
export const getInfinityLibraries = async() => {
addDebugLog("getInfinityLibraries", '', "");
const { app_name, app_version } = await getApplicationAndVersionFromToken();
const defaultPegaServerConfig = await getPegaServerConfig();
let url = constructCompleteUrl(
defaultPegaServerConfig.server,
LIST_COMPONENT_LIBRARIES_SERVICE_REST_ENDPOINT
);
const ApplicationName = app_name;
const ApplicationVersion = app_version;
// const rulesetName = defaultPegaServerConfig.rulesetName;
// const rulesetVersion = defaultPegaServerConfig.rulesetVersion;
// inquire
// want to get a list of all for application, so make ruleset/version blank
let urlParams = `/app-name/${ApplicationName}/app-version/${ApplicationVersion}/rulesetname/""/rulesetversion/""`;
// let urlParams = `/app-name/${ApplicationName}/app-version/${ApplicationVersion}/rulesetname/${rulesetName}/rulesetversion/${rulesetVersion}`;
url = url.concat(urlParams);
return new Promise((resolve, reject) => {
try {
fs.readFile(TOKEN_PATH, 'utf8', (err, data) => {
if (err) {
// eslint-disable-next-line prefer-promise-reject-errors
reject(`\n${chalk.bold.red('Error occurred in authentication. Please regenerate using authenticate')}`);
}
if (data) {
const { access_token: accessToken, token_type: tokenType } = JSON.parse(data);
const headers = {};
headers.Authorization = `${tokenType} ${accessToken}`;
fetchComponentLibrariesFromInfinity(url, headers)
.then((response) => resolve(response))
.catch((e) => reject(e));
}
});
} catch (error) {
console.log(`\n${chalk.bold.red(error)}`);
// eslint-disable-next-line prefer-promise-reject-errors
reject(`${chalk.bold.red(error)}`);
}
});
}