export type ProviderType = 'm3u' | 'xtream'; export interface IPTVProvider { id: string; name: string; type: ProviderType; createdAt: string; lastSync?: string; playlistUrl?: string; serverUrl?: string; username?: string; password?: string; epgUrl?: string; accountInfo?: XtreamAccountInfo; } export interface XtreamAccountInfo { status: string; expirationDate?: string; isTrial: boolean; maxConnections: number; activeConnections?: number; createdAt?: string; serverTimezone?: string; } export type ContentType = 'live' | 'movie' | 'series'; export interface BaseContent { id: string; name: string; streamUrl: string; logoUrl?: string; category?: string; providerId: string; type: ContentType; /** Order number from provider (higher = more recently added) */ added?: number; /** Content metadata tags (e.g., "dubbed", "subtitled") */ tags?: string[]; /** TMDb title (clean, standardized title) - used for display when available */ tmdbTitle?: string; } export interface Channel extends BaseContent { type: 'live'; tvgId?: string; tvgName?: string; groupTitle?: string; } export interface Movie extends BaseContent { type: 'movie'; year?: number; duration?: number; description?: string; rating?: number; containerExtension?: string; coverUrl?: string; } export interface Series extends BaseContent { type: 'series'; coverUrl?: string; description?: string; rating?: number; cast?: string; director?: string; genre?: string; releaseDate?: string; year?: number; } export type Content = Channel | Movie | Series; export interface EPGProgram { id: string; channelId: string; title: string; description?: string; start: string; end: string; category?: string; image?: string; episode?: { season?: number; episode?: number; title?: string; }; } export interface EPGChannel { id: string; displayName: string; icon?: string; channelIds: string[]; } export interface EPGSource { id: string; name: string; url: string; enabled: boolean; priority: number; timezone?: string; lastFetch?: string; lastError?: string; } export interface EPGCacheEntry { channelId: string; programs: EPGProgram[]; fetchedAt: string; expiresAt: string; } export interface XtreamCategory { category_id: string; category_name: string; parent_id: number; } export interface XtreamChannel { num: number; name: string; stream_type: string; stream_id: number; stream_icon?: string; epg_channel_id?: string; category_id: string; } export interface XtreamVOD { num: number; name: string; stream_type: string; stream_id: number; stream_icon?: string; category_id: string; container_extension?: string; rating?: string; rating_5based?: number; releaseDate?: string; duration?: string; description?: string; } export interface XtreamSeries { num: number; name: string; series_id: number; cover?: string; plot?: string; cast?: string; director?: string; genre?: string; releaseDate?: string; rating?: string; rating_5based?: number; category_id: string; } export interface XtreamSeriesInfo { info: { name: string; cover?: string; plot?: string; cast?: string; director?: string; genre?: string; releaseDate?: string; rating?: string; }; episodes: { id: string; title: string; container_extension: string; info: { plot?: string; duration?: string; movie_image?: string; releaseDate?: string; }; }[]; } export interface XtreamUserInfo { username: string; password: string; status: string; exp_date: string; is_trial: string; active_cons: string; max_connections: string; } export interface XtreamServerInfo { url: string; port: string; https_port: string; server_protocol: string; rtmp_port: string; timezone: string; } export interface XtreamAuthResponse { user_info: XtreamUserInfo; server_info: XtreamServerInfo; } export type WatchContentType = 'movie' | 'series' | 'channel' | 'episode'; export interface WatchProgress { id: string; userId?: string; profileId?: string; contentId: string; contentType: WatchContentType; episodeId?: string; seasonNumber?: number; episodeNumber?: number; progressSeconds: number; totalSeconds?: number; progressPercentage: number; completed: boolean; lastWatchedAt: string; createdAt: string; updatedAt: string; } export interface WatchProgressInput { contentId: string; contentType: WatchContentType; episodeId?: string; seasonNumber?: number; episodeNumber?: number; progressSeconds: number; totalSeconds?: number; completed?: boolean; } export * from './collections'; //# sourceMappingURL=index.d.ts.map