useSessionKeyManager is a custom hook that takes an AnchorWallet, Connection, and Cluster as arguments and returns a SessionWalletInterface. This hook manages the session keys, tokens, and provides methods for signing and sending transactions.

The SessionWalletInterface consists of the following properties and methods:

interface SessionWalletInterface {
  publicKey: PublicKey | null; // Public key associated with the session wallet
  isLoading: boolean; // Indicates whether the session wallet is loading
  error: string | null; // An error message, if any
  sessionToken: string | null; // Session token for the current session
  signTransaction:
    | (<T extends Transaction>(transaction: T) => Promise<T>)
    | undefined; // Sign a single transaction
  signAllTransactions:
    | (<T extends Transaction>(transactions: T[]) => Promise<T[]>)
    | undefined; // Sign multiple transactions
  signMessage: ((message: Uint8Array) => Promise<Uint8Array>) | undefined; // Sign a message
  sendTransaction:
    | (<T extends Transaction>(transaction: T) => Promise<string>)
    | undefined; // Send a signed transaction
  signAndSendTransaction:
    | (<T extends Transaction>(transactions: T | T[]) => Promise<string[]>)
    | undefined; // Sign and send transactions
  createSession: (
    targetProgram: PublicKey,
    topUp: boolean,
    validUntil?: number
  ) => Promise<{ sessionToken: string; publicKey: string } | undefined>; // Create a new session
  revokeSession: () => Promise<void>; // Revoke the current session
  getSessionToken: () => Promise<string | null>; // Retrieve the current session token
}

Here’s an example of how to use the useSessionKeyManager:

import { useAnchorWallet, useConnection } from '@solana/wallet-adapter-react';
import { useSessionKeyManager } from '@gumhq/react-sdk';

function YourComponent() {
  const wallet = useAnchorWallet();
  const connection = useConnection();
  const cluster = "devnet"; // or "mainnet-beta", "testnet", "localnet"

  const sessionWallet = useSessionKeyManager(wallet, connection, cluster);

  // Access session wallet properties and methods here
  // Example: sessionWallet.publicKey
  // Example: sessionWallet.createSession

  return (
    // Your component JSX
  );
}

To use the Session Key Manager across multiple components, you can set up the Provider Component and Context in your application in the following section.

Was this page helpful?