@qontrol/express
Version:
Express.js middleware for BullMQ monitoring
80 lines • 2.76 kB
JavaScript
"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