import { randomUUID } from "node:crypto"; import { siteSettings } from "@/lib/services/site-settings"; export interface CloneSource { id: string; name: string; furnidataUrl: string; nitroBaseUrl: string; iconBaseUrl: string; } const KEY = "clone_sources"; export async function listSources(): Promise { const raw = (await siteSettings.get(KEY, "[]")) ?? "[]"; try { const arr = JSON.parse(raw); return Array.isArray(arr) ? arr : []; } catch { return []; } } export async function upsertSource(src: Omit & { id?: string }): Promise { const sources = await listSources(); const entry: CloneSource = { id: src.id || randomUUID(), name: src.name.trim(), furnidataUrl: src.furnidataUrl.trim(), nitroBaseUrl: src.nitroBaseUrl.trim().replace(/\/+$/, ""), iconBaseUrl: src.iconBaseUrl.trim().replace(/\/+$/, ""), }; const idx = sources.findIndex((s) => s.id === entry.id); if (idx >= 0) sources[idx] = entry; else sources.push(entry); await siteSettings.update(KEY, JSON.stringify(sources)); return entry; } export async function deleteSource(id: string): Promise { const sources = (await listSources()).filter((s) => s.id !== id); await siteSettings.update(KEY, JSON.stringify(sources)); } export async function getSource(id: string): Promise { return (await listSources()).find((s) => s.id === id) ?? null; }