UNPKG

quallaa-cli

Version:

Sets up core infrastructure services for AI-assisted development

113 lines 4.55 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.saveCredentials = saveCredentials; exports.getCredentials = getCredentials; exports.deleteCredentials = deleteCredentials; exports.getAllCredentials = getAllCredentials; exports.testCredentialStorage = testCredentialStorage; const keytar_1 = __importDefault(require("keytar")); const chalk_1 = __importDefault(require("chalk")); const custom_errors_1 = require("../lib/errors/custom-errors"); const SERVICE_NAME = 'quallaa-cli'; async function saveCredentials(service, credentials) { try { const account = `${SERVICE_NAME}-${service}`; const password = JSON.stringify(credentials); await keytar_1.default.setPassword(SERVICE_NAME, account, password); } catch (error) { if (error instanceof Error) { if (error.message.includes('not available') || error.message.includes('not supported')) { throw new custom_errors_1.CredentialStorageError('System credential storage is not available. Credentials will be stored temporarily in memory.', 'save'); } if (error.message.includes('access denied') || error.message.includes('permission')) { throw new custom_errors_1.CredentialStorageError('Permission denied accessing credential storage. Please check your system permissions.', 'save'); } } throw new custom_errors_1.CredentialStorageError(`Failed to save ${service} credentials: ${error instanceof Error ? error.message : 'Unknown error'}`, 'save'); } } async function getCredentials(service) { try { const account = `${SERVICE_NAME}-${service}`; const password = await keytar_1.default.getPassword(SERVICE_NAME, account); if (!password) { return null; } try { return JSON.parse(password); } catch (parseError) { console.warn(chalk_1.default.yellow(`Warning: Corrupt ${service} credentials found, removing...`)); await deleteCredentials(service).catch(() => { }); return null; } } catch (error) { if (error instanceof Error) { if (error.message.includes('not available') || error.message.includes('not supported')) { console.warn(chalk_1.default.yellow('Warning: System credential storage not available')); return null; } if (error.message.includes('not found')) { return null; } } console.warn(chalk_1.default.yellow(`Warning: Could not retrieve ${service} credentials: ${error instanceof Error ? error.message : 'Unknown error'}`)); return null; } } async function deleteCredentials(service) { try { const account = `${SERVICE_NAME}-${service}`; return await keytar_1.default.deletePassword(SERVICE_NAME, account); } catch (error) { if (error instanceof Error && error.message.includes('not found')) { return true; } throw new custom_errors_1.CredentialStorageError(`Failed to delete ${service} credentials: ${error instanceof Error ? error.message : 'Unknown error'}`, 'delete'); } } async function getAllCredentials() { const services = [ 'vercel', 'supabase', 'github', 'resend', 'typesense', ]; const credentials = {}; for (const service of services) { try { const creds = await getCredentials(service); if (creds) { credentials[service] = creds; } } catch (error) { console.warn(chalk_1.default.yellow(`Warning: Could not retrieve ${service} credentials`)); } } return credentials; } async function testCredentialStorage() { try { const testKey = 'test-key'; const testData = { test: 'data' }; await keytar_1.default.setPassword(SERVICE_NAME, testKey, JSON.stringify(testData)); const retrieved = await keytar_1.default.getPassword(SERVICE_NAME, testKey); if (!retrieved || JSON.parse(retrieved).test !== 'data') { return false; } await keytar_1.default.deletePassword(SERVICE_NAME, testKey); return true; } catch (error) { return false; } } //# sourceMappingURL=credentials.js.map