va-tracker/src/electron/api/axiosClient.ts

54 lines
1.5 KiB
TypeScript

// electron/api/axiosClient.ts
import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
import { getToken } from '../utils/tokenHelper.js';
import chalk from "chalk";
import { sendTokenExpired } from '../ipc/ipcHandler.js';
import https from 'https';
const TOKEN_KEY = 'ACCESS_TOKEN';
const httpsAgent = new https.Agent({
rejectUnauthorized: false
});
const api: AxiosInstance = axios.create({
baseURL: 'http://localhost:3000/api/v1/va', // 🔁 your backend
httpsAgent
// timeout: 10000,
});
// console.log("Creating Axios Instance", axios.VERSION);
// console.log("Axios .get reference:", api.get);
// console.log("Axios .request reference:", api.request);
// --- Request Interceptor ---
api.interceptors.request.use(
async (config: AxiosRequestConfig): Promise<any> => {
const token = await getToken(TOKEN_KEY);
config.headers = config.headers || {}
if (token) {
config.headers['token'] = token;
config.headers['ngrok-skip-browser-warning'] = 'true';
}
return config;
},
(error) => Promise.reject(error)
);
// --- Response Interceptor ---
api.interceptors.response.use(
(response: AxiosResponse) => response.data,
async (error) => {
// console.error('[Axios Error]', error.message);
if (error.response?.status === 401 || 403) {
console.warn('Token expired — trigger refresh logic if needed');
sendTokenExpired();
}
return Promise.reject(error);
}
);
export default api;