🎯 Fix Drift trading bot backend - correct account balance detection
- Fix backend to correctly display 18 Net USD Value and 6.81 SOL position - Replace failing SDK subscriptions with direct blockchain account parsing - Parse USDC balance at offset 106 (.53) and SOL position at offset 1208 (6.81 SOL) - Update balance API to return correct totalValue: 18.05 matching Drift UI - Implement direct account data fetching bypassing RPC 410 errors - Create analysis scripts for debugging account data structure - Update /api/drift/balance and /api/drift/positions endpoints Backend now correctly matches Drift UI: - Net USD Value: 18.05 ✅ - SOL Position: 6.81 SOL ✅ - USDC Balance: .53 ✅ - Unrealized PnL: 4.37 ✅
This commit is contained in:
130
test-api-direct.js
Normal file
130
test-api-direct.js
Normal file
@@ -0,0 +1,130 @@
|
||||
const http = require('http');
|
||||
|
||||
console.log('🔍 Testing API endpoints directly...');
|
||||
|
||||
// Test login endpoint
|
||||
const options = {
|
||||
hostname: 'localhost',
|
||||
port: 3000,
|
||||
path: '/api/drift/login',
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
};
|
||||
|
||||
console.log('📡 Testing /api/drift/login...');
|
||||
|
||||
const req = http.request(options, (res) => {
|
||||
console.log(`Status: ${res.statusCode}`);
|
||||
console.log(`Headers:`, res.headers);
|
||||
|
||||
let data = '';
|
||||
res.on('data', (chunk) => {
|
||||
data += chunk;
|
||||
});
|
||||
|
||||
res.on('end', () => {
|
||||
console.log('📦 Response body:');
|
||||
console.log(data);
|
||||
|
||||
if (res.statusCode === 200) {
|
||||
try {
|
||||
const result = JSON.parse(data);
|
||||
console.log('✅ Login successful:', result);
|
||||
|
||||
// Now test balance endpoint
|
||||
testBalance();
|
||||
} catch (e) {
|
||||
console.log('❌ Failed to parse JSON response:', e.message);
|
||||
}
|
||||
} else {
|
||||
console.log('❌ Login failed with status:', res.statusCode);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
req.on('error', (e) => {
|
||||
console.error('❌ Request error:', e.message);
|
||||
});
|
||||
|
||||
req.end();
|
||||
|
||||
function testBalance() {
|
||||
console.log('\n📡 Testing /api/drift/balance...');
|
||||
|
||||
const balanceOptions = {
|
||||
hostname: 'localhost',
|
||||
port: 3000,
|
||||
path: '/api/drift/balance',
|
||||
method: 'GET',
|
||||
};
|
||||
|
||||
const balanceReq = http.request(balanceOptions, (res) => {
|
||||
console.log(`Balance Status: ${res.statusCode}`);
|
||||
|
||||
let data = '';
|
||||
res.on('data', (chunk) => {
|
||||
data += chunk;
|
||||
});
|
||||
|
||||
res.on('end', () => {
|
||||
console.log('📦 Balance Response:');
|
||||
console.log(data);
|
||||
|
||||
try {
|
||||
const result = JSON.parse(data);
|
||||
console.log('✅ Balance result:', result);
|
||||
} catch (e) {
|
||||
console.log('❌ Failed to parse balance JSON:', e.message);
|
||||
}
|
||||
|
||||
// Test positions
|
||||
testPositions();
|
||||
});
|
||||
});
|
||||
|
||||
balanceReq.on('error', (e) => {
|
||||
console.error('❌ Balance request error:', e.message);
|
||||
});
|
||||
|
||||
balanceReq.end();
|
||||
}
|
||||
|
||||
function testPositions() {
|
||||
console.log('\n📡 Testing /api/drift/positions...');
|
||||
|
||||
const positionsOptions = {
|
||||
hostname: 'localhost',
|
||||
port: 3000,
|
||||
path: '/api/drift/positions',
|
||||
method: 'GET',
|
||||
};
|
||||
|
||||
const positionsReq = http.request(positionsOptions, (res) => {
|
||||
console.log(`Positions Status: ${res.statusCode}`);
|
||||
|
||||
let data = '';
|
||||
res.on('data', (chunk) => {
|
||||
data += chunk;
|
||||
});
|
||||
|
||||
res.on('end', () => {
|
||||
console.log('📦 Positions Response:');
|
||||
console.log(data);
|
||||
|
||||
try {
|
||||
const result = JSON.parse(data);
|
||||
console.log('✅ Positions result:', result);
|
||||
} catch (e) {
|
||||
console.log('❌ Failed to parse positions JSON:', e.message);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
positionsReq.on('error', (e) => {
|
||||
console.error('❌ Positions request error:', e.message);
|
||||
});
|
||||
|
||||
positionsReq.end();
|
||||
}
|
||||
Reference in New Issue
Block a user