import axios, { type CancelToken } from 'axios'; import { isNil, not } from 'ramda'; const contentTypeHeaders = { 'Content-Type': 'application/x-www-form-urlencoded' }; interface GetDataParameters { endpoint: string; headers?: Record; } const getData = (cancelToken: CancelToken) => ({ endpoint, headers }: GetDataParameters): Promise => { const baseOptions = { cancelToken }; const options = not(isNil(headers)) ? { ...baseOptions, headers } : baseOptions; return axios.get(endpoint, options).then(({ data }) => data); }; interface RequestWithData { data: TData; endpoint: string; } const patchData = (cancelToken: CancelToken) => ({ endpoint, data }: RequestWithData): Promise => axios .patch(endpoint, JSON.stringify(data), { cancelToken, headers: contentTypeHeaders }) .then(({ data: result }) => result); const postData = (cancelToken: CancelToken) => ({ endpoint, data }: RequestWithData): Promise => axios .post(endpoint, JSON.stringify(data), { cancelToken, headers: contentTypeHeaders }) .then(({ data: result }) => result); const putData = (cancelToken: CancelToken) => ({ endpoint, data }: RequestWithData): Promise => axios .put(endpoint, JSON.stringify(data), { cancelToken, headers: contentTypeHeaders }) .then(({ data: result }) => result); const deleteData = (cancelToken: CancelToken) => (endpoint: string): Promise => axios .delete(endpoint, { cancelToken, headers: contentTypeHeaders }) .then(({ data }) => data); export { getData, patchData, postData, putData, deleteData };