#!/usr/bin/env node /** * Test script for Drift trading login and account functionality */ const BASE_URL = 'http://localhost:3000' async function testDriftLogin() { console.log('šŸ” Testing Drift login...') try { const response = await fetch(`${BASE_URL}/api/drift/login`, { method: 'POST', headers: { 'Content-Type': 'application/json' } }) const result = await response.json() console.log('Login result:', JSON.stringify(result, null, 2)) if (result.isLoggedIn) { console.log('āœ… Login successful!') console.log(`šŸ“ Public Key: ${result.publicKey}`) console.log(`šŸ‘¤ User Account Exists: ${result.userAccountExists}`) return true } else { console.log('āŒ Login failed:', result.error) return false } } catch (error) { console.error('āŒ Login test failed:', error.message) return false } } async function testAccountBalance() { console.log('\nšŸ’° Testing account balance retrieval...') try { const response = await fetch(`${BASE_URL}/api/drift/balance`) const result = await response.json() if (response.ok) { console.log('āœ… Balance retrieved successfully!') console.log('Account Balance:', JSON.stringify(result, null, 2)) console.log(`šŸ’µ Total Collateral: $${result.totalCollateral.toFixed(2)}`) console.log(`šŸ†“ Free Collateral: $${result.freeCollateral.toFixed(2)}`) console.log(`šŸ“Š Margin Requirement: $${result.marginRequirement.toFixed(2)}`) console.log(`šŸ“ˆ Account Value: $${result.accountValue.toFixed(2)}`) console.log(`āš–ļø Leverage: ${result.leverage.toFixed(2)}x`) console.log(`šŸ’ø Available Balance: $${result.availableBalance.toFixed(2)}`) return true } else { console.log('āŒ Balance retrieval failed:', result.error) return false } } catch (error) { console.error('āŒ Balance test failed:', error.message) return false } } async function testPositions() { console.log('\nšŸ“Š Testing positions retrieval...') try { const response = await fetch(`${BASE_URL}/api/drift/positions`) const result = await response.json() if (response.ok) { console.log('āœ… Positions retrieved successfully!') if (result.positions.length === 0) { console.log('šŸ“‹ No open positions found') } else { console.log(`šŸ“‹ Found ${result.positions.length} position(s):`) result.positions.forEach((pos, index) => { console.log(`\n Position ${index + 1}:`) console.log(` Symbol: ${pos.symbol}`) console.log(` Side: ${pos.side}`) console.log(` Size: ${pos.size}`) console.log(` Entry Price: $${pos.entryPrice}`) console.log(` Mark Price: $${pos.markPrice}`) console.log(` Unrealized PnL: $${pos.unrealizedPnl.toFixed(2)}`) console.log(` Market Index: ${pos.marketIndex}`) console.log(` Market Type: ${pos.marketType}`) }) } return true } else { console.log('āŒ Positions retrieval failed:', result.error) return false } } catch (error) { console.error('āŒ Positions test failed:', error.message) return false } } async function runTests() { console.log('šŸš€ Starting Drift Trading Tests...\n') // Test 1: Login const loginSuccess = await testDriftLogin() if (loginSuccess) { // Test 2: Account Balance (only if login succeeded) await testAccountBalance() // Test 3: Positions (only if login succeeded) await testPositions() } console.log('\n✨ Tests completed!') } // Run tests if called directly if (require.main === module) { runTests().catch(console.error) } module.exports = { testDriftLogin, testAccountBalance, testPositions }