/* eslint-disable @typescript-eslint/naming-convention */ import axios from 'axios'; import { ApiMethods } from '../../model/api'; import { CustomResponse } from '../../model/common'; import serverSettings from '../../settings/server'; import getAdminToken from './getAdminToken'; import handleError from './handleError'; const authenticateRequest = async ( method: ApiMethods, route: string, body?: K, ): Promise> => { const { data: adminToken } = await getAdminToken(); const { apiUrl } = serverSettings(); switch (method) { case ApiMethods.Get: { const promise = new Promise>((resolve) => { axios .get(`${apiUrl}${route}`, { headers: { Authorization: `Bearer ${adminToken}`, }, }) .then((response) => { resolve({ ok: true, data: response.data, }); }) .catch((err) => { const error = handleError(err); resolve({ ok: false, error, }); }); }); return promise; } case ApiMethods.Post: { const promise = new Promise>((resolve) => { axios .post(`${apiUrl}${route}`, body || {}, { headers: { Authorization: `Bearer ${adminToken}`, }, }) .then((response) => { resolve({ ok: true, data: response.data, }); }) .catch((err) => { const error = handleError(err); resolve({ ok: false, error, }); }); }); return promise; } case ApiMethods.Put: { const promise = new Promise>((resolve) => { axios .put(`${apiUrl}${route}`, body || {}, { headers: { Authorization: `Bearer ${adminToken}`, }, }) .then((response) => { resolve({ ok: true, data: response.data, }); }) .catch((err) => { const error = handleError(err); resolve({ ok: false, error, }); }); }); return promise; } default: { throw Error('No method specified'); } } }; export default authenticateRequest;