UNPKG

@marblejs/middleware-cors

Version:

A CORS middleware for Marble.js

33 lines (32 loc) 1.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cors$ = void 0; const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const utils_1 = require("@marblejs/core/dist/+internal/utils"); const http_responseHandler_1 = require("@marblejs/http/dist/response/http.responseHandler"); const http_1 = require("@marblejs/http"); const function_1 = require("fp-ts/lib/function"); const configurePreflightResponse_1 = require("./configurePreflightResponse"); const configureResponse_1 = require("./configureResponse"); const DEFAULT_OPTIONS = { origin: '*', methods: ['HEAD', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], withCredentials: false, optionsSuccessStatus: http_1.HttpStatus.NO_CONTENT, }; const isCORSRequest = (req) => !(0, utils_1.isString)(req.headers.origin); const cors$ = (options = {}) => req$ => { options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options); return req$.pipe((0, operators_1.mergeMap)(req => { if (isCORSRequest(req)) return (0, rxjs_1.of)(req); if (req.method === 'OPTIONS') { (0, configurePreflightResponse_1.configurePreflightResponse)(req, req.response, options); return (0, function_1.pipe)((0, rxjs_1.defer)((0, http_responseHandler_1.endRequest)(req.response)), (0, operators_1.mergeMap)(() => rxjs_1.EMPTY)); } (0, configureResponse_1.configureResponse)(req, req.response, options); return (0, rxjs_1.of)(req); })); }; exports.cors$ = cors$;