@foxford/services
v2.0.1
Published
Foxford services
Readme
Сервисы Foxford
Библиотека фронтовых сервисов, которые помогут реализовать тот или иной функционал на уровне приложения.
HTTP API (ApiService)
HTTP-клиент для работы с API. Транспортный слой (axios) скрыт за публичным интерфейсом —
потребители пакета работают только с типами ApiInstance / ApiStatic из @foxford/services.
import { ApiService } from '@foxford/services'
import type { ApiInstance } from '@foxford/services'
// Клиент для внутренних API (с interceptors и retry)
const foxApi: ApiInstance = ApiService.createFoxApiInstance({
config: { baseURL: 'https://api.foxford.ru', timeout: 10_000 },
})
const response = await foxApi.get('/users/me')Подробнее — см. src/api/README.md.
Captcha Service
Сервис для работы с капчей.
Представляет из себя фасад для работы с одним из провайдеров (Recaptcha, Cloudflare Turnstile, YandexSmartCaptcha).
Все капчи работают в режиме invisible.
type CaptchaProviderName = 'recaptcha' | 'cloudflare_turnstile' | 'yandex_smart_captcha'
type CaptchaConfig = {
locale?: string
sitekey?: string
provider?: CaptchaProviderName
notify?: (...args: any[]) => void // метод для нотификации юзера об ошибке
onRenderCaptcha?: (provider: CaptchaProviderName) => void // событие когда виджет капчи будет срендерен(не обязательно виден)
onSuccessChallenge?: (provider: CaptchaProviderName) => void // событие когда капча успешно решена(токен получен)
onErrorChallenge?: (provider: CaptchaProviderName, error: CaptchaError) => void // событие когда при решение произошла ошибка
onWarnChallenge?: (provider: CaptchaProviderName, error: CaptchaError) => void // событие когда при решении произошла не критичная ошибка
onBeforeInteractiveChallenge?: (provider: CaptchaProviderName) => void // событие когда invisible капча "поднимается" для юзера
onAfterInteractiveChallenge?: (provider: CaptchaProviderName) => void // событие когда открытая invisible капча решается юзером
}Пример использования:
import { CaptchaService } from '@foxford/services'
const captcha = new CaptchaService({
locale: 'ru',
sitekey: 'KEY',
provider: 'yandex_smart_captcha',
})
async function submit() {
const token = await captcha.execute()
// {
// captcha_provider: 'yandex_smart_captcha',
// captcha_token: 'TOKEN',
// }
}SocketService
Сокет-сервис поверх Centrifuge с одним активным соединением между табами через BroadcastChannel.
import { SocketService } from '@foxford/services'
const socket = new SocketService({
token: 'token',
refreshToken: () => Promise.resolve('refresh_token'),
transport: [
{ endpoint: 'ws://localhost:8000/connection/websocket?cf_protocol_version=v2', transport: 'websocket' },
],
})
socket.subscribe('events#11358048', (message) => {
console.log('MESSAGE:', message)
})Подробнее — см. src/socket/README.md.
BroadcastChannel
Фабрика createBroadcastChannel поверх broadcast-channel
с автоматическим выбором транспорта (localstorage на iOS, дефолтный — на остальных).
import { createBroadcastChannel } from '@foxford/services'
const channel = createBroadcastChannel<{ type: string }>('app-events')
channel.onmessage = (msg) => {
console.log('MESSAGE:', msg)
}
await channel.postMessage({ type: 'ping' })