'use server'; /* import 'server-only'; */ import { cookies } from 'next/headers'; import { SignJWT, jwtVerify } from 'jose'; import { redirect } from 'next/navigation'; /* const secretKey = process.env.SESSION_SECRET */ const secretKey = process.env.SESSION_SECRET || 'AAA+sq1yKte/gMgUUu/B/OyXqr45/LMYplPVOlWc+uo='; const encodedKey = new TextEncoder().encode(secretKey); export interface SessionPayload { token: string; email: string; employeId: number; permissions: { subscriptions: number; mailings: number; complaints: number; agreements: number; staff: number; content_moderation: number; users: number; kyc: number; money: number; claims: number; api: number; dash: number; tariffs: number; }; expiresAt: Date | number; createdAt?: Date; } export async function encrypt(payload: any) { return new SignJWT(payload) .setProtectedHeader({ alg: 'HS256' }) .setIssuedAt() .setExpirationTime('7d') .sign(encodedKey) } export async function decrypt(session: string | undefined = '') { try { const { payload } = await jwtVerify(session, encodedKey, { algorithms: ['HS256'], }) return payload } catch (error) { console.log('Failed to verify session') } } export async function createSession(token: string, email: string, employeId: number) { const expiresAt = new Date(Date.now() + 50 * 60 * 1000); const session = await encrypt({ token, email, employeId, expiresAt, createdAt: new Date() }); const cookieStore = await cookies(); cookieStore.set('session_nc_ap', session, { httpOnly: true, secure: process.env.NODE_ENV !== 'development', expires: expiresAt, sameSite: 'lax', path: '/', }); } export async function updateSession(newToken: string) { const cookieStore = await cookies(); const session = cookieStore.get('session_nc_ap')?.value; if (!session) { return null; } const payload = await decrypt(session); if (!payload) { return null; } const updatedPayload = { ...payload, token: newToken, expiresAt: new Date(Date.now() + 50 * 60 * 1000) }; const updatedSession = await encrypt(updatedPayload); cookieStore.set('session_nc_ap', updatedSession, { httpOnly: true, secure: false, expires: updatedPayload.expiresAt, sameSite: 'lax', path: '/', }); } export async function getSessionData(type: 'token' | 'email' | 'employeId'): Promise { const cookieStore = await cookies(); const sessionCookie = cookieStore.get('session_nc_ap')?.value; if (!sessionCookie) { return null; } const payload = await decrypt(sessionCookie); if (payload && typeof payload === 'object' && type in payload) { return payload[type] as string; } return null; } export async function deleteSession() { try { const cookieStore = await cookies() cookieStore.delete('session_nc_ap'); } catch (error) { } finally { redirect('/login'); } }