UNPKG

@sigiljs-community/cors-plugin

Version:

Plugin for SigilJS framework that provides configurable CORS headers

37 lines (36 loc) 1.98 kB
import { SigilPlugin as C } from "@sigiljs/sigil"; import { IncomingHeaders as w } from "@sigiljs/sigil/requests/containers"; class x extends C { static name = "CorsPlugin"; constructor() { super(); } onInitialize() { const { allowOrigins: o, allowMethods: e, allowHeaders: d, exposeHeaders: r, allowCredentials: i, maxAge: n, enableMiddlewareDebug: a } = this.$pluginConfig; this.sigil.addMiddleware((s, g, c) => { const t = s.headers.get("origin"); if (this.logger({ level: "info", json: { debug: !0, origin: t, allowOrigins: o, method: s.method }, message: `Middleware debug: ${s.method} ${t} ${o}`, condition: a }), !t || s.method !== "OPTIONS" || o && !o.includes(t)) return; const l = new w({ "Access-Control-Allow-Origin": t }); return n && l.set("Access-Control-Max-Age", n.toString()), l.set("Access-Control-Allow-Methods", e?.join(",") || "*"), l.set("Access-Control-Allow-Headers", d?.join(",") || "*"), l.set("Access-Control-Allow-Credentials", i ? "true" : "false"), r && l.set("Access-Control-Expose-Headers", r.join(",")), c.headers && Object.entries(c.headers).forEach(([A, h]) => l.append(A, h)), g.rawResponse(null, l, 204); }); } onBeforeResponseSent(o, e) { const { allowMethods: d, allowHeaders: r, exposeHeaders: i, allowCredentials: n, maxAge: a } = this.$pluginConfig; if (!o) return; const s = o.headers.get("origin"); s && (e.headers.set("Access-Control-Allow-Origin", s), 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(","))); } } export { x as default };