export interface ActiveRenderers { livestream: boolean; sidebar: boolean; } export interface PreRollVideo { enabled: boolean; rate_limit: number; skip_time: number; } export interface Ads { pre_roll_video: PreRollVideo; sidebar_ad_duration: number; sidebar_ad_frequency: number; sidebar_ad_initial_delay: number; } export interface Header { background: string; logo: string; logo_link: string; mobile_logo: string; } export interface Video { background: string; kind: string; } export interface Artwork { header: Header; video: Video; } export interface Card { active: boolean; card: { _id: string; slug: string; }; } export interface Video2 { _id: string; data: {name: string}; slug: string; } export interface Schedule { array_id: string; duration: number; end_time: string; kind: 'video' | 'playlist'; repeat: 'none' | 'daily' | 'weekly'; show_countdown: boolean; start_time: string; video: {_id: string}; } export interface Live { schedule: Schedule[]; live_streams: Array<{_id: string}>; } export interface Playlist { _id: string; } interface VideoContent { array_id: string; kind: 'playlist' | 'video'; playlist?: {_id: string}; // only if kind is playlist video?: {_id: string}; // only if kind is video, obvi } interface OfflineGrid { mode: 'grid'; video_content: VideoContent[]; } interface OfflineTv { kind: 'playlist' | 'video'; mode: 'tv'; video_content: VideoContent[]; playlist?: {_id: string}; // only if kind is playlist video?: {_id: string}; // only if kind is video, obvi } export interface Offline { kind: string; video: { _id: string; }; mode: string; video_content: VideoContent[]; } export interface Content { live: Live; offline: OfflineGrid | OfflineTv; } export interface CopyOverride { array_id: string; new_copy: string; original_copy: string; } export interface Countdown { start_time: string; title: string; } export interface CustomVideoOverlay { enabled: boolean; url: string; } export interface Gate2 { kind: string; login_message: string; name: string; title: string; } export interface Gate { active: boolean; gate: Gate2; kind: string; stored_login_gate_id: string; } export interface Data3 { name: string; } export interface Video4 { _id: string; data: Data3; slug: string; } export interface Schedule2 { all_day: string; duration: number; end_time: string; kind: string; repeat: string; start_date: string; start_time: string; video: Video4; } export interface Seo { title: string; } export interface Sidebar { _id: string; slug: string; seo: Seo; } export interface WelcomeScreen { active: boolean; duration: number; image: string; mobile_image: string; } export interface Data { ads: Ads; artwork: Artwork; card: Card; channel_select_active_image_url: string; content: Content; copy_override: CopyOverride[]; countdown: Countdown; custom_video_overlay: CustomVideoOverlay; default_mode: string; gate: Gate; name: string; schedule: Schedule2[]; sidebar: Sidebar[]; welcome_screen: WelcomeScreen; } export interface Renderer { created: number; duration: number; id: string; kind: string; last_modified: number; name: string; thumbnail: string; title: string; type: string; } export interface LivestreamDoc { renderer: Renderer; } export interface Livestream { channel_id: string; livestream_doc: LivestreamDoc; livestream_published: boolean; livestream_url: string; provider: string; } export interface Item { array_id: string; id: string; } export interface Sidebar2 { items: Item[]; } export interface Renderers { livestream: Livestream; sidebar: Sidebar2; } export interface Seo2 { description: string; image: string; keywords: string; title: string; } export interface ChannelItem { _id: string; active_renderers: ActiveRenderers; collection: string; created: number; data: Data; last_modified: number; renderers: Renderers; seo: Seo; site_id: string; slug: string; type: 'channel'; }