Neuer Nitro-Endpoint serviert die kuratierte Gambling-Domain-Liste pro Land (DE/GB/FR) aus backend/data/gambling-domains.json. Auth wie alle /api/protection/*-Routen (requireUser). 50-Domain-Cap pro Land serverseitig erzwungen. Liste pflegen = JSON editieren + _meta.version hochzaehlen + deploy. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
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<string, string[]> = {};
|
|
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,
|
|
};
|
|
});
|