UNPKG

@dazejs/framework

Version:

Daze.js - A powerful web framework for Node.js

92 lines 3.95 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CORSMiddleware = void 0; const response_1 = require("../../../http/response"); const decorators_1 = require("../../../decorators"); const defaultOptions = { origin: '', maxAge: 5, credentials: true, allowMethods: ['GET', 'POST', 'DELETE', 'PATCH', 'PUT', 'OPTIONS'], allowHeaders: ['Content-Type', 'Authorization', 'Accept', 'X-Requested-With'], }; let CORSMiddleware = class CORSMiddleware { constructor(options) { this.options = this.parseOptions(options); } parseOptions(options) { if (typeof options === 'string') { return Object.assign(Object.assign({}, defaultOptions), { origin: options }); } if (options && typeof options === 'object') { return Object.assign(Object.assign({}, defaultOptions), options); } return defaultOptions; } get origin() { return this.options.origin; } get maxAge() { return this.options.maxAge || 5; } get credentials() { return this.options.credentials || true; } get allowMethods() { return this.options.allowMethods || ['GET', 'POST', 'DELETE', 'PATCH', 'PUT', 'OPTIONS']; } get allowHeaders() { return this.options.allowHeaders || ['Content-Type', 'Authorization', 'Accept', 'X-Requested-With']; } async resolve(request, next) { const requestOrigin = request.get('Origin'); if (!requestOrigin) return next(); try { if (request.isOptions()) { if (!request.get('Access-Control-Request-Method')) return next(); const response = new response_1.Response(); response.setVary('Origin'); response.setHeader('Access-Control-Allow-Origin', this.origin || requestOrigin || '*'); if (this.credentials) { response.setHeader('Access-Control-Allow-Credentials', true); } if (this.maxAge) { response.setHeader('Access-Control-Max-Age', this.maxAge); } if (this.allowMethods) { response.setHeader('Access-Control-Allow-Methods', this.allowMethods); } response.setHeader('Access-Control-Allow-Headers', this.allowHeaders || request.get('Access-Control-Request-Headers')); return response.NoContent(); } const response = await next(); response.setVary('Origin'); response.setHeader('Access-Control-Allow-Origin', this.origin || requestOrigin || '*'); if (this.credentials) { response.setHeader('Access-Control-Allow-Credentials', true); } return response; } catch (err) { throw err; } } }; CORSMiddleware = __decorate([ (0, decorators_1.Middleware)(), (0, decorators_1.Order)(Number.MIN_SAFE_INTEGER), __metadata("design:paramtypes", [Object]) ], CORSMiddleware); exports.CORSMiddleware = CORSMiddleware; //# sourceMappingURL=cors.js.map