// Typen der JSON-API; Referenz ist notes/api.md. Zeitstempel sind // Unix-Sekunden. export interface Entry { pid: number; uid: number; created_at: number; content: string; filepath: string; reply_to: number; reply_count: number; last_activity: number; deleted: number; bump_count: number; last_bump: number; username: string; avatar: string; // Vorschau des ersten Links, sobald der Server sie geholt hat. preview?: LinkPreview; // Nur in Feed und Antwortliste: jüngster Beitrag im Teilbaum, skipped = // Beiträge auf dem Pfad dazwischen (0 = direkte Antwort). latest?: { entry: Entry; skipped: number }; } // Vom Server geholte Linkvorschau; thumb liegt lokal (leer = kein Bild). export interface LinkPreview { url: string; kind: "youtube" | "page"; title: string; site: string; thumb: string; } export interface Thread { entry: Entry; ancestors: Entry[]; replies: Entry[]; } export type VoteMode = "yes" | "no"; export interface VoteTally { pid: number; yes: number; no: number; selected: VoteMode | "none"; } export interface BumpResult { pid: number; bump_count: number; last_bump: number; last_activity: number; retry_after: number; } // GET /api/user/info -- das eigene Konto. export interface Me { uid: number; username: string; created_at: number; last_login: number; avatar: string; } // GET /api/u/{username}/info -- öffentliches Profil. export interface Profile { uid: number; username: string; created_at: number; avatar: string; } export interface StatsDetail { users: number; entries: number; toplevel: number; replies: number; votes: { yes: number; no: number }; impressions_total: number; visitors_total: number; entries_per_day_30: number; } // Fertig gerenderte SVG-Diagramme der Statistik-Seite (einmal täglich, // charts.go), je schmal (600) und breit (1200). export interface ChartPair { narrow: string; wide: string; } export interface StatsCharts { generated: number; charts: Record<"impressions" | "networks" | "entries" | "weekday" | "hour", ChartPair>; } // Fehlerformat: {"error": {...}}, bei manchen Fehlern mit Zusatzfeldern // daneben (Repost-Cooldown: retry_after, bump_count). export interface ApiErrorBody { code: string; message: string; field?: string; fields?: Record; }