public
anord
read
Ledger
Why work hard when you can work easier?
Languages
Repository composition by tracked source files.
TypeScript
86%
CSS
10%
SQL
3%
Shell
1%
HTML
0%
import { Router } from "express";
import { z } from "zod";
import { requireAdmin } from "../middleware/auth.js";
import { getAdminSettingsBundle, getBrandingSettings, upsertBrandingSettings } from "../../services/settings.js";
import { logAudit } from "../../services/audit.js";
const brandingSchema = z.object({
siteName: z.string().min(2),
logoUrl: z.string().url().nullable(),
brandColor: z.string().regex(/^#[0-9a-fA-F]{6}$/),
publicKnowledgeBaseEnabled: z.boolean(),
footerLinks: z.array(
z.object({
label: z.string().min(1),
href: z.string().url()
})
).default([])
});
export const settingsRouter = Router();
settingsRouter.get("/public", async (_req, res) => {
const branding = await getBrandingSettings();
return res.json({
branding: {
siteName: branding.site_name,
logoUrl: branding.logo_url,
brandColor: branding.brand_color,
publicKnowledgeBaseEnabled: branding.public_knowledge_base_enabled,
footerLinks: branding.footer_links ?? []
}
});
});
settingsRouter.get("/admin", requireAdmin, async (_req, res) => {
const settings = await getAdminSettingsBundle();
return res.json(settings);
});
settingsRouter.put("/branding", requireAdmin, async (req, res) => {
const input = brandingSchema.parse(req.body);
const updated = await upsertBrandingSettings(input);
await logAudit(req.user!.id, "settings.branding.update", "branding_settings", updated.id);
return res.json(updated);
});