useAp2iFetch.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import {useProfileAccessStore} from "~/store/profile/access";
  2. import {FetchContext, FetchOptions} from "ohmyfetch";
  3. import Page from "~/services/store/page";
  4. import {TYPE_ALERT} from "~/types/enums";
  5. /**
  6. * Utilise la fonction `create` de ohmyfetch pour générer un fetcher dédié à l'interrogation de Ap2i
  7. *
  8. * @see https://github.com/unjs/ohmyfetch/blob/main/README.md#%EF%B8%8F-create-fetch-with-default-options
  9. */
  10. export const useAp2iFetch = () => {
  11. const runtimeConfig = useRuntimeConfig()
  12. /**
  13. * Peuple les headers avant l'envoi de la requête
  14. *
  15. * @param request
  16. * @param options
  17. */
  18. const onRequest = async function ({ request, options }: FetchContext) {
  19. // @ts-ignore
  20. if(options ?. params.noXaccessId) {
  21. return
  22. }
  23. request = request as Request
  24. const profileAccessStore = useProfileAccessStore()
  25. request.headers.set('x-accessid', String(profileAccessStore.id))
  26. request.headers.set('Authorization', 'BEARER ' + profileAccessStore.bearer)
  27. if (profileAccessStore.switchId) {
  28. request.headers.set('x-switch-user', String(profileAccessStore.switchId))
  29. }
  30. }
  31. /**
  32. * Gère les erreurs retournées par l'api
  33. *
  34. * @param request
  35. * @param response
  36. * @param error
  37. */
  38. const onResponseError = async function ({ request, response, error }: FetchContext) {
  39. if (response && response.status === 401) {
  40. navigateTo('/login')
  41. }
  42. if (response && response.status === 403) {
  43. new Page().addAlerts(TYPE_ALERT.ALERT, ['forbidden'])
  44. }
  45. if (response && response.status === 500) {
  46. new Page().addAlerts(TYPE_ALERT.ALERT, [error ? error.message : response.statusText])
  47. }
  48. }
  49. const config : FetchOptions = {
  50. baseURL: runtimeConfig.baseUrl ?? runtimeConfig.public.baseUrl,
  51. onRequest,
  52. onResponseError
  53. }
  54. return $fetch.create(config)
  55. }