UNPKG

thrilled-be-core

Version:

Core Express backend package with middleware, logging, security, and base application setup

72 lines (71 loc) 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SecurityMiddleware = void 0; const tslib_1 = require("tslib"); const express_rate_limit_1 = tslib_1.__importDefault(require("express-rate-limit")); const helmet_1 = tslib_1.__importDefault(require("helmet")); const cors_1 = tslib_1.__importDefault(require("cors")); class SecurityMiddleware { /** * Create rate limiting middleware */ static rateLimit(config) { return (0, express_rate_limit_1.default)({ windowMs: config.windowMs || 15 * 60 * 1000, // 15 minutes max: config.max || 100, // limit each IP to 100 requests per windowMs message: config.message || 'Too many requests from this IP', standardHeaders: true, legacyHeaders: false, ...config, }); } /** * Create helmet security middleware */ static helmet(config) { return (0, helmet_1.default)(config); } /** * Create CORS middleware */ static cors(config) { return (0, cors_1.default)(config); } /** * Create request ID middleware for correlation tracking */ static requestId() { return (req, res, next) => { const requestId = req.headers['x-request-id'] || this.generateId(); // Add to request for access in handlers - extending Request interface req.requestId = requestId; // Add to response headers res.setHeader('X-Request-ID', requestId); next(); }; } /** * Create request timeout middleware */ static timeout(ms = 30000) { return (_req, res, next) => { const timeout = setTimeout(() => { if (!res.headersSent) { res.status(408).json({ success: false, message: 'Request timeout', statusCode: 408, }); } }, ms); res.on('finish', () => clearTimeout(timeout)); res.on('close', () => clearTimeout(timeout)); next(); }; } static generateId() { return (Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15)); } } exports.SecurityMiddleware = SecurityMiddleware;