UNPKG

actionhero

Version:

actionhero.js is a multi-transport API Server with integrated cluster capabilities and delayed tasks

92 lines (91 loc) 3.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Connections = void 0; const index_1 = require("../index"); class Connections extends index_1.Initializer { constructor() { super(); this.name = "connections"; this.loadPriority = 400; } async initialize(config) { index_1.api.connections = { connections: {}, middleware: {}, globalMiddleware: [], allowedVerbs: [ "quit", "exit", "documentation", "paramAdd", "paramDelete", "paramView", "paramsView", "paramsDelete", "roomAdd", "roomLeave", "roomView", "detailsView", "say", ], /** * Find a connection on any server in the cluster and call a method on it. */ apply: async (connectionId, method, args) => { return index_1.redis.doCluster("api.connections.applyResponder", [connectionId, method, args], connectionId, true); }, applyResponder: async (connectionId, method, args) => { const connection = index_1.api.connections.connections[connectionId]; if (!connection) { return; } if (method && args) { if (method === "sendMessage" || method === "sendFile") { await connection[method](args); } else { await connection[method].apply(connection, args); } } return index_1.api.connections.cleanConnection(connection); }, /** * Add a middleware component to connection handling. */ addMiddleware: (data) => { if (!data.name) { throw new Error("middleware.name is required"); } if (!data.priority) { data.priority = config.general.defaultMiddlewarePriority; } data.priority = Number(data.priority); index_1.api.connections.middleware[data.name] = data; index_1.api.connections.globalMiddleware.push(data.name); index_1.api.connections.globalMiddleware.sort((a, b) => { if (index_1.api.connections.middleware[a].priority > index_1.api.connections.middleware[b].priority) { return 1; } else { return -1; } }); }, cleanConnection: (connection) => { const clean = {}; for (const i in connection) { if (i !== "rawConnection" && i !== "api") { try { JSON.stringify(connection[i]); clean[i] = connection[i]; } catch (error) { } } } return clean; }, }; } } exports.Connections = Connections;