Coverage for src / lexigram / contracts / auth / identity.py: 100%
7 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-19 05:41 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-19 05:41 +0800
1"""OAuth identity resolution protocols.
3Protocols for resolving external OAuth provider IDs to internal user IDs.
4"""
6from __future__ import annotations
8from typing import Protocol, runtime_checkable
11@runtime_checkable
12class IdentityResolverProtocol(Protocol):
13 """Protocol for resolving external OAuth identities to internal user IDs.
15 This protocol is used to map OAuth external IDs (like Google's 'sub' claim)
16 to internal UUIDs. This is necessary because OAuth providers use their own
17 ID format which may not be valid UUIDs.
18 """
20 async def resolve_user_id(
21 self,
22 external_id: str,
23 provider: str = "google",
24 ) -> str | None:
25 """Resolve an external OAuth ID to an internal user UUID.
27 Args:
28 external_id: The external ID from the OAuth provider (e.g., Google's sub claim).
29 provider: The OAuth provider name (e.g., "google", "apple").
31 Returns:
32 The internal user UUID if found, None otherwise.
33 """
34 ...
36 def resolve_user_id_sync(
37 self,
38 external_id: str,
39 provider: str = "google",
40 ) -> str | None:
41 """Synchronous version of resolve_user_id.
43 Args:
44 external_id: The external ID from the OAuth provider.
45 provider: The OAuth provider name.
47 Returns:
48 The internal user UUID if found, None otherwise.
49 """
50 ...
53__all__ = ["IdentityResolverProtocol"]