import{lt as e}from"./CaGtQlYh.js";import{Gt as t,It as n}from"#entry";import{t as r}from"./CJgAejf_.js";import{c as i,d as a,f as o,h as s,i as c,m as l,s as u,u as d}from"./DohEsvF1.js";import{t as f}from"./DhTvfVif.js";import{t as p}from"./taTi6IIU.js";var m=t(`proxies`,()=>{let t=r(),m=f(),h=e([]),g=e([]),_=e({}),v=e({}),y=e({}),b=e({}),x=e({}),S=e({}),C=e(!1),w=n(`collapsedMap`,{}),T=(e,n=!0)=>{let r=e.extra||{},i=Object.keys(r).reduce((e,n)=>{let i=r[n],a=i?.history?.at(-1)?.delay??t.latencyQualityMap.NOT_CONNECTED;return e.allTestUrlLatency[n]=a,e.allTestUrlLatencyHistory[n]=i?.history,e},{allTestUrlLatency:{},allTestUrlLatencyHistory:{}});if(n){let n=e.testUrl||t.urlForLatencyTest;if(!(n in i.allTestUrlLatency)){let r=e.history?.at(-1)?.delay??t.latencyQualityMap.NOT_CONNECTED;i.allTestUrlLatency[n]=r,i.allTestUrlLatencyHistory[n]=e.history}}return i},E=e=>e||t.urlForLatencyTest,D=e=>{if(e){for(let t of Object.values(e))if(t>0)return t}},O=(e,t)=>{let n=e[t];if(n?.length)return n;for(let t of Object.values(e))if(t?.length)return t},k=(e,t,n)=>{_.value={..._.value,[e]:{..._.value[e]||{},[t]:n}}},A=(e,t,n)=>{let r=v.value[e],i=r?.latencyTestHistory??{},a=i[t]??[],o={time:new Date().toISOString(),delay:n},s=[...a,o].slice(-10),c=r?{...r,latencyTestHistory:{...i,[t]:s}}:{name:e,alive:void 0,udp:!1,tfo:!1,xudp:!1,type:``,latency:``,provider:``,latencyTestHistory:{[t]:s}};v.value={...v.value,[e]:c}},j=(e,n)=>{let r=E(n);new Set(e.map(e=>B(e)).filter(e=>!!e)).forEach(e=>{k(e,r,t.latencyQualityMap.NOT_CONNECTED)})},M=(e,t=null)=>{let n=h.value.find(t=>t.name===e);j(n?.all??[e],t||n?.testUrl||null)},N=(e,n,r)=>{k(B(e),E(n),Number.isFinite(r)?r:t.latencyQualityMap.NOT_CONNECTED)},P=(e,t)=>{Object.entries(e).forEach(([e,n])=>{N(e,t,n)})},F=e=>{let t={...v.value},n={..._.value};e.forEach(e=>{let{allTestUrlLatency:r,allTestUrlLatencyHistory:i}=T(e),{udp:a,xudp:o,type:s,now:c,name:l,tfo:u,provider:d=``}=e,f=`alive`in e?e.alive:void 0;t[e.name]={alive:f,udp:a,xudp:o,type:s,latency:c,latencyTestHistory:i,name:l,tfo:u,provider:d},n[e.name]=r}),v.value=t,_.value=n},I=async()=>{let[{providers:e},{proxies:t}]=await Promise.all([i(),u()]),n=Object.values(t).map(t=>{if(t.all?.length&&!t.testUrl){let{testUrl:n,timeout:r}=e?.[t.name]||{};return{...t,testUrl:n,timeout:r}}return t}),r=[...t.GLOBAL?.all??[],`GLOBAL`],a=Object.values(n).filter(e=>e.all?.length).sort((e,t)=>r.indexOf(e.name)-r.indexOf(t.name)),o=Object.values(e).filter(e=>e.name!=="default"&&e.vehicleType!==`Compatible`),s=[...n,...o.flatMap(e=>e.proxies.filter(e=>!(e.name in t)).map(t=>({...t,provider:e.name})))];h.value=a,g.value=o,F(s)},L=async e=>{if(!t.autoCloseConns)return;let n=m.restructRawMsgToConnection(m.latestConnectionMsg?.connections??[],[]);if(n.length===0)return;let r=n.filter(({chains:t})=>t.includes(e)).map(({id:e})=>c(e));await Promise.allSettled(r)},R=async(e,t)=>{await o(e.name,t),await I(),await L(e.name)},z=async e=>{await l(e),await I(),await L(e)},B=e=>{let t=v.value[e];if(!e||!t)return e;let n=new Set;for(;t&&t.latency&&t.latency!==t.name;){if(n.has(t.name))return t.name;n.add(t.name);let e=v.value[t.latency];if(!e)return t.name;t=e}return t?.name??e};return{proxies:h,proxyProviders:g,latencyMap:_,proxyNodeMap:v,proxyLatencyTestingMap:y,proxyGroupLatencyTestingMap:b,proxyProviderLatencyTestingMap:x,updatingMap:S,isAllProviderUpdating:C,collapsedMap:w,fetchProxies:I,selectProxyInGroup:R,unfixProxyInGroup:z,getNowProxyNodeName:B,getLatencyByName:(e,n)=>{let r=n||t.urlForLatencyTest,i=_.value,a=i[B(e)],o=i[e],s=a?.[r];if(s)return s;let c=o?.[r];return c||(D(a)??D(o)??s??c??t.latencyQualityMap.NOT_CONNECTED)},getLatencyHistoryByName:(e,n)=>{let r=n||t.urlForLatencyTest,i=B(e),a=v.value[i]?.latencyTestHistory||{},o=v.value[e]?.latencyTestHistory||{};return O(a,r)??O(o,r)??[]},clearLatencyTestStateForNodes:j,clearLatencyTestStateForGroup:M,recordLatencyTestResult:N,recordLatencyTestResults:P,isProxyGroup:e=>{let t=v.value[e];return t?[`direct`,`reject`,`loadbalance`].includes(t.type.toLowerCase())||!!t.latency:!1},proxyLatencyTest:async(e,n,r,i)=>{let o=B(e),s=E(r),c=p();y.value[o]=!0;try{let{delay:e}=await a(o,n,s,i??t.latencyTestTimeoutDuration);N(o,s,e),A(o,s,e),c.recordTestResult(o,e>0?e:null,e>0)}catch{A(o,s,t.latencyQualityMap.NOT_CONNECTED),c.recordTestResult(o,null,!1)}finally{y.value[o]=!1}},proxyGroupLatencyTest:async e=>{let n=p();b.value[e]=!0;let r=h.value.find(t=>t.name===e),i=r?.testUrl||t.urlForLatencyTest,a=r?.all??[e];try{let a=await d(e,i,r?.timeout??t.latencyTestTimeoutDuration);await I(),P(a,i),n.recordBatchResults(a)}catch{let e=t.latencyQualityMap.NOT_CONNECTED,r={};for(let t of a){let n=B(t);n&&(r[n]=e,A(n,i,e))}n.recordBatchResults(r)}finally{b.value[e]=!1}},updateProviderByProviderName:async e=>{S.value[e]=!0;try{await s(e)}catch{}try{await I()}finally{S.value[e]=!1}},updateAllProvider:async()=>{C.value=!0;try{await Promise.allSettled(g.value.map(e=>s(e.name))),await I()}finally{C.value=!1}},proxyProviderLatencyTest:async e=>{let n=p();x.value[e]=!0;let r=g.value.find(t=>t.name===e),i=r?.testUrl||t.urlForLatencyTest,o=r?.timeout??t.latencyTestTimeoutDuration,s=r?.proxies.map(e=>e.name)??[],c={};try{for(let r=0;r{let s=B(r);try{let{delay:t}=await a(s,e,i,o);c[s]=t,N(s,i,t),A(s,i,t),n.recordTestResult(s,t>0?t:null,t>0)}catch{let e=t.latencyQualityMap.NOT_CONNECTED;c[s]=e,A(s,i,e),n.recordTestResult(s,null,!1)}}))}try{await I()}catch{}n.recordBatchResults(c)}finally{x.value[e]=!1}}}});export{m as t};