UNPKG

@onboardbase/cli

Version:

[![Version](https://img.shields.io/npm/v/@onboardbase/cli.svg)](https://www.npmjs.com/package/@onboardbase/cli) [![Downloads/week](https://img.shields.io/npm/dw/@onboardbase/cli.svg)](https://www.npmjs.com/package/@onboardbase/cli) [![License](https://img

117 lines (116 loc) 5.67 kB
"use strict"; 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;