{"version":3,"sources":["jsdelivr-header.js","/npm/@drippy-music/yt-music-api@1.1.5/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,IAAE,KAAQ,QAAQ,UAClB,MAAQ,QAAQ,SAAS,QACzB,QAAU,wCAEV,MAAQ,EAAG,cAAc,GAAI,uBAC/B,MAAM,EAAO,EAAY,KAAI,IACzB,MAAM,0CAAE,GAA8C,GAC9C,MAAQ,KAAM,EAAS,KAAS,EAExC,OAAO,EAAO,KAAI,GAAK,EAAE,OAAM,KAAK,GAAG,IACxC,KAAI,GAAK,EAAE,MAAM,OAAM,OAAO,KAAI,GAAK,EAAE,SAE5C,IAAK,CAAC,SAAU,WAAY,SAAS,SAAS,EAAK,IAAK,CACpD,MAAQ,QAAS,GAAO,EAClB,EAAW,MACb,MAAM,EAAS,EAAK,GAAG,MAAM,KAE7B,OAA4B,GAApB,OAAO,EAAO,IAAY,OAAO,EAAO,GACnD,EAJgB,GAMjB,OAAQ,EAAK,IACT,IAAK,QACD,MAAO,CAAE,KAAI,MAAO,EAAK,GAAI,QAAS,CAAC,EAAK,IAAK,YACrD,IAAK,OACD,MAAM,EAAU,EAAK,GAAG,MAAM,SACzB,KAAI,GAAK,EAAE,SAEhB,MAAO,CAAE,KAAI,MAAO,EAAK,GAAI,UAAS,MAAO,EAAK,GAAI,YAElE,GAGE,MAAS,GAUJ,IATK,KAAK,aACb,GAAU,IAAI,UAEJ,KAAK,QACf,GAAU,IAAI,UAEH,KAAK,SAChB,GAAU,IAAI,QAGb,QAAO,QAAW,IAAN,IAGf,KAAO,CAAC,EAAM,EAAQ,MACxB,MAAM,EAAS,EAAM,QAAO,GAAK,uBAAwB,IACpD,MAAK,IACF,MACI,oBAAsB,OAAO,KAAE,KAC/B,IACG,KAAE,IAAU,EAEnB,OAAO,GAAQ,CAAI,IAG3B,YAAe,IAAX,EACO,EAA2B,mBAAE,SAAS,KAAI,GAC7C,EAAmC,kCACrC,QAAO,KAAO,mCAAoC,KAGjD,EAAE,EAGb,OAAO,QAAU,MAAM,EAEnB,WAAA,CAAY,GACR,KAAK,QAAU,CACnB,CAEA,YAAM,CAAO,GACT,MAAM,EAAO,EAAa,OAAO,CAAE,UAC7B,QAAY,MAAM,KAAK,UAAW,EAAM,CAC1C,QAAS,QACT,OAAQ,CAAE,IAAK,KAAK,SACpB,QAAS,CAAE,OAAU,+BAGnB,EAAW,IACb,EAAI,KAAM,gGAAiG,IAG/G,OAAO,MAAM,EACjB,CAEA,aAAO,CAAO,EAAM,GAChB,MAAM,EAAS,CACX,QAAS,CACL,OAAQ,CACJ,WAAY,YACZ,cAAe,SAK3B,OADI,IAAQ,EAAe,OAAI,GACxB,OAAO,OAAO,EAAQ,EACjC","file":"/npm/@drippy-music/yt-music-api@1.1.5/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@drippy-music/yt-music-api@1.1.5/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const { get } = require('lodash');\r\nconst axios = require('axios').default;\r\nconst api_url = 'https://music.youtube.com/youtubei/v1'\r\n\r\nconst track = ({ flexColumns = [], playlistItemData }) => {\r\n    const runs = flexColumns.map(e => {\r\n        const { musicResponsiveListItemFlexColumnRenderer } = e;\r\n        const { text: { runs: values = [] } } = musicResponsiveListItemFlexColumnRenderer;\r\n\r\n        return values.map(e => e.text).join('');\r\n    }).map(e => e.split('•')).flat().map(e => e.trim());\r\n\r\n    if (!['Artist', 'Playlist', 'Album'].includes(runs[1])) {\r\n        const { videoId: id } = playlistItemData;\r\n        const duration = (() => {\r\n            const values = runs[4].split(':');\r\n\r\n            return (Number(values[0]) * 60) + Number(values[1]);\r\n        })();\r\n\r\n        switch (runs[1]) {\r\n            case 'Video':\r\n                return { id, title: runs[0], artists: [runs[2]], duration };\r\n            case 'Song':\r\n                const artists = runs[2].split(/[,&]/g)\r\n                    .map(e => e.trim());\r\n\r\n                return { id, title: runs[0], artists, album: runs[3], duration };\r\n        }\r\n    }\r\n};\r\n\r\nconst parse = (contents) => {\r\n    const top = find('Top result',\r\n        contents).map(track);\r\n\r\n    const songs = find('Songs',\r\n        contents).map(track);\r\n\r\n    const videos = find('Videos',\r\n        contents).map(track);\r\n\r\n    return [...top, ...songs, ...videos]\r\n        .filter(e => e !== undefined);\r\n};\r\n\r\nconst find = (type, array = []) => {\r\n    const object = array.filter(e => 'musicShelfRenderer' in e)\r\n        .find(e => {\r\n            const {\r\n                musicShelfRenderer: { title: { runs } }\r\n            } = e;\r\n            const [{ text }] = runs;\r\n\r\n            return text == type;\r\n        });\r\n\r\n    if (object !== undefined) {\r\n        return object['musicShelfRenderer'].contents.map(e =>\r\n            e['musicResponsiveListItemRenderer']\r\n        ).filter(e => !('musicItemRendererDisplayPolicy' in e));\r\n    }\r\n\r\n    return [];\r\n}\r\n\r\nmodule.exports = class YoutubeMusic {\r\n\r\n    constructor(api_key) {\r\n        this.api_key = api_key;\r\n    }\r\n\r\n    async search(query) {\r\n        const data = YoutubeMusic.assign({ query });\r\n        const res = await axios.post('/search', data, {\r\n            baseURL: api_url,\r\n            params: { key: this.api_key },\r\n            headers: { 'Origin': 'https://music.youtube.com' }\r\n        });\r\n\r\n        const contents = get(\r\n            res.data, 'contents.tabbedSearchResultsRenderer.tabs[0].tabRenderer.content.sectionListRenderer.contents', []\r\n        );\r\n\r\n        return parse(contents);\r\n    }\r\n\r\n    static assign(data, params) {\r\n        const object = {\r\n            context: {\r\n                client: {\r\n                    clientName: 'WEB_REMIX',\r\n                    clientVersion: '0.1'\r\n                }\r\n            }\r\n        };\r\n        if (params) object['params'] = params;\r\n        return Object.assign(object, data);\r\n    }\r\n\r\n}"]}