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

115 lines (114 loc) 5.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MergeRequestCreateCommandService = void 0; const chalk = require("chalk"); const base_service_1 = require("../../common/base.service"); const inquirer = require("inquirer"); const errors_1 = require("../../common/errors"); const access_manager_1 = require("../access-manager"); const types_1 = require("../../common/types"); const utils_1 = require("../../utils"); class MergeRequestCreateCommandService extends base_service_1.BaseService { constructor(configManager) { super(configManager); this.accessManager = new access_manager_1.AccessManager(configManager); } async initialize({ args, flags }) { var _a, _b; const { project, note } = flags; const { secrets } = args; let recommendationProject = project; if (!flags["from-local-secrets"] && !secrets) throw errors_1.BadInputError.from("Please specify the secrets you want to update"); let projectEnvironments; let environmentId; const cliToken = this._getFromGlobalConfigOrThrow({ configPath: "token", envName: types_1.ENV_NAMES.TOKEN, }); const authHandshakeResult = await this.accessManager.getAuthInfoFromDeviceToken(cliToken); const user = await this.httpInstance.getCurrentUser(authHandshakeResult.accessToken); if (!project) { const allProjects = await this.httpInstance.fetchProjects(authHandshakeResult.accessToken); const projects = allProjects.filter(({ member }) => member); const { selectedProject } = await inquirer.prompt([ { name: "selectedProject", type: "list", message: "Select a project", choices: projects.map(({ title }) => title), }, ]); recommendationProject = selectedProject; projectEnvironments = (_a = projects.find(({ title }) => title === selectedProject)) === null || _a === void 0 ? void 0 : _a.environments.list; } else { try { const [{ environments: { list }, },] = await this.httpInstance.fetchSingleProject(authHandshakeResult.accessToken, project); projectEnvironments = list; } catch (error) { throw new Error(chalk.red(`Project Title: ${chalk.bold(project)} doesn't exist`)); } } let environmentToRecommendUpdateFor = flags.environment; if (!environmentToRecommendUpdateFor) { const { selectedEnvironment } = await inquirer.prompt([ { name: "selectedEnvironment", type: "list", message: "Select Environment", choices: projectEnvironments.map(({ title }) => title), }, ]); environmentToRecommendUpdateFor = selectedEnvironment; } environmentId = (_b = projectEnvironments.find(({ title }) => title === environmentToRecommendUpdateFor)) === null || _b === void 0 ? void 0 : _b.id; let parsedJSON = {}; //const newSecrets = []; const finalSecrets = []; if (!flags["from-local-secrets"]) { const newEnvs = secrets.split(" "); newEnvs.map((keyAndValue) => { const splittedKeyAndValue = keyAndValue.split("="); const key = splittedKeyAndValue[0].toUpperCase(); const value = splittedKeyAndValue[1]; if (value === undefined) { throw new Error(`value for ${chalk.greenBright.bold(key)} was not specified.`); } parsedJSON[key] = value; }); } if (flags["from-local-secrets"]) { const localSecrets = this.configManager.getFromProject("secrets.local"); console.log("checking for duplicate merge request...."); const allSecrets = await this.httpInstance.downloadSecretsForRecommendation(localSecrets, recommendationProject, environmentToRecommendUpdateFor, authHandshakeResult.accessToken); Object.keys(localSecrets).map((secretKey) => { if (allSecrets.includes(secretKey)) parsedJSON[secretKey] = localSecrets[secretKey]; }); } if (!Object.keys(parsedJSON).length) { console.log("No unique secrets was specified for merge request"); process.exit(); } console.log("creating merge requests..."); const encryptionPassphrase = authHandshakeResult.secretKey; const newSecrets = await Promise.all(Object.keys(parsedJSON).map(async (key) => { const secret = { key: await (0, utils_1.encryptSecrets)(key.toUpperCase(), encryptionPassphrase), value: await (0, utils_1.encryptSecrets)(parsedJSON[key].toString(), encryptionPassphrase), }; return secret; })); const comment = await (0, utils_1.encryptSecrets)(note !== null && note !== void 0 ? note : "", encryptionPassphrase); /** * @todo * Rewrite this to send array of recommendations/merge requests instead * of looping through each and creating then one by one */ await Promise.all(newSecrets.map(async (secret) => await this.httpInstance.createRecommendation(authHandshakeResult.accessToken, environmentId, secret, comment))); console.log(chalk.greenBright("Merge Request created successfully.")); } } exports.MergeRequestCreateCommandService = MergeRequestCreateCommandService;