Перейти к основному содержимому

MineFlow Client SDK

Платформо-агностичный SDK для работы с backend MineFlow из React (web) и React Native (mobile). Бизнес-логика — запросы, идемпотентность, ошибки, async-саги, FSM, RBAC, realtime, offline-запись — пишется один раз и переиспользуется обеими платформами. UI на каждой платформе свой («share logic, not pixels»).

Архитектурное обоснование — ADR-0042.

TL;DR

Поставь пакеты → оберни приложение в <MineflowProvider> → дёргай хуки (useAssets, useApproveShiftReport, useNotificationFeed, …) и валидируй формы Zod-схемами (zCreateAssetDto). Всё типобезопасно из OpenAPI и не дрейфует от бэка (CI-гейт). → Быстрый старт

Что внутри этого сайта

РазделЧтоИсточник
Обзор (эта страница)архитектура, слои, anti-driftрукописный
Быстрый стартустановка → провайдер → первый экранрукописный
Пакетынарративный гайд по каждому из 9 пакетов с примерамирукописный
Рецептыошибки, саги, SSE, offline, RBAC, FSM, формы, RNрукописный
API-референс (из кода)сигнатуры/типы/экспорты, извлечённые TypeDoc'омгенерится из packages/<pkg>/src

Два вида документации намеренно дополняют друг друга: нарративные гайды объясняют «как и зачем» с примерами, а API-референс даёт точные сигнатуры прямо из исходников и пересобирается на каждом билде, поэтому никогда не расходится с кодом.

Архитектура (слои)

СлойПакетЧтоГайд
L0@mineflow/api-clientTS-типы REST (codegen из OpenAPI, zero-runtime)
L0@mineflow/api-zodZod-схемы форм (codegen из OpenAPI)
L0@mineflow/api-schemasFSM-машины (xstate) + status-энумы
L1@mineflow/client-corefetch + Idempotency-Key + ошибки + саги + пагинация + SSE + JWT
L2@mineflow/client-reactпровайдер + хуки (data/mutation/saga/notifications/RBAC/FSM)
L3@mineflow/auth-webKeycloakTokenProvider (web)
L3@mineflow/auth-nativeReactNativeTokenProvider (RN)
@mineflow/contractsтипы/схемы доменных событий (для realtime/интеграций)
@mineflow/shared-validationИИН/БИН/IBAN-проверки (frontend-safe)

В 95% случаев фронтенд работает только с client-react + api-zod + auth-web. client-core — низкоуровневое ядро (используется через провайдер), api-schemas — для FSM-кнопок.

Anti-drift — почему SDK не разойдётся с бэком

Один источник истины на бэке → в SDK попадает codegen'ом или re-export'ом, никогда копией → CI-гейт валит тот же PR.

  • Типы (api-client) — codegen из live-OpenAPI.
  • Zod-схемы форм (api-zod) — codegen из live-OpenAPI.
  • FSM-машины и энумы (api-schemas) — re-export спецификации бэка.
  • Роли — единый словарь Keycloak→canonical в ядре.
  • Read-хуки (list/detail) — генерятся из OpenAPI (pnpm gen:hooks), падают fail-loud при переименовании эндпоинта.

Подробно — ADR-0042 § Anti-drift contract.

Ключевые правила

  • baseUrl — это origin (https://api.mineflow.local), без пути: пути из api-client уже содержат /api/v1.
  • Idempotency-Key проставляется автоматически на все write.
  • Async-саги: некоторые POST возвращают 202 + sagaId; saga-хуки сами поллят статус до терминала.
  • ОшибкиMineflowApiError со стабильным error.code; гейти UI по code, не по тексту.
  • Object-scope / multi-tenancy делает сервер по JWT — org_id в URL не передаётся.
  • FSM: показывай кнопки по useAvailableActions(machine, status); бэк всё равно валидирует переход (409).
  • Offline-first: write-операции рапорта паузятся офлайн и доигрываются при реконнекте.

→ Дальше: Быстрый старт