/** A track entry: [timestamp_seconds, artist, title] */ export type Track = [number, string, string]; /** The summary shape used in sidebar listings. */ export interface StreamSummary { id: string; stream_date: number; filename: string; title: string | null; tags: string[]; length_seconds: number; } /** The full stream shape used on the detail/player page. */ export interface Stream extends StreamSummary { format: string; description: string | null; // rendered at page load, so absent straight out of the database descriptionHtml?: string; tracks: Track[]; } /** Partial stream downloads, as well as associated etag for cache validation. */ export interface PartialDownload { received: number; total: number; etag: string | null; }