import {useProfileAccessStore} from "~/store/profile/access"; import {FetchContext, FetchOptions} from "ohmyfetch"; import Page from "~/services/store/page"; import {TYPE_ALERT} from "~/types/enums"; /** * Utilise la fonction `create` de ohmyfetch pour générer un fetcher dédié à l'interrogation de Ap2i * * @see https://github.com/unjs/ohmyfetch/blob/main/README.md#%EF%B8%8F-create-fetch-with-default-options */ export const useAp2iFetch = () => { const runtimeConfig = useRuntimeConfig() /** * Peuple les headers avant l'envoi de la requête * * @param request * @param options */ const onRequest = async function ({ request, options }: FetchContext) { // @ts-ignore if(options ?. params.noXaccessId) { return } request = request as Request const profileAccessStore = useProfileAccessStore() request.headers.set('x-accessid', String(profileAccessStore.id)) request.headers.set('Authorization', 'BEARER ' + profileAccessStore.bearer) if (profileAccessStore.switchId) { request.headers.set('x-switch-user', String(profileAccessStore.switchId)) } } /** * Gère les erreurs retournées par l'api * * @param request * @param response * @param error */ const onResponseError = async function ({ request, response, error }: FetchContext) { if (response && response.status === 401) { navigateTo('/login') } if (response && response.status === 403) { new Page().addAlerts(TYPE_ALERT.ALERT, ['forbidden']) } if (response && response.status === 500) { new Page().addAlerts(TYPE_ALERT.ALERT, [error ? error.message : response.statusText]) } } const config : FetchOptions = { baseURL: runtimeConfig.baseUrl ?? runtimeConfig.public.baseUrl, onRequest, onResponseError } return $fetch.create(config) }