mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-05-17 21:11:04 +00:00
83 lines
2.6 KiB
TypeScript
83 lines
2.6 KiB
TypeScript
import { getSessionCookie } from "better-auth/cookies"
|
|
import { NextResponse } from "next/server"
|
|
|
|
export default async function proxy(request: Request) {
|
|
console.debug("[PROXY] === PROXY START ===")
|
|
const url = new URL(request.url)
|
|
|
|
console.debug("[PROXY] Path:", url.pathname)
|
|
console.debug("[PROXY] Method:", request.method)
|
|
|
|
const isDevHost =
|
|
url.hostname === "localhost" ||
|
|
url.hostname.includes(".localhost") ||
|
|
url.hostname.includes(".dev.supermemory.ai")
|
|
|
|
const sessionCookie = isDevHost
|
|
? getSessionCookie(request, { cookiePrefix: "better-auth-dev" })
|
|
: getSessionCookie(request)
|
|
console.debug("[PROXY] Session cookie exists:", !!sessionCookie)
|
|
|
|
// Always allow access to login and waitlist pages
|
|
const publicPaths = ["/login", "/login/new"]
|
|
if (publicPaths.includes(url.pathname)) {
|
|
console.debug("[PROXY] Public path, allowing access")
|
|
return NextResponse.next()
|
|
}
|
|
|
|
// MCP setup page is public — no auth required
|
|
if (url.searchParams.get("view") === "mcp") {
|
|
return NextResponse.next()
|
|
}
|
|
|
|
if (url.pathname.startsWith("/api/")) {
|
|
if (!sessionCookie) {
|
|
console.debug("[MIDDLEWARE] API route without session, returning 401")
|
|
return new Response(JSON.stringify({ error: "Unauthorized" }), {
|
|
status: 401,
|
|
headers: { "Content-Type": "application/json" },
|
|
})
|
|
}
|
|
console.debug("[MIDDLEWARE] API route with session, allowing access")
|
|
return NextResponse.next()
|
|
}
|
|
|
|
// If no session cookie and not on a public path, redirect to login
|
|
if (!sessionCookie) {
|
|
console.debug(
|
|
"[PROXY] No session cookie and not on public path, redirecting to /login",
|
|
)
|
|
const url = new URL("/login", request.url)
|
|
url.searchParams.set("redirect", request.url)
|
|
return NextResponse.redirect(url)
|
|
}
|
|
|
|
// TEMPORARILY DISABLED: Waitlist check
|
|
// if (url.pathname !== "/waitlist") {
|
|
// const response = await $fetch("@get/waitlist/status", {
|
|
// headers: {
|
|
// Authorization: `Bearer ${sessionCookie}`,
|
|
// },
|
|
|
|
// console.debug("[PROXY] Waitlist status:", response.data);
|
|
// if (response.data && !response.data.accessGranted) {
|
|
// return NextResponse.redirect(new URL("/waitlist", request.url));
|
|
// }
|
|
// }
|
|
|
|
console.debug("[PROXY] Passing through to next handler")
|
|
console.debug("[PROXY] === PROXY END ===")
|
|
const response = NextResponse.next()
|
|
response.cookies.set({
|
|
name: "last-site-visited",
|
|
value: "https://app.supermemory.ai",
|
|
domain: "supermemory.ai",
|
|
})
|
|
return response
|
|
}
|
|
|
|
export const config = {
|
|
matcher: [
|
|
"/((?!_next/static|_next/image|images|icon.png|manifest.webmanifest|monitoring|opengraph-image.png|bg-rectangle.png|onboarding|ingest|login|api/emails|mcp-supported-tools|mcp-icon.svg).*)",
|
|
],
|
|
}
|