| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import {useProfileAccessStore} from "~/store/profile/access";
- import {FetchContext, FetchOptions} from "ohmyfetch";
- import PageStore from "~/services/store/pageStoreHelper";
- import {TYPE_ALERT} from "~/types/enums";
- import {useRuntimeConfig} from "#app";
- import ApiRequestService from "~/services/data/apiRequestService";
- import {AssociativeArray} from "~/types/data";
- /**
- * Retourne une instance de ApiRequestService configurée pour interroger l'api Ap2i
- *
- * @see https://github.com/unjs/ohmyfetch/blob/main/README.md#%EF%B8%8F-create-fetch-with-default-options
- */
- export const useAp2iRequestService = () => {
- const runtimeConfig = useRuntimeConfig()
- const baseURL = runtimeConfig.baseUrl ?? runtimeConfig.public.baseUrl
- /**
- * 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 && options.noXaccessId) {
- return
- }
- const profileAccessStore = useProfileAccessStore()
- const headers: AssociativeArray = {
- 'x-accessid': String(profileAccessStore.id),
- 'Authorization': 'BEARER ' + profileAccessStore.bearer,
- }
- if (profileAccessStore.switchId) {
- headers['x-switch-user'] = String(profileAccessStore.switchId)
- }
- options.headers = { ...options.headers, ...headers }
- console.log('Request : ' + request + ' (SSR: ' + process.server + ')')
- }
- /**
- * 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')
- console.error('Unauthorized')
- }
- else if (response && response.status === 403) {
- new PageStore().addAlerts(TYPE_ALERT.ALERT, ['forbidden'])
- console.error('Forbidden')
- }
- else if (response && response.status >= 404) {
- // @see https://developer.mozilla.org/fr/docs/Web/HTTP/Status
- new PageStore().addAlerts(TYPE_ALERT.ALERT, [error ? error.message : response.statusText])
- console.error(error ? error.message : response.statusText)
- }
- }
- const config : FetchOptions = {
- baseURL,
- onRequest,
- onResponseError
- }
- // Utilise la fonction `create` de ohmyfetch pour générer un fetcher dédié à l'interrogation de Ap2i
- const fetcher = $fetch.create(config)
- return new ApiRequestService(fetcher)
- }
|