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

index

@mineflow/client-core


@mineflow/client-core

Classes

ClassDescription
MineflowApiErrorТипизированная ошибка REST-вызова. Бросается из unwrap/normalizeError, когда ответ не-OK. Наследует Error, поэтому ловится обычным try/catch и распознаётся через instanceof MineflowApiError.
SagaTimeoutErrorБросается pollSaga, когда сага не достигла терминала за timeoutMs. Несёт sagaId зависшей саги и лимит — для логирования/ретраев на стороне UI.

Interfaces

InterfaceDescription
AuthFetchOptionsОпции конструктора makeAuthenticatedFetch.
CursorPageОдна страница курсорного списка.
GetTokenOptionsОпции getToken.
JwtClaimsПодмножество клеймов access-token'а Keycloak, которые читает фронт. Открытый индекс [claim: string] оставляет доступ к остальным клеймам (sub, name, exp…).
MineflowClientOptionsОпции all-in-one конструктора createMineflowClient.
PollSagaOptionsОпции опроса саги pollSaga.
ProblemDetailsФорма тела ошибки бэкенда по RFC 7807 (Problem Details).
SagaStatusClientМинимальный структурный контракт openapi-fetch-клиента для saga-status. pollSaga принимает любой объект с таким GET, поэтому реальный MineflowClient подходит as-is, а тесты могут подсунуть мок.
TokenProviderПоставщик access-token'а. web: keycloak-js; RN: react-native-app-auth.
TokenStorageХранилище токена/состояния. web: localStorage; RN: expo-secure-store.

Type Aliases

Type AliasDescription
IdGeneratorГенератор Idempotency-Key (ADR-0012). web: crypto.randomUUID; RN: react-native-get-random-values + uuid. Должен возвращать свежий UUID на каждый вызов.
MineflowClientТип типобезопасного REST-клиента MineFlow — openapi-fetch Client, параметризованный сгенерированными из OpenAPI paths. Даёт методы .GET/.POST/.PATCH/.PUT/.DELETE с автодополнением путей, query- и body-типов.
SagaStatusСнимок состояния саги из GET /api/v1/sagas/{sagaId}/status. Содержит append-only массив steps (см. шапку файла) — сырой saga_log, который latestStatusByStep сворачивает в последний статус по каждому шагу.
SagaStepStatusОдна строка saga_log: имя шага и его статус на момент записи. Поле status — настоящий union канонического enum (не string), протёкший из бэка через OpenAPI (anti-drift, ADR-0042).
SystemRoleКанонический RBAC-контракт MineFlow — 7 системных ролей в PascalCase.

Variables

VariableDescription
KEYCLOAK_ROLE_ALIASESKeycloak realm-role aliases (lowercase) → канонический MineFlow SystemRole. Платформо-агностично: используется и web (auth-web), и RN (auth-native) адаптерами — живёт в ядре, чтобы не было RN→web зависимости и второй копии.

Functions

FunctionDescription
collectAllPagesСтягивает все страницы курсорного списка в один массив, последовательно передавая nextCursor следующему запросу, пока он не станет null.
createMineflowClientAll-in-one конструктор: за один вызов строит аутентифицированный fetch (Bearer + авто Idempotency-Key + retry-once на 401) и openapi-fetch-клиент поверх него. Подходит для не-React кода: скриптов, CLI, фоновых задач.
createRestClientНизкоуровневый конструктор: openapi-fetch клиент поверх ГОТОВОГО fetch.
decodeJwtДекодирует payload (вторую часть) JWT в объект клеймов. Подпись НЕ проверяется — это работа сервера; фронт читает клеймы только для UI/scope.
defaultIsSettledДефолтный предикат завершённости саги: - любой шаг в финальном последнем статусе failed/compensated → терминал; - иначе settled, когда последний статус КАЖДОГО шага = completed.
hasTerminalFailureЕсть ли шаг в терминальном провале (failed/compensated). Такой статус окончателен независимо от будущих шагов, поэтому pollSaga возвращает его сразу, БЕЗ стабилизации (в отличие от success-пути).
latestStatusByStepСворачивает append-only строки saga_log в последний статус по каждому шагу. Строки упорядочены по времени (at asc), поэтому поздняя перетирает раннюю.
makeAuthenticatedFetchСобирает fetch-декоратор, который перед каждой отправкой добавляет Authorization: Bearer <token>, на write-методы (POST/PUT/PATCH/DELETE) ставит Idempotency-Key (ADR-0012), а на ответ 401 ровно один раз форсит refresh токена и повторяет запрос.
mapKeycloakRolesМаппит realm-роли Keycloak (lowercase-алиасы) в канонические SystemRole (PascalCase), дедуплицируя результат. Неизвестные роли (не из KEYCLOAK_ROLE_ALIASES) молча отбрасываются — фронт оперирует только 7 системными ролями. Сравнение регистронезависимо (role.toLowerCase()).
normalizeErrorПревращает (HTTP-статус, тело ответа) в типизированную MineflowApiError.
orgIdFromTokenДостаёт organization_id владельца сессии из токена (клейм org_id, ADR-0020). Нужен только для UI (показать организацию) — авторизацию и scope делает бэк по JWT, в URL org_id не передаётся.
pollSagaОпрашивает статус async-саги до терминального состояния и возвращает финальный снимок. Бэк выполняет некоторые POST асинхронно (возвращая 202 + sagaId), SSE для саг нет — поэтому статус тянется поллингом.
realmRolesFromTokenДостаёт realm-роли из токена (lowercase-алиасы Keycloak, напр. ['foreman']). Маппинг в канонический SystemRole (PascalCase) делает mapKeycloakRoles, а не ядро.
unwrapИзвлекает данные из openapi-fetch-совместимого результата { data, error, response }, либо бросает MineflowApiError, если ответ не-OK или присутствует error.