dns-worker 1.1.2 → 1.1.3-canary.eba4e13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import"./vendor-utils-BWSB0jGn.js";import{$ as e,$t as t,A as ee,At as n,B as r,Bt as i,Ct as a,D as o,Dt as s,Et as c,F as l,Ft as u,G as d,Gt as f,H as p,Ht as m,I as h,It as g,J as _,Jt as v,K as y,Kt as b,L as x,Lt as S,M as C,Mt as w,N as T,Nt as E,Ot as D,P as O,Pt as k,Q as A,Qt as j,R as M,Rt as N,St as P,Tt as F,U as I,Ut as L,V as R,Vt as z,W as B,Wt as V,X as H,Y as U,Z as W,_t as te,an as G,at as K,bt as q,cn as J,ct as Y,dt as X,en as Z,et as Q,ft as ne,gt as re,ht as ie,in as ae,it as $,j as oe,jt as se,k as ce,kt as le,lt as ue,mt as de,nn as fe,nt as pe,on as me,ot as he,pt as ge,q as _e,qt as ve,rn as ye,rt as be,sn as xe,st as Se,tn as Ce,tt as we,ut as Te,vt as Ee,wt as De,xt as Oe,yt as ke,z as Ae,zt as je}from"./index-dXN_pYn1.js";export{$ as exportProfileLogs};
1
+ import"./vendor-utils-BWSB0jGn.js";import{$ as e,$t as t,A as ee,At as n,B as r,Bt as i,Ct as a,D as o,Dt as s,Et as c,F as l,Ft as u,G as d,Gt as f,H as p,Ht as m,I as h,It as g,J as _,Jt as v,K as y,Kt as b,L as x,Lt as S,M as C,Mt as w,N as T,Nt as E,Ot as D,P as O,Pt as k,Q as A,Qt as j,R as M,Rt as N,St as P,Tt as F,U as I,Ut as L,V as R,Vt as z,W as B,Wt as V,X as H,Y as U,Z as W,_t as te,an as G,at as K,bt as q,cn as J,ct as Y,dt as X,en as Z,et as Q,ft as ne,gt as re,ht as ie,in as ae,it as $,j as oe,jt as se,k as ce,kt as le,lt as ue,mt as de,nn as fe,nt as pe,on as me,ot as he,pt as ge,q as _e,qt as ve,rn as ye,rt as be,sn as xe,st as Se,tn as Ce,tt as we,ut as Te,vt as Ee,wt as De,xt as Oe,yt as ke,z as Ae,zt as je}from"./index-CP2FJpkF.js";export{$ as exportProfileLogs};
package/static/index.html CHANGED
@@ -8,7 +8,7 @@
8
8
  <link rel="shortcut icon" href="/favicon.ico">
9
9
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
10
10
  <title>DNS Worker</title>
