UNPKG

@xpresser/events-server

Version:

Xpresser's Official Events Server Plugin.

106 lines (105 loc) 3.97 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const object_collection_1 = __importDefault(require("object-collection")); class EventsServerDb { constructor($, isCommunicator = false) { Object.defineProperty(this, "$", { value: $, enumerable: false }); this.data = new object_collection_1.default({}); this.setupDb(isCommunicator); } serverDbPath() { return this.$.config.get("eventsServer.dbPaths.server"); } communicatorDbPath() { return this.$.config.get("eventsServer.dbPaths.communicator"); } setupDb(isCommunicator = false) { const $ = this.$; const serverDB = $.config.sync("eventsServer.dbPaths.server"); const accessDB = $.config.sync("eventsServer.dbPaths.access"); const communicatorDB = $.config.sync("eventsServer.dbPaths.communicator"); if (!$.engineData.has("eventsServerDbHasSetupPaths")) { serverDB.changeTo($.path.resolve(serverDB.sync)); accessDB.changeTo($.path.resolve(accessDB.sync)); communicatorDB.changeTo($.path.resolve(communicatorDB.sync)); $.file.makeDirIfNotExist(serverDB.sync, true); $.file.makeDirIfNotExist(accessDB.sync, true); $.file.makeDirIfNotExist(communicatorDB.sync, true); $.engineData.set("eventsServerDbHasSetupPaths", true); } if (isCommunicator && $.file.exists(communicatorDB.sync)) { this.data.replaceData($.file.readJson(communicatorDB.sync)); } if (!isCommunicator && $.file.exists(serverDB.sync)) { this.data.replaceData($.file.readJson(serverDB.sync)); } this.data.path(isCommunicator ? "pending" : "failed"); } recordPendingEvent(eventDetails, instantly = false) { const event = this.data.path("pending"); event.set(eventDetails.eventId, { event: eventDetails.event, args: eventDetails.args, added: new Date() }); return this.save(true, instantly); } recordFailedEvent(eventDetails, e) { const event = this.data.path("failed"); if (event.has(eventDetails.eventId)) { event.path(eventDetails.eventId).compute((event) => { // Increase Retries event.array("retries", true).push({ date: new Date(), error: { message: e.message, stack: e.stack } }); return event; }); } else { event.set(eventDetails.eventId, { event: eventDetails.event, args: eventDetails.args, added: new Date(), error: { message: e.message, stack: e.stack }, retries: [] }); } return this.save(); } markAsSuccessful(id) { this.failedEvents().unset(id); return this.save(); } failedEvents() { return this.data.path("failed"); } pendingEvents() { return this.data.path("pending"); } save(isCommunicator = false, instantly = false) { clearTimeout(this.saveTimeout); const $ = this.$; const isDev = $.config.get("env") === "development"; const pathToFile = isCommunicator ? this.communicatorDbPath() : this.serverDbPath(); const save = () => { $.file.saveToJson(pathToFile, this.data.all(), { checkIfFileExists: false, space: isDev ? 2 : 0 }); }; if (instantly) { save(); return this; } this.saveTimeout = setTimeout(save, isDev ? 1000 : 2000); return this; } } exports.default = EventsServerDb;