From 692232fd55f53b1c5efea9f5d262152f8a106f98 Mon Sep 17 00:00:00 2001 From: xream Date: Thu, 15 Feb 2024 03:30:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=84=9A=E6=9C=AC=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=E6=94=AF=E6=8C=81=20/api/file/name=20?= =?UTF-8?q?=E7=9A=84=E5=86=85=E9=83=A8=E6=96=87=E4=BB=B6=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/src/core/proxy-utils/index.js | 57 +++++++++++++++++++++------ backend/src/utils/download.js | 33 ++++++++-------- 3 files changed, 63 insertions(+), 29 deletions(-) diff --git a/backend/package.json b/backend/package.json index 14c7299..f10a254 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.218", + "version": "2.14.219", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/core/proxy-utils/index.js b/backend/src/core/proxy-utils/index.js index 89cc328..580d115 100644 --- a/backend/src/core/proxy-utils/index.js +++ b/backend/src/core/proxy-utils/index.js @@ -6,6 +6,9 @@ import PROXY_PREPROCESSORS from './preprocessors'; import PROXY_PRODUCERS from './producers'; import PROXY_PARSERS from './parsers'; import $ from '@/core/app'; +import { FILES_KEY, MODULES_KEY } from '@/constants'; +import { findByName } from '@/utils/database'; +import { produceArtifact } from '@/restful/sync'; function preprocess(raw) { for (const processor of PROXY_PREPROCESSORS) { @@ -95,18 +98,50 @@ async function processFn(proxies, operators = [], targetPlatform, source) { } } } + url = `${url.split('#')[0]}${noCache ? '#noCache' : ''}`; + const downloadUrlMatch = url.match( + /^\/api\/(file|module)\/(.+)/, + ); + if (downloadUrlMatch) { + let type = ''; + try { + type = downloadUrlMatch?.[1]; + let name = downloadUrlMatch?.[2]; + if (name == null) { + throw new Error(`本地 ${type} URL 无效: ${url}`); + } + name = decodeURIComponent(name); + const key = type === 'module' ? MODULES_KEY : FILES_KEY; + const item = findByName($.read(key), name); + if (!item) { + throw new Error(`找不到 ${type}: ${name}`); + } - // if this is a remote script, download it - try { - script = await download( - `${url.split('#')[0]}${noCache ? '#noCache' : ''}`, - ); - // $.info(`Script loaded: >>>\n ${script}`); - } catch (err) { - $.error( - `Error when downloading remote script: ${item.args.content}.\n Reason: ${err}`, - ); - throw new Error(`无法下载脚本: ${url}`); + if (type === 'module') { + script = item.content; + } else { + script = await produceArtifact({ + type: 'file', + name, + }); + } + } catch (err) { + $.error( + `Error when loading ${type}: ${item.args.content}.\n Reason: ${err}`, + ); + throw new Error(`无法加载 ${type}: ${url}`); + } + } else { + // if this is a remote script, download it + try { + script = await download(url); + // $.info(`Script loaded: >>>\n ${script}`); + } catch (err) { + $.error( + `Error when downloading remote script: ${item.args.content}.\n Reason: ${err}`, + ); + throw new Error(`无法下载脚本: ${url}`); + } } } else { script = content; diff --git a/backend/src/utils/download.js b/backend/src/utils/download.js index b4d8fa9..b2be338 100644 --- a/backend/src/utils/download.js +++ b/backend/src/utils/download.js @@ -1,5 +1,4 @@ -import { FILES_KEY, MODULES_KEY, SETTINGS_KEY } from '@/constants'; -import { findByName } from '@/utils/database'; +import { SETTINGS_KEY } from '@/constants'; import { HTTP, ENV } from '@/vendor/open-api'; import { hex_md5 } from '@/vendor/md5'; import resourceCache from '@/utils/resource-cache'; @@ -36,22 +35,22 @@ export default async function download(rawUrl, ua, timeout) { } } - const downloadUrlMatch = url.match(/^\/api\/(file|module)\/(.+)/); - if (downloadUrlMatch) { - let type = downloadUrlMatch?.[1]; - let name = downloadUrlMatch?.[2]; - if (name == null) { - throw new Error(`本地 ${type} URL 无效: ${url}`); - } - name = decodeURIComponent(name); - const key = type === 'module' ? MODULES_KEY : FILES_KEY; - const item = findByName($.read(key), name); - if (!item) { - throw new Error(`找不到本地 ${type}: ${name}`); - } + // const downloadUrlMatch = url.match(/^\/api\/(file|module)\/(.+)/); + // if (downloadUrlMatch) { + // let type = downloadUrlMatch?.[1]; + // let name = downloadUrlMatch?.[2]; + // if (name == null) { + // throw new Error(`本地 ${type} URL 无效: ${url}`); + // } + // name = decodeURIComponent(name); + // const key = type === 'module' ? MODULES_KEY : FILES_KEY; + // const item = findByName($.read(key), name); + // if (!item) { + // throw new Error(`找不到本地 ${type}: ${name}`); + // } - return item.content; - } + // return item.content; + // } const { isNode } = ENV(); const { defaultUserAgent, defaultTimeout } = $.read(SETTINGS_KEY);