56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import { defineMiddleware } from "astro:middleware";
|
|
import { CookieKeys, isValidCurrency, isValidLocale, isValidTheme } from "src/middleware/utils";
|
|
|
|
const ninetyDaysInSeconds = 60 * 60 * 24 * 90;
|
|
|
|
export const cookieRefreshingMiddleware = defineMiddleware(async ({ cookies }, next) => {
|
|
const response = await next();
|
|
|
|
const theme = cookies.get(CookieKeys.Theme)?.value;
|
|
if (isValidTheme(theme) && theme !== "auto") {
|
|
cookies.set(CookieKeys.Theme, theme, {
|
|
maxAge: ninetyDaysInSeconds,
|
|
path: "/",
|
|
sameSite: "strict",
|
|
});
|
|
} else if (theme) {
|
|
cookies.set(CookieKeys.Theme, theme, {
|
|
maxAge: 0,
|
|
path: "/",
|
|
sameSite: "strict",
|
|
});
|
|
}
|
|
|
|
const currency = cookies.get(CookieKeys.Currency)?.value;
|
|
if (isValidCurrency(currency)) {
|
|
cookies.set(CookieKeys.Currency, currency, {
|
|
maxAge: ninetyDaysInSeconds,
|
|
path: "/",
|
|
sameSite: "strict",
|
|
});
|
|
} else if (currency) {
|
|
cookies.set(CookieKeys.Currency, currency, {
|
|
maxAge: 0,
|
|
path: "/",
|
|
sameSite: "strict",
|
|
});
|
|
}
|
|
|
|
const language = cookies.get(CookieKeys.Language)?.value;
|
|
if (isValidLocale(language)) {
|
|
cookies.set(CookieKeys.Language, language, {
|
|
maxAge: ninetyDaysInSeconds,
|
|
path: "/",
|
|
sameSite: "strict",
|
|
});
|
|
} else if (language) {
|
|
cookies.set(CookieKeys.Language, language, {
|
|
maxAge: 0,
|
|
path: "/",
|
|
sameSite: "strict",
|
|
});
|
|
}
|
|
|
|
return response;
|
|
});
|