'use server'; import { SessionData } from '@/lib/session/session-data.type'; import { siteConfig } from '@/site.config'; import { getIronSession, IronSession, SessionOptions } from 'iron-session'; import { cookies } from 'next/headers'; let sessionOptions: SessionOptions | undefined; const getSessionOptions = (): SessionOptions => { if (!!sessionOptions) return sessionOptions; const password = process.env.SESSION_SECRET; if (!password) { throw new Error('SESSION_SECRET is not set in environment variables.'); } sessionOptions = { cookieName: siteConfig.slug, password: password, cookieOptions: { secure: process.env.NODE_ENV === 'production', sameSite: 'lax', maxAge: 60 * 60 * 24 * 30, // 30 days }, }; return sessionOptions; }; export const getSession = async (): Promise> => { return await getIronSession(await cookies(), getSessionOptions()); }; export const clearSessionData = async (): Promise => { const session = await getSession(); session.destroy(); await session.save(); }; export const getSessionData = async (): Promise => { try { const session = await getSession(); return SessionData.parse(session); } catch { await clearSessionData(); } return null; };