UNPKG

@message-in-the-middle/core

Version:

Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.

101 lines 4.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createQueuePipeline = createQueuePipeline; const manager_1 = require("./manager"); const dispatcher_1 = require("./dispatcher"); const json_middleware_1 = require("./middlewares/json.middleware"); const logging_middleware_1 = require("./middlewares/logging.middleware"); const retry_middleware_1 = require("./middlewares/retry.middleware"); const deduplication_middleware_1 = require("./middlewares/deduplication.middleware"); const metrics_middleware_1 = require("./middlewares/metrics.middleware"); const validators_1 = require("./validators"); function createValidatorFromValidation(validation) { if (typeof validation === 'function') { const { ValidateInboundMiddleware } = require('./middlewares/validation.middleware'); return new ValidateInboundMiddleware(validation); } if (typeof validation === 'object' && validation !== null) { const schema = validation; if (schema._def && typeof schema.parseAsync === 'function') { return (0, validators_1.createZodValidator)(schema); } if (schema.isJoi || (schema.$__ && schema.$__.joi)) { return (0, validators_1.createJoiValidator)(schema); } if (schema.__isYupSchema__ || (schema.type && typeof schema.validate === 'function')) { return (0, validators_1.createYupValidator)(schema); } if (schema.type && !schema._def && !schema.isJoi && !schema.__isYupSchema__) { return (0, validators_1.createAjvValidator)(schema); } throw new Error('Unable to detect validation schema type. Supported: Zod, Joi, Yup, JSON Schema, or function.'); } return null; } function createQueuePipeline(options) { const manager = new manager_1.MessageMiddlewareManager(); const maxRetries = options.maxRetries ?? 3; const retryDelay = options.retryDelay ?? 1000; const retryBackoff = options.retryBackoff ?? 2; manager.addInboundMiddleware(new json_middleware_1.ParseJsonInboundMiddleware()); if (options.logger) { manager.addInboundMiddleware(new logging_middleware_1.LogInboundMiddleware(options.logger)); } if (options.metrics) { manager.addInboundMiddleware(new metrics_middleware_1.MetricsInboundMiddleware(options.metrics.collector, { prefix: options.metrics.prefix || options.queueName, })); } if (options.persistence) { try { const { PersistenceInboundMiddleware } = require('@message-in-the-middle/persistence-core'); const storeOn = options.persistence.storeOn || ['error']; manager.addInboundMiddleware(new PersistenceInboundMiddleware(options.persistence.store, { storeOn: storeOn, sourceExtractor: options.persistence.sourceExtractor || ((ctx) => ({ queueName: options.queueName })), })); } catch (error) { throw new Error('Persistence requires @message-in-the-middle/persistence-core package. ' + 'Install it with: npm install @message-in-the-middle/persistence-core'); } } if (options.deduplication) { manager.addInboundMiddleware(new deduplication_middleware_1.DeduplicateInboundMiddleware(options.deduplication.store, { keyExtractor: options.deduplication.keyExtractor, ttlSeconds: options.deduplication.ttlSeconds, })); } if (options.validation) { const validator = createValidatorFromValidation(options.validation); if (validator) { manager.addInboundMiddleware(validator); } } if (maxRetries > 0) { manager.addInboundMiddleware(new retry_middleware_1.RetryInboundMiddleware({ maxRetries, delayMs: retryDelay, backoffMultiplier: retryBackoff, })); } if (options.customMiddlewares) { options.customMiddlewares.forEach((middleware) => { manager.addInboundMiddleware(middleware); }); } if (options.dispatcher) { manager.addInboundMiddleware(new dispatcher_1.DispatcherMiddleware(options.dispatcher)); } else if (options.handler) { manager.addInboundMiddleware({ async process(ctx, next) { await options.handler(ctx); await next(); }, }); } return manager; } //# sourceMappingURL=queue-presets.js.map