export type BPLiveStreamSource = { type: 'bplive'; streamId: number; }; export type BPLiveClipSource = { type: 'bplive'; clipId: number; preferredOrientation?: 'landscape' | 'portrait'; }; export type BPLiveSource = BPLiveStreamSource | BPLiveClipSource; export interface BPLiveConfig { discoveryUrl: string; authToken?: string; } export interface BPLiveChannel { id: number; slug: string; user_login: string; title: string; description: string | null; cover_image: string | null; is_active: boolean; follower_count: number; is_following: boolean; nick_name: string; display_name: string; bio: string; avatar_url: string | null; cover_photo_url: string | null; status: string; timezone: string; links: Array<{ id: number; provider: string | null; url: string; last_updated: string; }>; } export interface BPLiveStreamTag { id: number; name: string; } export interface BPLiveVodMedia { file_name: string; mime_type: string | null; original: string; thumb: string | null; collection_name: string | null; duration: number; created_at: string; media_type: string; dimension: { width: number; height: number; }; } export interface BPLiveStreamMedia { vod: BPLiveVodMedia[]; clips: unknown[]; } export interface BPLiveLiveKitPlayerSource { provider: 'livekit'; url: string; token: string; room?: string; } export interface BPLiveNanoPlayerSource { provider: 'nanoplayer'; id: string; h5live: { server: { websocket: string; hls: string; }; rtmp: { url: string; streamname: string; }; security: { expires: string; tag: string; token: string; options: string; }; }; startIndex: number; options: { switch: { method: string; pauseOnError: boolean; forcePlay: boolean; fastStart: boolean; timeout: number; incTiming: boolean; timestampReset: boolean; }; adaption: { rule: string; }; }; entries: Array<{ index: number; label: string; tag: string; info: { bitrate: number; width: number; height: number; framerate: number; }; h5live: { server: { websocket: string; hls: string; }; rtmp: { url: string; streamname: string; }; security: { expires: string; tag: string; token: string; options: string; }; }; }>; } export type BPLivePlayerSource = BPLiveLiveKitPlayerSource | BPLiveNanoPlayerSource; export interface BPLiveActiveStream { id: number; title: string; viewer_count?: number; started_at: string; player_source: BPLivePlayerSource; tags?: BPLiveStreamTag[]; description?: string; } export interface BPLiveStream { id: number; type: string; title: string; description: string | null; stream_name: string; started_at: string | null; ended_at: string | null; cover_photo: string | null; tags: BPLiveStreamTag[]; channel: BPLiveChannel; created_at: string; created_at_formated: string; updated_at: string; scheduled_at: string | null; is_expired: boolean; is_locked: boolean; media: BPLiveStreamMedia; /** Player source returned directly from /streams/{id} endpoint */ player_source?: BPLivePlayerSource; /** Active stream (used in channel endpoint responses) */ active_stream?: BPLiveActiveStream; } export interface BPLiveStreamResponse { data: BPLiveStream; } export interface BPLiveClipMedia { id: number; url: string; type: 'preview' | 'clip'; orientation: 'landscape' | 'portrait'; width: number; height: number; duration: number; thumbnail: string | null; created_at: string; } export interface BPLiveClipMetadata { width: number; height: number; duration: number; end_time: number; start_time: number; } export interface BPLiveClip { id: number; title: string; metadata: BPLiveClipMetadata; context: Array<{ width: number; height: number; duration: number; thumb_id: number; }>; status: string; media: BPLiveClipMedia[]; nick_name: string; privacy: string; created_at: string; playlists: unknown[]; channel: BPLiveChannel; } export interface BPLiveClipResponse { data: BPLiveClip; } export declare function isBPLiveStreamSource(source: unknown): source is BPLiveStreamSource; export declare function isBPLiveClipSource(source: unknown): source is BPLiveClipSource; export declare function isBPLiveSource(source: unknown): source is BPLiveSource; //# sourceMappingURL=types.d.ts.map