@axinom/mosaic-transactional-inbox-outbox
Version:
This library encapsulates the Mosaic based transactional inbox and outbox pattern
46 lines • 1.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getStoreOutboxMessage = exports.setupOutboxStorage = void 0;
const node_crypto_1 = require("node:crypto");
const pg_transactional_outbox_1 = require("pg-transactional-outbox");
const transactional_log_mapper_1 = require("../transactional-log-mapper");
const storeOutboxMessageKey = 'storeOutboxMessage';
/**
* Returns a function to store transactional outbox messages.
* See the StoreOutboxMessage type for parameter descriptions.
*/
const setupOutboxStorage = (listenerConfig, logger, config, app) => {
const storage = (0, pg_transactional_outbox_1.initializeMessageStorage)(listenerConfig, new transactional_log_mapper_1.TransactionalLogMapper(logger, config.logLevel));
const storeOutboxMessage = async (aggregateId, { aggregateType, messageType, action, }, payload, client, { envelopeOverrides, options, concurrency, lockedUntil, segment, } = {}) => {
const metadata = {
envelopeOverrides,
options,
action,
};
const message = {
id: (0, node_crypto_1.randomUUID)(),
aggregateId,
payload,
aggregateType,
messageType,
metadata,
concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : 'parallel',
lockedUntil,
segment,
};
await storage(message, client);
};
if (app) {
app.set(storeOutboxMessageKey, storeOutboxMessage);
}
return storeOutboxMessage;
};
exports.setupOutboxStorage = setupOutboxStorage;
/**
* Retrieve the storeOutboxMessage instance from the MessagingRegistry
* @param app
* @returns
*/
const getStoreOutboxMessage = (app) => app.get(storeOutboxMessageKey);
exports.getStoreOutboxMessage = getStoreOutboxMessage;
//# sourceMappingURL=setup-outbox-storage.js.map