diff --git a/backend/package.json b/backend/package.json index 1e1b142..3fc0179 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.365", + "version": "2.14.368", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/core/proxy-utils/parsers/peggy/loon.js b/backend/src/core/proxy-utils/parsers/peggy/loon.js index 2fe1964..fc19f7a 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/loon.js +++ b/backend/src/core/proxy-utils/parsers/peggy/loon.js @@ -182,7 +182,6 @@ ecn = comma "ecn" equals flag:bool { proxy.ecn = flag; } download_bandwidth = comma "download-bandwidth" equals match:[^,]+ { proxy.down = match.join(""); } salamander_password = comma "salamander-password" equals match:[^,]+ { proxy['obfs-password'] = match.join(""); proxy.obfs = 'salamander'; } - tag = match:[^=,]* { proxy.name = match.join("").trim(); } comma = _ "," _ equals = _ "=" _ diff --git a/backend/src/core/proxy-utils/processors/index.js b/backend/src/core/proxy-utils/processors/index.js index 9c01526..4e611ef 100644 --- a/backend/src/core/proxy-utils/processors/index.js +++ b/backend/src/core/proxy-utils/processors/index.js @@ -987,6 +987,7 @@ function createDynamicFunction(name, script, $arguments) { 'scriptResourceCache', 'flowUtils', 'produceArtifact', + 'require', `${script}\n return ${name}`, )( $arguments, @@ -1002,6 +1003,7 @@ function createDynamicFunction(name, script, $arguments) { scriptResourceCache, flowUtils, produceArtifact, + eval(`typeof require !== "undefined"`) ? require : undefined, ); } else { return new Function( @@ -1012,7 +1014,7 @@ function createDynamicFunction(name, script, $arguments) { 'scriptResourceCache', 'flowUtils', 'produceArtifact', - + 'require', `${script}\n return ${name}`, )( $arguments, @@ -1022,6 +1024,7 @@ function createDynamicFunction(name, script, $arguments) { scriptResourceCache, flowUtils, produceArtifact, + eval(`typeof require !== "undefined"`) ? require : undefined, ); } } diff --git a/config/Egern.yaml b/config/Egern.yaml new file mode 100644 index 0000000..7207d36 --- /dev/null +++ b/config/Egern.yaml @@ -0,0 +1,37 @@ +name: Sub-Store +description: '支持 Surge 正式版的参数设置功能. 测落地功能 ability: http-client-policy, 同步配置的定时 cronexp: 55 23 * * *' +compat_arguments: + ability: http-client-policy + cronexp: 55 23 * * * + sync: '"Sub-Store Sync"' + timeout: '120' + engine: auto + produce: '"# Sub-Store Produce"' + produce_cronexp: 50 */6 * * * + produce_sub: '"sub1,sub2"' + produce_col: '"col1,col2"' +compat_arguments_desc: '\n1️⃣ ability\n\n默认已开启测落地能力\n需要配合脚本操作\n如 https://raw.githubusercontent.com/Keywos/rule/main/cname.js\n填写任意其他值关闭\n\n2️⃣ cronexp\n\n同步配置定时任务\n默认为每天 23 点 55 分\n\n定时任务指定时将订阅/文件上传到私有 Gist. 在前端, 叫做 ''同步'' 或 ''同步配置''\n\n3️⃣ sync\n\n自定义定时任务名\n便于在脚本编辑器中选择\n若设为 # 可取消定时任务\n\n4️⃣ timeout\n\n脚本超时, 单位为秒\n\n5️⃣ engine\n\n默认为自动使用 webview 引擎, 可设为指定 jsc, 但 jsc 容易爆内存\n\n6️⃣ produce\n\n自定义处理订阅的定时任务名\n一般用于定时处理耗时较长的订阅, 以更新缓存\n这样 Surge 中拉取的时候就能用到缓存, 不至于总是超时\n若设为 # 可取消此定时任务\n默认不开启\n\n7️⃣ produce_cronexp\n\n配置处理订阅的定时任务\n\n默认为每 6 小时\n\n9️⃣ produce_sub\n\n自定义需定时处理的单条订阅名\n多个用 , 连接\n\n🔟 produce_col\n\n自定义需定时处理的组合订阅名\n多个用 , 连接\n\n⚠️ 注意: 是 名称(name) 不是 显示名称(displayName)\n如果名称需要编码, 请编码后再用 , 连接\n顺序: 并发执行单条订阅, 然后并发执行组合订阅' +scriptings: +- http_request: + name: Sub-Store Core + match: ^https?:\/\/sub\.store\/((download)|api\/(preview|sync|(utils\/node-info))) + script_url: https://github.com/sub-store-org/Sub-Store/releases/latest/download/sub-store-1.min.js + body_required: true +- http_request: + name: Sub-Store Simple + match: ^https?:\/\/sub\.store + script_url: https://github.com/sub-store-org/Sub-Store/releases/latest/download/sub-store-0.min.js + body_required: true +- schedule: + name: '{{{sync}}}' + cron: '{{{cronexp}}}' + script_url: https://github.com/sub-store-org/Sub-Store/releases/latest/download/cron-sync-artifacts.min.js +- schedule: + name: '{{{produce}}}' + cron: '{{{produce_cronexp}}}' + script_url: https://github.com/sub-store-org/Sub-Store/releases/latest/download/cron-sync-artifacts.min.js + arguments: + _compat.$argument: '"sub={{{produce_sub}}}&col={{{produce_col}}}"' +mitm: + hostnames: + - sub.store diff --git a/config/README.md b/config/README.md index 3c558c0..6fd4621 100644 --- a/config/README.md +++ b/config/README.md @@ -45,6 +45,9 @@ Surge Mac 版如何支持 SSR, 如何去除 HTTP 传输层以支持 类似 VMess ### 5. Shadowrocket 安装使用 模块 [`https://raw.githubusercontent.com/sub-store-org/Sub-Store/master/config/Surge-Noability.sgmodule`](https://raw.githubusercontent.com/sub-store-org/Sub-Store/master/config/Surge-Noability.sgmodule) 即可。 +### 6. Egern +安装使用 模块 [`https://raw.githubusercontent.com/sub-store-org/Sub-Store/master/config/Egern.yaml`](https://raw.githubusercontent.com/sub-store-org/Sub-Store/master/config/Egern.yaml) 即可。 + ## 使用 Sub-Store 1. 使用 Safari 打开这个 https://sub.store 如网页正常打开并且未弹出任何错误提示,说明 Sub-Store 已经配置成功。 2. 可以把 Sub-Store 添加到主屏幕,即可获得类似于 APP 的使用体验。 @@ -56,4 +59,4 @@ https://github.com/sub-store-org/Sub-Store/wiki/%E9%93%BE%E6%8E%A5%E5%8F%82%E6%9 ## 脚本使用说明 -https://github.com/sub-store-org/Sub-Store/wiki/%E8%84%9A%E6%9C%AC%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E \ No newline at end of file +https://github.com/sub-store-org/Sub-Store/wiki/%E8%84%9A%E6%9C%AC%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E diff --git a/scripts/demo.js b/scripts/demo.js index 3223ce3..3347242 100644 --- a/scripts/demo.js +++ b/scripts/demo.js @@ -18,8 +18,8 @@ function operator(proxies = [], targetPlatform, context) { // 10. `sni` 在某些协议里会自动与 `servername` 转换 // 11. 读取节点的 ca-str 和 _ca (后端文件路径) 字段, 自动计算 fingerprint (参考 https://t.me/zhetengsha/1512) // 12. 以 Surge 为例, 最新的参数一般我都会跟进, 以 Surge 文档为例, 一些常用的: TUIC/Hysteria 2 的 `ecn`, Snell 的 `reuse` 连接复用, QUIC 策略 block-quic`, Hysteria 2 下载带宽 `down` - // - // 如果只是为了快速修改或者筛选 可以参考 脚本操作支持节点快捷脚本 https://t.me/zhetengsha/970 和 脚本筛选支持节点快捷脚本 https://t.me/zhetengsha/1009 + + // require 为 Node.js 的 require, 在 Node.js 运行环境下 可以用来引入模块 // $arguments 为传入的脚本参数 @@ -54,6 +54,8 @@ function operator(proxies = [], targetPlatform, context) { // Gist, // Gist 类 // } + // 如果只是为了快速修改或者筛选 可以参考 脚本操作支持节点快捷脚本 https://t.me/zhetengsha/970 和 脚本筛选支持节点快捷脚本 https://t.me/zhetengsha/1009 + // ⚠️ 注意: 函数式(即本文件这样的 function operator() {}) 和快捷操作(下面使用 $server) 只能二选一 // 示例: 给节点名添加前缀 // $server.name = `[${ProxyUtils.getISO($server.name)}] ${$server.name}` // 示例: 给节点名添加旗帜