'use server'; import { safeFetchApi } from '@/lib'; import { cookies } from 'next/headers'; import { loginResponseSchema, UserFormValue } from '../schemas/login'; type LoginActionSuccess = { message: string; user: { email: string; username: string; id: number; rol: Array<{ id: number; rol: string }>; fullname: string; }; tokens: { access_token: string; access_expire_in: number; refresh_token: string; refresh_expire_in: number; }; }; type LoginActionError = { type: 'API_ERROR' | 'VALIDATION_ERROR' | 'UNKNOWN_ERROR'; // **Asegúrate de que el tipo de `type` sea este aquí** message: string; details?: any; }; // Si SignInAction también puede devolver null, asegúralo en su tipo de retorno type LoginActionResult = LoginActionSuccess | LoginActionError | null; export const SignInAction = async (payload: UserFormValue) => { const [error, data] = await safeFetchApi( loginResponseSchema, '/auth/sign-in', 'POST', payload, ); if (error) { return error; } else { // 2. GUARDAR REFRESH TOKEN EN COOKIE (La clave del cambio) (await cookies()).set( 'refresh_token', String(data?.tokens?.refresh_token), { httpOnly: true, // JavaScript no puede leerla secure: process.env.NODE_ENV === 'production', sameSite: 'lax', path: '/', maxAge: 7 * 24 * 60 * 60, // Ej: 7 días (debe coincidir con tu backend) }, ); return data; } };