@suissa/universal-queues
Version:
Factory universal para mensageria (RabbitMQ, Kafka, SQS) para sistemas distribuídos.
39 lines • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FallbackMessage = FallbackMessage;
// src/core/fallback.ts
const envelope_1 = require("./envelope");
/**
* Decorator agnóstico de mensageria.
* - Enriquece headers (x-event-id, x-event-hash, x-origin)
* - Em erro, chama `this.__runFallback(mode, ctx)` (o driver implementa)
* - Por padrão relança o erro; o driver pode escolher resolver no fallback
*/
function FallbackMessage(mode = 'DLQ') {
return function (_target, _prop, descriptor) {
const original = descriptor.value;
descriptor.value = async function (exchangeOrTopic, routingKeyOrSubject, message, headers = {}) {
const env = (0, envelope_1.enrichHeaders)(exchangeOrTopic, routingKeyOrSubject, message, headers);
try {
return await original.apply(this, [exchangeOrTopic, routingKeyOrSubject, message, env.headers]);
}
catch (error) {
const run = this.__runFallback;
if (typeof run === 'function') {
const ret = await run(mode, {
headers: env.headers,
route: { exchange: exchangeOrTopic, routingKey: routingKeyOrSubject, topic: exchangeOrTopic, subject: routingKeyOrSubject },
payload: message,
error
});
// Se o driver optar por "resolver" no fallback, o retorno sobe
if (ret !== undefined)
return ret;
}
throw error;
}
};
return descriptor;
};
}
//# sourceMappingURL=fallback.js.map