UNPKG

@papavault/cli

Version:

CLI tool for Papa Vault Secret Manager

202 lines (201 loc) 7.08 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PapaVaultAPI = void 0; exports.createApiInstance = createApiInstance; exports.validateToken = validateToken; exports.getProjects = getProjects; exports.getProject = getProject; exports.getCredentialFiles = getCredentialFiles; exports.getCredentialFile = getCredentialFile; exports.downloadCredentialFile = downloadCredentialFile; const axios_1 = __importDefault(require("axios")); const config_1 = require("../config"); const error_1 = require("./error"); const logger_1 = require("./logger"); const config_2 = require("./config"); // Base URL for the API const API_BASE_URL = process.env.API_BASE_URL || 'https://app.papavault.com/api'; // Create an axios instance with default configuration const api = axios_1.default.create({ baseURL: API_BASE_URL, timeout: 10000, headers: { 'Content-Type': 'application/json' } }); // Add a request interceptor to add the token to the request api.interceptors.request.use((config) => { // Get token from config or global state const token = config.headers['X-PapaVault-Token'] || (0, config_2.getToken)(); if (token) { config.headers['Authorization'] = `Bearer ${token}`; } return config; }); // Helper function to create an API instance with a custom token function createApiInstance(token) { const instance = axios_1.default.create({ baseURL: API_BASE_URL, timeout: 10000, headers: { 'Content-Type': 'application/json', ...(token ? { 'X-PapaVault-Token': token } : {}) } }); return instance; } // Validate the token async function validateToken(token) { try { const response = await createApiInstance(token).get('/apikeys/validate'); return response.status === 200; } catch (error) { return false; } } // Get all projects async function getProjects(token) { try { const response = await createApiInstance(token).get('/cli/projects'); return response.data.projects; } catch (error) { console.error('Error fetching projects:', error); throw error; } } // Get a project by ID async function getProject(projectId, token) { try { const response = await createApiInstance(token).get(`/cli/projects/${projectId}`); return response.data.project; } catch (error) { console.error(`Error fetching project ${projectId}:`, error); throw error; } } // Get all credential files for a project environment async function getCredentialFiles(projectId, environmentId, token) { try { const response = await createApiInstance(token).get(`/cli/projects/${projectId}/environments/${environmentId}/credentials`); return response.data.credentialFiles; } catch (error) { console.error(`Error fetching credential files for project ${projectId}, environment ${environmentId}:`, error); throw error; } } // Get a credential file by ID async function getCredentialFile(projectId, environmentId, fileId, token) { try { const response = await createApiInstance(token).get(`/cli/projects/${projectId}/environments/${environmentId}/credentials/${fileId}`); return response.data; } catch (error) { console.error(`Error fetching credential file ${fileId}:`, error); throw error; } } // Download a credential file async function downloadCredentialFile(downloadUrl, token) { try { const response = await createApiInstance(token).get(downloadUrl); return response.data; } catch (error) { console.error('Error downloading credential file:', error); throw error; } } const emptyConfig = {}; class PapaVaultAPI { constructor(options = {}) { const token = options.token || config_1.config.get('token'); const baseUrl = options.baseUrl || config_1.config.get('baseUrl') || 'https://api.papavault.com'; if (!token) { throw new error_1.PapaVaultError('API token is required'); } this.client = axios_1.default.create({ baseURL: baseUrl, headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json', }, }); // Add request interceptor for debug logging this.client.interceptors.request.use((config) => { (0, logger_1.debugLog)('Request:', { method: config.method, url: config.url, params: config.params, data: config.data, }); return config; }); // Add response interceptor for debug logging this.client.interceptors.response.use((response) => { (0, logger_1.debugLog)('Response:', { status: response.status, data: response.data, }); return response; }, (error) => { (0, logger_1.debugLog)('Error:', { status: error.response?.status, data: error.response?.data, message: error.message, }); return Promise.reject(error); }); } async get(url, config = emptyConfig) { try { return await this.client.get(url, config); } catch (error) { if (error instanceof Error) { throw new error_1.PapaVaultError(`API request failed: ${error.message}`, error); } throw new error_1.PapaVaultError('API request failed: Unknown error'); } } async post(url, data = {}, config = emptyConfig) { try { return await this.client.post(url, data, config); } catch (error) { if (error instanceof Error) { throw new error_1.PapaVaultError(`API request failed: ${error.message}`, error); } throw new error_1.PapaVaultError('API request failed: Unknown error'); } } async put(url, data = {}, config = emptyConfig) { try { return await this.client.put(url, data, config); } catch (error) { if (error instanceof Error) { throw new error_1.PapaVaultError(`API request failed: ${error.message}`, error); } throw new error_1.PapaVaultError('API request failed: Unknown error'); } } async delete(url, config = emptyConfig) { try { return await this.client.delete(url, config); } catch (error) { if (error instanceof Error) { throw new error_1.PapaVaultError(`API request failed: ${error.message}`, error); } throw new error_1.PapaVaultError('API request failed: Unknown error'); } } } exports.PapaVaultAPI = PapaVaultAPI;