summaryrefslogtreecommitdiff
path: root/src/lib/server/cookiebridge.ts
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-05-15 10:13:00 +0700
committerpolwex <polwex@sortug.com>2025-05-15 10:13:00 +0700
commitd56594d3289002566f4653d607f0837befd65109 (patch)
treef69685b458419566a78727ce6a8cecd0cdc269a5 /src/lib/server/cookiebridge.ts
parent04509d9207603d9055cf022051763ec05c9214d6 (diff)
wtf man
Diffstat (limited to 'src/lib/server/cookiebridge.ts')
-rw-r--r--src/lib/server/cookiebridge.ts33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/lib/server/cookiebridge.ts b/src/lib/server/cookiebridge.ts
new file mode 100644
index 0000000..ca4bd44
--- /dev/null
+++ b/src/lib/server/cookiebridge.ts
@@ -0,0 +1,33 @@
+import { getContextData } from "waku/middleware/context";
+import {
+ RequestCookies,
+ ResponseCookies,
+ type ResponseCookie,
+} from "@edge-runtime/cookies";
+import { mergeSetCookies } from "./setcookie";
+
+const cookies = () => {
+ const ctx = getContextData() as {
+ headers: Record<string, string | string[]>;
+ cookies?: ResponseCookie[];
+ };
+ const headerObj = ctx.headers || {};
+ headerObj["set-cookie"] = mergeSetCookies(
+ headerObj["set-cookie"] || [],
+ (ctx.cookies || []) as ResponseCookie[],
+ );
+ const headers = new Headers(headerObj as Record<string, string>);
+ const reqCookies = new RequestCookies(headers);
+ const resCookies = new ResponseCookies(headers);
+
+ const getCookie: ResponseCookies["get"] = (...args) =>
+ resCookies.get(...args) || reqCookies.get(...args);
+ const setCookie: ResponseCookies["set"] = (...args) => {
+ const updated = resCookies.set(...args);
+ ctx.cookies = updated.getAll();
+ return updated;
+ };
+ return { getCookie, setCookie };
+};
+
+export { cookies };