1.2.7 • Published 3 months ago

@foxford/services v1.2.7

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

Сервисы 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 и отдает наружу два клиента:

  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)
}
1.2.7

3 months ago

1.2.6

3 months ago

1.2.5

4 months ago

1.2.4

4 months ago

1.2.3

4 months ago

1.2.2

4 months ago

1.2.0

4 months ago

1.2.1

4 months ago

1.0.0

10 months ago

1.1.0

6 months ago