WHEN IT FAILS

Errors

Every named revert becomes a typed error with a sentence about what to do next.

Scope and expiry are checked locally, before a request is sent, so a call the grant cannot make never hits the node. Everything below extends InterludeError. Catch that if you want one branch; catch the named class if you want a specific sentence on screen.

SessionExpiredError
The grant's hour ran out. Call openSession again. The user signs a new message.
SelectorOutOfSessionScopeError
The call is not in the grant's scope, or the app reached it through this.other(), which changes msg.sig. Widen the scope or stop hopping.
SessionEpochStaleError
The user revoked, or the node's pinned block predates the revocation. The message says which. Open a new session in the first case; wait for the node to catch up in the second.
WrongSessionKeyError
The grant was presented by a key it does not name. The stored grant and the key that signed the wrapper drifted. Open a new session.
SessionNotSignedByGranterError
Usually a grant signed for another app or another chain id. Check that base is Monad and that app is the address the user saw.
PrivilegedSelectorError
No grant reaches the delegation controls or the hub callbacks. Those stay on the owner wallet, on Monad.
DelegatedWritesDisabledError
The write went to Monad instead of the node. The base chain refuses it on purpose. Point the call at the node URL.
AppRevertError
Your own rule, with its error name and decoded arguments. Treat it like any other contract revert.
NodeUnreachableError
The node did not answer. The message names the url. The rest of the page is fine; the process is down.