🚀 Fix Drift Protocol integration - Connection now working
✅ Key fixes: - Bypass problematic SDK subscription that caused 410 Gone errors - Use direct account verification without subscription - Add fallback modes for better reliability - Switch to Helius RPC endpoint for better rate limits - Implement proper error handling and retry logic 🔧 Technical changes: - Enhanced drift-trading.ts with no-subscription approach - Added Drift API endpoints (/api/drift/login, /balance, /positions) - Created DriftAccountStatus and DriftTradingPanel components - Updated Dashboard.tsx to show Drift account status - Added comprehensive test scripts for debugging 📊 Results: - Connection Status: Connected ✅ - Account verification: Working ✅ - Balance retrieval: Working ✅ (21.94 total collateral) - Private key authentication: Working ✅ - User account: 3dG7wayp7b9NBMo92D2qL2sy1curSC4TTmskFpaGDrtA 🌐 RPC improvements: - Using Helius RPC for better reliability - Added fallback RPC options in .env - Eliminated rate limiting issues
This commit is contained in:
161
debug-login-structure.js
Normal file
161
debug-login-structure.js
Normal file
@@ -0,0 +1,161 @@
|
||||
const { chromium } = require('playwright');
|
||||
|
||||
async function debugLoginStructure() {
|
||||
console.log('🚀 Starting login structure debug...');
|
||||
|
||||
const browser = await chromium.launch({
|
||||
headless: true,
|
||||
args: [
|
||||
'--no-sandbox',
|
||||
'--disable-setuid-sandbox',
|
||||
'--disable-dev-shm-usage',
|
||||
'--disable-blink-features=AutomationControlled',
|
||||
'--disable-features=VizDisplayCompositor'
|
||||
]
|
||||
});
|
||||
|
||||
const context = await browser.newContext({
|
||||
viewport: { width: 1920, height: 1080 },
|
||||
userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
|
||||
});
|
||||
|
||||
const page = await context.newPage();
|
||||
|
||||
try {
|
||||
console.log('📄 Navigating to TradingView login page...');
|
||||
await page.goto('https://www.tradingview.com/accounts/signin/', {
|
||||
waitUntil: 'domcontentloaded',
|
||||
timeout: 30000
|
||||
});
|
||||
|
||||
console.log('⏳ Waiting for page to settle...');
|
||||
await page.waitForTimeout(5000);
|
||||
|
||||
const currentUrl = await page.url();
|
||||
console.log('📍 Current URL:', currentUrl);
|
||||
|
||||
// Take screenshot
|
||||
await page.screenshot({ path: 'screenshots/debug_login_structure.png', fullPage: true });
|
||||
console.log('📸 Screenshot saved to screenshots/debug_login_structure.png');
|
||||
|
||||
// Check for email-related buttons/elements
|
||||
console.log('🔍 Analyzing page structure...');
|
||||
|
||||
const loginElements = await page.evaluate(() => {
|
||||
const results = {
|
||||
buttons: [],
|
||||
inputs: [],
|
||||
forms: [],
|
||||
links: []
|
||||
};
|
||||
|
||||
// Find all buttons
|
||||
const buttons = Array.from(document.querySelectorAll('button'));
|
||||
results.buttons = buttons.map(btn => ({
|
||||
text: btn.textContent?.trim() || '',
|
||||
className: btn.className,
|
||||
id: btn.id,
|
||||
type: btn.type || '',
|
||||
visible: btn.offsetParent !== null
|
||||
})).filter(btn => btn.text.length > 0 || btn.className.length > 0);
|
||||
|
||||
// Find all inputs
|
||||
const inputs = Array.from(document.querySelectorAll('input'));
|
||||
results.inputs = inputs.map(input => ({
|
||||
type: input.type,
|
||||
name: input.name || '',
|
||||
placeholder: input.placeholder || '',
|
||||
id: input.id || '',
|
||||
className: input.className,
|
||||
visible: input.offsetParent !== null
|
||||
}));
|
||||
|
||||
// Find all forms
|
||||
const forms = Array.from(document.querySelectorAll('form'));
|
||||
results.forms = forms.map((form, index) => ({
|
||||
index,
|
||||
action: form.action || '',
|
||||
method: form.method || '',
|
||||
className: form.className,
|
||||
id: form.id || '',
|
||||
inputs: Array.from(form.querySelectorAll('input')).length
|
||||
}));
|
||||
|
||||
// Find all links that might be relevant
|
||||
const links = Array.from(document.querySelectorAll('a'));
|
||||
results.links = links.map(link => ({
|
||||
text: link.textContent?.trim() || '',
|
||||
href: link.href || '',
|
||||
className: link.className
|
||||
})).filter(link =>
|
||||
link.text.toLowerCase().includes('email') ||
|
||||
link.text.toLowerCase().includes('sign') ||
|
||||
link.text.toLowerCase().includes('login') ||
|
||||
link.href.includes('signin') ||
|
||||
link.href.includes('login')
|
||||
);
|
||||
|
||||
return results;
|
||||
});
|
||||
|
||||
console.log('\n📊 LOGIN PAGE ANALYSIS:');
|
||||
console.log('=======================');
|
||||
|
||||
console.log('\n🔘 BUTTONS:');
|
||||
loginElements.buttons.forEach((btn, i) => {
|
||||
console.log(` ${i + 1}. "${btn.text}" (class: ${btn.className}) (visible: ${btn.visible})`);
|
||||
});
|
||||
|
||||
console.log('\n📝 INPUTS:');
|
||||
loginElements.inputs.forEach((input, i) => {
|
||||
console.log(` ${i + 1}. type="${input.type}" name="${input.name}" placeholder="${input.placeholder}" (visible: ${input.visible})`);
|
||||
});
|
||||
|
||||
console.log('\n📋 FORMS:');
|
||||
loginElements.forms.forEach((form, i) => {
|
||||
console.log(` ${i + 1}. action="${form.action}" method="${form.method}" inputs=${form.inputs}`);
|
||||
});
|
||||
|
||||
console.log('\n🔗 RELEVANT LINKS:');
|
||||
loginElements.links.forEach((link, i) => {
|
||||
console.log(` ${i + 1}. "${link.text}" -> ${link.href}`);
|
||||
});
|
||||
|
||||
// Look specifically for email-related elements
|
||||
console.log('\n🔍 EMAIL-SPECIFIC ELEMENTS:');
|
||||
const emailElements = await page.evaluate(() => {
|
||||
const allElements = document.querySelectorAll('*');
|
||||
const emailRelated = [];
|
||||
|
||||
for (const el of allElements) {
|
||||
const text = el.textContent?.toLowerCase() || '';
|
||||
const className = el.className || '';
|
||||
const id = el.id || '';
|
||||
|
||||
if (text.includes('email') || text.includes('continue with email') ||
|
||||
className.includes('email') || id.includes('email')) {
|
||||
emailRelated.push({
|
||||
tagName: el.tagName,
|
||||
text: el.textContent?.trim() || '',
|
||||
className: className,
|
||||
id: id,
|
||||
visible: el.offsetParent !== null
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return emailRelated;
|
||||
});
|
||||
|
||||
emailElements.forEach((el, i) => {
|
||||
console.log(` ${i + 1}. <${el.tagName}> "${el.text}" (class: ${el.className}) (visible: ${el.visible})`);
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Error during debug:', error);
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
}
|
||||
|
||||
debugLoginStructure().catch(console.error);
|
||||
Reference in New Issue
Block a user