import { useState } from 'react'; import type { EndpointSignal, Observation } from '@uptime/contracts'; const providerNames = { cloudflare: 'Cloudflare', cloudfront: 'CloudFront', fastly: 'Fastly', vercel: 'Vercel', } as const; const continentNames = { africa: 'Africa', asia: 'Asia', europe: 'Europe', north_america: 'North America', oceania: 'Oceania', south_america: 'South America', } as const; export interface EndpointEvidenceSummary { finalUrl: string | null; finalHostname: string | null; provider: string | null; reportedEdge: string | null; inferredContinent: string | null; evidenceHeader: string | null; parserVersion: string | null; signals: EndpointSignal[]; } export function summarizeEndpointEvidence(item: Observation): EndpointEvidenceSummary { const evidence = item.endpointEvidence; const primary = evidence?.primaryCdn; let fallbackHostname: string | null = null; if (item.finalUrl) { try { fallbackHostname = new URL(item.finalUrl).hostname; } catch { // The API contract validates this URL. Keep the UI resilient to old data anyway. } } return { finalUrl: item.finalUrl, finalHostname: evidence?.finalHostname ?? fallbackHostname, provider: primary ? providerNames[primary.provider] : null, reportedEdge: primary?.reportedEdge ?? null, inferredContinent: primary?.inferredContinent ? continentNames[primary.inferredContinent] : null, evidenceHeader: primary?.evidenceHeader ?? null, parserVersion: primary?.parserVersion ?? null, signals: evidence?.signals ?? [], }; } export function truncateEndpointValue(value: string, maxLength = 120): string { if (value.length <= maxLength) return value; return `${value.slice(0, Math.max(0, maxLength - 1))}…`; } export function EndpointEvidence({ item }: { item: Observation }) { const summary = summarizeEndpointEvidence(item); return (
Final URL {summary.finalUrl ? truncateEndpointValue(summary.finalUrl) : 'Unknown'} Normalized hostname {summary.finalHostname ?? 'Unknown'}
CDN response evidence {summary.provider ? ( <> {summary.provider} · {summary.reportedEdge} {summary.inferredContinent ? `Inferred continent: ${summary.inferredContinent}` : 'Inferred continent: Unknown'}{' '} · Provider-reported Header: {summary.evidenceHeader} · Parser {summary.parserVersion} ) : ( No CDN evidence reported )}
); } function RawSignals({ signals }: { signals: EndpointSignal[] }) { return (
Response signals ({signals.length}) {signals.length === 0 ? (

No allowlisted response signals.

) : ( )}
); } function SignalRow({ signal }: { signal: EndpointSignal }) { const [copyState, setCopyState] = useState<'idle' | 'copied' | 'unavailable'>('idle'); async function copyValue() { if (!navigator.clipboard?.writeText) { setCopyState('unavailable'); return; } try { await navigator.clipboard.writeText(signal.value); setCopyState('copied'); } catch { setCopyState('unavailable'); } } return (
  • {signal.name} {truncateEndpointValue(signal.value)}
  • ); }