Подписки вендоров V3: было → становится

Подписки вендоров V3: было → становится An architecture diagram generated by Archify. Клиент · API-токен · Architecture component Клиент API-токен nginx · TLS · Architecture component nginx TLS API Gateway · без изменений · Architecture component API Gateway без изменений Auth · gRPC; Redis, TMS · Architecture component Auth gRPC; Redis, TMS LMS · Check(...) · Architecture component LMS Check(...) Proxy · изменяется: тип авторизации «Сервис подписок» · Architecture component Proxy изменяется: тип авторизации «Сервис подписок» Биллинг · sub_id в событии · Architecture component Биллинг sub_id в событии Ainima · новое: OAuth, RT, refresh · Architecture component Ainima новое: OAuth, RT, refresh RabbitMQ · q.api-gateway.config.v1 · Architecture component RabbitMQ q.api-gateway.config.v1 CMS · изменяется: пулы, AT · Architecture component CMS изменяется: пулы, AT Redis CMS · конфиг · Architecture component Redis CMS конфиг SMS · новое: выбор, выдача · Architecture component SMS новое: выбор, выдача Redis SMS · пулы, AT, привязки сессий · Architecture component Redis SMS пулы, AT, привязки сессий Провайдеры: API · запросы, usage · Architecture component Провайдеры: API запросы, usage Провайдеры · token endpoint · Architecture component Провайдеры token endpoint HTTPS TLS gRPC Check REST API sub_id Acquire / Report gRPC конфиг gRPC REST пулы, AT конфиг нексуса usage события события refresh: token endpoint Legend интерфейс сервис хранилище шлюз безопасность очередь внешнее

Что не меняется

  • • Клиент → nginx (TLS) → API Gateway; Gateway опрашивает Auth (gRPC, Redis-кэш токенов, при промахе TMS) и LMS Check(request_id, client_code, token_uuid, nexus_id), решает по двум ответам и передаёт запрос в Proxy (REST)
  • • Биллинг и платформенные квоты LMS; отказ «нексус недоступен» — до выбора подписки

Изменяется

  • • Ainima: подключение с PKCE, обмен callback, хранение refresh token, refresh по расписанию и по событию SMS, публикация access token для SMS
  • • CMS: документы «пулы подписок» и «AT для SMS» — оба только для SMS; Proxy новых документов не получает, для него подписочный нексус — обычный конфиг нексуса (тип авторизации Subscription, тип Claude/Codex), который Ainima формирует при сохранении; конфиг идёт по цепочке Ainima → RabbitMQ q.api-gateway.config.v1 → Gateway → CMS → fanout x.<client_code>.config.v1
  • • Proxy: новый тип авторизации «Сервис подписок» — Acquire по gRPC, access token и значения подписки подставляются в {{AUTH_TOKEN}} и заголовки, после ответа Report; штатные повторы — только для 429 Too Many Requests в ту же подписку; Bypass — вне MVP

Новое

  • • SMS (Subscriptions Management Service): сервис Middleware, хранилище только Redis; выбор подписки, выдача access token, наблюдения, резервы; refresh token не видит
  • • SMS → RabbitMQ → Ainima: сводка состояния и «нужен refresh»
  • • Липкие сессии: SMS держит привязку «ключ сессии + вендор → подписка» в Redis SMS; ранжирование — при первой привязке и переезде
  • • Отдельного исполнителя в Proxy нет: используется существующий механизм отправки нексуса

Потоки

  • • Запрос: Gateway → Auth, LMS → Proxy → Acquire → вендор → Report
  • • Конфиг и пулы: цепочка выше; CMS забирает конфиг у SimpleOne по REST и кладёт в Redis CMS
  • • Refresh: Ainima ходит на token endpoint вендора; usage опрашивает SMS