diff --git a/.DS_Store b/.DS_Store index 6a9b983..a1b33bc 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Scripts/resource-parser.js b/Scripts/resource-parser.js index e42ee03..3965573 100644 --- a/Scripts/resource-parser.js +++ b/Scripts/resource-parser.js @@ -1,5 +1,5 @@ /** -☑️ 资源解析器 ©𝐒𝐡𝐚𝐰𝐧 ⟦2025-04-30 22:12⟧ +☑️ 资源解析器 ©𝐒𝐡𝐚𝐰𝐧 ⟦2025-05-14 16:15⟧ ---------------------------------------------------------- 🛠 发现 𝐁𝐔𝐆 请反馈: https://t.me/Shawn_Parser_Bot ⛳️ 关注 🆃🅶 相关频道: https://t.me/QuanX_API @@ -220,6 +220,8 @@ var Palpn = mark0 && para1.indexOf("alpn=") != -1 && version >= 712? para1.split var Pobfs = mark0 && para1.indexOf("obfs=") != -1 && version >= 770? para1.split("obfs=")[1].split("&")[0] : ""; // 指定特殊情况下的 obfs=xx-http 类型 var Psession = mark0 && para1.indexOf("tsession=") != -1 && version >= 771? para1.split("tsession=")[1].split("&")[0] : "";//tls-no-session-ticket and tls-no-session-reuse // 0/1 代表关闭 session-ticket/reuse,2 表示全部关闭。 +var Pmix = mark0 && version>=844? 1 : 0 // allow rewrite and filter mix from version 844 +var Pjsonjq = mark0 && version>=845? 0 : 1 // allow jsonjq from version 845 var RegoutList= [] ;//用于 regout参数删选提醒 // URL-Scheme 增加配置 @@ -583,7 +585,7 @@ function Type_Check(subs) { var SurgeK = ["=ss,", "=vmess,", "=trojan,", "=http,", "=custom,", "=https,", "=shadowsocks", "=shadowsocksr", "=sock5", "=sock5-tls"]; var ClashK = ["proxies:"] var SubK = ["dm1lc3M", "c3NyOi8v", "CnNzOi8", "dHJvamFu", "c3M6Ly", "c3NkOi8v", "c2hhZG93", "aHR0cDovLw", "aHR0cHM6L", "CnRyb2phbjo", "aHR0cD0", "aHR0cCA","U1RBVFVT"]; - var RewriteK = [" url 302", " url 307", " url reject", " url script", " url req", " url res", " url echo", " url-and-header 302", " url-and-header 307", " url-and-header reject", " url-and-header script", " url-and-header req", " url-and-header res", " url-and-header echo"] // quantumult X 类型 rewrite + var RewriteK = [" url 302", " url 307", " url reject", " url script", " url req", " url res", " url echo", " url-and-header 302", " url-and-header 307", " url-and-header reject", " url-and-header script", " url-and-header req", " url-and-header res", " url-and-header echo", " url jsonjq"] // quantumult X 类型 rewrite var SubK2 = ["ss://", "vmess://", "ssr://", "trojan://", "ssd://", "\nhttps://", "\nhttp://","socks://","ssocks://","vless://"]; var ModuleK = ["[Script]", "[Rule]", "[URL Rewrite]", "[Map Local]", "\nhttp-r", "script-path"] var QXProfile = ["[filter_local]","[filter_remote]","[server_local]","[server_remote]"] @@ -1082,7 +1084,7 @@ function URX2QX(subs) { function SCP2QX(subs) { var nrw = [] var rw = "" - var RewriteK = [" url 302", " url 307", " url reject", " url script", " url req", " url res", " url echo", " url-and-header 302", " url-and-header 307", " url-and-header reject", " url-and-header script", " url-and-header req", " url-and-header res", " url-and-header echo"] // quantumult X 类型 rewrite + var RewriteK = [" url 302", " url 307", " url reject", " url script", " url req", " url res", " url echo", " url-and-header 302", " url-and-header 307", " url-and-header reject", " url-and-header script", " url-and-header req", " url-and-header res", " url-and-header echo", " url jsonjq"] // quantumult X 类型 rewrite subs = subs.split("\n").map(x => x.trim().replace(/\s+/g," ")) //$notify("Script","",subs) for (var i = 0; i < subs.length; i++) { @@ -1119,13 +1121,13 @@ function SCP2QX(subs) { rw = ptn + " url " + type + js nrw.push(rw) } - } else if (/\s30(7|2)$/.test(subs[i])) { //rewrite 302&307 复写(Surge) + } else if (/\d\s30(7|2)$/.test(subs[i])) { //rewrite 302&307 复写(Surge) //tpe = subs[i].indexOf(" 302") != -1? "302":"307" //$notify("307/2",subs[i]) rw = subs[i].split(" ")[0] + " url " + subs[i].split(" ")[2] + " " + subs[i].split(" ")[1].trim() //if(rw.indexOf("307")!=-1) {$notify("XX",subs[i],rw.split(" "))} nrw.push(rw) - } else if (/\s\-\s30(2|7)\s/.test(subs[i])) { //rewrite 302&307 复写(Shadowrocket) + } else if (/\d\s\-\s30(2|7)\s/.test(subs[i])) { //rewrite 302&307 复写(Shadowrocket) //xx - 302 $1$2$3 rw = subs[i].replace(" - "," url ") nrw.push(rw) @@ -1194,10 +1196,11 @@ function Rewrite_Filter(subs, Pin, Pout,Preg,Pregout) { var hnc = 0; var dwrite = [] var hostname = "" + //$notify("S0","Content",subs) for (var i = 0; i < subs.length; i++) { subi = subs[i].trim(); var subii = subi.replace(/ /g, "") - if (subi != "" && (subi.indexOf(" url ")!=-1 || subi.indexOf(" url-and-header ")!=-1 || /^hostname\=/.test(subii))) { + if (subi != "" && (subi.indexOf(" url ")!=-1 || subi.indexOf("host")!=-1 || subi.indexOf(" url-and-header ")!=-1 || /^hostname\=/.test(subii))) { const notecheck = (item) => subi.indexOf(item) == 0 if (noteK.some(notecheck)) { // 注释项跳过 continue; @@ -1216,6 +1219,7 @@ function Rewrite_Filter(subs, Pin, Pout,Preg,Pregout) { } } } + if (Pntf0 != 0) { nowrite = dwrite.length <= 10 ? emojino[dwrite.length] : dwrite.length no1write = Nlist.length <= 10 ? emojino[Nlist.length] : Nlist.length @@ -1229,6 +1233,7 @@ function Rewrite_Filter(subs, Pin, Pout,Preg,Pregout) { } } } + if (Nlist.length == 0 ) { if ((Pin0 || Pout0 || Phin0 || Phout0 || Pregout || Preg)) { $notify("🤖 " + "重写引用 ➟ " + "⟦" + subtag + "⟧", "⛔️ 筛选参数: " + pfi + pfo, "⚠️ 筛选后剩余rewrite规则数为 0️⃣ 条, 请检查参数及原始链接", nan_link) @@ -1243,6 +1248,7 @@ function Rewrite_Filter(subs, Pin, Pout,Preg,Pregout) { RegCheck(Nlist, "重写引用", "regout", Pregout) } if (hostname != "") { Nlist.push(hostname) } Nlist =Phide ==1? Nlist : [...dwrite,...Nlist] + //$notify("final","Content",Nlist) return Nlist } @@ -1318,6 +1324,7 @@ function Rule_Handle(subs, Pout, Pin) { var nlist = [] var RuleK = ["//", "#", ";","[","^"]; //排除项目 var RuleK2 = ["host,", "-suffix,", "domain,", "-keyword,", "ip-cidr,", "ip-cidr6,", "geoip,", "user-agent,", "ip6-cidr,", "ip-asn"]; + //$notify("nlist-s0","",subs) if (Tout != "" && Tout != null) { // 有 out 参数时 var dlist = []; for (var i = 0; i < cnt.length; i++) { @@ -1428,7 +1435,9 @@ function Rule_Policy(content) { //增加、替换 policy } else { return "" } if (cnt[0].indexOf("URL-REGEX") != -1 || cnt[0].indexOf("PROCESS") != -1) { nn = "" - } else { nn = nn.replace("IP-CIDR6", "ip6-cidr") } + } else { + nn = nn.replace("IP-CIDR6", "ip6-cidr").replace(/^(domain|Domain|DOMAIN)/,"host") + } return nn } else if (cnt.length == 1 && !RuleK.some(RuleCheck) && cnt[0]!="" && cnt[0].indexOf("payload:")==-1 && cnt[0].indexOf("=")==-1 && cnt[0].trim()!="https:") { // 纯域名/ip 列表 //$notify("LIST-HANDLE") @@ -2338,7 +2347,7 @@ function isQuanX(content) { //surge script/quanx-rewrite - > quanx function isQuanXRewrite(content) { - cnt = content + cnt = content.filter(Boolean) cnt0=[] var RuleK = ["host,", "-suffix,", "domain,", "-keyword,", "ip-cidr,", "ip-cidr6,", "geoip,", "user-agent,", "ip6-cidr,","force-http", "ip-asn"]; for (var i = 0; i< cnt.length; i++){ @@ -2361,18 +2370,22 @@ function isQuanXRewrite(content) { cnti= cnti.split(" ")[1] == "url" ? cnti : "" } else if (cnti.indexOf(" url-and-header ")!=-1 ){ // url-and-header : ^https:xxx.com header-content url-and-header type-rule content cnti= cnti //cnti.split(" ")[2] == "url-and-header" ? cnti : "" + } else if (RuleK.some(RuleCheck) && Pmix==1) { + cnti= Rule_Policy(cnti) + } else if (Pjsonjq==0 && cnti.indexOf(" url jsonjq-")!=-1) { // lower version jsonjq pass + cnti="" } else { cnti="" } - if (cnti!="" && cnti.trim()[0]!="[" && cnti.indexOf("RULE-SET")==-1 && !/cronexp\=|type\=cron/.test(cnti.replace(/ /g,"")) && !RuleK.some(RuleCheck)) { + if (cnti!="" && cnti.trim()[0]!="[" && cnti.indexOf("RULE-SET")==-1 && !/cronexp\=|type\=cron/.test(cnti.replace(/ /g,""))) { //&& !RuleK.some(RuleCheck) if (!(/\;$/.test(cnti))) { // 某些特殊情形 let url = xxx; cnt0.push(cnti) // 排除其它项目后写入 + //$notify(cnti,"已经写入") } } } } //console.log(cnt0) - //$notify("RWT","",cnt0) return cnt0 }