@xpresser/events-server
Version:
Xpresser's Official Events Server Plugin.
106 lines (105 loc) • 3.97 kB
JavaScript
"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;