35 lines
983 B
TypeScript
35 lines
983 B
TypeScript
|
|
import { type NextRequest, NextResponse } from "next/server";
|
||
|
|
import type { MiddlewareFn } from "~/middleware";
|
||
|
|
|
||
|
|
const UPDATE_COODKIE_NAME = "app_version";
|
||
|
|
|
||
|
|
export const updaterMiddleware: MiddlewareFn = async (req: NextRequest) => {
|
||
|
|
const url = req.nextUrl.clone();
|
||
|
|
|
||
|
|
const updateToken = req.cookies.get(UPDATE_COODKIE_NAME)?.value;
|
||
|
|
if (!process.env.NEXT_PUBLIC_TEST) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!updateToken) {
|
||
|
|
// First time visitor or cookie not set, set the cookie
|
||
|
|
const res = NextResponse.rewrite(url);
|
||
|
|
res.cookies.set(UPDATE_COODKIE_NAME, process.env.NEXT_PUBLIC_TEST, {
|
||
|
|
maxAge: 60 * 60 * 24 * 30, // 30 days
|
||
|
|
path: "/",
|
||
|
|
});
|
||
|
|
return res;
|
||
|
|
}
|
||
|
|
if (updateToken !== process.env.NEXT_PUBLIC_TEST) {
|
||
|
|
// Version has changed, perform a hard refresh and update the cookie
|
||
|
|
const res = NextResponse.rewrite(url);
|
||
|
|
res.cookies.set(UPDATE_COODKIE_NAME, process.env.NEXT_PUBLIC_TEST, {
|
||
|
|
maxAge: 60 * 60 * 24 * 30, // 30 days
|
||
|
|
path: "/",
|
||
|
|
});
|
||
|
|
return res;
|
||
|
|
}
|
||
|
|
|
||
|
|
return;
|
||
|
|
};
|