From 76b5dc580959f03fe09c44ee45eddb234bb63076 Mon Sep 17 00:00:00 2001 From: xream Date: Mon, 11 Dec 2023 11:57:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=84=9A=E6=9C=AC=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=8A=82=E7=82=B9=E5=BF=AB=E6=8D=B7=E8=84=9A?= =?UTF-8?q?=E6=9C=AC.=20=E8=AF=AD=E6=B3=95=E4=B8=8E=20Shadowrocket=20?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E7=B1=BB=E4=BC=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ``` const port = Number($server.port) return [80, 443].includes(port) ``` --- backend/package.json | 2 +- .../src/core/proxy-utils/processors/index.js | 40 ++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/backend/package.json b/backend/package.json index 5cf0fe7..86f0b6d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.119", + "version": "2.14.120", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/core/proxy-utils/processors/index.js b/backend/src/core/proxy-utils/processors/index.js index 1257bc2..26cc161 100644 --- a/backend/src/core/proxy-utils/processors/index.js +++ b/backend/src/core/proxy-utils/processors/index.js @@ -605,6 +605,22 @@ function ScriptFilter(script, targetPlatform, $arguments, source) { })(); return output; }, + nodeFunc: async (proxies) => { + let output = FULL(proxies.length, true); + await (async function () { + const filter = createDynamicFunction( + 'filter', + `async function filter(proxies = []) { + return proxies.filter(($server = {}) => { + ${script} + }) + }`, + $arguments, + ); + output = filter(proxies, targetPlatform, { source, ...env }); + })(); + return output; + }, }; } @@ -635,7 +651,29 @@ async function ApplyFilter(filter, objs) { } catch (err) { // print log and skip this filter $.error(`Cannot apply filter ${filter.name}\n Reason: ${err}`); - throw new Error(`脚本过滤失败 ${err.message ?? err}`); + let funcErr = ''; + let funcErrMsg = `${err.message ?? err}`; + if (funcErrMsg.includes('$server is not defined')) { + funcErr = ''; + } else { + funcErr = `执行 function filter 失败 ${funcErrMsg}; `; + } + try { + selected = await filter.nodeFunc(objs); + } catch (err) { + $.error( + `Cannot apply filter ${filter.name}(node script)! Reason: ${err}`, + ); + let nodeErr = ''; + let nodeErrMsg = `${err.message ?? err}`; + if (funcErr && nodeErrMsg === funcErrMsg) { + nodeErr = ''; + funcErr = `执行失败 ${funcErrMsg}`; + } else { + nodeErr = `执行节点快捷过滤脚本 失败 ${nodeErr}`; + } + throw new Error(`脚本过滤 ${funcErr}${nodeErr}`); + } } return objs.filter((_, i) => selected[i]); }