40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
// electron/api/axiosClient.ts
|
|
import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
import { getToken } from '../utils/tokenHelper.js';
|
|
|
|
const TOKEN_KEY = 'auth_token';
|
|
|
|
const api: AxiosInstance = axios.create({
|
|
baseURL: 'https://wired-terminally-muskrat.ngrok-free.app/api/v1', // 🔁 your backend
|
|
timeout: 10000,
|
|
});
|
|
|
|
// --- Request Interceptor ---
|
|
api.interceptors.request.use(
|
|
async (config: AxiosRequestConfig): Promise<any> => {
|
|
const token = await getToken(TOKEN_KEY);
|
|
if (token && config.headers) {
|
|
config.headers.token = token;
|
|
config.headers['ngrok-skip-browser-warning'] = 98098;
|
|
}
|
|
|
|
console.log(`[Axios] ${config.method?.toUpperCase()} ${config.url}`);
|
|
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) {
|
|
console.warn('Token expired — trigger refresh logic if needed');
|
|
}
|
|
return Promise.reject(error);
|
|
}
|
|
);
|
|
|
|
export default api;
|