UNPKG

@xpresser/events-server

Version:

Xpresser's Official Events Server Plugin.

119 lines (118 loc) 4.97 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _EventsServerCommunicator_secretKey; const net_1 = require("net"); const functions_1 = require("./functions"); const EventsServerDb_1 = __importDefault(require("./EventsServerDb")); const nanoid_1 = require("nanoid"); const PlaneSocket_1 = __importDefault(require("./PlaneSocket")); class EventsServerCommunicator { constructor(secretKey, $, name) { _EventsServerCommunicator_secretKey.set(this, void 0); this.isConnected = false; if (!secretKey) $.logErrorAndExit("secretKey is required"); // Set Secret Key __classPrivateFieldSet(this, _EventsServerCommunicator_secretKey, (0, functions_1.md5)(secretKey), "f"); // Set Db this.db = new EventsServerDb_1.default($, true); // set name if provided if (name) this.name = name; // Set xpr instance. this.$ = $; } connect(onAuthorized, onError) { const $ = this.$; const port = $.config.get("eventsServer.port"); const server = $.config.get("eventsServer.server"); const keepAlive = $.config.get("eventsServer.keepAlive"); const ps = new PlaneSocket_1.default(() => { const socket = (0, net_1.connect)({ port, host: server }); socket.on("connect", () => { ps.emit("Authorize", { secretKey: __classPrivateFieldGet(this, _EventsServerCommunicator_secretKey, "f"), name: this.name }); }); socket.on("error", (err) => { this.isConnected = false; if (onError) onError(err); if (!$.options.isConsole) { $.logError(`Failed to connect to EventsServer @ port: ${port}`); } }); socket.on("end", () => { this.isConnected = false; $.logWarning(`Disconnected from Events Server @ ${(0, functions_1.now)()}`); // socket.offAny(); }); return socket; }); if (keepAlive) { ps.$keepAlive(); } ps.on(`Authorized:${__classPrivateFieldGet(this, _EventsServerCommunicator_secretKey, "f")}`, () => { this.isConnected = true; if (onAuthorized) onAuthorized(); if (!$.options.isConsole) { $.logInfo(`Connected to Events Server @ (${port})`); } }); ps.on(`RemoveFromPending:${__classPrivateFieldGet(this, _EventsServerCommunicator_secretKey, "f")}`, (id) => { const pendingEvents = this.db.pendingEvents(); if (!pendingEvents.has(id)) return this; this.db.pendingEvents().unset(id); return this.db.save(true); }); Object.defineProperty(this, "socket", { value: ps, enumerable: false, writable: false }); ps.$setupListeners(); } emit(event, ...args) { if (this.isConnected) { return this.socket.emit(event, ...args); } else { this.db.recordPendingEvent({ event, eventId: (0, nanoid_1.nanoid)(10), args }); } } push(event, ...args) { this.db.recordPendingEvent({ event, eventId: (0, nanoid_1.nanoid)(10), args }, true); return this; } retryFailedEvents() { if (this.isConnected) { this.emit("$retryFailedEvents"); } } failedEvents() { return this.db.failedEvents(); } } _EventsServerCommunicator_secretKey = new WeakMap(); module.exports = EventsServerCommunicator;