export function detectMediaTypeFromUrl(url) { try { const u = new URL(url); const host = u.hostname.toLowerCase(); const path = u.pathname.toLowerCase(); if (host.includes('youtube.com') || host.includes('youtu.be')) return 'youtube'; if (/\.(mp4|webm|ogg|mkv|mov|m4v)$/.test(path)) return 'video'; if (/\.(mp3|wav|aac|m4a|flac|ogg|opus)$/.test(path)) return 'audio'; } catch {} if (/^[a-zA-Z0-9_-]{11}$/.test(url)) return 'youtube'; return 'unknown'; } export function safeTitle(track) { return track?.title || track?.meta?.title || track?.url || 'Untitled'; } export function prettyError(e) { if (!e) return 'Unknown error'; if (typeof e === 'string') return e; if (e.response && e.response.data && e.response.data.error) return e.response.data.error; if (e.message) return e.message; return JSON.stringify(e); } export function getThumb(meta) { if (!meta) return null; return ( meta.thumb || meta.image || meta.thumbnail || meta.song_image || meta.album_image || meta.image_url || meta?.images?.cover || meta?.images?.[0] || null ); }