From 47f26bdac86a0a1e67c8ff5faf394aff937ad530 Mon Sep 17 00:00:00 2001 From: xream Date: Tue, 6 Feb 2024 21:29:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Loon=20=E8=A7=A3=E6=9E=90=E5=99=A8?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8F=82=E6=95=B0=20ua=3Dclash.meta&timeout?= =?UTF-8?q?=3D3000,=20=E6=94=AF=E6=8C=81=E4=BB=8E=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/src/products/resource-parser.loon.js | 91 +++++++++++++++----- 2 files changed, 72 insertions(+), 21 deletions(-) diff --git a/backend/package.json b/backend/package.json index 8eecec5..b4efaed 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.209", + "version": "2.14.210", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/products/resource-parser.loon.js b/backend/src/products/resource-parser.loon.js index b553714..b77314a 100644 --- a/backend/src/products/resource-parser.loon.js +++ b/backend/src/products/resource-parser.loon.js @@ -2,28 +2,79 @@ import { ProxyUtils } from '@/core/proxy-utils'; import { RuleUtils } from '@/core/rule-utils'; import { version } from '../../package.json'; +import download from '@/utils/download'; -console.log( - ` -┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ - Sub-Store -- v${version} -┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ -`, -); +let result = ''; +let resource = typeof $resource !== 'undefined' ? $resource : ''; +let resourceType = typeof $resourceType !== 'undefined' ? $resourceType : ''; +let resourceUrl = typeof $resourceUrl !== 'undefined' ? $resourceUrl : ''; -const RESOURCE_TYPE = { - PROXY: 1, - RULE: 2, -}; +!(async () => { + console.log( + ` + ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ + Sub-Store -- v${version} + ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ + `, + ); -let result = $resource; + let arg; + if (typeof $argument != 'undefined') { + arg = Object.fromEntries( + $argument.split('&').map((item) => item.split('=')), + ); + } else { + arg = {}; + } -if ($resourceType === RESOURCE_TYPE.PROXY) { - const proxies = ProxyUtils.parse($resource); - result = ProxyUtils.produce(proxies, 'Loon'); -} else if ($resourceType === RESOURCE_TYPE.RULE) { - const rules = RuleUtils.parse($resource); - result = RuleUtils.produce(rules, 'Loon'); -} + const RESOURCE_TYPE = { + PROXY: 1, + RULE: 2, + }; -$done(result); + result = resource; + + if (resourceType === RESOURCE_TYPE.PROXY) { + try { + let proxies = ProxyUtils.parse(resource); + result = ProxyUtils.produce(proxies, 'Loon'); + } catch (e) { + console.log('解析器: 使用 resource 出现错误'); + console.log(e.message ?? e); + } + if ((!result || /^\s*$/.test(result)) && resourceUrl) { + console.log(`解析器: 尝试从 ${resourceUrl} 获取订阅`); + try { + let raw = await download(resourceUrl, arg?.ua, arg?.timeout); + let proxies = ProxyUtils.parse(raw); + result = ProxyUtils.produce(proxies, 'Loon'); + } catch (e) { + console.log(e.message ?? e); + } + } + } else if (resourceType === RESOURCE_TYPE.RULE) { + try { + const rules = RuleUtils.parse(resource); + result = RuleUtils.produce(rules, 'Loon'); + } catch (e) { + console.log(e.message ?? e); + } + if ((!result || /^\s*$/.test(result)) && resourceUrl) { + console.log(`解析器: 尝试从 ${resourceUrl} 获取规则`); + try { + let raw = await download(resourceUrl, arg?.ua, arg?.timeout); + let rules = RuleUtils.parse(raw); + result = RuleUtils.produce(rules, 'Loon'); + } catch (e) { + console.log(e.message ?? e); + } + } + } +})() + .catch(async (e) => { + console.log('解析器: 出现错误'); + console.log(e.message ?? e); + }) + .finally(() => { + $done(result || ''); + });