Files
List_ultimate/app/plugins/api.ts
2026-02-26 21:29:34 +01:00

51 lines
1.5 KiB
TypeScript

import ListsRepository from '~/repositories/lists.repository';
import UserRepository from '~/repositories/user.repository';
export default defineNuxtPlugin(() => {
const config = useRuntimeConfig();
const authStore = useAuthStore();
const apiFetcher = $fetch.create({
baseURL: config.public.apiBase,
onRequest({ options }) {
const headers = new Headers(options.headers);
if (authStore.token) {
headers.set('Authorization', `Bearer ${authStore.token}`);
}
if (authStore.user?.sudo_token){
headers.set('sudo_token', authStore.user?.sudo_token);
}
options.headers = headers;
},
async onResponseError({ response }) {
// Cas 401 : Session expirée ou non autorisée
if (response.status === 401) {
// Optionnel : nettoyer le store avant d'afficher l'erreur
authStore.logout();
// On déclenche la page d'erreur Nuxt
throw showError({
statusCode: 401,
statusMessage: 'Session expirée ou accès non autorisé',
fatal: true // 'fatal: true' force le rendu de la page d'erreur même côté client
});
}
// Optionnel : Gérer d'autres codes
if (response.status >= 500) {
console.error("Erreur serveur, réessayez plus tard.");
}
}
});
return {
provide: {
api: {
lists: new ListsRepository(apiFetcher as any),
user: new UserRepository(apiFetcher as any)
}
}
};
});