UNPKG

@papavault/cli

Version:

CLI tool for Papa Vault Secret Manager

110 lines (109 loc) 5.06 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.setProjectCommand = setProjectCommand; const inquirer_1 = __importDefault(require("inquirer")); const chalk_1 = __importDefault(require("chalk")); const ora_1 = __importDefault(require("ora")); const config_1 = require("../utils/config"); const api_1 = require("../utils/api"); function setProjectCommand(program) { program .command('set-project') .description('Set the current project and stage for secret syncing') .option('-p, --project-id <projectId>', 'Project ID') .option('-s, --stage <stage>', 'Environment stage (e.g., development, staging, production)') .option('-t, --token <token>', 'API token for authentication (overrides stored token)') .action(async (options) => { // Check if authenticated if (!(0, config_1.isAuthenticated)() && !options.token) { console.log(chalk_1.default.red('You need to be logged in to set a project.')); console.log(chalk_1.default.yellow('Run `papavault login` to authenticate or provide a token with --token.')); return; } // Check if .papavault.json already exists const existingConfig = (0, config_1.getProjectConfig)(); if (existingConfig) { const { confirm } = await inquirer_1.default.prompt([ { type: 'confirm', name: 'confirm', message: 'A project is already set. Do you want to override it?', default: false } ]); if (!confirm) { console.log(chalk_1.default.yellow('Operation cancelled.')); return; } } let projectId = options.projectId; let stage = options.stage; // If project ID is not provided, fetch and prompt for selection if (!projectId) { const spinner = (0, ora_1.default)('Fetching projects...').start(); try { const projects = await (0, api_1.getProjects)(options.token); spinner.succeed(`Found ${projects.length} projects.`); if (projects.length === 0) { console.log(chalk_1.default.yellow('No projects found.')); return; } const { selectedProject } = await inquirer_1.default.prompt([ { type: 'list', name: 'selectedProject', message: 'Select a project:', choices: projects.map((project) => ({ name: `${project.name} (${project.id})`, value: project.id })) } ]); projectId = selectedProject; } catch (error) { spinner.fail('Failed to fetch projects'); console.error(chalk_1.default.red('Error:'), error); return; } } // If stage is not provided, fetch and prompt for selection if (!stage) { const spinner = (0, ora_1.default)('Fetching project environments...').start(); try { const project = await (0, api_1.getProject)(projectId, options.token); spinner.succeed(`Found ${project.environments.length} environments.`); if (project.environments.length === 0) { console.log(chalk_1.default.yellow('No environments found for this project.')); return; } const { selectedStage } = await inquirer_1.default.prompt([ { type: 'list', name: 'selectedStage', message: 'Select an environment:', choices: project.environments.map((env) => ({ name: env.name ? `${env.name} (${env.id})` : env.id, value: env.id })) } ]); stage = selectedStage; } catch (error) { spinner.fail('Failed to fetch project environments'); console.error(chalk_1.default.red('Error:'), error); return; } } // Save the configuration (0, config_1.setProjectConfig)(projectId, stage); console.log(chalk_1.default.green('\nProject configuration saved successfully!')); console.log(chalk_1.default.gray(`Project ID: ${projectId}`)); console.log(chalk_1.default.gray(`Stage: ${stage}`)); console.log(chalk_1.default.green('\nTip:'), 'Run', chalk_1.default.cyan('`papavault sync`'), 'to sync your secrets.'); }); }