React SDKHooks
useNeroSession
Session lifecycle management, status monitoring, and reconnection
useNeroSession
The useNeroSession hook manages existing authentication session lifecycle, including status queries, reconnection, and session termination.
Usage
import { useNeroSession } from "@nerochain/mpc-sdk/react";
function SessionStatus() {
const { getStatus, reconnect, revoke, status, isLoading } = useNeroSession();
return (
<div>
<p>Session Status: {status ? "Active" : "Unknown"}</p>
<button onClick={getStatus} disabled={isLoading}>
Check Status
</button>
<button onClick={() => reconnect()} disabled={isLoading}>
Reconnect
</button>
<button onClick={revoke} disabled={isLoading}>
Revoke Session
</button>
</div>
);
}Return Value
| Property | Type | Description |
|---|---|---|
getStatus | () => Promise<SessionStatus> | Fetches current session state from the backend |
reconnect | (dappShare?: string) => Promise<void> | Restores session from local or provided shares |
revoke | () => Promise<void> | Terminates the session and logs the user out |
status | SessionStatus | null | Cached session status from the last getStatus() call |
isLoading | boolean | true while an async operation is in flight |
Session Status
The getStatus() method queries the backend and returns a SessionStatus object containing active session information including expiration and associated devices.
function SessionInfo() {
const { getStatus, status, isLoading } = useNeroSession();
useEffect(() => {
getStatus();
}, []);
if (isLoading) return <div>Checking session...</div>;
if (!status) return <div>No active session</div>;
return (
<div>
<p>Session active</p>
<p>Expires: {new Date(status.expiresAt).toLocaleString()}</p>
</div>
);
}Session Reconnection
The reconnect() method restores a session using the dappShare token. If no dappShare is provided, it uses the stored token. This is useful for cross-device scenarios or storage migration.
The reconnection returns:
tokens: New access and refresh tokensuser: User informationsessionLifetime: Session duration in seconds
function ReconnectButton() {
const { reconnect, isLoading } = useNeroSession();
return (
<button onClick={() => reconnect()} disabled={isLoading}>
{isLoading ? "Reconnecting..." : "Reconnect Session"}
</button>
);
}Session Revocation
The revoke() method terminates the session and performs full cleanup:
- Revokes the dApp share session via the backend
- Clears all in-memory state
- Removes stored tokens
- Disconnects the provider
- Emits the
'logout'event
function LogoutButton() {
const { revoke, isLoading } = useNeroSession();
return (
<button onClick={revoke} disabled={isLoading}>
{isLoading ? "Logging out..." : "Logout"}
</button>
);
}Architecture Pattern
The hook follows the standard SDK hook pattern:
- Context Access: Retrieves the initialized SDK via
useNeroMpcAuthContext() - State Tracking: Uses
useStateforisLoadingandstatus - Memoization: Implements
useCallbackfor all returned functions - Error Handling: Normalizes errors via try/catch/finally blocks
SDK Initialization Guard
All hook methods verify SDK initialization:
if (!sdk) throw new Error('SDK not initialized');