update 2022-06-18 23:39:24

This commit is contained in:
github-actions[bot] 2022-06-18 23:39:24 +08:00
parent c2f6fb0d7d
commit 7945dc7f60
71 changed files with 792 additions and 396 deletions

View File

@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=brook
PKG_VERSION:=20220515
PKG_VERSION:=20220707
PKG_RELEASE:=$(AUTORELEASE)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/txthinking/brook/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=e054d0c3d0090b2015e9ff5e94a15b452a3e4e1de4588542972cc6c06965537b
PKG_HASH:=377d6be82a8e122cc2e1c87ea10d2f404be6e4cf85304f329b01654e8f551753
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
PKG_LICENSE:=GPL-3.0

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openclash
PKG_VERSION:=0.45.30
PKG_VERSION:=0.45.33
PKG_RELEASE:=beta
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>

View File

@ -321,6 +321,17 @@ end
o:value("DIRECT")
o:value("REJECT")
o = s:option(ListValue, "Crypto", translate("Crypto"))
o:depends("rule_name", "lhie1")
o.rmempty = true
for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do
if groupname ~= nil and groupname ~= "" then
o:value(groupname)
end
end
o:value("DIRECT")
o:value("REJECT")
o = s:option(ListValue, "PayPal", translate("PayPal"))
o:depends("rule_name", "lhie1")
o.rmempty = true

View File

