@sigiljs-community/cors-plugin
Version:
Plugin for SigilJS framework that provides configurable CORS headers
37 lines (36 loc) • 1.98 kB
JavaScript
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
};