/** * Server-side session helper for Better Auth * This provides getSession() for use in server components */ import { cookies, headers } from "next/headers"; export async function getSession() { try { const cookieStore = await cookies(); const headerStore = await headers(); // Get the session token from cookies // Try both with and without __Secure prefix let sessionToken = cookieStore.get('better-auth.session_token'); if (!sessionToken) { sessionToken = cookieStore.get('__Secure-better-auth.session_token'); } if (!sessionToken) { return null; } // Use BETTER_AUTH_URL from environment for internal fetch // This ensures consistent origin for server-side requests const baseUrl = process.env.BETTER_AUTH_URL || 'http://localhost:3000'; // Make a request to the Better Auth API to get the session const response = await fetch(`${baseUrl}/api/auth/get-session?disableCookieCache=true`, { method: 'GET', headers: { 'Cookie': `${sessionToken.name}=${sessionToken.value}`, }, cache: 'no-store', }); if (!response.ok) { console.log('Session API response not OK:', response.status); return null; } return await response.json(); } catch (error) { console.error('Failed to get session:', error); return null; } } // For backward compatibility with existing code export type AuthUser = { user: { id: string; email: string; name?: string; role?: string; [key: string]: unknown; }; session: { token: string; expiresAt: Date; [key: string]: unknown; }; } | null;