'use client';
import { useCavos, useSession } from '@cavos/react';
// Define what the session can do
const SESSION_POLICY = {
allowedMethods: [
{ contractAddress: '0x...your-contract', selector: 'transfer' },
{ contractAddress: '0x...your-contract', selector: 'approve' },
],
expiresAt: Date.now() + 60 * 60 * 1000, // 1 hour
};
export function LoginButton() {
const { login, isAuthenticated, address, isLoading } = useCavos();
const { createSession, hasActiveSession } = useSession();
const handleLogin = async () => {
// 1. Authenticate user
await login('google');
// 2. Create session (user signs once here)
await createSession(SESSION_POLICY);
// ✓ Private key is now cleared from memory
// ✓ All future transactions use session key
};
if (isLoading) return <button disabled>Loading...</button>;
if (isAuthenticated && address) {
return (
<div>
<p>Connected: {address.slice(0, 6)}...{address.slice(-4)}</p>
<p>Session: {hasActiveSession ? '✅ Active' : '❌ Inactive'}</p>
</div>
);
}
return (
<button onClick={handleLogin}>
Login with Google
</button>
);
}