@ -40,6 +40,9 @@ local encrypt_methods_ss = {
"xchacha20",
"chacha20-ietf-poly1305",
"xchacha20-ietf-poly1305",
"2022-blake3-aes-128-gcm",
"2022-blake3-aes-256-gcm",
"2022-blake3-chacha20-poly1305"
}
local encrypt_methods_ssr = {
@ -52,7 +55,7 @@ local encrypt_methods_ssr = {
"aes-192-ctr",
"aes-256-ctr",
"chacha20-ietf",
"xchacha20",
"xchacha20"
}
local securitys = {
@ -68,7 +71,13 @@ local protocols = {
"auth_aes128_md5",
"auth_aes128_sha1",
"auth_chain_a",
"auth_chain_b",
"auth_chain_b"
}
local hysteria_protocols = {
"udp",
"wechat-video",
"faketcp"
}
local obfs = {
@ -77,7 +86,7 @@ local obfs = {
"http_post",
"random_head",
"tls1.2_ticket_auth",
"tls1.2_ticket_fastauth",
"tls1.2_ticket_fastauth"
}
m = Map(openclash, translate("Edit Server"))
@ -118,6 +127,7 @@ o:value("ss", translate("Shadowsocks"))
o:value("ssr", translate("ShadowsocksR"))
o:value("vmess", translate("Vmess"))
o:value("vless", translate("Vless ")..translate("(Only Meta Core)"))
o:value("hysteria", translate("Hysteria ")..translate("(Only Meta Core)"))
o:value("trojan", translate("trojan"))
o:value("snell", translate("Snell"))
o:value("socks5", translate("Socks5"))
@ -147,8 +157,33 @@ o:depends("type", "ss")
o:depends("type", "ssr")
o:depends("type", "trojan")
o = s:option(Value, "psk", translate("Psk"))
o = s:option(ListValue, "hysteria_protocol", translate("Protocol"))
for _, v in ipairs(hysteria_protocols) do o:value(v) end
o.rmempty = false
o:depends("type", "hysteria")
o = s:option(Value, "up_mbps", translate("up_mbps"))
o.rmempty = true
o.datatype = "uinteger"
o:depends("type", "hysteria")
o = s:option(Value, "down_mbps", translate("down_mbps"))
o.rmempty = true
o.datatype = "uinteger"
o:depends("type", "hysteria")
o = s:option(Value, "hysteria_up", translate("Up"))
o.rmempty = true
o.description = translate("Mutual Exclusion With up_mbps")
o:depends("type", "hysteria")
o = s:option(Value, "hysteria_down", translate("Down"))
o.rmempty = true
o.description = translate("Mutual Exclusion With down_mbps")
o:depends("type", "hysteria")
o = s:option(Value, "psk", translate("Psk"))
o.rmempty = true
o:depends("type", "snell")
o = s:option(ListValue, "snell_version", translate("Version"))
@ -158,6 +193,7 @@ o:depends("type", "snell")
o = s:option(ListValue, "cipher", translate("Encrypt Method"))
for _, v in ipairs(encrypt_methods_ss) do o:value(v) end
o.description = translate("Only Meta Core Support SS2022")
o.rmempty = true
o:depends("type", "ss")
@ -321,7 +357,7 @@ o:depends("obfs_vmess", "websocket")
-- [[ skip-cert-verify ]]--
o = s:option(ListValue, "skip_cert_verify", translate("skip-cert-verify"))
o.rmempty = true
o.default = "false"
o.default = "true"
o:value("true")
o:value("false")
o:depends("obfs", "websocket")
@ -332,6 +368,7 @@ o:depends("type", "socks5")
o:depends("type", "http")
o:depends("type", "trojan")
o:depends("type", "vless")
o:depends("type", "hysteria")
-- [[ TLS ]]--
o = s:option(ListValue, "tls", translate("tls"))
@ -383,6 +420,14 @@ o.placeholder = translate("example.com")
o.rmempty = true
o:depends("type", "trojan")
o:depends("type", "http")
o:depends("type", "hysteria")
-- [[ headers ]]--
o = s:option(DynamicList, "http_headers", translate("headers"))
o.description = translate("Only Meta Core")
o.rmempty = true
o.placeholder = translate("User-Agent: okhttp/3.11.0 Dalvik/2.1.0 ...... ")
o:depends("type", "http")
-- 验证用户名
o = s:option(Value, "auth_name", translate("Auth Username"))
@ -403,6 +448,12 @@ o:value("h2")
o:value("http/1.1")
o:depends("type", "trojan")
-- [[ alpn ]]--
o = s:option(Value, "hysteria_alpn", translate("alpn"))
o.rmempty = true
o.default = "h3"
o:depends("type", "hysteria")
-- [[ grpc ]]--
o = s:option(Value, "grpc_service_name", translate("grpc-service-name"))
o.rmempty = true
@ -424,6 +475,58 @@ o.rmempty = true
o.placeholder = translate("Host: v2ray.com")
o:depends("obfs_trojan", "ws")
-- [[ hysteria_obfs ]]--
o = s:option(Value, "hysteria_obfs", translate("obfs"))
o.rmempty = false
o.placeholder = translate("yourpassword")
o:depends("type", "hysteria")
-- [[ hysteria_auth ]]--
o = s:option(Value, "hysteria_auth", translate("auth"))
o.rmempty = true
o.placeholder = translate("[BASE64]")
o:depends("type", "hysteria")
-- [[ hysteria_auth_str ]]--
o = s:option(Value, "hysteria_auth_str", translate("auth_str"))
o.rmempty = true
o.placeholder = translate("yubiyubi")
o:depends("type", "hysteria")
-- [[ hysteria_ca ]]--
o = s:option(Value, "hysteria_ca", translate("ca"))
o.rmempty = true
o.placeholder = translate("./my.ca")
o:depends("type", "hysteria")
-- [[ hysteria_ca_str ]]--
o = s:option(Value, "hysteria_ca_str", translate("ca_str"))
o.rmempty = true
o.placeholder = translate("xyz")
o:depends("type", "hysteria")
-- [[ recv_window_conn ]]--
o = s:option(Value, "recv_window_conn", translate("recv_window_conn"))
o.rmempty = true
o.placeholder = translate("QUIC stream receive window")
o.datatype = "uinteger"
o:depends("type", "hysteria")
-- [[ recv_window ]]--
o = s:option(Value, "recv_window", translate("recv_window"))
o.rmempty = true
o.placeholder = translate("QUIC connection receive window")
o.datatype = "uinteger"
o:depends("type", "hysteria")
-- [[ disable_mtu_discovery ]]--
o = s:option(ListValue, "disable_mtu_discovery", translate("disable_mtu_discovery"))
o.rmempty = true
o:value("true")
o:value("false")
o.default = "false"
o:depends("type", "hysteria")
-- [[ interface-name ]]--
o = s:option(Value, "interface_name", translate("interface-name"))
o.rmempty = true

View File

@ -592,6 +592,7 @@ o.description = translate("In The Fake-IP Mode, Only Pure IP Requests Are Suppor
o = s:taboption("lan_ac", DynamicList, "lan_ac_black_ports", translate("Lan Bypassed Port List"))
o.datatype = "port"
o:value("5000", translate("5000(NAS)"))
o.description = translate("The Traffic From The Local Specified Port Will Not Pass The Core, Try To Set When The Bypass Gateway Forwarding Fails")
o = s:taboption("lan_ac", Value, "local_network_pass", translate("Local IPv4 Network Bypassed List"))
@ -1279,7 +1280,7 @@ o.cfgvalue = function(...)
end
---- enable flag
o = s:option(Flag, "node_resolve", translate("Node Resolve"), font_red..bold_on..translate("(Only Meta Core)")..bold_off..font_off)
o = s:option(Flag, "node_resolve", translate("Node Domain Resolve"), font_red..bold_on..translate("(Only Meta Core)")..bold_off..font_off)
o.rmempty = false
o.default = o.disbled
o.cfgvalue = function(...)

View File

@ -878,6 +878,7 @@
newimg.src = imgNewSrc;
newimg.onload = function() {
imgobj.src = imgNewSrc;
imgobj.onload = function() {};
};
newimg.onerror = function() {
imgobj.onload = function() {};

View File

@ -2893,6 +2893,9 @@ msgstr "注意: 连接异常时请按照此页步骤先进行检查"
msgid "Click to the page"
msgstr "点击前往"
msgid "Only Meta Core"
msgstr "仅 Meta 内核"
msgid "(Only Meta Core)"
msgstr "(仅 Meta 内核)"
@ -2962,8 +2965,8 @@ msgstr "指定策略组"
msgid "Warning: Only Meta Core Support Specific Group, Skip Setting"
msgstr "警告:仅 Meta 内核支持指定 DNS 的策略组,跳过设置"
msgid "Node Resolve"
msgstr "节点解析"
msgid "Node Domain Resolve"
msgstr "节点域名解析"
msgid "Warning: Only Meta Core Support proxy-server-nameserver, Skip Setting"
msgstr "警告:仅 Meta 内核支持设置解析节点域名的 DNS跳过设置"
@ -2984,4 +2987,13 @@ msgid "Local IPv6 Network Bypassed List"
msgstr "本地 IPv6 绕过地址"
msgid "The Traffic of The Destination For The Specified Address Will Not Pass The Core"
msgstr "目的地为指定地址的流量不会通过核心"
msgstr "目的地为指定地址的流量不会通过核心"
msgid "Mutual Exclusion With down_mbps"
msgstr "与 down_mbps 二选一进行设置"
msgid "Mutual Exclusion With up_mbps"
msgstr "与 up_mbps 二选一进行设置"
msgid "Only Meta Core Support SS2022"
msgstr "仅 Meta 内核支持 SS2022"

View File

@ -133,7 +133,7 @@ revert_dns() {
[ "$1" -eq 1 ] && {
uci -q del dhcp.@dnsmasq[-1].server
[ -n "$10" ] && {
[ -n "${10}" ] && {
config_load "openclash"
config_list_foreach "config" "dnsmasq_server" set_dnsmasq_server
}

View File

@ -42,6 +42,7 @@ rules:
- RULE-SET,Soundcloud,Global TV
- RULE-SET,ViuTV,Global TV
- RULE-SET,Telegram,Telegram
- RULE-SET,Crypto,Crypto
- RULE-SET,Douyin,Douyin
- RULE-SET,Steam,Steam
- RULE-SET,Speedtest,Speedtest
@ -102,6 +103,7 @@ script:
"Soundcloud": "Global TV",
"ViuTV": "Global TV",
"Telegram": "Telegram",
"Crypto": "Crypto",
"Douyin": "Douyin",
"Steam": "Steam",
"Speedtest": "Speedtest",
@ -404,6 +406,12 @@ rule-providers:
url: https://dler.cloud/Rules/Clash/Provider/Telegram.yaml
path: "./Rules/Telegram"
interval: 86400
Crypto:
type: http
behavior: classical
url: https://dler.cloud/Rules/Clash/Provider/Crypto.yaml
path: "./Rules/Crypto"
interval: 86400
Douyin:
type: http
behavior: classical

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -8,8 +8,8 @@
<meta name="description" content="Clash web port" />
<!--meta name="external-controller" content="http://secret@example.com:9090"-->
<title>Clash</title>
<script type="module" crossorigin src="./assets/index.44e2a61b.js"></script>
<link rel="modulepreload" href="./assets/vendor.91f359a7.js">
<script type="module" crossorigin src="./assets/index.ccf895d1.js"></script>
<link rel="modulepreload" href="./assets/vendor.46bd3f27.js">
<link rel="stylesheet" href="./assets/index.e71ce3d7.css">
<link rel="manifest" href="./manifest.webmanifest"><script>if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head>
<body>

View File

@ -1 +1 @@
if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didnt register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const l=e=>n(e,r),d={module:{uri:r},exports:o,require:l};s[r]=Promise.all(i.map((e=>d[e]||l(e)))).then((e=>(t(...e),o)))}}define(["./workbox-4ee7f24a"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.44e2a61b.js",revision:null},{url:"assets/index.e71ce3d7.css",revision:null},{url:"assets/vendor.91f359a7.js",revision:null},{url:"index.html",revision:"1c8ba5d53f770fbbaecd74a82639363d"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didnt register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const l=e=>n(e,r),d={module:{uri:r},exports:o,require:l};s[r]=Promise.all(i.map((e=>d[e]||l(e)))).then((e=>(t(...e),o)))}}define(["./workbox-4ee7f24a"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.ccf895d1.js",revision:null},{url:"assets/index.e71ce3d7.css",revision:null},{url:"assets/vendor.46bd3f27.js",revision:null},{url:"index.html",revision:"c1e679f859800a2d888e2de265652e62"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
var A=Object.defineProperty,B=Object.defineProperties;var j=Object.getOwnPropertyDescriptors;var p=Object.getOwnPropertySymbols;var k=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable;var _=(t,e,s)=>e in t?A(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,o=(t,e)=>{for(var s in e||(e={}))k.call(e,s)&&_(t,s,e[s]);if(p)for(var s of p(e))N.call(e,s)&&_(t,s,e[s]);return t},b=(t,e)=>B(t,j(e));var c=(t,e)=>{var s={};for(var n in t)k.call(t,n)&&e.indexOf(n)<0&&(s[n]=t[n]);if(t!=null&&p)for(var n of p(t))e.indexOf(n)<0&&N.call(t,n)&&(s[n]=t[n]);return s};import{r,j as H}from"./vendor.3cf270b6.js";const L="_spining_4i8sg_1",R="_spining_keyframes_4i8sg_1";var V={spining:L,spining_keyframes:R};const{useState:q}=H;function K({children:t}){return r.exports.createElement("span",{className:V.spining},t)}const P={right:10,bottom:10},Q=s=>{var n=s,{children:t}=n,e=c(n,["children"]);return r.exports.createElement("button",b(o({type:"button"},e),{className:"rtf--ab"}),t)},w=s=>{var n=s,{children:t}=n,e=c(n,["children"]);return r.exports.createElement("button",o({type:"button",className:"rtf--mb"},e),t)},z={bottom:24,right:24},S=D=>{var g=D,{event:t="hover",style:e=z,alwaysShowTitle:s=!1,children:n,icon:$,mainButtonStyles:h,onClick:d,text:f}=g,v=c(g,["event","style","alwaysShowTitle","children","icon","mainButtonStyles","onClick","text"]);const[i,m]=q(!1),u=s||!i,x=()=>m(!0),E=()=>m(!1),C=()=>t==="hover"&&x(),I=()=>t==="hover"&&E(),y=a=>d?d(a):(a.persist(),t==="click"?i?E():x():null),F=(a,l)=>{a.persist(),m(!1),setTimeout(()=>{l(a)},1)},M=()=>r.exports.Children.map(n,(a,l)=>r.exports.isValidElement(a)?r.exports.createElement("li",{className:`rtf--ab__c ${"top"in e?"top":""}`},r.exports.cloneElement(a,b(o({"data-testid":`action-button-${l}`,"aria-label":a.props.text||`Menu button ${l+1}`,"aria-hidden":u,tabIndex:i?0:-1},a.props),{onClick:O=>{a.props.onClick&&F(O,a.props.onClick)}})),a.props.text&&r.exports.createElement("span",{className:`${"right"in e?"right":""} ${s?"always-show":""}`,"aria-hidden":u},a.props.text)):null);return r.exports.createElement("ul",o({onMouseEnter:C,onMouseLeave:I,className:`rtf ${i?"open":"closed"}`,"data-testid":"fab",style:e},v),r.exports.createElement("li",{className:"rtf--mb__c"},r.exports.createElement(w,{onClick:y,style:h,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0},$),f&&r.exports.createElement("span",{className:`${"right"in e?"right":""} ${s?"always-show":""}`,"aria-hidden":u},f),r.exports.createElement("ul",null,M())))};export{Q as A,S as F,K as I,P as p};

View File

@ -0,0 +1 @@
var E=Object.defineProperty,O=Object.defineProperties;var A=Object.getOwnPropertyDescriptors;var c=Object.getOwnPropertySymbols;var w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable;var Y=(t,a,r)=>a in t?E(t,a,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[a]=r,o=(t,a)=>{for(var r in a||(a={}))w.call(a,r)&&Y(t,r,a[r]);if(c)for(var r of c(a))k.call(a,r)&&Y(t,r,a[r]);return t},i=(t,a)=>O(t,A(a));var f=(t,a)=>{var r={};for(var n in t)w.call(t,n)&&a.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&c)for(var n of c(t))a.indexOf(n)<0&&k.call(t,n)&&(r[n]=t[n]);return r};import{j as e,b as y,r as d,h as B}from"./index.5901d226.js";const H="_spining_4i8sg_1",L="_spining_keyframes_4i8sg_1";var R={spining:H,spining_keyframes:L};const{useState:V}=B;function P({children:t}){return e("span",{className:R.spining,children:t})}const Q={right:10,bottom:10},S=r=>{var n=r,{children:t}=n,a=f(n,["children"]);return e("button",i(o({type:"button"},a),{className:"rtf--ab",children:t}))},q=r=>{var n=r,{children:t}=n,a=f(n,["children"]);return e("button",i(o({type:"button",className:"rtf--mb"},a),{children:t}))},D={bottom:24,right:24},U=G=>{var _=G,{event:t="hover",style:a=D,alwaysShowTitle:r=!1,children:n,icon:v,mainButtonStyles:z,onClick:m,text:h}=_,N=f(_,["event","style","alwaysShowTitle","children","icon","mainButtonStyles","onClick","text"]);const[l,b]=V(!1),x=r||!l,g=()=>b(!0),u=()=>b(!1),$=()=>t==="hover"&&g(),j=()=>t==="hover"&&u(),C=s=>m?m(s):(s.persist(),t==="click"?l?u():g():null),I=(s,p)=>{s.persist(),b(!1),setTimeout(()=>{p(s)},1)},F=()=>d.exports.Children.map(n,(s,p)=>d.exports.isValidElement(s)?y("li",{className:`rtf--ab__c ${"top"in a?"top":""}`,children:[d.exports.cloneElement(s,i(o({"data-testid":`action-button-${p}`,"aria-label":s.props.text||`Menu button ${p+1}`,"aria-hidden":x,tabIndex:l?0:-1},s.props),{onClick:M=>{s.props.onClick&&I(M,s.props.onClick)}})),s.props.text&&e("span",{className:`${"right"in a?"right":""} ${r?"always-show":""}`,"aria-hidden":x,children:s.props.text})]}):null);return e("ul",i(o({onMouseEnter:$,onMouseLeave:j,className:`rtf ${l?"open":"closed"}`,"data-testid":"fab",style:a},N),{children:y("li",{className:"rtf--mb__c",children:[e(q,{onClick:C,style:z,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0,children:v}),h&&e("span",{className:`${"right"in a?"right":""} ${r?"always-show":""}`,"aria-hidden":x,children:h}),e("ul",{children:F()})]})}))};export{S as A,U as F,P as I,Q as p};

View File

@ -0,0 +1 @@
var R=Object.defineProperty,w=Object.defineProperties;var C=Object.getOwnPropertyDescriptors;var S=Object.getOwnPropertySymbols;var N=Object.prototype.hasOwnProperty,W=Object.prototype.propertyIsEnumerable;var T=(e,t,o)=>t in e?R(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,p=(e,t)=>{for(var o in t||(t={}))N.call(t,o)&&T(e,o,t[o]);if(S)for(var o of S(t))W.call(t,o)&&T(e,o,t[o]);return e},m=(e,t)=>w(e,C(t));import{r as _,b as l,j as a,P as f,d as P,G as k,H as j,w as z,J as I,u as O,C as F,S as M,K as $,L as H,g as A,N as B,h as D,c as E}from"./index.5901d226.js";import{a as K,F as q}from"./index.esm.390d1b7a.js";import{r as G,s as J,f as V}from"./logs.36f1d416.js";import{d as Y}from"./debounce.d080d5e1.js";import{u as Q}from"./useRemainingViewPortHeight.d051faee.js";import{F as U,p as X}from"./Fab.93225453.js";import{P as Z,a as ee}from"./play.56145bca.js";function te(e,t){if(e==null)return{};var o=oe(e,t),n,r;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],!(t.indexOf(n)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,n)||(o[n]=e[n]))}return o}function oe(e,t){if(e==null)return{};var o={},n=Object.keys(e),r,s;for(s=0;s<n.length;s++)r=n[s],!(t.indexOf(r)>=0)&&(o[r]=e[r]);return o}var x=_.exports.forwardRef(function(e,t){var o=e.color,n=o===void 0?"currentColor":o,r=e.size,s=r===void 0?24:r,g=te(e,["color","size"]);return l("svg",m(p({ref:t,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:n,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},g),{children:[a("circle",{cx:"11",cy:"11",r:"8"}),a("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]}))});x.propTypes={color:f.string,size:f.oneOfType([f.string,f.number])};x.displayName="Search";var re=x;const ae="_RuleSearch_1gcst_1",ne="_RuleSearchContainer_1gcst_5",se="_inputWrapper_1gcst_10",ce="_input_1gcst_10",ie="_iconWrapper_1gcst_35";var d={RuleSearch:ae,RuleSearchContainer:ne,inputWrapper:se,input:ce,iconWrapper:ie};function le({dispatch:e,searchText:t,updateSearchText:o}){const[n,r]=_.exports.useState(t),s=_.exports.useCallback(i=>{e(o(i))},[e,o]),g=_.exports.useMemo(()=>Y(s,300),[s]),h=i=>{r(i.target.value),g(i.target.value)};return a("div",{className:d.RuleSearch,children:l("div",{className:d.RuleSearchContainer,children:[a("div",{className:d.inputWrapper,children:a("input",{type:"text",value:n,onChange:h,className:d.input})}),a("div",{className:d.iconWrapper,children:a(re,{size:20})})]})})}const ge=e=>({searchText:k(e),updateSearchText:j});var pe=P(ge)(le);const de="_logMeta_1dg5t_1",he="_logType_1dg5t_8",ue="_logTime_1dg5t_18",me="_logText_1dg5t_24",fe="_logsWrapper_1dg5t_37",_e="_logPlaceholder_1dg5t_51",ve="_logPlaceholderIcon_1dg5t_64";var c={logMeta:de,logType:he,logTime:ue,logText:me,logsWrapper:fe,logPlaceholder:_e,logPlaceholderIcon:ve};const{useCallback:b,memo:xe,useEffect:ye}=D,v=30,Se={debug:"#28792c",info:"var(--bg-log-info-tag)",warning:"#b99105",error:"#c11c1c"};function Te({time:e,even:t,payload:o,type:n}){const r=E({even:t},"log");return a("div",{className:r,children:l("div",{className:c.logMeta,children:[a("div",{className:c.logTime,children:e}),a("div",{className:c.logType,style:{backgroundColor:Se[n]},children:n}),a("div",{className:c.logText,children:o})]})})}function be(e,t){return t[e].id}const Pe=xe(({index:e,style:t,data:o})=>{const n=o[e];return a("div",{style:t,children:a(Te,p({},n))})},K);function Le({dispatch:e,logLevel:t,apiConfig:o,logs:n,logStreamingPaused:r}){const s=z(),g=b(()=>{r?G(m(p({},o),{logLevel:t})):J(),s.app.updateAppConfig("logStreamingPaused",!r)},[o,t,r,s.app]),h=b(L=>e(I(L)),[e]);ye(()=>{V(m(p({},o),{logLevel:t}),h)},[o,t,h]);const[i,y]=Q(),{t:u}=O();return l("div",{children:[a(F,{title:u("Logs")}),a(pe,{}),a("div",{ref:i,style:{paddingBottom:v},children:n.length===0?l("div",{className:c.logPlaceholder,style:{height:y-v},children:[a("div",{className:c.logPlaceholderIcon,children:a(M,{width:200,height:200})}),a("div",{children:u("no_logs")})]}):l("div",{className:c.logsWrapper,children:[a(q,{height:y-v,width:"100%",itemCount:n.length,itemSize:80,itemData:n,itemKey:be,children:Pe}),a(U,{icon:r?a(Z,{size:16}):a(ee,{size:16}),mainButtonStyles:r?{background:"#e74c3c"}:{},style:X,text:u(r?"Resume Refresh":"Pause Refresh"),onClick:g})]})})]})}const Re=e=>({logs:$(e),logLevel:H(e),apiConfig:A(e),logStreamingPaused:B(e)});var Oe=P(Re)(Le);export{Oe as default};

View File

@ -1 +0,0 @@
var T=Object.defineProperty,C=Object.defineProperties;var y=Object.getOwnPropertyDescriptors;var E=Object.getOwnPropertySymbols;var L=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable;var v=(e,t,a)=>t in e?T(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,u=(e,t)=>{for(var a in t||(t={}))L.call(t,a)&&v(e,a,t[a]);if(E)for(var a of E(t))N.call(t,a)&&v(e,a,t[a]);return e},h=(e,t)=>C(e,y(t));import{r as o,R as l,K as P,k as W,P as b,D as I,j as k,g as w}from"./vendor.3cf270b6.js";import{a as z,F as D}from"./index.esm.5b55aaed.js";import{r as F,s as M,f as A}from"./logs.8963bea3.js";import{c as S,w as $,x as H,k as B,y as K,C as j,S as q,z as V,A as Y,g as G,D as J}from"./index.d6596dd6.js";import{d as O}from"./debounce.76599460.js";import{u as Q}from"./useRemainingViewPortHeight.91bbcf1d.js";import{F as U,p as X}from"./Fab.78b2c04b.js";const Z="_RuleSearch_1gcst_1",ee="_RuleSearchContainer_1gcst_5",te="_inputWrapper_1gcst_10",ae="_input_1gcst_10",oe="_iconWrapper_1gcst_35";var i={RuleSearch:Z,RuleSearchContainer:ee,inputWrapper:te,input:ae,iconWrapper:oe};function re({dispatch:e,searchText:t,updateSearchText:a}){const[r,s]=o.exports.useState(t),p=o.exports.useCallback(c=>{e(a(c))},[e,a]),d=o.exports.useMemo(()=>O(p,300),[p]),g=c=>{s(c.target.value),d(c.target.value)};return l.createElement("div",{className:i.RuleSearch},l.createElement("div",{className:i.RuleSearchContainer},l.createElement("div",{className:i.inputWrapper},l.createElement("input",{type:"text",value:r,onChange:g,className:i.input})),l.createElement("div",{className:i.iconWrapper},l.createElement(P,{size:20}))))}const se=e=>({searchText:$(e),updateSearchText:H});var ne=S(se)(re);const ce="_logMeta_1dg5t_1",le="_logType_1dg5t_8",pe="_logTime_1dg5t_18",ie="_logText_1dg5t_24",ge="_logsWrapper_1dg5t_37",me="_logPlaceholder_1dg5t_51",ue="_logPlaceholderIcon_1dg5t_64";var n={logMeta:ce,logType:le,logTime:pe,logText:ie,logsWrapper:ge,logPlaceholder:me,logPlaceholderIcon:ue};const{useCallback:f,memo:de,useEffect:he}=k,x=30,xe={debug:"#28792c",info:"var(--bg-log-info-tag)",warning:"#b99105",error:"#c11c1c"};function _e({time:e,even:t,payload:a,type:r}){const s=w({even:t},"log");return o.exports.createElement("div",{className:s},o.exports.createElement("div",{className:n.logMeta},o.exports.createElement("div",{className:n.logTime},e),o.exports.createElement("div",{className:n.logType,style:{backgroundColor:xe[r]}},r),o.exports.createElement("div",{className:n.logText},a)))}function Ee(e,t){return t[e].id}const ve=de(({index:e,style:t,data:a})=>{const r=a[e];return o.exports.createElement("div",{style:t},o.exports.createElement(_e,u({},r)))},z);function fe({dispatch:e,logLevel:t,apiConfig:a,logs:r,logStreamingPaused:s}){const p=B(),d=f(()=>{s?F(h(u({},a),{logLevel:t})):M(),p.app.updateAppConfig("logStreamingPaused",!s)},[a,t,s,p.app]),g=f(R=>e(K(R)),[e]);he(()=>{A(h(u({},a),{logLevel:t}),g)},[a,t,g]);const[c,_]=Q(),{t:m}=W();return o.exports.createElement("div",null,o.exports.createElement(j,{title:m("Logs")}),o.exports.createElement(ne,null),o.exports.createElement("div",{ref:c,style:{paddingBottom:x}},r.length===0?o.exports.createElement("div",{className:n.logPlaceholder,style:{height:_-x}},o.exports.createElement("div",{className:n.logPlaceholderIcon},o.exports.createElement(q,{width:200,height:200})),o.exports.createElement("div",null,m("no_logs"))):o.exports.createElement("div",{className:n.logsWrapper},o.exports.createElement(D,{height:_-x,width:"100%",itemCount:r.length,itemSize:80,itemData:r,itemKey:Ee},ve),o.exports.createElement(U,{icon:s?o.exports.createElement(b,{size:16}):o.exports.createElement(I,{size:16}),mainButtonStyles:s?{background:"#e74c3c"}:{},style:X,text:m(s?"Resume Refresh":"Pause Refresh"),onClick:d}))))}const Se=e=>({logs:V(e),logLevel:Y(e),apiConfig:G(e),logStreamingPaused:J(e)});var be=S(Se)(fe);export{be as default};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
._FlexCenter_1380a_1{display:flex;justify-content:center;align-items:center}._header_1y9js_1{display:flex;align-items:center}._header_1y9js_1:focus{outline:none}._header_1y9js_1 ._arrow_1y9js_8{display:inline-flex;-webkit-transform:rotate(0deg);transform:rotate(0);transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}._header_1y9js_1 ._arrow_1y9js_8._isOpen_1y9js_13{-webkit-transform:rotate(180deg);transform:rotate(180deg)}._header_1y9js_1 ._arrow_1y9js_8:focus{outline:var(--color-focus-blue) solid 1px}._btn_1y9js_20{margin-left:5px}._qty_1y9js_25{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}._header_5pmv2_1{margin-bottom:12px}._groupHead_5pmv2_5{display:flex;flex-wrap:wrap;align-items:center}._action_5pmv2_11{margin:0 5px}._proxy_8ev0l_1{margin:3px;padding:5px;position:relative;border-radius:8px;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;outline:none;border:1px solid transparent;max-width:200px;background-color:var(--color-bg-proxy)}._proxy_8ev0l_1:focus{border:1px solid var(--color-focus-blue)}@media screen and (min-width: 30em){._proxy_8ev0l_1{min-width:200px;border-radius:10px;padding:10px}}._proxy_8ev0l_1._now_8ev0l_25{background-color:var(--color-focus-blue);color:#ddd}._proxy_8ev0l_1._error_8ev0l_29{opacity:.5}._proxy_8ev0l_1._selectable_8ev0l_32{transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;cursor:pointer}._proxy_8ev0l_1._selectable_8ev0l_32:hover{border-color:hsl(0deg,0%,var(--card-hover-border-lightness))}._proxyType_8ev0l_40{font-family:var(--font-mono);font-size:.6em;margin-right:3px}@media screen and (min-width: 30em){._proxyType_8ev0l_40{font-size:.85em}}._row_8ev0l_51{display:flex;align-items:center;justify-content:space-between}._proxyName_8ev0l_57{width:100%;margin-bottom:5px;font-size:.85em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._proxySmall_8ev0l_66{--size: 13px;width:var(--size);height:var(--size);border-radius:50%;position:relative}._proxySmall_8ev0l_66._now_8ev0l_25{--size: 15px}._proxySmall_8ev0l_66._now_8ev0l_25:before{--size-dot: 7px;content:"";position:absolute;width:var(--size-dot);height:var(--size-dot);background-color:#fff;border:1px solid var(--color-proxy-dot-selected-ind-bo);border-radius:4px;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}._proxySmall_8ev0l_66._selectable_8ev0l_32{transition:-webkit-transform .1s ease-in-out;transition:transform .1s ease-in-out;transition:transform .1s ease-in-out,-webkit-transform .1s ease-in-out;cursor:pointer}._proxySmall_8ev0l_66._selectable_8ev0l_32:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}._proxyLatency_hz69v_1{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width: 30em){._proxyLatency_hz69v_1{font-size:.85em}}._list_1oy7w_1{display:flex;flex-wrap:wrap;margin:8px 0 8px -3px}._listSummaryView_1oy7w_8{margin:14px 0;display:grid;grid-template-columns:repeat(auto-fill,13px);grid-gap:10px;place-items:center;max-width:900px}._updatedAt_1rx92_1{margin-bottom:12px}._updatedAt_1rx92_1 small{color:#777}._main_1rx92_8{padding:10px 15px}@media screen and (min-width: 30em){._main_1rx92_8{padding:10px 40px}}._head_1rx92_17{display:flex;align-items:center;flex-wrap:wrap}._action_1rx92_23{margin:0 5px;display:grid;grid-template-columns:auto auto;gap:10px;place-items:center}._refresh_1rx92_31{display:flex;justify-content:center;align-items:center;cursor:pointer}._labeledInput_cmki0_1{max-width:85vw;width:400px;display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:13px 0}hr{height:1px;background-color:var(--color-separator);border:none;outline:none;margin:1rem 0px}._overlay_uuk3b_1{background-color:#0009}._cnt_uuk3b_5{position:absolute;background-color:var(--bg-modal);color:var(--color-text);line-height:1.4;opacity:.6;transition:all .3s ease;-webkit-transform:translate(-50%,-50%) scale(1.2);transform:translate(-50%,-50%) scale(1.2);box-shadow:#0000001f 0 4px 4px,#0000003d 0 16px 32px}._afterOpen_uuk3b_16{opacity:1;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}._topBar_jgy4z_1{position:-webkit-sticky;position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;z-index:1;background-color:var(--color-background2);-webkit-backdrop-filter:blur(36px);backdrop-filter:blur(36px)}._topBarRight_jgy4z_13{display:flex;align-items:center;flex-wrap:wrap;flex:1;justify-content:flex-end;margin-right:20px}._textFilterContainer_jgy4z_22{max-width:350px;min-width:150px;flex:1;margin-right:8px}._group_jgy4z_29{padding:10px 15px}@media screen and (min-width: 30em){._group_jgy4z_29{padding:10px 40px}}

View File

@ -1 +0,0 @@
._FlexCenter_1380a_1{display:flex;justify-content:center;align-items:center}._header_1y9js_1{display:flex;align-items:center}._header_1y9js_1:focus{outline:none}._header_1y9js_1 ._arrow_1y9js_8{display:inline-flex;-webkit-transform:rotate(0deg);transform:rotate(0);transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}._header_1y9js_1 ._arrow_1y9js_8._isOpen_1y9js_13{-webkit-transform:rotate(180deg);transform:rotate(180deg)}._header_1y9js_1 ._arrow_1y9js_8:focus{outline:var(--color-focus-blue) solid 1px}._btn_1y9js_20{margin-left:5px}._qty_1y9js_25{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}._header_1g0y5_1{margin-bottom:12px}._zapWrapper_1g0y5_5{width:20px;height:20px;display:flex;align-items:center;justify-content:center}._proxy_sq0tg_1{margin:3px;padding:5px;position:relative;border-radius:8px;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;outline:none;border:1px solid transparent;max-width:280px;background-color:var(--color-bg-proxy)}._proxy_sq0tg_1:focus{border:1px solid var(--color-focus-blue)}@media screen and (min-width: 30em){._proxy_sq0tg_1{min-width:200px;border-radius:10px;padding:10px}}._proxy_sq0tg_1._now_sq0tg_25{background-color:var(--color-focus-blue);color:#ddd}._proxy_sq0tg_1._error_sq0tg_29{opacity:.5}._proxy_sq0tg_1._selectable_sq0tg_32{transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;cursor:pointer}._proxy_sq0tg_1._selectable_sq0tg_32:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px)}._proxyType_sq0tg_40{font-family:var(--font-mono);font-size:.6em;margin-right:3px}@media screen and (min-width: 30em){._proxyType_sq0tg_40{font-size:.85em}}._row_sq0tg_51{display:flex;align-items:center;justify-content:space-between}._proxyName_sq0tg_57{width:100%;margin-bottom:5px;font-size:.85em}@media screen and (min-width: 30em){._proxyName_sq0tg_57{font-size:1em}}._proxySmall_sq0tg_68{width:13px;height:13px;border-radius:50%;border:1px solid var(--color-background)}._proxySmall_sq0tg_68._now_sq0tg_25{border-color:var(--color-text-secondary)}._proxySmall_sq0tg_68._selectable_sq0tg_32{transition:-webkit-transform .1s ease-in-out;transition:transform .1s ease-in-out;transition:transform .1s ease-in-out,-webkit-transform .1s ease-in-out;cursor:pointer}._proxySmall_sq0tg_68._selectable_sq0tg_32:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}._proxyLatency_15kyb_1{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width: 30em){._proxyLatency_15kyb_1{font-size:1em}}._list_10y5m_1{display:flex;flex-wrap:wrap;margin:8px 0 8px -3px}._listSummaryView_10y5m_8{margin:8px 0;display:grid;grid-template-columns:repeat(auto-fill,13px);grid-gap:10px}._updatedAt_1ql33_1{margin-bottom:12px}._updatedAt_1ql33_1 small{color:#777}._body_1ql33_8{padding:10px 15px}@media screen and (min-width: 30em){._body_1ql33_8{padding:10px 40px}}._actionFooter_1ql33_17{display:flex}._actionFooter_1ql33_17 button{margin:0 5px}._actionFooter_1ql33_17 button:first-child{margin-left:0}._refresh_1ql33_27{display:flex;justify-content:center;align-items:center;cursor:pointer}._labeledInput_cmki0_1{max-width:85vw;width:400px;display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:13px 0}hr{height:1px;background-color:var(--color-separator);border:none;outline:none;margin:1rem 0px}._overlay_uuk3b_1{background-color:#0009}._cnt_uuk3b_5{position:absolute;background-color:var(--bg-modal);color:var(--color-text);line-height:1.4;opacity:.6;transition:all .3s ease;-webkit-transform:translate(-50%,-50%) scale(1.2);transform:translate(-50%,-50%) scale(1.2);box-shadow:#0000001f 0 4px 4px,#0000003d 0 16px 32px}._afterOpen_uuk3b_16{opacity:1;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}._topBar_jgy4z_1{position:-webkit-sticky;position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;z-index:1;background-color:var(--color-background2);-webkit-backdrop-filter:blur(36px);backdrop-filter:blur(36px)}._topBarRight_jgy4z_13{display:flex;align-items:center;flex-wrap:wrap;flex:1;justify-content:flex-end;margin-right:20px}._textFilterContainer_jgy4z_22{max-width:350px;min-width:150px;flex:1;margin-right:8px}._group_jgy4z_29{padding:10px 15px}@media screen and (min-width: 30em){._group_jgy4z_29{padding:10px 40px}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
._RuleProviderItem_ly9yn_1{display:grid;grid-template-columns:40px 1fr 46px;height:100%}._left_ly9yn_7{display:inline-flex;align-items:center;color:var(--color-text-secondary);opacity:.4}._middle_ly9yn_14{display:grid;grid-template-rows:1fr auto auto;align-items:center}._gray_ly9yn_20{color:#777}._refreshButtonWrapper_ly9yn_24{display:grid;place-items:center;opacity:0;transition:opacity .2s}._RuleProviderItem_ly9yn_1:hover ._refreshButtonWrapper_ly9yn_24{opacity:1}._rule_1ymqx_1{display:flex;align-items:center;padding:6px 15px}@media screen and (min-width: 30em){._rule_1ymqx_1{padding:10px 40px}}._left_1ymqx_12{width:40px;padding-right:15px;color:var(--color-text-secondary);opacity:.4}._a_1ymqx_19{display:flex;align-items:center;font-size:12px;opacity:.8}._b_1ymqx_26{padding:10px 0;font-family:Roboto Mono,Menlo,monospace;font-size:16px}@media screen and (min-width: 30em){._b_1ymqx_26{font-size:19px}}._type_1ymqx_37{width:110px}._header_1j1w3_1{display:grid;grid-template-columns:1fr minmax(auto,330px);align-items:center;padding-right:15px}@media screen and (min-width: 30em){._header_1j1w3_1{padding-right:40px}}._RuleProviderItemWrapper_1j1w3_17{padding:6px 15px}@media screen and (min-width: 30em){._RuleProviderItemWrapper_1j1w3_17{padding:10px 40px}}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
._RuleProviderItem_12aid_1{display:grid;grid-template-columns:40px 1fr 46px;height:100%}._left_12aid_7{display:inline-flex;align-items:center;color:var(--color-text-secondary);opacity:.4}._middle_12aid_14{display:grid;gap:6px;grid-template-rows:1fr auto auto;align-items:center}._gray_12aid_21{color:#777}._action_12aid_25{display:grid;gap:4px;grid-template-columns:auto 1fr;align-items:center}._refreshBtn_12aid_32{padding:5px}._rule_1ymqx_1{display:flex;align-items:center;padding:6px 15px}@media screen and (min-width: 30em){._rule_1ymqx_1{padding:10px 40px}}._left_1ymqx_12{width:40px;padding-right:15px;color:var(--color-text-secondary);opacity:.4}._a_1ymqx_19{display:flex;align-items:center;font-size:12px;opacity:.8}._b_1ymqx_26{padding:10px 0;font-family:Roboto Mono,Menlo,monospace;font-size:16px}@media screen and (min-width: 30em){._b_1ymqx_26{font-size:19px}}._type_1ymqx_37{width:110px}._header_1j1w3_1{display:grid;grid-template-columns:1fr minmax(auto,330px);align-items:center;padding-right:15px}@media screen and (min-width: 30em){._header_1j1w3_1{padding-right:40px}}._RuleProviderItemWrapper_1j1w3_17{padding:6px 15px}@media screen and (min-width: 30em){._RuleProviderItemWrapper_1j1w3_17{padding:10px 40px}}

View File

@ -1 +0,0 @@
import{r as t}from"./vendor.3cf270b6.js";const l="_select_1mr76_1";var o={select:l};function n({options:r,selected:s,onChange:c}){return t.exports.createElement("select",{className:o.select,value:s,onChange:c},r.map(([e,a])=>t.exports.createElement("option",{key:e,value:e},a)))}export{n as S};

View File

@ -1 +1 @@
._select_1mr76_1{height:40px;line-height:1.5;width:100%;padding-left:8px;-webkit-appearance:none;appearance:none;background-color:var(--color-input-bg);color:var(--color-text);padding-right:20px;border-radius:4px;border:1px solid var(--color-input-border);background-image:url(data:image/svg+xml,%0A%20%20%20%20%3Csvg%20width%3D%228%22%20height%3D%2224%22%20viewBox%3D%220%200%208%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%207L7%2011H1L4%207Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%2017L1%2013L7%2013L4%2017Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%3C%2Fsvg%3E%0A%20%20);background-position:right 8px center;background-repeat:no-repeat}._select_1mr76_1:hover,._select_1mr76_1:focus{border-color:#343434;outline:none!important;color:var(--color-text-highlight);background-image:var(--select-bg-hover)}._select_1mr76_1:focus{box-shadow:#4299e199 0 0 0 3px}._select_1mr76_1 option{background-color:var(--color-background)}
._select_13zm8_1{height:40px;line-height:1.5;width:100%;padding-left:8px;-webkit-appearance:none;appearance:none;background-color:var(--color-input-bg);color:var(--color-text);padding-right:20px;border-radius:4px;border:1px solid var(--color-input-border);background-image:url(data:image/svg+xml,%0A%20%20%20%20%3Csvg%20width%3D%228%22%20height%3D%2224%22%20viewBox%3D%220%200%208%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%207L7%2011H1L4%207Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%2017L1%2013L7%2013L4%2017Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%3C%2Fsvg%3E%0A%20%20);background-position:right 8px center;background-repeat:no-repeat}._select_13zm8_1:hover,._select_13zm8_1:focus{border-color:#343434;outline:none!important;color:var(--color-text-highlight);background-image:var(--select-bg-hover)}._select_13zm8_1:focus{box-shadow:#4299e199 0 0 0 3px}._select_13zm8_1 option{background-color:var(--color-background)}

View File

@ -0,0 +1 @@
import{j as s}from"./index.5901d226.js";const n="_select_13zm8_1";var o={select:n};function i({options:t,selected:c,onChange:l}){return s("select",{className:o.select,value:c,onChange:l,children:t.map(([e,r])=>s("option",{value:e,children:r},e))})}export{i as S};

View File

@ -1 +0,0 @@
import{g as i,r as n,O as l,N as u,j as p}from"./vendor.3cf270b6.js";import{d as x}from"./debounce.76599460.js";const _="_rotate_1dspl_1",g="_isRotating_1dspl_5",m="_rotating_1dspl_1";var r={rotate:_,isRotating:g,rotating:m};function N({isRotating:t}){const e=i(r.rotate,{[r.isRotating]:t});return n.exports.createElement("span",{className:e},n.exports.createElement(l,{width:16}))}const{useCallback:d,useState:R,useMemo:f}=p;function h(t){const[,e]=u(t),[a,c]=R(""),o=f(()=>x(e,300),[e]);return[d(s=>{c(s.target.value),o(s.target.value)},[o]),a]}const T="_input_16a1f_1";var v={input:T};function w(t){const[e,a]=h(t.textAtom);return n.exports.createElement("input",{className:v.input,type:"text",value:a,onChange:e,placeholder:t.placeholder})}export{N as R,w as T};

View File

@ -0,0 +1 @@
var v=Object.defineProperty,h=Object.defineProperties;var x=Object.getOwnPropertyDescriptors;var u=Object.getOwnPropertySymbols;var _=Object.prototype.hasOwnProperty,b=Object.prototype.propertyIsEnumerable;var p=(t,e,o)=>e in t?v(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,g=(t,e)=>{for(var o in e||(e={}))_.call(e,o)&&p(t,o,e[o]);if(u)for(var o of u(e))b.call(e,o)&&p(t,o,e[o]);return t},f=(t,e)=>h(t,x(e));import{r as y,b as m,j as i,P as c,c as R,V as w,h as j}from"./index.5901d226.js";import{d as O}from"./debounce.d080d5e1.js";function T(t,e){if(t==null)return{};var o=k(t,e),r,n;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n<a.length;n++)r=a[n],!(e.indexOf(r)>=0)&&(!Object.prototype.propertyIsEnumerable.call(t,r)||(o[r]=t[r]))}return o}function k(t,e){if(t==null)return{};var o={},r=Object.keys(t),n,a;for(a=0;a<r.length;a++)n=r[a],!(e.indexOf(n)>=0)&&(o[n]=t[n]);return o}var l=y.exports.forwardRef(function(t,e){var o=t.color,r=o===void 0?"currentColor":o,n=t.size,a=n===void 0?24:n,s=T(t,["color","size"]);return m("svg",f(g({ref:e,xmlns:"http://www.w3.org/2000/svg",width:a,height:a,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},s),{children:[i("polyline",{points:"23 4 23 10 17 10"}),i("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]}))});l.propTypes={color:c.string,size:c.oneOfType([c.string,c.number])};l.displayName="RotateCw";var C=l;const z="_rotate_1dspl_1",P="_isRotating_1dspl_5",L="_rotating_1dspl_1";var d={rotate:z,isRotating:P,rotating:L};function E(t){const e=t.size||16,o=R(d.rotate,{[d.isRotating]:t.isRotating});return i("span",{className:o,children:i(C,{size:e})})}const{useCallback:$,useState:I,useMemo:N}=j;function W(t){const[,e]=w(t),[o,r]=I(""),n=N(()=>O(e,300),[e]);return[$(s=>{r(s.target.value),n(s.target.value)},[n]),o]}const M="_input_16a1f_1";var S={input:M};function F(t){const[e,o]=W(t.textAtom);return i("input",{className:S.input,type:"text",value:o,onChange:e,placeholder:t.placeholder})}export{E as R,F as T,C as a};

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
var u=Object.defineProperty,y=Object.defineProperties;var g=Object.getOwnPropertyDescriptors;var l=Object.getOwnPropertySymbols;var w=Object.prototype.hasOwnProperty,b=Object.prototype.propertyIsEnumerable;var p=(r,e,o)=>e in r?u(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,f=(r,e)=>{for(var o in e||(e={}))w.call(e,o)&&p(r,o,e[o]);if(l)for(var o of l(e))b.call(e,o)&&p(r,o,e[o]);return r},v=(r,e)=>y(r,g(e));import{r as d,j as c,P as s}from"./index.5901d226.js";function j(r,e){if(r==null)return{};var o=O(r,e),n,t;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);for(t=0;t<i.length;t++)n=i[t],!(e.indexOf(n)>=0)&&(!Object.prototype.propertyIsEnumerable.call(r,n)||(o[n]=r[n]))}return o}function O(r,e){if(r==null)return{};var o={},n=Object.keys(r),t,i;for(i=0;i<n.length;i++)t=n[i],!(e.indexOf(t)>=0)&&(o[t]=r[t]);return o}var a=d.exports.forwardRef(function(r,e){var o=r.color,n=o===void 0?"currentColor":o,t=r.size,i=t===void 0?24:t,h=j(r,["color","size"]);return c("svg",v(f({ref:e,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:n,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},h),{children:c("polyline",{points:"6 9 12 15 18 9"})}))});a.propTypes={color:s.string,size:s.oneOfType([s.string,s.number])};a.displayName="ChevronDown";var x=a;export{x as C};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
var $=Object.defineProperty,k=Object.defineProperties;var y=Object.getOwnPropertyDescriptors;var h=Object.getOwnPropertySymbols;var E=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable;var S=(e,t,n)=>t in e?$(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,v=(e,t)=>{for(var n in t||(t={}))E.call(t,n)&&S(e,n,t[n]);if(h)for(var n of h(t))O.call(t,n)&&S(e,n,t[n]);return e},b=(e,t)=>k(e,y(t));import{r as R,t as x,v as u}from"./index.d6596dd6.js";const L="/logs",A=new TextDecoder("utf-8"),F=()=>Math.floor((1+Math.random())*65536).toString(16);let p=!1,i=!1,f="",s,g;function m(e,t){let n;try{n=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=H(r);n.time=l,n.id=+r-0+F(),n.even=p=!p,t(n)}function H(e){const t=e.getFullYear()%100,n=u(e.getMonth()+1,2),r=u(e.getDate(),2),l=u(e.getHours(),2),o=u(e.getMinutes(),2),c=u(e.getSeconds(),2);return`${t}-${n}-${r} ${l}:${o}:${c}`}function M(e,t){return e.read().then(({done:n,value:r})=>{f+=A.decode(r,{stream:!n});const o=f.split(`
`),c=o[o.length-1];for(let d=0;d<o.length-1;d++)m(o[d],t);if(n){m(c,t),f="",console.log("GET /logs streaming done"),i=!1;return}else f=c;return M(e,t)})}function w(e){const t=Object.keys(e);return t.sort(),t.map(n=>e[n]).join("|")}let D,a;function J(e,t){if(e.logLevel==="uninit"||i||s&&s.readyState===1)return;g=t;const n=R(e,L);s=new WebSocket(n),s.addEventListener("error",()=>{N(e,t)}),s.addEventListener("message",function(r){m(r.data,t)})}function Y(){s.close(),a&&a.abort()}function j(e){!g||!s||(s.close(),i=!1,J(e,g))}function N(e,t){if(a&&w(e)!==D)a.abort();else if(i)return;i=!0,D=w(e),a=new AbortController;const n=a.signal,{url:r,init:l}=x(e);fetch(r+L+"?level="+e.logLevel,b(v({},l),{signal:n})).then(o=>{const c=o.body.getReader();M(c,t)},o=>{i=!1,!n.aborted&&console.log("GET /logs error:",o.message)})}export{J as f,j as r,Y as s};
var $=Object.defineProperty,k=Object.defineProperties;var y=Object.getOwnPropertyDescriptors;var h=Object.getOwnPropertySymbols;var E=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable;var S=(e,t,n)=>t in e?$(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,b=(e,t)=>{for(var n in t||(t={}))E.call(t,n)&&S(e,n,t[n]);if(h)for(var n of h(t))A.call(t,n)&&S(e,n,t[n]);return e},v=(e,t)=>k(e,y(t));import{A as O,D as R,E as u}from"./index.5901d226.js";const L="/logs",x=new TextDecoder("utf-8"),F=()=>Math.floor((1+Math.random())*65536).toString(16);let p=!1,i=!1,f="",s,g;function m(e,t){let n;try{n=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=H(r);n.time=l,n.id=+r-0+F(),n.even=p=!p,t(n)}function H(e){const t=e.getFullYear()%100,n=u(e.getMonth()+1,2),r=u(e.getDate(),2),l=u(e.getHours(),2),o=u(e.getMinutes(),2),c=u(e.getSeconds(),2);return`${t}-${n}-${r} ${l}:${o}:${c}`}function M(e,t){return e.read().then(({done:n,value:r})=>{f+=x.decode(r,{stream:!n});const o=f.split(`
`),c=o[o.length-1];for(let d=0;d<o.length-1;d++)m(o[d],t);if(n){m(c,t),f="",console.log("GET /logs streaming done"),i=!1;return}else f=c;return M(e,t)})}function D(e){const t=Object.keys(e);return t.sort(),t.map(n=>e[n]).join("|")}let w,a;function J(e,t){if(e.logLevel==="uninit"||i||s&&s.readyState===1)return;g=t;const n=O(e,L);s=new WebSocket(n),s.addEventListener("error",()=>{N(e,t)}),s.addEventListener("message",function(r){m(r.data,t)})}function Y(){s.close(),a&&a.abort()}function j(e){!g||!s||(s.close(),i=!1,J(e,g))}function N(e,t){if(a&&D(e)!==w)a.abort();else if(i)return;i=!0,w=D(e),a=new AbortController;const n=a.signal,{url:r,init:l}=R(e);fetch(r+L+"?level="+e.logLevel,v(b({},l),{signal:n})).then(o=>{const c=o.body.getReader();M(c,t)},o=>{i=!1,!n.aborted&&console.log("GET /logs error:",o.message)})}export{J as f,j as r,Y as s};

View File

@ -0,0 +1 @@
var h=Object.defineProperty,d=Object.defineProperties;var w=Object.getOwnPropertyDescriptors;var y=Object.getOwnPropertySymbols;var b=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable;var v=(e,t,r)=>t in e?h(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,p=(e,t)=>{for(var r in t||(t={}))b.call(t,r)&&v(e,r,t[r]);if(y)for(var r of y(t))O.call(t,r)&&v(e,r,t[r]);return e},f=(e,t)=>d(e,w(t));import{r as g,b as j,j as a,P as s}from"./index.5901d226.js";function P(e,t){if(e==null)return{};var r=k(e,t),i,o;if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)i=n[o],!(t.indexOf(i)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,i)||(r[i]=e[i]))}return r}function k(e,t){if(e==null)return{};var r={},i=Object.keys(e),o,n;for(n=0;n<i.length;n++)o=i[n],!(t.indexOf(o)>=0)&&(r[o]=e[o]);return r}var c=g.exports.forwardRef(function(e,t){var r=e.color,i=r===void 0?"currentColor":r,o=e.size,n=o===void 0?24:o,l=P(e,["color","size"]);return j("svg",f(p({ref:t,xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:i,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},l),{children:[a("rect",{x:"6",y:"4",width:"4",height:"16"}),a("rect",{x:"14",y:"4",width:"4",height:"16"})]}))});c.propTypes={color:s.string,size:s.oneOfType([s.string,s.number])};c.displayName="Pause";var L=c;function x(e,t){if(e==null)return{};var r=m(e,t),i,o;if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)i=n[o],!(t.indexOf(i)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,i)||(r[i]=e[i]))}return r}function m(e,t){if(e==null)return{};var r={},i=Object.keys(e),o,n;for(n=0;n<i.length;n++)o=i[n],!(t.indexOf(o)>=0)&&(r[o]=e[o]);return r}var u=g.exports.forwardRef(function(e,t){var r=e.color,i=r===void 0?"currentColor":r,o=e.size,n=o===void 0?24:o,l=x(e,["color","size"]);return a("svg",f(p({ref:t,xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:i,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},l),{children:a("polygon",{points:"5 3 19 12 5 21 5 3"})}))});u.propTypes={color:s.string,size:s.oneOfType([s.string,s.number])};u.displayName="Play";var W=u;export{W as P,L as a};

View File

@ -1 +0,0 @@
import{j as r}from"./vendor.3cf270b6.js";const{useState:s,useRef:u,useCallback:a,useLayoutEffect:c}=r;function d(){const t=u(null),[n,i]=s(200),e=a(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{d as u};

View File

@ -0,0 +1 @@
import{h as r}from"./index.5901d226.js";const{useState:s,useRef:u,useCallback:a,useLayoutEffect:c}=r;function d(){const t=u(null),[n,i]=s(200),e=a(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{d as u};

File diff suppressed because one or more lines are too long

View File

@ -11,12 +11,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="application-name" content="yacd" />
<meta name="description" content="Yet Another Clash Dashboard" />
<meta name="theme-color" content="#202020" media="(prefers-color-scheme: dark)" />
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)" />
<title>yacd</title>
<script type="module" crossorigin src="./assets/index.d6596dd6.js"></script>
<link rel="modulepreload" href="./assets/vendor.3cf270b6.js">
<link rel="stylesheet" href="./assets/index.d2d36d4e.css">
<script type="module" crossorigin src="./assets/index.5901d226.js"></script>
<link rel="stylesheet" href="./assets/index.0e7e7dfd.css">
<link rel="manifest" href="./manifest.webmanifest"></head>
<body>
<div id="app" data-base-url="http://127.0.0.1:9090"></div>

File diff suppressed because one or more lines are too long

View File

@ -426,23 +426,12 @@ Thread.new{
if Value.key?('routing-mark') then
Value.delete('routing-mark');
end;
}.join;
rescue Exception => e
puts '${LOGTIME} Error: Set General Failed,【' + e.message + '】';
end;
#auth
begin
Thread.new{
if File::exist?('/tmp/yaml_openclash_auth') then
Value_1 = YAML.load_file('/tmp/yaml_openclash_auth');
Value['authentication']=Value_1
elsif Value.key?('authentication') then
Value.delete('authentication');
if Value.key?('auto-redir') then
Value.delete('auto-redir');
end;
}.join;
rescue Exception => e
puts '${LOGTIME} Error: Set authentication Failed,【' + e.message + '】';
puts '${LOGTIME} Error: Set General Failed,【' + e.message + '】';
end;
#custom dns
@ -465,6 +454,49 @@ Thread.new{
}.join;
end;
# dns check
begin
Thread.new{
if not Value['dns'].key?('nameserver') or Value['dns']['nameserver'].to_a.empty? then
puts '${LOGTIME} Detected That The nameserver DNS Option Has No Server Set, Starting To Complete...';
Value_1={'nameserver'=>['114.114.114.114','119.29.29.29','223.5.5.5','https://doh.pub/dns-query','https://223.5.5.5/dns-query']};
Value_2={'fallback'=>['https://dns.cloudflare.com/dns-query','https://public.dns.iij.jp/dns-query','https://jp.tiar.app/dns-query','https://jp.tiarap.org/dns-query']};
Value['dns'].merge!(Value_1);
Value['dns'].merge!(Value_2);
end;
}.join;
end;
#default-nameserver
begin
Thread.new{
if ${20} == 1 then
reg = /(^https:\/\/|^tls:\/\/|^quic:\/\/)?((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?/;
reg6 = /(^https:\/\/|^tls:\/\/|^quic:\/\/)?(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))|\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?/i;
else
reg = /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/;
reg6 = /^(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))|\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/i;
end;
if Value['dns'].has_key?('fallback') then
Value_1=Value['dns']['nameserver'] | Value['dns']['fallback'];
else
Value_1=Value['dns']['nameserver'];
end;
Value_1.each{|x|
if x =~ reg or x =~ reg6 then
if Value['dns'].has_key?('default-nameserver') then
Value['dns']['default-nameserver']=Value['dns']['default-nameserver'].to_a.insert(-1,x).uniq;
else
Value_2={'default-nameserver'=>[x]};
Value['dns'].merge!(Value_2);
end;
end;
};
}.join;
rescue Exception => e
puts '${LOGTIME} Error: Set default-nameserver Failed,【' + e.message + '】';
end;
#proxy server dns
begin
Thread.new{
@ -478,53 +510,40 @@ Thread.new{
}.join;
end;
#fallback-filter
begin
Thread.new{
if '$tolerance' != '0' then
Value['proxy-groups'].each{
|x|
if x['type'] == 'url-test' then
x['tolerance']='${tolerance}';
end
};
if '$custom_fallback_filter' == '1' then
if not Value['dns'].key?('fallback') then
puts '${LOGTIME} Error: Fallback-Filter Need fallback of DNS Been Setted, Ignore...';
elsif not YAML.load_file('/etc/openclash/custom/openclash_custom_fallback_filter.yaml') then
puts '${LOGTIME} Error: Unable To Parse Custom Fallback-Filter File, Ignore...';
else
Value['dns']['fallback-filter'] = YAML.load_file('/etc/openclash/custom/openclash_custom_fallback_filter.yaml')['fallback-filter'];
end;
end;
}.join;
rescue Exception => e
puts '${LOGTIME} Error: Set Url-Test Group Tolerance Failed,【' + e.message + '】';
end;
#custom hosts
#nameserver-policy
begin
Thread.new{
if File::exist?('/etc/openclash/custom/openclash_custom_hosts.list') then
begin
Value_3 = YAML.load_file('/etc/openclash/custom/openclash_custom_hosts.list');
if Value_3 != false then
Value['dns']['use-hosts']=true;
if Value.has_key?('hosts') and not Value['hosts'].to_a.empty? then
Value['hosts'].merge!(Value_3);
if '$dns_advanced_setting' == '1' then
if File::exist?('/etc/openclash/custom/openclash_custom_domain_dns_policy.list') then
Value_6 = YAML.load_file('/etc/openclash/custom/openclash_custom_domain_dns_policy.list');
if Value_6 != false and not Value_6.nil? then
if Value['dns'].has_key?('nameserver-policy') and not Value['dns']['nameserver-policy'].to_a.empty? then
Value['dns']['nameserver-policy'].merge!(Value_6);
else
Value['hosts']=Value_3;
Value['dns']['nameserver-policy']=Value_6;
end;
Value['hosts'].uniq;
end;
rescue
Value_3 = IO.readlines('/etc/openclash/custom/openclash_custom_hosts.list');
if not Value_3.empty? then
Value_3 = Value_3.map!{|x| x.gsub(/#.*$/,'').strip} - ['', nil];
Value['dns']['use-hosts']=true;
if Value.has_key?('hosts') and not Value['hosts'].to_a.empty? then
Value_3.each{|x| Value['hosts'].merge!(x)};
else
Value_3.each{|x| Value['hosts'].merge!(x)};
end;
Value['hosts'].uniq;
Value['dns']['nameserver-policy'].uniq;
end;
end;
end;
}.join;
rescue Exception => e
puts '${LOGTIME} Error: Set Hosts Rules Failed,【' + e.message + '】';
puts '${LOGTIME} Error: Set Nameserver-Policy Failed,【' + e.message + '】';
end;
#fake-ip-filter
@ -575,31 +594,73 @@ rescue Exception => e
puts '${LOGTIME} Error: Set Fake-IP-Filter Failed,【' + e.message + '】';
end;
#nameserver-policy
#custom hosts
begin
Thread.new{
if '$dns_advanced_setting' == '1' then
if File::exist?('/etc/openclash/custom/openclash_custom_domain_dns_policy.list') then
Value_6 = YAML.load_file('/etc/openclash/custom/openclash_custom_domain_dns_policy.list');
if Value_6 != false then
if Value['dns'].has_key?('nameserver-policy') and not Value['dns']['nameserver-policy'].to_a.empty? then
Value['dns']['nameserver-policy'].merge!(Value_6);
Value['dns']['nameserver-policy'].uniq;
if File::exist?('/etc/openclash/custom/openclash_custom_hosts.list') then
begin
Value_3 = YAML.load_file('/etc/openclash/custom/openclash_custom_hosts.list');
if Value_3 != false and not Value_3.nil? then
Value['dns']['use-hosts']=true;
if Value.has_key?('hosts') and not Value['hosts'].to_a.empty? then
Value['hosts'].merge!(Value_3);
else
Value['dns']['nameserver-policy']=Value_6;
Value['hosts']=Value_3;
end;
Value['hosts'].uniq;
end;
rescue
Value_3 = IO.readlines('/etc/openclash/custom/openclash_custom_hosts.list');
if not Value_3.empty? then
Value_3 = Value_3.map!{|x| x.gsub(/#.*$/,'').strip} - ['', nil];
Value['dns']['use-hosts']=true;
if Value.has_key?('hosts') and not Value['hosts'].to_a.empty? then
Value_3.each{|x| Value['hosts'].merge!(x)};
else
Value_3.each{|x| Value['hosts'].merge!(x)};
end;
Value['hosts'].uniq;
end;
end;
end;
}.join;
rescue Exception => e
puts '${LOGTIME} Error: Set Nameserver-Policy Failed,【' + e.message + '】';
puts '${LOGTIME} Error: Set Hosts Rules Failed,【' + e.message + '】';
end;
begin
Thread.new{
if '$tolerance' != '0' then
Value['proxy-groups'].each{
|x|
if x['type'] == 'url-test' then
x['tolerance']='${tolerance}';
end
};
end;
}.join;
rescue Exception => e
puts '${LOGTIME} Error: Set Url-Test Group Tolerance Failed,【' + e.message + '】';
end;
#auth
begin
Thread.new{
if File::exist?('/tmp/yaml_openclash_auth') then
Value_1 = YAML.load_file('/tmp/yaml_openclash_auth');
Value['authentication']=Value_1
elsif Value.key?('authentication') then
Value.delete('authentication');
end;
}.join;
rescue Exception => e
puts '${LOGTIME} Error: Set authentication Failed,【' + e.message + '】';
end;
#Vmess-ws formalt check, not support proxy-provider
begin
Thread.new{
if Value.key?('proxies') then
if Value.key?('proxies') and not Value['proxies'].nil? then
Value['proxies'].each{
|x|
if x['type'] != 'vmess' then
@ -639,64 +700,6 @@ Thread.new{
}.join;
rescue Exception => e
puts '${LOGTIME} Error: Edit Vmess Compatible Failed,【' + e.message + '】';
end;
# dns check
begin
Thread.new{
if not Value['dns'].key?('nameserver') or Value['dns']['nameserver'].to_a.empty? then
puts '${LOGTIME} Detected That The nameserver DNS Option Has No Server Set, Starting To Complete...';
Value_1={'nameserver'=>['114.114.114.114','119.29.29.29','223.5.5.5']};
Value_2={'fallback'=>['https://dns.cloudflare.com/dns-query','https://public.dns.iij.jp/dns-query','https://jp.tiar.app/dns-query','https://jp.tiarap.org/dns-query']};
Value['dns'].merge!(Value_1);
Value['dns'].merge!(Value_2);
end;
}.join;
end;
#fallback-filter
begin
Thread.new{
if '$custom_fallback_filter' == '1' then
if not Value['dns'].key?('fallback') then
puts '${LOGTIME} Error: Fallback-Filter Need fallback of DNS Been Setted, Ignore...';
elsif not YAML.load_file('/etc/openclash/custom/openclash_custom_fallback_filter.yaml') then
puts '${LOGTIME} Error: Unable To Parse Custom Fallback-Filter File, Ignore...';
else
Value['dns']['fallback-filter'] = YAML.load_file('/etc/openclash/custom/openclash_custom_fallback_filter.yaml')['fallback-filter'];
end;
end;
}.join;
end;
#default-nameserver
begin
Thread.new{
if ${20} == 1 then
reg = /(^https:\/\/|^tls:\/\/|^quic:\/\/)?((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?/;
reg6 = /(^https:\/\/|^tls:\/\/|^quic:\/\/)?(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))|\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?/i;
else
reg = /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/;
reg6 = /^(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))|\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/i;
end;
if Value['dns'].has_key?('fallback') then
Value_1=Value['dns']['nameserver'] | Value['dns']['fallback'];
else
Value_1=Value['dns']['nameserver'];
end;
Value_1.each{|x|
if x =~ reg or x =~ reg6 then
if Value['dns'].has_key?('default-nameserver') then
Value['dns']['default-nameserver']=Value['dns']['default-nameserver'].to_a.insert(-1,x).uniq;
else
Value_2={'default-nameserver'=>[x]};
Value['dns'].merge!(Value_2);
end;
end;
};
}.join;
rescue Exception => e
puts '${LOGTIME} Error: Set default-nameserver Failed,【' + e.message + '】';
ensure
File.open('$5','w') {|f| YAML.dump(Value, f)};
end" 2>/dev/null >> $LOG_FILE

View File

@ -727,6 +727,138 @@ do
end
}.join
end;
if '$server_type' == 'hysteria' then
Thread.new{
#hysteria_protocol
if Value['proxies'][$count].key?('protocol') then
hysteria_protocol = '${uci_set}hysteria_protocol=' + Value['proxies'][$count]['protocol'].to_s
system(hysteria_protocol)
end
}.join
Thread.new{
#up_mbps
if Value['proxies'][$count].key?('up_mbps') then
up_mbps = '${uci_set}up_mbps=' + Value['proxies'][$count]['up_mbps'].to_s
system(up_mbps)
end
}.join
Thread.new{
#down_mbps
if Value['proxies'][$count].key?('down_mbps') then
down_mbps = '${uci_set}down_mbps=' + Value['proxies'][$count]['down_mbps'].to_s
system(down_mbps)
end
}.join
Thread.new{
#hysteria_up
if Value['proxies'][$count].key?('up') then
hysteria_up = '${uci_set}hysteria_up=' + Value['proxies'][$count]['up'].to_s
system(hysteria_up)
end
}.join
Thread.new{
#hysteria_down
if Value['proxies'][$count].key?('down') then
hysteria_down = '${uci_set}hysteria_down=' + Value['proxies'][$count]['down'].to_s
system(hysteria_down)
end
}.join
Thread.new{
#skip-cert-verify
if Value['proxies'][$count].key?('skip-cert-verify') then
skip_cert_verify = '${uci_set}skip_cert_verify=' + Value['proxies'][$count]['skip-cert-verify'].to_s
system(skip_cert_verify)
end
}.join
Thread.new{
#sni
if Value['proxies'][$count].key?('sni') then
sni = '${uci_set}sni=\"' + Value['proxies'][$count]['sni'].to_s + '\"'
system(sni)
end
}.join
Thread.new{
#alpn
if Value['proxies'][$count].key?('alpn') then
alpn = '${uci_set}hysteria_alpn=\"' + Value['proxies'][$count]['alpn'].to_s + '\"'
system(alpn)
end
}.join
Thread.new{
#recv_window_conn
if Value['proxies'][$count].key?('recv_window_conn') then
recv_window_conn = '${uci_set}recv_window_conn=' + Value['proxies'][$count]['recv_window_conn'].to_s
system(recv_window_conn)
end
}.join
Thread.new{
#recv_window
if Value['proxies'][$count].key?('recv_window') then
recv_window = '${uci_set}recv_window=' + Value['proxies'][$count]['recv_window'].to_s
system(recv_window)
end
}.join
Thread.new{
#hysteria_obfs
if Value['proxies'][$count].key?('obfs') then
hysteria_obfs = '${uci_set}hysteria_obfs=' + Value['proxies'][$count]['obfs'].to_s
system(hysteria_obfs)
end
}.join
Thread.new{
#hysteria_auth
if Value['proxies'][$count].key?('auth') then
hysteria_auth = '${uci_set}hysteria_auth=' + Value['proxies'][$count]['auth'].to_s
system(hysteria_auth)
end
}.join
Thread.new{
#hysteria_auth_str
if Value['proxies'][$count].key?('auth_str') then
hysteria_auth_str = '${uci_set}hysteria_auth_str=' + Value['proxies'][$count]['auth_str'].to_s
system(hysteria_auth_str)
end
}.join
Thread.new{
#hysteria_ca
if Value['proxies'][$count].key?('ca') then
hysteria_ca = '${uci_set}hysteria_ca=' + Value['proxies'][$count]['ca'].to_s
system(hysteria_ca)
end
}.join
Thread.new{
#hysteria_ca_str
if Value['proxies'][$count].key?('ca_str') then
hysteria_ca_str = '${uci_set}hysteria_ca_str=' + Value['proxies'][$count]['ca_str'].to_s
system(hysteria_ca_str)
end
}.join
Thread.new{
#disable_mtu_discovery
if Value['proxies'][$count].key?('disable_mtu_discovery') then
disable_mtu_discovery = '${uci_set}disable_mtu_discovery=' + Value['proxies'][$count]['disable_mtu_discovery'].to_s
system(disable_mtu_discovery)
end
}.join
end;
if '$server_type' == 'vless' then
Thread.new{
#uuid
@ -804,6 +936,7 @@ do
end
}.join
end;
if '$server_type' == 'snell' then
Thread.new{
if Value['proxies'][$count].key?('obfs-opts') then
@ -864,6 +997,18 @@ do
system(skip_cert_verify)
end
}.join
Thread.new{
#http-headers:
if Value['proxies'][$count].key?('headers') then
system '${uci_del}http_headers >/dev/null 2>&1'
Value['proxies'][$count]['headers'].keys.each{
|v|
http_headers = '${uci_add}http_headers=\"' + v.to_s + ': '+ Value['proxies'][$count]['headers'][v].to_s + '\"'
system(http_headers)
}
end
}.join
else
Thread.new{
if Value['proxies'][$count].key?('password') then
@ -871,7 +1016,7 @@ do
system(password)
end
}.join
end;
end;
if '$server_type' == 'http' or '$server_type' == 'trojan' then
Thread.new{
if Value['proxies'][$count].key?('sni') then

View File

@ -236,6 +236,21 @@ yml_servers_set()
config_get "routing_mark" "$section" "routing_mark" ""
config_get "obfs_vless" "$section" "obfs_vless" ""
config_get "vless_flow" "$section" "vless_flow" ""
config_get "http_headers" "$section" "http_headers" ""
config_get "hysteria_protocol" "$section" "hysteria_protocol" ""
config_get "up_mbps" "$section" "up_mbps" ""
config_get "down_mbps" "$section" "down_mbps" ""
config_get "hysteria_up" "$section" "hysteria_up" ""
config_get "hysteria_down" "$section" "hysteria_down" ""
config_get "hysteria_alpn" "$section" "hysteria_alpn" ""
config_get "hysteria_obfs" "$section" "hysteria_obfs" ""
config_get "hysteria_auth" "$section" "hysteria_auth" ""
config_get "hysteria_auth_str" "$section" "hysteria_auth_str" ""
config_get "hysteria_ca" "$section" "hysteria_ca" ""
config_get "hysteria_ca_str" "$section" "hysteria_ca_str" ""
config_get "recv_window_conn" "$section" "recv_window_conn" ""
config_get "recv_window" "$section" "recv_window" ""
config_get "disable_mtu_discovery" "$section" "disable_mtu_discovery" ""
if [ "$enabled" = "0" ]; then
return
@ -538,7 +553,93 @@ EOF
fi
fi
fi
#hysteria
if [ "$type" = "hysteria" ]; then
cat >> "$SERVER_FILE" <<-EOF
- name: "$name"
type: $type
server: "$server"
port: $port
protocol: $hysteria_protocol
EOF
if [ -n "$up_mbps" ]; then
cat >> "$SERVER_FILE" <<-EOF
up_mbps: "$up_mbps"
EOF
fi
if [ -n "$down_mbps" ]; then
cat >> "$SERVER_FILE" <<-EOF
down_mbps: "$down_mbps"
EOF
fi
if [ -n "$hysteria_up" ] && [ -z "$up_mbps" ]; then
cat >> "$SERVER_FILE" <<-EOF
up: "$hysteria_up"
EOF
fi
if [ -n "$hysteria_down" ] && [ -z "$down_mbps" ]; then
cat >> "$SERVER_FILE" <<-EOF
down: "$hysteria_down"
EOF
fi
if [ -n "$skip_cert_verify" ]; then
cat >> "$SERVER_FILE" <<-EOF
skip-cert-verify: $skip_cert_verify
EOF
fi
if [ -n "$sni" ]; then
cat >> "$SERVER_FILE" <<-EOF
sni: "$sni"
EOF
fi
if [ -n "$hysteria_alpn" ]; then
cat >> "$SERVER_FILE" <<-EOF
alpn: "$hysteria_alpn"
EOF
fi
if [ -n "$hysteria_obfs" ]; then
cat >> "$SERVER_FILE" <<-EOF
obfs: "$hysteria_obfs"
EOF
fi
if [ -n "$hysteria_auth" ]; then
cat >> "$SERVER_FILE" <<-EOF
auth: "$hysteria_auth"
EOF
fi
if [ -n "$hysteria_auth_str" ]; then
cat >> "$SERVER_FILE" <<-EOF
auth_str: "$hysteria_auth_str"
EOF
fi
if [ -n "$hysteria_ca" ]; then
cat >> "$SERVER_FILE" <<-EOF
ca: "$hysteria_ca"
EOF
fi
if [ -n "$hysteria_ca_str" ]; then
cat >> "$SERVER_FILE" <<-EOF
ca_str: "$hysteria_ca_str"
EOF
fi
if [ -n "$recv_window_conn" ]; then
cat >> "$SERVER_FILE" <<-EOF
recv_window_conn: "$recv_window_conn"
EOF
fi
if [ -n "$recv_window" ]; then
cat >> "$SERVER_FILE" <<-EOF
recv_window: "$recv_window"
EOF
fi
if [ -n "$disable_mtu_discovery" ]; then
cat >> "$SERVER_FILE" <<-EOF
disable_mtu_discovery: $disable_mtu_discovery
EOF
fi
fi
#vless
if [ "$type" = "vless" ]; then
cat >> "$SERVER_FILE" <<-EOF
@ -673,6 +774,12 @@ cat >> "$SERVER_FILE" <<-EOF
sni: "$sni"
EOF
fi
if [ -n "$ws_opts_headers" ]; then
cat >> "$SERVER_FILE" <<-EOF
headers:
EOF
config_list_foreach "$section" "http_headers" set_ws_headers
fi
fi
#trojan
@ -1283,6 +1390,20 @@ cat >> "$SERVER_FILE" <<-EOF
EOF
fi
cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null
cat >> "$SERVER_FILE" <<-EOF
- name: Crypto
type: select
proxies:
- Proxy
- DIRECT
EOF
cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null
if [ -f "/tmp/Proxy_Provider" ]; then
cat >> "$SERVER_FILE" <<-EOF
use:
EOF
fi
cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null
cat >> "$SERVER_FILE" <<-EOF
- name: PayPal
type: select
@ -1328,6 +1449,7 @@ ${uci_set}Steam="Steam"
${uci_set}AdBlock="AdBlock"
${uci_set}Speedtest="Speedtest"
${uci_set}Telegram="Telegram"
${uci_set}Crypto="Crypto"
${uci_set}PayPal="PayPal"
${uci_set}Domestic="Domestic"
${uci_set}Others="Others"
@ -1356,6 +1478,7 @@ ${uci_set}Others="Others"
${UCI_DEL_LIST}="Spotify" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Spotify" >/dev/null 2>&1
${UCI_DEL_LIST}="Steam" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Steam" >/dev/null 2>&1
${UCI_DEL_LIST}="Telegram" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Telegram" >/dev/null 2>&1
${UCI_DEL_LIST}="Crypto" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Crypto" >/dev/null 2>&1
${UCI_DEL_LIST}="PayPal" >/dev/null 2>&1 && ${UCI_ADD_LIST}="PayPal" >/dev/null 2>&1
${UCI_DEL_LIST}="Speedtest" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Speedtest" >/dev/null 2>&1
}

View File

@ -549,7 +549,7 @@ yml_other_set()
if defined? Value_2 then
Value_2.each{|x|
if ${10} != 1 then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|^IN-TYPE,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【' + x + '】'
next
end;
@ -583,7 +583,7 @@ yml_other_set()
end;
Value_4.each{|x|
if ${10} != 1 then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|^IN-TYPE,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【' + x + '】'
next
end;
@ -602,7 +602,7 @@ yml_other_set()
if not Value_1['rules'].to_a.empty? and Value_1['rules'].class.to_s == 'Array' then
Value_1.each{|x|
if ${10} != 1 then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|^IN-TYPE,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【' + x + '】'
Value_1.delete(x);
end;
@ -614,7 +614,7 @@ yml_other_set()
elsif Value_1.class.to_s == 'Array' then
Value_1.each{|x|
if ${10} != 1 then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|^IN-TYPE,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【' + x + '】'
Value_1.delete(x);
end;
@ -633,7 +633,7 @@ yml_other_set()
if not Value_2['rules'].to_a.empty? and Value_2['rules'].class.to_s == 'Array' then
Value_2.each{|x|
if ${10} != 1 then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|^IN-TYPE,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【' + x + '】'
Value_2.delete(x);
end;
@ -645,7 +645,7 @@ yml_other_set()
elsif Value_2.class.to_s == 'Array' then
Value_2.each{|x|
if ${10} != 1 then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|^IN-TYPE,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【' + x + '】'
Value_2.delete(x);
end;
@ -675,7 +675,7 @@ yml_other_set()
end
Value_3.each{|x|
if ${10} != 1 then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
if x =~ /(^GEOSITE,|^AND,|^OR,|^NOT,|^IP-SUFFIX,|^SRC-IP-SUFFIX,|^IN-TYPE,|PORT,[0-9]+\/+|PORT,[0-9]+-+)/ or x.split(',')[-1] == 'tcp' or x.split(',')[-1] == 'udp' then
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【' + x + '】'
next
end;
@ -794,6 +794,7 @@ yml_other_rules_get()
config_get "Netease_Music" "$section" "Netease_Music" ""
config_get "Speedtest" "$section" "Speedtest" ""
config_get "Telegram" "$section" "Telegram" ""
config_get "Crypto" "$section" "Crypto" "$Proxy"
config_get "Microsoft" "$section" "Microsoft" ""
config_get "PayPal" "$section" "PayPal" ""
config_get "Domestic" "$section" "Domestic" ""
@ -854,6 +855,7 @@ if [ "$1" != "0" ]; then
|| [ -z "$(grep -F "$AdBlock" /tmp/Proxy_Group)" ]\
|| [ -z "$(grep -F "$Speedtest" /tmp/Proxy_Group)" ]\
|| [ -z "$(grep -F "$Telegram" /tmp/Proxy_Group)" ]\
|| [ -z "$(grep -F "$Crypto" /tmp/Proxy_Group)" ]\
|| [ -z "$(grep -F "$Douyin" /tmp/Proxy_Group)" ]\
|| [ -z "$(grep -F "$Microsoft" /tmp/Proxy_Group)" ]\
|| [ -z "$(grep -F "$PayPal" /tmp/Proxy_Group)" ]\
@ -912,6 +914,7 @@ if [ "$1" != "0" ]; then
.gsub(/,AdBlock$/, ',$AdBlock#d')
.gsub(/,Speedtest$/, ',$Speedtest#d')
.gsub(/,Telegram$/, ',$Telegram#d')
.gsub(/,Crypto$/, ',$Crypto#d')
.gsub(/,Microsoft$/, ',$Microsoft#d')
.to_s.gsub(/,PayPal$/, ',$PayPal#d')
.gsub(/,Domestic$/, ',$Domestic#d')
@ -940,6 +943,7 @@ if [ "$1" != "0" ]; then
.gsub!(/: \"AdBlock\"/,': \"$AdBlock#d\"')
.gsub!(/: \"Speedtest\"/,': \"$Speedtest#d\"')
.gsub!(/: \"Telegram\"/,': \"$Telegram#d\"')
.gsub!(/: \"Crypto\"/,': \"$Crypto#d\"')
.gsub!(/: \"Microsoft\"/,': \"$Microsoft#d\"')
.gsub!(/: \"PayPal\"/,': \"$PayPal#d\"')
.gsub!(/: \"Domestic\"/,': \"$Domestic#d\"')

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186" height="20" role="img" aria-label="Current Version: v0.45.30-beta"><title>Current Version: v0.45.30-beta</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="186" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="97" height="20" fill="#555"/><rect x="97" width="89" height="20" fill="#007ec6"/><rect width="186" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="495" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="870">Current Version</text><text x="495" y="140" transform="scale(.1)" fill="#fff" textLength="870">Current Version</text><text aria-hidden="true" x="1405" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="790">v0.45.30-beta</text><text x="1405" y="140" transform="scale(.1)" fill="#fff" textLength="790">v0.45.30-beta</text></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186" height="20" role="img" aria-label="Current Version: v0.45.33-beta"><title>Current Version: v0.45.33-beta</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="186" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="97" height="20" fill="#555"/><rect x="97" width="89" height="20" fill="#007ec6"/><rect width="186" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="495" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="870">Current Version</text><text x="495" y="140" transform="scale(.1)" fill="#fff" textLength="870">Current Version</text><text aria-hidden="true" x="1405" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="790">v0.45.33-beta</text><text x="1405" y="140" transform="scale(.1)" fill="#fff" textLength="790">v0.45.33-beta</text></g></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -10,9 +10,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/SagerNet/v2ray-core.git
PKG_SOURCE_DATE:=2022-06-14
PKG_SOURCE_VERSION:=eb9f1a689e37c9577825165d50d562c2e7747f2a
PKG_MIRROR_HASH:=9cc7b4a5b2830ac72510c519f59e83e902347965fcfa57ed7cad0b43dfd80cab
PKG_SOURCE_DATE:=2022-06-16
PKG_SOURCE_VERSION:=13c46a76b8fcae7b2e85a769eff153789056010e
PKG_MIRROR_HASH:=555027a6982103af6b3028d8fb99be6433ffde5781fd39907f57e244d82080b4
PKG_VERSION:=$(BASE_VERSION)-$(PKG_SOURCE_DATE)-$(call version_abbrev,$(PKG_SOURCE_VERSION))
PKG_LICENSE:=GPL-3.0-or-later

View File

@ -40,7 +40,7 @@ go get github.com/Dreamacro/clash/transport/simple-obfs
+github.com/sagernet/clash v1.10.7-0.20220610080510-ac56b2a05ded/go.mod h1:qrmVDeYq4Gr8SiGuxVoA4cc4xhq7TNgnLa76AANNYRA=
github.com/sagernet/gvisor v0.0.0-20220402114650-763d12dc953e h1:Y4avBAtZ59OWvLl6zP9sF62jtMEVRPIH78IQctq9aXQ=
github.com/sagernet/gvisor v0.0.0-20220402114650-763d12dc953e/go.mod h1:tWwEcFvJavs154OdjFCw78axNrsDlz4Zh8jvPqwcpGI=
github.com/sagernet/sing v0.0.0-20220614091938-64835a637bdc h1:AdNTzzSw6SCZI71GB+Am7cr+oUDUrBUaOi17FxDtNMw=
github.com/sagernet/sing v0.0.0-20220616051325-90beb46c6d22 h1:9qQB2pN/p6jI8vrCEy/KOvjuvEgoaz6QNIX7BgPhwSw=
@@ -394,6 +396,8 @@ github.com/shurcooL/sanitized_anchor_nam
github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4=
github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw=