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.61 kB
JavaScript
import e from"fs";import o from"path";import{fileURLToPath as s}from"url";import*as n from"./shared.mjs";import{isSnapshot as i,version as r}from"../../lib/resolve-version.mjs";const t=o.dirname(s(import.meta.url)),c=o.join(t,"request"),d=new Set;for(const s of e.readdirSync(c,{withFileTypes:!0}))if(s.isDirectory())for(const n of e.readdirSync(o.join(c,s.name),{withFileTypes:!0}))n.isFile()&&n.name.endsWith(".mjs")&&d.add(`${s.name}/${n.name.slice(0,-4)}`);console.info(`socket.io discovered ${d.size} request handlers:`,[...d].sort().join(", "));export default e=>{e.on("connect",function(o){o.p3xrs={address:o.handshake.headers.origin,connectedAt:new Date,connectionId:void 0,io:e,ioredis:void 0,ioredisSubscriber:void 0,tunnels:[],sshClient:void 0,readonly:void 0,subsciber:!1},console.info(`socket.io connected ${o.id}`),o.on("disconnect",function(){if(console.warn("socket.p3xrs.connectionId",o.p3xrs.connectionId),void 0!==o.p3xrs.connectionId){const e=o.p3xrs.connectionId;if(p3xrs.redisConnections.hasOwnProperty(e)){const s=p3xrs.redisConnections[e].clients.indexOf(o.id);-1!==s&&p3xrs.redisConnections[e].clients.splice(s,1),0===p3xrs.redisConnections[e].clients.length&&delete p3xrs.redisConnections[e],n.disconnectRedisIo({socket:o})}}if(o.p3xrs.ioredisMonitor){for(const e of o.p3xrs.ioredisMonitor)try{e.disconnect()}catch{}o.p3xrs.ioredisMonitor=void 0}console.info("socket.io disconnected %s",o.id),n.sendStatus({socket:o}),n.disconnectRedis({socket:o})}),o.on("p3xr-request",e=>{e.socket=o,e.responseEvent=`p3xr-response-${e.requestId}`,e?.action&&"string"==typeof e.action&&d.has(e.action)?import(`./request/${e.action}.mjs`).then(o=>o.default(e)).catch(s=>{console.error("failed to load request handler",e.action,s),o.emit(e.responseEvent,{status:"error",error:s.message})}):console.warn("trying bad action socket.on p3xr-request with options",e)});let s=[":","/","|","-","@"];p3xrs.cfg.hasOwnProperty("treeDividers")&&Array.isArray(p3xrs.cfg.treeDividers)&&(s=p3xrs.cfg.treeDividers),o.emit("configuration",{readonlyConnections:!0===p3xrs.cfg.readonlyConnections,snapshot:i,treeDividers:s,version:r,hasGroqApiKey:!!(p3xrs.cfg.groqApiKey&&p3xrs.cfg.groqApiKey.startsWith("gsk_")&&p3xrs.cfg.groqApiKey.length>20),groqApiKeyMasked:p3xrs.cfg.groqApiKey&&p3xrs.cfg.groqApiKey.length>8?`${p3xrs.cfg.groqApiKey.slice(0,4)}...${p3xrs.cfg.groqApiKey.slice(-4)}`:"",groqApiKeyReadonly:!0===p3xrs.cfg.groqApiKeyReadonly,aiEnabled:!1!==p3xrs.cfg.aiEnabled,aiUseOwnKey:!0===p3xrs.cfg.aiUseOwnKey,groqMaxTokens:p3xrs.cfg.groqMaxTokens||16384}),n.sendStatus({socket:o}),n.sendConnections({socket:o})})};