infoalloggi-monorepo/apps/infoalloggi/src/middleware.ts

57 lines
1.5 KiB
TypeScript
Raw Normal View History

2025-08-28 18:27:07 +02:00
import { type NextRequest, NextResponse } from "next/server";
import { authMiddleware } from "~/middlewares/auth";
import { apisMiddleware } from "./middlewares/api";
import { pswChangeMiddleware } from "./middlewares/psw_change";
2025-08-04 17:45:44 +02:00
export async function middleware(request: NextRequest) {
2025-08-28 18:27:07 +02:00
//console.log("Middleware triggered for:", request.nextUrl.pathname);
2025-08-04 17:45:44 +02:00
return await chainMiddlewares(request, [
//updaterMiddleware,
apisMiddleware,
pswChangeMiddleware,
authMiddleware,
]);
2025-08-04 17:45:44 +02:00
}
export const config = {
2025-08-28 18:27:07 +02:00
matcher: [
"/storage-api/:path*",
2025-08-28 18:27:07 +02:00
{
source: "/",
},
{
missing: [
2025-08-29 16:18:32 +02:00
{ key: "next-router-prefetch", type: "header" },
{ key: "purpose", type: "header", value: "prefetch" },
2025-08-28 18:27:07 +02:00
],
2025-08-29 16:18:32 +02:00
source:
"/((?!api/trpc|storage-api|api/tiles|api/auth|_next/static|_next/image|screenshots|site.webmanifest|favicon.ico|favicon|sitemap.xml|robots.txt).*)",
2025-08-28 18:27:07 +02:00
},
],
2025-08-04 17:45:44 +02:00
};
// Type for middleware functions
export type MiddlewareFn = (
request: NextRequest,
) => Promise<NextResponse | null | undefined> | NextResponse | null | undefined;
// Helper to chain middlewares in order
async function chainMiddlewares(
request: NextRequest,
middlewares: MiddlewareFn[],
): Promise<NextResponse> {
for (const middleware of middlewares) {
const result = await middleware(request);
// If middleware returned a response, short-circuit
if (result) {
return result;
}
// Otherwise, continue to next middleware
}
// All middlewares passed, continue to the app
return NextResponse.next();
}