UNPKG

@qontrol/express

Version:

Express.js middleware for BullMQ monitoring

80 lines 2.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.requestLogger = exports.errorHandler = exports.validateGetJobs = void 0; const joi_1 = __importDefault(require("joi")); const core_1 = require("@qontrol/core"); // Validation schemas const getJobsSchema = joi_1.default.object({ page: joi_1.default.number().integer().min(1).default(1), pageSize: joi_1.default.number().integer().min(1).max(1000).default(500), sortOrder: joi_1.default.string().valid('asc', 'desc').default('desc'), states: joi_1.default.array().items(joi_1.default.string().valid(...core_1.JOB_STATES)), all: joi_1.default.boolean().default(false), search: joi_1.default.string().max(500).empty(), searchType: joi_1.default.string().valid('name', 'data', 'id').optional(), }); // Request validation middleware const validateGetJobs = (req, res, next) => { const { error, value } = getJobsSchema.validate(req.query, { allowUnknown: false, stripUnknown: true }); if (error) { return res.status(400).json({ message: 'Invalid query parameters', code: 'VALIDATION_ERROR', details: error.details, }); } // Transform flat query params to nested structure const params = { page: value.page, pageSize: value.pageSize, sortOrder: value.sortOrder, states: value.states, all: value.all, search: value.search, searchType: value.searchType, }; req.validatedQuery = params; next(); }; exports.validateGetJobs = validateGetJobs; // Error handling middleware const errorHandler = (error, req, res, next) => { const logger = core_1.Logger.getInstance(); logger.error('API Error:', { error: error.message, stack: error.stack, path: req.path, method: req.method, query: req.query, params: req.params, }); res.status(500).json({ message: 'Internal server error', code: 'INTERNAL_ERROR', }); }; exports.errorHandler = errorHandler; // Request logging middleware const requestLogger = (req, res, next) => { const logger = core_1.Logger.getInstance(); const start = Date.now(); res.on('finish', () => { const duration = Date.now() - start; logger.info('Request completed', { method: req.method, path: req.path, statusCode: res.statusCode, duration, query: req.query, }); }); next(); }; exports.requestLogger = requestLogger; //# sourceMappingURL=validation.js.map