UNPKG

p3x-redis-ui-server

Version:

🏍️ P3X Redis UI server — Socket.IO backend for the dual Angular + React frontend with AI queries, 54 languages, and auto data decompression

2 lines (1 loc) 2.73 kB
import s from"../../../../lib/ioredis-cluster/index.mjs";export default async e=>{const{socket:r}=e;try{let t=e.payload.model;const o=p3xrs.connections.list.find(s=>t.id===s.id);void 0!==o&&(t.password===o.id&&(t.password=o.password),t.tlsCrt===o.id&&(t.tlsCrt=o.tlsCrt),t.tlsKey===o.id&&(t.tlsKey=o.tlsKey),t.tlsCa===o.id&&(t.tlsCa=o.tlsCa),t.sshPassword===o.id&&(t.sshPassword=o.sshPassword),t.sshPrivateKey===o.id&&(t.sshPrivateKey=o.sshPrivateKey));const n=t.sentinelName;delete t.name,delete t.id,t.tlsWithoutCert?t.tls={servername:t.host}:"string"==typeof t.tlsCa&&""!==t.tlsCa.trim()&&(t.tls={cert:t.tlsCrt,key:t.tlsKey,ca:t.tlsCa,servername:t.host}),t.hasOwnProperty("tls")&&(t.tls.rejectUnauthorized=void 0!==t.tlsRejectUnauthorized&&t.tlsRejectUnauthorized,t.tls.hasOwnProperty("servername")||(t.tls.servername=t.host)),Array.isArray(t.nodes)&&(t.nodes=t.nodes.map(s=>{if(void 0!==o&&s.password===s.id){const e=o.nodes.find(e=>e.id===s.password);e&&(s.password=e.password)}return s}));let a,i,d,l,c=[],p=!1,h=!1;const u=()=>{for(const s of c)s.close();c=[],a&&(a.end(),a=void 0)},m=s=>{p||(p=!0,l&&(clearTimeout(l),l=void 0),r.emit(e.responseEvent,s),i&&(i.disconnect(),i=void 0),u())};if(!0===t.ssh){const{createTunnel:s}=await import("tunnel-ssh"),e=await import("net"),r={host:t.sshHost,port:t.sshPort,username:t.sshUsername};t.sshPrivateKey?r.privateKey=t.sshPrivateKey:r.password=t.sshPassword;let[o,n]=await s({autoClose:!1},null,r,{dstAddr:t.host,dstPort:t.port});if(c.push(o),a=n,t.port=o.address().port,Array.isArray(t.nodes))for(const s of t.nodes){const r=await new Promise((r,t)=>{const o=e.createServer(e=>{a.forwardOut("127.0.0.1",0,s.host||"localhost",s.port,(s,r)=>{s?e.end():e.pipe(r).pipe(e)})});o.listen(0,"127.0.0.1",()=>r(o)),o.on("error",t)});c.push(r),s.port=r.address().port}a.on("error",s=>{console.error("ssh client error",s),m({status:"error",error:s.message})});for(const s of c)s.on("error",s=>{console.error("ssh tunnel server error",s),m({status:"error",error:s.message})})}(t.hasOwnProperty("sentinel")&&!0===t.sentinel||!0===t.cluster)&&(t=[t].concat(t.nodes||[])),Array.isArray(t)&&t[0].hasOwnProperty("sentinel")&&!0===t[0].sentinel&&(t={sentinels:t,name:n,sentinelPassword:t[0].password,sentinelRetryStrategy:()=>!1}),i=new s(t),i.on("error",function(s){d=s,console.error(s)}),i.on("ready",function(){h=!0,m({status:"ok"})}),i.on("close",function(){h||m({status:"error",error:d?.message||"Connection is closed."})}),i.on("end",function(){h||m({status:"error",error:d?.message||"Connection is closed."})}),l=setTimeout(()=>{m({status:"error",error:d?.message||"No response from server"})},3e4)}catch(s){console.error(s),r.emit(e.responseEvent,{status:"error",error:s.message})}};