summaryrefslogtreecommitdiff
path: root/src/lib/server/setcookie.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/server/setcookie.ts')
-rw-r--r--src/lib/server/setcookie.ts25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/lib/server/setcookie.ts b/src/lib/server/setcookie.ts
new file mode 100644
index 0000000..f64b380
--- /dev/null
+++ b/src/lib/server/setcookie.ts
@@ -0,0 +1,25 @@
+import type { Middleware } from "waku/config";
+import { type ResponseCookie, stringifyCookie } from "@edge-runtime/cookies";
+
+export const mergeSetCookies = (
+ resSetCookies: string | string[],
+ cookiesInContext: ResponseCookie[],
+) => {
+ if (typeof resSetCookies === "string") {
+ resSetCookies = [resSetCookies];
+ }
+ return [...resSetCookies, ...cookiesInContext.map(stringifyCookie)];
+};
+
+const setCookieMiddleware: Middleware = () => {
+ return async (ctx, next) => {
+ await next();
+ ctx.res.headers ||= {};
+ ctx.res.headers["set-cookie"] = mergeSetCookies(
+ ctx.res.headers["set-cookie"] || [],
+ (ctx.data.cookies || []) as ResponseCookie[],
+ );
+ };
+};
+
+export default setCookieMiddleware;