import logger from '@/utils/logger'; import { signOut } from 'next-auth/react'; let isSigningOut = false; export const triggerSignOut = async () => { if (isSigningOut || typeof window === 'undefined') return; isSigningOut = true; logger.warn('Session expirée, déconnexion en cours...'); await signOut({ callbackUrl: '/users/login' }); }; /** * * @param {*} response * @returns */ export const requestResponseHandler = async (response) => { try { if (response.status === 401) { // On lève une erreur plutôt que de déclencher un signOut automatique. // Plusieurs requêtes concurrent pourraient déclencher des signOut en cascade. // Le signOut est géré proprement via RefreshTokenError dans getAuthToken. const body = await response.json().catch(() => ({})); const error = new Error( body?.detail || body?.errorMessage || 'Session expirée' ); error.status = 401; throw error; } const body = await response?.json(); if (response.ok) { return body; } // Throw an error with the JSON body containing the form errors const error = new Error(body?.errorMessage || 'Une erreur est survenue'); error.details = body; error.response = response; throw error; } catch (error) { logger.error('Une erreur est survenue lors du traitement de la réponse', { error, response, }); throw error; } }; export const errorHandler = (error) => { logger.error('Error:', { error }); // Handle the error here, e.g., show a notification throw error; };