"use client" import React, { useEffect, useState } from 'react' interface LoginStatus { isLoggedIn: boolean publicKey: string userAccountExists: boolean error?: string } interface AccountBalance { totalCollateral: number freeCollateral: number marginRequirement: number accountValue: number leverage: number availableBalance: number } interface Position { symbol: string side: 'LONG' | 'SHORT' size: number entryPrice: number markPrice: number unrealizedPnl: number marketIndex: number marketType: 'PERP' | 'SPOT' } export default function DriftAccountStatus() { const [loginStatus, setLoginStatus] = useState(null) const [balance, setBalance] = useState(null) const [positions, setPositions] = useState([]) const [loading, setLoading] = useState(true) const [refreshing, setRefreshing] = useState(false) const [error, setError] = useState(null) const fetchAccountData = async () => { try { setError(null) // Step 1: Login/Check status const loginRes = await fetch('/api/drift/login', { method: 'POST' }) const loginData = await loginRes.json() setLoginStatus(loginData) if (!loginData.isLoggedIn) { setError(loginData.error || 'Login failed') return } // Step 2: Fetch balance const balanceRes = await fetch('/api/drift/balance') if (balanceRes.ok) { const balanceData = await balanceRes.json() setBalance(balanceData) } else { const errorData = await balanceRes.json() setError(errorData.error || 'Failed to fetch balance') } // Step 3: Fetch positions const positionsRes = await fetch('/api/drift/positions') if (positionsRes.ok) { const positionsData = await positionsRes.json() setPositions(positionsData.positions || []) } else { const errorData = await positionsRes.json() console.warn('Failed to fetch positions:', errorData.error) } } catch (err: any) { setError(err.message || 'Unknown error occurred') } finally { setLoading(false) setRefreshing(false) } } const handleRefresh = async () => { setRefreshing(true) await fetchAccountData() } useEffect(() => { fetchAccountData() }, []) if (loading) { return (
Loading Drift account...
) } return (
{/* Login Status */}

🌊 Drift Account Status

{error && (

❌ {error}

)} {loginStatus && (
Connection Status {loginStatus.isLoggedIn ? '🟢 Connected' : '🔴 Disconnected'}
Wallet Address {loginStatus.publicKey ? `${loginStatus.publicKey.slice(0, 6)}...${loginStatus.publicKey.slice(-6)}` : 'N/A' }
User Account {loginStatus.userAccountExists ? 'Initialized' : 'Not Found'}
)}
{/* Account Balance */} {balance && loginStatus?.isLoggedIn && (

💰 Account Balance

Total Collateral

${balance.totalCollateral.toFixed(2)}

Available Balance

${balance.availableBalance.toFixed(2)}

Margin Used

${balance.marginRequirement.toFixed(2)}

Leverage

{balance.leverage.toFixed(2)}x

)} {/* Open Positions */} {loginStatus?.isLoggedIn && (

📊 Open Positions ({positions.length})

{positions.length === 0 ? (

No open positions

) : (
{positions.map((position, index) => (
{position.symbol} {position.side}
= 0 ? 'text-green-400' : 'text-red-400' }`}> {position.unrealizedPnl >= 0 ? '+' : ''}${position.unrealizedPnl.toFixed(2)}
Size: {position.size.toFixed(4)}
Entry: ${position.entryPrice.toFixed(2)}
Mark: ${position.markPrice.toFixed(2)}
))}
)}
)}
) }