/
romatur
/
rn-dev
Обзор
Документация
Войти
/
romatur
/
rn-dev
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
rn-dev-project-api/src/services/createApiClient.ts
73 строки
2 KB
Roman.Turusov
init
08 апр 2026, 23:35
08 апр 2026, 23:35
c780c58
Код
Авторство
О чём код?
import axios, { type AxiosError, AxiosRequestConfig, InternalAxiosRequestConfig, } from 'axios' import { RequestConfig } from 'types/axios' import ApiClient from './ApiClient' import { WAITING_REFRESH_REQUEST_DELAY } from '../constants' interface CreateInstanceParams extends AxiosRequestConfig { authBaseUrl: string requestInterceptors: Array< | (( value: InternalAxiosRequestConfig, ) => InternalAxiosRequestConfig | Promise<InternalAxiosRequestConfig>) | null > responseInterceptors: Array< ((error: AxiosError) => Promise<AxiosError> | Promise<unknown>) | null > requestConfig?: Omit<RequestConfig, 'isRefreshing' | 'isRefreshingFailed'> } const createApiClient = ({ baseURL, authBaseUrl, headers, requestInterceptors, responseInterceptors, requestConfig, timeout = 30 * 1000, }: CreateInstanceParams) => { const defaultRequestConfig: RequestConfig = { withAuthorization: true, isRefreshing: false, isRefreshingFailed: false, waitingRefreshRequestDelay: WAITING_REFRESH_REQUEST_DELAY, } const config: AxiosRequestConfig = { baseURL, headers: { ...headers, 'Content-Type': 'application/json', }, ...defaultRequestConfig, ...requestConfig, timeout, } const axiosInstance = axios.create(config) ApiClient.init(axiosInstance, authBaseUrl) requestInterceptors.forEach(requestInterceptor => { axiosInstance.interceptors.request.use(requestInterceptor) }) responseInterceptors.forEach(responseInterceptor => { axiosInstance.interceptors.response.use( response => response, responseInterceptor, ) }) return ApiClient as Omit< typeof ApiClient, 'request' | 'getAuthClientId' | 'getClientSecret' | 'init' > } export default createApiClient