#!/usr/bin/env tsx /** * Test Drift v4 Integration * * Verifies connection to Drift Protocol and basic functionality */ import { initializeDriftService, getDriftService } from './lib/drift/client' import { getMergedConfig } from './config/trading' async function main() { console.log('๐Ÿงช Testing Drift v4 Integration\n') try { // Test 1: Configuration console.log('๐Ÿ“‹ Test 1: Configuration') const config = getMergedConfig() console.log('โœ… Config loaded:') console.log(` Position size: $${config.positionSize}`) console.log(` Leverage: ${config.leverage}x`) console.log(` Stop loss: ${config.stopLossPercent}%`) console.log(` TP1: ${config.takeProfit1Percent}%`) console.log(` TP2: ${config.takeProfit2Percent}%`) console.log('') // Test 2: Drift Connection console.log('๐Ÿ“ก Test 2: Drift Connection') const drift = await initializeDriftService() console.log('โœ… Drift service initialized') console.log(` Wallet: ${drift.getClient().wallet.publicKey.toString()}`) console.log('') // Test 3: Account Balance console.log('๐Ÿ’ฐ Test 3: USDC Balance') const balance = await drift.getUSDCBalance() console.log(`โœ… USDC Balance: $${balance.toFixed(2)}`) console.log('') // Test 4: Account Health console.log('๐Ÿ’Š Test 4: Account Health') const health = await drift.getAccountHealth() console.log('โœ… Account health:') console.log(` Total collateral: $${health.totalCollateral.toFixed(2)}`) console.log(` Total liability: $${health.totalLiability.toFixed(2)}`) console.log(` Free collateral: $${health.freeCollateral.toFixed(2)}`) console.log(` Margin ratio: ${health.marginRatio === Infinity ? 'โˆž' : health.marginRatio.toFixed(2)}`) console.log('') // Test 5: Active Positions console.log('๐Ÿ“Š Test 5: Active Positions') const positions = await drift.getAllPositions() console.log(`โœ… Active positions: ${positions.length}`) if (positions.length > 0) { for (const pos of positions) { console.log(` ${pos.symbol}:`) console.log(` Side: ${pos.side}`) console.log(` Size: ${pos.size.toFixed(4)}`) console.log(` Entry: $${pos.entryPrice.toFixed(4)}`) console.log(` P&L: $${pos.unrealizedPnL.toFixed(2)}`) } } else { console.log(' No active positions') } console.log('') // Test 6: Oracle Prices console.log('๐Ÿ’น Test 6: Oracle Prices') const solPrice = await drift.getOraclePrice(0) // SOL-PERP console.log(`โœ… SOL/USD: $${solPrice.toFixed(4)}`) console.log('') // Test 7: Disconnect console.log('๐Ÿ”Œ Test 7: Disconnect') await drift.disconnect() console.log('โœ… Disconnected from Drift') console.log('') console.log('โœ… All tests passed!') console.log('') console.log('๐ŸŽฏ Ready to trade!') console.log('') console.log('Next steps:') console.log('1. Set up n8n workflow (import n8n-workflow-v4.json)') console.log('2. Configure TradingView alerts') console.log('3. Test with a manual alert trigger') console.log('4. Start trading!') } catch (error) { console.error('\nโŒ Test failed:', error) console.error('\nCommon issues:') console.error('- DRIFT_WALLET_PRIVATE_KEY not set or invalid') console.error('- Wallet not initialized on Drift') console.error('- Insufficient SOL for gas fees') console.error('- RPC connection issues') console.error('\nCheck v4/SETUP.md for troubleshooting') process.exit(1) } } main()