update 2025-07-20 07:40:23

This commit is contained in:
actions-user 2025-07-20 07:40:23 +08:00
parent 6264cddee0
commit 258009e9c7
41 changed files with 70200 additions and 69705 deletions

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openclash
PKG_VERSION:=0.46.133
PKG_VERSION:=0.46.137
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)

View File

@ -3159,16 +3159,16 @@ function action_oc_action()
if action == "start" then
uci:set("openclash", "config", "enable", "1")
uci:commit("openclash")
luci.sys.call("/etc/init.d/openclash start >/dev/null 2>&1 &")
luci.sys.call("/etc/init.d/openclash start >/dev/null 2>&1")
elseif action == "stop" then
uci:set("openclash", "config", "enable", "0")
uci:commit("openclash")
luci.sys.call("ps | grep openclash | grep -v grep | awk '{print $1}' | xargs -r kill -9 >/dev/null 2>&1")
luci.sys.call("/etc/init.d/openclash stop >/dev/null 2>&1 &")
luci.sys.call("/etc/init.d/openclash stop >/dev/null 2>&1")
elseif action == "restart" then
uci:set("openclash", "config", "enable", "1")
uci:commit("openclash")
luci.sys.call("/etc/init.d/openclash restart >/dev/null 2>&1 &")
luci.sys.call("/etc/init.d/openclash restart >/dev/null 2>&1")
else
luci.http.status(400, "Invalid action parameter")
return

View File

