NERO
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

PropertyTypeDescription
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
statusSessionStatus | nullCached session status from the last getStatus() call
isLoadingbooleantrue 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 tokens
  • user: User information
  • sessionLifetime: 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:

  1. Revokes the dApp share session via the backend
  2. Clears all in-memory state
  3. Removes stored tokens
  4. Disconnects the provider
  5. 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:

  1. Context Access: Retrieves the initialized SDK via useNeroMpcAuthContext()
  2. State Tracking: Uses useState for isLoading and status
  3. Memoization: Implements useCallback for all returned functions
  4. 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');

On this page