install.mjs (--install/--build-only/--uninstall/--openclaw-profile-path), tsconfig outDir dist/fabric, package.json openclaw file dep + main. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
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();
|
|
}
|
|
}
|