Files
infra/ru-vps/mihomo/config/ui/_nuxt/DhTvfVif.js
T
Dmitry 59a7749b18
Deploy ru-vps / deploy (push) Successful in 22s
Убрать всё, кроме mihomo
2026-06-08 23:05:05 +03:00

1 line
5.3 KiB
JavaScript

import{Y as e,_ as t,ft as n,lt as r}from"./CaGtQlYh.js";import{At as i,Gt as a,It as o}from"#entry";import"./CIa-1CJu.js";import{t as s}from"./CJgAejf_.js";import{t as c}from"./Ce_uH7zp.js";var l=typeof global==`object`&&global&&global.Object===Object&&global,u=typeof self==`object`&&self&&self.Object===Object&&self,d=l||u||Function(`return this`)(),f=d.Symbol,p=Object.prototype,m=p.hasOwnProperty,h=p.toString,g=f?f.toStringTag:void 0;function _(e){var t=m.call(e,g),n=e[g];try{e[g]=void 0;var r=!0}catch{}var i=h.call(e);return r&&(t?e[g]=n:delete e[g]),i}var v=Object.prototype.toString;function y(e){return v.call(e)}var b=`[object Null]`,x=`[object Undefined]`,S=f?f.toStringTag:void 0;function C(e){return e==null?e===void 0?x:b:S&&S in Object(e)?_(e):y(e)}function w(e){return typeof e==`object`&&!!e}var T=`[object Number]`;function E(e){return typeof e==`number`||w(e)&&C(e)==T}var D=`metacubexd_db`,O=`data_usage_logs`,k=1,A=new class{db=null;async open(){return this.db?this.db:typeof indexedDB>`u`?Promise.reject(Error(`IndexedDB is not available`)):new Promise((e,t)=>{let n=indexedDB.open(D,k);n.onupgradeneeded=e=>{let t=e.target.result;if(!t.objectStoreNames.contains(O)){let e=t.createObjectStore(O,{keyPath:`id`,autoIncrement:!0});e.createIndex(`timestamp`,`timestamp`,{unique:!1}),e.createIndex(`sourceIP`,`sourceIP`,{unique:!1}),e.createIndex(`host`,`host`,{unique:!1}),e.createIndex(`outbound`,`outbound`,{unique:!1}),e.createIndex(`process`,`process`,{unique:!1})}},n.onsuccess=t=>{this.db=t.target.result,e(this.db)},n.onerror=e=>{t(e.target.error)}})}async addLogs(e){let t=await this.open();return new Promise((n,r)=>{let i=t.transaction([O],`readwrite`),a=i.objectStore(O);e.forEach(e=>a.add(e)),i.oncomplete=()=>n(),i.onerror=e=>r(i.error)})}async query(e,t){let n=await this.open();return new Promise((r,i)=>{let a=n.transaction([O],`readonly`).objectStore(O).index(`timestamp`),o=IDBKeyRange.bound(e,t),s=a.openCursor(o),c=[];s.onsuccess=e=>{let t=e.target.result;t?(c.push({...t.value,inboundUser:t.value.inboundUser||`Unknown`}),t.continue()):r(c)},s.onerror=e=>i(s.error)})}async clearAll(){let e=await this.open();return new Promise((t,n)=>{let r=e.transaction([O],`readwrite`).objectStore(O).clear();r.onsuccess=()=>t(),r.onerror=e=>n(r.error)})}async cleanup(e){let t=await this.open();return new Promise((n,r)=>{let i=t.transaction([O],`readwrite`).objectStore(O),a=i.index(`timestamp`),o=IDBKeyRange.upperBound(e),s=a.openKeyCursor(o);s.onsuccess=e=>{let t=e.target.result;t?(i.delete(t.primaryKey),t.continue()):n()},s.onerror=e=>r(s.error)})}},j=a(`connections`,()=>{let a=c(),l=s(),u=n([]),d=n([]),f=n([]),p=n(null),m=r(!1),h=o(`traffic_data_retention`,-1),g=new Map,_=null,v=e=>`${e.timestamp}\x1F${e.sourceIP}\x1F${e.host}\x1F${e.outbound}\x1F${e.process}\x1F${e.inboundUser}`,y=async()=>{if(g.size===0)return;let e=Array.from(g.values());g.clear();try{await A.addLogs(e),h.value>0&&await A.cleanup(Date.now()-h.value)}catch(e){console.error(`[Data Usage] Failed to flush logs to IndexedDB`,e)}},b=()=>{if(_)return;let e=3e4-Date.now()%3e4||3e4;_=setTimeout(async()=>{await y(),_=null,g.size>0&&b()},e)},x=o(`dataUsageBaseline`,{upload:0,download:0}),S=0,C=0,w=new Map,T=!1,D=(e,t)=>{let n=new Map;return t.forEach(e=>n.set(e.id,e)),e.map(e=>{let t=n.get(e.id);return!t||!E(t.download)||!E(t.upload)?{...e,downloadSpeed:0,uploadSpeed:0}:{...e,downloadSpeed:e.download-t.download,uploadSpeed:e.upload-t.upload}})},O=e=>{let t=new Set,n=[];for(let r of e)t.has(r.id)||(t.add(r.id),n.push(r));for(let e of u.value)t.has(e.id)||(t.add(e.id),n.push(e));let r=e.length+200;u.value=r>0&&n.length>r?n.slice(-r):n},k=(e,t)=>t.filter(t=>!e.has(t.id)),j=()=>{w.clear(),x.value={upload:0,download:0},T=!1,console.log(`[Data Usage] Connection tracking reset due to service restart`)},M=async()=>{g.clear(),w.clear(),await A.clearAll()},N=async(e,t)=>{console.warn(`[Data Usage] removeDataUsageEntry is not supported in the new log-based model`)},P=e=>{w.forEach((t,n)=>{e.has(n)||w.delete(n)})},F=e=>{p.value=e;let t=e?.connections,n=e?.uploadTotal||0,r=e?.downloadTotal||0;if((n<S||r<C)&&(j(),M(),a.clearChartHistory()),S=n,C=r,!t||t.length===0)return;let i=D(t,d.value),o=new Set(i.map(e=>e.id));if(l.enableDataUsageTracking&&I(i),P(o),O(i),!m.value){let e=k(o,u.value);d.value=i,f.value=e.slice(-200)}},I=e=>{T||=!0;let t=Math.floor(Date.now()/6e4)*6e4,n=!1;e.forEach(e=>{let r=e.upload||0,i=e.download||0,a=0,o=0,s=w.get(e.id);if(s?(a=Math.max(0,r-s.upload),o=Math.max(0,i-s.download)):(a=r,o=i),w.set(e.id,{upload:r,download:i}),a===0&&o===0)return;n=!0;let c={timestamp:t,sourceIP:e.metadata.sourceIP||`Inner`,host:e.metadata.host||e.metadata.destinationIP,process:e.metadata.process||`Unknown`,outbound:e.chains[0]??`DIRECT`,inboundUser:e.metadata.inboundUser||e.metadata.inboundIP||e.metadata.inboundName||e.metadata.type||`Unknown`,upload:a,download:o},l=v(c),u=g.get(l);u?(u.upload+=a,u.download+=o):g.set(l,c)}),n&&b()},L=t(()=>{let e={};return d.value.forEach(t=>{t.chains.forEach(n=>{e[n]||(e[n]=0),e[n]+=t.downloadSpeed})}),e}),R=i();return e(()=>R.selectedEndpoint,()=>{S=0,C=0,w.clear()}),{allConnections:u,activeConnections:d,closedConnections:f,latestConnectionMsg:p,paused:m,speedGroupByName:L,updateFromWsMsg:F,clearDataUsage:M,removeDataUsageEntry:N,restructRawMsgToConnection:D}});export{d as a,C as i,A as n,w as r,j as t};