Библиотека фронтовых сервисов, которые помогут реализовать тот или иной функционал на уровне приложения. Здесь будут появляться сервисы фокса, которые будут "отвязаны" от других сервисов и функций, не принадлежащих им.
Сервис для работы с капчей. В зависимости от данных с бэка используется или Google-капча, или Cloudflare Turnstile
Чтобы разные проекты использовали единый HTTP-клиент (Axios) сервис апи был вынесен в пакеты и опубликован в npm
Апи из пакета сервисов представляет собой фабрику, которая принимает параметры и возвращает инстанс клиента, подробнее описано здесь
Точкой правды, поставщиком HTTP-клиента является
@foxford/foxford-js-sdk (FoxfordService)
Все "потребители" должны использовать HTTP-клиент изFoxfordService
FoxfordService
использует пакет сервисов @foxford/services
для получения инстанса Api
конфигурирует его и примешивает Interceptors
и отдает наружу два клиента:
-
FoxfordService.foxApi
- инстанс Api, ориентированный на использование внутренних сервисов Фоксфорда, в нем:
- Используются
Api Interceptors
По умолчанию используются два обязательных перехватчика(camelize
иreferrer
) и один опциональный(captcha
) вinterceptors.request
, это:-
camelize
- для преобразования кейса в ответе запроса -
referrer
- для проброса реферрера в запросе -
captcha
- опциональный, будет добавлен, если при инициализацииFoxfordService
, в конфиге будет передан конфиг для капчи. Подробнее здесь
-
- Используется
axiosRetry
- плагин Api, перехватывающий упавшие запрос и поторяющий его (3 раза) - Указан
baseURL
-
FoxfordService.api
- "базовый" инстанс Api, который имеет минимальную конфигурацию и не использует Interceptors и в нем не указан baseUrl Предназначен для хождения "наружу"
{
xsrfCookieName: CSRF_COOKIE_NAME,
xsrfHeaderName: 'X-CSRF-Token',
headers: { 'X-Requested-With': 'XMLHttpRequest' },
}
{
xsrfCookieName: CSRF_COOKIE_NAME,
xsrfHeaderName: 'X-CSRF-Token',
headers: { 'X-Requested-With': 'XMLHttpRequest' },
withCredentials: true,
}
При необходимости можно расширить или переопределить конфиг для FoxfordService.foxApi
import { Foxford } from '@foxford/foxford-js-sdk'
const myHost = 'exampleHost'
const FoxfordService = new Foxford({
api: {
config: {
baseURL: myHost,
},
},
host: myHost, // легаси, на работу апи не влияет, есть "на всякий случай",
recaptchaConfig: {
locale: 'ru',
sitekey: 'captchaSecretKey',
},
})
const getInternalData = () => {
FoxfordService.foxApi.get(`/some-internal-url-protected-with-captcha`).then(({ data }) => data)
}
const getExternalData = () => {
FoxfordService.api.get(`https://some.external.source`).then(({ data }) => data)
}
import { Api, BaseApi } from 'services/api'
const getInternalData = () => {
Api.get(`/some-internal-url-protected-with-captcha`).then(({ data }) => data)
}
const getExternalData = () => {
BaseApi.get(`https://some.external.source`).then(({ data }) => data)
}