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
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 12:26 +0800
1"""Authentication token models."""
3from __future__ import annotations
5from dataclasses import dataclass
6from typing import TYPE_CHECKING
8from lexigram.auth import constants as const
9from lexigram.domain import DomainModel
10from lexigram.validation import Field
12if TYPE_CHECKING:
13 from datetime import datetime
16@dataclass(init=False)
17class AuthToken(DomainModel):
18 """Authentication token response."""
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 )
33__all__ = [
34 "AuthToken",
35]