PageSourceSearch

https://manypage.id/assets/VirtualMachine.0f506eef.js

js manypage.id collected 2026-09-24 11:43:11 UTC 15,387 bytes, 1 lines download raw bytes

1import{k as V,r as G,m as J,q as X,aA as Z,o as l,e as r,f as t,h as w,i as f,F as p,g as v,v as tt,j as et,O as k,t as o,n as x,a as st,z as B,E as U,H as nt,G as it}from"./index.c64e4218.js";async function ot(g,C){return V.get("/admin/virtual-machine",{page:g,limit:C})}async function at(){return V.post("/admin/virtual-machine/whatsapp-unofficial")}async function lt(g){return V.post(`/admin/virtual-machine/whatsapp-unofficial/${g}`)}const rt={class:"min-h-screen w-full bg-slate-50/70 py-6"},dt={class:"container mx-auto grid gap-6 px-4 lg:px-10"},ct={class:"overflow-hidden rounded-[28px] border border-emerald-100 bg-gradient-to-br from-white via-emerald-50 to-sky-50 p-6 text-slate-900 shadow-sm lg:p-8"},ut={class:"flex flex-col gap-5 lg:flex-row lg:items-end lg:justify-between"},xt=t("div",null,[t("div",{class:"mb-3 inline-flex items-center gap-2 rounded-full bg-emerald-100 px-3 py-1 text-xs font-black text-emerald-700 ring-1 ring-emerald-200"},[t("span",{class:"h-2 w-2 rounded-full bg-emerald-400"}),w(" Realtime VM Monitoring ")]),t("h1",{class:"text-3xl font-black tracking-tight lg:text-4xl"}," List VM "),t("p",{class:"mt-2 max-w-2xl text-sm font-medium text-slate-600"}," Pantau kuota, koneksi WhatsApp, dan kondisi tiap IP dalam satu dashboard yang lebih rapi untuk banyak VM. ")],-1),ht={class:"flex flex-wrap items-center gap-3"},_t={key:0,class:"inline-flex items-center gap-2 rounded-full bg-white px-4 py-2 text-xs font-semibold text-slate-600 ring-1 ring-slate-200"},ft=t("i",{class:"bi bi-arrow-repeat animate-spin"},null,-1),gt=t("i",{class:"bi bi-plus-lg"},null,-1),bt={class:"mt-7 grid gap-3 sm:grid-cols-2 xl:grid-cols-4"},mt={class:"flex items-center justify-between gap-3"},pt={class:"text-xs font-black uppercase tracking-wide text-slate-500"},vt={class:"mt-2 text-3xl font-black text-slate-950"},kt={key:0,class:"rounded-3xl bg-white p-12 shadow-sm"},wt={key:1,class:"grid gap-6"},yt={class:"border-b border-slate-100 p-5 lg:p-6"},Rt={class:"flex flex-col gap-5 xl:flex-row xl:items-center xl:justify-between"},Mt={class:"flex items-start gap-4"},Vt={class:"flex h-14 w-14 shrink-0 items-center justify-center rounded-2xl bg-slate-950 text-white shadow-lg shadow-slate-200"},Ct={class:"text-xl font-black text-slate-900"},St={class:"mt-1 text-sm text-slate-500"},Tt={class:"mt-3 h-2 w-64 max-w-full overflow-hidden rounded-full bg-slate-100"},At={class:"grid grid-cols-2 gap-2 sm:grid-cols-4 xl:min-w-[520px]"},Lt={class:"rounded-2xl bg-slate-50 p-3"},It=t("div",{class:"text-xs font-semibold text-slate-500"}," Nomor ",-1),Pt={class:"mt-1 text-2xl font-black text-slate-900"},Et={class:"rounded-2xl bg-emerald-50 p-3 text-emerald-700"},jt=t("div",{class:"text-xs font-semibold"}," Connected ",-1),Bt={class:"mt-1 text-2xl font-black"},Ut={class:"rounded-2xl bg-amber-50 p-3 text-amber-700"},Dt=t("div",{class:"text-xs font-semibold"}," Reconnect ",-1),Ft={class:"mt-1 text-2xl font-black"},Ht={class:"rounded-2xl bg-rose-50 p-3 text-rose-700"},zt=t("div",{class:"text-xs font-semibold"}," Offline ",-1),Ot={class:"mt-1 text-2xl font-black"},Wt={key:0,class:"mt-5 grid gap-3 lg:grid-cols-[1fr_190px]"},Nt={class:"relative block"},qt=t("i",{class:"bi bi-search absolute left-4 top-1/2 -translate-y-1/2 text-slate-400"},null,-1),Kt=t("option",{value:"all"}," Semua Status ",-1),Qt=t("option",{value:"connected"}," Connected ",-1),$t=t("option",{value:"reconnecting"}," Reconnect ",-1),Yt=t("option",{value:"disconnected"}," Offline ",-1),Gt=[Kt,Qt,$t,Yt],Jt={class:"grid gap-4 p-5 lg:p-6"},Xt={key:0,class:"rounded-2xl border border-dashed border-slate-200 bg-slate-50 p-8 text-center text-sm text-slate-500"},Zt={class:"flex flex-col gap-4 border-b border-slate-100 bg-slate-50/70 p-4 lg:flex-row lg:items-center lg:justify-between"},te={class:"flex min-w-0 items-center gap-3"},ee={class:"min-w-0"},se={class:"flex flex-wrap items-center gap-2"},ne={class:"truncate text-lg font-black text-slate-900"},ie={class:"mt-1 text-xs text-slate-500"},oe={class:"flex flex-wrap items-center gap-3"},ae={class:"min-w-[150px]"},le={class:"mb-1 flex justify-between text-xs font-semibold text-slate-500"},re=t("span",null,"Kuota",-1),de={class:"h-2 overflow-hidden rounded-full bg-slate-200"},ce={class:"grid grid-cols-3 gap-2 text-center text-xs"},ue={class:"rounded-xl bg-emerald-50 px-3 py-2 text-emerald-700"},xe={class:"font-black text-base"},he=t("div",null,"On",-1),_e={class:"rounded-xl bg-amber-50 px-3 py-2 text-amber-700"},fe={class:"font-black text-base"},ge=t("div",null,"Rec",-1),be={class:"rounded-xl bg-rose-50 px-3 py-2 text-rose-700"},me={class:"font-black text-base"},pe=t("div",null,"Off",-1),ve=["onClick"],ke=t("i",{class:"bi bi-arrow-clockwise"},null,-1),we={key:0,class:"p-4"},ye=t("div",{class:"mb-3 flex items-center justify-between gap-3"},[t("div",null,[t("div",{class:"text-sm font-black text-slate-800"}," Monitoring nomor per VM "),t("div",{class:"text-xs text-slate-500"}," Ringkas untuk scan cepat, detail error tetap terlihat saat ada disconnect. ")
1])],-1),Re={key:0,class:"rounded-2xl border border-dashed border-slate-200 bg-slate-50 p-6 text-center text-sm text-slate-500"},Me={key:1,class:"grid gap-3 xl:grid-cols-2"},Ve={class:"flex flex-wrap justify-between gap-3"},Ce={class:"min-w-0"},Se={class:"truncate font-black text-slate-900"},Te={class:"mt-1 text-slate-600"},Ae={class:"truncate text-xs text-slate-400"},Le={class:"mt-4 grid gap-2 text-xs text-slate-600 sm:grid-cols-2"},Ie={class:"rounded-xl bg-white p-2"},Pe=t("div",{class:"text-slate-400"}," Heartbeat ",-1),Ee={class:"font-semibold text-slate-700"},je={class:"rounded-xl bg-white p-2"},Be=t("div",{class:"text-slate-400"}," Reconnect attempt ",-1),Ue={class:"font-semibold text-slate-700"},De={class:"rounded-xl bg-white p-2"},Fe=t("div",{class:"text-slate-400"}," Connected ",-1),He={class:"font-semibold text-slate-700"},ze={class:"rounded-xl bg-white p-2"},Oe=t("div",{class:"text-slate-400"}," Last reconnect ",-1),We={class:"font-semibold text-slate-700"},Ne={class:"rounded-xl bg-white p-2"},qe=t("div",{class:"text-slate-400"}," Disconnected ",-1),Ke={class:"font-semibold text-slate-700"},Qe={class:"rounded-xl bg-white p-2"},$e=t("div",{class:"text-slate-400"}," Result ",-1),Ye={class:"font-semibold text-slate-700"},Ge={key:0,class:"mt-3 rounded-2xl border border-rose-100 bg-rose-50 p-3 text-xs text-rose-700"},Je=t("div",{class:"mb-1 font-black"}," Penyebab disconnect ",-1),Xe={class:"break-words"},ts={__name:"VirtualMachine",setup(g){let y=null;const a=G({virtualMachines:[],isLoading:!1,isRefreshing:!1,search:"",statusFilter:"all"}),D=J(()=>{const e=a.virtualMachines.map(i=>{var d;return((d=i.virtualMachines)==null?void 0:d.length)||0}).reduce((i,d)=>i+d,0),s=a.virtualMachines.map(i=>i.totalUsage||0).reduce((i,d)=>i+d,0),n=a.virtualMachines.map(i=>h(i,"connected")).reduce((i,d)=>i+d,0),c=a.virtualMachines.map(i=>h(i,"disconnected")).reduce((i,d)=>i+d,0);return[{label:"Total IP",value:e,icon:"bi-hdd-network",iconClass:"bg-sky-100 text-sky-700"},{label:"Kuota Terpakai",value:s,icon:"bi-speedometer2",iconClass:"bg-emerald-100 text-emerald-700"},{label:"Connected",value:n,icon:"bi-check-circle",iconClass:"bg-green-100 text-green-700"},{label:"Offline",value:c,icon:"bi-exclamation-triangle",iconClass:"bg-rose-100 text-rose-700"}]});async function S({silent:e=!1}={}){e?a.isRefreshing=!0:a.isLoading=!0;try{const{data:s}=await ot();a.virtualMachines=s.docs}catch{console.error("error load virtual machine")}a.isLoading=!1,a.isRefreshing=!1}function F(e){return e==="whatsapp-unofficial"?"WhatsApp Unofficial":e==="telegram"?"Telegram":e||"Virtual Machine"}function T(e){var s;return(((s=e.virtualMachines)==null?void 0:s.length)||0)*(e.limit||0)}function H(e){const s=T(e);return s?Math.min(Math.round((e.totalUsage||0)/s*100),100):0}function A(e,s){return s?Math.min(Math.round((e.currentUsage||0)/s*100),100):0}function z(e,s){const n=A(e,s);return n>=90?"bg-rose-500":n>=70?"bg-amber-500":"bg-emerald-500"}function h(e,s){return e.virtualMachines.map(n=>{var c;return((c=n.monitoring)==null?void 0:c[s])||0}).reduce((n,c)=>n+c,0)}function L(e){return(e.virtualMachines||[]).map(s=>({...s,channels:b(s)})).filter(s=>{var d;const n=_(a.search),c=_(s.ipPublic).includes(n),i=(d=s.channels)==null?void 0:d.length;return!n&&a.statusFilter==="all"?!0:c||i})}function b(e){const s=_(a.search);return(e.channels||[]).filter(n=>{const c=a.statusFilter==="all"||O(n)===a.statusFilter,i=!s||[e.ipPublic,n.name,n.phone,n.channelId,n.ownerEmail].some(d=>_(d).includes(s));return c&&i})}function O(e){return e.status||"unknown"}function W(e){return R(e)?"Scan QR ulang":e.status==="reconnecting"?"Reconnect":e.status==="connected"?"Connected":e.status==="disconnected"?"Offline":e.status||"Unknown"}function N(e){return R(e)?"bg-violet-100 text-violet-700":e.status==="reconnecting"?"bg-amber-100 text-amber-700":e.status==="connected"?"bg-emerald-100 text-emerald-700":e.status==="disconnected"?"bg-rose-100 text-rose-700":"bg-slate-100 text-slate-600"}function I(e){return R(e)?"Harus scan QR ulang di WhatsApp Linked Devices.":q(e.disconnectReason)?"":e.disconnectReason}function R(e){return _(e.disconnectReason).includes("client has no device jid / qr authorization required")}function q(e){return _(e).includes("heartbeat dari whatsapp engine berhenti / stale")}function M(e){var c;const s=e.monitoring||{},n=s.total||((c=e.channels)==null?void 0:c.length)||0;return n?(s.connected||0)===n?"Sehat":(s.connected||0)>0?"Sebagian aktif":(s.reconnecting||0)>0?"Reconnect":"Perlu QR / Offline":"Kosong"}function K(e){const s=M(e);return s==="Sehat"?"bg-emerald-100 text-emerald-700":s==="Sebagian aktif"?"bg-sky-100 text-sky-700":s==="Reconnect"?"bg-amber-100 text-amber-700":s==="Kosong"?"bg-slate-100 text-slate-600":"bg-rose-100 text-rose-700"}function Q(e){const s=M(e);return s==="Sehat"?"bg-emerald-500":s==="Sebagian aktif"?"bg-sky-500":s==="Reconnect"?"bg-amber-500":s==="Kosong"?"bg-slate-400":"bg-rose-500"}function _(e){return String(e||"").toLowerCase().trim()}
1function m(e){return e?new Date(e).toLocaleString("id-ID"):"-"}async function $(){const{isConfirmed:e}=await k.confirm({title:"Anda yakin?",text:"Virtual Machine WhatsApp akan ditambahkan, aksi ini tidak dapat dibatalkan",confirmButtonText:"Ya, Tambahkan",cancelButtonText:"Tidak, Batalkan"});e&&(at(),k.alert({icon:"success",title:"Dalam Proses",text:"Virtual Machine sedang ditambahkan dan dalam proses inisiasi"}))}async function Y(e){const{isConfirmed:s}=await k.confirm({title:"Anda yakin?",text:"Virtual Machine WhatsApp akan di inisiasi ulang, aksi ini tidak dapat dibatalkan",confirmButtonText:"Ya, Lanjutkan",cancelButtonText:"Tidak, Batalkan"});s&&(lt(e),k.alert({icon:"success",title:"Dalam Proses",text:"Virtual Machine sedang proses inisiasi ulang"}))}return X(()=>{S(),y=setInterval(()=>{S({silent:!0})},5e3)}),Z(()=>{y&&clearInterval(y)}),(e,s)=>(l(),r("div",rt,[t("div",dt,[t("div",ct,[t("div",ut,[xt,t("div",ht,[a.isRefreshing?(l(),r("div",_t,[ft,w(" Sinkronisasi data... ")])):f("",!0),t("button",{class:"btn border-0 bg-emerald-400 text-slate-950 hover:bg-emerald-300",onClick:$},[gt,w(" Tambah VM WhatsApp ")])])]),t("div",bt,[(l(!0),r(p,null,v(tt(D),n=>(l(),r("div",{key:n.label,class:"rounded-2xl bg-white p-4 shadow-sm ring-1 ring-slate-200"},[t("div",mt,[t("div",null,[t("div",pt,o(n.label),1),t("div",vt,o(n.value),1)]),t("div",{class:x(["flex h-11 w-11 items-center justify-center rounded-2xl",n.iconClass])},[t("i",{class:x(["bi text-xl",n.icon])},null,2)],2)])]))),128))])]),a.isLoading?(l(),r("div",kt,[et(st,{size:"mini"})])):(l(),r("div",wt,[(l(!0),r(p,null,v(a.virtualMachines,n=>{var c;return l(),r("div",{key:n.type,class:"overflow-hidden rounded-[28px] border border-slate-200 bg-white shadow-sm"},[t("div",yt,[t("div",Rt,[t("div",Mt,[t("div",Vt,[t("i",{class:x(["bi text-3xl",{"bi-whatsapp text-emerald-300":n.type=="whatsapp-unofficial","bi-telegram text-sky-300":n.type=="telegram"}])},null,2)]),t("div",null,[t("div",Ct,o(F(n.type)),1),t("div",St,o(((c=n.virtualMachines)==null?void 0:c.length)||0)+" IP aktif \xB7 "+o(n.totalUsage)+" / "+o(T(n))+" kuota terpakai ",1),t("div",Tt,[t("div",{class:"h-full rounded-full bg-gradient-to-r from-emerald-400 to-sky-400",style:B({width:`${H(n)}%`})},null,4)])])]),t("div",At,[t("div",Lt,[It,t("div",Pt,o(h(n,"total")),1)]),t("div",Et,[jt,t("div",Bt,o(h(n,"connected")),1)]),t("div",Ut,[Dt,t("div",Ft,o(h(n,"reconnecting")),1)]),t("div",Ht,[zt,t("div",Ot,o(h(n,"disconnected")),1)])])]),n.type=="whatsapp-unofficial"?(l(),r("div",Wt,[t("label",Nt,[qt,U(t("input",{"onUpdate:modelValue":s[0]||(s[0]=i=>a.search=i),class:"input input-bordered w-full rounded-2xl border-slate-200 bg-slate-50 pl-11 focus:border-emerald-400",placeholder:"Cari IP, nama, nomor, atau email...",type:"text"},null,512),[[nt,a.search]])]),U(t("select",{"onUpdate:modelValue":s[1]||(s[1]=i=>a.statusFilter=i),class:"select select-bordered rounded-2xl border-slate-200 bg-slate-50"},Gt,512),[[it,a.statusFilter]])])):f("",!0)]),t("div",Jt,[L(n).length?f("",!0):(l(),r("div",Xt," Tidak ada VM atau nomor yang cocok dengan filter. ")),(l(!0),r(p,null,v(L(n),i=>{var d,P,E,j;return l(),r("div",{key:i._id,class:"overflow-hidden rounded-3xl border border-slate-200 bg-white shadow-sm"},[t("div",Zt,[t("div",te,[t("div",{class:x(["h-3 w-3 shrink-0 rounded-full",Q(i)])},null,2),t("div",ee,[t("div",se,[t("div",ne,o(i.ipPublic||"IP belum tersedia"),1),t("span",{class:x(["rounded-full px-3 py-1 text-xs font-bold",K(i)])},o(M(i)),3)]),t("div",ie,o(b(i).length)+" nomor tampil \xB7 "+o(((d=i.channels)==null?void 0:d.length)||0)+" nomor total ",1)])]),t("div",oe,[t("div",ae,[t("div",le,[re,t("span",null,o(i.currentUsage)+" / "+o(n.limit),1)]),t("div",de,[t("div",{class:x(["h-full rounded-full",z(i,n.limit)]),style:B({width:`${A(i,n.limit)}%`})},null,6)])]),t("div",ce,[t("div",ue,[t("div",xe,o(((P=i.monitoring)==null?void 0:P.connected)||0),1),he]),t("div",_e,[t("div",fe,o(((E=i.monitoring)==null?void 0:E.reconnecting)||0),1),ge]),t("div",be,[t("div",me,o(((j=i.monitoring)==null?void 0:j.disconnected)||0),1),pe])]),n.type=="whatsapp-unofficial"?(l(),r("button",{key:0,class:"btn btn-sm rounded-xl border-slate-200 bg-white text-slate-700 hover:bg-slate-100",title:"Inisiasi ulang VM",onClick:u=>Y(i._id)},[ke,w(" Reinit ")],8,ve)):f("",!0)])]),n.type=="whatsapp-unofficial"?(l(),r("div",we,[ye,b(i).length?(l(),r("div",Me,[(l(!0),r(p,null,v(b(i),u=>(l(),r("div",{key:u._id,class:"rounded-2xl border border-slate-100 bg-slate-50/80 p-4 text-sm transition hover:border-slate-200 hover:bg-white hover:shadow-sm"},[t("div",Ve,[t("div",Ce,[t("div",Se,o(u.name||"-"),1),t("div",Te,o(u.phone||u.channelId||"-"),1),t("div",Ae,o(u.ownerEmail||"-"),1)]),t("div",{class:x(["h-fit roun
1ded-full px-3 py-1 text-xs font-black",N(u)])},o(W(u)),3)]),t("div",Le,[t("div",Ie,[Pe,t("div",Ee,o(m(u.lastHeartbeatAt)),1)]),t("div",je,[Be,t("div",Ue,o(u.reconnectAttempt||0),1)]),t("div",De,[Fe,t("div",He,o(m(u.lastConnectedAt)),1)]),t("div",ze,[Oe,t("div",We,o(m(u.lastReconnectAttemptAt)),1)]),t("div",Ne,[qe,t("div",Ke,o(m(u.lastDisconnectedAt)),1)]),t("div",Qe,[$e,t("div",Ye,o(u.lastReconnectResult||"-"),1)])]),I(u)?(l(),r("div",Ge,[Je,t("div",Xe,o(I(u)),1)])):f("",!0)]))),128))])):(l(),r("div",Re," Belum ada nomor pada VM ini atau tidak cocok dengan filter. "))])):f("",!0)])}),128))])])}),128))]))])]))}};export{ts 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.