@@ -5,6 +5,29 @@ breaking changes; those are called out explicitly.
55
66___
77
8+ ## 0.5.0 - 2026-06-21
9+
10+ Account & device management. The session/device endpoints apps kept hand-writing are now opt-in
11+ built-in routes, plus an in-session password change. Everything is additive.
12+
13+ #### Added
14+ - ** Session & CSRF management routes** (` SessionTransport(management_routes=True) ` , off by default):
15+ ` GET /sessions ` (device list), ` DELETE /sessions/{id} ` (revoke one, ownership-checked, ` 404 ` if not
16+ found or not yours), ` POST /logout-all ` (with ` ?keep_current=true ` ), and ` POST /csrf/refresh `
17+ (re-mint a lost CSRF cookie; self-heals; the deliberate non-` current_user ` recovery path). Thin
18+ handlers over the existing ` SessionManager ` ; the three mutating ones enforce CSRF via the session
19+ transport.
20+ - ** ` POST /change-password ` ** (always mounted): change a known password while signed in. The current
21+ password is the re-authentication; a successful change bumps ` token_version ` and revokes the user's
22+ * other* sessions (keeping the current one), and fires ` on_after_password_changed ` . ` 401 ` on a wrong
23+ current password, ` 400 ` on an OAuth-only account (use ` /set-password ` ).
24+ - ** ` on_after_password_changed ` ** hook, distinct from ` on_after_password_reset ` (the token flow).
25+ - ** ` SessionInfo ` ** is now exported (the ` GET /sessions ` response model), and a flat ** Endpoints**
26+ API-reference page maps every mountable route in one place.
27+ - ` SessionManager.set_csrf_cookie(...) ` (the CSRF half of ` set_session_cookies ` , reusable on its own).
28+
29+ ___
30+
831## 0.4.0 - 2026-06-21
932
1033Custom email bodies. ` EmailSender.send ` now receives an ` EmailContext ` , so you render your own
0 commit comments