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

80 lines 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CorsMiddleware = void 0; exports.createCorsMiddleware = createCorsMiddleware; class CorsMiddleware { constructor(config = {}) { this.isEnabled = true; this.config = { origin: '*', credentials: true, maxAge: 86400, allowedHeaders: ['Content-Type', 'Authorization', 'X-Correlation-ID'], exposedHeaders: ['X-Request-ID', 'X-Correlation-ID'], enabled: true, ...config }; this.isEnabled = this.config.enabled ?? true; } middleware() { return (req, res, next) => { if (!this.isEnabled) { return next(); } const origin = req.headers.origin; if (this.isOriginAllowed(origin)) { res.setHeader('Access-Control-Allow-Origin', origin || '*'); } else { res.setHeader('Access-Control-Allow-Origin', this.config.origin || '*'); } if (this.config.credentials) { res.setHeader('Access-Control-Allow-Credentials', 'true'); } res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS'); if (this.config.allowedHeaders) { res.setHeader('Access-Control-Allow-Headers', this.config.allowedHeaders.join(',')); } if (this.config.exposedHeaders) { res.setHeader('Access-Control-Expose-Headers', this.config.exposedHeaders.join(',')); } if (this.config.maxAge) { res.setHeader('Access-Control-Max-Age', this.config.maxAge.toString()); } if (req.method === 'OPTIONS') { return res.status(204).end(); } next(); }; } isOriginAllowed(origin) { if (!origin) return false; const allowedOrigins = this.config.origin; if (allowedOrigins === '*') return true; if (typeof allowedOrigins === 'string') return origin === allowedOrigins; if (Array.isArray(allowedOrigins)) return allowedOrigins.includes(origin); return false; } getHealthStatus() { return { status: this.isEnabled ? 'healthy' : 'disabled', enabled: this.isEnabled }; } getMetrics() { return { totalRequests: 0, preflightRequests: 0 }; } } exports.CorsMiddleware = CorsMiddleware; function createCorsMiddleware(config = {}) { const corsMiddleware = new CorsMiddleware(config); return corsMiddleware.middleware(); } //# sourceMappingURL=cors-middleware-clean.js.map