123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import type { AxiosResponse, RawAxiosRequestHeaders } from 'axios';
- import axios from 'axios';
- import LinkHeader from 'http-link-header';
- import ready from './ready';
- import type { GetState } from './store';
- export const getLinks = (response: AxiosResponse) => {
- const value = response.headers.link as string | undefined;
- if (!value) {
- return new LinkHeader();
- }
- return LinkHeader.parse(value);
- };
- const csrfHeader: RawAxiosRequestHeaders = {};
- const setCSRFHeader = () => {
- const csrfToken = document.querySelector<HTMLMetaElement>(
- 'meta[name=csrf-token]',
- );
- if (csrfToken) {
- csrfHeader['X-CSRF-Token'] = csrfToken.content;
- }
- };
- void ready(setCSRFHeader);
- const authorizationHeaderFromState = (getState?: GetState) => {
- const accessToken =
- getState && (getState().meta.get('access_token', '') as string);
- if (!accessToken) {
- return {};
- }
- return {
- Authorization: `Bearer ${accessToken}`,
- } as RawAxiosRequestHeaders;
- };
- // eslint-disable-next-line import/no-default-export
- export default function api(getState: GetState) {
- return axios.create({
- headers: {
- ...csrfHeader,
- ...authorizationHeaderFromState(getState),
- },
- transformResponse: [
- function (data: unknown) {
- try {
- return JSON.parse(data as string) as unknown;
- } catch {
- return data;
- }
- },
- ],
- });
- }
|