export type SourceKind = "youtube" | "soundcloud" | "direct" | "local"; export type LoopMode = "off" | "track" | "queue"; export type PlayerStatus = "idle" | "connecting" | "buffering" | "playing" | "paused"; export interface Track { id: string; title: string; author: string | null; duration: number; isLive: boolean; url: string; thumbnail: string | null; source: SourceKind; requestedBy: { id: string; username: string }; } export interface PlayerState { serverId: string; serverName: string | null; voiceChannelId: string | null; voiceChannelName: string | null; status: PlayerStatus; current: Track | null; position: number; queue: Track[]; history: Track[]; volume: number; loop: LoopMode; videoEnabled: boolean; updatedAt: number; } export interface VoiceChannel { id: string; name: string; } export interface ServerRef { id: string; name: string; iconUrl: string | null; } export interface Me { user: { id: string; username: string }; servers: ServerRef[]; features: { localLibrary: boolean; requireListener: boolean; video: boolean }; } export interface ServerStateResponse { state: PlayerState; voiceChannels: VoiceChannel[]; yourVoiceChannel: VoiceChannel | null; canControl: boolean; }