Files
MineGeo/proxy.ts

39 lines
1.4 KiB
TypeScript

import { createServerClient } from "@supabase/ssr";
import { NextRequest, NextResponse } from "next/server";
import { legacyRecoveryToken } from "./shared/legacy-recovery";
export async function proxy(request: NextRequest) {
const recoveryToken = legacyRecoveryToken(request.nextUrl.pathname);
if (recoveryToken) {
const destination = request.nextUrl.clone();
destination.pathname = "/auth/callback";
destination.search = "";
destination.searchParams.set("legacy_recovery_token", recoveryToken);
return NextResponse.redirect(destination);
}
let response = NextResponse.next({ request });
if (!process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY) return response;
const client = createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY,
{
cookies: {
getAll: () => request.cookies.getAll(),
setAll: (values) => {
values.forEach(({ name, value }) => request.cookies.set(name, value));
response = NextResponse.next({ request });
values.forEach(({ name, value, options }) =>
response.cookies.set(name, value, options),
);
},
},
},
);
await client.auth.getUser();
return response;
}
export const config = {
matcher: [
"/((?!_next/static|_next/image|favicon.ico|\\.well-known/workflow/|tools/|fonts/|images/|.*\\.(?:svg|png|jpg|jpeg|gif|webp|ico|ttf|woff|woff2|jar)$).*)",
],
};