import { isAdminVerified } from '../../utils/mobileReleases' import { getBlacklistStatus, isValidBlacklistNumber } from '../../utils/telephony/blacklist' /** * GET /api/telephony/blacklist?numbers=a,b,c (or ?number=a) * * Admin-only (same gate as blacklist.post.ts). Live FreePBX blacklist status of up to 50 * numbers, read from astdb via AMI DBGet over one session: * { status: 200, available: true, entries: { "": { blocked, description } } } * Fail-soft: when the PBX is unreachable → { status: 200, available: false, entries: {} } * so the UI shows "status unknown" instead of an error. */ export default defineEventHandler(async (event) => { const config = useRuntimeConfig() if ((config as any).asterisk?.enabled !== true) return { status: 200, available: false, entries: {}, message: 'Telefonanlage nicht aktiviert' } const token = await getTokenHelper(event) if (!token) throw createError({ statusCode: 401, statusMessage: 'Unauthorized' }) const admin = await isAdminVerified(event, token) if (!admin) throw createError({ statusCode: 403, statusMessage: 'Nur für Administratoren' }) const q = getQuery(event) const numbers = [...new Set(`${q.numbers || ''},${q.number || ''}`.split(',').map((n) => n.trim()).filter(Boolean))].filter(isValidBlacklistNumber) if (!numbers.length) return { status: 200, available: true, entries: {} } try { return { status: 200, available: true, entries: await getBlacklistStatus(numbers) } } catch (err: any) { console.warn('[blacklist] status failed:', err?.statusMessage || err?.message || err) return { status: 200, available: false, entries: {}, message: err?.statusMessage || 'Telefonanlage nicht erreichbar' } } })