import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
import { homedir } from "os";
import { join } from "path";
export interface NexusConfig {
apiKey?: string;
baseUrl: string;
orgId?: string;
}
const CONFIG_DIR = join(homedir(), ".nexus-mcp");
const CONFIG_FILE = join(CONFIG_DIR, "config.json");
const DEFAULT_CONFIG: NexusConfig = {
baseUrl: "https://nexus.app", // Update with actual Nexus URL
};
export function ensureConfigDir(): void {
if (!existsSync(CONFIG_DIR)) {
mkdirSync(CONFIG_DIR, { recursive: true });
}
}
export function loadConfig(): NexusConfig {
ensureConfigDir();
if (!existsSync(CONFIG_FILE)) {
return { ...DEFAULT_CONFIG };
}
try {
const data = readFileSync(CONFIG_FILE, "utf-8");
return { ...DEFAULT_CONFIG, ...JSON.parse(data) };
} catch {
return { ...DEFAULT_CONFIG };
}
}
export function saveConfig(config: Partial<NexusConfig>): void {
ensureConfigDir();
const current = loadConfig();
const updated = { ...current, ...config };
writeFileSync(CONFIG_FILE, JSON.stringify(updated, null, 2));
}
export function getApiKey(): string | undefined {
// Check environment variable first
if (process.env.NEXUS_API_KEY) {
return process.env.NEXUS_API_KEY;
}
// Then check config file
return loadConfig().apiKey;
}
export function getBaseUrl(): string {
return process.env.NEXUS_API_URL || loadConfig().baseUrl;
}
export function isAuthenticated(): boolean {
return !!getApiKey();
}