51 lines
1.5 KiB
TypeScript
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)
|
|
}
|
|
}
|
|
};
|
|
}); |