Coverage for src/lexigram/auth/session/hooks.py: 100%
20 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"""Lifecycle hooks for auth/session — intercepted when session operations occur."""
3from __future__ import annotations
5from dataclasses import dataclass
7__all__ = [
8 "SessionCreatedHook",
9 "SessionExpiredHook",
10 "SessionRefreshedHook",
11 "SessionRevokedHook",
12]
15@dataclass(frozen=True, kw_only=True)
16class SessionCreatedHook:
17 """Payload fired when a new session is created.
19 Attributes:
20 session_id: Unique identifier of the session.
21 user_id: Identifier of the user owning the session.
22 """
24 session_id: str
25 user_id: str
28@dataclass(frozen=True, kw_only=True)
29class SessionRefreshedHook:
30 """Payload fired when a session token is refreshed.
32 Attributes:
33 session_id: Unique identifier of the session being refreshed.
34 user_id: Identifier of the user owning the session.
35 """
37 session_id: str
38 user_id: str
41@dataclass(frozen=True, kw_only=True)
42class SessionExpiredHook:
43 """Payload fired when a session expires.
45 Attributes:
46 session_id: Unique identifier of the expired session.
47 user_id: Identifier of the user whose session expired.
48 """
50 session_id: str
51 user_id: str
54@dataclass(frozen=True, kw_only=True)
55class SessionRevokedHook:
56 """Payload fired when a session is explicitly revoked.
58 Attributes:
59 session_id: Unique identifier of the revoked session.
60 user_id: Identifier of the user whose session was revoked.
61 reason: Short description of why the session was revoked.
62 """
64 session_id: str
65 user_id: str
66 reason: str