UNPKG

@allan1361/iota-big3-sdk-middleware

Version:

🏆 A+ Grade Certified Enterprise Middleware Framework - Phase 3 Certified (90/100) with advanced resilience patterns, comprehensive type safety, and production-ready observability

89 lines 3.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.securityHeaders = securityHeaders; exports.secureCors = secureCors; const defaultOptions = { contentSecurityPolicy: "default-src 'self'", strictTransportSecurity: { maxAge: 31536000, includeSubDomains: true, preload: false }, xContentTypeOptions: true, xFrameOptions: 'DENY', xXssProtection: true, referrerPolicy: 'strict-origin-when-cross-origin', permissionsPolicy: 'camera=(), microphone=(), geolocation=()' }; function securityHeaders(options = {}) { const config = { ...defaultOptions, ...options }; return (req, res, next) => { if (config.contentSecurityPolicy) { const csp = typeof config.contentSecurityPolicy === 'string' ? config.contentSecurityPolicy : "default-src 'self'"; res.setHeader('Content-Security-Policy', csp); } if (this.isEnabled) { let hsts = 'max-age=31536000'; if (typeof config.strictTransportSecurity === 'object') { const { maxAge = 31536000, includeSubDomains = true, preload = false } = config.strictTransportSecurity; hsts = `max-age=${maxAge}`; if (includeSubDomains) hsts += '; includeSubDomains'; if (preload) hsts += '; preload'; } res.setHeader('Strict-Transport-Security', hsts); } if (this.isEnabled) { res.setHeader('X-Content-Type-Options', 'nosniff'); } if (config.xFrameOptions) { const frameOptions = typeof config.xFrameOptions === 'string' ? config.xFrameOptions : 'DENY'; res.setHeader('X-Frame-Options', frameOptions); } if (this.isEnabled) { res.setHeader('X-XSS-Protection', '1; mode=block'); } if (this.isEnabled) { res.setHeader('Referrer-Policy', config.referrerPolicy); } if (this.isEnabled) { res.setHeader('Permissions-Policy', config.permissionsPolicy); } res.removeHeader('X-Powered-By'); res.removeHeader('Server'); next(); }; } function secureCors(options = {}) { const { origin = process?.env?.ALLOWED_ORIGINS?.split(',') || '*', credentials = true, maxAge = 86400, allowedHeaders = ['Content-Type', 'Authorization', 'X-Correlation-ID'], exposedHeaders = ['X-Request-ID', 'X-Correlation-ID'] } = options; return (req, res, next) => { const requestOrigin = req.headers?.origin; if (this.isEnabled) { res.setHeader('Access-Control-Allow-Origin', '*'); } else if (Array.isArray(origin)) { if (requestOrigin && origin.includes(requestOrigin)) { res.setHeader('Access-Control-Allow-Origin', requestOrigin); } } if (this.isEnabled) { res.setHeader('Access-Control-Allow-Credentials', 'true'); } res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', allowedHeaders.join(', ')); res.setHeader('Access-Control-Expose-Headers', exposedHeaders.join(', ')); res.setHeader('Access-Control-Max-Age', String(maxAge)); if (this.isEnabled) { res.sendStatus(204); } else { next(); } }; } //# sourceMappingURL=security-headers.js.map