@sigiljs-community/cors-plugin
Version:
Plugin for SigilJS framework that provides configurable CORS headers
2 lines (1 loc) • 1.74 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const h=require("@sigiljs/sigil"),C=require("@sigiljs/sigil/requests/containers");class w extends h.SigilPlugin{static name="CorsPlugin";constructor(){super()}onInitialize(){const{allowOrigins:s,allowMethods:e,allowHeaders:d,exposeHeaders:r,allowCredentials:i,maxAge:n,enableMiddlewareDebug:a}=this.$pluginConfig;this.sigil.addMiddleware((o,g,c)=>{const l=o.headers.get("origin");if(this.logger({level:"info",json:{debug:!0,origin:l,allowOrigins:s,method:o.method},message:`Middleware debug: ${o.method} ${l} ${s}`,condition:a}),!l||o.method!=="OPTIONS"||s&&!s.includes(l))return;const t=new C.IncomingHeaders({"Access-Control-Allow-Origin":l});return n&&t.set("Access-Control-Max-Age",n.toString()),t.set("Access-Control-Allow-Methods",e?.join(",")||"*"),t.set("Access-Control-Allow-Headers",d?.join(",")||"*"),t.set("Access-Control-Allow-Credentials",i?"true":"false"),r&&t.set("Access-Control-Expose-Headers",r.join(",")),c.headers&&Object.entries(c.headers).forEach(([u,A])=>t.append(u,A)),g.rawResponse(null,t,204)})}onBeforeResponseSent(s,e){const{allowMethods:d,allowHeaders:r,exposeHeaders:i,allowCredentials:n,maxAge:a}=this.$pluginConfig;if(!s)return;const o=s.headers.get("origin");o&&(e.headers.set("Access-Control-Allow-Origin",o),e.headers.set("Access-Control-Allow-Credentials","true"),a&&e.headers.set("Access-Control-Max-Age",a.toString()),e.headers.set("Access-Control-Allow-Methods",d?.join(",")||"*"),e.headers.set("Access-Control-Allow-Headers",r?.join(",")||"*"),e.headers.set("Access-Control-Allow-Credentials",n?"true":"false"),i&&e.headers.set("Access-Control-Expose-Headers",i.join(",")))}}exports.default=w;