1import{R as Ys,r as x,U as he,V as Ke,j as e,S as Y,G as g,B as D,e as Ie,l as T,f as c,_ as y,a5 as ze,a6 as we,Y as me,v as ds,s as d,ah as ce,ai as z,aT as qe,ax as Be,W as Q,ab as r,ac as Pe,$ as _e,n as Js,a as hs,a1 as Re,aC as Xe,aG as $s,d as ns,ad as Ve,aV as ws,aY as vt,aZ as Me,aX as St,aj as Pt,aJ as Qe,aa as os,aD as Gs,a2 as Se,h as Es,aE as Tt,P as Oe,o as Le,T as De,bF as Hs,aK as as,a8 as Bs,a9 as R,t as It,de as zt}from"./index-DJgzD7sm.js";import{D as Ye,S as Ct}from"./ServerNotifyModal-BZxmu4Wn.js";import{H as qs,a as cs}from"./HostingProviderSelect-ECYO7eiT.js";import{I as Ps}from"./IconReload-DdvPCfnl.js";import{C as se}from"./Code-Bus1hUjD.js";import{S as ne}from"./Switch-K_-dcS_2.js";import{I as Ts}from"./IconPlayerPlay-C36Bx94L.js";import{I as es}from"./IconActivity-B2x21SRd.js";import{I as Is}from"./IconFileText-xJxAW6Wx.js";import{I as Je}from"./IconTrash-Dw0tXwO_.js";import{S as J}from"./Select-DYUJAPNs.js";import{N as ae}from"./NumberInput-37uLQK8S.js";import{u as Zs}from"./useHostingProviders-BKCWd1vK.js";import{C as kt,f as Ss}from"./country-codes-CYX_4J-F.js";import{I as Ze}from"./IconEdit-BBcyIY8S.js";import{S as At}from"./SegmentedControl-C3Jsnrqb.js";import{I as $t}from"./IconSearch-BtX1OOjH.js";import{I as Xs}from"./IconDotsVertical-C9EwIjIC.js";import{I as Qs}from"./IconEye-q7UJ_CdM.js";import"./pick-calendar-levels-props-ns0wLwTs.js";import"./clamp-DTmYCdls.js";import"./IconUsersGroup-nKqQqdJD.js";import"./react-number-format.es-hx5beCWS.js";const Et=[["path",{d:"M3 14l11 -11",key:"svg-0"}],["path",{d:"M10 3h4v4",key:"svg-1"}],["path",{d:"M10 17v4h4",key:"svg-2"}],["path",{d:"M21 10l-11 11",key:"svg-3"}]],Os=Ys("outline","arrows-double-ne-sw","ArrowsDoubleNeSw",Et);const Ht=[["path",{d:"M5.633 5.64a9 9 0 1 0 12.735 12.72m1.674 -2.32a9 9 0 0 0 -12.082 -12.082",key:"svg-0"}],["path",{d:"M12 7v1",key:"svg-1"}],["path",{d:"M3 3l18 18",key:"svg-2"}]],rs=Ys("outline","clock-off","ClockOff",Ht),et=/^[0-9a-fA-F]+$/,Bt=/^[A-Za-z0-9_-]+$/;function Ot(a){if(!et.test(a)||a.length%2!==0)return null;const m=new Uint8Array(a.length/2);for(let S=0;S<m.length;S++)m[S]=parseInt(a.substr(S*2,2),16);return m}function Lt(a){const m=Ot(a);if(m)try{return new TextDecoder("utf-8",{fatal:!0}).decode(m)}catch{return}}function Dt(a){if(Bt.test(a))try{const m=a.replace(/-/g,"+").replace(/_/g,"/"),S="=".repeat((4-m.length%4)%4),C=atob(m+S);let E="";for(let v=0;v<C.length;v++)E+=C.charCodeAt(v).toString(16).padStart(2,"0");return E}catch{return}}function Mt(a){return/^[\x20-\x7e]+$/.test(a)&&/\./.test(a)&&a.length<=253}function Ls(a){if(!a)return null;const m=a.trim();if(!m)return null;let S,C,E=m;if(/^(tg:\/\/proxy|https?:\/\/t\.me\/proxy)/i.test(m)){let p=m;p.toLowerCase().startsWith("tg://")&&(p="https://"+p.slice(5));let B;try{B=new URL(p)}catch{return null}S=B.searchParams.get("server")?.trim()||void 0;const k=B.searchParams.get("port")?.trim();if(k&&/^\d+$/.test(k)){const F=Number(k);F>0&&F<65536&&(C=F)}const M=B.searchParams.get("secret")?.trim();if(!M)return null;E=M}let L;if(et.test(E))L=E.toLowerCase();else{const p=Dt(E);if(!p)return null;L=p.toLowerCase()}let W,H;if((L.startsWith("ee")||L.startsWith("dd"))&&L.length>=34){if(W=L.slice(2,34),L.length>34){const p=L.slice(34),B=Lt(p);B&&Mt(B)&&(H=B)}}else if(L.length===32)W=L;else return null;return/^[0-9a-f]{32}$/.test(W)?{secret:W,host:S,port:C,fakeTlsDomain:H}:null}const Nt=180*1e3,Ut=5*1e3,Wt=1500*1e3,Ft=3,Rt=a=>new Promise(m=>setTimeout(m,a)),Vt=a=>{const m=a.trim().split(` 2`).map(S=>S.trim()).filter(Boolean);return m.length?m[m.length-1].slice(0,300):""},Kt=a=>a.status==="pending"||a.status==="error"?!0:a.status==="installing"&&Date.now()-new Date(a.updatedAt).getTime()>Nt;function _t({token:a,exits:m}){const[S,C]=x.useState([]),[E,v]=x.useState(!0),[L,W]=x.useState(!1),[H,p]=x.useState(null),[B,k]=x.useState(null),[M,{open:F,close:te}]=he(!1),[ge,{open:ue,close:xe}]=he(!1),G=Ke({initialValues:{exitServerId:"",host:"",sshHost:"",sshUser:"root",sshPort:22,sshPassword:""},validate:{exitServerId:i=>i?null:"ÐÑбеÑиÑе exit-ÑеÑвеÑ",host:i=>/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/i.test(i.trim())?null:"УкажиÑе пÑблиÑнÑй DNS-Ñ Ð¾ÑÑ ÑÑонÑа",sshHost:i=>
2i.trim()?null:"ÐведиÑе SSH-Ñ
оÑÑ",sshPassword:i=>i?null:"ÐведиÑе SSH-паÑолÑ"}}),q=async i=>{try{const o=await i.json();return Array.isArray(o?.message)?o.message.join(", "):o?.message||`HTTP ${i.status}`}catch{return`HTTP ${i.status}`}},V=async()=>{if(a)try{v(!0);const i=await fetch(`${Q}/api/admin/webproxy/fronts`,{headers:{Authorization:`Bearer ${a}`}});if(!i.ok)throw new Error(await q(i));const o=await i.json(),j=Array.isArray(o)?o:[];C(j),k(h=>h&&j.find(A=>A.id===h.id)||null)}catch(i){r.show({title:"ÐÑибка",message:i?.message||"Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ ÑÑонÑÑ",color:"red"})}finally{v(!1)}};x.useEffect(()=>{V()},[a]);const je=m.map(i=>({value:i.id,label:`${i.name} · ${i.host}`})),pe=async i=>{try{W(!0);const o=await fetch(`${Q}/api/admin/webproxy/fronts`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({exitServerId:i.exitServerId,host:i.host.trim(),sshHost:i.sshHost.trim(),sshUser:i.sshUser.trim()||void 0,sshPort:Number(i.sshPort),sshPassword:i.sshPassword})});if(!o.ok)throw new Error(await q(o));xe(),G.reset(),r.show({title:"ФÑÐ¾Ð½Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½",message:"ТепеÑÑ Ð·Ð°Ð¿ÑÑÑиÑе ÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ ÑеÑез Ð¼ÐµÐ½Ñ ÑÑонÑа",color:"green"}),await V()}catch(o){r.show({title:"ÐÑибка добавлениÑ",message:o?.message||"Ðе ÑдалоÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑÑонÑ",color:"red"})}finally{W(!1)}},_=async i=>{const o=Date.now()+Wt;let j=0;for(;Date.now()<o;){await Rt(Ut);try{const h=await fetch(`${Q}/api/admin/webproxy/fronts/${i}/install-status`,{headers:{Authorization:`Bearer ${a}`}});if(!h.ok)throw new Error(await q(h));const A=await h.json();if(A.status==="success"||A.status==="error")return{status:A.status,log:A.log||""};if(j=A.status==="unknown"?j+1:0,j>=Ft)return{status:"unknown",log:""}}catch{}}return{status:"unknown",log:""}},Z=async i=>{if(!H)try{p({frontId:i.id,action:"install"});const o=await fetch(`${Q}/api/admin/webproxy/fronts/${i.id}/install`,{method:"POST",headers:{Authorization:`Bearer ${a}`}});if(!o.ok)throw new Error(await q(o));r.show({title:"УÑÑановка запÑÑена",message:"СÑавим nginx stream :443 â exit:443. ÐбÑÑно 3â8 минÑÑ. Ðожно не деÑжаÑÑ ÑÑÑаниÑÑ Ð¾ÑкÑÑÑой.",color:"blue",autoClose:8e3}),await V();const j=await _(i.id);j.status==="success"?r.show({title:"ФÑÐ¾Ð½Ñ ÑÑÑановлен",message:"ÐÑовеÑÑÑе DNS ÑÑонÑа и вклÑÑиÑе ÑÑÐ¼Ð±Ð»ÐµÑ Â«ÐкÑивен», ÑÑÐ¾Ð±Ñ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ð¿Ð¾Ñли ÑеÑез double-hop.",color:"green",autoClose:12e3}):j.status==="error"?r.show({title:"УÑÑановка не ÑдалаÑÑ",message:Vt(j.log)||"ÐодÑобноÑÑи в логе ÑÑонÑа",color:"red",autoClose:15e3}):r.show({title:"СÑаÑÑÑ ÑÑÑановки неизвеÑÑен",message:"ÐбновиÑе ÑпиÑок â ÑÑÑановка могла пÑодолжиÑÑÑÑ Ð½Ð° ÑеÑвеÑе",color:"yellow"})}catch(o){r.show({title:"ÐÑибка",message:o?.message||"ÐпеÑаÑÐ¸Ñ Ð½Ðµ вÑполнена",color:"red"})}finally{await V(),p(o=>o?.frontId===i.id&&o.action==="install"?null:o)}},le=async i=>{if(!H)try{p({frontId:i.id,action:"check"});const o=await fetch(`${Q}/api/admin/webproxy/fronts/${i.id}/status`,{headers:{Authorization:`Bearer ${a}`}});if(!o.ok)throw new Error(await q(o));const j=await o.json();r.show({title:j.ok?"ФÑÐ¾Ð½Ñ Ð¾Ð½Ð»Ð°Ð¹Ð½":"ФÑÐ¾Ð½Ñ Ð¾Ñлайн",message:j.lastCheckDetails||"ÐÑовеÑка завеÑÑена",color:j.ok?"green":"red"}),await V()}catch(o){r.show({title:"ÐÑибка пÑовеÑки",message:o?.message||"Ðе ÑдалоÑÑ Ð¿ÑовеÑиÑÑ ÑÑонÑ",color:"red"})}finally{p(o=>o?.frontId===i.id&&o.action==="check"?null:o)}},K=async(i,o)=>{if(!H)try{p({frontId:i.id,action:"toggle"});const j=await fetch(`${Q}/api/admin/webproxy/fronts/${i.id}`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({isActive:o})});if(!j.ok)throw new Error(await q(j));r.show({title:o?"ФÑÐ¾Ð½Ñ Ð²ÐºÐ»ÑÑÑн":"ФÑÐ¾Ð½Ñ Ð²ÑклÑÑен",message:o?"ÐлиенÑÑ ÑÑого exit ÑепеÑÑ Ð¸Ð´ÑÑ ÑеÑез ÑÑÐ¾Ð½Ñ (double-hop)":"ÐлиенÑÑ Ð²ÐµÑнÑлиÑÑ Ð½Ð° пÑÑмой Ñ
оÑÑ exit",color:o?"green":"gray"}),await V()}catch(j){r.show({title:"ÐÑибка",message:j?.message||"Ðе ÑдалоÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÑÑаÑÑÑ",color:"red"}),await V()}finally{p(j=>j?.frontId===i.id&&j.action==="toggle"?null:j)}},fe=async i=>{if(!H&&window.confirm(`УдалиÑÑ ÑÑÐ¾Ð½Ñ Â«${i.host}» из панели? Удаление запиÑи не ÑдалÑÐµÑ nginx Ñ VPS.`))try{p({frontId:i.id,action:"delete"});const o=await fetch(`${Q}/api/admin/webproxy/fronts/${i.id}`,{method:"DELETE",headers:{Authorization:`Bearer ${a}`}});if(!o.ok)throw new Error(await q(o));r.show({title:"Удалено",message:"ФÑÐ¾Ð½Ñ ÑдалÑн из панели",color:"green"}),await V()}catch(o){r.show({title:"ÐÑибка ÑдалениÑ",message:o?.message||"Ðе ÑдалоÑÑ ÑдалиÑÑ ÑÑонÑ",color:"red"})}finally{p(o=>o?.frontId===i.id&&o.action==="delete"?null:o)}},X=i=>i.status==="active"&&i.isActive?e.jsx(T,{color:"green",leftSection:e.jsx(Pe,{size:12}),children:"ÐкÑивен (double-hop)"}):i.status==="active"?e.jsx(T,{color:"teal",variant:"light",leftSection:e.jsx(Pe,{size:12}),children:"УÑÑановлен (вÑклÑÑен)"}):i.status==="installing"?e.jsx(T,{color:"blue",leftSection:e.jsx(_e,{size:12}),children:"УÑÑановка"}):i.status==="error"?e.jsx(T,{color:"red",leftSection:e.jsx(Be,{size:12}),children:"ÐÑибка"}):e.jsx(T,{color:"yellow",leftSection:e.jsx(Js,{size:12}),children:"ÐÐ¶Ð¸Ð´Ð°ÐµÑ ÑÑÑановки"});return e.jsxs(Y,{gap:"md",children:[e.jsxs(g,{justify:"space-between",align:"flex-start",children:[e.jsxs(D,{children:[e.jsxs(g,{gap:"sm",children:[e.jsx(Os,{size:24}),e.jsx(Ie,{order:3,children:"Double-hop ÑÑонÑÑ"}),e.jsx(T,{color:"grape",variant:"filled",children:"FRONT"})]}),e.jsx(c,{c:"dimmed",size:"sm",mt:4,children:"ФÑÐ¾Ð½Ñ â деÑÑвÑй RU-доÑÑижимÑй VPS Ñ nginx stream :443 â exit:443. ÐÑÑÑÐµÑ IP exit-Ð½Ð¾Ð´Ñ Ð¸ даÑÑ Ð·Ð°Ð¿Ð°Ñной вÑ
од. TLS не ÑеÑминиÑÑеÑÑÑ, secret не менÑеÑÑÑ."})]}),e.jsxs(g,{children:[e.jsx(y,{variant:"light",leftSection:e.jsx(Ps,{size:18}),loading:E,onClick:()=>void V(),children:"ÐбновиÑÑ"}),e.jsx(y,{leftSection:e.jsx(ze,{size:18}),onClick:ue,disabled:m.length===0,children:"ÐобавиÑÑ ÑÑонÑ"})]})]}),e.jsxs(we,{color:"grape",variant:"light",icon:e.jsx(Os,{size:18}),children:["ÐÐ»Ð¸ÐµÐ½Ñ â ",e.jsx("b",{children:"ÑÑонÑ"})," (L4 passthrough) â ",e.jsx("b",{children:"exit"})," (Caddy + MTProxy) â Telegram. Ðак ÑолÑко ÑÑÐ¼Ð±Ð»ÐµÑ Â«ÐкÑивен» вклÑÑÑн, клиенÑам ÑÑого exit вÑдаÑÑÑÑ Ñ
оÑÑ ÑÑонÑа вмеÑÑо пÑÑмого Ñ
оÑÑа exit. ÐклÑÑайÑе ÑолÑко поÑле Ñого, как DNS A-запиÑÑ ÑÑонÑа наÑнÑÑ ÑезолвиÑÑÑÑ."]}
2),e.jsx(me,{withBorder:!0,children:E?e.jsx(c,{c:"dimmed",children:"ÐагÑÑзка ÑÑонÑовâ¦"}):S.length===0?e.jsxs(Y,{align:"center",py:"lg",children:[e.jsx(ds,{size:40,color:"var(--mantine-color-dimmed)"}),e.jsx(c,{c:"dimmed",children:"ФÑонÑÑ ÐµÑÑ Ð½Ðµ добавленÑ"}),m.length===0?e.jsx(c,{c:"dimmed",size:"sm",children:"СнаÑала добавÑÑе Ñ Ð¾ÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ exit WEB-пÑокÑи вÑÑе."}):e.jsx(y,{variant:"light",leftSection:e.jsx(ze,{size:16}),onClick:ue,children:"ÐобавиÑÑ Ð¿ÐµÑвÑй ÑÑонÑ"})]}):e.jsx(D,{style:{overflowX:"auto"},children:e.jsxs(d,{striped:!0,highlightOnHover:!0,miw:1e3,children:[e.jsx(d.Thead,{children:e.jsxs(d.Tr,{children:[e.jsx(d.Th,{children:"ФÑонÑ"}),e.jsx(d.Th,{children:"Exit"}),e.jsx(d.Th,{children:"СоÑÑоÑние"}),e.jsx(d.Th,{children:"ÐкÑивен"}),e.jsx(d.Th,{children:"ÐÑовеÑка"}),e.jsx(d.Th,{ta:"right",children:"ÐейÑÑвиÑ"})]})}),e.jsx(d.Tbody,{children:S.map(i=>e.jsxs(d.Tr,{children:[e.jsxs(d.Td,{children:[e.jsx(c,{fw:600,children:e.jsxs(se,{children:[i.host,":443"]})}),e.jsxs(c,{size:"xs",c:"dimmed",children:["SSH: ",i.sshUser,"@",i.sshHost,":",i.sshPort]})]}),e.jsx(d.Td,{children:i.exitServer?e.jsxs(D,{children:[e.jsx(c,{size:"sm",fw:500,children:i.exitServer.name}),e.jsxs(c,{size:"xs",c:"dimmed",children:["â ",i.targetHost,":443"]})]}):e.jsx(c,{size:"xs",c:"dimmed",children:"exit ÑдалÑн"})}),e.jsx(d.Td,{children:X(i)}),e.jsx(d.Td,{children:e.jsx(ne,{checked:i.isActive,disabled:i.status!=="active"||H!==null,onChange:o=>void K(i,o.currentTarget.checked)})}),e.jsxs(d.Td,{children:[e.jsx(c,{size:"xs",c:i.lastCheckDetails?void 0:"dimmed",children:i.lastCheckDetails||"ÐÑовеÑка еÑÑ Ð½Ðµ вÑполнÑлаÑÑ"}),i.lastCheckedAt&&e.jsx(c,{size:"xs",c:"dimmed",children:new Date(i.lastCheckedAt).toLocaleString("ru-RU")})]}),e.jsx(d.Td,{children:e.jsxs(g,{justify:"flex-end",gap:4,wrap:"nowrap",children:[Kt(i)&&e.jsx(y,{size:"compact-sm",color:"green",leftSection:e.jsx(Ts,{size:14}),loading:H?.frontId===i.id&&H.action==="install",disabled:H!==null,onClick:()=>void Z(i),children:i.status==="installing"?"ÐовÑоÑиÑÑ":"УÑÑановиÑÑ"}),e.jsx(y,{size:"compact-sm",variant:"subtle",leftSection:e.jsx(es,{size:14}),loading:H?.frontId===i.id&&H.action==="check",disabled:H!==null,onClick:()=>void le(i),children:"ÐÑовеÑиÑÑ"}),e.jsx(y,{size:"compact-sm",variant:"subtle",leftSection:e.jsx(Is,{size:14}),onClick:()=>{k(i),F()},children:"Ðог"}),e.jsx(y,{size:"compact-sm",color:"red",variant:"subtle",leftSection:e.jsx(Je,{size:14}),loading:H?.frontId===i.id&&H.action==="delete",disabled:H!==null,onClick:()=>void fe(i),children:"УдалиÑÑ"})]})})]},i.id))})]})})}),e.jsx(ce,{opened:ge,onClose:xe,title:"ÐобавиÑÑ double-hop ÑÑонÑ",size:"lg",children:e.jsx("form",{onSubmit:G.onSubmit(pe),children:e.jsxs(Y,{gap:"md",children:[e.jsx(J,{label:"Exit WEB-пÑокÑи",description:"ТÑаÑик ÑÑонÑа ÑÑ Ð¾Ð´Ð¸Ñ Ð½Ð° ÑÑÐ¾Ñ exit (:443)",data:je,searchable:!0,required:!0,...G.getInputProps("exitServerId")}),e.jsx(z,{label:"ÐÑблиÑнÑй домен ÑÑонÑа",description:"A-запиÑÑ Ð´Ð¾Ð¼ÐµÐ½Ð° должна ÑказÑваÑÑ Ð½Ð° IP ÑÑонÑа. ÐдÑÑ Ð² tg://webproxy-ÑÑÑлкÑ.",placeholder:"front-ru.example.com",required:!0,...G.getInputProps("host")}),e.jsx(Ie,{order:5,children:"SSH-доÑÑÑп к ÑÑонÑÑ"}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"SSH Ñ Ð¾ÑÑ",placeholder:"203.0.113.20",required:!0,...G.getInputProps("sshHost")}),e.jsx(ae,{label:"SSH поÑÑ",min:1,max:65535,...G.getInputProps("sshPort")})]}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"SSH полÑзоваÑелÑ",...G.getInputProps("sshUser")}),e.jsx(qe,{label:"SSH паÑолÑ",required:!0,...G.getInputProps("sshPassword")})]}),e.jsx(we,{color:"grape",variant:"light",icon:e.jsx(Be,{size:18}),children:"УÑÑановÑик Ð¿Ð¾Ð´Ð½Ð¸Ð¼ÐµÑ Docker + nginx (stream :443 â exit:443) и оÑкÑÐ¾ÐµÑ Ð¿Ð¾ÑÑ 443. MTProxy/TLS на ÑÑонÑе ÐÐ ÑÑавиÑÑÑ â ÑÑо ÑолÑко L4-пÑобÑоÑ."}),e.jsxs(g,{justify:"flex-end",children:[e.jsx(y,{variant:"subtle",onClick:xe,children:"ÐÑмена"}),e.jsx(y,{type:"submit",loading:L,children:"ÐобавиÑÑ"})]})]})})}),e.jsx(ce,{opened:M,onClose:te,title:`Ðог ÑÑонÑа: ${B?.host||""}`,size:"xl",children:e.jsx(se,{block:!0,style:{maxHeight:500,overflow:"auto",whiteSpace:"pre-wrap"},children:B?.installLog||B?.errorMessage||"Ðогов пока неÑ"})})]})}const Yt=180*1e3,Jt=5*1e3,Gt=3e3*1e3,qt=3,Zt=a=>new Promise(m=>setTimeout(m,a)),Xt=a=>{const m=a.trim().split(` 3`).map(S=>
3S.trim()).filter(Boolean);return m.length?m[m.length-1].slice(0,300):""},Ds=a=>a.status==="pending"||a.status==="error"?!0:a.status==="installing"&&Date.now()-new Date(a.updatedAt).getTime()>Yt,Ms=a=>{if(!a)return null;const m=a instanceof Date?a:new Date(a);return Number.isNaN(m.getTime())?null:m.toISOString()},Ns=kt.map(({value:a,name:m})=>({value:a,label:m}));function Us({option:a}){return e.jsxs(g,{gap:"sm",wrap:"nowrap",children:[e.jsx(Me,{countryCode:a.value,flagEmoji:Ss(a.value).flag,size:18}),e.jsx(c,{size:"sm",children:a.label})]})}const Ws=[{value:"https",label:"HTTPS"},{value:"https-lanes",label:"HTTPS lanes"},{value:"websocket",label:"WebSocket"},{value:"websocket-lanes",label:"WebSocket lanes"}],Fs=[{value:"prime",label:"ð¥ ÐÐ»Ñ Premium полÑзоваÑелей"},{value:"free",label:"ð ÐÐ»Ñ Free полÑзоваÑелей"},{value:"all",label:"ð ÐÐ»Ñ Ð²ÑеÑ
полÑзоваÑелей"}],Rs={total:0,active:0,pending:0,installing:0,error:0};function Qt(){const{token:a}=hs(),{hostingProviders:m,hostingProvidersLoading:S}=Zs(),[C,E]=x.useState([]),[v,L]=x.useState(Rs),[W,H]=x.useState(!0),[p,B]=x.useState(!1),[k,M]=x.useState(null),[F,te]=x.useState(null),[ge,{open:ue,close:xe}]=he(!1),[G,{open:q,close:V}]=he(!1),[je,{open:pe,close:_}]=he(!1),[Z,le]=x.useState(null),[K,fe]=x.useState(""),[X,i]=x.useState(""),[o,j]=x.useState(!1),[h,A]=x.useState(!1),[de,Ce]=x.useState(!1),[Te,ke]=x.useState("password"),[Ae,Ne]=x.useState(""),[be,Ue]=x.useState(""),N=Ke({initialValues:{name:"",countryCode:"NL",host:"",letsencryptEmail:"",siteUpstream:"http://127.0.0.1:8080",carrierMode:"https",access:"prime",sshHost:"",sshUser:"root",sshPort:22,sshPassword:"",skipInstall:!1,secret:"",expiresAt:null,hostingProviderId:""},validate:{name:t=>t.trim()?null:"ÐведиÑе название",countryCode:t=>t?null:"ÐÑбеÑиÑе ÑÑÑанÑ",host:t=>/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/i.test(t.trim())?null:"УкажиÑе пÑблиÑнÑй DNS-Ñ
оÑÑ",letsencryptEmail:t=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t.trim())?null:"УкажиÑе email Ð´Ð»Ñ Letâs Encrypt",siteUpstream:(t,u)=>u.skipInstall||/^http:\/\/(?:127\.(?:\d{1,3}\.){2}\d{1,3}|\[::1\]):\d{1,5}$/.test(t.trim())?null:"ÐÑжен loopback URL, напÑÐ¸Ð¼ÐµÑ http://127.0.0.1:8080",sshHost:t=>t.trim()?null:"ÐведиÑе SSH-Ñ
оÑÑ",sshPassword:(t,u)=>u.skipInstall||t?null:"ÐведиÑе SSH-паÑолÑ",secret:(t,u)=>u.skipInstall&&!/^[a-f0-9]{32}$/i.test(t.trim())?"ÐÑжен secret из 32 hex-Ñимволов":null}}),ee=Ke({initialValues:{name:"",countryCode:"NL",host:"",letsencryptEmail:"",siteUpstream:"",carrierMode:"https",access:"prime",isActive:!1,expiresAt:null,hostingProviderId:""}}),oe=async t=>{try{const u=await t.json();return Array.isArray(u?.message)?u.message.join(", "):u?.message||`HTTP ${t.status}`}catch{return`HTTP ${t.status}`}},l=async()=>{if(a)try{H(!0);const t={Authorization:`Bearer ${a}`},[u,$]=await Promise.all([fetch(`${Q}/api/admin/webproxy/servers`,{headers:t}),fetch(`${Q}/api/admin/webproxy/stats`,{headers:t})]);if(!u.ok)throw new Error(await oe(u));const O=await u.json(),ie=Array.isArray(O)?O:[];E(ie),te(ve=>ve&&ie.find(Fe=>Fe.id===ve.id)||null),$.ok&&L({...Rs,...await $.json()})}catch(t){r.show({title:"ÐÑибка",message:t?.message||"Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ WEB Proxy",color:"red"})}finally{H(!1)}};x.useEffect(()=>{l()},[a]);const w=async t=>{if(!k&&window.confirm(`ÐеÑезапÑÑÑиÑÑ WEB Proxy «${t.name}»?`))try{M({serverId:t.id,action:"restart"});const u=await fetch(`${Q}/api/admin/webproxy/servers/${t.id}/restart`,{method:"POST",headers:{Authorization:`Bearer ${a}`}});if(!u.ok)throw new Error(await oe(u));r.show({title:"СеÑÐ²Ð¸Ñ Ð¿ÐµÑезапÑÑен",message:"СоÑÑоÑние WEB Proxy обновлено",color:"green"}),await l()}catch(u){r.show({title:"ÐÑибка",message:u?.message||"ÐпеÑаÑÐ¸Ñ Ð½Ðµ вÑполнена",color:"red"}),await l()}finally{M(u=>u?.serverId===t.id&&u.action==="restart"?null:u)}},P=async t=>{const u=Date.now()+Gt;let $=0;for(;Date.now()<u;){await Zt(Jt);try{const O=await fetch(`${Q}
3/api/admin/webproxy/servers/${t}/install-status`,{headers:{Authorization:`Bearer ${a}`}});if(!O.ok)throw new Error(await oe(O));const ie=await O.json();if(ie.status==="success"||ie.status==="error")return{status:ie.status,log:ie.log||""};if($=ie.status==="unknown"?$+1:0,$>=qt)return{status:"unknown",log:""}}catch{}}return{status:"unknown",log:""}},re=async(t,u)=>{if(!k)try{M({serverId:t.id,action:"install"});const $=await fetch(`${Q}/api/admin/webproxy/servers/${t.id}/install`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify(u)});if(!$.ok)throw new Error(await oe($));r.show({title:"УÑÑановка запÑÑена",message:"СбоÑка на VPS обÑÑно Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ 10â20 минÑÑ. РезÑлÑÑÐ°Ñ Ð¿Ð¾ÑвиÑÑÑ Ð·Ð´ÐµÑÑ, ÑÑÑаниÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ не деÑжаÑÑ Ð¾ÑкÑÑÑой.",color:"blue",autoClose:1e4}),await l();const O=await P(t.id);O.status==="success"?r.show({title:"УÑÑановка завеÑÑена",message:"WEB Proxy гоÑов к ÑабоÑе",color:"green"}):O.status==="error"?r.show({title:"УÑÑановка не ÑдалаÑÑ",message:Xt(O.log)||"ÐодÑобноÑÑи ÑмоÑÑиÑе в логе ÑеÑвеÑа",color:"red",autoClose:15e3}):r.show({title:"СÑаÑÑÑ ÑÑÑановки неизвеÑÑен",message:"ÐбновиÑе ÑпиÑок â ÑÑÑановка могла пÑодолжиÑÑÑÑ Ð½Ð° ÑеÑвеÑе",color:"yellow"})}catch($){r.show({title:"ÐÑибка",message:$?.message||"ÐпеÑаÑÐ¸Ñ Ð½Ðµ вÑполнена",color:"red"})}finally{await l(),M($=>$?.serverId===t.id&&$.action==="install"?null:$)}},Ge=async t=>{if(!k)try{M({serverId:t.id,action:"check"});const u=await fetch(`${Q}/api/admin/webproxy/servers/${t.id}/status`,{headers:{Authorization:`Bearer ${a}`}});if(!u.ok)throw new Error(await oe(u));const $=await u.json();r.show({title:$.ok?"WEB Proxy онлайн":"WEB Proxy оÑлайн",message:$.details||"ÐÑовеÑка завеÑÑена",color:$.ok?"green":"red"}),await l()}catch(u){r.show({title:"ÐÑибка пÑовеÑки",message:u?.message||"Ðе ÑдалоÑÑ Ð¿ÑовеÑиÑÑ ÑеÑвеÑ",color:"red"})}finally{M(u=>u?.serverId===t.id&&u.action==="check"?null:u)}},us=async t=>{if(!k&&window.confirm(`СгенеÑиÑоваÑÑ Ð½Ð¾Ð²Ñй secret Ð´Ð»Ñ Â«${t.name}»? ÐÑе Ñанее вÑданнÑе полÑзоваÑелÑм WEB-ÑÑÑлки пеÑеÑÑанÑÑ ÑабоÑаÑÑ.`))try{M({serverId:t.id,action:"rotate"});const u=await fetch(`${Q}/api/admin/webproxy/servers/${t.id}/rotate-secret`,{method:"POST",headers:{Authorization:`Bearer ${a}`}});if(!u.ok)throw new Error(await oe(u));r.show({title:"Secret заменÑн",message:"ÐовÑй secret пÑименÑн на ÑеÑвеÑе, ÑеÑвиÑÑ Ð¿ÐµÑезапÑÑенÑ",color:"green"}),await l()}catch(u){r.show({title:"ÐÑибка ÑоÑаÑии",message:u?.message||"Ðе ÑдалоÑÑ Ð·Ð°Ð¼ÐµÐ½Ð¸ÑÑ secret",color:"red"}),await l()}finally{M(u=>u?.serverId===t.id&&u.action==="rotate"?null:u)}},We=(t,u)=>{fe(""),i(""),j(!1),A(!1),ke("password"),Ne(""),Ue(""),le({server:t,mode:u})},xs=()=>{const t={harden:!0};if(Te==="key"){const $=Ae.trim();if(!/^-----BEGIN (?:[A-Z0-9]+ )*PRIVATE KEY-----[\s\S]+-----END (?:[A-Z0-9]+ )*PRIVATE KEY-----\s*$/.test($))return r.show({title:"ÐекоÑÑекÑнÑй SSH-клÑÑ",message:"ÐÑÑÐ°Ð²Ñ Ð¿ÑиваÑнÑй клÑÑ (-----BEGIN ... PRIVATE KEY-----)",color:"red"}),null;if(be&&!/^[\x20-\x7E]+$/.test(be))return r.show({title:"ÐекоÑÑекÑнÑй passphrase",message:"ТолÑко пеÑаÑнÑе ASCII-ÑимволÑ",color:"red"}),null;if(!X)return r.show({title:"ÐÑжен новÑй SSH-паÑолÑ",message:"ÐÑи подклÑÑении по клÑÑÑ ÑкажиÑе «ÐовÑй SSH-паÑÐ¾Ð»Ñ root» â ÑеÑÐ²ÐµÑ Ð¿ÐµÑейдÑÑ Ð½Ð° него поÑле hardening",color:"red"}),null;t.sshPrivateKey=$,be&&(t.sshKeyPassphrase=be)}const u=K.trim();if(u){const $=Number(u);if(!Number.isInteger($)||$<1024||$>65535)return r.show({title:"ÐекоÑÑекÑнÑй SSH-поÑÑ",message:"УкажиÑе ÑиÑло Ð¾Ñ 1024 до 65535",color:"red"}),null;t.sshPortNew=$}if(X){if(X.length<8||!/^[\x20-\x7E]+$/.test(X))return r.show({title:"ÐекоÑÑекÑнÑй паÑолÑ",message:"ÐинимÑм 8 Ñимволов, ÑолÑко пеÑаÑнÑе ASCII-ÑимволÑ",color:"red"}),null;t.sshPasswordNew=X}return o&&(t.lockdownPorts=!0),h&&(t.frontLockdown=!0),t},ps=async()=>
3{if(!Z)return;const t=xs();if(!t)return;const{server:u,mode:$}=Z;Ce(!0);try{if($==="install"){le(null),i(""),await re(u,t);return}M({serverId:u.id,action:"harden"});const O=await fetch(`${Q}/api/admin/webproxy/servers/${u.id}/harden`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify(t)});if(!O.ok)throw new Error(await oe(O));const ie=await O.json();le(null),i(""),r.show({title:"СеÑÐ²ÐµÑ Ð·Ð°ÑиÑÑн",message:`ÐÑÑ
одÑÑий SMTP заблокиÑован, fail2ban вклÑÑÑн, SSH-поÑÑ: ${ie.sshPort}`,color:"green"}),await l()}catch(O){r.show({title:"ÐÑибка заÑиÑÑ ÑеÑвеÑа",message:O?.message||"Ðе ÑдалоÑÑ Ð¿ÑимениÑÑ Ð·Ð°ÑиÑÑ",color:"red"}),await l()}finally{Ce(!1),M(O=>O?.serverId===u.id&&O.action==="harden"?null:O)}},ss=async t=>{try{B(!0);const u=Ss(t.countryCode).name,$={...t,country:u,name:t.name.trim(),host:t.host.trim(),letsencryptEmail:t.letsencryptEmail.trim(),sshHost:t.sshHost.trim(),sshUser:t.sshUser.trim()||void 0,sshPassword:t.sshPassword||void 0,sshPort:Number(t.sshPort),hostingProviderId:t.hostingProviderId||void 0,siteUpstream:t.siteUpstream.trim()||void 0,secret:t.skipInstall?t.secret.trim():void 0,expiresAt:Ms(t.expiresAt)},O=await fetch(`${Q}/api/admin/webproxy/servers`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify($)});if(!O.ok)throw new Error(await oe(O));V(),N.reset(),r.show({title:"СеÑÐ²ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½",message:t.skipInstall?"WEB Proxy добавлен в ÑÑÑном Ñежиме":"ТепеÑÑ Ð·Ð°Ð¿ÑÑÑиÑе ÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ ÑеÑез Ð¼ÐµÐ½Ñ ÑеÑвеÑа",color:"green"}),await l()}catch(u){r.show({title:"ÐÑибка добавлениÑ",message:u?.message||"Ðе ÑдалоÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ WEB Proxy",color:"red"})}finally{B(!1)}},ms=t=>{te(t),ee.setValues({name:t.name,countryCode:t.countryCode==="OTHER"?"XX":t.countryCode,host:t.host,letsencryptEmail:t.letsencryptEmail,siteUpstream:t.siteUpstream||"",carrierMode:t.carrierMode,access:t.access,isActive:t.isActive,expiresAt:t.expiresAt?new Date(t.expiresAt):null,hostingProviderId:t.hostingProvider?.id||""}),pe()},gs=async t=>{if(F)try{B(!0);const u=Ss(t.countryCode).name,$=await fetch(`${Q}/api/admin/webproxy/servers/${F.id}`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({...t,country:u,name:t.name.trim(),host:t.host.trim(),letsencryptEmail:t.letsencryptEmail.trim(),hostingProviderId:t.hostingProviderId||void 0,siteUpstream:t.siteUpstream.trim()||void 0,expiresAt:Ms(t.expiresAt)})});if(!$.ok)throw new Error(await oe($));_(),r.show({title:"СоÑ
Ñанено",message:"ÐаÑÑÑойки WEB Proxy обновленÑ",color:"green"}),await l()}catch(u){r.show({title:"ÐÑибка ÑоÑ
ÑанениÑ",message:u?.message||"Ðе ÑдалоÑÑ ÑоÑ
ÑаниÑÑ Ð½Ð°ÑÑÑойки",color:"red"})}finally{B(!1)}},js=async t=>{if(!k&&window.confirm(`УдалиÑÑ WEB Proxy «${t.name}» из панели? Удаление запиÑи не ÑдалÑÐµÑ ÐÐ Ñ VPS.`))try{M({serverId:t.id,action:"delete"});const u=await fetch(`${Q}/api/admin/webproxy/servers/${t.id}`,{method:"DELETE",headers:{Authorization:`Bearer ${a}`}});if(!u.ok)throw new Error(await oe(u));r.show({title:"Удалено",message:"WEB Proxy ÑдалÑн из панели",color:"green"}),await l()}catch(u){r.show({title:"ÐÑибка ÑдалениÑ",message:u?.message||"Ðе ÑдалоÑÑ ÑдалиÑÑ WEB Proxy",color:"red"})}finally{M(u=>u?.serverId===t.id&&u.action==="delete"?null:u)}},f=async(t,u)=>{t&&(await navigator.clipboard.writeText(t),r.show({title:"СкопиÑовано",message:u,color:"green"}))},ts=(t,u)=>t==="active"&&u?e.jsx(T,{color:"green",leftSection:e.jsx(Pe,{size:12}),children:"ÐкÑивен"}):t==="installing"?e.jsx(T,{color:"blue",leftSection:e.jsx(_e,{size:12}),children:"УÑÑановка"}):t==="error"?e.jsx(T,{color:"red",leftSection:e.jsx(Be,{size:12}),children:"ÐÑибка"}):e.jsx(T,{color:"yellow",leftSection:e.jsx(Js,{size:12}),children:"ÐÐ¶Ð¸Ð´Ð°ÐµÑ ÑÑÑановки"});return e.jsxs(Y,{gap:"lg",children:[e.jsxs(g,{justify:"space-between",align:"flex-start",children:[e.jsxs(D,{children:[e.jsxs(g,{gap:"sm",children:[e.jsx(Re,{size:28}),e.jsx(Ie,{order:2,children:"WEB Proxy Telegram"}),e.jsx(T,{color:"teal",variant:"filled",children:"WEB"})]}),e.jsx(c,{c:"dimmed",size:"sm",mt:4,children:"ÐаÑÑоÑÑий Telegram WEB Proxy: HTTPS/443 + WebView carrier + локалÑнÑй MTProxy backend"})]}),e.jsxs(g,{children:[e.jsx(y,{variant:"light",leftSection:e.jsx(Ps,{size:18}),loading:W,onClick:()=>void l(),children:"ÐбновиÑÑ"}),e.jsx(y,{leftSection:e.jsx(ze,{size:18}),onClick:q,children:"ÐобавиÑÑ WEB ÑеÑвеÑ"})]})]}),e.jsxs(we,{color:"blue",icon:e.jsx(Xe,{size:20}),title:"ÐÑо не обÑÑнÑй MTProxy",children:["ÐолÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ ÑÑÑÐ»ÐºÑ ",e.jsx(se,{children:"tg://webproxy?server=...&secret=..."}
3),". ÐоÑÑ Ð² ÑÑÑлке не ÑказÑваеÑÑÑ: внеÑний вÑ
од ÑабоÑÐ°ÐµÑ ÑеÑез HTTPS/443. ÐÐ»Ñ ÑÑÑановки нÑÐ¶Ð½Ñ DNS-запиÑÑ Ð½Ð° VPS и ÑвободнÑе поÑÑÑ 80/443."]}),e.jsxs(we,{color:"orange",icon:e.jsx($s,{size:20}),title:"Secret обÑий Ð´Ð»Ñ Ð²Ñего ÑеÑвеÑа",children:["ÐлокиÑовка полÑзоваÑÐµÐ»Ñ Ð·Ð°ÐºÑÑÐ²Ð°ÐµÑ Ð¿Ð°Ð½ÐµÐ»Ñ Ð¸ подпиÑкÑ, но не оÑзÑÐ²Ð°ÐµÑ Ñже вÑданнÑÑ WEB-ÑÑÑлкÑ: secret один на ÑеÑвеÑ, пеÑÑоналÑнÑÑ
клÑÑей здеÑÑ Ð½ÐµÑ. ЧÑÐ¾Ð±Ñ Ð¾ÑозваÑÑ Ð´Ð¾ÑÑÑп, нажмиÑе ",e.jsx("b",{children:"«СмениÑÑ secret»"})," â Ñогда ÑÑаÑÑе ÑÑÑлки пеÑеÑÑанÑÑ ÑабоÑаÑÑ Ñ Ð²ÑеÑ
полÑзоваÑелей ÑÑого ÑеÑвеÑа."]}),e.jsxs(ns,{cols:{base:2,sm:5},children:[e.jsxs(me,{withBorder:!0,children:[e.jsx(c,{size:"xs",c:"dimmed",children:"ÐÑего"}),e.jsx(c,{fw:700,size:"xl",children:v.total})]}),e.jsxs(me,{withBorder:!0,children:[e.jsx(c,{size:"xs",c:"dimmed",children:"ÐкÑивнÑ"}),e.jsx(c,{fw:700,size:"xl",c:"green",children:v.active})]}),e.jsxs(me,{withBorder:!0,children:[e.jsx(c,{size:"xs",c:"dimmed",children:"ÐжидаÑÑ"}),e.jsx(c,{fw:700,size:"xl",c:"yellow",children:v.pending})]}),e.jsxs(me,{withBorder:!0,children:[e.jsx(c,{size:"xs",c:"dimmed",children:"УÑÑанавливаÑÑÑÑ"}),e.jsx(c,{fw:700,size:"xl",c:"blue",children:v.installing})]}),e.jsxs(me,{withBorder:!0,children:[e.jsx(c,{size:"xs",c:"dimmed",children:"ÐÑибки"}),e.jsx(c,{fw:700,size:"xl",c:"red",children:v.error})]})]}),e.jsx(me,{withBorder:!0,children:W?e.jsx(c,{c:"dimmed",children:"ÐагÑÑзка WEB Proxy ÑеÑвеÑовâ¦"}):C.length===0?e.jsxs(Y,{align:"center",py:"xl",children:[e.jsx(ds,{size:44,color:"var(--mantine-color-dimmed)"}),e.jsx(c,{c:"dimmed",children:"WEB Proxy ÑеÑвеÑÑ ÐµÑÑ Ð½Ðµ добавленÑ"}),e.jsx(y,{variant:"light",leftSection:e.jsx(ze,{size:16}),onClick:q,children:"ÐобавиÑÑ Ð¿ÐµÑвÑй ÑеÑвеÑ"})]}):e.jsx(D,{style:{overflowX:"auto"},children:e.jsxs(d,{striped:!0,highlightOnHover:!0,miw:1100,children:[e.jsx(d.Thead,{children:e.jsxs(d.Tr,{children:[e.jsx(d.Th,{children:"СеÑвеÑ"}),e.jsx(d.Th,{children:"WEB endpoint"}),e.jsx(d.Th,{children:"Режим / доÑÑÑп"}),e.jsx(d.Th,{children:"СоÑÑоÑние"}),e.jsx(d.Th,{children:"ÐÑовеÑка"}),e.jsx(d.Th,{ta:"right",children:"ÐейÑÑвиÑ"})]})}),e.jsx(d.Tbody,{children:C.map(t=>e.jsxs(d.Tr,{children:[e.jsx(d.Td,{children:e.jsxs(g,{gap:"xs",wrap:"nowrap",children:[e.jsx(Xe,{size:18}),e.jsxs(D,{children:[e.jsx(c,{fw:600,children:t.name}),e.jsxs(c,{size:"xs",c:"dimmed",children:[t.country," · ",t.countryCode]}),e.jsx(qs,{providerId:t.hostingProvider?.id,providers:m})]})]})}),e.jsxs(d.Td,{children:[e.jsx(T,{color:"teal",variant:"light",children:"WEB"}),e.jsx(c,{size:"sm",mt:4,children:e.jsxs(se,{children:[t.host,":443"]})}),e.jsxs(g,{gap:4,mt:4,children:[e.jsx(y,{size:"compact-xs",variant:"subtle",leftSection:e.jsx(Ve,{size:12}),onClick:()=>void f(t.telegramLink,"WEB-ÑÑÑлка Telegram"),children:"tg://webproxy"}),e.jsx(y,{size:"compact-xs",variant:"subtle",leftSection:e.jsx(Ve,{size:12}),onClick:()=>void f(t.secret,"Secret"),children:"secret"})]})]}),e.jsxs(d.Td,{children:[e.jsx(c,{size:"sm",children:t.carrierMode}),e.jsx(T,{size:"sm",variant:"light",mt:4,children:t.access==="prime"?"Premium":t.access==="free"?"Free":"ÐÑе"})]}),e.jsx(d.Td,{children:ts(t.status,t.isActive)}),e.jsxs(d.Td,{children:[e.jsx(c,{size:"xs",c:t.lastCheckDetails?void 0:"dimmed",children:t.lastCheckDetails||"ÐÑовеÑка еÑÑ Ð½Ðµ вÑполнÑлаÑÑ"}),t.lastCheckedAt&&e.jsx(c,{size:"xs",c:"dimmed",children:new Date(t.lastCheckedAt).toLocaleString("ru-RU")})]}),e.jsx(d.Td,{children:e.jsxs(g,{justify:"flex-end",gap:4,wrap:"nowrap",children:[Ds(t)&&e.jsx(y,{size:"compact-sm",color:"green",leftSection:e.jsx(Ts,{size:14}),loading:k?.serverId===t.id&&k.action==="install",disabled:k!==null,onClick:()=>We(t,"install"),children:t.status==="installing"?"ÐовÑоÑиÑÑ ÑÑÑановкÑ":"УÑÑановиÑÑ"}),t.status==="active"&&e.jsx(y,{size:"compact-sm",variant:"light",leftSection:e.jsx(_e,{size:14}),loading:k?.serverId===t.id&&k.action==="restart",disabled:k!==null,onClick:()=>void w(t),children:"Restart"}),e.jsx(y,{size:"compact-sm",variant:"subtle",leftSection:e.jsx(es,{size:14}),loading:k?.serverId===t.id&&k.action==="check",disabled:k!==null,onClick:()=>void Ge(t),children:"ÐÑовеÑиÑÑ"}),t.sshPasswordConfigured&&(t.status!=="installing"||Ds(t))&&e.jsx(y,{size:"compact-sm",color:"orange",variant:"subtle",leftSection:e.jsx(ws,{size:14}),loading:k?.serverId===t.id&&k.action==="harden",disabled:k!==null,onClick:()=>We(t,"harden"),children:"ÐаÑиÑиÑÑ"}),t.status==="active"&&e.jsx(y,{size:"compact-sm",color:"orange",variant:"subtle",leftSection:e.jsx($s,{size:14}),loading:k?.serverId===t.id&&k.action==="rotate",disabled:k!==null,onClick:()=>void us(t),children:"СмениÑÑ secret"}),e.jsx(y,{size:"compact-sm",variant:"subtle",leftSection:e.jsx(Is,{size:14}),onClick:()=>{te(t),ue()},children:"Ðог"}),e.jsx(y,{size:"compact-sm",variant:"subtle",leftSection:e.jsx(Ze,{size:14}),onClick:()=>ms(t),children:"ÐзмениÑÑ"}),e.jsx(y,{size:"compact-sm",color:"red",variant:"subtle",leftSection:e.jsx(Je,{size:14}),loading:k?.serverId===t.id&&k.action==="delete",disabled:k!==null,onClick:()=>void js(t),children:"УдалиÑÑ"})]})})]},t.id))})]})})}),e.jsx(_t,{token:a,exits:C.map(t=>({id:t.id,name:t.name,country:t.country,countryCode:t.countryCode,host:t.host,status:t.status}))}),e.jsx(ce,{opened:G,onClose:V,title:"ÐобавиÑÑ Telegram WEB Proxy",size:"lg",children:e.jsx("form",{onSubmit:N.onSubmit(ss),children:e.jsxs(Y,{gap:"md",children:[e.jsx(z,{label:"Ðазвание",placeholder:"WEB Proxy NL-1",required:!0,...
3N.getInputProps("name")}),e.jsxs(g,{grow:!0,children:[e.jsx(J,{label:"СÑÑана",data:Ns,renderOption:Us,searchable:!0,required:!0,...N.getInputProps("countryCode")}),e.jsx(cs,{providers:m,loading:S,value:N.values.hostingProviderId,onChange:t=>N.setFieldValue("hostingProviderId",t||"")})]}),e.jsx(z,{label:"ÐÑблиÑнÑй WEB домен",description:"A-запиÑÑ Ð´Ð¾Ð¼ÐµÐ½Ð° должна ÑказÑваÑÑ Ð½Ð° ÑеÑÑовÑй VPS",placeholder:"web-nl.example.com",required:!0,...N.getInputProps("host")}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"Email Letâs Encrypt",placeholder:"[email protected]",required:!0,...N.getInputProps("letsencryptEmail")}),e.jsx(J,{label:"Carrier mode",data:Ws,...N.getInputProps("carrierMode")})]}),e.jsx(z,{label:"Site upstream",description:"ÐокалÑнÑй HTTP-ÑеÑвиÑ, коÑоÑÑй Caddy оÑдаÑÑ ÐºÐ°Ðº обÑÑнÑй ÑайÑ",placeholder:"http://127.0.0.1:8080",disabled:N.values.skipInstall,...N.getInputProps("siteUpstream")}),e.jsx(J,{label:"ÐоÑÑÑп",data:Fs,...N.getInputProps("access")}),e.jsx(ne,{label:"СеÑÐ²ÐµÑ Ñже ÑÑÑановлен вÑÑÑнÑÑ",description:"Ðе запÑÑкаÑÑ ÑÑÑановÑик; пÑоÑÐ¸Ð»Ñ tproxy-server Ñ ÑÑим secret должен Ñже ÑабоÑаÑÑ",...N.getInputProps("skipInstall",{type:"checkbox"})}),N.values.skipInstall&&e.jsx(z,{label:"WEB Secret",description:"ТолÑко 32 hex-Ñимвола. Ðе иÑполÑзÑйÑе ee⦠â ÑÑо ÑоÑÐ¼Ð°Ñ Ð¾Ð±ÑÑного MTProxy.",placeholder:"0123456789abcdef0123456789abcdef",required:!0,...N.getInputProps("secret")}),e.jsx(Ie,{order:5,children:"SSH-доÑÑÑп к VPS ÑÑÑановÑика"}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"SSH Ñ Ð¾ÑÑ",placeholder:"203.0.113.10",required:!0,...N.getInputProps("sshHost")}),e.jsx(ae,{label:"SSH поÑÑ",min:1,max:65535,...N.getInputProps("sshPort")})]}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"SSH полÑзоваÑелÑ",...N.getInputProps("sshUser")}),e.jsx(qe,{label:N.values.skipInstall?"SSH паÑÐ¾Ð»Ñ (Ð´Ð»Ñ Ð¿ÑовеÑки, опÑионалÑно)":"SSH паÑолÑ",...N.getInputProps("sshPassword")})]}),e.jsx(Ye,{label:"ÐаÑа оконÑаниÑ",placeholder:"Ðез ÑÑока",clearable:!0,minDate:new Date,...N.getInputProps("expiresAt")}),e.jsxs(we,{color:"yellow",icon:e.jsx(Be,{size:18}),children:["УÑÑановÑик ÑкаÑÐ¸Ð²Ð°ÐµÑ upstream ",e.jsx(se,{children:"tproxy-server"}),", наÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Caddy, локалÑнÑй MTProxy и иÑполÑзÑÐµÑ Ð¿Ð¾ÑÑ 443. ÐапÑÑкайÑе его ÑолÑко на оÑделÑном ÑеÑÑовом VPS."]}),e.jsxs(g,{justify:"flex-end",children:[e.jsx(y,{variant:"subtle",onClick:V,children:"ÐÑмена"}),e.jsx(y,{type:"submit",loading:p,children:"ÐобавиÑÑ"})]})]})})}),e.jsx(ce,{opened:je,onClose:_,title:"ÐаÑÑÑойки Telegram WEB Proxy",size:"lg",children:e.jsx("form",{onSubmit:ee.onSubmit(gs),children:e.jsxs(Y,{gap:"md",children:[e.jsx(z,{label:"Ðазвание",required:!0,...ee.getInputProps("name")}),e.jsxs(g,{grow:!0,children:[e.jsx(J,{label:"СÑÑана",data:Ns,renderOption:Us,searchable:!0,required:!0,...ee.getInputProps("countryCode")}),e.jsx(cs,{providers:m,loading:S,value:ee.values.hostingProviderId,onChange:t=>ee.setFieldValue("hostingProviderId",t||"")})]}),e.jsx(z,{label:"ÐÑблиÑнÑй WEB домен",description:"Ðзменение домена или carrier mode поÑÑебÑÐµÑ Ð¿Ð¾Ð²ÑоÑной ÑÑÑановки",required:!0,...ee.getInputProps("host")}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"Email Letâs Encrypt",required:!0,...ee.getInputProps("letsencryptEmail")}),e.jsx(J,{label:"Carrier mode",data:Ws,...ee.getInputProps("carrierMode")})]}),e.jsx(z,{label:"Site upstream",placeholder:"http://127.0.0.1:8080",...ee.getInputProps("siteUpstream")}),e.jsx(J,{label:"ÐоÑÑÑп",data:Fs,...ee.getInputProps("access")}),e.jsx(Ye,{label:"ÐаÑа оконÑаниÑ",placeholder:"Ðез ÑÑока",clearable:!0,minDate:new Date,...ee.getInputProps("expiresAt")}),e.jsx(ne,{label:"ÐкÑивен Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелей",...ee.getInputProps("isActive",{type:"checkbox"})}),F&&e.jsxs(c,{size:"sm",c:"dimmed",children:["SSH: ",e.jsxs(se,{children:[F.sshUser,"@",F.sshHost,":",F.sshPort]}),". ÐаÑÐ¾Ð»Ñ ",F.sshPasswordConfigured?"ÑÐ¾Ñ ÑанÑн":"не ÑÐ¾Ñ ÑанÑн","."]}),e.jsxs(g,{justify:"flex-end",children:[e.jsx(y,{variant:"subtle",onClick:_,children:"ÐÑмена"}),e.jsx(y,{type:"submit",loading:p,children:"Ð¡Ð¾Ñ ÑаниÑÑ"})]})]})})}),e.jsx(ce,{opened:Z!==null,onClose:()=>!de&&le(null),title:Z?.mode==="install"?"ÐаÑиÑа ÑеÑвеÑа и ÑÑÑановка WEB Proxy":"ÐаÑиÑа ÑеÑвеÑа",size:"md",children:e.jsxs(Y,{gap:"md",children:[e.jsxs(we,{color:"blue",variant:"light",icon:e.jsx(ws,{size:18}),children:[Z?.mode==="install"?"ÐеÑед ÑÑÑановкой на ÑеÑвеÑе бÑÐ´ÐµÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñован иÑÑ Ð¾Ð´ÑÑий SMTP (поÑÑ 25) и вклÑÑÑн fail2ban. ÐоÑÑÑ 80/443 Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑвободнÑ.":"Ðа ÑеÑвеÑе бÑÐ´ÐµÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñован иÑÑ Ð¾Ð´ÑÑий SMTP (поÑÑ 25) и вклÑÑÑн fail2ban. WEB Proxy не пеÑеÑÑÑанавливаеÑÑÑ."," ","ÐÐ¾Ð»Ñ Ð½Ð¸Ð¶Ðµ необÑзаÑелÑнÑе â оÑÑавÑÑе пÑÑÑÑми, ÑÑÐ¾Ð±Ñ Ð½Ðµ менÑÑÑ SSH-доÑÑÑп."]}),e.jsx(At,{fullWidth:!0,value:Te,onChange:t=>ke(t),data:[{label:"SSH по паÑÐ¾Ð»Ñ (ÑекÑÑий)",value:"password"},{label:"SSH по клÑÑÑ",value:"key"}]}),Te==="key"&&e.jsxs(e.Fragment,{children:[e.jsx(vt,{label:"ÐÑиваÑнÑй SSH-клÑÑ (Ð´Ð»Ñ Ð¿ÐµÑвого подклÑÑениÑ)",description:"PEM/OpenSSH. ТолÑко Ð´Ð»Ñ ÑÑого подклÑÑениÑ; поÑле hardening ÑеÑÐ²ÐµÑ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð¸Ñ Ð½Ð° новÑй root-паÑолÑ. Ðе ÑÐ¾Ñ ÑанÑеÑÑÑ.",placeholder:`-----BEGIN OPENSSH PRIVATE KEY----- 4... 5-----END OPENSSH PRIVATE KEY-----`,value:Ae,onChange:t=>Ne(t.currentTarget.value),minRows:4,autosize:!0,styles:{input:{fontFamily:"monospace",fontSize:12}}}),e.jsx(qe,{label:"Passphrase клÑÑа (еÑли еÑÑÑ)",description:"ÐÑÑавÑÑе пÑÑÑÑм Ð´Ð»Ñ Ð½ÐµÐ·Ð°ÑиÑÑованного клÑÑа",value:be,onChange:t=>Ue(t.currentTarget.value)})]}),e.jsx(ae,{label:"ÐовÑй SSH-поÑÑ",description:"1024â65535. ÐÑÑÑо â оÑÑавиÑÑ ÑекÑÑий.",placeholder:`ÑекÑÑий: ${Z?.server.sshPort??22}`,min:1024,max:65535,allowDecimal:!1,value:K===""?"":Number(K),onChange:t=>fe(t===""||t===void 0?"":String(t))}),e.jsx(qe,{label:"ÐовÑй SSH-паÑÐ¾Ð»Ñ root",description:"ÐинимÑм 8 Ñимволов, пеÑаÑнÑй ASCII. ÐÑÑÑо â оÑÑавиÑÑ ÑекÑÑий.",placeholder:"ÐÑÑавÑÑе пÑÑÑÑм, ÑÑÐ¾Ð±Ñ Ð½Ðµ менÑÑÑ",value:X,onChange:t=>i(t.currentTarget.value)}),e.jsx(ne,{label:"ÐакÑÑÑÑ Ð»Ð¸Ñние поÑÑÑ (INPUT default-deny)",description:"ÐÑÑавиÑÑ ÑолÑко SSH, 80/443 и ÑеалÑно ÑлÑÑаÑÑие поÑÑÑ. FORWARD и NAT не заÑÑагиваÑÑÑÑ.",checked:o,onChange:t=>j(t.currentTarget.checked)}
5),o&&e.jsx(we,{color:"yellow",variant:"light",icon:e.jsx(Be,{size:18}),children:"ÐклÑÑайÑе ÑолÑко на вÑделенном VPS под WEB Proxy: пÑавила пиÑÑÑÑÑ ÑеÑез iptables, а tproxy-server Ð¿Ð¾Ð´Ð½Ð¸Ð¼Ð°ÐµÑ ÑобÑÑвеннÑй firewall на nftables."}),Z?.mode==="harden"&&e.jsxs(e.Fragment,{children:[e.jsx(ne,{label:"Double-hop: огÑаниÑиÑÑ :443 ÑолÑко IP акÑивнÑÑ
ÑÑонÑов",description:"ÐоÑÑ 443 пÑÐ¸Ð¼ÐµÑ ÑÑаÑик ТÐÐЬÐÐ Ñ IP ÑÑонÑов ÑÑого exit (+loopback). ÐоÑÑ 80 оÑÑаÑÑÑÑ Ð¾ÑкÑÑÑ Ð´Ð»Ñ ACME. ÐклÑÑÐ°ÐµÑ lockdown.",checked:h,onChange:t=>A(t.currentTarget.checked)}),h&&e.jsx(we,{color:"grape",variant:"light",icon:e.jsx(Be,{size:18}),children:"ÐÑÑмÑе клиенÑÑ Ð½Ð° :443 бÑдÑÑ Ð¾ÑÑÐµÐ·Ð°Ð½Ñ â пÑименÑйÑе ТÐÐЬÐРпоÑле Ñого, как поднÑÑ Ð¸ вклÑÑÑн Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ ÑÑÐ¾Ð½Ñ ÑÑого exit, и клиенÑÑ Ñже идÑÑ ÑеÑез него. ÐÑли Ñ exit Ð½ÐµÑ Ð°ÐºÑивнÑÑ
ÑÑонÑов Ñ Ð¾Ð¿ÑеделÑемÑм IP, Ñ
аÑдеÑинг бÑÐ´ÐµÑ Ð¾ÑклонÑн."})]}),e.jsx(we,{color:"orange",variant:"light",icon:e.jsx(Be,{size:18}),children:"Смена поÑÑа и паÑÐ¾Ð»Ñ Ð²ÑполнÑеÑÑÑ Ð½Ð° живом sshd. ÐÑли Ñоединение обоÑвÑÑÑÑ Ð´Ð¾ подÑвеÑждениÑ, Ð¿Ð°Ð½ÐµÐ»Ñ Ð¾ÑÑÐ°Ð²Ð¸Ñ Ð¿Ñежние SSH-даннÑе â Ñогда пÑовеÑÑÑе ÑеÑÐ²ÐµÑ ÑеÑез конÑÐ¾Ð»Ñ Ñ
оÑÑеÑа."}),e.jsxs(g,{justify:"flex-end",children:[e.jsx(y,{variant:"subtle",onClick:()=>le(null),disabled:de,children:"ÐÑмена"}),e.jsx(y,{color:"orange",leftSection:e.jsx(ws,{size:16}),loading:de,onClick:()=>void ps(),children:Z?.mode==="install"?"ÐаÑиÑиÑÑ Ð¸ ÑÑÑановиÑÑ":"ÐаÑиÑиÑÑ ÑеÑвеÑ"})]})]})}),e.jsx(ce,{opened:ge,onClose:xe,title:`Ðог WEB Proxy: ${F?.name||""}`,size:"xl",children:e.jsx(se,{block:!0,style:{maxHeight:500,overflow:"auto",whiteSpace:"pre-wrap"},children:F?.installLog||F?.errorMessage||"Ðогов пока неÑ"})})]})}const el=[{value:"auto",label:"ÐвÑо (из Ñида)"},{value:"http",label:"HTTP"},{value:"https",label:"HTTPS"},{value:"socks4",label:"SOCKS4"},{value:"socks5",label:"SOCKS5"}],Vs=[{value:"prime-public",label:"ÐÑблиÑнÑе (prime)"},{value:"free",label:"ÐеÑплаÑнÑе"},{value:"all",label:"ÐÑе полÑзоваÑели"},{value:"private",label:"ÐÑиваÑнÑе"}];function sl(){const a=hs(m=>m.token);return x.useMemo(()=>{async function m(S,C,E){const v=await fetch(`/api/admin/proxy-feeds${C}`,{method:S,headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},body:E?JSON.stringify(E):void 0});if(!v.ok){let L="";try{const W=await v.json();L=W?.message||W?.error||JSON.stringify(W)}catch{L=await v.text()}throw new Error(L||`HTTP ${v.status}`)}return v.status===204?null:v.json()}return{get:S=>m("GET",S),post:(S,C)=>m("POST",S,C),put:(S,C)=>m("PUT",S,C),del:S=>m("DELETE",S)}},[a])}function tl({opened:a,onClose:m,onChanged:S}){const C=sl(),[E,v]=x.useState([]),[L,W]=x.useState(!0),[H,p]=x.useState(null),[B,k]=x.useState(""),[M,F]=x.useState(""),[te,ge]=x.useState("auto"),[ue,xe]=x.useState("prime-public"),[G,q]=x.useState(""),[V,je]=x.useState(200),[pe,_]=x.useState(!0),[Z,le]=x.useState(!1),K=x.useCallback(async()=>{W(!0);try{const h=await C.get("/sources");v(h)}catch(h){r.show({color:"red",message:h.message||"ÐÑибка загÑÑзки"})}finally{W(!1)}},[C]);x.useEffect(()=>{a&&K()},[a,K]);const fe=x.useCallback(async h=>{p(`refresh-${h}`);try{const A=await C.post(`/sources/${h}/refresh`);r.show({color:"green",message:`ÐмпоÑÑиÑовано ${A.total} (новÑÑ
${A.added}, обновлено ${A.updated}, Ñдалено ${A.removed}; в Ñиде ${A.parsed})`}),await K(),S()}catch(A){r.show({color:"red",message:A.message||"ÐÑибка обновлениÑ"})}finally{p(null)}},[C,K,S]),X=async()=>{if(!M.trim()){r.show({color:"red",message:"УкажиÑе URL иÑÑоÑника"});return}le(!0);try{const h=await C.post("/sources",{name:B.trim(),url:M.trim(),protocol:te,access:ue,defaultCountry:G.trim()||void 0,maxImport:V,healthCheck:pe});k(""),F(""),ge("auto"),xe("prime-public"),q(""),je(200),_(!0),r.show({color:"green",message:"ÐÑÑоÑник добавлен, загÑÑÐ¶Ð°Ñ Ð¿ÑокÑиâ¦"}),await fe(h.id)}catch(h){r.show({color:"red",message:h.message||"Ðе ÑдалоÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¸ÑÑоÑник"})}finally{le(!1)}},i=async h=>{p(`src-${h.id}`);try{await C.put(`/sources/${h.id}`,{enabled:!h.enabled}),await K()}catch(A){r.show({color:"red",message:A.message})}finally{p(null)}},o=async(h,A)=>{p(`src-${h.id}`);try{await C.put(`/sources/${h.id}`,{access:A}),await K(),S()}catch(de){r.show({color:"red",message:de.message})}finally{p(null)}},j=async h=>{if(window.confirm(`УдалиÑÑ Ð¸ÑÑоÑник «${h.name}» и вÑе импоÑÑиÑованнÑе из него пÑокÑи?`)){p(`src-${h.id}`);try{await C.del(`/sources/${h.id}`),await K(),S()}catch(A){r.show({color:"red",message:A.message})}finally{p(null)}}};return e.jsx(ce,{opened:a,onClose:m,title:"ÐмпоÑÑ Ð¿ÑокÑи из URL-Ñидов",size:"xl",children:e.jsxs(Y,{children:[e.jsxs(we,{color:"orange",icon:e.jsx(St,{size:16}),children:["ÐмпоÑÑ Ð¸Ð· внеÑнего URL-ÑпиÑка HTTP/SOCKS-пÑокÑи. ",e.jsx("b",{children:"ÐÑблиÑнÑе"})," пÑокÑи ÑпÑавлÑÑÑÑÑ Ð½ÐµÐ¸Ð·Ð²ÐµÑÑнÑми опеÑаÑоÑами â не гаÑанÑиÑÑÑÑ Ð¿ÑиваÑноÑÑÑ Ð¸ могÑÑ Ð±ÑÑÑ Ð½ÐµÑÑабилÑнÑ. ÐмпоÑÑиÑованнÑе пÑокÑи помеÑаÑÑÑÑ",e.jsx(c,{span:!0,ff:"monospace",children:" source=feed"})," и попадаÑÑ Ð² обÑий пÑл Ñ Ð²ÑбÑаннÑм ÑÑовнем доÑÑÑпа. Ðбновление â ÑолÑко вÑÑÑнÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ð¹."]}),e.jsxs(me,{withBorder:!0,padding:"md",children:[e.jsx(c,{fw:600,mb:"sm",children:"ÐобавиÑÑ Ð¸ÑÑоÑник"}),e.jsxs(Y,{gap:"sm",children:[e.jsxs(g,{align:"flex-end",wrap:"wrap",children:[e.jsx(z,{label:"Ðазвание",placeholder:"Free Proxy List",value:B,onChange:h=>k(h.currentTarget.value),style:{minWidth:200}}),e.jsx(z,{label:"URL ÑпиÑка",placeholder:"https://.../proxies/socks5/data.json",value:M,onChange:h=>F(h.currentTarget.value),style:{flex:1,minWidth:300}})]}),e.jsxs(g,{align:"flex-end",wrap:"wrap",children:[e.jsx(J,{label:"ÐÑоÑокол",data:el,value:te,onChange:h=>ge(h||"auto"),allowDeselect:!1,style:{width:150}}),e.jsx(J,{label:"ÐоÑÑÑп",data:Vs,value:ue,onChange:h=>xe(h||"prime-public"),allowDeselect:!1,style:{width:180}}),e.jsx(z,{label:"СÑÑана по ÑмолÑ. (ISO)",placeholder:"DE",value:G,onChange:h=>q(h.currentTarget.value.toUpperCase().slice(0,2)),style:{width:130}}),e.jsx(ae,{label:"ÐакÑ. импоÑÑ",value:V,onChange:h=>je(typeof h=="number"?h:200),min:1,max:2e3,style:{width:130}}),e.jsx(ne,{label:"Health-ÑилÑÑÑ",checked:pe,onChange:h=>_(h.currentTarget.checked),mb:6}),e.jsx(y,{leftSection:e.jsx(ze,{size:16}),onClick:X,loading:Z,children:"ÐобавиÑÑ Ð¸ загÑÑзиÑÑ"})]})]})]}),L?e.jsx(g,{justify:"center",p:"xl",children:e.jsx(Pt,{})}):E.length===0?e.jsx(c,{c:"dimmed",ta:"center",p:"xl",children:"ÐÑÑоÑников пока неÑ. ÐобавÑÑе URL вÑÑе."}):E.map(h=>e.jsxs(me,{withBorder:!0,padding:"md",children:[e.jsxs(g,{justify:"space-between",mb:"xs",wrap:"wrap",children:[e.jsxs(g,{gap:"xs",children:[e.jsx(ne,{checked:h.enabled,onChange:()=>i(h),disabled:H===`src-${h.id}`,label:e.jsx(c,{fw:600,children:h.name})}),h.lastStatus==="ok"&&e.jsx(T,{color:"green",variant:"light",children:"ok"}),h.lastStatus==="error"&&e.jsx(Qe,{label:h.lastError||"оÑибка",children:e.jsx(T,{color:"red",variant:"light",children:"error"})}),e.jsxs(T,{variant:"light",children:[h.proxiesCount," пÑокÑи"]}),e.jsx(T,{variant:"outline",children:h.protocol}),h.healthCheck&&e.jsx(T,{color:"teal",variant:"light",children:"health"})]}),e.jsxs(g,{gap:"xs",children:[e.jsx(J,{size:"xs",data:Vs,value:h.access,onChange:A=>o(h,A||"prime-public"),allowDeselect:!1,disabled:H===`src-${h.id}`,style:{width:160}}),e.jsx(y,{size:"xs",variant:"light",leftSection:e.jsx(_e,{size:14}),onClick:()=>fe(h.id),loading:H===`refresh-${h.id}`,children:"ÐбновиÑÑ"}),e.jsx(os,{color:"red",variant:"subtle",onClick:()=>j(h),disabled:H===`src-${h.id}`,children:e.jsx(Je,{size:16})})]})]}),e.jsx(c,{size:"xs",c:"dimmed",style:{wordBreak:"break-all"},children:h.url})]}
5,h.id))]})})}const ll="_statCard_cbh73_1",vs={statCard:ll},U="",al=/^(0|[1-9]\d{0,2})$/,rl=/^(?=.{1,253}$)([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/i;function il(a){const m=a.trim();if(!m||m.length>253)return!1;const S=m.split(".");return S.length===4&&S.every(E=>al.test(E)&&Number(E)<=255)||rl.test(m)}const nl=[{value:"ð",label:"ð ÐÐ¸Ñ (по ÑмолÑаниÑ)"},{value:"ð¦ð©",label:"ð¦ð© ÐндоÑÑа"},{value:"ð¦ðª",label:"ð¦ðª ÐÐÐ"},{value:"ð¦ð«",label:"ð¦ð« ÐÑганиÑÑан"},{value:"ð¦ð±",label:"ð¦ð± ÐлбаниÑ"},{value:"ð¦ð²",label:"ð¦ð² ÐÑмениÑ"},{value:"ð¦ð´",label:"ð¦ð´ Ðнгола"},{value:"ð¦ð·",label:"ð¦ð· ÐÑгенÑина"},{value:"ð¦ð¹",label:"ð¦ð¹ ÐвÑÑÑиÑ"},{value:"ð¦ðº",label:"ð¦ðº ÐвÑÑÑалиÑ"},{value:"ð¦ð¿",label:"ð¦ð¿ ÐзеÑбайджан"},{value:"ð§ð¦",label:"ð§ð¦ ÐоÑниÑ"},{value:"ð§ð©",label:"ð§ð© ÐангладеÑ"},{value:"ð§ðª",label:"ð§ðª ÐелÑгиÑ"},{value:"ð§ð¬",label:"ð§ð¬ ÐолгаÑиÑ"},{value:"ð§ð",label:"ð§ð ÐаÑ
Ñейн"},{value:"ð§ð´",label:"ð§ð´ ÐоливиÑ"},{value:"ð§ð·",label:"ð§ð· ÐÑазилиÑ"},{value:"ð§ð¾",label:"ð§ð¾ ÐелаÑÑÑÑ"},{value:"ð¨ð¦",label:"ð¨ð¦ Ðанада"},{value:"ð¨ð",label:"ð¨ð ШвейÑаÑиÑ"},{value:"ð¨ð±",label:"ð¨ð± Чили"},{value:"ð¨ð³",label:"ð¨ð³ ÐиÑай"},{value:"ð¨ð´",label:"ð¨ð´ ÐолÑмбиÑ"},{value:"ð¨ðº",label:"ð¨ðº ÐÑба"},{value:"ð¨ð¾",label:"ð¨ð¾ ÐипÑ"},{value:"ð¨ð¿",label:"ð¨ð¿ ЧеÑ
иÑ"},{value:"ð©ðª",label:"ð©ðª ÐеÑманиÑ"},{value:"ð©ð°",label:"ð©ð° ÐаниÑ"},{value:"ð©ð¿",label:"ð©ð¿ ÐлжиÑ"},{value:"ðªð¨",label:"ðªð¨ ÐквадоÑ"},{value:"ðªðª",label:"ðªðª ÐÑÑониÑ"},{value:"ðªð¬",label:"ðªð¬ ÐгипеÑ"},{value:"ðªð¸",label:"ðªð¸ ÐÑпаниÑ"},{value:"ð«ð®",label:"ð«ð® ФинлÑндиÑ"},{value:"ð«ð·",label:"ð«ð· ФÑанÑиÑ"},{value:"ð¬ð§",label:"ð¬ð§ ÐеликобÑиÑаниÑ"},{value:"ð¬ðª",label:"ð¬ðª ÐÑÑзиÑ"},{value:"ð¬ð·",label:"ð¬ð· ÐÑеÑиÑ"},{value:"ðð°",label:"ðð° Ðонконг"},{value:"ðð·",label:"ðð· ХоÑваÑиÑ"},{value:"ððº",label:"ððº ÐенгÑиÑ"},{value:"ð®ð©",label:"ð®ð© ÐндонезиÑ"},{value:"ð®ðª",label:"ð®ðª ÐÑландиÑ"},{value:"ð®ð±",label:"ð®ð± ÐзÑаилÑ"},{value:"ð®ð³",label:"ð®ð³ ÐндиÑ"},{value:"ð®ð¶",label:"ð®ð¶ ÐÑак"},{value:"ð®ð·",label:"ð®ð· ÐÑан"},{value:"ð®ð¸",label:"ð®ð¸ ÐÑландиÑ"},{value:"ð®ð¹",label:"ð®ð¹ ÐÑалиÑ"},{value:"ð¯ð´",label:"ð¯ð´ ÐоÑданиÑ"},{value:"ð¯ðµ",label:"ð¯ðµ ЯпониÑ"},{value:"ð°ðª",label:"ð°ðª ÐениÑ"},{value:"ð°ð¬",label:"ð°ð¬ ÐиÑгизиÑ"},{value:"ð°ð",label:"ð°ð Ðамбоджа"},{value:"ð°ð·",label:"ð°ð· Ð®Ð¶Ð½Ð°Ñ ÐоÑеÑ"},{value:"ð°ð¼",label:"ð°ð¼ ÐÑвейÑ"},{value:"ð°ð¿",label:"ð°ð¿ ÐазаÑ
ÑÑан"},{value:"ð±ð§",label:"ð±ð§ Ðиван"},{value:"ð±ð°",label:"ð±ð° ШÑи-Ðанка"},{value:"ð±ð¹",label:"ð±ð¹ ÐиÑва"},{value:"ð±ðº",label:"ð±ðº ÐÑкÑембÑÑг"},{value:"ð±ð»",label:"ð±ð» ÐаÑвиÑ"},{value:"ð²ð¦",label:"ð²ð¦ ÐаÑокко"},{value:"ð²ð¨",label:"ð²ð¨ Ðонако"},{value:"ð²ð©",label:"ð²ð© Ðолдова"},{value:"ð²ðª",label:"ð²ðª ЧеÑногоÑиÑ"},{value:"ð²ð°",label:"ð²ð° СевеÑÐ½Ð°Ñ ÐакедониÑ"},{value:"ð²ð³",label:"ð²ð³ ÐонголиÑ"},{value:"ð²ð¹",label:"ð²ð¹ ÐалÑÑа"},{value:"ð²ð»",label:"ð²ð» ÐалÑдивÑ"},{value:"ð²ð½",label:"ð²ð½ ÐекÑика"},{value:"ð²ð¾",label:"ð²ð¾ ÐалайзиÑ"},{value:"ð³ð¬",label:"ð³ð¬ ÐигеÑиÑ"}
5,{value:"ð³ð±",label:"ð³ð± ÐидеÑландÑ"},{value:"ð³ð´",label:"ð³ð´ ÐоÑвегиÑ"},{value:"ð³ðµ",label:"ð³ðµ Ðепал"},{value:"ð³ð¿",label:"ð³ð¿ ÐÐ¾Ð²Ð°Ñ ÐеландиÑ"},{value:"ð´ð²",label:"ð´ð² Ðман"},{value:"ðµð¦",label:"ðµð¦ Ðанама"},{value:"ðµðª",label:"ðµðª ÐеÑÑ"},{value:"ðµð",label:"ðµð ФилиппинÑ"},{value:"ðµð°",label:"ðµð° ÐакиÑÑан"},{value:"ðµð±",label:"ðµð± ÐолÑÑа"},{value:"ðµð¸",label:"ðµð¸ ÐалеÑÑина"},{value:"ðµð¹",label:"ðµð¹ ÐоÑÑÑгалиÑ"},{value:"ð¶ð¦",label:"ð¶ð¦ ÐаÑаÑ"},{value:"ð·ð´",label:"ð·ð´ Ð ÑмÑниÑ"},{value:"ð·ð¸",label:"ð·ð¸ СеÑбиÑ"},{value:"ð·ðº",label:"ð·ðº РоÑÑиÑ"},{value:"ð¸ð¦",label:"ð¸ð¦ СаÑдовÑÐºÐ°Ñ ÐÑавиÑ"},{value:"ð¸ðª",label:"ð¸ðª ШвеÑиÑ"},{value:"ð¸ð¬",label:"ð¸ð¬ СингапÑÑ"},{value:"ð¸ð®",label:"ð¸ð® СловениÑ"},{value:"ð¸ð°",label:"ð¸ð° СловакиÑ"},{value:"ð¸ð¾",label:"ð¸ð¾ СиÑиÑ"},{value:"ð¹ð",label:"ð¹ð Таиланд"},{value:"ð¹ð¯",label:"ð¹ð¯ ТаджикиÑÑан"},{value:"ð¹ð²",label:"ð¹ð² ТÑÑкмениÑÑан"},{value:"ð¹ð³",label:"ð¹ð³ ТÑниÑ"},{value:"ð¹ð·",label:"ð¹ð· ТÑÑÑиÑ"},{value:"ð¹ð¼",label:"ð¹ð¼ ТайванÑ"},{value:"ðºð¦",label:"ðºð¦ УкÑаина"},{value:"ðºð¸",label:"ðºð¸ СШÐ"},{value:"ðºð¾",label:"ðºð¾ УÑÑгвай"},{value:"ðºð¿",label:"ðºð¿ УзбекиÑÑан"},{value:"ð»ðª",label:"ð»ðª ÐенеÑÑÑла"},{value:"ð»ð³",label:"ð»ð³ ÐÑеÑнам"},{value:"ð¾ðª",label:"ð¾ðª Ðемен"},{value:"ð¿ð¦",label:"ð¿ð¦ ЮÐÐ "}],Ks=nl.map(a=>({...a,label:a.label.replace(/^\S+\s+/,"")}));function _s({option:a}){return e.jsxs(g,{gap:"sm",wrap:"nowrap",children:[e.jsx(Me,{flagEmoji:a.value,size:20}),e.jsx(c,{size:"sm",children:a.label})]})}const is=[{value:"AD",label:"ð¦ð© ÐндоÑÑа",country:"ÐндоÑÑа"},{value:"AE",label:"ð¦ðª ÐÐÐ",country:"ÐÐÐ"},{value:"AF",label:"ð¦ð« ÐÑганиÑÑан",country:"ÐÑганиÑÑан"},{value:"AL",label:"ð¦ð± ÐлбаниÑ",country:"ÐлбаниÑ"},{value:"AM",label:"ð¦ð² ÐÑмениÑ",country:"ÐÑмениÑ"},{value:"AO",label:"ð¦ð´ Ðнгола",country:"Ðнгола"},{value:"AR",label:"ð¦ð· ÐÑгенÑина",country:"ÐÑгенÑина"},{value:"AT",label:"ð¦ð¹ ÐвÑÑÑиÑ",country:"ÐвÑÑÑиÑ"},{value:"AU",label:"ð¦ðº ÐвÑÑÑалиÑ",country:"ÐвÑÑÑалиÑ"},{value:"AZ",label:"ð¦ð¿ ÐзеÑбайджан",country:"ÐзеÑбайджан"},{value:"BA",label:"ð§ð¦ ÐоÑниÑ",country:"ÐоÑниÑ"},{value:"BD",label:"ð§ð© ÐангладеÑ",country:"ÐангладеÑ"},{value:"BE",label:"ð§ðª ÐелÑгиÑ",country:"ÐелÑгиÑ"},{value:"BG",label:"ð§ð¬ ÐолгаÑиÑ",country:"ÐолгаÑиÑ"},{value:"BH",label:"ð§ð ÐаÑ
Ñейн",country:"ÐаÑ
Ñейн"},{value:"BO",label:"ð§ð´ ÐоливиÑ",country:"ÐоливиÑ"},{value:"BR",label:"ð§ð· ÐÑазилиÑ",country:"ÐÑазилиÑ"},{value:"BY",label:"ð§ð¾ ÐелаÑÑÑÑ",country:"ÐелаÑÑÑÑ"},{value:"CA",label:"ð¨ð¦ Ðанада",country:"Ðанада"},{value:"CH",label:"ð¨ð ШвейÑаÑиÑ",country:"ШвейÑаÑиÑ"},{value:"CL",label:"ð¨ð± Чили",country:"Чили"},{value:"CN",label:"ð¨ð³ ÐиÑай",country:"ÐиÑай"},{value:"CO",label:"ð¨ð´ ÐолÑмбиÑ",country:"ÐолÑмбиÑ"},{value:"CR",label:"ð¨ð· ÐоÑÑа-Рика",country:"ÐоÑÑа-Рика"},{value:"CU",label:"ð¨ðº ÐÑба",country:"ÐÑба"},{value:"CY",label:"ð¨ð¾ ÐипÑ",country:"ÐипÑ"},{value:"CZ",label:"ð¨ð¿ ЧеÑ
иÑ",country:"ЧеÑ
иÑ"},{value:"DE",label:"ð©ðª ÐеÑманиÑ",country:"ÐеÑманиÑ"},{value:"DK",label:"ð©ð° ÐаниÑ",country:"ÐаниÑ"},{value:"DZ",label:"ð©ð¿ ÐлжиÑ",country:"ÐлжиÑ"},{value:"EC",label:"ðªð¨ ÐквадоÑ",country:"ÐквадоÑ"},{value:"EE",label:"ðªðª ÐÑÑониÑ",country:"ÐÑÑониÑ"},{value:"EG",label:"ðªð¬ ÐгипеÑ",country:"ÐгипеÑ"},{value:"ES",label:"ðªð¸ ÐÑпаниÑ",country:"ÐÑпаниÑ"},{value:"FI",label:"ð«ð® ФинлÑндиÑ",country:"ФинлÑндиÑ"},{value:"FR",label:"ð«ð· ФÑанÑиÑ",country:"ФÑанÑиÑ"},{value:"GB",label:"ð¬ð§ ÐеликобÑиÑаниÑ",country:"ÐеликобÑиÑаниÑ"},{value:"GE",label:"ð¬ðª ÐÑÑзиÑ",country:"ÐÑÑзиÑ"},{value:"GR",label:"ð¬ð· ÐÑеÑиÑ",country:"ÐÑеÑиÑ"},{value:"GT",label:"ð¬ð¹ ÐваÑемала",country:"ÐваÑемала"},{value:"HK",label:"ðð° Ðонконг",country:"Ðонконг"},{value:"HR",label:"ðð· ХоÑваÑиÑ",country:"ХоÑваÑиÑ"},{value:"HU",label:"ððº ÐенгÑиÑ",country:"ÐенгÑиÑ"},{value:"ID",label:"ð®ð© ÐндонезиÑ",country:"ÐндонезиÑ"},{value:"IE",label:"ð®ðª ÐÑландиÑ",country:"ÐÑландиÑ"},{value:"IL",label:"ð®ð± ÐзÑаилÑ",country:"ÐзÑаилÑ"},{value:"IN",label:"ð®ð³ ÐндиÑ",country:"ÐндиÑ"},{value:"IQ",label:"ð®ð¶ ÐÑак",country:"ÐÑак"},{value:"IR",label:"ð®ð· ÐÑан",country:"ÐÑан"},{value:"IS",label:"ð®ð¸ ÐÑландиÑ",country:"ÐÑландиÑ"},{value:"IT",label:"ð®ð¹ ÐÑалиÑ",country:"ÐÑалиÑ"},{value:"JO",label:"ð¯ð´ ÐоÑданиÑ",country:"ÐоÑданиÑ"},{value:"JP",label:"ð¯ðµ ЯпониÑ",country:"ЯпониÑ"},{value:"KE",label:"ð°ðª ÐениÑ",country:"ÐениÑ"},{value:"KG",label:"ð°ð¬ ÐиÑгизиÑ",country:"ÐиÑгизиÑ"},{value:"KH",label:"ð°ð Ðамбоджа",country:"Ðамбоджа"},{value:"KR",label:"ð°ð· Ð®Ð¶Ð½Ð°Ñ ÐоÑеÑ",country:"Ð®Ð¶Ð½Ð°Ñ ÐоÑеÑ"},{value:"KW",label:"ð°ð¼ ÐÑвейÑ",country:"ÐÑвейÑ"},{value:"KZ",label:"ð°ð¿ ÐазаÑ
ÑÑан",country:"ÐазаÑ
ÑÑан"},{value:"LB",label:"ð±ð§ Ðиван",country:"Ðиван"},{value:"LK",label:"ð±ð° ШÑи-Ðанка",country:"ШÑи-Ðанка"},{value:"LT",label:"ð±ð¹ ÐиÑва",country:"ÐиÑва"},{value:"LU",label:"ð±ðº ÐÑкÑембÑÑг",country:"ÐÑкÑембÑÑг"},{value:"LV",label:"ð±ð» ÐаÑвиÑ",country:"ÐаÑвиÑ"},{value:"MA",label:"ð²ð¦ ÐаÑокко",country:"ÐаÑокко"},{value:"MC",label:"ð²ð¨ Ðонако",country:"Ðонако"},{value:"MD",label:"ð²ð© Ðолдова",country:"Ðолдова"},{value:"ME",label:"ð²ðª ЧеÑногоÑиÑ",country:"ЧеÑногоÑиÑ"},{value:"MK",label:"ð²ð° СевеÑÐ½Ð°Ñ ÐакедониÑ",country:"СевеÑÐ½Ð°Ñ ÐакедониÑ"},{value:"MN",label:"ð²ð³ ÐонголиÑ",country:"ÐонголиÑ"},{value:"MT",label:"ð²ð¹ ÐалÑÑа",country:"ÐалÑÑа"},{value:"MV",label:"ð²ð» ÐалÑдивÑ",country:"ÐалÑдивÑ"},{value:"MX",label:"ð²ð½ ÐекÑика",country:"ÐекÑика"},{value:"MY",label:"ð²ð¾ ÐалайзиÑ",country:"ÐалайзиÑ"},{value:"NG",label:"ð³ð¬ ÐигеÑиÑ",country:"ÐигеÑиÑ"}
5,{value:"NL",label:"ð³ð± ÐидеÑландÑ",country:"ÐидеÑландÑ"},{value:"NO",label:"ð³ð´ ÐоÑвегиÑ",country:"ÐоÑвегиÑ"},{value:"NP",label:"ð³ðµ Ðепал",country:"Ðепал"},{value:"NZ",label:"ð³ð¿ ÐÐ¾Ð²Ð°Ñ ÐеландиÑ",country:"ÐÐ¾Ð²Ð°Ñ ÐеландиÑ"},{value:"OM",label:"ð´ð² Ðман",country:"Ðман"},{value:"PA",label:"ðµð¦ Ðанама",country:"Ðанама"},{value:"PE",label:"ðµðª ÐеÑÑ",country:"ÐеÑÑ"},{value:"PH",label:"ðµð ФилиппинÑ",country:"ФилиппинÑ"},{value:"PK",label:"ðµð° ÐакиÑÑан",country:"ÐакиÑÑан"},{value:"PL",label:"ðµð± ÐолÑÑа",country:"ÐолÑÑа"},{value:"PS",label:"ðµð¸ ÐалеÑÑина",country:"ÐалеÑÑина"},{value:"PT",label:"ðµð¹ ÐоÑÑÑгалиÑ",country:"ÐоÑÑÑгалиÑ"},{value:"QA",label:"ð¶ð¦ ÐаÑаÑ",country:"ÐаÑаÑ"},{value:"RO",label:"ð·ð´ Ð ÑмÑниÑ",country:"Ð ÑмÑниÑ"},{value:"RS",label:"ð·ð¸ СеÑбиÑ",country:"СеÑбиÑ"},{value:"RU",label:"ð·ðº РоÑÑиÑ",country:"РоÑÑиÑ"},{value:"SA",label:"ð¸ð¦ СаÑдовÑÐºÐ°Ñ ÐÑавиÑ",country:"СаÑдовÑÐºÐ°Ñ ÐÑавиÑ"},{value:"SE",label:"ð¸ðª ШвеÑиÑ",country:"ШвеÑиÑ"},{value:"SG",label:"ð¸ð¬ СингапÑÑ",country:"СингапÑÑ"},{value:"SI",label:"ð¸ð® СловениÑ",country:"СловениÑ"},{value:"SK",label:"ð¸ð° СловакиÑ",country:"СловакиÑ"},{value:"SY",label:"ð¸ð¾ СиÑиÑ",country:"СиÑиÑ"},{value:"TH",label:"ð¹ð Таиланд",country:"Таиланд"},{value:"TJ",label:"ð¹ð¯ ТаджикиÑÑан",country:"ТаджикиÑÑан"},{value:"TM",label:"ð¹ð² ТÑÑкмениÑÑан",country:"ТÑÑкмениÑÑан"},{value:"TN",label:"ð¹ð³ ТÑниÑ",country:"ТÑниÑ"},{value:"TR",label:"ð¹ð· ТÑÑÑиÑ",country:"ТÑÑÑиÑ"},{value:"TW",label:"ð¹ð¼ ТайванÑ",country:"ТайванÑ"},{value:"UA",label:"ðºð¦ УкÑаина",country:"УкÑаина"},{value:"US",label:"ðºð¸ СШÐ",country:"СШÐ"},{value:"UY",label:"ðºð¾ УÑÑгвай",country:"УÑÑгвай"},{value:"UZ",label:"ðºð¿ УзбекиÑÑан",country:"УзбекиÑÑан"},{value:"VE",label:"ð»ðª ÐенеÑÑÑла",country:"ÐенеÑÑÑла"},{value:"VN",label:"ð»ð³ ÐÑеÑнам",country:"ÐÑеÑнам"},{value:"YE",label:"ð¾ðª Ðемен",country:"Ðемен"},{value:"ZA",label:"ð¿ð¦ ЮÐÐ ",country:"ЮÐÐ "}];function ol(){const{token:a}=hs(),{hostingProviders:m,hostingProvidersLoading:S}=Zs(),[C,E]=x.useState([]),[v,L]=x.useState({totalServers:0,activeServers:0}),[W,H]=x.useState(!0),[p,B]=x.useState(!1),[k,M]=x.useState(null),[F,te]=x.useState(""),[ge,ue]=x.useState(null),[xe,G]=x.useState({}),[q,V]=x.useState(!1),[je,{open:pe,close:_}]=he(!1),[Z,{open:le,close:K}]=he(!1),[fe,{open:X,close:i}]=he(!1),o=Ke({initialValues:{name:"",countryCode:"",host:"",port:443,apiPort:9091,maxTcpConns:3,fakeTlsDomain:"google.com",sshHost:"",sshUser:"root",sshPort:22,sshPassword:"",access:"prime",expiresAt:null,skipInstall:!1,secret:"",apiHost:"",hostingProviderId:""},validate:{name:l=>l?null:"ÐведиÑе название",countryCode:l=>l?null:"ÐÑбеÑиÑе ÑÑÑанÑ",host:l=>l?null:"ÐведиÑе Ñ
оÑÑ",port:l=>!l||l<1||l>65535?"ÐевеÑнÑй поÑÑ":null,sshHost:(l,w)=>w.skipInstall||l?null:"ÐведиÑе SSH Ñ
оÑÑ",sshPassword:(l,w)=>w.skipInstall||l?null:"ÐведиÑе SSH паÑолÑ",secret:(l,w)=>w.skipInstall?l?Ls(l)?null:"Ðе ÑаÑпознано. ÐÑинимаÑÑÑÑ: tg://proxy?â¦, eeâ¦/dd⦠hex, или 32-ÑимволÑнÑй hex":"УкажиÑе Secret или tg://proxy ÑÑÑлкÑ":null}}),j=Ke({initialValues:{name:"",countryCode:"",host:"",port:443,apiPort:9091,maxTcpConns:3,fakeTlsDomain:"google.com",sshHost:"",sshUser:"root",sshPort:22,sshPassword:"",isActive:!1,access:"prime",expiresAt:null,hostingProviderId:""}}),h={Authorization:`Bearer ${a}`,"Content-Type":"application/json"},A=async()=>{try{H(!0);const[l,w]=await Promise.all([fetch(`${U}/api/admin/mtproxy/servers`,{headers:h}),fetch(`${U}/api/admin/mtproxy/stats`,{headers:h})]);l.ok&&E(await l.json()),w.ok&&L(await w.json())}catch(l){console.error("Error fetching MTProxy data:",l)}finally{H(!1)}};x.useEffect(()=>{A()},[a]);const de=async(l=!1)=>{try{V(!0);const w=await fetch(`${U}/api/admin/monitoring/server-health${l?"?force=1":""}`,{headers:h});if(w.ok){const P=await w.json();G(P&&P.mtproxy||{})}}catch(w){console.error("Error fetching MTProxy health:",w)}finally{V(!1)}};x.useEffect(()=>{de();const l=setInterval(()=>de(),6e4);return()=>clearInterval(l)},[a]);const Ce=l=>{const w=xe[String(l.id)];if(!w)return e.jsx(Qe,{label:q?"ÐÑовеÑкаâ¦":"ÐÐµÑ Ð´Ð°Ð½Ð½ÑÑ
",withArrow:!0,children:e.jsx(T,{color:"gray",variant:"light",size:"sm",children:"â"})});const P=w.online?`ÐÑвеÑаеÑ${w.latencyMs!=null?` · ${w.latencyMs} мÑ`:""} · пÑовеÑено ${Le(w.checkedAt).format("HH:mm:ss")}`:`ÐоÑÑ Ð½Ðµ оÑвеÑÐ°ÐµÑ Â· пÑовеÑено ${Le(w.checkedAt).format("HH:mm:ss")}`;return e.jsx(Qe,{label:P,withArrow:!0,children:e.jsx(T,{color:w.online?"teal":"red",variant:"dot",size:"sm",children:w.online?"Ðнлайн":"ÐÑлайн"})})},Te=async l=>{try{B(!0);const w=is.find(re=>re.value===l.countryCode),P=await fetch(`${U}/api/admin/mtproxy/servers`,{method:"POST",headers:h,body:JSON.stringify({...l,country:w?.country||l.countryCode})});if(P.ok)r.show({title:"УÑпеÑ
",message:"СеÑÐ²ÐµÑ Ñоздан",color:"green"}
5),_(),o.reset(),A();else{const re=await P.json();r.show({title:"ÐÑибка",message:re.message||"Ðе ÑдалоÑÑ ÑоздаÑÑ",color:"red"})}}catch{r.show({title:"ÐÑибка",message:"СеÑÐµÐ²Ð°Ñ Ð¾Ñибка",color:"red"})}finally{B(!1)}},ke=async l=>{if(k)try{B(!0);const w=is.find(Ge=>Ge.value===l.countryCode),P={...l};w&&(P.country=w.country),P.sshPassword||delete P.sshPassword,(await fetch(`${U}/api/admin/mtproxy/servers/${k.id}`,{method:"PUT",headers:h,body:JSON.stringify(P)})).ok&&(r.show({title:"УÑÐ¿ÐµÑ ",message:"СеÑÐ²ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»Ñн",color:"green"}),K(),A())}catch{r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸ÑÑ",color:"red"})}finally{B(!1)}},Ae=async l=>{if(!confirm("УдалиÑÑ ÑеÑвеÑ?"))return;const w=confirm(`УведомиÑÑ Ð¿Ð¾Ð»ÑзоваÑелей об Ñдалении ÑеÑвеÑа? 6 7OK â оÑпÑавиÑÑ Ñведомление заÑÑонÑÑÑм полÑзоваÑелÑм. 8ÐÑмена â ÑдалиÑÑ Ð±ÐµÐ· ÑведомлениÑ.`);try{await fetch(`${U}/api/admin/mtproxy/servers/${l}?notifyUsers=${w}`,{method:"DELETE",headers:h}),r.show({title:"Удалено",message:"СеÑÐ²ÐµÑ ÑдалÑн",color:"green"}),A()}catch{r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ ÑдалиÑÑ",color:"red"})}},Ne=async l=>{try{B(!0),r.show({title:"УÑÑановка",message:"УÑÑановка TeleMT наÑаÑа...",color:"blue",loading:!0,autoClose:!1,id:`install-${l}`});const P=await(await fetch(`${U}/api/admin/mtproxy/servers/${l}/install`,{method:"POST",headers:h})).json();r.hide(`install-${l}`),P.success?r.show({title:"УÑÐ¿ÐµÑ ",message:"TeleMT ÑÑÑановлен!",color:"green"}):r.show({title:"ÐÑибка ÑÑÑановки",message:"ÐÑовеÑÑÑе логи",color:"red"}),te(P.log||""),X(),A()}catch{r.hide(`install-${l}`),r.show({title:"ÐÑибка",message:"СеÑÐµÐ²Ð°Ñ Ð¾Ñибка",color:"red"})}finally{B(!1)}},be=async l=>{try{const P=await(await fetch(`${U}/api/admin/mtproxy/servers/${l}/status`,{headers:h})).json();G(re=>({...re,[String(l)]:{online:!!P.online,latencyMs:null,checkedAt:new Date().toISOString()}})),r.show({title:P.online?"Ðнлайн":"ÐÑÑлайн",message:P.online?"TeleMT ÑабоÑаеÑ":"TeleMT не запÑÑен",color:P.online?"green":"red"})}catch{r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ Ð¿ÑовеÑиÑÑ",color:"red"})}},Ue=async l=>{try{const P=await(await fetch(`${U}/api/admin/mtproxy/servers/${l}/restart`,{method:"POST",headers:h})).json();r.show({title:P.success?"ÐеÑезапÑÑен":"ÐÑибка",message:P.success?"TeleMT пеÑезапÑÑен":P.message,color:P.success?"green":"red"})}catch{r.show({title:"ÐÑибка",message:"СеÑÐµÐ²Ð°Ñ Ð¾Ñибка",color:"red"})}},N=l=>{M(l),j.setValues({name:l.name,countryCode:l.countryCode,host:l.host,port:l.port,apiPort:l.apiPort||9091,maxTcpConns:l.maxTcpConns||3,fakeTlsDomain:l.fakeTlsDomain,sshHost:l.sshHost,sshUser:l.sshUser,sshPort:l.sshPort,sshPassword:"",isActive:l.isActive,access:l.access||"prime",expiresAt:l.expiresAt?new Date(l.expiresAt):null,hostingProviderId:l.hostingProviderId||""}),le()},ee=(l,w)=>{const re={active:{color:"green",label:"ÐкÑивен"},installing:{color:"blue",label:"УÑÑановка..."},pending:{color:"yellow",label:"Ðжидание"},error:{color:"red",label:"ÐÑибка"}}[l]||{color:"gray",label:l};return e.jsx(T,{color:re.color,variant:"light",children:re.label})},oe=l=>{try{return String.fromCodePoint(...l.toUpperCase().split("").map(w=>127462+w.charCodeAt(0)-65))}catch{return"ð"}};return W?e.jsx(Gs,{}):e.jsxs(Y,{gap:"lg",children:[e.jsxs(g,{justify:"space-between",align:"flex-start",children:[e.jsxs(D,{children:[e.jsx(Ie,{order:3,children:"MTProxy СеÑвеÑÑ"}),e.jsx(c,{c:"dimmed",size:"sm",children:"Telegram пÑокÑи Ñ Ð¼Ð°ÑкиÑовкой (TeleMT)"})]}),e.jsxs(g,{children:[e.jsx(y,{variant:"light",color:"teal",leftSection:e.jsx(es,{size:18}),loading:q,onClick:()=>de(!0),children:"ÐÑовеÑиÑÑ Ð²Ñе"}),e.jsx(y,{variant:"light",leftSection:e.jsx(_e,{size:18}),onClick:A,children:"ÐбновиÑÑ"}),e.jsx(y,{leftSection:e.jsx(ze,{size:18}),onClick:pe,children:"ÐобавиÑÑ"})]})]}),e.jsxs(ns,{cols:{base:2,sm:2},children:[e.jsxs(Oe,{withBorder:!0,p:"md",radius:"md",children:[e.jsx(De,{size:"lg",radiu
8s:"md",variant:"light",color:"blue",children:e.jsx(ds,{size:20})}),e.jsxs(D,{mt:"sm",children:[e.jsx(c,{size:"xl",fw:700,children:v.totalServers}),e.jsx(c,{size:"xs",c:"dimmed",children:"ÐÑего ÑеÑвеÑов"})]})]}),e.jsxs(Oe,{withBorder:!0,p:"md",radius:"md",children:[e.jsx(De,{size:"lg",radius:"md",variant:"light",color:"green",children:e.jsx(Pe,{size:20})}),e.jsxs(D,{mt:"sm",children:[e.jsx(c,{size:"xl",fw:700,children:v.activeServers}),e.jsx(c,{size:"xs",c:"dimmed",children:"ÐкÑивнÑÑ
"})]})]})]}),e.jsx(me,{withBorder:!0,padding:0,children:e.jsxs(d,{striped:!0,highlightOnHover:!0,children:[e.jsx(d.Thead,{children:e.jsxs(d.Tr,{children:[e.jsx(d.Th,{children:"СеÑвеÑ"}),e.jsx(d.Th,{children:"ÐÑовайдеÑ"}),e.jsx(d.Th,{children:"ХоÑÑ / ÐоÑÑ"}),e.jsx(d.Th,{children:"Secret"}),e.jsx(d.Th,{children:"СеÑÑии"}),e.jsx(d.Th,{children:"СÑаÑÑÑ"}),e.jsx(d.Th,{children:"Ðивой ÑÑаÑÑÑ"}),e.jsx(d.Th,{children:"ÐÑÑекаеÑ"}),e.jsx(d.Th,{children:"ÐейÑÑвиÑ"})]})}),e.jsx(d.Tbody,{children:C.length===0?e.jsx(d.Tr,{children:e.jsx(d.Td,{colSpan:9,children:e.jsx(It,{py:"xl",children:e.jsxs(Y,{align:"center",gap:"xs",children:[e.jsx(Xe,{size:48,stroke:1,color:"var(--mantine-color-dimmed)"}),e.jsx(c,{c:"dimmed",children:"ÐÐµÑ MTProxy ÑеÑвеÑов"}),e.jsx(y,{size:"xs",onClick:pe,children:"ÐобавиÑÑ Ð¿ÐµÑвÑй"})]})})})}):C.map(l=>e.jsxs(d.Tr,{children:[e.jsx(d.Td,{children:e.jsxs(g,{gap:"sm",children:[e.jsx(Me,{countryCode:l.countryCode,flagEmoji:oe(l.countryCode),size:24}),e.jsxs(D,{children:[e.jsx(c,{size:"sm",fw:500,children:l.name}),e.jsx(c,{size:"xs",c:"dimmed",children:l.country})]})]})}),e.jsx(d.Td,{children:e.jsx(qs,{providerId:l.hostingProviderId,providers:m})}),e.jsx(d.Td,{children:e.jsxs(se,{children:[l.host,":",l.port]})}),e.jsx(d.Td,{children:l.secret?e.jsxs(g,{gap:"xs",children:[e.jsxs(se,{style:{maxWidth:120,overflow:"hidden",textOverflow:"ellipsis"},children:[l.secret.substring(0,16),"..."]}),e.jsx(os,{size:"xs",variant:"subtle",onClick:()=>{navigator.clipboard.writeText(l.secret||""),r.show({title:"СкопиÑовано",message:"Secret ÑкопиÑован",color:"green"})},children:e.jsx(Ve,{size:12})})]}):e.jsx(c,{size:"sm",c:"dimmed",children:"â"})}),e.jsx(d.Td,{children:e.jsx(T,{variant:"light",color:"gray",size:"sm",children:l.maxTcpConns||3})}),e.jsx(d.Td,{children:ee(l.status,l.isActive)}),e.jsx(d.Td,{children:Ce(l)}),e.jsx(d.Td,{children:l.expiresAt?(()=>{const w=new Date(l.expiresAt),P=w.getTime()<Date.now();return e.jsx(T,{color:P?"red":"gray",variant:"light",size:"sm",children:P?"ÐÑÑÑк":w.toLocaleDateString("ru-RU")})})():e.jsx(c,{size:"sm",c:"dimmed",children:"â"})}),e.jsx(d.Td,{children:e.jsxs(R,{shadow:"md",children:[e.jsx(R.Target,{children:e.jsx(os,{variant:"subtle",children:e.jsx(Xs,{size:16})})}),e.jsxs(R.Dropdown,{children:[l.status==="pending"||l.status==="error"?e.jsx(R.Item,{leftSection:e.jsx(Ts,{size:14}),onClick:()=>Ne(l.id),disabled:p,children:"УÑÑановиÑÑ TeleMT"}):null,e.jsx(R.Item,{leftSection:e.jsx(Qs,{size:14}),onClick:()=>be(l.id),children:"ÐÑовеÑиÑÑ ÑÑаÑÑÑ"}),l.status==="active"&&e.jsx(R.Item,{leftSection:e.jsx(Ps,{size:14}),onClick:()=>Ue(l.id),children:"ÐеÑезапÑÑÑиÑÑ"}),l.installLog&&e.jsx(R.Item,{leftSection:e.jsx(Is,{size:14}),onClick:()=>{te(l.installLog||""),X()},children:"Ðоги ÑÑÑановки"}),e.jsx(R.Item,{leftSection:e.jsx(Ze,{size:14}),onClick:()=>N(l),children:"РедакÑиÑоваÑÑ"}),l.secret&&e.jsx(R.Item,{leftSection:e.jsx(Xe,{size:14}),onClick:()=>{const w=`tg://proxy?server=${l.host}&port=${l.port}&secret=${l.secret}`;navigator.clipboard.writeText(w),r.show({title:"СкопиÑовано",message:"Telegram ÑÑÑлка",color:"green"})},children:"ÐопиÑоваÑÑ TG ÑÑÑлкÑ"}),e.jsx(R.Item,{leftSection:e.jsx(zt,{size:14}),onClick:()=>ue({protocol:"mtproxy",serverId:String(l.id),serverNameHint:l.name}),children:"УведомиÑÑ Ð¿Ð¾Ð»ÑзоваÑелей"}),e.jsx(R.Divider,{}),e.jsx(R.Item,{color:"red",leftSection:e.jsx(Je,{size:14}),onClick:()=>Ae(l.id),children:"УдалиÑÑ"})]})]})})]},l.id))})]})}),e.jsx(ce,{opened:je,onClose:_,title:"ÐобавиÑÑ MTProxy ÑеÑвеÑ",size:"lg",children:e.jsx("form",{onSubmit:o.onSubmit(Te),children:e.jsxs(Y,{gap:"md",children:[e.jsx(z,{label:"Ðазвание",...o.getInputProps("name")}
8),e.jsx(J,{label:"СÑÑана",placeholder:"ÐÑбеÑиÑе ÑÑÑанÑ",data:is,searchable:!0,...o.getInputProps("countryCode")}),e.jsx(cs,{providers:m,loading:S,value:o.values.hostingProviderId,onChange:l=>o.setFieldValue("hostingProviderId",l||"")}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"ХоÑÑ (IP/домен)",placeholder:"1.2.3.4",...o.getInputProps("host")}),e.jsx(ae,{label:"ÐоÑÑ",min:1,max:65535,...o.getInputProps("port")})]}),e.jsxs(g,{grow:!0,children:[e.jsx(ae,{label:"API поÑÑ (TeleMT)",min:1,max:65535,...o.getInputProps("apiPort")}),e.jsx(z,{label:"Fake-TLS домен",placeholder:"google.com",...o.getInputProps("fakeTlsDomain")})]}),e.jsx(ae,{label:"ÐакÑ. ÑеÑÑий на полÑзоваÑелÑ",description:"ÐгÑаниÑение одновÑеменнÑÑ
TCP-Ñоединений (анÑи-ÑеÑинг)",min:1,max:100,...o.getInputProps("maxTcpConns")}),e.jsx(J,{label:"ÐоÑÑÑп",data:[{value:"prime",label:"ð¥ ÐÐ»Ñ Ð¿ÑемиÑм полÑзоваÑелей"},{value:"free",label:"ð ÐÐ»Ñ Free полÑзоваÑелей"},{value:"all",label:"ð ÐÐ»Ñ Ð²ÑеÑ
полÑзоваÑелей"}],...o.getInputProps("access")}),e.jsx(Ye,{label:"ÐаÑа оконÑаниÑ",placeholder:"Ðез ÑÑока â оÑÑавÑÑе пÑÑÑÑм",description:"ÐоÑле ÑÑой даÑÑ ÑеÑÐ²ÐµÑ Ð¿ÑопадÑÑ Ñ Ð¿Ð¾Ð»ÑзоваÑелей",clearable:!0,minDate:new Date,...o.getInputProps("expiresAt")}),e.jsx(ne,{label:"ÐобавиÑÑ Ð²ÑÑÑнÑÑ (без ÑÑÑановки на ÑеÑвеÑ)",description:"TeleMT Ñже ÑÑÑановлен, либо ÑÑо ÑÑоÑонний MTProxy. ÐÐ°Ð½ÐµÐ»Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑаÑÑÑÑ Ð¿Ð¾ SSH â нÑжно ÑказаÑÑ Secret ÑеÑвеÑа.",checked:o.values.skipInstall,onChange:l=>o.setFieldValue("skipInstall",l.currentTarget.checked)}),o.values.skipInstall?e.jsxs(e.Fragment,{children:[e.jsx(z,{label:"Secret или tg-ÑÑÑлка",placeholder:"tg://proxy?server=1.2.3.4&port=443&secret=ee...",description:"ÐÑÑавÑÑе полнÑÑ ÑÑÑÐ»ÐºÑ Ð¸Ð· tg://proxy, fake-TLS ÑекÑÐµÑ (eeâ¦) или 32-ÑимволÑнÑй hex. ÐÐ¾Ð»Ñ Â«Ð¥Ð¾ÑÑ», «ÐоÑÑ» и «Fake-TLS домен» заполнÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки, еÑли вÑÑавлена ÑÑÑлка.",...o.getInputProps("secret"),onChange:l=>{const w=l.currentTarget.value;o.setFieldValue("secret",w);const P=Ls(w);P&&(P.host&&!o.values.host&&o.setFieldValue("host",P.host),P.port&&(!o.values.port||o.values.port===443)&&o.setFieldValue("port",P.port),P.fakeTlsDomain&&(!o.values.fakeTlsDomain||o.values.fakeTlsDomain==="google.com")&&o.setFieldValue("fakeTlsDomain",P.fakeTlsDomain))}}),e.jsx(z,{label:"API host (опÑионалÑно)",placeholder:"127.0.0.1",description:"ХоÑÑ TeleMT API. ÐаполнÑеÑÑÑ ÑолÑко еÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð¿ÑÑмой доÑÑÑп к API (Ð´Ð»Ñ Ð¸Ð½Ð´Ð¸Ð²Ð¸Ð´ÑалÑнÑÑ
клÑÑей). ÐÐ»Ñ ÐºÑпленнÑÑ
Ñ ÑÑоÑоннего ÑеÑвиÑа пÑокÑи оÑÑавÑÑе пÑÑÑÑм â вÑе полÑзоваÑели полÑÑÐ°Ñ Ð¾Ð±ÑÑÑ ÑÑÑлкÑ.",...o.getInputProps("apiHost")})]}):e.jsxs(e.Fragment,{children:[e.jsx(Ie,{order:5,mt:"sm",children:"SSH доÑÑÑп"}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"SSH Ñ
оÑÑ",placeholder:"1.2.3.4",...o.getInputProps("sshHost")}),e.jsx(ae,{label:"SSH поÑÑ",min:1,max:65535,...o.getInputProps("sshPort")})]}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"SSH полÑзоваÑелÑ",...o.getInputProps("sshUser")}),e.jsx(z,{label:"SSH паÑолÑ",type:"password",...o.getInputProps("sshPassword")})]})]}),e.jsxs(g,{justify:"flex-end",children:[e.jsx(y,{variant:"light",onClick:_,children:"ÐÑмена"}),e.jsx(y,{type:"submit",loading:p,children:"СоздаÑÑ"})]})]})})}),e.jsx(ce,{opened:Z,onClose:K,title:"РедакÑиÑоваÑÑ MTProxy ÑеÑвеÑ",size:"lg",children:e.jsx("form",{onSubmit:j.onSubmit(ke),children:e.jsxs(Y,{gap:"md",children:[e.jsx(z,{label:"Ðазвание",...j.getInputProps("name")}),e.jsx(J,{label:"СÑÑана",data:is,searchable:!0,...j.getInputProps("countryCode")}),e.jsx(cs,{providers:m,loading:S,value:j.values.hostingProviderId,onChange:l=>j.setFieldValue("hostingProviderId",l||"")}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"ХоÑÑ (IP/домен)",...j.getInputProps("host")}),e.jsx(ae,{label:"ÐоÑÑ",min:1,max:65535,...j.getInputProps("port")})]}),e.jsxs(g,{grow:!0,children:[e.jsx(ae,{label:"API поÑÑ (TeleMT)",min:1,max:65535,...j.getInputProps("apiPort")}),e.jsx(z,{label:"Fake-TLS домен",...j.getInputProps("fakeTlsDomain")})]}),e.jsx(ae,{label:"ÐакÑ. ÑеÑÑий на полÑзоваÑелÑ",description:"ÐгÑаниÑение одновÑеменнÑÑ
TCP-Ñоединений (анÑи-ÑеÑинг)",min:1,max:100,...j.getInputProps("maxTcpConns")}),e.jsx(J,{label:"ÐоÑÑÑп",data:[{value:"prime",label:"ð¥ Ðл
8Ñ Ð¿ÑемиÑм полÑзоваÑелей"},{value:"free",label:"ð ÐÐ»Ñ Free полÑзоваÑелей"},{value:"all",label:"ð ÐÐ»Ñ Ð²ÑеÑ
полÑзоваÑелей"}],...j.getInputProps("access")}),e.jsx(Ye,{label:"ÐаÑа оконÑаниÑ",placeholder:"Ðез ÑÑока â оÑÑавÑÑе пÑÑÑÑм",description:"ÐоÑле ÑÑой даÑÑ ÑеÑÐ²ÐµÑ Ð¿ÑопадÑÑ Ñ Ð¿Ð¾Ð»ÑзоваÑелей",clearable:!0,...j.getInputProps("expiresAt")}),e.jsx(ne,{label:"ÐкÑивен",...j.getInputProps("isActive",{type:"checkbox"})}),e.jsx(Ie,{order:5,mt:"sm",children:"SSH доÑÑÑп"}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"SSH Ñ
оÑÑ",...j.getInputProps("sshHost")}),e.jsx(ae,{label:"SSH поÑÑ",min:1,max:65535,...j.getInputProps("sshPort")})]}),e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"SSH полÑзоваÑелÑ",...j.getInputProps("sshUser")}),e.jsx(z,{label:"SSH паÑÐ¾Ð»Ñ (оÑÑавÑÑе пÑÑÑÑм ÑÑÐ¾Ð±Ñ Ð½Ðµ менÑÑÑ)",type:"password",...j.getInputProps("sshPassword")})]}),e.jsxs(g,{justify:"flex-end",children:[e.jsx(y,{variant:"light",onClick:K,children:"ÐÑмена"}),e.jsx(y,{type:"submit",loading:p,children:"СоÑ
ÑаниÑÑ"})]})]})})}),e.jsx(ce,{opened:fe,onClose:i,title:"Ðоги ÑÑÑановки",size:"xl",children:e.jsx(se,{block:!0,style:{maxHeight:400,overflow:"auto",whiteSpace:"pre-wrap",fontSize:12},children:F||"ÐÐµÑ Ð»Ð¾Ð³Ð¾Ð²"})}),e.jsx(Ct,{target:ge,onClose:()=>ue(null)})]})}function Hl(){const{token:a}=hs(),[m,S]=x.useState("proxies"),[C,E]=x.useState([]),[v,L]=x.useState({total:0,active:0,countriesCount:0}),[W,H]=x.useState(""),[p,B]=x.useState(null),[k,M]=x.useState(!0),[F,te]=x.useState(!1),[ge,ue]=x.useState("active"),[xe,G]=x.useState({}),[q,V]=x.useState(!1),[je,pe]=x.useState(null),[_,Z]=x.useState(new Set),[le,K]=x.useState(!1),[fe,X]=x.useState(!1),[i,o]=x.useState(!1),[j,h]=x.useState(null),[A,de]=x.useState(""),[Ce,Te]=x.useState("EOFVPN"),[ke,Ae]=x.useState(!1),[Ne,be]=x.useState(!1),[Ue,N]=x.useState(!1),[ee,{open:oe,close:l}]=he(!1),[w,{open:P,close:re}]=he(!1),[Ge,{open:us,close:We}]=he(!1),[xs,{open:ps,close:ss}]=he(!1),[ms,{open:gs,close:js}]=he(!1),f=Ke({initialValues:{userId:"",country:"",ip:"",httpPort:1506,socksPort:11506,login:"",password:"",access:"prime-public",expiresAt:null,isActive:!0,forWhatsApp:!1},validate:{country:s=>s?null:"ÐÑбеÑиÑе ÑÑÑанÑ",ip:s=>!s||!s.trim()?"ÐведиÑе IP-адÑÐµÑ Ð¸Ð»Ð¸ домен":il(s)?null:"ÐевеÑнÑй ÑоÑмаÑ: нÑжен IP-адÑÐµÑ Ð¸Ð»Ð¸ домен",httpPort:s=>!s||s<1||s>65535?"ÐевеÑнÑй поÑÑ":null,socksPort:s=>!s||s<1||s>65535?"ÐевеÑнÑй поÑÑ":null,login:(s,n)=>!n.forWhatsApp&&!s?"ÐведиÑе логин":null,password:(s,n)=>!n.forWhatsApp&&!s?"ÐведиÑе паÑолÑ":null,userId:(s,n)=>n.access==="personal"&&!s?"ÐÑбеÑиÑе полÑзоваÑелÑ":null}}),[ts,t]=x.useState([]),[u,$]=x.useState(!1),[O,ie]=x.useState("");x.useEffect(()=>{const s=O.trim();if(s.length<2){t(I=>I.filter(ye=>ye.value===f.values.userId));return}let n=!1;$(!0);const b=setTimeout(async()=>{try{const I=await fetch(`${U}/api/admin/users?limit=20&search=${encodeURIComponent(s)}`,{headers:{Authorization:`Bearer ${a}`}});if(!I.ok)throw new Error("search failed");const ye=await I.json();if(n)return;const yt=(Array.isArray(ye?.users)?ye.users:[]).map(He=>{const ys=He.email||"",ls=He.username||He.login||"",As=He.telegramUsername?` · @${He.telegramUsername}`:"",wt=ys?`${ys}${ls?` (${ls})`:""}${As}`:`${ls||`#${He.id}`}${As}`;return{value:String(He.id),label:wt,email:ys,username:ls}});t(yt)}catch{n||t([])}finally{n||$(!1)}},250);return()=>{n=!0,clearTimeout(b)}},[O,a]);const ve=async()=>{try{M(!0);const s={Authorization:`Bearer ${a}`},[n,b]=await Promise.all([fetch(`${U}/api/admin/proxies?limit=100`,{headers:s}),fetch(`${U}/api/admin/proxies/stats`,{headers:s})]);if(n.ok){const I=await n.json();E(I.proxies||[])}if(b.ok){const I=await b.json();L(I)}}catch(s){console.error("Error fetching proxies:",s),r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ Ð´Ð°Ð½Ð½Ñе",color:"red"})}finally{M(!1)}};x.useEffect(()=>{ve()},[a]);const Fe=async(s=!1)=>{try{V(!0);const n=await fetch(`${U}/api/admin/proxies/health${s?"?force=1":""}`,{headers:{Authorization:`Bearer ${a}`}});if(n.ok){const b=await n.json();G(b||{})}}catch(n){console.error("Error fetching proxy health:",n)}finally{V(!1)}};x.useEffect(()=>{if(m!=="proxies")return;Fe();const s=setInterval(()=>Fe(),6e4);return()=>clearInterval(s)},[a,m]);const st=async s=>{try{pe(s.id);const n=await fetch(`${U}/api/admin/proxies/${s.id}/health-check`,{method:"POST",headers:{Authorization:`Bearer ${a}`}});if(n.ok){const b=await n.json();G(I=>({...I,[s.id]:b})),r.show({title:b.online?"Ðнлайн":"ÐÑлайн",message:b.online?`ÐÑокÑи оÑвеÑаеÑ${b.latencyMs!=null?` · ${b.latencyMs} мÑ`:""}`:"ÐÑокÑи не оÑвеÑÐ°ÐµÑ â ÑÑÐ¾Ð¸Ñ Ð·Ð°Ð¼ÐµÐ½Ð¸ÑÑ",color:b.online?"green":"red"})}else throw new Error("check failed")}catch{r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ Ð¿ÑовеÑиÑÑ Ð¿ÑокÑи",color:"red"})}finally{pe(null)}};x.useEffect(()=>{m==="proxies"&&(async()=>{try{const s=await fetch(`${U}/api/admin/proxies/settings`,{headers:{Authorization:`Bearer ${a}`}});if(s.ok){const n=await s.json();X(!!n.hideOfflineFromUsers)}}catch{}})()},[a,m]);const tt=async s=>{o(!0),X(s);try{const n=await fetch(`${U}/api/admin/proxies/settings`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({hideOfflineFromUsers:s})});if(!n.ok)throw new Error("save failed");const b=await n.json();X(!!b.hideOfflineFromUsers),r.show({title:"СоÑ
Ñанено",message:s?"ÐÑÑлайн-пÑокÑи ÑкÑÑÑÑ Ð¾Ñ Ð¿Ð¾Ð»ÑзоваÑелей":"ÐолÑзоваÑели Ñнова видÑÑ Ð²Ñе пÑокÑи",color:"green"})}catch{X(!s),r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ ÑоÑ
ÑаниÑÑ Ð½Ð°ÑÑÑойкÑ",color:"red"})}finally{o(!1)}},lt=async()=>{try{const s=await fetch(`${U}/api/admin/proxies/proxyline`,{headers:{Authorization:`Bearer ${a}`}});if(s.ok){const n=await s.json();h(n),Te(n.tag||"EOFVPN"),Ae(n.enabled)}}catch{}},at=()=>{de(""),ps(),lt()},zs=async()=>{const s={enabled:ke,tag:Ce};A.trim()&&(s.apiKey=A.trim());const n=await fetch(`${U}/api/admin/proxies/proxyline`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify(s)});if(!n.ok)return!1;const b=await n.json();return h(b),de(""),!0},rt=async()=>{be(!0);try{if(!await zs())throw new Error("save failed");r.show({title:"СоÑ
Ñанено",message:"ÐаÑÑÑойки ProxyLine обновленÑ",color:"green"})}catch{r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ ÑоÑ
ÑаниÑÑ Ð½Ð°ÑÑÑойки",color:"red"})}finally{be(!1)}},it=async()=>{N(!0);try{await zs();const s=await fetch(`${U}/api/admin/proxies/proxyline/sync`,{method:"POST",headers:{Authorization:`Bearer ${a}`}}),n=await s.json();if(!s.ok)throw new Error(n?.message||"sync failed");h(n.status);const b=n.result?.proxies,I=n.result?.mtproxy;r.show({title:"СинÑ
ÑонизаÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑена",message:`ÐÑокÑи: найдено ${b?.matched??0} (+${b?.imported??0} ~${b?.updated??0} -${b?.deactivated??0}). MTProxy: акÑивно ${I?.active??0} (+${I?.imported??0} ~${I?.updated??0} -${I?.deactivated??0}).`,color:"green"}),ve(),Fe(!0)}catch(s){r.show({title:"ÐÑибка ÑинÑ
ÑонизаÑии",message:s?.message||"Ðе ÑдалоÑÑ ÑинÑ
ÑонизиÑоваÑÑ",color:"red"})}finally{N(!1)}},nt=s=>{Z(n=>{const b=new Set(n);return b.has(s)?b.delete(s):b.add(s),b})},fs=()=>Z(new Set),ot=async()=>{const s=Array.from(_);if(s.length!==0){K(!0);try{const n=await fetch(`${U}/api/admin/proxies/bulk/disable`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({ids:s})});if(!n.ok)throw new Error("bulk disable failed");const b=await n.json();r.show({title:"ÐоÑово",message:`ÐÑклÑÑено пÑокÑи: ${b.count}`,color:"orange"}),fs(),await ve()}catch{r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ Ð¾ÑклÑÑиÑÑ Ð²ÑбÑаннÑе",color:"red"})}finally{K(!1)}}},ct=async()=>{const s=Array.from(_);if(s.length!==0&&confirm(`УдалиÑÑ Ð²ÑбÑаннÑе пÑокÑи (${s.length})? ÐейÑÑвие необÑаÑимо.`)){K(!0);try{const n=await fetch(`${U}/api/admin/proxies/bulk/delete`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({ids:s})});if(!n.ok)throw new Error("bulk delete failed");const b=await n.json();r.show({title:"Удалено",message:`Удалено пÑокÑи: ${b.count}`,color:"red"}),fs(),await ve()}catch{r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ ÑдалиÑÑ Ð²ÑбÑаннÑе",color:"red"})}finally{K(!1)}}},dt=s=>{if(s.forWhatsApp)return e.jsx(c,{size:"sm",c:"dimmed",children:"â"});const n=xe[s.id];if(!n)return e.jsx(Qe,{label:q?"ÐÑовеÑкаâ¦":"ÐÐµÑ Ð´Ð°Ð½Ð½ÑÑ
",withArrow:!0,children:e.jsx(T,{color:"gray",variant:"light",size:"sm",children:"â"})});const b=n.online?`ÐÑвеÑаеÑ${n.latencyMs!=null?` · ${n.latencyMs} мÑ`:""} · пÑовеÑено ${Le(n.checkedAt).format("HH:mm:ss")}`:`Ðе оÑвеÑÐ°ÐµÑ Â· пÑовеÑено ${Le(n.checkedAt).format("HH:mm:ss")}`;return e.jsx(Qe,{label:b,withArrow:!0,children:e.jsx(T,{color:n.online?"teal":"red",variant:"dot",size:"sm",children:n.online?"Ðнлайн":"ÐÑлайн"})})},$e=s=>s.expiresAt?new Date(s.expiresAt)<new Date:!1,Cs=C.filter($e).length,Ee=C.filter(s=>{const n=s.ip.includes(W)||s.country.toLowerCase().includes(W.toLowerCase())||s.login.toLowerCase().includes(W.toLowerCase())||s.username&&s.username.toLowerCase().includes(W.toLowerCase());return ge==="expired"?n&&$e(s):n&&!$e(s)}),bs=Ee.length>0&&Ee.every(s=>_.has(s.id)),ht=Ee.some(s=>_.has(s.id)),ut=()=>{Z(s=>{const n=new Set(s);return bs?Ee.forEach(b=>
8n.delete(b.id)):Ee.forEach(b=>n.add(b.id)),n})},xt=async s=>{te(!0);try{let n=null;if(s.expiresAt)try{const I=s.expiresAt instanceof Date?s.expiresAt:new Date(s.expiresAt);isNaN(I.getTime())||(n=I.toISOString())}catch{n=null}const b=await fetch(`${U}/api/admin/proxies`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({country:s.country,ip:s.ip.trim(),httpPort:s.httpPort,socksPort:s.socksPort,login:s.login,password:s.password,access:s.access,userId:s.userId||void 0,expiresAt:n,isActive:s.isActive,forWhatsApp:s.forWhatsApp})});if(b.ok){const I=await b.json();E([I,...C]),L({...v,total:v.total+1,active:s.isActive?v.active+1:v.active}),r.show({title:"ÐÑокÑи добавлен",message:`${I.country} - ${I.ip}`,color:"green",icon:e.jsx(Pe,{size:16})}),f.reset(),l()}else{const I=await b.json().catch(()=>({}));throw new Error(I.message||"Failed to create proxy")}}catch(n){r.show({title:"ÐÑибка",message:n?.message||"Ðе ÑдалоÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¿ÑокÑи",color:"red"})}finally{te(!1)}},pt=async s=>{if(p){te(!0);try{let n=null;if(s.expiresAt)try{const I=s.expiresAt instanceof Date?s.expiresAt:new Date(s.expiresAt);isNaN(I.getTime())||(n=I.toISOString())}catch{n=null}const b=await fetch(`${U}/api/admin/proxies/${p.id}`,{method:"PATCH",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({country:s.country,ip:s.ip.trim(),httpPort:s.httpPort,socksPort:s.socksPort,login:s.login,password:s.password,access:s.access,userId:s.userId||null,expiresAt:n,isActive:s.isActive,forWhatsApp:s.forWhatsApp})});if(b.ok){const I=await b.json();E(C.map(ye=>ye.id===p.id?I:ye)),r.show({title:"ÐÑокÑи обновлÑн",message:`${I.country} - ${I.ip}`,color:"green",icon:e.jsx(Pe,{size:16})}),re()}else{const I=await b.json().catch(()=>({}));throw new Error(I.message||"Failed to update proxy")}}catch(n){r.show({title:"ÐÑибка",message:n.message||"Ðе ÑдалоÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸ÑÑ Ð¿ÑокÑи",color:"red"})}finally{te(!1)}}},mt=async s=>{try{(await fetch(`${U}/api/admin/proxies/${s.id}`,{method:"DELETE",headers:{Authorization:`Bearer ${a}`}})).ok&&(E(C.filter(b=>b.id!==s.id)),L({...v,total:v.total-1,active:s.isActive?v.active-1:v.active}),r.show({title:"ÐÑокÑи ÑдалÑн",message:`${s.country} - ${s.ip}`,color:"red"}))}catch{r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ ÑдалиÑÑ Ð¿ÑокÑи",color:"red"})}},gt=async s=>{try{const n=await fetch(`${U}/api/admin/proxies/${s.id}/toggle`,{method:"PATCH",headers:{Authorization:`Bearer ${a}`}});if(n.ok){const b=await n.json();E(C.map(I=>I.id===s.id?b:I)),L({...v,active:b.isActive?v.active+1:v.active-1}),r.show({title:b.isActive?"ÐÑокÑи вклÑÑÑн":"ÐÑокÑи оÑклÑÑÑн",message:`${s.country} - ${s.ip}`,color:b.isActive?"green":"orange"})}}catch{r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÑÑаÑÑÑ",color:"red"})}},jt=async s=>{try{const n=new Date;n.setDate(n.getDate()-1);const b=await fetch(`${U}/api/admin/proxies/${s.id}`,{method:"PATCH",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({expiresAt:n.toISOString(),isActive:!1})});if(b.ok){const I=await b.json();E(C.map(ye=>ye.id===s.id?I:ye)),L({...v,active:s.isActive?v.active-1:v.active}),r.show({title:"ÐÑокÑи помеÑен как иÑÑÑкÑий",message:`${s.country} - ${s.ip}`,color:"orange",icon:e.jsx(rs,{size:16})})}}catch{r.show({title:"ÐÑибка",message:"Ðе ÑдалоÑÑ Ð¿Ð¾Ð¼ÐµÑиÑÑ ÐºÐ°Ðº иÑÑÑкÑий",color:"red"})}},ks=s=>{if(B(s),f.setValues({userId:s.userId||"",country:s.countryFlag,ip:s.ip,httpPort:s.httpPort,socksPort:s.socksPort,login:s.login,password:s.password,access:s.access,expiresAt:s.expiresAt?new Date(s.expiresAt):null,isActive:s.isActive,forWhatsApp:s.forWhatsApp||!1}),s.userId){const n=s.username||"",b=s.userEmail||"",I=b?`${b}${n?` (${n})`:""}`:n||`#${s.userId}`;t([{value:s.userId,label:I,email:b,username:n}])}else t([]);ie(""),P()},ft=s=>{B(s),us()},bt=()=>{f.reset(),t([]),ie(""),oe()};return k&&m==="proxies"?e.jsx(Gs,{}):e.jsxs(Y,{gap:"lg",children:[e.jsx(Se,{value:m,onChange:S,children:e.jsxs(Se.List,{children:[e.jsx(Se.Tab,{value:"proxies",leftSection:e.jsx(Re,{size:16}),children:"ÐÑиваÑнÑе пÑокÑи"}),e.jsx(Se.Tab,{value:"mtproxy",leftSection:e.jsx(Xe,{size:16}),children:"MTProxy Telegram"}),e.jsx(Se.Tab,{value:"webproxy",leftSection:e.jsx(Re,{size:16}),children:"WEB Proxy Telegram"})]})}),m==="mtproxy"&&e.jsx(ol,{}),m==="webproxy"&&e.jsx(Qt,{}),m==="proxies"&&e.jsxs(e.Fragment,{children:[e.jsxs(g,{justify:"space-between",align:"flex-start",children:[e.jsxs(D,{children:[e.jsx(Ie,{order:2,children:"ÐÑиваÑнÑе пÑокÑи"}),e.jsx(c,{c:"dimmed",size:"sm",children:"УпÑавление пÑокÑи-ÑеÑвеÑами полÑзоваÑелей"})]}),e.jsxs(g,{children:[e.jsx(y,{variant:"light",color:"teal",leftSection:e.jsx(es,{size:18}),loading:q,onClick:()=>Fe(!0),children:"ÐÑовеÑиÑÑ Ð²Ñе"}),e.jsx(y,{variant:"light",leftSection:e.jsx(_e,{size:18}),onClick:ve,children:"ÐбновиÑÑ"}),e.jsx(y,{variant:"light",color:"grape",leftSection:e.jsx(Es,{size:18}),onClick:at,children:"ProxyLine"}),e.jsx(y,{variant:"light",color:"cyan",leftSection:e.jsx(Tt,{size:18}),onClick:gs,children:"ФидÑ"}),e.jsx(y,{leftSection:e.jsx(ze,{size:18}),onClick:bt,children:"ÐобавиÑÑ"})]})]}),e.jsx(tl,{opened:ms,onClose:js,onChanged:ve}),e.jsx(ce,{opened:xs,onClose:ss,title:"СинÑ
ÑонизаÑÐ¸Ñ Ñ ProxyLine",size:"lg",children:e.jsxs(Y,{children:[e.jsx(c,{size:"sm",c:"dimmed",children:"ÐвÑомаÑиÑеÑки подÑÑÐ³Ð¸Ð²Ð°ÐµÑ Ð¿ÑокÑи из панели Proxyline и показÑÐ²Ð°ÐµÑ Ð¸Ñ
полÑзоваÑелÑм. HTTP/SOCKS-пÑокÑи импоÑÑиÑÑÑÑÑÑ ÑолÑко Ñ ÑказаннÑм Ñегом; MTProxy импоÑÑиÑÑÑÑÑÑ Ð²Ñе акÑивнÑе (Ñ Ð½Ð¸Ñ
в API Ð½ÐµÑ Ñегов). ÐÑокÑи, добавленнÑе вÑÑÑнÑÑ, ÑинÑ
ÑонизаÑÐ¸Ñ Ð½Ðµ ÑÑогаеÑ."}),e.jsx(ne,{checked:ke,onChange:s=>Ae(s.currentTarget.checked),label:"ÐвÑоÑинÑ
ÑонизаÑÐ¸Ñ (Ñаз в ÑаÑ)",description:"ÐаждÑй ÑÐ°Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÐµÑ ÑпиÑок из Proxyline авÑомаÑиÑеÑки."}),e.jsx(z,{label:"Тег в Proxyline",description:"ÐмпоÑÑиÑÑÑÑÑÑ ÑолÑко пÑокÑи, помеÑеннÑе ÑÑим Ñегом в панели Proxyline.",placeholder:"EOFVPN",value:Ce,onChange:s=>Te(s.currentTarget.value)}),e.jsx(qe,{label:"API-клÑÑ Proxyline",description:j?.hasApiKey?"ÐлÑÑ ÑоÑ
ÑанÑн. ÐÑÑавÑÑе поле пÑÑÑÑм, ÑÑÐ¾Ð±Ñ Ð½Ðµ менÑÑÑ ÐµÐ³Ð¾.":"ÐлÑÑ ÐµÑÑ Ð½Ðµ задан. ÐÑÑавÑÑе API-клÑÑ Ð¸Ð· панели Proxyline.",placeholder:j?.hasApiKey?"â¢â¢â¢â¢â¢â¢â¢â¢ (ÑоÑ
ÑанÑн)":"ÐÑÑавÑÑе API-клÑÑ",value:A,onChange:s=>de(s.currentTarget.value)}
8),j&&e.jsxs(Oe,{withBorder:!0,p:"sm",radius:"md",children:[e.jsxs(g,{justify:"space-between",children:[e.jsx(c,{size:"sm",children:"ÐÑокÑи (акÑивнÑÑ
/ вÑего)"}),e.jsxs(T,{color:"grape",variant:"light",children:[j.active," / ",j.total]})]}),e.jsxs(g,{justify:"space-between",mt:6,children:[e.jsx(c,{size:"sm",children:"MTProxy (акÑивнÑÑ
/ вÑего)"}),e.jsxs(T,{color:"grape",variant:"light",children:[j.mtActive," / ",j.mtTotal]})]}),e.jsxs(g,{justify:"space-between",mt:6,children:[e.jsx(c,{size:"sm",children:"ÐоÑледнÑÑ ÑинÑ
ÑонизаÑиÑ"}),e.jsx(c,{size:"sm",c:"dimmed",children:j.lastSyncAt?Le(j.lastSyncAt).format("DD.MM.YYYY HH:mm"):"â"})]}),j.lastResult&&e.jsx(c,{size:"xs",c:"dimmed",mt:6,children:j.lastResult})]}),e.jsxs(g,{justify:"space-between",mt:"md",children:[e.jsx(y,{variant:"light",color:"teal",leftSection:e.jsx(Es,{size:16}),loading:Ue,disabled:!j?.hasApiKey&&!A.trim(),onClick:it,children:"СинÑ
ÑонизиÑоваÑÑ ÑейÑаÑ"}),e.jsxs(g,{children:[e.jsx(y,{variant:"default",onClick:ss,children:"ÐакÑÑÑÑ"}),e.jsx(y,{loading:Ne,onClick:rt,children:"СоÑ
ÑаниÑÑ"})]})]})]})}),e.jsxs(ns,{cols:{base:2,sm:3},children:[e.jsxs(Oe,{withBorder:!0,p:"md",radius:"md",className:vs.statCard,children:[e.jsx(De,{size:"lg",radius:"md",variant:"light",color:"blue",children:e.jsx(Re,{size:20})}),e.jsxs(D,{mt:"sm",children:[e.jsx(c,{size:"xl",fw:700,children:v.total}),e.jsx(c,{size:"xs",c:"dimmed",children:"ÐÑего пÑокÑи"})]})]}),e.jsxs(Oe,{withBorder:!0,p:"md",radius:"md",className:vs.statCard,children:[e.jsx(De,{size:"lg",radius:"md",variant:"light",color:"green",children:e.jsx(Pe,{size:20})}),e.jsxs(D,{mt:"sm",children:[e.jsx(c,{size:"xl",fw:700,children:v.active}),e.jsx(c,{size:"xs",c:"dimmed",children:"ÐкÑивнÑÑ
"})]})]}),e.jsxs(Oe,{withBorder:!0,p:"md",radius:"md",className:vs.statCard,children:[e.jsx(De,{size:"lg",radius:"md",variant:"light",color:"violet",children:e.jsx(ds,{size:20})}),e.jsxs(D,{mt:"sm",children:[e.jsx(c,{size:"xl",fw:700,children:v.countriesCount}),e.jsx(c,{size:"xs",c:"dimmed",children:"СÑÑан"})]})]})]}),e.jsx(me,{withBorder:!0,padding:"md",children:e.jsxs(Y,{gap:"md",children:[e.jsx(Se,{value:ge,onChange:ue,children:e.jsxs(Se.List,{children:[e.jsxs(Se.Tab,{value:"active",leftSection:e.jsx(Pe,{size:14}),children:["ÐкÑивнÑе (",v.total-Cs,")"]}),e.jsxs(Se.Tab,{value:"expired",leftSection:e.jsx(rs,{size:14}),color:"red",children:["ÐÑÑекÑие (",Cs,")"]})]})}),e.jsx(z,{placeholder:"ÐоиÑк по IP, ÑÑÑане, логинÑ...",leftSection:e.jsx($t,{size:16}),value:W,onChange:s=>H(s.target.value)}),e.jsx(ne,{checked:fe,disabled:i,onChange:s=>tt(s.currentTarget.checked),label:"СкÑÑваÑÑ Ð¾ÑÑлайн-пÑокÑи Ð¾Ñ Ð¿Ð¾Ð»ÑзоваÑелей",description:"ÐолÑзоваÑели на /proxies и в ÑаÑÑиÑении бÑдÑÑ Ð²Ð¸Ð´ÐµÑÑ ÑолÑко пÑокÑи, коÑоÑÑе ÑейÑÐ°Ñ Ð¾ÑвеÑаÑÑ. СÑаÑÑÑ Ð±ÐµÑÑÑÑÑ Ð¸Ð· живой пÑовеÑки."})]})}),_.size>
80&&e.jsx(Oe,{withBorder:!0,p:"sm",radius:"md",children:e.jsxs(g,{justify:"space-between",children:[e.jsxs(c,{size:"sm",fw:500,children:["ÐÑбÑано: ",_.size]}),e.jsxs(g,{gap:"xs",children:[e.jsx(y,{size:"xs",variant:"light",color:"orange",leftSection:e.jsx(rs,{size:14}),loading:le,onClick:ot,children:"ÐÑклÑÑиÑÑ Ð²ÑбÑаннÑе"}),e.jsx(y,{size:"xs",variant:"light",color:"red",leftSection:e.jsx(Je,{size:14}),loading:le,onClick:ct,children:"УдалиÑÑ Ð²ÑбÑаннÑе"}),e.jsx(y,{size:"xs",variant:"subtle",onClick:fs,disabled:le,children:"СнÑÑÑ Ð²Ñделение"})]})]})}),e.jsxs(me,{withBorder:!0,padding:0,children:[e.jsxs(d,{striped:!0,highlightOnHover:!0,children:[e.jsx(d.Thead,{children:e.jsxs(d.Tr,{children:[e.jsx(d.Th,{style:{width:40},children:e.jsx(Hs,{"aria-label":"ÐÑбÑаÑÑ Ð²Ñе",checked:bs,indeterminate:!bs&&ht,onChange:ut})}),e.jsx(d.Th,{children:"СÑÑана"}),e.jsx(d.Th,{children:"IP / ÐоÑÑÑ"}),e.jsx(d.Th,{children:"ÐолÑзоваÑелÑ"}),e.jsx(d.Th,{children:"Ðогин"}),e.jsx(d.Th,{children:"ÐÑÑекаеÑ"}),e.jsx(d.Th,{children:"СÑаÑÑÑ"}),e.jsx(d.Th,{children:"Ðивой ÑÑаÑÑÑ"}),e.jsx(d.Th,{})]})}),e.jsx(d.Tbody,{children:Ee.map(s=>e.jsxs(d.Tr,{style:{opacity:s.isActive?1:.6},children:[e.jsx(d.Td,{children:e.jsx(Hs,{"aria-label":"ÐÑбÑаÑÑ Ð¿ÑокÑи",checked:_.has(s.id),onChange:()=>nt(s.id)})}),e.jsx(d.Td,{children:e.jsxs(g,{gap:"xs",children:[e.jsx(Me,{flagEmoji:s.countryFlag,size:24}),e.jsx(c,{size:"sm",children:s.country}),s.forWhatsApp&&e.jsx(T,{size:"xs",color:"green",variant:"light",children:"WhatsApp"}),s.source==="proxyline"&&e.jsx(T,{size:"xs",color:"grape",variant:"light",children:"Proxyline"})]})}),e.jsx(d.Td,{children:e.jsxs(D,{children:[e.jsx(se,{children:s.ip}),e.jsxs(c,{size:"xs",c:"dimmed",children:["HTTP: ",s.httpPort," | SOCKS5: ",s.socksPort]})]})}),e.jsx(d.Td,{children:e.jsx(g,{gap:"xs",children:s.access==="personal"&&s.userId?e.jsxs(e.Fragment,{children:[e.jsx(T,{size:"sm",color:"grape",variant:"light",leftSection:e.jsx(as,{size:10}),children:"ÐеÑÑоналÑнÑй"}),e.jsx(c,{size:"xs",c:"dimmed",children:s.userEmail||s.username||`#${s.userId}`})]}):s.access==="private"&&s.userId?e.jsxs(e.Fragment,{children:[e.jsx(Bs,{size:"xs",radius:"xl",color:"brand",children:(s.username||"U")[0].toUpperCase()}),e.jsx(c,{size:"sm",children:s.username||"Unknown"})]}):s.access==="private"?e.jsx(T,{size:"sm",color:"gray",variant:"light",children:"ð ÐÑиваÑнÑй"}):s.access==="free"?e.jsx(T,{size:"sm",color:"teal",variant:"light",children:"ð Free"}):s.access==="all"?e.jsx(T,{size:"sm",color:"blue",variant:"light",children:"ð ÐÑе"}):e.jsx(T,{size:"sm",color:"violet",variant:"light",children:"ð¥ Premium"})})}),e.jsx(d.Td,{children:e.jsx(se,{children:s.login})}),e.jsx(d.Td,{children:e.jsx(c,{size:"sm",c:$e(s)?"red":void 0,fw:$e(s)?500:void 0,children:s.expiresAt?Le(s.expiresAt).format("DD.MM.YYYY"):"â"})}),e.jsx(d.Td,{children:$e(s)?e.jsx(T,{color:"red",variant:"light",children:"ÐÑÑÑк"}):e.jsx(T,{color:s.isActive?"green":"gray",variant:"light",children:s.isActive?"ÐкÑивен":"ÐÑклÑÑÑн"})}),e.jsx(d.Td,{children:dt(s)}),e.jsx(d.Td,{children:e.jsxs(R,{position:"bottom-end",withArrow:!0,children:[e.jsx(R.Target,{children:e.jsx(os,{variant:"subtle",color:"gray",children:e.jsx(Xs,{size:16})})}),e.jsxs(R.Dropdown,{children:[e.jsx(R.Item,{leftSection:e.jsx(Qs,{size:14}),onClick:()=>ft(s),children:"ÐÑоÑмоÑÑ"}),!s.forWhatsApp&&e.jsx(R.Item,{leftSection:e.jsx(es,{size:14}),onClick:()=>st(s),disabled:je===s.id,children:je===s.id?"ÐÑовеÑÑÑâ¦":"ÐÑовеÑиÑÑ ÑейÑаÑ"}),e.jsx(R.Item,{leftSection:e.jsx(Ve,{size:14}),onClick:()=>{navigator.clipboard.writeText(`${s.ip}:${s.httpPort}:${s.login}:${s.password}`),r.show({title:"СкопиÑовано",message:"HTTP пÑокÑи",color:"green"})},children:"ÐопиÑоваÑÑ HTTP"}),e.jsx(R.Item,{leftSection:e.jsx(Ze,{size:14}),onClick:()=>ks(s),children:"РедакÑиÑоваÑÑ"}),e.jsx(R.Item,{leftSection:s.isActive?e.jsx(Re,{size:14}):e.jsx(Pe,{size:14}),color:s.isActive?"orange":"green",onClick:()=>gt(s),children:s.isActive?"ÐÑклÑÑиÑÑ":"ÐклÑÑиÑÑ"}),!$e(s)&&e.jsx(R.Item,{leftSection:e.jsx(rs,{size:14}),color:"orange",onClick:()=>jt(s),children:"ÐомеÑиÑÑ Ð¸ÑÑÑкÑим"}),e.jsx(R.Divider,{}),e.jsx(R.Item,{leftSection:e.jsx(Je,{size:14}),color:"red",onClick:()=>mt(s),children:"УдалиÑÑ"})]})]})})]},s.id))})]}),Ee.length===0&&e.jsxs(D,{p:"xl",ta:"center",children:[e.jsx(Re,{size:48,stroke:1,color:"var(--mantine-color-dimmed)"}),e.jsx(c,{c:"dimmed",mt:"md",children:"ÐÑокÑи не найденÑ"})]})]}),e.jsx(ce,{opened:ee,onClose:l,title:e.jsxs(g,{children:[e.jsx(De,{size:"lg",radiu
8s:"md",color:"brand",children:e.jsx(ze,{size:20})}),e.jsx(c,{fw:600,children:"ÐовÑй пÑокÑи"})]}),size:"lg",children:e.jsx("form",{onSubmit:f.onSubmit(xt),children:e.jsxs(Y,{gap:"md",children:[e.jsx(ne,{label:"ÐÐ»Ñ WhatsApp",description:"ÐÑокÑи Ð´Ð»Ñ WhatsApp (дÑÑгой ÑоÑÐ¼Ð°Ñ Ð´Ð°Ð½Ð½ÑÑ
)",...f.getInputProps("forWhatsApp",{type:"checkbox"})}),e.jsx(J,{label:"СÑÑана",placeholder:"ÐÑбеÑиÑе ÑÑÑанÑ",data:Ks,leftSection:e.jsx(Me,{flagEmoji:f.values.country,size:20}),renderOption:_s,searchable:!0,...f.getInputProps("country")}),e.jsx(z,{label:"IP или домен",placeholder:"45.139.30.109 или proxy.example.com",...f.getInputProps("ip")}),e.jsxs(g,{grow:!0,children:[e.jsx(ae,{label:f.values.forWhatsApp?"ÐоÑÑ Ð´Ð»Ñ ÑаÑа":"ÐоÑÑ HTTP(S)",placeholder:f.values.forWhatsApp?"5222":"1506",min:1,max:65535,...f.getInputProps("httpPort")}),e.jsx(ae,{label:f.values.forWhatsApp?"ÐоÑÑ Ð´Ð»Ñ Ð¼ÐµÐ´Ð¸Ð°":"ÐоÑÑ SOCKS5",placeholder:f.values.forWhatsApp?"443":"11506",min:1,max:65535,...f.getInputProps("socksPort")})]}),!f.values.forWhatsApp&&e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"Ðогин",placeholder:"user298608",...f.getInputProps("login")}),e.jsx(z,{label:"ÐаÑолÑ",placeholder:"td5hax",...f.getInputProps("password")})]}),e.jsx(J,{label:"ÐоÑÑÑп",data:[{value:"prime-public",label:"ð¥ ÐÐ»Ñ Premium полÑзоваÑелей"},{value:"free",label:"ð ÐÐ»Ñ Free полÑзоваÑелей"},{value:"all",label:"ð ÐÐ»Ñ Ð²ÑеÑ
полÑзоваÑелей"},{value:"personal",label:"ð¤ ÐеÑÑоналÑнÑй (Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного полÑзоваÑелÑ)"},{value:"private",label:"ð ÐÑиваÑнÑй (ÑкÑÑÑ Ð¾Ñ Ð²ÑеÑ
)"}],...f.getInputProps("access"),onChange:s=>{f.setFieldValue("access",s||"prime-public"),s!=="personal"&&s!=="private"&&f.setFieldValue("userId","")}}),(f.values.access==="personal"||f.values.access==="private")&&e.jsx(J,{label:"ÐолÑзоваÑелÑ",description:f.values.access==="personal"?"ÐÑокÑи бÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ ÑолÑко ÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð² его панели":"ÐпÑионалÑно: пÑивÑзаÑÑ Ð¿ÑиваÑнÑй пÑокÑи к конкÑеÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ",placeholder:"ÐаÑниÑе вводиÑÑ email, username или Telegramâ¦",searchable:!0,clearable:!0,nothingFoundMessage:u?"ÐоиÑкâ¦":O.length<2?"ÐведиÑе минимÑм 2 Ñимвола":"ÐолÑзоваÑели не найденÑ",data:ts,value:f.values.userId||null,onChange:s=>f.setFieldValue("userId",s||""),searchValue:O,onSearchChange:ie,leftSection:e.jsx(as,{size:16}),error:f.errors.userId,withAsterisk:f.values.access==="personal",filter:({options:s})=>s}),e.jsx(Ye,{label:"СÑок дейÑÑвиÑ",placeholder:"ÐÑбеÑиÑе даÑÑ Ð¸Ð»Ð¸ оÑÑавÑÑе пÑÑÑÑм",clearable:!0,minDate:new Date,...f.getInputProps("expiresAt")}),e.jsx(ne,{label:"ÐкÑивен",description:"ÐÑокÑи доÑÑÑпен Ð´Ð»Ñ Ð¸ÑполÑзованиÑ",...f.getInputProps("isActive",{type:"checkbox"})}),e.jsxs(g,{justify:"flex-end",mt:"md",children:[e.jsx(y,{variant:"subtle",onClick:l,children:"ÐÑмена"}),e.jsx(y,{type:"submit",loading:F,children:"ÐобавиÑÑ"})]})]})})}),e.jsx(ce,{opened:w,onClose:re,title:e.jsxs(g,{children:[e.jsx(De,{size:"lg",radius:"md",color:"blue",children:e.jsx(Ze,{size:20})}),e.jsx(c,{fw:600,children:"РедакÑиÑование пÑокÑи"})]}),size:"lg",children:e.jsx("form",{onSubmit:f.onSubmit(pt),children:e.jsxs(Y,{gap:"md",children:[e.jsx(ne,{label:"ÐÐ»Ñ WhatsApp",description:"ÐÑокÑи Ð´Ð»Ñ WhatsApp (дÑÑгой ÑоÑÐ¼Ð°Ñ Ð´Ð°Ð½Ð½ÑÑ
)",...f.getInputProps("forWhatsApp",{type:"checkbox"})}),e.jsx(J,{label:"СÑÑана",placeholder:"ÐÑбеÑиÑе ÑÑÑанÑ",data:Ks,leftSection:e.jsx(Me,{flagEmoji:f.values.country,size:20}),renderOption:_s,searchable:!0,...f.getInputProps("country")}),e.jsx(z,{label:"IP или домен",placeholder:"45.139.30.109 или proxy.example.com",...f.getInputProps("ip")}),e.jsxs(g,{grow:!0,children:[e.jsx(ae,{label:f.values.forWhatsApp?"ÐоÑÑ Ð´Ð»Ñ ÑаÑа":"ÐоÑÑ HTTP(S)",placeholder:f.values.forWhatsApp?"5222":"1506",min:1,max:65535,...f.getInputProps("httpPort")}),e.jsx(ae,{label:f.values.forWhatsApp?"ÐоÑÑ Ð´Ð»Ñ Ð¼ÐµÐ´Ð¸Ð°":"ÐоÑÑ SOCKS5",placeholder:f.values.forWhatsApp?"443":"11506",min:1,max:65535,...f.getInputProps("socksPort")})]}),!f.values.forWhatsApp&&e.jsxs(g,{grow:!0,children:[e.jsx(z,{label:"ÐогиÐ
8½",placeholder:"user298608",...f.getInputProps("login")}),e.jsx(z,{label:"ÐаÑолÑ",placeholder:"td5hax",...f.getInputProps("password")})]}),e.jsx(J,{label:"ÐоÑÑÑп",data:[{value:"prime-public",label:"ð¥ ÐÐ»Ñ Premium полÑзоваÑелей"},{value:"free",label:"ð ÐÐ»Ñ Free полÑзоваÑелей"},{value:"all",label:"ð ÐÐ»Ñ Ð²ÑеÑ
полÑзоваÑелей"},{value:"personal",label:"ð¤ ÐеÑÑоналÑнÑй (Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного полÑзоваÑелÑ)"},{value:"private",label:"ð ÐÑиваÑнÑй (ÑкÑÑÑ Ð¾Ñ Ð²ÑеÑ
)"}],...f.getInputProps("access"),onChange:s=>{f.setFieldValue("access",s||"prime-public"),s!=="personal"&&s!=="private"&&f.setFieldValue("userId","")}}),(f.values.access==="personal"||f.values.access==="private")&&e.jsx(J,{label:"ÐолÑзоваÑелÑ",description:f.values.access==="personal"?"ÐÑокÑи бÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ ÑолÑко ÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð² его панели":"ÐпÑионалÑно: пÑивÑзаÑÑ Ð¿ÑиваÑнÑй пÑокÑи к конкÑеÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ",placeholder:"ÐаÑниÑе вводиÑÑ email, username или Telegramâ¦",searchable:!0,clearable:!0,nothingFoundMessage:u?"ÐоиÑкâ¦":O.length<2?"ÐведиÑе минимÑм 2 Ñимвола":"ÐолÑзоваÑели не найденÑ",data:ts,value:f.values.userId||null,onChange:s=>f.setFieldValue("userId",s||""),searchValue:O,onSearchChange:ie,leftSection:e.jsx(as,{size:16}),error:f.errors.userId,withAsterisk:f.values.access==="personal",filter:({options:s})=>s}),e.jsx(Ye,{label:"СÑок дейÑÑвиÑ",placeholder:"ÐÑбеÑиÑе даÑÑ Ð¸Ð»Ð¸ оÑÑавÑÑе пÑÑÑÑм",clearable:!0,minDate:new Date,...f.getInputProps("expiresAt")}),e.jsx(ne,{label:"ÐкÑивен",description:"ÐÑокÑи доÑÑÑпен Ð´Ð»Ñ Ð¸ÑполÑзованиÑ",...f.getInputProps("isActive",{type:"checkbox"})}),e.jsxs(g,{justify:"flex-end",mt:"md",children:[e.jsx(y,{variant:"subtle",onClick:re,children:"ÐÑмена"}),e.jsx(y,{type:"submit",loading:F,children:"СоÑ
ÑаниÑÑ"})]})]})})}),e.jsx(ce,{opened:Ge,onClose:We,title:p&&e.jsxs(g,{children:[e.jsx(Me,{flagEmoji:p.countryFlag,size:28}),e.jsxs(D,{children:[e.jsx(c,{fw:600,children:p.country}),e.jsx(c,{size:"xs",c:"dimmed",children:p.username||"ÐÐ»Ñ Ð²ÑеÑ
"})]})]}),size:"md",children:p&&e.jsxs(Y,{gap:"md",children:[e.jsxs(ns,{cols:2,children:[e.jsxs(D,{children:[e.jsx(c,{size:"xs",c:"dimmed",children:"IP адÑеÑ"}),e.jsx(se,{children:p.ip})]}),e.jsxs(D,{children:[e.jsx(c,{size:"xs",c:"dimmed",children:"СÑаÑÑÑ"}),e.jsx(T,{color:p.isActive?"green":"gray",variant:"light",children:p.isActive?"ÐкÑивен":"ÐÑклÑÑÑн"})]}),e.jsxs(D,{children:[e.jsx(c,{size:"xs",c:"dimmed",children:"HTTP(S) поÑÑ"}),e.jsx(se,{children:p.httpPort})]}),e.jsxs(D,{children:[e.jsx(c,{size:"xs",c:"dimmed",children:"SOCKS5 поÑÑ"}),e.jsx(se,{children:p.socksPort})]}),e.jsxs(D,{children:[e.jsx(c,{size:"xs",c:"dimmed",children:"Ðогин"}),e.jsx(se,{children:p.login})]}),e.jsxs(D,{children:[e.jsx(c,{size:"xs",c:"dimmed",children:"ÐаÑолÑ"}),e.jsx(se,{children:p.password})]}),e.jsxs(D,{children:[e.jsx(c,{size:"xs",c:"dimmed",children:"ÐоÑÑÑп"}),p.access==="free"?e.jsx(T,{size:"sm",color:"teal",variant:"light",children:"ð Free"}):p.access==="all"?e.jsx(T,{size:"sm",color:"blue",variant:"light",children:"ð ÐÑе"}):p.access==="personal"?e.jsx(T,{size:"sm",color:"grape",variant:"light",leftSection:e.jsx(as,{size:10}),children:"ÐеÑÑоналÑнÑй"}):p.access==="private"?e.jsx(T,{size:"sm",color:"gray",variant:"light",children:"ð ÐÑиваÑнÑй"}):e.jsx(T,{size:"sm",color:"violet",variant:"light",children:"ð¥ Premium"})]}),(p.access==="personal"||p.access==="private")&&p.userId&&e.jsxs(D,{style:{gridColumn:"1 / -1"},children:[e.jsx(c,{size:"xs",c:"dimmed",children:"ÐолÑзоваÑелÑ"}),e.jsxs(g,{gap:"xs",mt:4,children:[e.jsx(Bs,{size:"sm",radius:"xl",color:"brand",children:(p.username||p.userEmail||"U")[0].toUpperCase()}),e.jsxs(D,{children:[p.userEmail&&e.jsx(c,{size:"sm",fw:500,children:p.userEmail}),p.username&&e.jsxs(c,{size:"xs",c:"dimmed",children:["@",p.username]})]})]})]}),e.jsxs(D,{children:[e.jsx(c,{size:"xs",c:"dimmed",children:"ÐÑÑекаеÑ"}),e.jsx(c,{size:"sm",children:p.expiresAt?Le(p.expiresAt).format("DD.MM.YYYY"):"ÐеÑÑÑоÑно"})]})]}),e.jsxs(g,{grow:!0,mt:"md",children:[e.jsx(y,{variant:"light",leftSection:e.jsx(Ve,{size:16}),onClick:()=>{navigator.clipboard.writeText(`${p.ip}:${p.httpPort}:${p.login}:${p.password}`),r.show({title:"СкопиÑовано",message:"HTTP пÑокÑи",color:"green"})},children:"ÐопиÑоваÑÑ HTTP"}),e.jsx(y,{variant:"light",color:"violet",leftSection:e.jsx(Ve,{size:16}),onClick:()=>{navigator.clipboard.writeText(`${p.ip}:${p.socksPort}:${p.login}:${p.password}`),r.show({title:"СкопиÑовано",message:"SOCKS5 пÑокÑи",color:"green"})},children:"ÐопиÑоваÑÑ SOCKS5"})]}),e.jsxs(g,{justify:"flex-end",children:[e.jsx(y,{variant:"light",onClick:We,children:"ÐакÑÑÑÑ"}),e.jsx(y,{leftSection:e.jsx(Ze,{size:16}),onClick:()=>{We(),ks(p)},children:"РедакÑиÑоваÑÑ"})]})]})})]})]})}export{Hl as AdminProxiesPage};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.