UNPKG

@rewaa/event-broker

Version:

A broker for all the events that Rewaa will ever produce or consume

88 lines 3.06 kB
"use strict"; 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