@onboardbase/cli
Version:
[](https://www.npmjs.com/package/@onboardbase/cli) [](https://www.npmjs.com/package/@onboardbase/cli) [ • 5.75 kB
JavaScript
;
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;