import { requireUser } from "../../utils/auth"; const MAX_DOMAINS_PER_COUNTRY = 50; /** * GET /api/protection/webcontent-domains * * Liefert die runtime-updatebare iOS-Layer-2-Gambling-Domain-Liste. * Datenquelle: backend/data/gambling-domains.json (file-based, v1). * Im Build über Nitro serverAssets gebundelt → kein process.cwd()-Trick. * * Pflege: backend/data/gambling-domains.json editieren, * _meta.version hochzählen, _meta.updatedAt setzen, dann neu deployen. * * Apple-Hartlimit: max. 50 Domains pro Land-Key. Wird serverseitig * enforced (slice), damit ein versehentlicher Überschuss in der JSON-Datei * nie zur App durchdringt. * * Auth: identisch zu allen anderen /api/protection/*-Routen (requireUser). */ export default defineEventHandler(async (event) => { await requireUser(event); const storage = useStorage("assets:server"); const raw = await storage.getItem<{ _meta: { version: number; updatedAt: string; [k: string]: unknown }; _comment?: string; [country: string]: unknown; }>("data:gambling-domains.json"); if (!raw) { throw createError({ statusCode: 500, message: "GAMBLING_DOMAINS_UNAVAILABLE", }); } const { _meta, _comment: _c, ...countryEntries } = raw; const countries: Record = {}; for (const [key, value] of Object.entries(countryEntries)) { if (Array.isArray(value)) { // Apple-Hartlimit: niemals mehr als 50 Domains pro Land ausliefern countries[key] = (value as string[]).slice(0, MAX_DOMAINS_PER_COUNTRY); } } return { _meta: { version: _meta.version, updatedAt: _meta.updatedAt, }, ...countries, }; });