import { useQuery, useQueryClient } from "@tanstack/react-query"; import { ExternalLink, Trash2 } from "lucide-react"; import { useState } from "react"; import { BackLink } from "@/client/components/ui/back-link"; import { Card } from "@/client/components/ui/card"; import { ConfirmButton } from "@/client/components/ui/confirm-button"; import { PageError } from "@/client/components/ui/page-error"; import { PageHeader } from "@/client/components/ui/page-header"; import { PanelRow } from "@/client/components/ui/row"; import { Skeleton } from "@/client/components/ui/skeleton"; import { useRequireSession } from "@/client/hooks/use-auth-guard"; import { formatDate } from "@/client/lib/format"; import { apiRequest, responseMessage } from "@/client/lib/http"; import { fetchJson, queryKeys } from "@/client/lib/query"; interface ConnectedApp { id: string; client_id: string; client_name: string | null; client_uri: string | null; scopes: string[]; granted_at: string | null; updated_at: string | null; } const AppRowsSkeleton = ({ count }: { count: number }) => (
{app.client_name ?? app.client_id}
{app.client_uri ? ( visit ) : null}{app.client_id}
{Array.isArray(app.scopes) && app.scopes.length > 0 ? (
{s}
))}
Authorized {formatDate(app.granted_at)}
) : null}No third-party apps authorized yet.
: null}