@ -3417,94 +3417,70 @@
updateUIState: function(setting, value) {
setTimeout(() => {
function setCheckedAndDisabled(elements, checkedIndex) {
for (let i = 0; i < elements.length; i++) {
elements[i].checked = (i === checkedIndex);
elements[i].disabled = true;
}
}
switch(setting) {
case 'meta_sniffer':
var metaSnifferOn = document.getElementById('meta_sniffer_on');
var metaSnifferOff = document.getElementById('meta_sniffer_off');
if (metaSnifferOn && metaSnifferOff) {
metaSnifferOn.checked = value === '1';
metaSnifferOff.checked = value !== '1';
setCheckedAndDisabled([metaSnifferOn, metaSnifferOff], value === '1' ? 0 : 1);
var changeEvent = new Event('change', { bubbles: true });
if (value === '1') {
metaSnifferOn.dispatchEvent(changeEvent);
} else {
metaSnifferOff.dispatchEvent(changeEvent);
}
(value === '1' ? metaSnifferOn : metaSnifferOff).dispatchEvent(changeEvent);
}
break;
case 'respect_rules':
var respectRulesOn = document.getElementById('respect_rules_on');
var respectRulesOff = document.getElementById('respect_rules_off');
if (respectRulesOn && respectRulesOff) {
respectRulesOn.checked = value === '1';
respectRulesOff.checked = value !== '1';
setCheckedAndDisabled([respectRulesOn, respectRulesOff], value === '1' ? 0 : 1);
var changeEvent = new Event('change', { bubbles: true });
if (value === '1') {
respectRulesOn.dispatchEvent(changeEvent);
} else {
respectRulesOff.dispatchEvent(changeEvent);
}
(value === '1' ? respectRulesOn : respectRulesOff).dispatchEvent(changeEvent);
}
break;
case 'oversea':
var oversea0 = document.getElementById('oc_setting_oversea_0');
var oversea1 = document.getElementById('oc_setting_oversea_1');
var oversea2 = document.getElementById('oc_setting_oversea_2');
if (oversea0 && oversea1 && oversea2) {
oversea0.checked = value === '0';
oversea1.checked = value === '1';
oversea2.checked = value === '2';
setCheckedAndDisabled([oversea0, oversea1, oversea2], value === '0' ? 0 : (value === '1' ? 1 : 2));
var changeEvent = new Event('change', { bubbles: true });
var selectedElement = value === '0' ? oversea0 : (value === '1' ? oversea1 : oversea2);
if (selectedElement) {
selectedElement.dispatchEvent(changeEvent);
}
[oversea0, oversea1, oversea2][value === '0' ? 0 : (value === '1' ? 1 : 2)].dispatchEvent(changeEvent);
}
break;
case 'stream_unlock':
var streamUnlockOn = document.getElementById('stream_unlock_on');
var streamUnlockOff = document.getElementById('stream_unlock_off');
if (streamUnlockOn && streamUnlockOff) {
streamUnlockOn.checked = value === '1';
streamUnlockOff.checked = value !== '1';
setCheckedAndDisabled([streamUnlockOn, streamUnlockOff], value === '1' ? 0 : 1);
var changeEvent = new Event('change', { bubbles: true });
if (value === '1') {
streamUnlockOn.dispatchEvent(changeEvent);
} else {
streamUnlockOff.dispatchEvent(changeEvent);
}
(value === '1' ? streamUnlockOn : streamUnlockOff).dispatchEvent(changeEvent);
}
break;
case 'rule_mode':
var radioElements = document.getElementsByName("radios");
if (radioElements && radioElements.length > 0) {
for (var i = 0; i < radioElements.length; i++) {
var isChecked = radioElements[i].value === value;
radioElements[i].checked = isChecked;
if (isChecked) {
radioElements[i].checked = radioElements[i].value === value;
radioElements[i].disabled = true;
if (radioElements[i].checked) {
var changeEvent = new Event('change', { bubbles: true });
radioElements[i].dispatchEvent(changeEvent);
}
}
}
break;
case 'run_mode':
var radioRuElements = document.getElementsByName("radios-ru");
if (radioRuElements && radioRuElements.length > 0) {
for (var i = 0; i < radioRuElements.length; i++) {
var isChecked = radioRuElements[i].value === value;
radioRuElements[i].checked = isChecked;
if (isChecked) {
radioRuElements[i].checked = radioRuElements[i].value === value;
radioRuElements[i].disabled = true;
if (radioRuElements[i].checked) {
var changeEvent = new Event('change', { bubbles: true });
radioRuElements[i].dispatchEvent(changeEvent);
}
@ -3526,17 +3502,17 @@
try {
this.updateUIState(setting, value);
} catch (e) {
}
} catch (e) {}
let pollName;
if (setting === 'rule_mode') {
this.pausePoll('rule_mode', 5000);
clearTimeout(s);
pollName = 'rule_mode';
} else if (setting === 'run_mode') {
this.pausePoll('run_mode', 5000);
pollName = 'run_mode';
} else {
this.pausePoll('oc_settings', 5000);
pollName = 'oc_settings';
}
this.pausedPolls.add(pollName);
var params = Object.assign({}, additionalParams || {});
if (setting !== 'rule_mode' && setting !== 'run_mode') {
@ -3554,17 +3530,55 @@
setTimeout(function() {
self.pendingOperations.delete(operationKey);
if (!x || x.status !== 200) {
self.revertUIState(setting);
alert(self.getErrorMessage(setting));
switch(setting) {
case 'meta_sniffer':
var metaSnifferOn = document.getElementById('meta_sniffer_on');
var metaSnifferOff = document.getElementById('meta_sniffer_off');
if (metaSnifferOn) metaSnifferOn.disabled = false;
if (metaSnifferOff) metaSnifferOff.disabled = false;
break;
case 'respect_rules':
var respectRulesOn = document.getElementById('respect_rules_on');
var respectRulesOff = document.getElementById('respect_rules_off');
if (respectRulesOn) respectRulesOn.disabled = false;
if (respectRulesOff) respectRulesOff.disabled = false;
break;
case 'oversea':
var oversea0 = document.getElementById('oc_setting_oversea_0');
var oversea1 = document.getElementById('oc_setting_oversea_1');
var oversea2 = document.getElementById('oc_setting_oversea_2');
if (oversea0) oversea0.disabled = false;
if (oversea1) oversea1.disabled = false;
if (oversea2) oversea2.disabled = false;
break;
case 'stream_unlock':
var streamUnlockOn = document.getElementById('stream_unlock_on');
var streamUnlockOff = document.getElementById('stream_unlock_off');
if (streamUnlockOn) streamUnlockOn.disabled = false;
if (streamUnlockOff) streamUnlockOff.disabled = false;
break;
case 'rule_mode':
var radioElements = document.getElementsByName("radios");
if (radioElements && radioElements.length > 0) {
for (var i = 0; i < radioElements.length; i++) {
radioElements[i].disabled = false;
}
}
break;
case 'run_mode':
var radioRuElements = document.getElementsByName("radios-ru");
if (radioRuElements && radioRuElements.length > 0) {
for (var i = 0; i < radioRuElements.length; i++) {
radioRuElements[i].disabled = false;
}
}
break;
}
if (setting === 'rule_mode' && !self.isPollPaused('rule_mode')) {
get_rule_mode();
} else if (setting === 'run_mode' && !self.isPollPaused('run_mode')) {
get_run_mode();
} else if (setting !== 'rule_mode' && setting !== 'run_mode' && !self.isPollPaused('oc_settings')) {
get_oc_settings();
self.pausedPolls.delete(pollName);
if (!x || x.status !== 200) {
alert(self.getErrorMessage(setting));
}
}, 1500);
});
@ -3572,16 +3586,6 @@
return false;
},
revertUIState: function(setting) {
if (setting === 'rule_mode') {
get_rule_mode();
} else if (setting === 'run_mode') {
get_run_mode();
} else {
get_oc_settings();
}
},
getErrorMessage: function(setting) {
var messages = {
'meta_sniffer': '<%:Sniffer setting failed%>',
@ -3599,6 +3603,26 @@
var s, gr;
var pluginToggleUserAction = false;
document.addEventListener('DOMContentLoaded', function() {
DarkModeDetector.init();
setTimeout(function() {
ConfigFileManager.init();
}, 200);
setTimeout(function() {
SubscriptionManager.init();
}, 200);
setTimeout(function() {
check_core();
}, 800);
setTimeout(function() {
loadAnnouncement();
}, 2000);
});
XHR.poll(3, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', null, function(x, status) {
if (x && x.status == 200) {
var updates = [];
@ -3613,6 +3637,8 @@
}
get_run_mode();
get_rule_mode();
get_oc_settings();
var webContent = status.clash ? '<input type="button" class="dashboard-btn" value="<%:Yacd%>" onclick="return ycad_dashboard(this)"/>' : '<input type="button" class="dashboard-btn" value="<%:Yacd%>" onclick="event.preventDefault(); event.stopPropagation(); return false;"/>';
updates.push({element: DOMCache.web, content: webContent});
@ -3641,8 +3667,6 @@
StateManager.batchUpdateDOM(updates);
get_oc_settings();
StateManager.current_status = status;
if (status.daip) {
@ -3716,28 +3740,6 @@
clashversion_check();
});
get_rule_mode();
document.addEventListener('DOMContentLoaded', function() {
DarkModeDetector.init();
setTimeout(function() {
ConfigFileManager.init();
}, 200);
setTimeout(function() {
SubscriptionManager.init();
}, 600);
setTimeout(function() {
check_core();
}, 800);
setTimeout(function() {
loadAnnouncement();
}, 2000);
});
window.addEventListener('beforeunload', function() {
WSManager.closeAll();
SystemStatusManager.stop();
@ -4009,7 +4011,6 @@
function get_rule_mode() {
if (SettingsManager.isPollPaused('rule_mode')) {
s = setTimeout("get_rule_mode()", 1000);
return;
}
@ -4043,7 +4044,6 @@
}
}
}, true);
s = setTimeout("get_rule_mode()", 5000);
}
function switch_rule_mode(value) {
@ -4084,6 +4084,7 @@
}
function switch_run_mode(value) {
LogManager.startLogDisplay('<%:Saving...%>');
return SettingsManager.switchSetting(
'run_mode',
value,
@ -4366,6 +4367,11 @@
}
DOMCache.core_version_text.textContent = coreVersionText;
if (DOMCache.core_version_text.scrollWidth > DOMCache.core_version_text.clientWidth) {
DOMCache.core_version_text.title = coreVersionText;
} else {
DOMCache.core_version_text.title = '';
}
DOMCache.core_version_display.style.display = 'flex';
var existingDot = DOMCache.core_version_display.querySelector('.update-dot');
@ -4398,6 +4404,11 @@
}
DOMCache.plugin_version_text.textContent = pluginVersionText;
if (DOMCache.plugin_version_text.scrollWidth > DOMCache.plugin_version_text.clientWidth) {
DOMCache.plugin_version_text.title = pluginVersionText;
} else {
DOMCache.plugin_version_text.title = '';
}
DOMCache.plugin_version_display.style.display = 'flex';
var existingDot = DOMCache.plugin_version_display.querySelector('.update-dot');
@ -4717,7 +4728,7 @@
if (DOMCache.clash && StateManager.current_status) {
DOMCache.clash.innerHTML = isRunning ?
'<b style=color:var(--success-color)>' + (StateManager.current_status.core_type || 'OpenClash') +'&nbsp;&nbsp;&nbsp;<%:Running%></b>' :
'<b style=color:var(--success-color)>' + (StateManager.current_status.core_type || 'OpenClash') +'&nbsp;<%:Running%></b>' :
'<b style=color:var(--error-color)><%:Not Running%></b>';
}

View File

@ -2100,6 +2100,9 @@ msgstr "第六步:删除 OpenClash 残留文件..."
msgid "OpenClash Already Stop!"
msgstr "OpenClash 关闭成功!"
msgid "Skip Reload OpenClash Firewall Rules Until 5 Minutes Later..."
msgstr "5 分钟内重置已超过 3 次,跳过本次 OpenClash 防火墙规则重置..."
msgid "Reload OpenClash Firewall Rules..."
msgstr "重置 OpenClash 防火墙规则..."

View File

@ -3130,16 +3130,28 @@ start_watchdog()
reload_service()
{
enable=$(uci -q get openclash.config.enable)
MAX_RELOAD=10
if pidof clash >/dev/null && [ "$enable" == "1" ] && [ "$1" == "firewall" ]; then
LAST_RELOAD_TIME=$(grep "Reload OpenClash Firewall Rules..." "$LOG_FILE" | tail -n 1 | awk '{print $1" "$2}')
if [ -n "$LAST_RELOAD_TIME" ]; then
LAST_RELOAD_TS=$(date -d "$LAST_RELOAD_TIME" +%s 2>/dev/null)
NOW_TS=$(date +%s)
if [ -n "$LAST_RELOAD_TS" ] && [ $((NOW_TS - LAST_RELOAD_TS)) -lt 300 ]; then
LAST_LINE=$(grep "Reload OpenClash Firewall Rules...$" "$LOG_FILE" | tail -n 1)
LAST_TIME=$(echo "$LAST_LINE" | awk '{print $1" "$2}')
LAST_TS=$(date -d "$LAST_TIME" +%s 2>/dev/null)
CUR_RELOAD_NUM=$(echo "$LAST_LINE" | grep -oE '【[0-9]+/' | grep -oE '[0-9]+')
if [ -n "$LAST_TS" ] && [ $((NOW_TS - LAST_TS)) -gt 300 ]; then
CUR_RELOAD_NUM=0
fi
[ -z "$CUR_RELOAD_NUM" ] && CUR_RELOAD_NUM=0
CUR_RELOAD_NUM=$((CUR_RELOAD_NUM+1))
[ "$CUR_RELOAD_NUM" -gt "$MAX_RELOAD" ] && CUR_RELOAD_NUM=$MAX_RELOAD
RELOAD_COUNT=$(grep "Reload OpenClash Firewall Rules...$" "$LOG_FILE" | awk '{print $1" "$2}' | while read t; do
TS=$(date -d "$t" +%s 2>/dev/null)
[ -n "$TS" ] && [ $((NOW_TS - TS)) -le 300 ] && echo 1
done | wc -l)
if [ "$RELOAD_COUNT" -ge "$MAX_RELOAD" ]; then
LOG_OUT "【${CUR_RELOAD_NUM}/$MAX_RELOAD】Skip Reload OpenClash Firewall Rules Until 5 Minutes Later..."
exit 0
fi
fi
LOG_OUT "Reload OpenClash Firewall Rules..."
LOG_OUT "【${CUR_RELOAD_NUM}/$MAX_RELOAD】Reload OpenClash Firewall Rules..."
revert_firewall
do_run_mode
get_config

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 254 KiB

File diff suppressed because one or more lines are too long

View File

@ -692,6 +692,7 @@
2402:1600::/32
2402:16e0::/32
2402:1740::/32
2402:18a0::/32
2402:19c0::/32
2402:1f80::/32
2402:2000::/32
@ -1573,7 +1574,6 @@
2405:ed40::/32
2405:ef40::/30
2405:f340::/32
2405:f3c0::/32
2405:f580::/32
2405:f6c0::/32
2405:f940::/32

View File

@ -6345,6 +6345,7 @@
165.101.122.0/23
165.101.144.0/23
165.101.170.0/23
165.101.208.0/23
166.111.0.0/16
167.139.0.0/16
167.189.0.0/16

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 +1 @@
import{d as t,bx as r}from"./index-BfxF6Zjo.js";const o=({children:e})=>t(r,{get children(){return[e," - MetaCubeXD"]}});export{o as D};
import{f as t,bA as r}from"./index-CtVw7BLk.js";const o=({children:e})=>t(r,{get children(){return[e," - MetaCubeXD"]}});export{o as D};

View File

@ -1,5 +1,5 @@
import{N as o}from"./index-BfxF6Zjo.js";/**
* @license @tabler/icons-solidjs v3.31.0 - MIT
import{P as o}from"./index-CtVw7BLk.js";/**
* @license @tabler/icons-solidjs v3.34.0 - MIT
*
* This source code is licensed under the MIT license.
* See the LICENSE file in the root directory of this source tree.

View File

@ -0,0 +1 @@
import{u as O,f as e,t as u,i as t,ad as I,ae as q,F as x,af as B,ag as H,ah as c,ai as X,aj as Z,h as C,ak as V,al as J,am as K,an as Q,T as U,b as Y,A as ee,C as z,ao as te,V as re,_ as F,G as ae,B as j,a2 as le,a0 as G,a3 as se,$ as A,a9 as ne,ab as ie,q as oe}from"./index-CtVw7BLk.js";import{c as ce,I as de,a as ge,f as P,b as ue,d as he,g as ve,i as me,j as pe,r as fe}from"./index-CPvx_C2g.js";import{D as be}from"./DocumentTitle-D9yyEXNP.js";var _e=u('<div class="flex flex-col gap-4"><div><select class=select></select></div><div><select class=select></select></div><div><select class=select>'),M=u("<option>");const $e=b=>{const[i]=O();return e(U,{ref:s=>b.ref?.(s),get icon(){return e(Q,{size:24})},get title(){return i("logsSettings")},get children(){var s=_e(),h=s.firstChild,o=h.firstChild,_=h.nextSibling,m=_.firstChild,y=_.nextSibling,p=y.firstChild;return t(h,e(I,{withDivider:!0,get children(){return i("tableSize")}}),o),o.addEventListener("change",r=>q(r.target.value)),t(o,e(x,{get each(){return Object.values(B)},children:r=>(()=>{var l=M();return l.value=r,t(l,()=>i(r)),l})()})),t(_,e(I,{withDivider:!0,get children(){return i("logLevel")}}),m),m.addEventListener("change",r=>H(r.target.value)),t(m,e(x,{get each(){return[c.Info,c.Error,c.Warning,c.Debug,c.Silent]},children:r=>(()=>{var l=M();return l.value=r,t(l,()=>i(r)),l})()})),t(y,e(I,{withDivider:!0,get children(){return i("logMaxRows")}}),p),p.addEventListener("change",r=>X(parseInt(r.target.value))),t(p,e(x,{each:Z,children:r=>(()=>{var l=M();return l.value=r,t(l,r),l})()})),C(()=>o.value=V()),C(()=>m.value=J()),C(()=>p.value=K()),s}})};var Se=u("<span>"),xe=u('<div class="flex h-full flex-col gap-2"><div class="join w-full"><input type=search class="input input-sm join-item flex-1 flex-shrink-0 input-primary"></div><div class="overflow-x-auto rounded-md bg-base-300 whitespace-nowrap"><table><thead class="sticky top-0 z-10"></thead><tbody>'),Ce=u("<tr>"),ye=u('<th class=bg-base-200><div class="flex items-center"><div>'),we=u('<tr class="hover:!bg-primary hover:text-primary-content">'),Le=u("<td class=py-2>");const N=(b,i,s,h)=>{const o=fe(b.getValue(i),s);return h({itemRank:o}),o.passed},ke=()=>{const b=Y();if(!ee())return b("/setup",{replace:!0}),null;let i;const[s]=O(),[h,o]=z(""),{logs:_,paused:m,setPaused:y}=te(),[p,r]=re(z([]),{name:"logsTableSorting",storage:localStorage}),l=[{header:s("sequence"),accessorFn:n=>n.seq},{header:s("type"),accessorFn:n=>n.type,cell:({row:n})=>{const f=n.original.type;let d="";switch(f){case c.Error:d="text-error";break;case c.Warning:d="text-warning";break;case c.Info:d="text-info";break;case c.Debug:d="text-success";break}return(()=>{var $=Se();return F($,d),t($,()=>`[${n.original.type}]`),$})()}},{header:s("payload"),accessorFn:n=>n.payload}],k=ce({filterFns:{fuzzy:N},state:{get globalFilter(){return h()},get sorting(){return p()}},get data(){return _()},sortDescFirst:!0,columns:l,onGlobalFilterChange:o,onSortingChange:r,globalFilterFn:N,getFilteredRowModel:pe(),getSortedRowModel:me(),getCoreRowModel:ve()});return[e(be,{get children(){return s("logs")}}),(()=>{var n=xe(),f=n.firstChild,d=f.firstChild,$=f.nextSibling,R=$.firstChild,D=R.firstChild,W=D.nextSibling;return d.$$input=a=>o(a.target.value),t(f,e(j,{class:"join-item btn-sm btn-primary",onClick:()=>y(a=>!a),get icon(){return ae(()=>!!m())()?e(de,{}):e(ge,{})}}),null),t(f,e(j,{class:"join-item btn-sm btn-primary",onClick:()=>i?.showModal(),get icon(){return e(le,{})}}),null),t(D,e(G,{get each(){return k.getHeaderGroups()},children:a=>{const v=a();return(()=>{var g=Ce();return t(g,e(G,{get each(){return v.headers},children:w=>{const S=w();return(()=>{var E=ye(),T=E.firstChild,L=T.firstChild;return se(L,"click",S.column.getToggleSortingHandler(),!0),t(L,()=>P(S.column.columnDef.header,S.getContext())),t(T,()=>({asc:e(he,{}),desc:e(ue,{})})[S.column.getIsSorted()]??null,null),C(()=>F(L,A(S.column.getCanSort()&&"cursor-pointer select-none","flex-1"))),E})()}})),g})()}})),t(W,e(x,{get each(){return k.getRowModel().rows},children:a=>(()=>{var v=we();return t(v,e(x,{get each(){return a.getVisibleCells()},children:g=>(()=>{var w=Le();return t(w,()=>P(g.column.columnDef.cell,g.getContext())),w})()})),v})()})),t(n,e($e,{ref:a=>i=a}),null),C(a=>{var v=s("search"),g=A(ne(V()),"table relative rounded-none");return v!==a.e&&ie(d,"placeholder",a.e=v),g!==a.t&&F(R,a.t=g),a},{e:void 0,t:void 0}),n})()]};oe(["input","click"]);export{ke as default};

View File

@ -1 +0,0 @@
import{u as O,d as e,t as h,i as t,ab as I,ac as V,F as x,ad as q,ae as H,af as d,ag as Z,ah as Q,g as C,ai as W,aj as X,ak as Y,al as J,Q as K,b as U,y as ee,A as z,am as te,T as re,Y as F,E as ae,B as j,a0 as le,_ as A,a1 as se,Z as G,a7 as ne,a9 as ie,n as oe}from"./index-BfxF6Zjo.js";import{c as ce,I as de,a as ge,f as P,b as ue,d as he,g as ve,i as me,j as fe,r as be}from"./index-CXfh_Ffl.js";import{D as pe}from"./DocumentTitle-qgMGpI7d.js";var _e=h('<div class="flex flex-col gap-4"><div><select class=select></select></div><div><select class=select></select></div><div><select class=select>'),k=h("<option>");const $e=v=>{const[l]=O();return e(K,{ref:n=>{var o;return(o=v.ref)==null?void 0:o.call(v,n)},get icon(){return e(J,{size:24})},get title(){return l("logsSettings")},get children(){var n=_e(),o=n.firstChild,c=o.firstChild,_=o.nextSibling,f=_.firstChild,y=_.nextSibling,b=y.firstChild;return t(o,e(I,{withDivider:!0,get children(){return l("tableSize")}}),c),c.addEventListener("change",r=>V(r.target.value)),t(c,e(x,{get each(){return Object.values(q)},children:r=>(()=>{var s=k();return s.value=r,t(s,()=>l(r)),s})()})),t(_,e(I,{withDivider:!0,get children(){return l("logLevel")}}),f),f.addEventListener("change",r=>H(r.target.value)),t(f,e(x,{get each(){return[d.Info,d.Error,d.Warning,d.Debug,d.Silent]},children:r=>(()=>{var s=k();return s.value=r,t(s,()=>l(r)),s})()})),t(y,e(I,{withDivider:!0,get children(){return l("logMaxRows")}}),b),b.addEventListener("change",r=>Z(parseInt(r.target.value))),t(b,e(x,{each:Q,children:r=>(()=>{var s=k();return s.value=r,t(s,r),s})()})),C(()=>c.value=W()),C(()=>f.value=X()),C(()=>b.value=Y()),n}})};var Se=h("<span>"),xe=h('<div class="flex h-full flex-col gap-2"><div class="join w-full"><input type=search class="input input-sm join-item flex-1 flex-shrink-0 input-primary"></div><div class="overflow-x-auto rounded-md bg-base-300 whitespace-nowrap"><table><thead class="sticky top-0 z-10"></thead><tbody>'),Ce=h("<tr>"),ye=h('<th class=bg-base-200><div class="flex items-center"><div>'),we=h('<tr class="hover:!bg-primary hover:text-primary-content">'),Le=h("<td class=py-2>");const N=(v,l,n,o)=>{const c=be(v.getValue(l),n);return o({itemRank:c}),c.passed},Me=()=>{const v=U();if(!ee())return v("/setup",{replace:!0}),null;let l;const[n]=O(),[o,c]=z(""),{logs:_,paused:f,setPaused:y}=te(),[b,r]=re(z([]),{name:"logsTableSorting",storage:localStorage}),s=[{header:n("sequence"),accessorFn:i=>i.seq},{header:n("type"),accessorFn:i=>i.type,cell:({row:i})=>{const p=i.original.type;let g="";switch(p){case d.Error:g="text-error";break;case d.Warning:g="text-warning";break;case d.Info:g="text-info";break;case d.Debug:g="text-success";break}return(()=>{var $=Se();return F($,g),t($,()=>`[${i.original.type}]`),$})()}},{header:n("payload"),accessorFn:i=>i.payload}],M=ce({filterFns:{fuzzy:N},state:{get globalFilter(){return o()},get sorting(){return b()}},get data(){return _()},sortDescFirst:!0,columns:s,onGlobalFilterChange:c,onSortingChange:r,globalFilterFn:N,getFilteredRowModel:fe(),getSortedRowModel:me(),getCoreRowModel:ve()});return[e(pe,{get children(){return n("logs")}}),(()=>{var i=xe(),p=i.firstChild,g=p.firstChild,$=p.nextSibling,E=$.firstChild,R=E.firstChild,B=R.nextSibling;return g.$$input=a=>c(a.target.value),t(p,e(j,{class:"join-item btn-sm btn-primary",onClick:()=>y(a=>!a),get icon(){return ae(()=>!!f())()?e(de,{}):e(ge,{})}}),null),t(p,e(j,{class:"join-item btn-sm btn-primary",onClick:()=>l==null?void 0:l.showModal(),get icon(){return e(le,{})}}),null),t(R,e(A,{get each(){return M.getHeaderGroups()},children:a=>{const m=a();return(()=>{var u=Ce();return t(u,e(A,{get each(){return m.headers},children:w=>{const S=w();return(()=>{var D=ye(),T=D.firstChild,L=T.firstChild;return se(L,"click",S.column.getToggleSortingHandler(),!0),t(L,()=>P(S.column.columnDef.header,S.getContext())),t(T,()=>({asc:e(he,{}),desc:e(ue,{})})[S.column.getIsSorted()]??null,null),C(()=>F(L,G(S.column.getCanSort()&&"cursor-pointer select-none","flex-1"))),D})()}})),u})()}})),t(B,e(x,{get each(){return M.getRowModel().rows},children:a=>(()=>{var m=we();return t(m,e(x,{get each(){return a.getVisibleCells()},children:u=>(()=>{var w=Le();return t(w,()=>P(u.column.columnDef.cell,u.getContext())),w})()})),m})()})),t(i,e($e,{ref:a=>l=a}),null),C(a=>{var m=n("search"),u=G(ne(W()),"table relative rounded-none");return m!==a.e&&ie(g,"placeholder",a.e=m),u!==a.t&&F(E,a.t=u),a},{e:void 0,t:void 0}),i})()]};oe(["input","click"]);export{Me as default};

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 @@
import{u as B,a as T,b as q,c as z,v as H,z as b,o as M,e as h,d,t as v,f as N,i as o,g as X,S as G,B as U,I as J,F as K,h as E,s as y,j as O,k as Q,l as W,m as C,n as Y}from"./index-BfxF6Zjo.js";import{D as Z}from"./DocumentTitle-qgMGpI7d.js";const l=[];for(let t=0;t<256;++t)l.push((t+256).toString(16).slice(1));function tt(t,n=0){return(l[t[n+0]]+l[t[n+1]]+l[t[n+2]]+l[t[n+3]]+"-"+l[t[n+4]]+l[t[n+5]]+"-"+l[t[n+6]]+l[t[n+7]]+"-"+l[t[n+8]]+l[t[n+9]]+"-"+l[t[n+10]]+l[t[n+11]]+l[t[n+12]]+l[t[n+13]]+l[t[n+14]]+l[t[n+15]]).toLowerCase()}let $;const et=new Uint8Array(16);function nt(){if(!$){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");$=crypto.getRandomValues.bind(crypto)}return $(et)}const st=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),R={randomUUID:st};function lt(t,n,x){var m;if(R.randomUUID&&!t)return R.randomUUID();t=t||{};const i=t.random??((m=t.rng)==null?void 0:m.call(t))??nt();if(i.length<16)throw new Error("Random bytes length must be >= 16");return i[6]=i[6]&15|64,i[8]=i[8]&63|128,tt(i)}var rt=v("<option>"),it=v('<div class="mx-auto flex max-w-screen-sm flex-col items-center gap-4 py-10"><form class=contents><div class="flex w-full flex-col gap-4"><fieldset class=fieldset><label class=label for=url><span></span></label><input id=url name=url type=url class="input w-full"placeholder=http(s)://{hostname}:{port} list=defaultEndpoints><datalist id=defaultEndpoints><option value=http://127.0.0.1:9090></option></datalist></fieldset><fieldset class=fieldset><label class=label for=secret><span></span></label><input id=secret name=secret type=password class="input w-full"placeholder=secret></fieldset></div></form><div class="grid w-full grid-cols-2 gap-4">'),at=v('<div class="badge flex w-full cursor-pointer items-center justify-between gap-4 py-4 badge-info"><span class=truncate>');const ot=b.object({url:b.string().min(1),secret:b.string()}),ut=()=>{const[t]=B(),n=T(),x=q(),i=s=>{C(s),x("/overview",{replace:!0})},m=async s=>{const e=h().find(r=>r.id===s);e&&await E(e.url,e.secret)&&i(s)},f=async({url:s,secret:e})=>{const r=O(s);if(!await E(r,e))return;const a=lt(),c=h().slice(),u=c.find(w=>w.url===r);if(!u){y([{id:a,url:r,secret:e},...c]),i(a);return}u.secret=e,u.id=a,y(c),i(a)},I=s=>{const{message:e}=s;Q.error(e)},{form:_}=z({extend:H({schema:ot}),onSubmit:f,onError:I}),L=s=>{W()===s&&C(""),y(h().filter(e=>e.id!==s))};return M(async()=>{var r,a;const s=n.search||window.location.search||((a=(r=n.hash.match(/\?.*$/))==null?void 0:r[0])==null?void 0:a.replace("?",""));if(!s)return;const e=new URLSearchParams(s);e.has("hostname")?await f({url:`${e.get("http")?"http:":e.get("https")?"https:":window.location.protocol}//${e.get("hostname")}${e.get("port")?`:${e.get("port")}`:""}`,secret:e.get("secret")??""}):h().length===0&&await f({url:"http://127.0.0.1:9090",secret:""})}),[d(Z,{get children(){return t("setup")}}),(()=>{var s=it(),e=s.firstChild,r=e.firstChild,a=r.firstChild,c=a.firstChild,u=c.firstChild,w=c.nextSibling,S=w.nextSibling;S.firstChild;var D=a.nextSibling,k=D.firstChild,j=k.firstChild,V=e.nextSibling;return N(_,e,()=>_),o(u,()=>t("endpointURL")),o(S,d(G,{get when(){return window.location.origin!=="http://127.0.0.1:9090"},get children(){var p=rt();return X(()=>p.value=window.location.origin),p}}),null),o(j,()=>t("secret")),o(r,d(U,{type:"submit",class:"uppercase btn-primary",get children(){return t("add")}}),null),o(V,d(K,{get each(){return h()},children:({id:p,url:F})=>(()=>{var g=at(),P=g.firstChild;return g.$$click=()=>m(p),o(P,F),o(g,d(U,{class:"btn-circle text-white btn-ghost btn-xs",onClick:A=>{A.stopPropagation(),L(p)},get children(){return d(J,{})}}),null),g})()})),s})()]};Y(["click"]);export{ut as default};

View File

@ -0,0 +1 @@
import{u as A,a as B,b as T,c as H,v as M,o as N,d as X,e as h,f as d,t as y,g as z,i as o,h as G,S as J,B as _,I as K,F as O,j as S,s as w,k as Q,l as W,m as Y,n as U,p as E,q as Z}from"./index-CtVw7BLk.js";import{D as tt}from"./DocumentTitle-D9yyEXNP.js";const l=[];for(let t=0;t<256;++t)l.push((t+256).toString(16).slice(1));function et(t,n=0){return(l[t[n+0]]+l[t[n+1]]+l[t[n+2]]+l[t[n+3]]+"-"+l[t[n+4]]+l[t[n+5]]+"-"+l[t[n+6]]+l[t[n+7]]+"-"+l[t[n+8]]+l[t[n+9]]+"-"+l[t[n+10]]+l[t[n+11]]+l[t[n+12]]+l[t[n+13]]+l[t[n+14]]+l[t[n+15]]).toLowerCase()}let b;const nt=new Uint8Array(16);function st(){if(!b){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");b=crypto.getRandomValues.bind(crypto)}return b(nt)}const lt=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),C={randomUUID:lt};function it(t,n,$){if(C.randomUUID&&!t)return C.randomUUID();t=t||{};const i=t.random??t.rng?.()??st();if(i.length<16)throw new Error("Random bytes length must be >= 16");return i[6]=i[6]&15|64,i[8]=i[8]&63|128,et(i)}var rt=y("<option>"),at=y('<div class="mx-auto flex max-w-screen-sm flex-col items-center gap-4 py-10"><form class=contents><div class="flex w-full flex-col gap-4"><fieldset class=fieldset><label class=label for=url><span></span></label><input id=url name=url type=url class="input w-full"placeholder=http(s)://{hostname}:{port} list=defaultEndpoints><datalist id=defaultEndpoints><option value=http://127.0.0.1:9090></option></datalist></fieldset><fieldset class=fieldset><label class=label for=secret><span></span></label><input id=secret name=secret type=password class="input w-full"placeholder=secret></fieldset></div></form><div class="grid w-full grid-cols-2 gap-4">'),ot=y('<div class="badge flex w-full cursor-pointer items-center justify-between gap-4 py-4 badge-info"><span class=truncate>');const ct=N({url:E().min(1),secret:E()}),pt=()=>{const[t]=A(),n=B(),$=T(),i=s=>{U(s),$("/overview",{replace:!0})},R=async s=>{const e=h().find(r=>r.id===s);e&&await S(e.url,e.secret)&&i(s)},g=async({url:s,secret:e})=>{const r=Q(s);if(!await S(r,e))return;const a=it(),c=h().slice(),u=c.find(f=>f.url===r);if(!u){w([{id:a,url:r,secret:e},...c]),i(a);return}u.secret=e,u.id=a,w(c),i(a)},I=s=>{const{message:e}=s;W.error(e)},{form:v}=H({extend:M({schema:ct}),onSubmit:g,onError:I}),L=s=>{Y()===s&&U(""),w(h().filter(e=>e.id!==s))};return X(async()=>{const s=n.search||window.location.search||n.hash.match(/\?.*$/)?.[0]?.replace("?","");if(!s)return;const e=new URLSearchParams(s);e.has("hostname")?await g({url:`${e.get("http")?"http:":e.get("https")?"https:":window.location.protocol}//${e.get("hostname")}${e.get("port")?`:${e.get("port")}`:""}`,secret:e.get("secret")??""}):h().length===0&&await g({url:"http://127.0.0.1:9090",secret:""})}),[d(tt,{get children(){return t("setup")}}),(()=>{var s=at(),e=s.firstChild,r=e.firstChild,a=r.firstChild,c=a.firstChild,u=c.firstChild,f=c.nextSibling,x=f.nextSibling;x.firstChild;var D=a.nextSibling,k=D.firstChild,j=k.firstChild,V=e.nextSibling;return z(v,e,()=>v),o(u,()=>t("endpointURL")),o(x,d(J,{get when(){return window.location.origin!=="http://127.0.0.1:9090"},get children(){var p=rt();return G(()=>p.value=window.location.origin),p}}),null),o(j,()=>t("secret")),o(r,d(_,{type:"submit",class:"uppercase btn-primary",get children(){return t("add")}}),null),o(V,d(O,{get each(){return h()},children:({id:p,url:F})=>(()=>{var m=ot(),P=m.firstChild;return m.$$click=()=>R(p),o(P,F),o(m,d(_,{class:"btn-circle text-white btn-ghost btn-xs",onClick:q=>{q.stopPropagation(),L(p)},get children(){return d(K,{})}}),null),m})()})),s})()]};Z(["click"]);export{pt as default};

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

@ -0,0 +1 @@
import{Y as a,b6 as m}from"./index-CtVw7BLk.js";const s=o=>a(o).locale(m()).fromNow();export{s as f};

View File

@ -1 +0,0 @@
import{W as a,b4 as m}from"./index-BfxF6Zjo.js";const s=o=>a(o).locale(m()).fromNow();export{s as f};

View File

@ -9,8 +9,8 @@
<meta name="theme-color" content="#000000" />
<link rel="icon" type="image/svg+xml" href="./favicon.svg" />
<link rel="apple-touch-icon" href="./pwa-192x192.png" />
<script type="module" crossorigin src="./assets/index-BfxF6Zjo.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-Bg_1VLqf.css">
<script type="module" crossorigin src="./assets/index-CtVw7BLk.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-CjeEzpw1.css">
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
<body>

View File

@ -1 +1 @@
if(!self.define){let s,e={};const i=(i,n)=>(i=new URL(i+".js",n).href,e[i]||new Promise((e=>{if("document"in self){const s=document.createElement("script");s.src=i,s.onload=e,document.head.appendChild(s)}else s=i,importScripts(i),e()})).then((()=>{let s=e[i];if(!s)throw new Error(`Module ${i} didnt register its module`);return s})));self.define=(n,r)=>{const l=s||("document"in self?document.currentScript.src:"")||location.href;if(e[l])return;let o={};const t=s=>i(s,l),u={module:{uri:l},exports:o,require:t};e[l]=Promise.all(n.map((s=>u[s]||t(s)))).then((s=>(r(...s),o)))}}define(["./workbox-3e8df8c8"],(function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"assets/Config-B1EwbU18.js",revision:null},{url:"assets/Connections-WHEuHC_k.js",revision:null},{url:"assets/DocumentTitle-qgMGpI7d.js",revision:null},{url:"assets/IconReload-bqqdFQ5q.js",revision:null},{url:"assets/index-BfxF6Zjo.js",revision:null},{url:"assets/index-Bg_1VLqf.css",revision:null},{url:"assets/index-CXfh_Ffl.js",revision:null},{url:"assets/Logs-DmnD-Vbh.js",revision:null},{url:"assets/Overview-BigJMrEz.js",revision:null},{url:"assets/Proxies-DCaTGxZZ.js",revision:null},{url:"assets/Rules-T7FAMMsr.js",revision:null},{url:"assets/Setup-2nY6XKtT.js",revision:null},{url:"assets/time-M8P-MK1v.js",revision:null},{url:"index.html",revision:"761f846e47c016c7f82446639da40073"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"f5b3372f312fbbe60a6ed8c03741ff80"},{url:"pwa-192x192.png",revision:"c45f48fc59b5bf47e6cbf1626aff51fc"},{url:"pwa-512x512.png",revision:"a311504ae6a46bd29b5678a410aaafc6"},{url:"manifest.webmanifest",revision:"9367f610ffbd3bb959a69b706013d50e"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html")))}));
if(!self.define){let s,e={};const i=(i,n)=>(i=new URL(i+".js",n).href,e[i]||new Promise(e=>{if("document"in self){const s=document.createElement("script");s.src=i,s.onload=e,document.head.appendChild(s)}else s=i,importScripts(i),e()}).then(()=>{let s=e[i];if(!s)throw new Error(`Module ${i} didnt register its module`);return s}));self.define=(n,r)=>{const l=s||("document"in self?document.currentScript.src:"")||location.href;if(e[l])return;let o={};const t=s=>i(s,l),u={module:{uri:l},exports:o,require:t};e[l]=Promise.all(n.map(s=>u[s]||t(s))).then(s=>(r(...s),o))}}define(["./workbox-3e8df8c8"],function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"assets/Config-CJArtZu5.js",revision:null},{url:"assets/Connections-DrdK5iM_.js",revision:null},{url:"assets/DocumentTitle-D9yyEXNP.js",revision:null},{url:"assets/IconReload-CmNrVSiK.js",revision:null},{url:"assets/index-CjeEzpw1.css",revision:null},{url:"assets/index-CPvx_C2g.js",revision:null},{url:"assets/index-CtVw7BLk.js",revision:null},{url:"assets/Logs-6_hZxZi4.js",revision:null},{url:"assets/Overview-fNiy7dgO.js",revision:null},{url:"assets/Proxies-BlH7z6vo.js",revision:null},{url:"assets/Rules-CBJhwbc_.js",revision:null},{url:"assets/Setup-DO3zhXim.js",revision:null},{url:"assets/time-CVcUxeVU.js",revision:null},{url:"index.html",revision:"8827d25be7daaa9cfcce4e86573c3f84"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"f5b3372f312fbbe60a6ed8c03741ff80"},{url:"pwa-192x192.png",revision:"c45f48fc59b5bf47e6cbf1626aff51fc"},{url:"pwa-512x512.png",revision:"a311504ae6a46bd29b5678a410aaafc6"},{url:"manifest.webmanifest",revision:"9367f610ffbd3bb959a69b706013d50e"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.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

View File

@ -30,8 +30,8 @@
name="theme-color"
content="#FFFFFF"
/>
<script type="module" crossorigin src="./assets/index-CcoMfRe9.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-CJPpe52U.css">
<script type="module" crossorigin src="./assets/index-DviCQKoc.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-8jbeqkyz.css">
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
<body class="overflow-hidden">
<div id="app"></div>

View File

@ -1 +1 @@
if(!self.define){let e,i={};const s=(s,n)=>(s=new URL(s+".js",n).href,i[s]||new Promise((i=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=i,document.head.appendChild(e)}else e=s,importScripts(s),i()})).then((()=>{let e=i[s];if(!e)throw new Error(`Module ${s} didnt register its module`);return e})));self.define=(n,r)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(i[c])return;let f={};const o=e=>s(e,c),t={module:{uri:c},exports:f,require:o};i[c]=Promise.all(n.map((e=>t[e]||o(e)))).then((e=>(r(...e),f)))}}define(["./workbox-3e8df8c8"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-CcoMfRe9.js",revision:null},{url:"assets/index-CJPpe52U.css",revision:null},{url:"index.html",revision:"b56eb65c8b1d4bf0b1cb3798c99073c9"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"7f1c4521acc10694fefef8f72dd2ea5f"},{url:"pwa-192x192.png",revision:"021df52501f4357c03eebd808f40dc6a"},{url:"pwa-512x512.png",revision:"d2f759aaabcb2c44ff52b27fde3de6e0"},{url:"pwa-maskable-192x192.png",revision:"7cd11dc5f0490b349d23eef5591d10e5"},{url:"pwa-maskable-512x512.png",revision:"8c97dc367a85a5a1eba523b24f79d03b"},{url:"manifest.webmanifest",revision:"6437e90df75a01bce95a7c03b16fc311"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
if(!self.define){let e,i={};const s=(s,n)=>(s=new URL(s+".js",n).href,i[s]||new Promise((i=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=i,document.head.appendChild(e)}else e=s,importScripts(s),i()})).then((()=>{let e=i[s];if(!e)throw new Error(`Module ${s} didnt register its module`);return e})));self.define=(n,r)=>{const f=e||("document"in self?document.currentScript.src:"")||location.href;if(i[f])return;let c={};const o=e=>s(e,f),t={module:{uri:f},exports:c,require:o};i[f]=Promise.all(n.map((e=>t[e]||o(e)))).then((e=>(r(...e),c)))}}define(["./workbox-3e8df8c8"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-8jbeqkyz.css",revision:null},{url:"assets/index-DviCQKoc.js",revision:null},{url:"index.html",revision:"bff44c08ebed5536171e561fc1e38aae"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"7f1c4521acc10694fefef8f72dd2ea5f"},{url:"pwa-192x192.png",revision:"021df52501f4357c03eebd808f40dc6a"},{url:"pwa-512x512.png",revision:"d2f759aaabcb2c44ff52b27fde3de6e0"},{url:"pwa-maskable-192x192.png",revision:"7cd11dc5f0490b349d23eef5591d10e5"},{url:"pwa-maskable-512x512.png",revision:"8c97dc367a85a5a1eba523b24f79d03b"},{url:"manifest.webmanifest",revision:"6437e90df75a01bce95a7c03b16fc311"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));

View File

@ -42,3 +42,241 @@ dl.google.com
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top
# Synology ddns
account.synology.com
checkip.dyndns.org
checkip.synology.com
checkipv6.dyndns.org
checkipv6.synology.com
checkport.synology.com
ddns.synology.com
# google
dl.google.com
# github proxy
gh-proxy.com
gitmirror.com
ghfast.top