285 lines
5.6 KiB
TypeScript

import { usePrisma } from "../../utils/prisma";
/**
* GET /api/providers
* Liefert die Liste der in Deutschland lizenzierten Glücksspiel-Anbieter (GGL-Whitelist).
* Quelle: Gemeinsame Glücksspielbehörde der Länder (ggl-behoerde.de)
* Diese Daten werden statisch gepflegt + aus der DB ergänzt.
*/
// Statische GGL-lizenzierte Anbieter (Stand: 2026)
// Kategorie: sportwetten | casino | poker | slots
const GGL_PROVIDERS = [
// Sportwetten-Lizenzen
{
name: "bet365",
domain: "bet365.com",
category: "sportwetten",
license: "GGL-SW",
risk: "hoch",
},
{
name: "Tipico",
domain: "tipico.de",
category: "sportwetten",
license: "GGL-SW",
risk: "hoch",
},
{
name: "bwin",
domain: "bwin.de",
category: "sportwetten",
license: "GGL-SW",
risk: "hoch",
},
{
name: "Betano",
domain: "betano.de",
category: "sportwetten",
license: "GGL-SW",
risk: "hoch",
},
{
name: "Betway",
domain: "betway.de",
category: "sportwetten",
license: "GGL-SW",
risk: "hoch",
},
{
name: "ODDSET",
domain: "oddset.de",
category: "sportwetten",
license: "GGL-SW",
risk: "mittel",
},
{
name: "Interwetten",
domain: "interwetten.de",
category: "sportwetten",
license: "GGL-SW",
risk: "mittel",
},
{
name: "Unibet",
domain: "unibet.de",
category: "sportwetten",
license: "GGL-SW",
risk: "hoch",
},
{
name: "888sport",
domain: "888sport.de",
category: "sportwetten",
license: "GGL-SW",
risk: "hoch",
},
{
name: "Betsson",
domain: "betsson.com",
category: "sportwetten",
license: "GGL-SW",
risk: "mittel",
},
{
name: "NEObet",
domain: "neobet.de",
category: "sportwetten",
license: "GGL-SW",
risk: "mittel",
},
{
name: "AdmiralBet",
domain: "admiralbet.de",
category: "sportwetten",
license: "GGL-SW",
risk: "mittel",
},
{
name: "Winamax",
domain: "winamax.de",
category: "sportwetten",
license: "GGL-SW",
risk: "mittel",
},
{
name: "Merkur Sports",
domain: "merkursports.de",
category: "sportwetten",
license: "GGL-SW",
risk: "mittel",
},
// Virtuelle Automatenspiele
{
name: "Merkur Slots",
domain: "merkur-slots.de",
category: "slots",
license: "GGL-VA",
risk: "sehr hoch",
},
{
name: "Jackpotpiraten",
domain: "jackpotpiraten.de",
category: "slots",
license: "GGL-VA",
risk: "sehr hoch",
},
{
name: "Jokerstar",
domain: "jokerstar.de",
category: "slots",
license: "GGL-VA",
risk: "sehr hoch",
},
{
name: "BingBong",
domain: "bingbong.de",
category: "slots",
license: "GGL-VA",
risk: "sehr hoch",
},
{
name: "Slotmagie",
domain: "slotmagie.de",
category: "slots",
license: "GGL-VA",
risk: "sehr hoch",
},
{
name: "Drückglück",
domain: "drueckglueck.de",
category: "slots",
license: "GGL-VA",
risk: "sehr hoch",
},
{
name: "Hyperino",
domain: "hyperino.de",
category: "slots",
license: "GGL-VA",
risk: "sehr hoch",
},
{
name: "Löwen Play",
domain: "loewenplay.de",
category: "slots",
license: "GGL-VA",
risk: "sehr hoch",
},
{
name: "Sunmaker",
domain: "sunmaker.de",
category: "slots",
license: "GGL-VA",
risk: "sehr hoch",
},
// Poker
{
name: "PokerStars",
domain: "pokerstars.de",
category: "poker",
license: "GGL-PK",
risk: "hoch",
},
{
name: "GGPoker",
domain: "ggpoker.de",
category: "poker",
license: "GGL-PK",
risk: "hoch",
},
{
name: "888poker",
domain: "888poker.de",
category: "poker",
license: "GGL-PK",
risk: "hoch",
},
// Illegale / häufig genutzte ohne DE-Lizenz
{
name: "Stake",
domain: "stake.com",
category: "casino",
license: "keine (Curaçao)",
risk: "extrem",
},
{
name: "Rollbit",
domain: "rollbit.com",
category: "casino",
license: "keine",
risk: "extrem",
},
{
name: "Roobet",
domain: "roobet.com",
category: "casino",
license: "keine (Curaçao)",
risk: "extrem",
},
{
name: "Gamdom",
domain: "gamdom.com",
category: "casino",
license: "keine (Curaçao)",
risk: "extrem",
},
{
name: "CSGORoll",
domain: "csgoroll.com",
category: "casino",
license: "keine",
risk: "extrem",
},
{
name: "Duelbits",
domain: "duelbits.com",
category: "casino",
license: "keine (Curaçao)",
risk: "extrem",
},
];
export default defineEventHandler(async (event) => {
const query = getQuery(event);
const category = query.category as string | undefined;
let providers = [...GGL_PROVIDERS];
// Optionale DB-Erweiterung: community-gemeldete Anbieter
try {
const db = usePrisma();
const data = await db.blocklistDomain.findMany({
where: { isActive: true, reportCount: { gt: 5 } },
select: { domain: true, source: true },
take: 50,
});
for (const d of data) {
if (!providers.find((p) => p.domain === d.domain)) {
providers.push({
name: d.domain.replace(/\.\w+$/, ""),
domain: d.domain,
category: "casino",
license: "unbekannt",
risk: "hoch",
});
}
}
} catch {
// DB nicht erreichbar → nur statische Daten
}
// Filter nach Kategorie
if (category && category !== "all") {
providers = providers.filter((p) => p.category === category);
}
return {
total: providers.length,
providers,
source: "GGL Whitelist + Community Reports",
lastUpdated: "2026-04-01",
};
});