import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { Ban } from "lucide-react" import { securityService, type ApiKey } from "@/services" import { toast } from "sonner" import { format } from "date-fns" import type { ApiError } from "@/types/error.types" export default function ApiKeysPage() { const queryClient = useQueryClient() const { data: apiKeys, isLoading } = useQuery({ queryKey: ['admin', 'security', 'api-keys'], queryFn: () => securityService.getAllApiKeys(), }) const revokeMutation = useMutation({ mutationFn: (id: string) => securityService.revokeApiKey(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin', 'security', 'api-keys'] }) toast.success("API key revoked successfully") }, onError: (error) => { const apiError = error as ApiError toast.error(apiError.response?.data?.message || "Failed to revoke API key") }, }) return (

API Keys

All API Keys {isLoading ? (
Loading API keys...
) : ( <> Name User Last Used Status Actions {apiKeys?.map((key: ApiKey) => ( {key.name} {key.userId || 'N/A'} {key.lastUsed ? format(new Date(key.lastUsed), 'MMM dd, yyyy') : 'Never'} {key.isActive ? 'Active' : 'Revoked'} {key.isActive && ( )} ))}
{apiKeys?.length === 0 && (
No API keys found
)} )}
) }