@foxford/services
TypeScript icon, indicating that this package has built-in type declarations

1.3.0 • Public • Published

Сервисы Foxford

Библиотека фронтовых сервисов, которые помогут реализовать тот или иной функционал на уровне приложения. Здесь будут появляться сервисы фокса, которые будут "отвязаны" от других сервисов и функций, не принадлежащих им.

Captcha Service

Сервис для работы с капчей. В зависимости от данных с бэка используется или Google-капча, или Cloudflare Turnstile


API Service

Для чего?

Чтобы разные проекты использовали единый HTTP-клиент (Axios) сервис апи был вынесен в пакеты и опубликован в npm

Апи из пакета сервисов представляет собой фабрику, которая принимает параметры и возвращает инстанс клиента, подробнее описано здесь


Как обесепечивается единобразное использование HTTP-клиента?

Точкой правды, поставщиком HTTP-клиента является @foxford/foxford-js-sdk (FoxfordService) Все "потребители" должны использовать HTTP-клиент из FoxfordService

FoxfordService использует пакет сервисов @foxford/services для получения инстанса Api конфигурирует его и примешивает Interceptors и отдает наружу два клиента:

  1. FoxfordService.foxApi - инстанс Api, ориентированный на использование внутренних сервисов Фоксфорда, в нем:
  • Используются Api Interceptors По умолчанию используются два обязательных перехватчика(camelize и referrer) и один опциональный(captcha) в interceptors.request, это:
    • camelize - для преобразования кейса в ответе запроса
    • referrer - для проброса реферрера в запросе
    • captcha - опциональный, будет добавлен, если при инициализации FoxfordService, в конфиге будет передан конфиг для капчи. Подробнее здесь
  • Используется axiosRetry - плагин Api, перехватывающий упавшие запрос и поторяющий его (3 раза)
  • Указан baseURL
  1. 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)
}

Readme

Keywords

Package Sidebar

Install

npm i @foxford/services

Weekly Downloads

51

Version

1.3.0

License

MIT

Unpacked Size

271 kB

Total Files

152

Last publish

Collaborators

  • foxford-service
  • iammalikov
  • dmeremyanin
  • romanlex
  • alexkonst
  • stud-mai