Первое, что мы построили, — не фичу, а пакет контрактов. core описывает, что должно знать IdP-флоу, и не импортирует ни UI, ни Hanko, ни хранилище.
Что живёт в core
- FlowConfig — API URL, имя сессионной cookie, путь логаута, URL скрипта браузерного SDK.
- FeatureFlags — переключатели регистрации (public, OIDC, SAML).
- AuthCode / AuthCodeStore — authorization code в стиле OAuth2 для слоя OIDC.
- CredentialVerifier — проверка bearer- или сессионных токенов, выдача
FlowConfig()для UI-слоя. - IdentityClaims, хелперы сессии, общие ошибки.
Почему именно в этом порядке
Если ядро зависит от конкретного провайдера, каждый новый провайдер становится форком. Если UI зависит от конкретного провайдера, каждый новый провайдер становится переписыванием UI. Написав контракты первыми, мы заставили остальной стек быть честным.
Как разрез окупается
- authkit рендерит страницы из ViewConfig, в котором лежит generic FlowConfig — имя провайдера в коде не появляется.
- authkit-hanko реализует
CredentialVerifierдля Hanko: проверка JWT + JWKS, извлечение из cookie, правильный указатель SDKScript. - IdP собирает и то и другое на старте. Замена Hanko на другой провайдер — это новый пакет рядом с
authkit-hanko.
Будущие модули
github.com/authfly/core— контракты.github.com/authfly/authkit— hosted-UI.github.com/authfly/authkit-hanko— первый адаптер провайдера.