{"version":3,"sources":["jsdelivr-header.js","/npm/@nondanee/unblockneteasemusic@0.23.1/provider/match.js"],"names":[],"mappings":"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","file":"/npm/@nondanee/unblockneteasemusic@0.23.1/provider/match.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@nondanee/unblockneteasemusic@0.23.1/provider/match.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 find = require('./find')\nconst request = require('../request')\n\nconst provider = {\n\tnetease: require('./netease'),\n\tqq: require('./qq'),\n\txiami: require('./xiami'),\n\tbaidu: require('./baidu'),\n\tkugou: require('./kugou'),\n\tkuwo: require('./kuwo'),\n\tmigu: require('./migu'),\n\tjoox: require('./joox'),\n\tyoutube: require('./youtube')\n}\n\nconst match = (id, source) => {\n\tlet meta = {}\n\tconst candidate = (source || global.source || ['qq', 'kuwo', 'migu']).filter(name => name in provider)\n\treturn find(id)\n\t.then(info => {\n\t\tmeta = info\n\t\treturn Promise.all(candidate.map(name => provider[name].check(info).catch(() => {})))\n\t})\n\t.then(urls => {\n\t\turls = urls.filter(url => url)\n\t\treturn Promise.all(urls.map(url => check(url)))\n\t})\n\t.then(songs => {\n\t\tsongs = songs.filter(song => song.url)\n\t\tif (!songs.length) return Promise.reject()\n\t\tconsole.log(`[${meta.id}] ${meta.name}\\n${songs[0].url}`)\n\t\treturn songs[0]\n\t})\n}\n\nconst check = url => {\n\tconst song = {size: 0, br: null, url: null, md5: null}\n\treturn Promise.race([request('GET', url, {'range': 'bytes=0-8191'}), new Promise((_, reject) => setTimeout(() => reject(504), 5 * 1000))])\n\t.then(response => {\n\t\tif (!response.statusCode.toString().startsWith('2')) return Promise.reject()\n\t\tif (url.includes('qq.com'))\n\t\t\tsong.md5 = response.headers['server-md5']\n\t\telse if (url.includes('xiami.net') || url.includes('qianqian.com'))\n\t\t\tsong.md5 = response.headers['etag'].replace(/\"/g, '').toLowerCase()\n\t\tsong.size = parseInt((response.headers['content-range'] || '').split('/').pop() || response.headers['content-length']) || 0\n\t\tsong.url = response.url.href\n\t\treturn response.headers['content-length'] === '8192' ? response.body(true) : Promise.reject()\n\t})\n\t.then(data => {\n\t\tconst bitrate = decode(data)\n\t\tsong.br = (bitrate && !isNaN(bitrate)) ? bitrate * 1000 : null\n\t})\n\t.catch(() => {})\n\t.then(() => song)\n}\n\nconst decode = buffer => {\n\tconst map = {\n\t\t3: {\n\t\t\t3: ['free', 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 'bad'],\n\t\t\t2: ['free', 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 'bad'],\n\t\t\t1: ['free', 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 'bad']\n\t\t},\n\t\t2: {\n\t\t\t3: ['free', 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 'bad'],\n\t\t\t2: ['free', 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 'bad']\n\t\t}\n\t}\n\tmap[2][1] = map[2][2]\n\tmap[0] = map[2]\n\n\tlet pointer = 0\n\tif (buffer.slice(0, 4).toString() === 'fLaC') return 999\n\tif (buffer.slice(0, 3).toString() === 'ID3') {\n\t\tpointer = 6\n\t\tconst size = buffer.slice(pointer, pointer + 4).reduce((summation, value, index) => summation + (value & 0x7f) << (7 * (3 - index)), 0)\n\t\tpointer = 10 + size\n\t}\n\tconst header = buffer.slice(pointer, pointer + 4)\n\n\t// https://www.allegro.cc/forums/thread/591512/674023\n\tif (\n\t\theader.length === 4 &&\n\t\theader[0] === 0xff &&\n\t\t((header[1] >> 5) & 0x7) === 0x7 &&\n\t\t((header[1] >> 1) & 0x3) !== 0 &&\n\t\t((header[2] >> 4) & 0xf) !== 0xf &&\n\t\t((header[2] >> 2) & 0x3) !== 0x3\n\t) {\n\t\tconst version = (header[1] >> 3) & 0x3\n\t\tconst layer = (header[1] >> 1) & 0x3\n\t\tconst bitrate = header[2] >> 4\n\t\treturn map[version][layer][bitrate]\n\t}\n}\n\nmodule.exports = match"]}