src/features/auth/queries/get-auth.ts
"use server";
 
import { cookies } from "next/headers";
import { cache } from "react";
import { lucia } from "@/lib/lucia";
 
// Cached to stop every component to call the function individually
export const getAuth = cache(async () => {
  const sessionId =
    (await cookies()).get(lucia.sessionCookieName)?.value ?? null;
 
  if (!sessionId) {
    return {
      user: null,
      session: null,
    };
  }
 
  const result = await lucia.validateSession(sessionId);
 
  try {
    if (result.session && result.session.fresh) {
      // Renew Session
      const sessionCookie = lucia.createSessionCookie(result.session.id);
      (await cookies()).set(
        sessionCookie.name,
        sessionCookie.value,
        sessionCookie.attributes,
      );
    }
    if (!result.session) {
      // No active session
      const sessionCookie = lucia.createBlankSessionCookie();
      (await cookies()).set(
        sessionCookie.name,
        sessionCookie.value,
        sessionCookie.attributes,
      );
    }
  } catch {
    // do nothing if used in a React Server Component
  }
 
  return result;
});