@papavault/cli
Version:
CLI tool for Papa Vault Secret Manager
110 lines (109 loc) • 5.06 kB
JavaScript
;
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.');
});
}