69 lines
1.7 KiB
TypeScript
69 lines
1.7 KiB
TypeScript
/**
|
|
* CLI configuration — base URL, token storage.
|
|
*/
|
|
|
|
import { join } from 'path';
|
|
import { homedir } from 'os';
|
|
|
|
const CONFIG_DIR = join(homedir(), '.config', 'quinn-my');
|
|
const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
|
|
|
|
interface CliConfig {
|
|
baseUrl: string;
|
|
token: string | null;
|
|
}
|
|
|
|
const DEFAULTS: Record<string, string> = {
|
|
dev: 'https://my.quinn.apricot.local',
|
|
prod: 'https://my.transquinnftw.com',
|
|
};
|
|
|
|
function resolveEnv(): string {
|
|
return process.env['QUINN_MY_ENV'] ?? 'dev';
|
|
}
|
|
|
|
export async function loadConfig(): Promise<CliConfig> {
|
|
try {
|
|
const file = Bun.file(CONFIG_PATH);
|
|
const exists = await file.exists();
|
|
if (exists) {
|
|
const stored = await file.json() as Partial<CliConfig>;
|
|
return {
|
|
baseUrl: stored.baseUrl ?? DEFAULTS[resolveEnv()] ?? DEFAULTS['dev'],
|
|
token: stored.token ?? null,
|
|
};
|
|
}
|
|
} catch {
|
|
// Config file missing or corrupt — use defaults
|
|
}
|
|
|
|
return {
|
|
baseUrl: DEFAULTS[resolveEnv()] ?? DEFAULTS['dev'],
|
|
token: null,
|
|
};
|
|
}
|
|
|
|
export async function saveConfig(config: CliConfig): Promise<void> {
|
|
try {
|
|
const { mkdirSync } = await import('fs');
|
|
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
await Bun.write(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n');
|
|
} catch (err) {
|
|
console.error('Failed to save config:', String(err));
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
export async function getToken(): Promise<string> {
|
|
const config = await loadConfig();
|
|
if (!config.token) {
|
|
console.error('Not authenticated. Run: quinn-my login');
|
|
process.exit(1);
|
|
}
|
|
return config.token;
|
|
}
|
|
|
|
export async function getBaseUrl(): Promise<string> {
|
|
const config = await loadConfig();
|
|
return config.baseUrl;
|
|
}
|