@onboardbase/cli
Version:
[](https://www.npmjs.com/package/@onboardbase/cli) [](https://www.npmjs.com/package/@onboardbase/cli) [ • 5.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EnvironmentService = void 0;
const common_1 = require("../../common");
const chalk = require("chalk");
const inquirer = require("inquirer");
const utils_1 = require("../../utils");
const fs_1 = require("fs");
const types_1 = require("../../common/types");
const access_manager_1 = require("../access-manager");
const cli_ux_1 = require("cli-ux");
const uploadSecretsActionTypes_enum_1 = require("../../enums/uploadSecretsActionTypes.enum");
class EnvironmentService extends common_1.BaseService {
constructor(configManager) {
super(configManager);
this.accessManager = new access_manager_1.AccessManager(configManager);
}
async initialize({ args, flags }) {
var _a;
const { project, environment } = flags;
let projectId;
let parsedJson;
let projectTitle = project;
/**
* check to see if JSON file exist if `flags.file-path` is passed before making any network request
*/
if (flags["file-path"] && !(0, utils_1.isExist)(flags["file-path"])) {
console.log(chalk.bold.red("The JSON file specified doesn't exist."));
process.exit(1);
}
/**
* Handle creating default environment data from JSON
*/
if (flags["file-path"]) {
// Read the file and try to parse it to JSON
const jsonData = (0, fs_1.readFileSync)(flags["file-path"], "utf8");
try {
parsedJson = JSON.parse(jsonData);
}
catch (error) {
console.log(chalk.bold.red("Invalid JSON file.. Please make sure your JSON file a valid JSON object"));
process.exit(1);
}
}
const cliToken = this._getFromGlobalConfigOrThrow({
configPath: "token",
envName: types_1.ENV_NAMES.TOKEN,
});
const authHandshakeResult = await this.accessManager.getAuthInfoFromDeviceToken(cliToken);
if (!project) {
const projects = await this.httpInstance.fetchProjects(authHandshakeResult.accessToken);
const { selectedProject } = await inquirer.prompt([
{
name: "selectedProject",
type: "list",
message: "Select a project",
choices: projects.map(({ title }) => title),
},
]);
projectId = (_a = projects.find(({ title }) => title === selectedProject)) === null || _a === void 0 ? void 0 : _a.id;
projectTitle = selectedProject;
}
else {
try {
const [{ id }] = await this.httpInstance.fetchSingleProject(authHandshakeResult.accessToken, project);
projectId = id;
}
catch (error) {
throw new Error(chalk.red(`Project Title: ${chalk.bold(project)} doesn't exist`));
}
}
await this.accessManager.handleUserAdminPrivileges(project || projectTitle);
console.log("Creating Environment...");
try {
await this.httpInstance.createEnvironment(authHandshakeResult.accessToken, projectId, environment);
}
catch (error) {
console.log("Error:", chalk.red(error.message));
process.exit(1);
}
if (flags["file-path"] &&
Object.keys(parsedJson).length > 0 &&
!flags["duplicate-from"]) {
cli_ux_1.cli.action.start(`Uploading secrets to ${chalk.greenBright.bold(environment)} environment from file path`);
await (0, utils_1.uploadSecretsToOnboardbase)(projectTitle, environment, parsedJson, cliToken, [], uploadSecretsActionTypes_enum_1.UploadSecretsActionTypes.DUPLICATE);
cli_ux_1.cli.action.stop();
}
if (flags["duplicate-from"] && !flags["file-path"]) {
/**
* Fetch the secrets under the environment the user will like to duplicate from
*/
cli_ux_1.cli.action.start(`Uploading secrets to ${chalk.greenBright.bold(environment)} environment from ${chalk.greenBright.bold(flags["duplicate-from"])} environment`);
await (0, utils_1.duplicateExistingSecretAndUpdateEnvironment)(projectTitle, flags["duplicate-from"], environment, cliToken);
cli_ux_1.cli.action.stop();
}
/**
* That is if user chooses to upload from JSON and also
* duplicate other secrets from an existing environment,
* just merge both records together
*/
if (flags["file-path"] && flags["duplicate-from"]) {
const { env } = await (0, utils_1.fetchRawSecrets)(project, flags["duplicate-from"], cliToken);
let parsedKeyAndValue = env;
/**
* Merge both `file-path JSON` file with the `duplicate-from` envs
*
* Note, `file-path` JSON should override `duplicate-from` incase
* it finds duplicate keys. (meaning parsedJson has to be the second argument passed in the `Object.assign` function so it can override existing values)
*/
const mergedJson = Object.assign(parsedKeyAndValue, parsedJson);
await (0, utils_1.uploadSecretsToOnboardbase)(projectTitle, environment, mergedJson, cliToken, [], uploadSecretsActionTypes_enum_1.UploadSecretsActionTypes.DUPLICATE);
}
console.log(chalk.greenBright(`Environment with the name ${chalk.bold.green(environment)} created successfully.`));
}
}
exports.EnvironmentService = EnvironmentService;