// 1. Generate session keypair (Stark curve)
const sessionPrivateKey = ec.starkCurve.utils.randomPrivateKey();
const sessionPublicKey = ec.starkCurve.getPublicKey(sessionPrivateKey);
// 2. Generate guardian keypair (additional security layer)
const guardianPrivateKey = ec.starkCurve.utils.randomPrivateKey();
const guardianPublicKey = ec.starkCurve.getPublicKey(guardianPrivateKey);
// 3. Build session typed data
const sessionTypedData = buildSessionTypedData(
chainId,
accountAddress,
allowedMethods,
expiresAt,
sessionPublicKey,
guardianPublicKey
);
// 4. Sign with owner's private key (ONLY time PK is used)
const authorization = await account.signMessage(sessionTypedData);
// 5. IMMEDIATELY clear private key
walletManager.clearPrivateKey();
// 6. Store session data in sessionStorage
sessionStorage.setItem('cavos_session', JSON.stringify({
sessionPrivateKey,
guardianPrivateKey,
authorization,
policy,
accountAddress,
}));