PageSourceSearch

https://hostuis.com/build/assets/Servers-D7ZHdjvw.js

js hostuis.com collected 2026-10-07 22:28:53 UTC 37,061 bytes, 1 lines download raw bytes

1import{d as Pe,r as V,P as N,i as ee,o as i,c as $,a as Ce,l as x,u as s,K as Ae,B as t,x as f,j as c,Q as _e,L as g,R as W,k as p,e as m,F as K,E as te,s as u,C as y,I as G,S as oe,y as O,U as B,h as se}from"./app-CFsgqP1j.js";import{q as I,a as F}from"./index-C_SHgnPd.js";import{A as Te}from"./AdminLayout-CKpIvQP8.js";import{S as C}from"./server-utF9gkXT.js";import{P as Me}from"./plus-BhK2I8JQ.js";import{S as Se}from"./search-CBXXJewK.js";import{T as $e}from"./ToastNotifications-l0oNMqvD.js";import{C as re}from"./circle-check-big-1Zw5QRjW.js";import{C as Ue}from"./circle-x-B-qYi6ty.js";import{L as ne}from"./loader-circle-B4EwLrhk.js";import{W as le}from"./wifi-DumkE4hs.js";import{E}from"./external-link-D6PBlbIZ.js";import{S as Ve}from"./star-DLoGzzIJ.js";import{P as Ie}from"./pen-DDBhSQbJ.js";import{T as je}from"./trash-2-BxpAujMw.js";import{X as de}from"./x-DOzTIvCn.js";import"./useNotificationPolling-1Si_P3xx.js";import"./createLucideIcon-CaR9SJZR.js";import"./users-BefwP3yW.js";import"./settings-CclVfPKo.js";import"./user-D29teeXA.js";import"./log-out-BYu8YCA4.js";import"./key-round-BY7MRI5T.js";import"./_plugin-vue_export-helper-BecJeOls.js";import"./shopping-cart-y3xshjut.js";import"./landmark-DyZgAb07.js";import"./wallet-BXpWnQsG.js";import"./tag-O-5qGdEu.js";import"./mail-B9YElltF.js";import"./rss-DkLu0xM3.js";import"./shopping-bag-A0FubH0O.js";import"./dollar-sign-Cbx-TiGs.js";import"./shield-DCH2-rTP.js";import"./share-2-DId9laY7.js";import"./log-in-CaTw8toY.js";import"./code-xml-MmUq5RWp.js";import"./calendar-COZgZyOG.js";import"./clock-BCJBWsud.js";import"./wrench-0m2QhsKB.js";import"./shield-check-B_kOIHy7.js";import"./shield-alert-5l-Swexv.js";import"./smartphone-Cq9h_fss.js";import"./credit-card-DXOlPka8.js";import"./file-text-5DFqbhDC.js";import"./message-square-Dm0ArbK1.js";import"./circle-check-DxM-V2IU.js";const v=o=>({url:v.url(o),method:"get"});v.definition={methods:["get","head"],url:"/admin/settings/servers"};v.url=o=>v.definition.url+I(o);v.get=o=>({url:v.url(o),method:"get"});v.head=o=>({url:v.url(o),method:"head"});const z=o=>({action:v.url(o),method:"get"});z.get=o=>({action:v.url(o),method:"get"});z.head=o=>({action:v.url({[o?.mergeQuery?"mergeQuery":"query"]:{_method:"HEAD",...o?.query??o?.mergeQuery??{}}}),method:"get"});v.form=z;const _=o=>({url:_.url(o),method:"post"});_.definition={methods:["post"],url:"/admin/settings/servers"};_.url=o=>_.definition.url+I(o);_.post=o=>({url:_.url(o),method:"post"});const ie=o=>({action:_.url(o),method:"post"});ie.post=o=>({action:_.url(o),method:"post"});_.form=ie;const T=(o,n)=>({url:T.url(o,n),method:"put"});T.definition={methods:["put"],url:"/admin/settings/servers/{server}"};T.url=(o,n)=>{(typeof o=="string"||typeof o=="number")&&(o={server:o}),typeof o=="object"&&!Array.isArray(o)&&"id"in o&&(o={server:o.id}),Array.isArray(o)&&(o={server:o[0]}),o=F(o);const P={server:typeof o.server=="object"?o.server.id:o.server};return T.definition.url.replace("{server}",P.server.toString()).replace(/\/+$/,"")+I(n)};T.put=(o,n)=>({url:T.url(o,n),method:"put"});const ae=(o,n)=>({action:T.url(o,{[n?.mergeQuery?"mergeQuery":"query"]:{_method:"PUT",...n?.query??n?.mergeQuery??{}}}),method:"post"});ae.put=(o,n)=>({action:T.url(o,{[n?.mergeQuery?"mergeQuery":"query"]:{_method:"PUT",...n?.query??n?.mergeQuery??{}}}),method:"post"});T.form=ae;const M=(o,n)=>({url:M.url(o,n),method:"delete"});M.definition={methods:["delete"],url:"/admin/settings/servers/{server}"};M.url=(o,n)=>{(typeof o=="string"||typeof o=="number")&&(o={server:o}),typeof o=="object"&&!Array.isArray(o)&&"id"in o&&(o={server:o.id}),Array.isArray(o)&&(o={server:o[0]}),o=F(o);const P={server:typeof o.server=="object"?o.server.id:o.server};return M.definition.url.replace("{server}",P.server.toString()).replace(/\/+$/,"")+I(n)};M.delete=(o,n)=>({url:M.url(o,n),method:"delete"});const ue=(o,n)=>({action:M.url(o,{[n?.mergeQuery?"mergeQuery":"query"]:{_method:"DELETE",...n?.query??n?.mergeQuery??{}}}),method:"post"});ue.delete=(o,n)=>({action:M.url(o,{[n?.mergeQuery?"mergeQuery":"query"]:{_method:"DELETE",...n?.query??n?.mergeQuery??{}}}),method:"post"});M.form=ue;const S=(o,n)=>({url:S.url(o,n),method:"patch"});
1S.definition={methods:["patch"],url:"/admin/settings/servers/{server}/default"};S.url=(o,n)=>{(typeof o=="string"||typeof o=="number")&&(o={server:o}),typeof o=="object"&&!Array.isArray(o)&&"id"in o&&(o={server:o.id}),Array.isArray(o)&&(o={server:o[0]}),o=F(o);const P={server:typeof o.server=="object"?o.server.id:o.server};return S.definition.url.replace("{server}",P.server.toString()).replace(/\/+$/,"")+I(n)};S.patch=(o,n)=>({url:S.url(o,n),method:"patch"});const pe=(o,n)=>({action:S.url(o,{[n?.mergeQuery?"mergeQuery":"query"]:{_method:"PATCH",...n?.query??n?.mergeQuery??{}}}),method:"post"});pe.patch=(o,n)=>({action:S.url(o,{[n?.mergeQuery?"mergeQuery":"query"]:{_method:"PATCH",...n?.query??n?.mergeQuery??{}}}),method:"post"});S.form=pe;const h=(o,n)=>({url:h.url(o,n),method:"get"});h.definition={methods:["get","head"],url:"/admin/settings/servers/{server}/test"};h.url=(o,n)=>{(typeof o=="string"||typeof o=="number")&&(o={server:o}),typeof o=="object"&&!Array.isArray(o)&&"id"in o&&(o={server:o.id}),Array.isArray(o)&&(o={server:o[0]}),o=F(o);const P={server:typeof o.server=="object"?o.server.id:o.server};return h.definition.url.replace("{server}",P.server.toString()).replace(/\/+$/,"")+I(n)};h.get=(o,n)=>({url:h.url(o,n),method:"get"});h.head=(o,n)=>({url:h.url(o,n),method:"head"});const J=(o,n)=>({action:h.url(o,n),method:"get"});J.get=(o,n)=>({action:h.url(o,n),method:"get"});J.head=(o,n)=>({action:h.url(o,{[n?.mergeQuery?"mergeQuery":"query"]:{_method:"HEAD",...n?.query??n?.mergeQuery??{}}}),method:"get"});h.form=J;const w=(o,n)=>({url:w.url(o,n),method:"get"});w.definition={methods:["get","head"],url:"/admin/settings/servers/{server}/plans"};w.url=(o,n)=>{(typeof o=="string"||typeof o=="number")&&(o={server:o}),typeof o=="object"&&!Array.isArray(o)&&"id"in o&&(o={server:o.id}),Array.isArray(o)&&(o={server:o[0]}),o=F(o);const P={server:typeof o.server=="object"?o.server.id:o.server};return w.definition.url.replace("{server}",P.server.toString()).replace(/\/+$/,"")+I(n)};w.get=(o,n)=>({url:w.url(o,n),method:"get"});w.head=(o,n)=>({url:w.url(o,n),method:"head"});const R=(o,n)=>({action:w.url(o,n),method:"get"});R.get=(o,n)=>({action:w.url(o,n),method:"get"});R.head=(o,n)=>({action:w.url(o,{[n?.mergeQuery?"mergeQuery":"query"]:{_method:"HEAD",...n?.query??n?.mergeQuery??{}}}),method:"get"});w.form=R;const qe={class:"p-4 lg:p-6 space-y-5 pb-24 lg:pb-6"},Qe={class:"flex flex-col sm:flex-row sm:items-center justify-between gap-3"},Ee={class:"flex items-center gap-3"},He={class:"w-9 h-9 rounded-xl bg-primary/10 flex items-center justify-center"},Le={class:"text-xs text-muted-foreground"},De={class:"app-card rounded-xl p-4 flex flex-col sm:flex-row gap-3"},We={class:"relative flex-1"},Fe={class:"app-card rounded-xl overflow-hidden"},Ne={class:"overflow-x-auto"},Oe={class:"w-full text-sm"},Be={class:"divide-y divide-border"},Ke={key:0},Ge={class:"px-4 py-3"},ze={class:"flex items-center gap-2 flex-wrap"},Je={class:"font-medium text-foreground"},Re={key:0,class:"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium bg-primary/10 text-primary border border-primary/20"},Xe=["title"],Ye={class:"text-xs text-muted-foreground mt-0.5"},Ze={key:0},et={key:1},tt={class:"px-4 py-3 text-muted-foreground text-xs"},ot={class:"px-4 py-3 text-muted-foreground text-xs"},st={class:"px-4 py-3"},rt={class:"px-4 py-3 text-right"},nt={class:"flex items-center justify-end gap-1.5 flex-wrap"},lt=["onClick","disabled"],dt=["onClick"],it=["onClick"],at=["onClick"],ut=["onClick"],pt=["onClick"],mt=["onClick"],ct=["onClick"],xt=["onClick"],yt=["onClick"],ft={key:0,class:"flex items-center justify-between px-4 py-3 border-t border-border"},bt={class:"text-xs text-muted-foreground"},gt={class:"flex gap-1"},vt=["onClick","innerHTML"],kt=["innerHTML"],ht={class:"app-card w-full max-w-xl rounded-2xl p-6 max-h-[90vh] overflow-y-auto shadow-2xl"},wt={class:"flex items-center justify-between mb-5"},Pt={key:0,class:"flex items-start gap-2 p-3 bg-blue-500/10 border border-blue-500/20 rounded-xl text-xs text-blue-600 dark:text-blue-400"},Ct={key:1,class:"flex items-start gap-2 p-3 bg-orange-500/10 border border-orange-500/20 rounded-xl text-xs text-orange-600 dar
1k:text-orange-400"},At={key:2,class:"flex items-start gap-2 p-3 bg-emerald-500/10 border border-emerald-500/20 rounded-xl text-xs text-emerald-700 dark:text-emerald-400"},_t={key:3,class:"flex items-start gap-2 p-3 bg-purple-500/10 border border-purple-500/20 rounded-xl text-xs text-purple-700 dark:text-purple-400"},Tt={key:4,class:"flex items-start gap-2 p-3 bg-cyan-500/10 border border-cyan-500/20 rounded-xl text-xs text-cyan-700 dark:text-cyan-400"},Mt={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},St=["placeholder"],$t={key:0,class:"text-xs text-red-500 mt-1"},Ut={key:0,class:"text-xs text-red-500 mt-1"},Vt={key:0},It=["placeholder"],jt={key:1},qt=["placeholder"],Qt={class:"sm:col-span-2"},Et={class:"block text-xs font-medium text-muted-foreground mb-1"},Ht={key:2},Lt={key:3},Dt={class:"sm:col-span-2 flex items-center gap-6"},Wt={class:"flex items-center gap-2 text-sm text-foreground cursor-pointer"},Ft={class:"flex items-center gap-2 text-sm text-foreground cursor-pointer"},Nt={class:"flex justify-end gap-3 pt-2"},Ot=["disabled"],Bt={class:"app-card w-full max-w-xl rounded-2xl p-6 max-h-[90vh] overflow-y-auto shadow-2xl"},Kt={class:"flex items-center justify-between mb-5"},Gt={key:0,class:"flex items-start gap-2 p-3 bg-blue-500/10 border border-blue-500/20 rounded-xl text-xs text-blue-600 dark:text-blue-400"},zt={key:1,class:"flex items-start gap-2 p-3 bg-orange-500/10 border border-orange-500/20 rounded-xl text-xs text-orange-600 dark:text-orange-400"},Jt={key:2,class:"flex items-start gap-2 p-3 bg-emerald-500/10 border border-emerald-500/20 rounded-xl text-xs text-emerald-700 dark:text-emerald-400"},Rt={key:3,class:"flex items-start gap-2 p-3 bg-purple-500/10 border border-purple-500/20 rounded-xl text-xs text-purple-700 dark:text-purple-400"},Xt={key:4,class:"flex items-start gap-2 p-3 bg-cyan-500/10 border border-cyan-500/20 rounded-xl text-xs text-cyan-700 dark:text-cyan-400"},Yt={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},Zt={key:0,class:"text-xs text-red-500 mt-1"},eo={key:0,class:"text-xs text-red-500 mt-1"},to={key:0},oo=["placeholder"],so={key:1},ro=["placeholder"],no={class:"sm:col-span-2"},lo={class:"block text-xs font-medium text-muted-foreground mb-1"},io={key:0,class:"ml-1 inline-flex items-center gap-1 text-green-600 dark:text-green-400"},ao={key:1,class:"text-muted-foreground/60"},uo=["placeholder"],po={key:2},mo={key:3},co={class:"sm:col-span-2 flex items-center gap-6"},xo={class:"flex items-center gap-2 text-sm text-foreground cursor-pointer"},yo={class:"flex items-center gap-2 text-sm text-foreground cursor-pointer"},fo={class:"flex flex-col sm:flex-row justify-between gap-3 pt-2"},bo=["disabled"],go={class:"flex justify-end gap-3"},vo=["disabled"],b="w-full px-3 py-2 rounded-xl bg-muted border border-border text-foreground text-sm placeholder:text-muted-foreground/50 focus:outline-none focus:ring-2 focus:ring-primary transition-colors",ms=Pe({__name:"Servers",props:{servers:{},filters:{},availableModules:{},moduleStatuses:{}},setup(o){const n=o;function P(a){return a in n.moduleStatuses?n.moduleStatuses[a]:!0}const H=V(n.filters.search??""),L=V(n.filters.type??"");function X(){G.get(v.url(),{search:H.value,type:L.value},{preserveState:!0,replace:!0})}function me(){H.value="",L.value="",G.get(v.url(),{})}const ce={cpanel:"cPanel/WHM",plesk:"Plesk",openpanel:"OpenPanel",mediacp:"MediaCP",tuiscast:"TuisCast",directadmin:"DirectAdmin",none:"Sin panel"},Y={plesk:{port:8443,username:"admin"},cpanel:{port:2087,username:"root"},openpanel:{port:2087,username:"admin"},mediacp:{port:2020,username:""},tuiscast:{port:null,username:"",hostname:"tuiscast.hostuis.com"},directadmin:{port:2222,username:"admin"},none:{port:80,username:""}},j=V(!1),d=N({name:"",type:"plesk",hostname:"",ip_address:"",port:8443,username:"admin",api_key:"",api_secret:"",ns1:"",ns2:"",is_secure:!0,is_default:!1,max_accounts:null,status:"active"});function xe(){d.reset(),j.value=!0}function ye(){d.post(_.url(),{onSuccess:()=>{j.value=!1}})}const q=V(!1),k=V(null),l=N({name:"",type:"plesk",hostname:"",ip_address:"",port:8443,username:"",api_key:"",api_secret:"",ns1:"",ns2:"",is_secure:!0,is_default:!1,max_accounts:null,status:"active"});function fe(a){k.value=a,l.name=a.name,l.type=a.type,l.hostname=a.hostname,l.ip_address=a.ip_address??"",l.port=a.port,l.username=a.username??"",l.api_key="",l.api_secret="",l.ns1=a.ns1??"",l.ns2=a.ns2??"",l.is_secure=a.is_secure,l.is_default=a.is_default,l.max_accounts=a.max_accounts,l.status=a.status,q.value=!0}function be(){k.value&&l.put(T.url({server:k.value.id}),{onSuccess:()=>{q.value=!1}})}const ge=se(()=>d.type==="cpanel"?"API Token (WHM)":d.type==="plesk"?"Contraseña / Secret Key":d.type==="openpanel"?"Contraseña admin OpenPanel":d.type==="mediacp"?"API Token (MediaCP)":d.type==="tuiscast"?"Bearer Token (TuisCast)":"API Key / Contraseña"),ve=se(()=>l.type==="cpanel"?"API Token (WHM)":l.type==="plesk"?"Contraseña / Secret Key":l.type==="openpanel"?"Contraseña admin OpenPanel":l.type==="mediacp"?"API Token (MediaCP)":l.type==="tuiscast"?"Bearer Token (TuisCast)":"API Key / Contraseña");ee(()=>d.type,a=>{const e=Y[a];e&&(d.port=e.port,d.username=e.username,e.hostname&&!d.hostname&&(d.hostname=e.hostname))}),ee(()=>l.type,a=>{const e=Y[a];e&&(l.port=e.port,l.username=e.username)});function ke(a){confirm(`¿Eliminar el servidor "${a.name}"? Esta acción no se puede deshacer.`)&&N({}).delete(M.url({server:a.id}))}function he(a){N({}).patch(S.url({server:a.id}))}const Q=V(null),U=V({});async function Z(a){Q.value=a.id;try{const r=await(await fetch(h.url({server:a.id}))).json();U.value[a.id]=r}catch{U.value[a.id]={success:!1,message:"Error de red"}}finally{Q.value=null}}function D(a){const e=a.is_secure?"https":"http";if(a.type==="cpanel"){const r=a.port??2087;window.open(`${e}://${a.hostname}:${r}`,"_blank")}else if(a.type==="openpanel"){const r=a.port??2087;window.open(`${e}://${a.hostname}:${r}`,"_blank")}else if(a.type==="mediacp"){const r=a.port?`:${a.port}`:"";window.open(`${e}://${a.hostname}${r}`,"_blank")}else if(a.type==="tuiscast")window.open(`${e}://${a.hostname}`,"_blank");else{const r=a.port??8443;window.open(`${e}://${a.hostname}:${r}/admin`,"_blank")}}function we(a){const e=a.is_secure?"https":"http";window.open(`${e}://${a.hostname}:2083`,"_blank")}return(a,e)=>(i(),$(Te,null,{default:Ce(()=>[x(s(Ae),{title:"Servidores"}),t("div",qe,[t("div",Qe,[t("div",Ee,[t("div",He,[x(s(C),{class:"w-5 h-5 text-primary"})]),t("div",null,[e[35]||(e[35]=t("h2",{class:"text-lg font-bold text-foreground"},"Servidores",-1)),t("p",Le,f(o.servers.total)+" servidores configurados",1)])]),t("button",{type:"button",onClick:xe,class:"flex items-center gap-2 px-4 py-2 bg-primary text-primary-foreground rounded-xl text-sm font-medium hover:bg-primary/90 transition-colors"},[x(s(Me),{class:"w-4 h-4"}),e[36]||(e[36]=t("span",{class:"hidden sm:inline"},"Agregar servidor",-1))])]),t("div",De,[t("div",We,[x(s(Se),{class:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),c(t("input",{"onUpdate:modelValue":e[0]||(e[0]=r=>H.value=r),type:"text",placeholder:"Buscar por nombre, hostname, IP...",onKeyup:_e(X,["enter"]),class:"w-full pl-9 pr-4 py-2 rounded-lg bg-muted border border-border text-sm text-foreground placeholder:text-muted-foreground
1/50 focus:outline-none focus:ring-2 focus:ring-primary"},null,544),[[g,H.value]])]),c(t("select",{"onUpdate:modelValue":e[1]||(e[1]=r=>L.value=r),onChange:X,class:"px-3 py-2 rounded-lg bg-muted border border-border text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-primary"},[...e[37]||(e[37]=[t("option",{value:""},"Todos los tipos",-1),t("option",{value:"cpanel"},"cPanel/WHM",-1),t("option",{value:"plesk"},"Plesk",-1),t("option",{value:"openpanel"},"OpenPanel",-1),t("option",{value:"mediacp"},"MediaCP",-1),t("option",{value:"tuiscast"},"TuisCast",-1),t("option",{value:"directadmin"},"DirectAdmin",-1),t("option",{value:"none"},"Sin panel",-1)])],544),[[W,L.value]]),H.value||L.value?(i(),p("button",{key:0,onClick:me,class:"px-3 py-2 rounded-lg border border-border text-sm text-muted-foreground hover:text-foreground transition-colors"}," Limpiar ")):m("",!0)]),t("div",Fe,[t("div",Ne,[t("table",Oe,[e[47]||(e[47]=t("thead",null,[t("tr",{class:"border-b border-border bg-muted/30"},[t("th",{class:"text-left px-4 py-3 text-xs font-semibold text-muted-foreground uppercase tracking-wide"},"Servidor"),t("th",{class:"text-left px-4 py-3 text-xs font-semibold text-muted-foreground uppercase tracking-wide"},"Tipo"),t("th",{class:"text-left px-4 py-3 text-xs font-semibold text-muted-foreground uppercase tracking-wide"},"Cuentas"),t("th",{class:"text-left px-4 py-3 text-xs font-semibold text-muted-foreground uppercase tracking-wide"},"Estado"),t("th",{class:"text-right px-4 py-3 text-xs font-semibold text-muted-foreground uppercase tracking-wide"},"Acciones")])],-1)),t("tbody",Be,[o.servers.data.length===0?(i(),p("tr",Ke,[...e[38]||(e[38]=[t("td",{colspan:"5",class:"px-4 py-12 text-center text-muted-foreground text-sm"}," No se encontraron servidores ",-1)])])):m("",!0),(i(!0),p(K,null,te(o.servers.data,r=>(i(),p("tr",{key:r.id,class:"hover:bg-muted/20 transition-colors"},[t("td",Ge,[t("div",ze,[t("span",Je,f(r.name),1),r.is_default?(i(),p("span",Re," Por defecto ")):m("",!0),P(r.type)?m("",!0):(i(),p("span",{key:1,class:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-xs font-medium bg-yellow-500/10 text-yellow-600 border border-yellow-500/20",title:`El módulo ${r.type} está desactivado`},[x(s($e),{class:"w-3 h-3"}),e[39]||(e[39]=u(" Módulo inactivo ",-1))],8,Xe))]),t("p",Ye,[u(f(r.hostname),1),r.port?(i(),p("span",Ze,":"+f(r.port),1)):m("",!0),r.ip_address?(i(),p("span",et,f(r.ip_address),1)):m("",!0)]),U.value[r.id]?(i(),p("p",{key:0,class:y(["text-xs mt-1",U.value[r.id].success?"text-green-500":"text-red-500"])},f(U.value[r.id].message),3)):m("",!0)]),t("td",tt,f(ce[r.type]??r.type),1),t("td",ot,f(r.current_accounts)+" / "+f(r.max_accounts??""),1),t("td",st,[t("span",{class:y(["inline-flex items-center gap-1 px-2 py-0.5 rounded-md text-xs font-medium",r.status==="active"?"bg-green-500/10 text-green-500 border border-green-500/20":"bg-muted text-muted-foreground border border-border"])},[r.status==="active"?(i(),$(s(re),{key:0,class:"w-3 h-3"})):(i(),$(s(Ue),{key:1,class:"w-3 h-3"})),u(" "+f(r.status==="active"?"Activo":"Inactivo"),1)],2)]),t("td",rt,[t("div",nt,[t("button",{type:"button",onClick:A=>Z(r),disabled:Q.value===r.id,class:"inline-flex items-center gap-1 px-2.5 py-1 text-xs text-muted-foreground border border-border rounded-lg hover:text-foreground disabled:opacity-50 transition-colors"},[Q.value===r.id?(i(),$(s(ne),{key:0,class:"w-3 h-3 animate-spin"})):(i(),$(s(le),{key:1,class:"w-3 h-3"})),e[40]||(e[40]=u(" Probar ",-1))],8,lt),r.type==="plesk"?(i(),p("button",{key:0,type:"button",onClick:A=>D(r),class:"inline-flex items-center gap-1 px-2.5 py-1 text-xs text-blue-500 border border-blue-500/30 rounded-lg hover:bg-blue-500/10 transition-colors"},[x(s(E),{class:"w-3 h-3"}),e[41]||(e[41]=u(" Plesk ",-1))],8,dt)):m("",!0),r.type==="cpanel"?(i(),p("button",{key:1,type:"button",onClick:A=>D(r),class:"inline-flex items-center gap-1 px-2.5 py-1 text-xs text-orange-500 border border-orange-500/30 rounded-lg hover:bg-orange-500/10 transition-colors"},[x(s(E),{class:"w-3 h-3"}),e[42]||(e[42]=u(" WHM ",-1))],8,it)):m("",!0),r.type==="cpanel"?(i(),p("button",{key:2,type:"button",onClick:A=>we(r),class:"inline-flex items-center gap-1 px-2.5 py-1 text-xs text-teal-500 border border-teal-500/30 rounded-lg hover:bg-teal-500/10 transition-colors"},[x(s(E),{class:"w-3 h-3"}),e[43]||(e[43]=u(" cPanel ",-1))],8,at)):m("",!0),r.type==="openpanel"?(i(),p("button",{key:3,type:"button",onClick:A=>D(r),class:"inline-flex items-center gap-1 px-2.5 py-1 text-xs text-emerald-500 border border-emerald-500/30 rounded-lg hover:bg-emerald-500/10 transition-colors"},[x(s(E),{class:"w-3 h-3"}),e[44]||(e[44]=u(" OpenPanel ",-1))],8,ut)):m("",!0),r.type==="mediacp"?(i(),p("button",{key:4,type:"button",onClick:A=>D(r),class:"inline-flex items-center gap-1 px-2.5 py-1 text-xs text-purple-500 border border-purple-500/30 rounded-lg hover:bg-purple-500/10 transition-colors"},[x(s(E),{class:"w-3 h-3"}),e[45]||(e[45]=u(" MediaCP ",-1))],8,pt)):m("",!0),r.type==="tuiscast"?(i(),p("button",{key:5,type:"button",onClick:A=>D(r),class:"inline-flex items-center gap-1 px-2.5 py-1 text-xs text-cyan-500 border border-cyan-500/30 rounded-lg hover:bg-cyan-500/10 transition-colors"},[x(s(E),{class:"w-3 h-3"}),e[46]||(e[46]=u(" TuisCast ",-1))],8,mt)):m("",!0),r.is_default?m("",!0):(i(),p("button",{key:6,type:"button",onClick:A=>he(r),class:"inline-flex items-center gap-1 px-2.5 py-1 text-xs text-amber-500 border border-amber-500/30 rounded-lg hover:bg-amber-500/10 transition-colors"},[x(s(Ve),{class:"w-3 h-3"})],8,ct)),t("button",{type:"button",onClick:A=>fe(r),class:"inline-flex items-center gap-1 px-2.5 py-1 text-xs text-muted-foreground border border-border rounded-lg hover:text-foreground transition-colors"},[x(s(Ie),{class:"w-3 h-3"})],8,xt),t("button",{type:"button",onClick:A=>ke(r),class:"inline-flex items-center gap-1 px-2.5 py-1 text-xs text-red-500 border border-red-500/30 rounded-lg hover:bg-red-500/10 transition-colors"},[x(s(je),{class:"w-3 h-3"})],8,yt)])])]))),128))])])]),o.servers.last_page>1?(i(),p("div",ft,[t("p",bt,"Mostrando "+f(o.servers.from)+" – "+f(o.servers.to)+" de "+f(o.servers.total),1),t("div",gt,[(i(!0),p(K,null,te(o.servers.links,r=>(i(),p(K,{key:r.label},[r.url?(i(),p("button",{key:0,onClick:A=>s(G).get(r.url),class:y(["px-2.5 py-1 rounded-lg text-xs font-medium transition-colors",r.active?"bg-primary text-primary-foreground":"hover:bg-muted text-muted-foreground"]),innerHTML:r.label},null,10,vt)):(i(),p("span",{key:1,class:"px-2.5 py-1 text-xs text-muted-foreground
1/40",innerHTML:r.label},null,8,kt))],64))),128))])])):m("",!0)])]),(i(),$(oe,{to:"body"},[j.value?(i(),p("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e[17]||(e[17]=O(r=>j.value=!1,["self"]))},[t("div",ht,[t("div",wt,[e[48]||(e[48]=t("h3",{class:"text-base font-bold text-foreground"},"Agregar servidor",-1)),t("button",{type:"button",onClick:e[2]||(e[2]=r=>j.value=!1),class:"text-muted-foreground hover:text-foreground"},[x(s(de),{class:"w-5 h-5"})])]),t("form",{onSubmit:O(ye,["prevent"]),class:"space-y-4"},[s(d).type==="plesk"?(i(),p("div",Pt,[x(s(C),{class:"w-4 h-4 mt-0.5 shrink-0"}),e[49]||(e[49]=t("span",null,[u("Plesk usa su "),t("strong",null,"Contraseña del administrador"),u(" o un "),t("strong",null,"Secret Key"),u(" de API. Puerto por defecto: "),t("strong",null,"8443"),u(".")],-1))])):m("",!0),s(d).type==="cpanel"?(i(),p("div",Ct,[x(s(C),{class:"w-4 h-4 mt-0.5 shrink-0"}),e[50]||(e[50]=t("span",null,[u("cPanel/WHM usa un "),t("strong",null,"API Token"),u(". Créalo en WHM → "),t("em",null,"Manage API Tokens"),u(". Puerto por defecto: "),t("strong",null,"2087"),u(".")],-1))])):m("",!0),s(d).type==="openpanel"?(i(),p("div",At,[x(s(C),{class:"w-4 h-4 mt-0.5 shrink-0"}),e[51]||(e[51]=t("span",null,[u("OpenPanel usa tu "),t("strong",null,"usuario administrador"),u(" y su "),t("strong",null,"contraseña"),u(" para generar un token JWT. Asegúrate de que el acceso API esté habilitado en OpenAdmin → API. Puerto por defecto: "),t("strong",null,"2087"),u(".")],-1))])):m("",!0),s(d).type==="mediacp"?(i(),p("div",_t,[x(s(C),{class:"w-4 h-4 mt-0.5 shrink-0"}),e[52]||(e[52]=t("span",null,[u("MediaCP usa un "),t("strong",null,"API Token"),u(". Créalo en MediaCP → Admin → API Tokens. Puerto por defecto: "),t("strong",null,"2020"),u(". El campo Usuario no es necesario.")],-1))])):m("",!0),s(d).type==="tuiscast"?(i(),p("div",Tt,[x(s(C),{class:"w-4 h-4 mt-0.5 shrink-0"}),e[53]||(e[53]=t("span",null,[u("TuisCast usa un "),t("strong",null,"Bearer Token"),u('. Genéralo desde tu dashboard de TuisCast → "Generate API token". No requiere puerto, usuario ni nameservers.')],-1))])):m("",!0),t("div",Mt,[t("div",null,[e[54]||(e[54]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Nombre *",-1)),c(t("input",{"onUpdate:modelValue":e[3]||(e[3]=r=>s(d).name=r),type:"text",class:y(b),placeholder:s(d).type==="tuiscast"?"TuisCast":s(d).type==="mediacp"?"Mi servidor MediaCP":s(d).type==="cpanel"?"Mi servidor cPanel":s(d).type==="openpanel"?"Mi servidor OpenPanel":s(d).type==="directadmin"?"Mi servidor DirectAdmin":"Mi servidor Plesk",required:""},null,8,St),[[g,s(d).name]]),s(d).errors.name?(i(),p("p",$t,f(s(d).errors.name),1)):m("",!0)]),t("div",null,[e[56]||(e[56]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Tipo *",-1)),c(t("select",{"onUpdate:modelValue":e[4]||(e[4]=r=>s(d).type=r),class:y(b)},[...e[55]||(e[55]=[t("option",{value:"plesk"},"Plesk",-1),t("option",{value:"cpanel"},"cPanel/WHM",-1),t("option",{value:"openpanel"},"OpenPanel",-1),t("option",{value:"mediacp"},"MediaCP",-1),t("option",{value:"tuiscast"},"TuisCast",-1),t("option",{value:"directadmin"},"DirectAdmin",-1),t("option",{value:"none"},"Sin panel",-1)])],512),[[W,s(d).type]])]),t("div",null,[e[57]||(e[57]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Hostname *",-1)),c(t("input",{"onUpdate:modelValue":e[5]||(e[5]=r=>s(d).hostname=r),type:"text",class:y(b),placeholder:"servidor.ejemplo.com",required:""},null,512),[[g,s(d).hostname]]),s(d).errors.hostname?(i(),p("p",Ut,f(s(d).errors.hostname),1)):m("",!0)]),t("div",null,[e[58]||(e[58]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"IP Address",-1)),c(t("input",{"onUpdate:modelValue":e[6]||(e[6]=r=>s(d).ip_address=r),type:"text",class:y(b),placeholder:"192.168.1.1"},null,512),[[g,s(d).ip_address]])]),s(d).type!=="tuiscast"?(i(),p("div",Vt,[e[59]||(e[59]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"}
1,"Puerto",-1)),c(t("input",{"onUpdate:modelValue":e[7]||(e[7]=r=>s(d).port=r),type:"number",class:y(b),placeholder:s(d).type==="mediacp"?"2020":s(d).type==="directadmin"?"2222":s(d).type==="plesk"?"8443":"2087"},null,8,It),[[g,s(d).port,void 0,{number:!0}]])])):m("",!0),s(d).type!=="mediacp"&&s(d).type!=="tuiscast"?(i(),p("div",jt,[e[60]||(e[60]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Usuario admin",-1)),c(t("input",{"onUpdate:modelValue":e[8]||(e[8]=r=>s(d).username=r),type:"text",class:y(b),placeholder:s(d).type==="cpanel"?"root":"admin"},null,8,qt),[[g,s(d).username]])])):m("",!0),t("div",Qt,[t("label",Et,f(ge.value),1),c(t("input",{"onUpdate:modelValue":e[9]||(e[9]=r=>s(d).api_key=r),type:"password",class:y(b),autocomplete:"new-password"},null,512),[[g,s(d).api_key]])]),s(d).type!=="mediacp"&&s(d).type!=="tuiscast"?(i(),p("div",Ht,[e[61]||(e[61]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Nameserver 1",-1)),c(t("input",{"onUpdate:modelValue":e[10]||(e[10]=r=>s(d).ns1=r),type:"text",class:y(b),placeholder:"ns1.ejemplo.com"},null,512),[[g,s(d).ns1]])])):m("",!0),s(d).type!=="mediacp"&&s(d).type!=="tuiscast"?(i(),p("div",Lt,[e[62]||(e[62]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Nameserver 2",-1)),c(t("input",{"onUpdate:modelValue":e[11]||(e[11]=r=>s(d).ns2=r),type:"text",class:y(b),placeholder:"ns2.ejemplo.com"},null,512),[[g,s(d).ns2]])])):m("",!0),t("div",null,[e[63]||(e[63]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Máx. cuentas",-1)),c(t("input",{"onUpdate:modelValue":e[12]||(e[12]=r=>s(d).max_accounts=r),type:"number",class:y(b),placeholder:""},null,512),[[g,s(d).max_accounts,void 0,{number:!0}]])]),t("div",null,[e[65]||(e[65]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Estado",-1)),c(t("select",{"onUpdate:modelValue":e[13]||(e[13]=r=>s(d).status=r),class:y(b)},[...e[64]||(e[64]=[t("option",{value:"active"},"Activo",-1),t("option",{value:"inactive"},"Inactivo",-1)])],512),[[W,s(d).status]])]),t("div",Dt,[t("label",Wt,[c(t("input",{"onUpdate:modelValue":e[14]||(e[14]=r=>s(d).is_secure=r),type:"checkbox",class:"rounded"},null,512),[[B,s(d).is_secure]]),e[66]||(e[66]=u(" Usar SSL (HTTPS) ",-1))]),t("label",Ft,[c(t("input",{"onUpdate:modelValue":e[15]||(e[15]=r=>s(d).is_default=r),type:"checkbox",class:"rounded"},null,512),[[B,s(d).is_default]]),e[67]||(e[67]=u(" Servidor por defecto ",-1))])])]),t("div",Nt,[t("button",{type:"button",onClick:e[16]||(e[16]=r=>j.value=!1),class:"px-4 py-2 text-sm text-muted-foreground border border-border rounded-xl hover:text-foreground transition-colors"}," Cancelar "),t("button",{type:"submit",disabled:s(d).processing,class:"px-4 py-2 text-sm font-medium bg-primary text-primary-foreground rounded-xl hover:bg-primary/90 disabled:opacity-50 transition-colors"},f(s(d).processing?"Guardando":"Guardar servidor"),9,Ot)])],32)])])):m("",!0)])),(i(),$(oe,{to:"body"},[q.value?(i(),p("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:e[34]||(e[34]=O(r=>q.value=!1,["self"]))},[t("div",Bt,[t("div",Kt,[e[68]||(e[68]=t("h3",{class:"text-base font-bold text-foreground"},"Editar servidor",-1)),t("button",{type:"button",onClick:e[18]||(e[18]=r=>q.value=!1),class:"text-muted-foreground hover:text-foreground"},[x(s(de),{class:"w-5 h-5"})])]),t("form",{onSubmit:O(be,["prevent"]),class:"space-y-4"},[s(l).type==="plesk"?(i(),p("div",Gt,[x(s(C),{class:"w-4 h-4 mt-0.5 shrink-0"}),e[69]||(e[69]=t("span",null,[u("Plesk usa su "),t("strong",null,"Contraseña del administrador"),u(" o un "),t("strong",null,"Secret Key"),u(" de API. Puerto por defecto: "),t("strong",null,"8443"),u(".")],-1))])):m("",!0),s(l).type==="cpanel"?(i(),p("div",zt,[x(s(C),{class:"w-4 h-4 mt-0.5 shrink-0"}),e[70]||(e[70]=t("span",null,[u("cPanel/WHM usa un "),t("strong",null,"API Token"),u(". Créalo en WHM → "),t("em",null,"Manage API Tokens"),u(". Puerto por defecto: "),t("strong",null,"2087"),u(".")],-1))])):m("",!0),s(l).type==="openpanel"?(i(),p("div",Jt,[x(s(C),{class:"w-4 h-4 mt-0.5 shrink-0"}
1),e[71]||(e[71]=t("span",null,[u("OpenPanel usa tu "),t("strong",null,"usuario administrador"),u(" y su "),t("strong",null,"contraseña"),u(" para generar un token JWT. Asegúrate de que el acceso API esté habilitado en OpenAdmin → API. Puerto por defecto: "),t("strong",null,"2087"),u(".")],-1))])):m("",!0),s(l).type==="mediacp"?(i(),p("div",Rt,[x(s(C),{class:"w-4 h-4 mt-0.5 shrink-0"}),e[72]||(e[72]=t("span",null,[u("MediaCP usa un "),t("strong",null,"API Token"),u(". Créalo en MediaCP → Admin → API Tokens. Puerto por defecto: "),t("strong",null,"2020"),u(". El campo Usuario no es necesario.")],-1))])):m("",!0),s(l).type==="tuiscast"?(i(),p("div",Xt,[x(s(C),{class:"w-4 h-4 mt-0.5 shrink-0"}),e[73]||(e[73]=t("span",null,[u("TuisCast usa un "),t("strong",null,"Bearer Token"),u('. Genéralo desde tu dashboard de TuisCast → "Generate API token". No requiere puerto, usuario ni nameservers.')],-1))])):m("",!0),t("div",Yt,[t("div",null,[e[74]||(e[74]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Nombre *",-1)),c(t("input",{"onUpdate:modelValue":e[19]||(e[19]=r=>s(l).name=r),type:"text",class:y(b),required:""},null,512),[[g,s(l).name]]),s(l).errors.name?(i(),p("p",Zt,f(s(l).errors.name),1)):m("",!0)]),t("div",null,[e[76]||(e[76]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Tipo *",-1)),c(t("select",{"onUpdate:modelValue":e[20]||(e[20]=r=>s(l).type=r),class:y(b)},[...e[75]||(e[75]=[t("option",{value:"plesk"},"Plesk",-1),t("option",{value:"cpanel"},"cPanel/WHM",-1),t("option",{value:"openpanel"},"OpenPanel",-1),t("option",{value:"mediacp"},"MediaCP",-1),t("option",{value:"tuiscast"},"TuisCast",-1),t("option",{value:"directadmin"},"DirectAdmin",-1),t("option",{value:"none"},"Sin panel",-1)])],512),[[W,s(l).type]])]),t("div",null,[e[77]||(e[77]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Hostname *",-1)),c(t("input",{"onUpdate:modelValue":e[21]||(e[21]=r=>s(l).hostname=r),type:"text",class:y(b),required:""},null,512),[[g,s(l).hostname]]),s(l).errors.hostname?(i(),p("p",eo,f(s(l).errors.hostname),1)):m("",!0)]),t("div",null,[e[78]||(e[78]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"IP Address",-1)),c(t("input",{"onUpdate:modelValue":e[22]||(e[22]=r=>s(l).ip_address=r),type:"text",class:y(b)},null,512),[[g,s(l).ip_address]])]),s(l).type!=="tuiscast"?(i(),p("div",to,[e[79]||(e[79]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Puerto",-1)),c(t("input",{"onUpdate:modelValue":e[23]||(e[23]=r=>s(l).port=r),type:"number",class:y(b),placeholder:s(l).type==="mediacp"?"2020":s(l).type==="directadmin"?"2222":s(l).type==="plesk"?"8443":"2087"},null,8,oo),[[g,s(l).port,void 0,{number:!0}]])])):m("",!0),s(l).type!=="mediacp"&&s(l).type!=="tuiscast"?(i(),p("div",so,[e[80]||(e[80]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Usuario admin",-1)),c(t("input",{"onUpdate:modelValue":e[24]||(e[24]=r=>s(l).username=r),type:"text",class:y(b),placeholder:s(l).type==="cpanel"?"root":"admin"},null,8,ro),[[g,s(l).username]])])):m("",!0),t("div",no,[t("label",lo,[u(f(ve.value)+" ",1),k.value?.has_api_key?(i(),p("span",io,[x(s(re),{class:"w-3 h-3"}),e[81]||(e[81]=t("span",{class:"text-muted-foreground/60"},"(configurado — dejar vacío para no cambiar)",-1))])):(i(),p("span",ao,"(dejar vacío para no cambiar)"))]),c(t("input",{"onUpdate:modelValue":e[25]||(e[25]=r=>s(l).api_key=r),type:"password",class:y(b),autocomplete:"new-password",placeholder:k.value?.has_api_key?"••••••••••••••••":""},null,8,uo),[[g,s(l).api_key]])]),s(l).type!=="mediacp"&&s(l).type!=="tuiscast"?(i(),p("div",po,[e[82]||(e[82]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Nameserver 1",-1)),c(t("input",{"onUpdate:modelValue":e[26]||(e[26]=r=>s(l).ns1=r),type:"text",class:y(b)},null,512),[[g,s(l).ns1]])])):m("",!0),s(l).type!=="mediacp"&&s(l).type!=="tuiscast"?(i(),p("div",mo,[e[83]||(e[83]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Nameserver 2",-1)),c(t("input",{"onUpdate:modelValue":e[27]||(e[27]=r=>s(l).ns2=r),type:"text",class:y(b)},null,512),[[g,s(l).ns2]])])):m("",!0),t("div",null,[e[84]||(e[84]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Máx. cuentas",-1)),c(t("input",{"onUpdate:modelValue":e[28]||(e[28]=r=>s(l).max_accounts=r),type:"number",class:y(b)},null,512),[[g,s(l).max_accounts,void 0,{number:!0}]])]),t("div",null,[e[86]||(e[86]=t("label",{class:"block text-xs font-medium text-muted-foreground mb-1"},"Estado",-1)),c(t("select",{"onUpdate:modelValue":e[29]||(e[29]=r=>s(l).status=r),class:y(b)},[...e[85]||(e[85]=[t("option",{value:"active"},"Activo",-1),t("option",{value:"inactive"},"Inactivo",-1)])],512),[[W,s(l).status]])]),t("div",co,[t("label",xo,[c(t("input",{"onUpdate:modelValue":e[30]||(e[30]=r=>s(l).is_secure=r),type:"checkbox",class:"rounded"},null,512),[[B,s(l).is_secure]]),e[87]||(e[87]=u(" Usar SSL (HTTPS) ",-1))]),t("label",yo,[c(t("input",{"onUpdate:modelValue":e[31]||(e[31]=r=>s(l).is_default=r),type:"checkbox",class:"rounded"},null,512),[[B,s(l).is_default]]),e[88]||(e[88]=u(" Servidor por defecto ",-1))])])]),t("div",fo,[k.value?(i(),p("button",{key:0,t
1ype:"button",onClick:e[32]||(e[32]=r=>Z(k.value)),disabled:Q.value===k.value?.id,class:"inline-flex items-center gap-2 px-4 py-2 text-sm text-muted-foreground border border-border rounded-xl hover:text-foreground disabled:opacity-50 transition-colors"},[Q.value===k.value?.id?(i(),$(s(ne),{key:0,class:"w-4 h-4 animate-spin"})):(i(),$(s(le),{key:1,class:"w-4 h-4"})),e[89]||(e[89]=u(" Probar conexión ",-1))],8,bo)):m("",!0),k.value&&U.value[k.value.id]?(i(),p("div",{key:1,class:y(["text-xs px-3 py-2 rounded-lg",U.value[k.value.id].success?"bg-green-500/10 text-green-500":"bg-red-500/10 text-red-500"])},f(U.value[k.value.id].message),3)):m("",!0),t("div",go,[t("button",{type:"button",onClick:e[33]||(e[33]=r=>q.value=!1),class:"px-4 py-2 text-sm text-muted-foreground border border-border rounded-xl hover:text-foreground transition-colors"}," Cancelar "),t("button",{type:"submit",disabled:s(l).processing,class:"px-4 py-2 text-sm font-medium bg-primary text-primary-foreground rounded-xl hover:bg-primary/90 disabled:opacity-50 transition-colors"},f(s(l).processing?"Guardando":"Guardar cambios"),9,vo)])])],32)])])):m("",!0)]))]),_:1}))}});export{ms as default};

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.