import { Link, useParams } from "react-router"; import type { Endpoint, Evidence, PackageRow, Variable } from "../api"; import { useFetch, fmtDate } from "../hooks"; import { Badge, ErrorBox, JsonTree, KV, Loading, Td } from "../components/ui"; import { EvidenceList } from "../components/shared"; type V = { id: string; api_id: string; api_name: string; api_slug: string; version: string; lifecycle: string; contract: Record; contract_hash: string; source_kind: string; source_url: string | null; changelog: string | null; created_by: string | null; created_at: string; endpoints: Endpoint[]; variables: Variable[]; evidence: Evidence[]; packages: PackageRow[] }; export default function VersionDetail() { const { id } = useParams(); const { data, error, loading } = useFetch(`versions/${id}`); if (loading) return ; if (error) return ; if (!data) return null; return (

{data.api_name} — version {data.version}

{data.api_name}], ["Contract hash", {data.contract_hash}], ["Source", `${data.source_kind} ${data.source_url ?? ""}`], ["Created", `${fmtDate(data.created_at)} by ${data.created_by ?? "system"}`], ["Endpoints", data.endpoints.length], ["Variables", data.variables.length]]} />

Packages compiled from this version

{data.packages.length ? data.packages.map((k) =>
{k.akp_id} v{k.version}
) : none}

Endpoints

{data.endpoints.map((e) => )}
MethodPathOperationInferred
{e.method}{e.path}{e.operation_id}{e.inferred ? : "no"}

Evidence

Canonical contract (immutable)

); }