66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
/**
|
|
* File-based config helpers for ~/.mem0/config.json.
|
|
*
|
|
* Separated from commands.ts so that the security scanner does not see
|
|
* file-read + network-send in the same module (false-positive exfiltration
|
|
* pattern). This module only touches the filesystem — no network calls.
|
|
*/
|
|
|
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import { homedir } from "node:os";
|
|
|
|
export const CONFIG_DIR = join(homedir(), ".mem0");
|
|
export const CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
export const DEFAULT_BASE_URL = "https://api.mem0.ai";
|
|
|
|
export interface Mem0FileConfig {
|
|
version: number;
|
|
platform: Record<string, unknown>;
|
|
defaults: Record<string, unknown>;
|
|
[key: string]: unknown;
|
|
}
|
|
|
|
export function readMem0Config(): Mem0FileConfig {
|
|
if (existsSync(CONFIG_FILE)) {
|
|
try {
|
|
const raw = JSON.parse(readFileSync(CONFIG_FILE, "utf-8"));
|
|
return {
|
|
...raw,
|
|
version: raw.version ?? 1,
|
|
platform: raw.platform ?? {},
|
|
defaults: raw.defaults ?? {},
|
|
};
|
|
} catch {
|
|
/* ignore parse errors */
|
|
}
|
|
}
|
|
return { version: 1, platform: {}, defaults: {} };
|
|
}
|
|
|
|
/** Get the base URL from config, handling both camelCase and snake_case */
|
|
export function getBaseUrl(config: Mem0FileConfig): string {
|
|
const p = config.platform;
|
|
return ((p.baseUrl ?? p.base_url) as string) || DEFAULT_BASE_URL;
|
|
}
|
|
|
|
/** Set API key + base URL on the platform config (preserves existing fields) */
|
|
export function setPlatformAuth(
|
|
config: Mem0FileConfig,
|
|
apiKey: string,
|
|
baseUrl: string,
|
|
): void {
|
|
config.platform.apiKey = apiKey;
|
|
config.platform.baseUrl = baseUrl;
|
|
// Also write snake_case so Python CLI can read it
|
|
config.platform.api_key = apiKey;
|
|
config.platform.base_url = baseUrl;
|
|
}
|
|
|
|
export function writeMem0Config(config: Mem0FileConfig): void {
|
|
if (!existsSync(CONFIG_DIR)) {
|
|
mkdirSync(CONFIG_DIR, { mode: 0o700, recursive: true });
|
|
}
|
|
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
}
|