@foxford/services v1.2.7
Сервисы Foxford
Библиотека фронтовых сервисов, которые помогут реализовать тот или иной функционал на уровне приложения. Здесь будут появляться сервисы фокса, которые будут "отвязаны" от других сервисов и функций, не принадлежащих им.
Captcha Service
Сервис для работы с капчей. В зависимости от данных с бэка используется или Google-капча, или Cloudflare Turnstile
Recaptcha Service
Сервис для работы с Google-капчей.
Поставщиком сервиса рекапчи является
@foxford/foxford-js-sdk
(FoxfordService)
Пример использования:
import { Foxford } from '@foxford/foxford-js-sdk'
const FoxfordService = new Foxford({
recaptchaConfig: {
locale: 'ru',
sitekey: 'captchaSecretKey',
},
})
const RecaptchaService: RecaptchaServiceInterface = FoxfordService.recaptcha
А далее в необходимом месте:
async function submitHandler() {
const tokenPayload = await RecaptchaService.execute() // <TOKEN>
}
В
stoege
сервис рекапчи доступен в'services/recaptcha'
Пример использования в stoege
import { RecaptchaService } from 'services/recaptcha'
async function submitHandler() {
const tokenPayload = await RecaptchaService.execute() // <TOKEN>
}
API Service
Для чего?
Чтобы разные проекты использовали единый HTTP-клиент (Axios) сервис апи был вынесен в пакеты и опубликован в npm
Апи из пакета сервисов представляет собой фабрику, которая принимает параметры и возвращает инстанс клиента, подробнее описано здесь
Как обесепечивается единобразное использование HTTP-клиента?
Точкой правды, поставщиком 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 Предназначен для хождения "наружу"
Базовый конфиг Api используемый для FoxfordService.api
{
xsrfCookieName: CSRF_COOKIE_NAME,
xsrfHeaderName: 'X-CSRF-Token',
headers: { 'X-Requested-With': 'XMLHttpRequest' },
}
Конфиг Api используемый для FoxfordService.foxApi
{
xsrfCookieName: CSRF_COOKIE_NAME,
xsrfHeaderName: 'X-CSRF-Token',
headers: { 'X-Requested-With': 'XMLHttpRequest' },
withCredentials: true,
}
При необходимости можно расширить или переопределить конфиг для FoxfordService.foxApi
Пример использования апи из FoxfordService
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)
}
Пример использования апи в stoege
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)
}
3 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
10 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
10 months ago
6 months ago
7 months ago
6 months ago
7 months ago
7 months ago
10 months ago
6 months ago
7 months ago
10 months ago
6 months ago
7 months ago
7 months ago
10 months ago
7 months ago
7 months ago
10 months ago
6 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago