summaryrefslogtreecommitdiff
path: root/src/lib/server/cookiebridge.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/server/cookiebridge.ts')
-rw-r--r--src/lib/server/cookiebridge.ts76
1 files changed, 45 insertions, 31 deletions
diff --git a/src/lib/server/cookiebridge.ts b/src/lib/server/cookiebridge.ts
index 4dce095..778fc2c 100644
--- a/src/lib/server/cookiebridge.ts
+++ b/src/lib/server/cookiebridge.ts
@@ -1,38 +1,52 @@
-import { getContextData } from "waku/middleware/context";
-import {
- RequestCookies,
- ResponseCookies,
- type ResponseCookie,
-} from "@edge-runtime/cookies";
-import { mergeSetCookies } from "./setcookie";
+import { getContext, getContextData } from "waku/middleware/context";
-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 useCookies = () => {
+ const ctx = getContext();
+ const headers = ctx.req.headers;
+ console.log(headers.cookie);
- 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;
+ const getCookie = (s: string) => {
+ const coki = headers.cookie;
+ if (!coki) return {};
+ const cokiMap = parseCoki(coki);
+ return cokiMap;
+ };
+ const setCookie = (s: string) => {
+ const ctxdata = getContextData();
+ // (ctxdata.cokimap as Record<string, string>).sorlang = s;
+ // ctxdata.cookie = `sorlang=${s}; Secure`
+ ctxdata.cookie = `sorlang=${s};`;
};
- const delCookie: ResponseCookies["delete"] = (...args) => {
- const updated = resCookies.delete(...args);
- ctx.cookies = updated.getAll();
- return updated;
+ const delCookie = (s: string) => {
+ const ctxdata = getContextData();
+ delete (ctxdata.cokimap as Record<string, string>).sorlang;
};
return { getCookie, setCookie, delCookie };
};
-export { cookies };
+export { useCookies };
+
+function parseCoki(s: string) {
+ return s
+ .split(";")
+ .map((v) => v.split("="))
+ .reduce((acc: Record<string, string>, v: any) => {
+ acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim());
+ return acc;
+ }, {});
+}
+function parseSetCoki(s: string) {
+ return s
+ .split(";")
+ .map((v) => v.split("="))
+ .reduce((acc: Record<string, string>, v: any) => {
+ acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim());
+ return acc;
+ }, {});
+}
+function cokiToString(m: Record<string, string>): string {
+ return Object.entries(m).reduce((acc: string, item: [string, string]) => {
+ const [key, val] = item;
+ return `${acc} ${key}=${val};`;
+ }, "");
+}