Session Lifecycle
After successful authentication, the server creates a session identified bysessionId. Sessions have a default lifetime of 24 hours and can be extended by the client.
Session Expiry
Sessions expire at theexpiresAt timestamp returned in the authenticated message. Before expiry, the client can extend the session by sending session_extend. The server responds with session_extended containing the new expiry timestamp.
Servers MUST send session_expiring at least 5 minutes before session expiry to give clients time to extend or gracefully disconnect.
Inactivity Timeout
Servers MUST enforce an inactivity timeout. If an authenticated client sends no messages for a configurable duration (default: 30 minutes), the server MUST terminate the session. Servers SHOULD sendsession_expiring before applying the inactivity timeout to give clients an opportunity to send a heartbeat or other message.
The timeout duration is a server configuration choice; 30 minutes is the RECOMMENDED default.
Reconnection
If a client’s WebSocket connection drops, the client MAY reconnect and resume the session within a reconnection window (default: 120 seconds). See Reconnection for the full flow.State Invariants
- A session MUST have exactly one active WebSocket connection at any time
- If a new connection authenticates with the same session, the old connection MUST be terminated
- Balance state MUST survive session failures — no credits are created or destroyed by a server crash