quallaa-cli
Version:
Sets up core infrastructure services for AI-assisted development
113 lines • 4.55 kB
JavaScript
;
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