@rewaa/event-broker
Version:
A broker for all the events that Rewaa will ever produce or consume
88 lines • 3.06 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Outbox = void 0;
const types_1 = require("./types");
const ulid_1 = require("ulid");
class Outbox {
constructor(config) {
this.config = config;
}
async updateEvents(events) {
return await this.config.save({
events,
config: {},
});
}
handleEvent(event, errorReason) {
if (!this.config) {
throw new Error("Outbox config is not configured");
}
const clonedEvent = structuredClone(event);
if (errorReason) {
clonedEvent.status = types_1.OutboxEventStatus.Error;
clonedEvent.error = errorReason;
}
else {
clonedEvent.status = types_1.OutboxEventStatus.Processed;
}
return clonedEvent;
}
handleBatchEvent(event, response, errorReason) {
const clonedEvent = structuredClone(event);
if (errorReason) {
clonedEvent.status = types_1.OutboxEventStatus.Error;
clonedEvent.error = errorReason;
}
else {
if (response.length === 0) {
clonedEvent.status = types_1.OutboxEventStatus.Processed;
}
else if (response.length === clonedEvent.payload.length) {
clonedEvent.status = types_1.OutboxEventStatus.Failed;
}
else {
clonedEvent.status = types_1.OutboxEventStatus.PartiallyProcessed;
}
clonedEvent.failureResponse = response.map((failedMessage) => ({
id: failedMessage.id,
code: failedMessage.code,
message: failedMessage.message,
}));
}
return clonedEvent;
}
async createEvent(eventName, options, payload, isBatch = false) {
const { outboxData: _outboxData } = options, emitOptions = __rest(options, ["outboxData"]);
const outboxEvent = {
topicName: eventName,
id: (0, ulid_1.ulid)(),
payload,
options: emitOptions,
isBatch,
failureResponse: [],
error: null,
status: types_1.OutboxEventStatus.Pending,
};
await this.config.save({
events: [outboxEvent],
config: options.outboxData,
});
return outboxEvent;
}
async getOutboxEvents(ids) {
return await this.config.getOutboxEvents(ids);
}
}
exports.Outbox = Outbox;
//# sourceMappingURL=outbox.sqns.js.map