actionhero
Version:
actionhero.js is a multi-transport API Server with integrated cluster capabilities and delayed tasks
92 lines (91 loc) • 3.38 kB
JavaScript
;
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;