import axios, { AxiosRequestConfig, AxiosError, AxiosResponse } from 'axios'; import Cookies from 'js-cookie'; //@ts-ignore import { TokenService } from '../token'; export interface HandleStatusCode { [key: number]: (error: AxiosError) => void; } export const apiFailureErrorMessage = 'Failure in API call'; export class HttpService { constructor(protected tokenService: TokenService) {} async get( url: string, config?: AxiosRequestConfig ): Promise> { return this.request({ method: 'GET', url, ...config }); } async post( url: string, config?: AxiosRequestConfig ): Promise> { return this.request({ method: 'POST', url, ...config }); } async put( url: string, config?: AxiosRequestConfig ): Promise> { return this.request({ method: 'PUT', url, ...config }); } async patch( url: string, config?: AxiosRequestConfig ): Promise> { return this.request({ method: 'PATCH', url, ...config }); } async delete( url: string, config?: AxiosRequestConfig ): Promise> { return this.request({ method: 'DELETE', url, ...config }); } async request(config: AxiosRequestConfig): Promise> { try { const token = await this.tokenService.getToken(); const defaultRequestInfo: AxiosRequestConfig = { headers: { // 'Content-Type': 'application/json;charset=UTF-8', }, }; if (token) { //@ts-ignore defaultRequestInfo.headers['acciojobs-token'] = token; } return axios.request({ ...defaultRequestInfo, ...config, headers: { ...defaultRequestInfo.headers, ...config.headers, }, }); } catch (e: any) { console.log('error from request', e); if (e.response.status === 401 || e.response.status === 403) { console.log('unauthorized !!'); localStorage.clear(); Cookies.remove('acciojobs-token', { domain: `.acciojob.com`, }); window.open('https://authentication.acciojob.com/login/phone', '_self'); } return e.response; } } onHttpErrorStatus( error: AxiosError, handleStatusCode: HandleStatusCode ): void { if (error.response && error.response.status) { const statusCode = error.response.status; const handleStatusCodeFn = handleStatusCode[statusCode]; if (typeof handleStatusCodeFn === 'function') { handleStatusCodeFn(error); } } } }