/* eslint-disable no-console */ import type { AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse } from 'axios'; import axios from 'axios'; const service = axios.create({ baseURL: '', timeout: 600 * 1000, // Timeout in milliseconds headers: { 'Content-Type': 'application/json', //'application/json;charset=UTF-8', lang: 'en-US'.toLowerCase() }, withCredentials: true // Allow cross-domain requests with cookies }); export function Request(configParam: AxiosRequestConfig) { return service.request, D>(configParam); } export function POST(configParam: AxiosRequestConfig) { return service.request>({ ...configParam, method: 'post' }); } export function GET(configParam: AxiosRequestConfig) { return service.request>({ ...configParam, method: 'get' }); } export function DELETE(configParam: AxiosRequestConfig) { return service.request>({ ...configParam, method: 'delete' }); } /** * HTTP request interceptor */ service.interceptors.request.use( (config) => { const headers = config.headers ?? {}; const timestamp = Date.now().toString(); if (headers['Content-Type'] === 'application/json') { config.data = JSON.stringify(config.data); } if (!localStorage.getItem('upload') && window.location.pathname !== '/') { return Promise.reject('Please login first').finally(() => { setTimeout(() => { window.location.href = '/'; }, 500); }); } config.headers = { timestamp: timestamp, ...config.headers } as unknown as AxiosRequestHeaders; return config; }, (error) => { return Promise.reject(error); } ); /** * HTTP response interceptor */ service.interceptors.response.use( (response) => { return checkStatus(response); }, (error) => { console.log('Request error:', error); if (error.response) { console.log('Response error data:', error.response.data); console.log('Response error status:', error.response.status); console.log('Response error headers:', error.response.headers); } else if (error.request) { console.log('No response received:', error.request); } else { console.log('Error setting up request:', error.message); } throw error; } ); const checkStatus = (response: any) => { // server check for custom code // http check if (response.status >= 200 && response.status < 300) { // HTTP normal return response; } return response.json(); };