26 lines
774 B
TypeScript
Executable file
26 lines
774 B
TypeScript
Executable file
import axios, { AxiosInstance } from 'axios';
|
|
import type { ApiClientConfig, ApiClient } from './types';
|
|
import { authInterceptor } from './interceptors/auth.interceptor';
|
|
import { errorInterceptor } from './interceptors/error.interceptor';
|
|
|
|
export function createApiClient(config: ApiClientConfig): ApiClient {
|
|
const instance: AxiosInstance = axios.create({
|
|
baseURL: config.baseURL,
|
|
timeout: config.timeout ?? 30000,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
|
|
// Add auth interceptor
|
|
if (config.getAccessToken) {
|
|
authInterceptor(instance, config.getAccessToken);
|
|
}
|
|
|
|
// Add error interceptor
|
|
errorInterceptor(instance, config.onUnauthorized, config.onError);
|
|
|
|
return instance as ApiClient;
|
|
}
|
|
|
|
export type { ApiClient };
|