Coverage for src/lexigram/auth/models/token.py: 100%

14 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 12:26 +0800

1"""Authentication token models.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6from typing import TYPE_CHECKING 

7 

8from lexigram.auth import constants as const 

9from lexigram.domain import DomainModel 

10from lexigram.validation import Field 

11 

12if TYPE_CHECKING: 

13 from datetime import datetime 

14 

15 

16@dataclass(init=False) 

17class AuthToken(DomainModel): 

18 """Authentication token response.""" 

19 

20 token: str = Field(description="The primary authentication token string") 

21 expires_at: datetime = Field(description="Token expiration timestamp") 

22 refresh_token: str | None = Field( 

23 default=None, description="Optional refresh token" 

24 ) 

25 refresh_expires_at: datetime | None = Field( 

26 default=None, description="Refresh token expiration timestamp" 

27 ) 

28 token_type: str = Field( 

29 default=const.DEFAULT_TOKEN_TYPE, description="Token type (e.g. Bearer)" 

30 ) 

31 

32 

33__all__ = [ 

34 "AuthToken", 

35]