@elevenlabs/convai-cli
Version:
CLI tool to manage ElevenLabs conversational AI agents
105 lines • 2.92 kB
JavaScript
/**
* Configuration management for CLI
* Simple credential storage with keychain support
*/
import fs from 'fs-extra';
import path from 'path';
import os from 'os';
import { storeApiKey, retrieveApiKey, removeApiKey as removeStoredApiKey, hasApiKey } from './auth.js';
export const LOCATIONS = ["us", "global", "eu-residency", "in-residency"];
/**
* Get the path to the CLI config file
*/
export function getConfigPath() {
const configDir = path.join(os.homedir(), '.convai');
return path.join(configDir, 'config.json');
}
/**
* Load CLI configuration from file
*/
export async function loadConfig() {
const configPath = getConfigPath();
try {
if (await fs.pathExists(configPath)) {
const configContent = await fs.readFile(configPath, 'utf-8');
return JSON.parse(configContent);
}
}
catch (error) {
// If config file is corrupted or unreadable, start fresh
console.warn('Warning: Config file corrupted, starting fresh');
}
return {};
}
/**
* Save CLI configuration to file
*/
export async function saveConfig(config) {
const configPath = getConfigPath();
const configDir = path.dirname(configPath);
// Ensure config directory exists
await fs.ensureDir(configDir);
// Don't store API key in config file for security
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { apiKey, ...configWithoutKey } = config;
// Save config with proper formatting and secure permissions
await fs.writeFile(configPath, JSON.stringify(configWithoutKey, null, 2), {
mode: 0o600,
encoding: 'utf-8'
});
}
/**
* Get API key from storage or environment variable
*/
export async function getApiKey() {
return await retrieveApiKey();
}
/**
* Set API key in secure storage
*/
export async function setApiKey(apiKey) {
await storeApiKey(apiKey);
}
/**
* Remove API key from storage
*/
export async function removeApiKey() {
await removeStoredApiKey();
}
/**
* Check if user is logged in (has API key)
*/
export async function isLoggedIn() {
return await hasApiKey();
}
/**
* Get default environment from config
*/
export async function getDefaultEnvironment() {
const config = await loadConfig();
return config.defaultEnvironment || 'prod';
}
/**
* Set default environment in config
*/
export async function setDefaultEnvironment(environment) {
const config = await loadConfig();
config.defaultEnvironment = environment;
await saveConfig(config);
}
/**
* Get residency from config
*/
export async function getResidency() {
const config = await loadConfig();
return config.residency || 'global';
}
/**
* Set residency in config
*/
export async function setResidency(residency) {
const config = await loadConfig();
config.residency = residency;
await saveConfig(config);
}
//# sourceMappingURL=config.js.map