import Link from "next/link"; import { ArrowDown, ArrowUp, Globe } from "lucide-react"; import { requireAdmin } from "@/lib/session"; import { listDomains, pageNum, str, DOMAIN_SORTS } from "@/lib/queries/admin"; import { formatMs, formatNumber, formatPercent } from "@/lib/format"; import { PageHeader } from "@/components/ui/page-header"; import { Badge } from "@/components/ui/badge"; import { EmptyState } from "@/components/ui/empty-state"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { DateCell, NetworkBadge, Pagination, Panel, ProviderBadge, SearchForm, numCell } from "@/components/admin/primitives"; export const dynamic = "force-dynamic"; const COLS: Array<{ key: (typeof DOMAIN_SORTS)[number]; label: string; right?: boolean }> = [ { key: "domain", label: "Domain" }, { key: "requests", label: "Requests", right: true }, { key: "successRate", label: "Success", right: true }, { key: "blockRate", label: "Blocked", right: true }, { key: "captchaRate", label: "Captcha", right: true }, { key: "avgLatencyMs", label: "Avg latency", right: true }, ]; export default async function AdminDomainsPage({ searchParams }: { searchParams: Promise> }) { await requireAdmin(); const sp = await searchParams; const q = str(sp.q); const sort = str(sp.sort); const dir = str(sp.dir); const page = pageNum(sp.page); const data = await listDomains({ q: q || undefined, sort: sort || undefined, dir: dir || undefined, page }); const sortHref = (key: string) => { const nextDir = data.sort === key && data.dir === "desc" ? "asc" : "desc"; const p = new URLSearchParams(); if (q) p.set("q", q); p.set("sort", key); p.set("dir", nextDir); return `/admin/domains?${p.toString()}`; }; return ( <>