"""Абстракция провайдера аутентификации (pluggable).""" from __future__ import annotations from abc import ABC, abstractmethod from dataclasses import dataclass, field from typing import Any @dataclass class ExternalIdentity: """Нормализованная личность от внешнего провайдера.""" provider: str external_id: str suggested_nickname: str | None = None telegram_id: int | None = None raw: dict[str, Any] = field(default_factory=dict) class AuthProvider(ABC): name: str @abstractmethod def authenticate(self, payload: dict[str, Any]) -> ExternalIdentity: """Проверяет вход и возвращает внешнюю личность. Бросает AppError при ошибке.""" raise NotImplementedError