[ ] Refactor crate::presentation::device::SessionManager so that it is not mutated when handling a request. Instead, create a series of new structs that immutably borrow the SessionManager, where each struct represents a step in the handling process, something like:
SessionManager::handle(request: SessionData) -> Request -> PreparedResponse -> Response