import { NextResponse, type NextRequest } from 'next/server'; import { requireAdminApi } from '@/lib/auth/admin-guard'; import { parsePageParam, parsePerPageParam } from '@/lib/admin/validators'; import { getTunnelsList } from '@/lib/admin/list'; export const runtime = 'nodejs'; export const dynamic = 'force-dynamic'; export async function GET(req: NextRequest) { const auth = await requireAdminApi(); if (!auth.ok) return auth.response; const url = new URL(req.url); const page = parsePageParam(url.searchParams.get('page'), 1); const perPage = parsePerPageParam(url.searchParams.get('perPage'), 25, 100); const search = url.searchParams.get('search') ?? ''; const status = url.searchParams.get('status'); // active|inactive|over_quota try { const { tunnels, total } = await getTunnelsList({ page, perPage, search, status, }); return NextResponse.json({ tunnels, total, page, perPage }); } catch (e) { return NextResponse.json({ error: (e as Error).message }, { status: 500 }); } }