From ee518dc8f3b24b4f579479b70019724a42e5a7b3 Mon Sep 17 00:00:00 2001 From: Xmader Date: Tue, 17 Nov 2020 12:10:57 -0500 Subject: [PATCH] v0.15.6 --- dist/main.js | 128 ++++++++++++++++++---------------------------- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 53 insertions(+), 79 deletions(-) diff --git a/dist/main.js b/dist/main.js index 1d83472..c24cced 100644 --- a/dist/main.js +++ b/dist/main.js @@ -5,7 +5,7 @@ // @supportURL https://github.com/Xmader/musescore-downloader/issues // @updateURL https://msdl.librescore.org/install.user.js // @downloadURL https://msdl.librescore.org/install.user.js -// @version 0.15.5 +// @version 0.15.6 // @description download sheet music from musescore.com for free, no login or Musescore Pro required | 免登录、免 Musescore Pro,免费下载 musescore.com 上的曲谱 // @author Xmader // @match https://musescore.com/*/* @@ -26411,7 +26411,7 @@ Please pipe the document into a Node stream.\ return `/ipns/${IPNS_KEY}/${this.idLastDigit}/${this.id}.mscz`; }, get msczCidUrl() { - return `https://ipfs.infura.io:5001/api/v0/dag/resolve?arg=${this.msczIpfsRef}`; + return `https://ipfs.infura.io:5001/api/v0/block/stat?arg=${this.msczIpfsRef}`; }, get sheetImgType() { try { @@ -26475,47 +26475,10 @@ Please pipe the document into a Node stream.\ /* eslint-disable @typescript-eslint/no-unsafe-return */ const CHUNK_PUSH_FN = /^function [^r]\(\w\){/; - const moduleLookup = (id, globalWebpackJson) => { - const pack = globalWebpackJson.find(x => x[1][id]); - return pack[1][id]; - }; - /** - * Retrieve (webpack_require) a module from the page's webpack package - * - * I know this is super hacky. - */ - const webpackHook = (moduleId, moduleOverrides = {}, globalWebpackJson = window['webpackJsonpmusescore']) => { - const t = Object.assign((id, override = true) => { - const r = {}; - const m = (override && moduleOverrides[id]) - ? moduleOverrides[id] - : moduleLookup(id, globalWebpackJson); - m(r, r, t); - if (r.exports) - return r.exports; - return r; - }, { - d(exp, name, fn) { - return Object.prototype.hasOwnProperty.call(exp, name) || - Object.defineProperty(exp, name, { enumerable: true, get: fn }); - }, - n(e) { - const m = e.__esModule ? () => e.default : () => e; - t.d(m, 'a', m); - return m; - }, - r(r) { - Object.defineProperty(r, '__esModule', { value: true }); - }, - e() { - return Promise.resolve(); - }, - }); - return t(moduleId); - }; const ALL = '*'; - const webpackGlobalOverride = (() => { + const [webpackGlobalOverride, onPackLoad] = (() => { const moduleOverrides = {}; + const onPackLoadFns = []; function applyOverride(pack) { let entries = Object.entries(moduleOverrides); // apply to all @@ -26550,6 +26513,7 @@ Please pipe the document into a Node stream.\ hooked = true; hookNative(v, 'push', (_fn) => { return function (pack) { + onPackLoadFns.forEach(fn => fn(pack)); applyOverride(pack); return _fn.call(this, pack); }; @@ -26557,54 +26521,64 @@ Please pipe the document into a Node stream.\ } }, }); - // set overrides - return (moduleId, override) => { - moduleOverrides[moduleId] = override; - }; + return [ + // set overrides + (moduleId, override) => { + moduleOverrides[moduleId] = override; + }, + // set onPackLoad listeners + (fn) => { + onPackLoadFns.push(fn); + }, + ]; })(); + const webpackContext = new Promise((resolve) => { + webpackGlobalOverride(ALL, (n, r, t) => { + resolve(t); + }); + }); /* eslint-disable no-extend-native */ - let authModuleId; - const AUTH_FN = '+3],22,-1044525330)'; - const MAGIC_ARG_INDEX = 1; + const AUTH_REG = /[0-9a-f]{40}/; + var PACK_ID; + (function (PACK_ID) { + PACK_ID[PACK_ID["img"] = 9] = "img"; + PACK_ID[PACK_ID["midi"] = 118] = "midi"; + PACK_ID[PACK_ID["mp3"] = 74] = "mp3"; + })(PACK_ID || (PACK_ID = {})); /** * I know this is super hacky. */ - let magic = new Promise((resolve) => { - // todo: hook module by what it does, not what it is called - webpackGlobalOverride(ALL, (n, r, t) => { - const fn = n.exports; - if (typeof fn === 'function' && fn.toString().includes(AUTH_FN)) { - if (!authModuleId && n.i) { - authModuleId = n.i; - n.exports = (...args) => { - if (magic instanceof Promise) { - magic = args[MAGIC_ARG_INDEX]; - resolve(magic); - } - return fn(...args); - }; + const magicHookConstr = (type) => { + // request pack + // eslint-disable-next-line no-void, @typescript-eslint/no-unsafe-return + void webpackContext.then((ctx) => ctx.e(PACK_ID[type])).then(console.log); + return new Promise((resolve) => { + onPackLoad((pack) => { + if (pack[0].includes(PACK_ID[type])) { + Object.values(pack[1]).forEach((mod) => { + const m = mod.toString().match(AUTH_REG); + if (m && m[0]) + resolve(m[0]); + }); } - } + }); }); - }); + }; + const magics = { + img: magicHookConstr('img'), + midi: magicHookConstr('midi'), + mp3: magicHookConstr('mp3'), + }; const getApiUrl = (type, index) => { - return `/api/jmuse?id=${scoreinfo.id}&type=${type}&index=${index}`; + return `/api/jmuse?id=${scoreinfo.id}&type=${type}&index=${index}&v2=1`; }; const getApiAuth = (type, index) => __awaiter(void 0, void 0, void 0, function* () { - if (magic instanceof Promise) { - // force to retrieve the MAGIC - const el = document.querySelectorAll('.SD7H- > button')[3]; - el.click(); - magic = yield magic; - } - const str = String(scoreinfo.id) + type + String(index); - const fn = webpackHook(authModuleId); - return fn(str, magic); + return magics[type]; }); const getFileUrl = (type, index = 0) => __awaiter(void 0, void 0, void 0, function* () { const url = getApiUrl(type, index); - const auth = yield getApiAuth(type, index); + const auth = yield getApiAuth(type); const r = yield fetch(url, { headers: { Authorization: auth, @@ -26648,8 +26622,8 @@ Please pipe the document into a Node stream.\ const url = scoreinfo.msczCidUrl; msczBufferP = (() => __awaiter(void 0, void 0, void 0, function* () { const r0 = yield fetch(url); - const { Cid: { '/': cid } } = yield r0.json(); - const r = yield fetch(`https://ipfs.infura.io/ipfs/${cid}`); + const { Key } = yield r0.json(); + const r = yield fetch(`https://ipfs.infura.io/ipfs/${Key}`); const data = yield r.arrayBuffer(); return data; }))(); diff --git a/package-lock.json b/package-lock.json index 288f061..4d92f7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "musescore-downloader", - "version": "0.15.5", + "version": "0.15.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 41c334f..8ecbd6c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "musescore-downloader", - "version": "0.15.5", + "version": "0.15.6", "description": "download sheet music from musescore.com for free, no login or Musescore Pro required | 免登录、免 Musescore Pro,免费下载 musescore.com 上的曲谱", "main": "dist/main.js", "repository": {