Session keys only work with CHIPI wallets - not ARGENT wallets. Make sure your wallet was created with
walletType: "CHIPI".Usage
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
encryptKey | string | Yes | User’s PIN/password to encrypt the session private key |
durationSeconds | number | No | Session duration in seconds (default: 21600 = 6 hours) |
Return Value
Returns an object containing:| Property | Type | Description |
|---|---|---|
createSessionKey | function | Trigger session key generation (fire-and-forget) |
createSessionKeyAsync | function | Trigger session key generation (returns Promise) |
data | SessionKeyData | Generated session key data |
isLoading | boolean | Whether generation is in progress |
isError | boolean | Whether an error occurred |
error | Error | null | Error details if any |
isSuccess | boolean | Whether generation succeeded |
reset | function | Reset mutation state |
SessionKeyData Structure
Example Implementation
Security Considerations
Never store session keys in your backend database. This defeats the purpose of self-custodial security. Store only in client-side secure storage.
| Platform | Recommended Storage |
|---|---|
| Web | localStorage or sessionStorage |
| iOS | Secure Enclave / Keychain |
| Android | Android Keystore |
| React Native | expo-secure-store or react-native-keychain |
Best Practices
- Set short durations - Use 1-6 hours, not days
- Clear on logout - Always remove session from storage when user logs out
- Register on-chain - After creating, use
useAddSessionKeyToContractto register it
This hook only generates the session keypair locally. You must call
useAddSessionKeyToContract to register it on-chain before it can be used for transactions.