11
- <script type="module" crossorigin src="/assets/index-dXN_pYn1.js"></script>
11
+ <script type="module" crossorigin src="/assets/index-CP2FJpkF.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C4Xdq4VV.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/vendor-icons-16-BgwRBCeU.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/vendor-icons-20-X5NPN60g.js">
package/static/sw.js CHANGED
@@ -1 +1 @@
1
- const e=`dns-worker-icons-v2`,t=`/api/icon/`,n=1440*60*1e3;15*n,30*n;function r(){return new Response(`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#9ca3af" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"/><path d="M2 12h20"/></svg>`,{headers:{"Content-Type":`image/svg+xml`,"Cache-Control":`public, max-age=86400`}})}async function i(e){try{return await fetch(e,{mode:`cors`})}catch{return fetch(e,{mode:`no-cors`})}}function a(e){return e.startsWith(t)}async function o(e,t,n){let r=typeof t==`string`?t:t.url,i=new Request(r+`?sw-cached-at`),a=new Response(Date.now().toString());await e.put(t,n),await e.put(i,a)}async function s(e,t){try{let n=new Request(t.url+`?sw-cached-at`),r=await e.match(n);if(!r)return 1/0;let i=await r.text(),a=parseInt(i,10);return isNaN(a)?1/0:Date.now()-a}catch{return 1/0}}async function c(t){let n=await caches.open(e),a=await n.match(t.request);if(a){let e=await s(n,t.request);if(e<1296e6)return a;if(e<2592e6)return i(t.request.url).then(e=>{e&&(e.ok||e.status===0)&&o(n,t.request,e)}).catch(()=>{}),a}try{let e=await i(t.request.url);return e&&(e.ok||e.status===0)?(await o(n,t.request,e.clone()),e):a??r()}catch{return a??r()}}function l(n=[]){caches.open(e).then(e=>{n.forEach(n=>{let r=`${t}${n.replace(/^\*\./,``)}.ico`,a=new Request(r);e.match(a).then(t=>{t||i(r).then(t=>{t&&(t.ok||t.status===0)&&o(e,a,t)}).catch(()=>{})})})})}async function u(){try{let t=await caches.open(e),n=await t.keys(),r=Date.now(),i=n.filter(e=>e.url.includes(`?sw-cached-at`));for(let e of i){let n=await t.match(e);if(n){let i=await n.text(),a=parseInt(i,10);if(!isNaN(a)&&r-a>2592e6){let n=e.url.split(`?`)[0];await t.delete(new Request(n)),await t.delete(e)}}}}catch(e){console.error(`Failed to execute service worker cache cleanup:`,e)}}async function d(){try{let e=await caches.keys();for(let t of e)t.startsWith(`dns-worker-icons-`)&&t!==`dns-worker-icons-v2`&&await caches.delete(t)}catch(e){console.error(`Failed to clean up old caches:`,e)}}const f=`dns-worker-logs-v1`;function p(e){try{let t=new URL(e);return/^\/api\/profiles\/[^/]+\/logs\/\d+$/.test(t.pathname)}catch{return!1}}async function m(e){let t=await caches.open(f),n=await t.match(e.request);if(n)return n;try{let n=await fetch(e.request);return n.ok&&await o(t,e.request,n.clone()),n}catch{return new Response(JSON.stringify({error:`Network error fetching log details`}),{status:503,headers:{"Content-Type":`application/json`}})}}async function h(){try{let e=await caches.open(f),t=await e.keys(),n=Date.now(),r=t.filter(e=>e.url.includes(`?sw-cached-at`));for(let t of r){let r=await e.match(t);if(r){let i=await r.text(),a=parseInt(i,10);if(!isNaN(a)&&n-a>864e5){let n=t.url.split(`?`)[0];await e.delete(new Request(n)),await e.delete(t)}}}}catch(e){console.error(`Failed to execute service worker log cache cleanup:`,e)}}[{"revision":"237335bb4b54a5c99e2df044caa514b2","url":"sqlite3-opfs-async-proxy.js"},{"revision":"1872c500de691dce40960bb85481de07","url":"registerSW.js"},{"revision":"bd8aeccc80994cf85007786588df3223","url":"index.html"},{"revision":null,"url":"assets/zh-TW-lc_SSoVI.js"},{"revision":null,"url":"assets/zh-CN-B0nRgJTD.js"},{"revision":null,"url":"assets/vi-VN-CvS_mTAu.js"},{"revision":null,"url":"assets/vendor-utils-BWSB0jGn.js"},{"revision":null,"url":"assets/vendor-ui-core-CY_WyMIf.js"},{"revision":null,"url":"assets/vendor-react-BmoHsW1x.js"},{"revision":null,"url":"assets/vendor-icons-other-Bme3ywH9.js"},{"revision":null,"url":"assets/vendor-icons-20-X5NPN60g.js"},{"revision":null,"url":"assets/vendor-icons-16-BgwRBCeU.js"},{"revision":null,"url":"assets/vendor-i18next-BKUzkAKP.js"},{"revision":null,"url":"assets/sqlite3-worker1-DZ2OAEkd.js"},{"revision":null,"url":"assets/sqlite3-opfs-async-proxy.js"},{"revision":null,"url":"assets/sqlite3-opfs-async-proxy-Ck-yCayi.js"},{"revision":null,"url":"assets/sqlite3-Con_VOcu.wasm"},{"revision":null,"url":"assets/sqlite.worker-C50yoTbX.js"},{"revision":null,"url":"assets/splitPathsBySizeLoader-BgBwSA38.js"},{"revision":null,"url":"assets/services-BVnEJBDq.js"},{"revision":null,"url":"assets/ru-RU-Bicx52lz.js"},{"revision":null,"url":"assets/rolldown-runtime-C4Xdq4VV.js"},{"revision":null,"url":"assets/paths-cc-gUzxh.js"},{"revision":null,"url":"assets/paths-CfqdBnl8.js"},{"revision":null,"url":"assets/ko-KR-z38NtMFa.js"},{"revision":null,"url":"assets/ja-JP-C5jk6SuH.js"},{"revision":null,"url":"assets/index-dXN_pYn1.js"},{"revision":null,"url":"assets/index-Bheo8y3N.css"},{"revision":null,"url":"assets/getFlagEmoji-DRubsb7D.js"},{"revision":null,"url":"assets/fr-FR-BRcdpT35.js"},{"revision":null,"url":"assets/formatCountryName-CSBD8pP8.js"},{"revision":null,"url":"assets/es-ES-CqKS7vHl.js"},{"revision":null,"url":"assets/de-DE-kDnumQOF.js"},{"revision":null,"url":"assets/date-CpvuBM37.js"},{"revision":null,"url":"assets/browser-Dc5iKjY4.js"},{"revision":null,"url":"assets/allPathsLoader-DM2JAMeC.js"},{"revision":null,"url":"assets/allPaths-BEI3QvIM.js"},{"revision":null,"url":"assets/TrendChart-CCR1W3fC.js"},{"revision":null,"url":"assets/SwipeableDrawer-B81ANpsc.js"},{"revision":null,"url":"assets/SetupView-DE9MM-32.js"},{"revision":null,"url":"assets/SettingsView-DTGI6eSd.js"},{"revision":null,"url":"assets/RulesView-B2kL1QhI.js"},{"revision":null,"url":"assets/QRCodeCanvas-DQ-xNuwF.js"},{"revision":null,"url":"assets/LogsView-B-U9oaxB.js"},{"revision":null,"url":"assets/FilteringView-Bs3__NpV.js"},{"revision":null,"url":"assets/DestinationMap-9Yc54Mdj.js"},{"revision":null,"url":"assets/AuthView-qoUKd5PS.js"},{"revision":null,"url":"assets/AnalyticsView-BywwDzah.js"},{"revision":null,"url":"assets/AccountView-p5jSjMAE.js"},{"revision":"edbf27fdbbc78a5a7269553eed5447b1","url":"manifest.webmanifest"}],self.addEventListener(`install`,()=>{self.skipWaiting()}),self.addEventListener(`activate`,e=>{e.waitUntil(Promise.all([self.clients.claim(),u(),d(),h()]))}),self.addEventListener(`fetch`,e=>{let t=e.request.url;a(t)&&e.respondWith(c(e)),p(t)&&e.respondWith(m(e))}),self.addEventListener(`message`,e=>{e.data&&e.data.type===`PREFETCH_ICONS`&&l(e.data.domains)});
1
+ const e=`dns-worker-icons-v2`,t=`/api/icon/`,n=1440*60*1e3;15*n,30*n;function r(){return new Response(`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#9ca3af" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"/><path d="M2 12h20"/></svg>`,{headers:{"Content-Type":`image/svg+xml`,"Cache-Control":`public, max-age=86400`}})}async function i(e){try{return await fetch(e,{mode:`cors`})}catch{return fetch(e,{mode:`no-cors`})}}function a(e){return e.startsWith(t)}async function o(e,t,n){let r=typeof t==`string`?t:t.url,i=new Request(r+`?sw-cached-at`),a=new Response(Date.now().toString());await e.put(t,n),await e.put(i,a)}async function s(e,t){try{let n=new Request(t.url+`?sw-cached-at`),r=await e.match(n);if(!r)return 1/0;let i=await r.text(),a=parseInt(i,10);return isNaN(a)?1/0:Date.now()-a}catch{return 1/0}}async function c(t){let n=await caches.open(e),a=await n.match(t.request);if(a){let e=await s(n,t.request);if(e<1296e6)return a;if(e<2592e6)return i(t.request.url).then(e=>{e&&(e.ok||e.status===0)&&o(n,t.request,e)}).catch(()=>{}),a}try{let e=await i(t.request.url);return e&&(e.ok||e.status===0)?(await o(n,t.request,e.clone()),e):a??r()}catch{return a??r()}}function l(n=[]){caches.open(e).then(e=>{n.forEach(n=>{let r=`${t}${n.replace(/^\*\./,``)}.ico`,a=new Request(r);e.match(a).then(t=>{t||i(r).then(t=>{t&&(t.ok||t.status===0)&&o(e,a,t)}).catch(()=>{})})})})}async function u(){try{let t=await caches.open(e),n=await t.keys(),r=Date.now(),i=n.filter(e=>e.url.includes(`?sw-cached-at`));for(let e of i){let n=await t.match(e);if(n){let i=await n.text(),a=parseInt(i,10);if(!isNaN(a)&&r-a>2592e6){let n=e.url.split(`?`)[0];await t.delete(new Request(n)),await t.delete(e)}}}}catch(e){console.error(`Failed to execute service worker cache cleanup:`,e)}}async function d(){try{let e=await caches.keys();for(let t of e)t.startsWith(`dns-worker-icons-`)&&t!==`dns-worker-icons-v2`&&await caches.delete(t)}catch(e){console.error(`Failed to clean up old caches:`,e)}}const f=`dns-worker-logs-v1`;function p(e){try{let t=new URL(e);return/^\/api\/profiles\/[^/]+\/logs\/\d+$/.test(t.pathname)}catch{return!1}}async function m(e){let t=await caches.open(f),n=await t.match(e.request);if(n)return n;try{let n=await fetch(e.request);return n.ok&&await o(t,e.request,n.clone()),n}catch{return new Response(JSON.stringify({error:`Network error fetching log details`}),{status:503,headers:{"Content-Type":`application/json`}})}}async function h(){try{let e=await caches.open(f),t=await e.keys(),n=Date.now(),r=t.filter(e=>e.url.includes(`?sw-cached-at`));for(let t of r){let r=await e.match(t);if(r){let i=await r.text(),a=parseInt(i,10);if(!isNaN(a)&&n-a>864e5){let n=t.url.split(`?`)[0];await e.delete(new Request(n)),await e.delete(t)}}}}catch(e){console.error(`Failed to execute service worker log cache cleanup:`,e)}}[{"revision":"237335bb4b54a5c99e2df044caa514b2","url":"sqlite3-opfs-async-proxy.js"},{"revision":"1872c500de691dce40960bb85481de07","url":"registerSW.js"},{"revision":"1ad379e5ab28852ad8680f759de3db0c","url":"index.html"},{"revision":null,"url":"assets/zh-TW-lc_SSoVI.js"},{"revision":null,"url":"assets/zh-CN-B0nRgJTD.js"},{"revision":null,"url":"assets/vi-VN-CvS_mTAu.js"},{"revision":null,"url":"assets/vendor-utils-BWSB0jGn.js"},{"revision":null,"url":"assets/vendor-ui-core-CY_WyMIf.js"},{"revision":null,"url":"assets/vendor-react-BmoHsW1x.js"},{"revision":null,"url":"assets/vendor-icons-other-Bme3ywH9.js"},{"revision":null,"url":"assets/vendor-icons-20-X5NPN60g.js"},{"revision":null,"url":"assets/vendor-icons-16-BgwRBCeU.js"},{"revision":null,"url":"assets/vendor-i18next-BKUzkAKP.js"},{"revision":null,"url":"assets/sqlite3-worker1-DZ2OAEkd.js"},{"revision":null,"url":"assets/sqlite3-opfs-async-proxy.js"},{"revision":null,"url":"assets/sqlite3-opfs-async-proxy-Ck-yCayi.js"},{"revision":null,"url":"assets/sqlite3-Con_VOcu.wasm"},{"revision":null,"url":"assets/sqlite.worker-C50yoTbX.js"},{"revision":null,"url":"assets/splitPathsBySizeLoader-BgBwSA38.js"},{"revision":null,"url":"assets/services-DM_tzwVp.js"},{"revision":null,"url":"assets/ru-RU-Bicx52lz.js"},{"revision":null,"url":"assets/rolldown-runtime-C4Xdq4VV.js"},{"revision":null,"url":"assets/paths-cc-gUzxh.js"},{"revision":null,"url":"assets/paths-CfqdBnl8.js"},{"revision":null,"url":"assets/ko-KR-z38NtMFa.js"},{"revision":null,"url":"assets/ja-JP-C5jk6SuH.js"},{"revision":null,"url":"assets/index-CP2FJpkF.js"},{"revision":null,"url":"assets/index-Bheo8y3N.css"},{"revision":null,"url":"assets/getFlagEmoji-sHq5YwT3.js"},{"revision":null,"url":"assets/fr-FR-BRcdpT35.js"},{"revision":null,"url":"assets/formatCountryName-CSBD8pP8.js"},{"revision":null,"url":"assets/es-ES-CqKS7vHl.js"},{"revision":null,"url":"assets/de-DE-kDnumQOF.js"},{"revision":null,"url":"assets/date-DxXxDqte.js"},{"revision":null,"url":"assets/browser-Dc5iKjY4.js"},{"revision":null,"url":"assets/allPathsLoader-DM2JAMeC.js"},{"revision":null,"url":"assets/allPaths-BEI3QvIM.js"},{"revision":null,"url":"assets/TrendChart-CvhWAoL-.js"},{"revision":null,"url":"assets/SwipeableDrawer-B81ANpsc.js"},{"revision":null,"url":"assets/SetupView-BWHg9Njb.js"},{"revision":null,"url":"assets/SettingsView-tB83dkYR.js"},{"revision":null,"url":"assets/RulesView-BWOftzzI.js"},{"revision":null,"url":"assets/QRCodeCanvas-DQ-xNuwF.js"},{"revision":null,"url":"assets/LogsView-Cz6SjOgh.js"},{"revision":null,"url":"assets/FilteringView-5LHP2DfX.js"},{"revision":null,"url":"assets/DestinationMap-BYS-QPrT.js"},{"revision":null,"url":"assets/AuthView-WWzYl3-y.js"},{"revision":null,"url":"assets/AnalyticsView-8XjTrN9w.js"},{"revision":null,"url":"assets/AccountView-CDS0x_Sp.js"},{"revision":"edbf27fdbbc78a5a7269553eed5447b1","url":"manifest.webmanifest"}],self.addEventListener(`install`,()=>{self.skipWaiting()}),self.addEventListener(`activate`,e=>{e.waitUntil(Promise.all([self.clients.claim(),u(),d(),h()]))}),self.addEventListener(`fetch`,e=>{let t=e.request.url;a(t)&&e.respondWith(c(e)),p(t)&&e.respondWith(m(e))}),self.addEventListener(`message`,e=>{e.data&&e.data.type===`PREFETCH_ICONS`&&l(e.data.domains)});
@@ -1,5 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/services-BVnEJBDq.js","assets/index-dXN_pYn1.js","assets/vendor-icons-other-Bme3ywH9.js","assets/vendor-icons-16-BgwRBCeU.js","assets/rolldown-runtime-C4Xdq4VV.js","assets/vendor-icons-20-X5NPN60g.js","assets/vendor-react-BmoHsW1x.js","assets/vendor-ui-core-CY_WyMIf.js","assets/vendor-utils-BWSB0jGn.js","assets/vendor-i18next-BKUzkAKP.js","assets/index-Bheo8y3N.css"])))=>i.map(i=>d[i]);
2
- import{i as e}from"./rolldown-runtime-C4Xdq4VV.js";import{A as t,Et as n,G as r,H as i,Q as a,Qt as o,V as s,X as c,b as l,gt as u,j as d,lt as f,nt as p,q as m,tt as h,vt as g,xt as _}from"./vendor-react-BmoHsW1x.js";import{S as v,b as y,x as b}from"./vendor-icons-other-Bme3ywH9.js";import{C as x,E as S,L as C,M as w,N as T,O as E,P as D,R as O,S as k,T as A,V as j,a as M,f as N,h as P,l as F,o as I,p as L,r as R,u as z,w as B,x as V,z as H}from"./vendor-ui-core-CY_WyMIf.js";import{_t as U}from"./vendor-utils-BWSB0jGn.js";import{D as W,at as ee,j as G,k as K,ln as te,lt as ne,ot as q,st as re,ut as ie,w as ae,zt as oe}from"./index-dXN_pYn1.js";import{n as se,t as J}from"./formatCountryName-CSBD8pP8.js";import{t as Y}from"./getFlagEmoji-DRubsb7D.js";import{t as ce}from"./SwipeableDrawer-B81ANpsc.js";var X=e(v(),1),Z=e(y(),1);const le=({range:e,setRange:t,customRange:n,setCustomRange:r,nowStr:i,fetchLogs:a,isMobile:s,logRetentionDays:c})=>{let{t:l}=o(),u=[{key:`10m`,days:.007},{key:`1h`,days:.0416},{key:`24h`,days:1},{key:`7d`,days:7},{key:`30d`,days:30}].filter(e=>e.days<=c).map(e=>e.key);return(0,Z.jsx)(`div`,{className:`overflow-x-auto pb-1 -mx-4 px-4 md:mx-0 md:px-0`,children:(0,Z.jsxs)(x,{minimal:s,variant:s?void 0:`minimal`,children:[u.map(n=>(0,Z.jsx)(T,{active:e===n,onClick:()=>t(n),text:n.toUpperCase(),small:s},n)),(0,Z.jsx)(A,{content:(0,Z.jsxs)(`div`,{className:`p-4 space-y-2 w-64`,children:[(0,Z.jsx)(w,{children:l(`analytics.customRange`)}),(0,Z.jsx)(L,{label:l(`analytics.startTime`),children:(0,Z.jsx)(N,{type:`datetime-local`,max:n.end||i,value:n.start,onChange:e=>r({...n,start:e.target.value})})}),(0,Z.jsx)(L,{label:l(`analytics.endTime`),children:(0,Z.jsx)(N,{type:`datetime-local`,min:n.start,max:i,value:n.end,onChange:e=>r({...n,end:e.target.value})})}),(0,Z.jsx)(T,{fill:!0,intent:j.PRIMARY,text:l(`analytics.apply`),onClick:()=>{t(`custom`),a(`custom`,!0)}})]}),children:(0,Z.jsx)(T,{active:e===`custom`,icon:(0,Z.jsx)(g,{size:14}),text:s?``:l(`analytics.custom`),small:s})})]})})},ue=({statusFilter:e,setStatusFilter:t,isMobile:n})=>{let{t:r}=o(),i=(0,Z.jsxs)(S,{children:[(0,Z.jsx)(B,{icon:e===null?`tick`:void 0,text:r(`logs.allStatus`),onClick:()=>t(null)}),(0,Z.jsx)(F,{}),(0,Z.jsx)(B,{icon:e===`PASS`?`tick`:void 0,intent:j.SUCCESS,text:r(`logs.onlyPass`),onClick:()=>t(`PASS`)}),(0,Z.jsx)(B,{icon:e===`BLOCK`?`tick`:void 0,intent:j.DANGER,text:r(`logs.onlyBlock`),onClick:()=>t(`BLOCK`)}),(0,Z.jsx)(B,{icon:e===`REDIRECT`?`tick`:void 0,intent:j.WARNING,text:r(`logs.onlyRedirect`),onClick:()=>t(`REDIRECT`)})]}),a=(()=>{switch(e){case`PASS`:return{text:r(`logs.statusPass`),intent:j.SUCCESS};case`BLOCK`:return{text:r(`logs.statusBlock`),intent:j.DANGER};case`REDIRECT`:return{text:r(`logs.statusRedirect`),intent:j.WARNING};default:return{text:r(`logs.allStatus`),intent:j.NONE}}})();return(0,Z.jsx)(A,{content:i,placement:`bottom-start`,children:(0,Z.jsx)(T,{icon:(0,Z.jsx)(p,{size:14}),rightIcon:`caret-down`,intent:a.intent,text:a.text,variant:`outlined`,fill:n})})},de=({accessPointIdFilter:e,setAccessPointIdFilter:t,accessPoints:n,isMobile:i})=>{let{t:a}=o(),s=(0,Z.jsxs)(S,{children:[(0,Z.jsx)(B,{icon:e===null?`tick`:void 0,text:a(`logs.allAccessPoint`),onClick:()=>t(null)}),(0,Z.jsx)(F,{}),n.map(n=>(0,Z.jsx)(B,{icon:e===n.id?`tick`:void 0,text:n.name,onClick:()=>t(n.id)},n.id))]}),c=e&&n.find(t=>t.id===e)?.name||a(`logs.allAccessPoint`);return(0,Z.jsx)(A,{content:s,placement:`bottom-start`,children:(0,Z.jsx)(T,{icon:(0,Z.jsx)(r,{size:14}),rightIcon:`caret-down`,intent:e?j.PRIMARY:j.NONE,text:c,variant:`outlined`,fill:i})})},fe=Array.from(new Set(Object.values(se))).sort((e,t)=>e.localeCompare(t)),pe=({destCountryFilter:e,setDestCountryFilter:t,isMobile:n})=>{let{t:r,i18n:i}=o(),[a,s]=(0,X.useState)(!1),[c,l]=(0,X.useState)(``),u=(0,X.useMemo)(()=>{let e=i.language;return fe.map(t=>{let n=J(t,e),r=J(t,`en`);return{code:t,name:n||r||t,searchStr:`${t} ${n} ${r}`.toLowerCase()}})},[i.language]),d=(0,X.useMemo)(()=>{let e=c.trim().toLowerCase();return e?u.filter(t=>t.searchStr.includes(e)):u},[u,c]),f=(0,Z.jsxs)(`div`,{className:`w-72 flex flex-col p-1.5`,children:[(0,Z.jsx)(`div`,{className:`pb-1.5`,children:(0,Z.jsx)(N,{leftIcon:`search`,placeholder:r(`logs.searchCountry`,`Search country...`),value:c,onChange:e=>l(e.target.value),small:!0,autoFocus:!0,rightElement:c?(0,Z.jsx)(T,{icon:`cross`,variant:`minimal`,small:!0,onClick:()=>l(``)}):void 0})}),(0,Z.jsxs)(S,{className:`max-h-64 overflow-y-auto`,children:[!c&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(B,{icon:e===null?`tick`:void 0,text:r(`logs.allCountry`),onClick:()=>{t(null),s(!1)}}),(0,Z.jsx)(F,{})]}),d.length===0?(0,Z.jsx)(B,{disabled:!0,text:r(`logs.noMatchingCountries`,`No matching countries found`)}):d.map(n=>(0,Z.jsx)(B,{icon:e===n.code?`tick`:void 0,text:(0,Z.jsxs)(`span`,{className:`flex items-center justify-between gap-2 w-full`,children:[(0,Z.jsxs)(`span`,{className:`truncate`,children:[Y(n.code),` `,n.name]}),(0,Z.jsx)(`span`,{className:`text-xs text-gray-400 shrink-0 font-mono`,children:n.code})]}),onClick:()=>{t(n.code),s(!1)}},n.code))]})]}),p=e?`${Y(e)} ${J(e,i.language)||e} (${e})`:r(`logs.allCountry`);return(0,Z.jsx)(A,{content:f,placement:`bottom-start`,isOpen:a,onInteraction:e=>{s(e),e||l(``)},children:(0,Z.jsx)(T,{icon:(0,Z.jsx)(h,{size:14}),rightIcon:`caret-down`,intent:e?j.PRIMARY:j.NONE,text:p,variant:`outlined`,fill:n})})},me=({profileId:e,range:t,customRange:n,destCountryFilter:r,accessPointIdFilter:a,ispFilter:s,setIspFilter:c,isMobile:l})=>{let{t:u}=o(),[d,f]=(0,X.useState)(!1),[p,m]=(0,X.useState)([]),[h,g]=(0,X.useState)(!1),[_,v]=(0,X.useState)(``),y=(0,X.useRef)(``),b=`${e}:${t}:${n.start?Math.floor(new Date(n.start).getTime()/1e3):``}:${n.end?Math.floor(new Date(n.end).getTime()/1e3):``}:${r||``}:${a||``}`,x=async()=>{g(!0);try{let i=Math.floor(Date.now()/1e3),o,s=i,c=new URLSearchParams;if(t===`custom`&&n.start&&n.end)o=Math.floor(new Date(n.start).getTime()/1e3),s=Math.floor(new Date(n.end).getTime()/1e3),c.set(`range`,`custom`),c.set(`start`,String(o)),c.set(`end`,String(s));else{switch(t){case`10m`:o=i-600;break;case`1h`:o=i-3600;break;case`24h`:o=i-86400;break;case`7d`:o=i-604800;break;case`30d`:o=i-2592e3;break;default:o=i-86400;break}c.set(`range`,t)}r&&c.set(`country_code`,r),a&&c.set(`access_point_id`,a);try{let t=await K.queryISPs({profileId:e,countryCode:r||void 0,since:o,until:s,accessPointId:a||void 0});if(t&&t.length>0){m(t),y.current=b,g(!1);return}}catch(e){console.warn(`[IspFilter] Local SQLite query failed, falling back to server:`,e)}let l=await q(e,`isps`,c.toString());m(Array.isArray(l)?l:[]),y.current=b}catch(e){console.error(`Failed to fetch ISPs for filter`,e)}finally{g(!1)}},C=e=>{f(e),e?y.current!==b&&x():v(``)},w=(0,X.useMemo)(()=>{let e=_.trim().toLowerCase();return e?p.filter(t=>t.name.toLowerCase().includes(e)):p},[p,_]),E=(0,Z.jsxs)(`div`,{className:`w-72 flex flex-col p-1.5`,children:[(0,Z.jsx)(`div`,{className:`pb-1.5`,children:(0,Z.jsx)(N,{leftIcon:`search`,placeholder:u(`logs.searchIsp`,`Search ISP...`),value:_,onChange:e=>v(e.target.value),small:!0,autoFocus:!0,rightElement:_?(0,Z.jsx)(T,{icon:`cross`,variant:`minimal`,small:!0,onClick:()=>v(``)}):void 0})}),(0,Z.jsx)(S,{className:`max-h-64 overflow-y-auto`,children:h?(0,Z.jsxs)(`div`,{className:`flex items-center justify-center p-6 text-gray-500 gap-2`,children:[(0,Z.jsx)(D,{size:16}),(0,Z.jsx)(`span`,{className:`text-xs`,children:u(`logs.loadingIsps`,`Loading ISPs...`)})]}):(0,Z.jsxs)(Z.Fragment,{children:[!_&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(B,{icon:s===null?`tick`:void 0,text:u(`logs.allIsp`),onClick:()=>{c(null),f(!1)}}),(0,Z.jsx)(F,{})]}),w.length===0?(0,Z.jsx)(B,{disabled:!0,text:u(`logs.noMatchingIsps`,`No matching ISPs found`)}):w.map(e=>(0,Z.jsx)(B,{icon:s===e.name?`tick`:void 0,text:(0,Z.jsxs)(`span`,{className:`flex items-center justify-between gap-2 w-full`,children:[(0,Z.jsx)(`span`,{className:`truncate`,title:e.name,children:e.name}),(0,Z.jsx)(`span`,{className:`text-xs text-gray-400 shrink-0 font-mono`,children:e.count.toLocaleString()})]}),onClick:()=>{c(e.name),f(!1)}},e.name))]})})]}),O=s||u(`logs.allIsp`);return(0,Z.jsx)(A,{content:E,placement:`bottom-start`,isOpen:d,onInteraction:C,children:(0,Z.jsx)(T,{icon:(0,Z.jsx)(i,{size:14}),rightIcon:`caret-down`,intent:s?j.PRIMARY:j.NONE,text:O,variant:`outlined`,fill:l})})},he=({profileId:e,range:t,setRange:n,customRange:r,setCustomRange:i,nowStr:a,fetchLogs:s,isMobile:c,realtimeRefresh:l,setRealtimeRefresh:u,statusFilter:d,setStatusFilter:f,accessPointIdFilter:p,setAccessPointIdFilter:m,accessPoints:h,destCountryFilter:g,setDestCountryFilter:_,ispFilter:v,setIspFilter:y,searchQuery:b,setSearchQuery:x,stats:S,logRetentionDays:C,onExport:w,exporting:E})=>{let{t:D}=o(),[O,k]=(0,X.useState)(!0),A=d!==null||p!==null||g!==null||v!==null;return(0,Z.jsxs)(`div`,{className:`p-4 ${c&&O?`space-y-0`:`space-y-4`} shrink-0 bg-white/50 dark:bg-gray-900/50 backdrop-blur-sm border-b border-gray-100 dark:border-gray-800`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col md:flex-row md:items-center justify-between gap-4`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between w-full md:w-auto`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`h2`,{className:`bp6-heading flex flex-wrap items-center gap-2 text-xl md:text-2xl m-0`,children:[D(`logs.title`),` `,(!c||!O)&&(0,Z.jsx)(R,{minimal:!0,round:!0,children:t===`custom`?D(`analytics.custom`):t.toUpperCase()}),S&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(R,{minimal:!0,round:!0,children:S.total.toLocaleString()}),(0,Z.jsx)(R,{minimal:!0,round:!0,intent:j.SUCCESS,children:S.pass.toLocaleString()}),(0,Z.jsx)(R,{minimal:!0,round:!0,intent:j.DANGER,children:S.block.toLocaleString()}),(0,Z.jsx)(R,{minimal:!0,round:!0,intent:j.WARNING,children:S.redirect.toLocaleString()})]})]}),!c&&(0,Z.jsx)(`p`,{className:`bp6-text-muted mt-1`,children:D(`logs.subtitle`)})]}),c&&(0,Z.jsx)(T,{icon:O?`chevron-down`:`chevron-up`,variant:`minimal`,onClick:()=>k(!O)})]}),(!c||!O)&&(0,Z.jsxs)(`div`,{className:`flex flex-col items-stretch md:items-end gap-2`,children:[(0,Z.jsx)(le,{range:t,setRange:n,customRange:r,setCustomRange:i,nowStr:a,fetchLogs:s,isMobile:c,logRetentionDays:C}),(0,Z.jsxs)(`div`,{className:`flex items-center justify-end gap-4`,children:[(0,Z.jsx)(T,{icon:`download`,onClick:w,loading:E,title:D(`logs.export`,`Export Logs`),text:c?void 0:D(`logs.export`,`Export Logs`)}),(0,Z.jsx)(P,{label:D(`logs.realtime`),checked:l,onChange:e=>u(e.target.checked),className:`mb-0!`}),(0,Z.jsx)(T,{icon:`refresh`,onClick:()=>s(t,!0,!1,!0),variant:`minimal`,small:c})]})]})]}),(!c||!O)&&(0,Z.jsxs)(`div`,{className:`flex flex-col md:flex-row items-stretch md:items-center justify-between gap-3`,children:[(0,Z.jsxs)(`div`,{className:`grid grid-cols-2 md:flex md:items-center gap-2`,children:[A&&(0,Z.jsx)(`div`,{className:`col-span-2 md:contents`,children:(0,Z.jsx)(T,{icon:`filter-remove`,onClick:()=>{f(null),m(null),_(null),y(null)},variant:`minimal`,title:D(`logs.clearFilters`),text:c?D(`logs.clearFilters`):void 0,fill:c})}),(0,Z.jsx)(ue,{statusFilter:d,setStatusFilter:f,isMobile:c}),h.length>0&&(0,Z.jsx)(de,{accessPointIdFilter:p,setAccessPointIdFilter:m,accessPoints:h,isMobile:c}),(0,Z.jsx)(pe,{destCountryFilter:g,setDestCountryFilter:_,isMobile:c}),(0,Z.jsx)(me,{profileId:e,range:t,customRange:r,destCountryFilter:g,accessPointIdFilter:p,ispFilter:v,setIspFilter:y,isMobile:c})]}),(0,Z.jsx)(`div`,{className:`flex items-center gap-2 flex-1 md:max-w-md justify-end`,children:(0,Z.jsx)(`div`,{className:`flex-1 md:max-w-xs`,children:(0,Z.jsx)(N,{leftIcon:`search`,placeholder:D(`logs.searchPlaceholder`),value:b,onChange:e=>x(e.target.value),rightElement:b?(0,Z.jsx)(T,{icon:`cross`,minimal:!0,onClick:()=>x(``)}):void 0,fill:!0})})})]})]})},ge=({logs:e,setSelectedLog:t,setIsDrawerOpen:n,lastLogElementRef:r,prevLatestTimestamp:i,realtimeRefresh:a})=>{let{t:s}=o();return(0,Z.jsx)(`div`,{className:`space-y-3 py-4`,children:e.map((o,l)=>{let u=a&&i!==null&&o.timestamp>i,d=(o.encrypt_version??0)>0||!!(o.kem_key_id||o.encrypted_payload),f=d&&(!o.domain||o.domain===`[Encrypted]`),p=d&&!!(o.domain&&o.domain!==`[Encrypted]`);return(0,Z.jsxs)(V,{interactive:!0,onClick:()=>{t(o),n(!0)},className:U(`p-3 dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 shadow-sm overflow-hidden`,{"animate-row-glow":u}),ref:l===e.length-1?r:null,children:[(0,Z.jsxs)(`div`,{className:`flex justify-between items-start mb-2`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[f?(0,Z.jsx)(c,{size:14,className:`text-amber-500 shrink-0`}):(0,Z.jsx)(`img`,{src:`/api/icon/${o.domain.replace(/^\*\./,``)}.ico`,className:`w-4 h-4 rounded-sm shrink-0`,alt:``,referrerPolicy:`no-referrer`,onError:e=>e.currentTarget.style.opacity=`0`}),(0,Z.jsx)(`span`,{className:U(`font-bold text-sm truncate`,{"italic text-gray-400 dark:text-gray-500":f}),children:f?s(`logs.encryptedRecord`,`[加密记录]`):o.domain}),p&&(0,Z.jsx)(c,{size:12,className:`text-emerald-500 shrink-0 opacity-80`})]}),(0,Z.jsx)(R,{minimal:!0,round:!0,intent:o.action===`PASS`?j.SUCCESS:o.action===`BLOCK`?j.DANGER:j.WARNING,className:`text-[10px] shrink-0`,children:o.action})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between items-center`,children:[(0,Z.jsxs)(`div`,{className:`flex gap-2 items-center`,children:[(0,Z.jsx)(`span`,{className:`text-[10px] font-mono opacity-50`,children:new Date(o.timestamp*1e3).toLocaleTimeString([],{hour12:!1})}),(0,Z.jsx)(`span`,{className:`text-[10px] bg-gray-100 dark:bg-gray-800 px-1 rounded opacity-60`,children:o.record_type}),o.access_point_name&&(0,Z.jsx)(`span`,{className:`text-[10px] opacity-50 truncate max-w-25`,children:o.access_point_name})]}),(0,Z.jsx)(`div`,{className:`text-[10px] opacity-40 font-mono italic`,children:o.latency?`${o.latency}ms`:``})]})]},o.id)})})},_e=({logs:e,setSelectedLog:t,setIsDrawerOpen:n,lastLogElementRef:r,prevLatestTimestamp:i,realtimeRefresh:a})=>{let{t:s}=o(),l=[{key:`time`,header:s(`logs.tableTime`),headerClassName:`w-24 rounded-tl-xl`,cellClassName:`font-mono text-[11px] opacity-60`,render:e=>new Date(e.timestamp*1e3).toLocaleTimeString([],{hour12:!1})},{key:`domain`,header:s(`logs.tableDomain`),headerClassName:`w-1/4`,render:e=>{let t=(e.encrypt_version??0)>0||!!(e.kem_key_id||e.encrypted_payload),n=t&&(!e.domain||e.domain===`[Encrypted]`),r=t&&!!(e.domain&&e.domain!==`[Encrypted]`);return(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 truncate`,children:[n?(0,Z.jsx)(c,{size:14,className:`text-amber-500 shrink-0`}):(0,Z.jsx)(`img`,{src:`/api/icon/${e.domain.replace(/^\*\./,``)}.ico`,className:`w-4 h-4 rounded-sm shrink-0`,alt:``,referrerPolicy:`no-referrer`}),(0,Z.jsx)(`span`,{className:U(`font-bold text-sm truncate`,{"italic text-gray-400 dark:text-gray-500":n}),children:n?s(`logs.encryptedRecord`,`[加密记录]`):e.domain}),r&&(0,Z.jsx)(`span`,{title:s(`settings.e2eeEnabled`,`已加密`),className:`inline-flex items-center`,children:(0,Z.jsx)(c,{size:12,className:`text-emerald-500 shrink-0 opacity-80`})})]})}},{key:`answer`,header:s(`logs.tableAnswer`),headerClassName:`w-1/4`,cellClassName:`truncate font-mono text-[11px] opacity-70`,render:e=>e.answer||`-`},{key:`source`,header:s(`logs.tableSource`),headerClassName:`w-32`,render:e=>(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(R,{minimal:!0,className:`font-mono text-[10px]`,title:e.geo_country||`Unknown`,children:Y(e.geo_country)}),e.access_point_name&&(0,Z.jsx)(`span`,{className:`text-xs opacity-70 truncate max-w-20`,title:e.access_point_name,children:e.access_point_name})]})},{key:`type`,header:s(`logs.tableType`),headerClassName:`w-20`,cellClassName:`text-center`,render:e=>(0,Z.jsx)(`code`,{className:`text-[10px]`,children:e.record_type})},{key:`status`,header:s(`logs.tableStatus`),headerClassName:`w-28`,cellClassName:`text-center`,render:e=>(0,Z.jsx)(`span`,{className:U(`bp6-tag`,`bp6-fill`,`bp6-minimal`,`bp6-round`,{"bp6-intent-success":e.action===`PASS`,"bp6-intent-danger":e.action===`BLOCK`,"bp6-intent-warning":e.action===`REDIRECT`}),children:(0,Z.jsx)(`span`,{className:`bp6-text-overflow-ellipsis bp6-fill text-center`,children:e.action})})},{key:`reason`,header:s(`logs.tableReason`),headerClassName:`rounded-tr-xl`,cellClassName:`text-xs text-gray-500 italic truncate`,render:e=>e.reason||`-`}];return(0,Z.jsx)(`div`,{className:`min-w-full inline-block align-middle py-0`,children:(0,Z.jsx)(`div`,{className:`bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 shadow-sm overflow-visible`,children:(0,Z.jsxs)(z,{interactive:!0,striped:!0,className:`w-full table-fixed`,children:[(0,Z.jsx)(`thead`,{className:`sticky top-0 z-20 backdrop-blur-md`,children:(0,Z.jsx)(`tr`,{children:l.map(e=>(0,Z.jsx)(`th`,{className:U(`px-4 py-3 text-xs font-bold uppercase text-gray-500 bg-white/80 dark:bg-gray-900/80 border-b border-gray-100 dark:border-gray-800`,e.headerClassName),children:e.header},e.key))})}),(0,Z.jsx)(`tbody`,{className:`divide-y divide-gray-100 dark:divide-gray-800`,children:e.map((o,s)=>{let c=a&&i!==null&&o.timestamp>i;return(0,Z.jsx)(`tr`,{onClick:()=>{t(o),n(!0)},className:U(`cursor-pointer`,{"animate-row-glow":c}),ref:s===e.length-1?r:null,children:l.map(e=>(0,Z.jsx)(`td`,{className:U(`px-4 py-3`,e.cellClassName),children:e.render(o,s)},e.key))},o.id)})})]})})})},ve=({logs:e,loading:t,loadingMore:n,hasMore:r,realtimeRefresh:i,isMobile:a,searchQuery:s,scrollContainerRef:c,lastLogElementRef:l,prevLatestTimestamp:u,setSelectedLog:d,setIsDrawerOpen:f,logRetentionDays:p})=>{let{t:m}=o();return(0,Z.jsxs)(`div`,{ref:c,className:U(`flex-1 overflow-y-auto relative`,a?`px-1`:`px-4`),children:[e.length===0&&!t?(0,Z.jsx)(`div`,{className:`py-20`,children:(0,Z.jsx)(k,{title:p===0?m(`logs.loggingDisabledTitle`,`日志记录已关闭`):m(s?`logs.noResults`:`logs.noRecords`),icon:p===0?`disable`:s?`search`:`outdated`,intent:p===0?j.WARNING:j.NONE,children:p===0?m(`logs.loggingDisabledDesc`,`当前配置的日志留存已设置为“关闭”,系统不记录任何查询日志。如需查看,请在设置中启用日志留存。`):s?m(`logs.noResultsDesc`,{query:s}):m(`logs.noRecordsDesc`)})}):a?(0,Z.jsx)(ge,{logs:e,setSelectedLog:d,setIsDrawerOpen:f,lastLogElementRef:l,prevLatestTimestamp:u,realtimeRefresh:i}):(0,Z.jsx)(_e,{logs:e,setSelectedLog:d,setIsDrawerOpen:f,lastLogElementRef:l,prevLatestTimestamp:u,realtimeRefresh:i}),(0,Z.jsx)(`div`,{className:`p-6 flex flex-col items-center`,children:n?(0,Z.jsx)(D,{size:16}):i?e.length>0&&(0,Z.jsx)(`span`,{className:`text-[10px] opacity-30 italic`,children:m(`logs.realtimeLoadMoreTip`)}):!r&&e.length>0&&(0,Z.jsx)(`span`,{className:`text-[10px] opacity-30 italic`,children:m(`logs.loadedAll`,{count:e.length})})})]})};function ye(e,t,n){let[r,i]=(0,X.useState)(null),[a,o]=(0,X.useState)(!1);return(0,X.useEffect)(()=>{if(e&&t?.id){o(!0),i(t);let e=new AbortController;return ne(n,t.id,t.timestamp,{signal:e.signal}).then(async r=>{if(!e.signal.aborted)try{let e=r?.encrypt_version??t.encrypt_version,a=await G.decryptLogEntry(n,r);i(n=>({...n||t,...a,encrypt_version:e??a.encrypt_version}))}catch{i(e=>({...e||t,...r}))}}).catch(e=>{e.name!==`AbortError`&&(console.error(e),i(e=>e||t))}).finally(()=>{e.signal.aborted||o(!1)}),()=>{e.abort()}}else i(null)},[e,t?.id,n]),{detailedLog:r,loading:a}}const Q=({label:e,value:t,bold:n,italic:r})=>(0,Z.jsxs)(`div`,{className:`flex justify-between items-start gap-4`,children:[(0,Z.jsx)(`span`,{className:`text-xs opacity-50 mt-1`,children:e}),(0,Z.jsx)(`span`,{className:U(`text-sm text-right`,n&&`font-bold`,r&&`italic`),children:t})]}),be=({selectedLog:e,detailedLog:t,loading:r})=>{let{t:i}=o(),a=t?.encrypt_version??e.encrypt_version??(t?.kem_key_id||e.kem_key_id?2:0),s=a>0||!!(e.kem_key_id||e.encrypted_payload||t?.kem_key_id||t?.encrypted_payload),l=a===2||!!(e.kem_key_id||t?.kem_key_id),u=s&&(!e.domain||e.domain===`[Encrypted]`);return(0,Z.jsx)(I,{title:i(`logs.basicInfo`),icon:(0,Z.jsx)(n,{size:16}),className:`shadow-none! rounded-lg!`,children:(0,Z.jsx)(M,{children:(0,Z.jsxs)(`div`,{className:`space-y-3`,children:[(0,Z.jsx)(Q,{label:i(`logs.detailDomain`),value:(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 justify-end font-bold`,children:[u?(0,Z.jsx)(c,{size:14,className:`text-amber-500`}):(0,Z.jsx)(`img`,{src:`/api/icon/${e.domain.replace(/^\*\./,``)}.ico`,className:`w-4 h-4 rounded-sm`,alt:``,referrerPolicy:`no-referrer`,onError:e=>e.currentTarget.style.display=`none`}),(0,Z.jsx)(`span`,{className:U({"italic text-gray-400 dark:text-gray-500":u}),children:u?i(`logs.encryptedRecord`,`[加密记录]`):e.domain})]}),bold:!0}),(0,Z.jsx)(Q,{label:i(`logs.detailType`),value:e.record_type}),(0,Z.jsx)(Q,{label:i(`logs.detailLatency`),value:e.latency?`${e.latency} ms`:`-`}),(0,Z.jsx)(Q,{label:i(`logs.detailAccessPoint`),value:(()=>{let n=t?.access_point_name||e.access_point_name,i=t?.access_point_id||e.access_point_id;return n?i&&i!==n?(0,Z.jsx)(`span`,{title:i,className:`cursor-help`,children:n}):n:i?(0,Z.jsx)(`span`,{className:`font-mono text-xs`,children:i}):r?(0,Z.jsx)(D,{size:12}):`-`})()}),(0,Z.jsx)(Q,{label:i(`logs.detailProfile`),value:t?.profile_name||t?.client_ip||e.client_ip||(r?(0,Z.jsx)(D,{size:12}):`-`)}),(0,Z.jsx)(Q,{label:i(`logs.detailTime`),value:ae(new Date(e.timestamp*1e3))}),(0,Z.jsx)(Q,{label:i(`logs.detailStatus`),value:(0,Z.jsx)(R,{minimal:!0,intent:e.action===`PASS`?j.SUCCESS:e.action===`BLOCK`?j.DANGER:j.WARNING,children:e.action})}),(0,Z.jsx)(Q,{label:i(`logs.detailUpstream`),value:t?.upstream||e.upstream||(r?(0,Z.jsx)(D,{size:12}):`-`)}),(0,Z.jsx)(Q,{label:i(`logs.detailReason`),value:e.reason||i(`logs.detailNoReason`),italic:!0}),(0,Z.jsx)(Q,{label:i(`logs.detailECS`),value:t?.ecs||e.ecs||(r?(0,Z.jsx)(D,{size:12}):`-`),italic:!0}),(0,Z.jsx)(Q,{label:i(`logs.detailIsClientEncrypted`,`是否用户端加密`),value:s?(0,Z.jsxs)(`div`,{className:`flex items-center gap-1.5 justify-end`,children:[(0,Z.jsx)(c,{size:13,className:u?`text-amber-500`:`text-emerald-500`}),(0,Z.jsxs)(`span`,{className:U(`text-xs font-medium`,u?`text-amber-600 dark:text-amber-400`:`text-emerald-600 dark:text-emerald-400`),children:[u?i(`logs.encryptedLocked`,`是 (未解锁)`):i(`logs.encryptedYes`,`是`),l?` (PQC)`:``]})]}):(0,Z.jsx)(`span`,{className:`text-xs text-gray-400 dark:text-gray-500`,children:i(`logs.notEncrypted`,`否`)})})]})})})},xe=({selectedLog:e})=>{let{t}=o(),n=e.record_type===`HTTPS`||e.record_type===`SVCB`||e.record_type===`TYPE65`||e.record_type===`TYPE64`,r=n&&(e.reason===`ECH Rewritten`||(e.reason?.toLowerCase().includes(`rewritten`)??!1));return(0,Z.jsx)(I,{title:(0,Z.jsxs)(`div`,{className:`flex items-center justify-between w-full pr-2`,children:[(0,Z.jsx)(`span`,{children:t(`logs.resolutionResult`)}),r&&(0,Z.jsx)(R,{minimal:!0,intent:j.PRIMARY,className:`text-xs`,children:t(`logs.rewritten`,`已重写`)})]}),icon:(0,Z.jsx)(h,{size:16}),className:`shadow-none! rounded-lg!`,children:(0,Z.jsx)(M,{children:(0,Z.jsx)(`div`,{className:`bg-gray-50 dark:bg-gray-800 p-3 font-mono text-xs break-all leading-relaxed rounded-lg`,children:(()=>{if(!e.answer)return t(`logs.noResult`);let r=e.answer.split(`
3
- `).map(e=>e.trim()).filter(Boolean);return r.length===0?t(`logs.noResult`):(0,Z.jsx)(`div`,{className:`space-y-2`,children:r.map((e,t)=>{let r=e.match(/^(\d+)\s+([^\s]+)(?:\s+(.*))?$/);if(r&&(n||e.includes(`alpn=`)||e.includes(`ech=`)||e.includes(`ipv4hint=`))){let e=r[1],n=r[2],i=(r[3]||``).split(/\s+/).filter(Boolean);return(0,Z.jsxs)(`div`,{className:`bg-white dark:bg-gray-900 p-2.5 rounded-md space-y-2 border border-gray-200 dark:border-gray-700`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,Z.jsxs)(R,{minimal:!0,intent:j.PRIMARY,children:[`Priority `,e]}),(0,Z.jsxs)(`span`,{className:`font-semibold text-gray-700 dark:text-gray-300`,children:[`Target: `,n]})]}),i.length>0&&(0,Z.jsx)(`div`,{className:`flex flex-wrap gap-1.5 pt-1 border-t border-gray-100 dark:border-gray-800 text-xs`,children:i.map((e,t)=>{let n=e.indexOf(`=`);if(n===-1)return(0,Z.jsx)(R,{minimal:!0,className:`font-mono`,children:e},t);let r=e.substring(0,n),i=e.substring(n+1);return r===`ech`?(0,Z.jsxs)(R,{minimal:!0,intent:j.SUCCESS,className:`font-mono break-all max-w-full select-all text-left whitespace-normal h-auto py-1 inline-block`,title:i,children:[(0,Z.jsx)(`span`,{className:`font-bold`,children:`ech:`}),` `,i]},t):r===`alpn`?(0,Z.jsxs)(R,{minimal:!0,intent:j.WARNING,className:`font-mono`,children:[(0,Z.jsx)(`span`,{className:`font-bold`,children:`alpn:`}),` `,i]},t):(0,Z.jsxs)(R,{minimal:!0,className:`font-mono`,children:[(0,Z.jsxs)(`span`,{className:`font-bold`,children:[r,`:`]}),` `,i]},t)})})]},t)}return(0,Z.jsx)(`div`,{className:`space-y-1`,children:e.split(`,`).map(e=>e.trim()).filter(Boolean).map((e,t)=>(0,Z.jsx)(`div`,{className:`text-xs font-mono text-gray-800 dark:text-gray-200 select-all`,children:e},t))},t)})})})()})})})},Se=({selectedLog:e,detailedLog:t,loading:n})=>{let{t:r,i18n:i}=o(),a=t?.client_ip||e.client_ip,s=t?.geo_country||e.geo_country,c=`Unknown`;if(s){let e=s.toUpperCase().trim();c=e===`LAN`||e===`LOCAL`||e===`PRIVATE`||e===`PRIVATE NETWORK`?r(`setup.privateNetwork`,`Private Network`):e===`UN`||e===`UNKNOWN`||e===`XX`?r(`common.unknown`,`Unknown`):J(s,i.language)||s}let u=t?.dest_country_code||e.dest_country_code,d=t?.dest_country||e.dest_country,f=t?.dest_isp||e.dest_isp,p=null,h=t?.dest_geoip||e.dest_geoip;if(h)try{let e=JSON.parse(h);!u&&e.country_code&&(u=e.country_code);let t=[e.city,e.region,e.country].filter(Boolean),n=d||u||void 0;p={locationTitle:t.length>0?t.join(`, `):n,isp:e.isp||f||void 0,as:e.as||void 0}}catch{}return!p&&(d||u||f)&&(p={locationTitle:d||u||void 0,isp:f||void 0}),(0,Z.jsx)(I,{title:r(`logs.networkDetails`),icon:(0,Z.jsx)(l,{size:16}),className:`shadow-none! rounded-lg!`,children:(0,Z.jsx)(M,{children:(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`div`,{className:`text-[10px] uppercase font-bold opacity-50 mb-1`,children:r(`logs.clientSource`)}),(0,Z.jsxs)(`div`,{className:`flex justify-between items-center`,children:[(0,Z.jsx)(`span`,{className:`font-mono`,children:a||(n?(0,Z.jsx)(D,{size:12}):`-`)}),(s||n)&&(0,Z.jsx)(R,{minimal:!0,title:c,children:s?Y(s):`-`})]})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`div`,{className:`flex justify-between items-center mb-1`,children:[(0,Z.jsx)(`div`,{className:`text-[10px] uppercase font-bold opacity-50`,children:r(`logs.destination`)}),(u||n)&&(0,Z.jsx)(R,{minimal:!0,title:d||u||`Unknown`,children:u?Y(u):`-`})]}),n&&!p?(0,Z.jsx)(`div`,{className:`flex items-center justify-center py-2`,children:(0,Z.jsx)(D,{size:16})}):p?(0,Z.jsx)(`div`,{className:`bg-gray-50 dark:bg-gray-800 p-3 rounded-lg mt-1`,children:(0,Z.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,Z.jsx)(m,{size:16,className:`oklch(60.9% 0.126 221.723) mt-1 shrink-0`}),(0,Z.jsxs)(`div`,{children:[p.locationTitle&&(0,Z.jsx)(`div`,{className:`font-bold text-sm`,children:p.locationTitle}),(p.isp||p.as)&&(0,Z.jsxs)(`div`,{className:`text-xs opacity-70 mt-1`,children:[p.isp,p.as&&(0,Z.jsx)(`span`,{className:`opacity-60 block mt-0.5`,children:p.as})]})]})]})}):(0,Z.jsx)(`div`,{className:`text-xs opacity-50 py-1`,children:`-`})]})]})})})},Ce=({selectedLog:e,onQuickAction:n})=>{let{t:r}=o(),i=(e.encrypt_version??0)>0&&(!e.domain||e.domain===`[Encrypted]`);return(0,Z.jsx)(I,{title:r(`logs.quickActions`),icon:(0,Z.jsx)(s,{size:16}),className:`shadow-none! rounded-lg!`,children:(0,Z.jsx)(M,{children:i?(0,Z.jsx)(`p`,{className:`text-xs text-center text-gray-500 italic py-2 m-0`,children:r(`settings.e2eeUnlockPrompt`,`此记录已加密,请先解锁私钥后再进行操作。`)}):(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Z.jsx)(T,{fill:!0,intent:j.SUCCESS,icon:(0,Z.jsx)(t,{size:16}),text:r(`logs.actionAllow`),onClick:()=>n?.(e.domain,`ALLOW`)}),(0,Z.jsx)(T,{fill:!0,intent:j.DANGER,icon:(0,Z.jsx)(d,{size:16}),text:r(`logs.actionBlock`),onClick:()=>n?.(e.domain,`BLOCK`)}),(0,Z.jsx)(T,{fill:!0,icon:(0,Z.jsx)(_,{size:16}),text:r(`logs.actionRedirect`),onClick:()=>n?.(e.domain,`REDIRECT`,e.record_type)})]})})})},we=({isDrawerOpen:e,setIsDrawerOpen:t,selectedLog:r,profileId:i,isMobile:a,onQuickAction:s})=>{let{t:c}=o(),{detailedLog:l,loading:u}=ye(e,r,i);return(0,Z.jsx)(ce,{isOpen:e&&r!==null,onClose:()=>t(!1),title:(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(n,{size:18}),(0,Z.jsx)(`span`,{children:c(`logs.logDetails`)})]}),icon:`info-sign`,size:a?`100%`:`450px`,children:r&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(be,{selectedLog:r,detailedLog:l,loading:u}),(0,Z.jsx)(xe,{selectedLog:r}),(0,Z.jsx)(Se,{selectedLog:r,detailedLog:l,loading:u}),(0,Z.jsx)(Ce,{selectedLog:r,onQuickAction:s})]})})},Te=({isMobile:e,unlocking:t,onUnlockPasskey:n,onOpenRecoveryDialog:r})=>{let{t:i}=o();return(0,Z.jsx)(`div`,{className:U(`mb-2 shrink-0`,e?`px-2`:`px-4`),children:(0,Z.jsx)(k,{intent:j.PRIMARY,icon:`lock`,title:i(`settings.e2eeTitle`,`端到端加密日志`),children:(0,Z.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-center justify-between gap-3 mt-1`,children:[(0,Z.jsx)(`p`,{className:`text-xs opacity-80 m-0`,children:i(`settings.e2eeUnlockPrompt`,`日志已通过端到端加密保护。请验证已授权的硬件 Passkey 或输入紧急恢复密钥以在本地解密。`)}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap shrink-0`,children:[(0,Z.jsx)(T,{intent:j.PRIMARY,icon:`key`,small:!0,loading:t,onClick:n,className:`font-medium`,children:i(`settings.e2eeUnlockNow`,`验证 Passkey 解锁`)}),(0,Z.jsx)(T,{intent:j.NONE,icon:(0,Z.jsx)(a,{size:14}),small:!0,disabled:t,onClick:r,className:`font-medium`,children:i(`settings.e2eeUnlockRecovery`,`使用恢复密钥解锁`)})]})]})})})},Ee=({isOpen:e,onClose:t,recoveryKeyInput:n,setRecoveryKeyInput:r,recoveryError:i,unlocking:a,onSubmit:s})=>{let{t:c}=o();return(0,Z.jsx)(E,{isOpen:e,onClose:t,title:c(`account.e2ee.unlockWithRecoveryTitle`,`使用恢复密钥解锁`),icon:`key`,className:`dark:bg-gray-900`,children:(0,Z.jsxs)(`form`,{onSubmit:s,autoComplete:`off`,children:[(0,Z.jsxs)(`div`,{className:C,children:[(0,Z.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mb-3`,children:c(`account.e2ee.unlockWithRecoveryDesc`,`请输入 30 位紧急恢复密钥。注意:根据单次使用规则,恢复密钥验证成功后将立即自动轮换。`)}),i&&(0,Z.jsx)(k,{intent:j.DANGER,className:`mb-3 text-xs`,children:i}),(0,Z.jsx)(L,{label:c(`account.e2ee.recoveryKeyInputLabel`,`恢复密钥`),labelFor:`recovery-key-input-logs`,children:(0,Z.jsx)(N,{id:`recovery-key-input-logs`,name:`recovery_key_input_logs`,autoComplete:`off`,autoCorrect:`off`,autoCapitalize:`off`,spellCheck:!1,"data-1p-ignore":`true`,"data-lpignore":`true`,"data-bwignore":`true`,placeholder:`123456-789012-345678-901234-567890`,value:n,onChange:e=>r(e.target.value),leftIcon:`key`,className:`font-mono text-xs`,autoFocus:!0})})]}),(0,Z.jsx)(`div`,{className:O,children:(0,Z.jsxs)(`div`,{className:H,children:[(0,Z.jsx)(T,{onClick:t,text:c(`common.cancel`,`取消`)}),(0,Z.jsx)(T,{type:`submit`,intent:j.PRIMARY,loading:a,disabled:!n.trim(),text:c(`account.e2ee.unlockConfirm`,`解锁日志`)})]})})]})})},De=({rotatedKey:e,onClose:t,copiedKey:n,onCopyKey:r})=>{let{t:i}=o();return(0,Z.jsxs)(E,{isOpen:!!e,onClose:t,title:i(`account.recoveryKey.autoRotatedTitle`,`恢复密钥已自动轮换`),icon:`warning-sign`,isCloseButtonShown:!1,canOutsideClickClose:!1,className:`dark:bg-gray-900`,children:[(0,Z.jsxs)(`div`,{className:C,children:[(0,Z.jsx)(k,{intent:j.WARNING,icon:(0,Z.jsx)(d,{size:16}),className:`mb-4 text-xs`,children:i(`account.recoveryKey.autoRotatedNotice`,`根据恢复密钥单次使用规则,您的原恢复密钥已失效,系统已为您生成全新 30 位紧急恢复密钥。请务必立即复制并妥善离线保存,关闭后将无法再次查看!`)}),e&&(0,Z.jsxs)(`div`,{className:`space-y-3`,children:[(0,Z.jsx)(`div`,{className:`p-3 bg-gray-100 dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 font-mono text-center text-lg font-bold tracking-widest select-all text-gray-900 dark:text-gray-100`,children:e}),(0,Z.jsx)(`div`,{className:`flex justify-center`,children:(0,Z.jsx)(T,{intent:j.PRIMARY,icon:n?(0,Z.jsx)(u,{size:14,className:`text-green-400`}):(0,Z.jsx)(f,{size:14}),text:n?i(`common.copied`,`已复制`):i(`common.copyKey`,`复制新恢复密钥`),onClick:()=>r(e)})})]})]}),(0,Z.jsx)(`div`,{className:O,children:(0,Z.jsx)(`div`,{className:H,children:(0,Z.jsx)(T,{intent:j.SUCCESS,onClick:t,text:i(`account.recoveryKey.savedAndClose`,`我已妥善保存并继续`)})})})]})};function Oe(e){let[t,n]=(0,X.useState)(`24h`),[r,i]=(0,X.useState)({start:``,end:``}),[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(null),[l,u]=(0,X.useState)([]),[d,f]=(0,X.useState)(null),[p,m]=(0,X.useState)(null),[h,g]=(0,X.useState)(``);return(0,X.useEffect)(()=>{ee(e).then(u).catch(console.error)},[e]),(0,X.useEffect)(()=>{m(null)},[d]),{range:t,setRange:n,customRange:r,setCustomRange:i,statusFilter:a,setStatusFilter:o,accessPointIdFilter:s,setAccessPointIdFilter:c,accessPoints:l,destCountryFilter:d,setDestCountryFilter:f,ispFilter:p,setIspFilter:m,searchQuery:h,setSearchQuery:g}}function ke(e){let[t,n]=(0,X.useState)(30);return(0,X.useEffect)(()=>{re(e).then(e=>{try{let t=JSON.parse(e.settings||`{}`);n(t.log_retention_days===void 0?30:Number(t.log_retention_days))}catch(e){console.error(`[useProfileRetention] Failed to parse settings:`,e)}}).catch(e=>console.error(`[useProfileRetention] Failed to fetch profile details:`,e))},[e]),t}function Ae(e,t){let n=Math.floor(Date.now()/1e3);if(e===`custom`&&t.start&&t.end)return{since:Math.floor(new Date(t.start).getTime()/1e3),until:Math.floor(new Date(t.end).getTime()/1e3)};let r;switch(e){case`10m`:r=n-600;break;case`1h`:r=n-3600;break;case`24h`:r=n-86400;break;case`7d`:r=n-604800;break;case`30d`:r=n-2592e3;break;default:r=n-86400;break}return{since:r,until:n}}function je({profileId:e,range:t,customRange:n,statusFilter:r,accessPointIdFilter:i,destCountryFilter:a,ispFilter:o,searchQuery:s,realtimeRefresh:c}){let[l,u]=(0,X.useState)([]),[d,f]=(0,X.useState)(!0),[p,m]=(0,X.useState)(!1),[h,g]=(0,X.useState)(!0),[_,v]=(0,X.useState)(null),[y,b]=(0,X.useState)(null),x=(0,X.useRef)([]);(0,X.useEffect)(()=>{x.current=l},[l]);let S=(0,X.useRef)(null),C=(0,X.useRef)(!1);return(0,X.useEffect)(()=>()=>{S.current&&S.current.abort()},[]),{logs:l,setLogs:u,loading:d,loadingMore:p,hasMore:h,setHasMore:g,stats:_,setStats:v,prevLatestTimestamp:y,setPrevLatestTimestamp:b,fetchLogs:(0,X.useCallback)(async(t,l=!0,d=!1,p=!1)=>{S.current&&S.current.abort();let h=new AbortController;S.current=h,C.current=!0,l?f(!0):m(!0);try{let _=c?25:50,{since:y,until:w}=Ae(t,n),T=!1;try{if(await K.init()&&!h.signal.aborted){let t=!l&&x.current.length>0?x.current[x.current.length-1].timestamp:void 0;if(l){let t=await K.queryLogs({profileId:e,search:s||void 0,action:r||void 0,accessPointId:i||void 0,destCountry:a||void 0,isp:o||void 0,since:y,until:w,before:void 0,limit:_,offset:0});if(h.signal.aborted)return;t.rows.length>0&&(T=!0,b(d&&x.current.length>0?x.current[0].timestamp:null),u(t.rows),g(c?!1:t.rows.length>=_),c&&t.rows.length>0&&W.updateCursor(t.rows[0].timestamp,t.rows[0].id),t.stats&&v(t.stats),f(!1));try{let n=await K.syncProfileLogs(e,void 0,y,h.signal,p);if(!h.signal.aborted&&(n>0||t.rows.length===0)){if(t=await K.queryLogs({profileId:e,search:s||void 0,action:r||void 0,accessPointId:i||void 0,destCountry:a||void 0,isp:o||void 0,since:y,until:w,before:void 0,limit:_,offset:0}),h.signal.aborted)return;T=!0,b(d&&x.current.length>0?x.current[0].timestamp:null),u(t.rows),g(c?!1:t.rows.length>=_),c&&t.rows.length>0&&W.updateCursor(t.rows[0].timestamp,t.rows[0].id),t.stats&&v(t.stats)}else !h.signal.aborted&&t.rows.length>0&&(T=!0)}catch(e){e.name!==`AbortError`&&console.warn(`[useLogsFetcher] Incremental sync error:`,e)}}else if(t!==void 0){let n=await K.queryLogs({profileId:e,search:s||void 0,action:r||void 0,accessPointId:i||void 0,destCountry:a||void 0,isp:o||void 0,since:y,until:w,before:t,limit:_,offset:0});if(h.signal.aborted)return;if(n.rows.length>=_)T=!0,u(e=>[...e,...n.rows]),g(c?!1:n.rows.length>=_);else if(t>y)try{let l=await K.backfillLogs(e,t,y,_,h.signal);if(h.signal.aborted)return;if(T=!0,l.length>0){let n=await K.queryLogs({profileId:e,search:s||void 0,action:r||void 0,accessPointId:i||void 0,destCountry:a||void 0,isp:o||void 0,since:y,until:w,before:t,limit:_,offset:0});if(h.signal.aborted)return;u(e=>[...e,...n.rows]),g(c?!1:n.rows.length>=_&&l.length>=_)}else n.rows.length>0&&u(e=>[...e,...n.rows]),g(!1)}catch(e){e.name!==`AbortError`&&console.warn(`[useLogsFetcher] Backfill error:`,e),n.rows.length>0&&u(e=>[...e,...n.rows]),T=!0,g(!1)}else T=!0,n.rows.length>0&&u(e=>[...e,...n.rows]),g(!1)}else T=!0,g(!1);if(T&&x.current.length>0){let e=Array.from(new Set(x.current.map(e=>e.domain)));`serviceWorker`in navigator&&navigator.serviceWorker.controller&&navigator.serviceWorker.controller.postMessage({type:`PREFETCH_ICONS`,domains:e})}}}catch(e){console.warn(`[useLogsFetcher] Local SQLite failed, falling back to server:`,e),T=!1}if(T){S.current===h&&(f(!1),m(!1),C.current=!1);return}let E=new URLSearchParams({range:t,limit:String(_)});t===`custom`&&n.start&&n.end&&(E.set(`start`,String(y)),E.set(`end`,String(w))),r&&E.set(`status`,r),i&&E.set(`access_point_id`,i),a&&E.set(`dest_country`,a),o&&E.set(`isp`,o),s&&E.set(`search`,s),!l&&x.current.length>0&&E.set(`before`,String(x.current[x.current.length-1].timestamp));let D=ie(e,E.toString(),{signal:h.signal}),O=Promise.resolve(null);if(l){let r=new URLSearchParams({range:t});t===`custom`&&n.start&&n.end&&(r.set(`start`,String(y)),r.set(`end`,String(w))),s&&r.set(`search`,s),O=q(e,`summary`,r.toString(),{signal:h.signal})}let[k,A]=await Promise.all([D,O]);if(l){if(b(d&&x.current.length>0?x.current[0].timestamp:null),u(k),g(c?!1:k.length>=_),A){let e={total:0,pass:0,block:0,redirect:0};A.forEach(t=>{let n=t.count;e.total+=n,t.action===`PASS`?e.pass=n:t.action===`BLOCK`?e.block=n:t.action===`REDIRECT`&&(e.redirect=n)}),v(e)}}else u(e=>[...e,...k]),g(c?!1:k.length>=_);if(k&&k.length>0){c&&W.updateCursor(k[0].timestamp,k[0].id);let e=Array.from(new Set(k.map(e=>e.domain)));`serviceWorker`in navigator&&navigator.serviceWorker.controller&&navigator.serviceWorker.controller.postMessage({type:`PREFETCH_ICONS`,domains:e})}}catch(e){e.name!==`AbortError`&&console.error(e)}finally{S.current===h&&(f(!1),m(!1),C.current=!1)}},[e,c,n,s,r,i,a,o]),isFetchingRef:C,logsRef:x}}function Me({realtimeRefresh:e,statusFilter:t,accessPointIdFilter:n,destCountryFilter:r,ispFilter:i,searchQuery:a,pageSize:o,logsRef:s,setLogs:c,setStats:l,setPrevLatestTimestamp:u}){(0,X.useEffect)(()=>{if(e)return W.onNewLogs(e=>{if(!e||e.length===0)return;let d=e.filter(e=>{if(t&&e.action!==t||n&&e.access_point_id!==n||r&&(e.dest_country_code||e.dest_country)!==r||i&&e.dest_isp!==i)return!1;if(a){let t=a.toLowerCase(),n=e.domain?.toLowerCase().includes(t),r=e.client_ip?.toLowerCase().includes(t),i=e.reason?.toLowerCase().includes(t);if(!n&&!r&&!i)return!1}return!0});d.length!==0&&(u(s.current.length>0?s.current[0].timestamp:null),c(e=>{let t=new Set(e.map(e=>`${e.timestamp}-${e.id}`)),n=d.filter(e=>!t.has(`${e.timestamp}-${e.id}`));return n.length===0?e:[...n,...e].slice(0,o)}),l(t=>{if(!t)return t;let n=0,r=0,i=0;for(let t of e)t.action===`PASS`?n++:t.action===`BLOCK`?r++:t.action===`REDIRECT`&&i++;return{total:t.total+e.length,pass:t.pass+n,block:t.block+r,redirect:t.redirect+i}}))})},[e,t,n,r,i,a,o,s,c,l,u])}function Ne({profileId:e,range:t,customRange:n,statusFilter:r,accessPointIdFilter:i,destCountryFilter:a,ispFilter:o,searchQuery:s,realtimeRefresh:c}){let l=ke(e),{logs:u,setLogs:d,loading:f,loadingMore:p,hasMore:m,stats:h,setStats:g,prevLatestTimestamp:_,setPrevLatestTimestamp:v,fetchLogs:y,isFetchingRef:b,logsRef:x}=je({profileId:e,range:t,customRange:n,statusFilter:r,accessPointIdFilter:i,destCountryFilter:a,ispFilter:o,searchQuery:s,realtimeRefresh:c});Me({realtimeRefresh:c,statusFilter:r,accessPointIdFilter:i,destCountryFilter:a,ispFilter:o,searchQuery:s,pageSize:25,logsRef:x,setLogs:d,setStats:g,setPrevLatestTimestamp:v});let S=(0,X.useRef)(null),C=(0,X.useRef)(null),w=(0,X.useCallback)(()=>{c||b.current||f||p||!m||y(t,!1)},[f,p,m,t,c,y,b]),T=(0,X.useCallback)(e=>{C.current&&C.current.disconnect(),!(f||p||c||!m)&&(C.current=new IntersectionObserver(e=>{e[0]?.isIntersecting&&m&&!b.current&&w()},{root:S.current,rootMargin:`100px`}),e&&C.current.observe(e))},[f,p,m,w,c,b]);return(0,X.useEffect)(()=>{if(t===`custom`&&(!n.start||!n.end))return;let e=setTimeout(()=>{y(t,!0)},s?500:0);return()=>clearTimeout(e)},[t,n.start,n.end,s,y]),{logs:u,loading:f,loadingMore:p,hasMore:m,stats:h,logRetentionDays:l,prevLatestTimestamp:_,scrollContainerRef:S,lastLogElementRef:T,fetchLogs:y,isFetchingRef:b,logsRef:x}}function Pe({profileId:e,range:t,searchQuery:n,realtimeRefresh:r,scrollContainerRef:i,isFetchingRef:a,fetchLogs:o,logsRef:s}){let c=(0,X.useRef)({range:t,searchQuery:n,fetchLogs:o,logsRef:s});(0,X.useEffect)(()=>{c.current={range:t,searchQuery:n,fetchLogs:o,logsRef:s}}),(0,X.useEffect)(()=>{if(!r){W.disconnect();return}let t=!1,n=null,o=()=>{n||=setInterval(()=>{let{range:e,searchQuery:n,fetchLogs:r}=c.current;!t&&document.visibilityState===`visible`&&i.current&&i.current.scrollTop<50&&!a.current&&!n&&e!==`custom`&&r(e,!0,!0)},8e3)},s=()=>{n&&=(clearInterval(n),null)},l=W.onStatusChange(e=>{t=e,e?s():o()}),u=c.current.logsRef.current,d=u.length>0?u[0]:null,f=d?d.timestamp:Math.floor(Date.now()/1e3)-60,p=d?d.id:0;W.connect(e,f,p);let m=setTimeout(()=>{t||o()},2500),h=()=>{if(document.visibilityState===`visible`)if(t){let e=c.current.logsRef.current,t=e.length>0?e[0]:null;t&&W.updateCursor(t.timestamp,t.id)}else{let{range:e,fetchLogs:t}=c.current;t(e,!0,!0)}};return document.addEventListener(`visibilitychange`,h),()=>{clearTimeout(m),s(),l(),W.disconnect(),document.removeEventListener(`visibilitychange`,h)}},[e,r])}function $(e){let t=new Date(e*1e3),n=-t.getTimezoneOffset(),r=n>=0?`+`:`-`,i=e=>String(e).padStart(2,`0`);return t.getFullYear()+`-`+i(t.getMonth()+1)+`-`+i(t.getDate())+`T`+i(t.getHours())+`:`+i(t.getMinutes())+`:`+i(t.getSeconds())+`.`+(e=>String(e).padStart(3,`0`))(t.getMilliseconds())+(n===0?`Z`:r+i(Math.floor(Math.abs(n)/60))+`:`+i(Math.abs(n)%60))}function Fe(e){let t=[`profile_id`,`access_point_id`,`time`,`client_ip`,`geo_country`,`domain`,`record_type`,`action`,`reason`,`answer`,`dest_geoip`,`ecs`,`upstream`,`latency`],n=[t.join(`,`)];for(let r of e){let e=t.map(e=>{let t=``;t=e===`time`?$(r.timestamp):r[e]!==null&&r[e]!==void 0?String(r[e]):``;let n=t.replace(/"/g,`""`);return n.includes(`,`)||n.includes(`
4
- `)||n.includes(`\r`)||n.includes(`"`)?`"${n}"`:n});n.push(e.join(`,`))}return n.join(`
5
- `)}function Ie(e,t){let n=new Blob([e],{type:`text/csv;charset=utf-8;`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.setAttribute(`href`,r),i.setAttribute(`download`,t),document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r)}function Le(e,t,n,r){return`query_logs_${e}_${$(t)}_${$(n)}_${r.toString()}.csv`}function Re({profileId:e,range:t,customRange:n,statusFilter:r,accessPointIdFilter:i,destCountryFilter:a,ispFilter:s,searchQuery:c,toasterRef:l}){let{t:u}=o(),[d,f]=(0,X.useState)(!1);return{exporting:d,handleExportLogs:async()=>{f(!0);try{let o=new URLSearchParams({range:t});if(t===`custom`&&n.start&&n.end){let e=Math.floor(new Date(n.start).getTime()/1e3),t=Math.floor(new Date(n.end).getTime()/1e3);o.set(`start`,String(e)),o.set(`end`,String(t))}r&&o.set(`status`,r),i&&o.set(`access_point_id`,i),a&&o.set(`dest_country`,a),s&&o.set(`isp`,s),c&&o.set(`search`,c);let{exportProfileLogs:d}=await b(async()=>{let{exportProfileLogs:e}=await import(`./services-BVnEJBDq.js`);return{exportProfileLogs:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),f=await d(e,o.toString());if(!f||f.length===0){l?.current?.show({message:u(`logs.noResults`,`No logs found to export`),intent:j.WARNING});return}Ie(Fe(f),Le(e,f[0].timestamp,f[f.length-1].timestamp,o)),l?.current?.show({message:u(`logs.exportSuccess`,`Logs exported successfully`),intent:j.SUCCESS})}catch(e){console.error(`Failed to export logs`,e),l?.current?.show({message:u(`logs.exportError`,`Failed to export logs`),intent:j.DANGER})}finally{f(!1)}}}}function ze({profileId:e,toasterRef:t}){let[n,r]=(0,X.useState)(!1),i=Oe(e),a=Ne({profileId:e,realtimeRefresh:n,range:i.range,customRange:i.customRange,statusFilter:i.statusFilter,accessPointIdFilter:i.accessPointIdFilter,destCountryFilter:i.destCountryFilter,ispFilter:i.ispFilter,searchQuery:i.searchQuery});Pe({profileId:e,realtimeRefresh:n,range:i.range,searchQuery:i.searchQuery,scrollContainerRef:a.scrollContainerRef,isFetchingRef:a.isFetchingRef,fetchLogs:a.fetchLogs,logsRef:a.logsRef});let o=Re({profileId:e,range:i.range,customRange:i.customRange,statusFilter:i.statusFilter,accessPointIdFilter:i.accessPointIdFilter,destCountryFilter:i.destCountryFilter,ispFilter:i.ispFilter,searchQuery:i.searchQuery,toasterRef:t});return{realtimeRefresh:n,setRealtimeRefresh:r,...i,...a,...o}}function Be({profileId:e,range:t,fetchLogs:n,toasterRef:r}){let{t:i}=o(),[a,s]=(0,X.useState)(!1),[c,l]=(0,X.useState)(!1),[u,d]=(0,X.useState)(!1),[f,p]=(0,X.useState)(!1),[m,h]=(0,X.useState)(``),[g,_]=(0,X.useState)(``),[v,y]=(0,X.useState)(null),[b,x]=(0,X.useState)(!1),S=(0,X.useRef)(!1),C=(0,X.useRef)(e);C.current!==e&&(C.current=e,S.current=!1);let w=(0,X.useCallback)(async()=>{try{let r=await G.getStatus(e),i=!!r.enabled;s(i);let a=G.isProfileUnlocked(e);if(l(a),i&&!a&&r.wrappedPasskeys&&r.wrappedPasskeys.length>0&&!S.current){S.current=!0;try{await G.unlockProfile(e)&&(l(!0),await K.reDecryptLocalLogs(e),n(t,!0))}catch(e){console.debug(`[useLogsE2ee] Silent auto-unlock skipped or cancelled:`,e)}}}catch{s(!1)}},[e,n,t]);return(0,X.useEffect)(()=>{w()},[w]),{isE2eeEnabled:a,isE2eeUnlocked:c,unlocking:u,recoveryDialogOpen:f,setRecoveryDialogOpen:p,recoveryKeyInput:m,setRecoveryKeyInput:h,recoveryError:g,setRecoveryError:_,rotatedKey:v,setRotatedKey:y,copiedKey:b,handleCopyRotatedKey:e=>{navigator.clipboard.writeText(e),x(!0),setTimeout(()=>x(!1),2e3)},handleUnlockPasskey:async()=>{try{d(!0),await G.unlockProfile(e)&&(l(!0),await K.reDecryptLocalLogs(e),r?.current?.show({message:i(`settings.e2eeUnlockSuccess`,`私钥已成功在此设备解锁`),intent:j.SUCCESS}),n(t,!0))}catch(e){console.error(`Failed to unlock E2EE via Passkey:`,e),r?.current?.show({message:e.message||i(`settings.e2eeUnlockError`,`验证 Passkey 解锁失败`),intent:j.DANGER})}finally{d(!1)}},handleUnlockRecoveryKey:async a=>{a.preventDefault();let o=m.trim();if(o){d(!0),_(``);try{await G.unlockWithRecoveryKey(o);try{let e=await oe({recoveryKey:o});await G.wrapCurrentKeyForRecovery(e.recovery_key),y(e.recovery_key)}catch(e){console.warn(`[useLogsE2ee] Recovery key auto-rotation failed:`,e)}l(!0),p(!1),h(``),await K.reDecryptLocalLogs(e),r?.current?.show({message:i(`settings.e2eeUnlockSuccess`,`私钥已成功在此设备解锁`),intent:j.SUCCESS}),n(t,!0)}catch(e){console.error(`Failed to unlock E2EE via recovery key:`,e),_(e.message||i(`account.e2ee.recoveryUnlockFailed`,`恢复密钥无效或解析失败`))}finally{d(!1)}}}}}const Ve=({profileId:e,onQuickAction:t,toasterRef:n})=>{let r=te(),[i,a]=(0,X.useState)(null),[o,s]=(0,X.useState)(!1),{realtimeRefresh:c,setRealtimeRefresh:l,range:u,setRange:d,customRange:f,setCustomRange:p,statusFilter:m,setStatusFilter:h,accessPointIdFilter:g,setAccessPointIdFilter:_,accessPoints:v,destCountryFilter:y,setDestCountryFilter:b,ispFilter:x,setIspFilter:S,searchQuery:C,setSearchQuery:w,logs:T,loading:E,loadingMore:O,hasMore:k,stats:A,logRetentionDays:j,prevLatestTimestamp:M,scrollContainerRef:N,lastLogElementRef:P,fetchLogs:F,exporting:I,handleExportLogs:L}=ze({profileId:e,toasterRef:n}),{isE2eeEnabled:R,isE2eeUnlocked:z,unlocking:B,recoveryDialogOpen:V,setRecoveryDialogOpen:H,recoveryKeyInput:U,setRecoveryKeyInput:W,recoveryError:ee,setRecoveryError:G,rotatedKey:K,setRotatedKey:ne,copiedKey:q,handleCopyRotatedKey:re,handleUnlockPasskey:ie,handleUnlockRecoveryKey:ae}=Be({profileId:e,range:u,fetchLogs:F,toasterRef:n}),oe=new Date().toLocaleString(`sv-SE`).replace(` `,`T`).slice(0,16);return E&&T.length===0?(0,Z.jsx)(`div`,{className:`h-full flex items-center justify-center`,children:(0,Z.jsx)(D,{})}):(0,Z.jsxs)(`div`,{className:`h-full flex flex-col overflow-hidden bg-gray-50/30 dark:bg-gray-950/10 max-w-7xl mx-auto w-full pt-14`,children:[(0,Z.jsx)(he,{profileId:e,range:u,setRange:d,customRange:f,setCustomRange:p,nowStr:oe,fetchLogs:F,isMobile:r,realtimeRefresh:c,setRealtimeRefresh:l,statusFilter:m,setStatusFilter:h,accessPointIdFilter:g,setAccessPointIdFilter:_,accessPoints:v,destCountryFilter:y,setDestCountryFilter:b,ispFilter:x,setIspFilter:S,searchQuery:C,setSearchQuery:w,stats:A,logRetentionDays:j,onExport:L,exporting:I}),R&&!z&&(0,Z.jsx)(Te,{isMobile:r,unlocking:B,onUnlockPasskey:ie,onOpenRecoveryDialog:()=>{G(``),W(``),H(!0)}}),(0,Z.jsx)(ve,{logs:T,loading:E,loadingMore:O,hasMore:k,realtimeRefresh:c,isMobile:r,searchQuery:C,scrollContainerRef:N,lastLogElementRef:P,prevLatestTimestamp:M,setSelectedLog:a,setIsDrawerOpen:s,logRetentionDays:j}),(0,Z.jsx)(we,{isDrawerOpen:o,setIsDrawerOpen:s,selectedLog:i,profileId:e,isMobile:r,onQuickAction:t}),(0,Z.jsx)(Ee,{isOpen:V,onClose:()=>H(!1),recoveryKeyInput:U,setRecoveryKeyInput:W,recoveryError:ee,unlocking:B,onSubmit:ae}),(0,Z.jsx)(De,{rotatedKey:K,onClose:()=>ne(null),copiedKey:q,onCopyKey:re})]})};export{Ve as LogsView};
@@ -1 +0,0 @@
1
- import{E as e,T as t,w as n}from"./index-dXN_pYn1.js";export{t as setSystemLocale,e as setSystemTimeZone};