import * as __ns_218 from 'axios' const axios = __ns_218.default import * as __ns_219 from 'node:url' const pathToFileURL = __ns_219.pathToFileURL async function getLyrics(queryOrTrack, artist = "") { if (!queryOrTrack || !queryOrTrack.trim()) { throw new Error("Parameter 'q' (judul lagu atau link Spotify) wajib diisi."); } let trackName = String(queryOrTrack).trim(); let artistName = String(artist || "").trim(); if (trackName.includes("spotify.com/track/")) { const match = trackName.match(/track\/([a-zA-Z0-9]+)/); if (match) { try { const oembed = await axios.get( `https://open.spotify.com/oembed?url=https://open.spotify.com/track/${match[1]}`, { timeout: 5000 } ); trackName = oembed.data?.title?.replace(/\(feat\..*?\)/i, "").trim() || trackName; const resEmbed = await axios.get(`https://open.spotify.com/embed/track/${match[1]}`, { timeout: 5000 }); const matchArtist = resEmbed.data.match(/"artists":\[\{"name":"([^"]+)"/); if (matchArtist && !artistName) { artistName = matchArtist[1]; } } catch (_) {} } } try { const res = await axios.get("https://lrclib.net/api/get", { params: { track_name: trackName, artist_name: artistName, }, headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" }, timeout: 10000, }); if (res.data && (res.data.plainLyrics || res.data.syncedLyrics)) { const dur = res.data.duration; return { status: true, trackName: res.data.trackName || trackName, artistName: res.data.artistName || artistName || "Unknown Artist", albumName: res.data.albumName || null, duration: dur || null, durationFormatted: dur ? `${Math.floor(dur / 60)}:${String(Math.floor(dur % 60)).padStart(2, "0")}` : null, hasSynced: Boolean(res.data.syncedLyrics), plainLyrics: res.data.plainLyrics || null, syncedLyrics: res.data.syncedLyrics || null }; } } catch (_) {} try { const searchRes = await axios.get("https://lrclib.net/api/search", { params: { q: `${trackName} ${artistName}`.trim(), }, headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" }, timeout: 10000, }); if (Array.isArray(searchRes.data) && searchRes.data.length > 0) { const best = searchRes.data[0]; const dur = best.duration; return { status: true, trackName: best.trackName, artistName: best.artistName || "Unknown Artist", albumName: best.albumName || null, duration: dur || null, durationFormatted: dur ? `${Math.floor(dur / 60)}:${String(Math.floor(dur % 60)).padStart(2, "0")}` : null, hasSynced: Boolean(best.syncedLyrics), plainLyrics: best.plainLyrics || null, syncedLyrics: best.syncedLyrics || null }; } } catch (err) { throw new Error(err.message || "Gagal mengambil lirik lagu."); } throw new Error("Lirik lagu tidak ditemukan."); } const lyricsV2 = getLyrics; const __dflt_2 = { getLyrics, lyricsV2 }; if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { const __exports = { getLyrics: getLyrics, lyricsV2: lyricsV2, default: __dflt_2 } const __fns = Object.fromEntries(Object.entries(__exports).filter(([, v]) => typeof v === 'function')) const __names = Object.keys(__fns) if (__names.length === 0) { console.log('Tidak ada fungsi yang bisa di-demo. Import modul ini dari kode lain.') } else { const __search = __names.find((n) => /search|cari/i.test(n)) const __name = __search || __names[0] const __fn = __fns[__name] const __isClass = /^class\s/.test(Function.prototype.toString.call(__fn)) const __defaultArgs = (() => { const n = __name.toLowerCase() if (/emoji/.test(n)) return [{ emoji: '😀😃' }] if (/textpro|generate.*text|effect/.test(n)) return ['neon', 'Hello'] if (/image|wallpaper|search|query|anime|movie|manga|news|lyrics|wiki|quote|stalk|detail/.test(n)) return ['naruto'] if (/download|youtube|video|audio|music|spotify|tiktok|instagram|facebook|twitter|reels|terabox|media/.test(n)) return ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'] if (/dork/.test(n)) return ['example.com', 'documents'] if (/tts|speech|prompt|chat|ask|translate/.test(n)) return ['Hello world'] if (/parse|format|normalize|list|features/.test(n)) return [] return ['test'] })() let __args = __defaultArgs if (process.argv.length > 2) __args = process.argv.slice(2).map((a) => { try { return JSON.parse(a) } catch { return a } }) if (__args.length === 0 && !__search && !__isClass && __fn.length > 0) { console.log('Fungsi: ' + __names.join(', ')) console.log('Contoh: node ' + "lyrics-v2.js" + ' ' + __name + ' ') } else { ;(async () => { try { const r = __isClass ? new __fn(...__args) : await __fn(...__args) console.log(JSON.stringify(r, null, 2)) } catch (e) { console.error('Error: ' + (e && e.message ? e.message : e)) process.exitCode = 1 } })() } } }