import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs'; import { dirname } from 'node:path'; export class IdentityRegistry { filePath; entries = new Map(); constructor(filePath) { this.filePath = filePath; this.load(); } load() { if (!existsSync(this.filePath)) return; try { const data = JSON.parse(readFileSync(this.filePath, 'utf8')); for (const e of data.entries ?? []) { if (e.agentId && e.fabricApiKey) this.entries.set(e.agentId, e); } } catch { // corrupt file -> start empty; upsert will rewrite } } persist() { mkdirSync(dirname(this.filePath), { recursive: true }); const data = { entries: [...this.entries.values()] }; writeFileSync(this.filePath, JSON.stringify(data, null, 2)); } list() { return [...this.entries.values()]; } findByAgentId(agentId) { return this.entries.get(agentId); } upsert(entry) { const prev = this.entries.get(entry.agentId); this.entries.set(entry.agentId, { ...prev, ...entry }); this.persist(); } }