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

1"""Lifecycle hooks for auth/session — intercepted when session operations occur.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6 

7__all__ = [ 

8 "SessionCreatedHook", 

9 "SessionExpiredHook", 

10 "SessionRefreshedHook", 

11 "SessionRevokedHook", 

12] 

13 

14 

15@dataclass(frozen=True, kw_only=True) 

16class SessionCreatedHook: 

17 """Payload fired when a new session is created. 

18 

19 Attributes: 

20 session_id: Unique identifier of the session. 

21 user_id: Identifier of the user owning the session. 

22 """ 

23 

24 session_id: str 

25 user_id: str 

26 

27 

28@dataclass(frozen=True, kw_only=True) 

29class SessionRefreshedHook: 

30 """Payload fired when a session token is refreshed. 

31 

32 Attributes: 

33 session_id: Unique identifier of the session being refreshed. 

34 user_id: Identifier of the user owning the session. 

35 """ 

36 

37 session_id: str 

38 user_id: str 

39 

40 

41@dataclass(frozen=True, kw_only=True) 

42class SessionExpiredHook: 

43 """Payload fired when a session expires. 

44 

45 Attributes: 

46 session_id: Unique identifier of the expired session. 

47 user_id: Identifier of the user whose session expired. 

48 """ 

49 

50 session_id: str 

51 user_id: str 

52 

53 

54@dataclass(frozen=True, kw_only=True) 

55class SessionRevokedHook: 

56 """Payload fired when a session is explicitly revoked. 

57 

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 """ 

63 

64 session_id: str 

65 user_id: str 

66 reason: str