- Fix timeframe parameter handling in enhanced-screenshot API route - Support both 'timeframe' (singular) and 'timeframes' (array) parameters - Add proper sessionId propagation for real-time progress tracking - Enhance MACD analysis prompt with detailed crossover definitions - Add progress tracker service with Server-Sent Events support - Fix Next.js build errors in chart components (module variable conflicts) - Change dev environment port from 9000:3000 to 9001:3000 - Improve AI analysis layout detection logic - Add comprehensive progress tracking through all service layers
138 lines
4.5 KiB
JavaScript
138 lines
4.5 KiB
JavaScript
import { NextResponse } from 'next/server'
|
|
import { enhancedScreenshotService } from '../../../lib/enhanced-screenshot'
|
|
import { aiAnalysisService } from '../../../lib/ai-analysis'
|
|
import { progressTracker } from '../../../lib/progress-tracker'
|
|
|
|
export async function POST(request) {
|
|
try {
|
|
const body = await request.json()
|
|
const { symbol, layouts, timeframe, timeframes, selectedLayouts, analyze = true } = body
|
|
|
|
console.log('📊 Enhanced screenshot request:', { symbol, layouts, timeframe, timeframes, selectedLayouts })
|
|
|
|
// Generate unique session ID for progress tracking
|
|
const sessionId = `analysis_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`
|
|
console.log('🔍 Created session ID:', sessionId)
|
|
|
|
// Create progress tracking session with initial steps
|
|
const initialSteps = [
|
|
{
|
|
id: 'init',
|
|
title: 'Initializing Analysis',
|
|
description: 'Starting AI-powered trading analysis...',
|
|
status: 'pending'
|
|
},
|
|
{
|
|
id: 'auth',
|
|
title: 'TradingView Authentication',
|
|
description: 'Logging into TradingView accounts',
|
|
status: 'pending'
|
|
},
|
|
{
|
|
id: 'navigation',
|
|
title: 'Chart Navigation',
|
|
description: 'Navigating to chart layouts',
|
|
status: 'pending'
|
|
},
|
|
{
|
|
id: 'loading',
|
|
title: 'Chart Data Loading',
|
|
description: 'Waiting for chart data and indicators',
|
|
status: 'pending'
|
|
},
|
|
{
|
|
id: 'capture',
|
|
title: 'Screenshot Capture',
|
|
description: 'Capturing high-quality screenshots',
|
|
status: 'pending'
|
|
},
|
|
{
|
|
id: 'analysis',
|
|
title: 'AI Analysis',
|
|
description: 'Analyzing screenshots with AI',
|
|
status: 'pending'
|
|
}
|
|
]
|
|
|
|
// Create the progress session
|
|
console.log('🔍 Creating progress session with steps:', initialSteps.length)
|
|
progressTracker.createSession(sessionId, initialSteps)
|
|
console.log('🔍 Progress session created successfully')
|
|
|
|
// Prepare configuration for screenshot service
|
|
const config = {
|
|
symbol: symbol || 'BTCUSD',
|
|
timeframe: timeframe || timeframes?.[0] || '60', // Use single timeframe, fallback to first of array, then default
|
|
layouts: layouts || selectedLayouts || ['ai'],
|
|
sessionId, // Pass session ID for progress tracking
|
|
credentials: {
|
|
email: process.env.TRADINGVIEW_EMAIL,
|
|
password: process.env.TRADINGVIEW_PASSWORD
|
|
}
|
|
}
|
|
|
|
console.log('🔧 Using config:', config)
|
|
|
|
let screenshots = []
|
|
let analysis = null
|
|
|
|
// Perform AI analysis if requested
|
|
if (analyze) {
|
|
try {
|
|
console.log('🤖 Starting automated capture and analysis...')
|
|
const result = await aiAnalysisService.captureAndAnalyzeWithConfig(config, sessionId)
|
|
screenshots = result.screenshots
|
|
analysis = result.analysis
|
|
console.log('✅ Automated capture and analysis completed')
|
|
} catch (analysisError) {
|
|
console.error('❌ Automated capture and analysis failed:', analysisError)
|
|
// Fall back to screenshot only
|
|
screenshots = await enhancedScreenshotService.captureWithLogin(config, sessionId)
|
|
}
|
|
} else {
|
|
// Capture screenshots only
|
|
screenshots = await enhancedScreenshotService.captureWithLogin(config, sessionId)
|
|
}
|
|
|
|
console.log('📸 Final screenshots:', screenshots)
|
|
|
|
const result = {
|
|
success: true,
|
|
sessionId, // Return session ID for progress tracking
|
|
timestamp: Date.now(),
|
|
symbol: config.symbol,
|
|
layouts: config.layouts,
|
|
timeframes: [config.timeframe],
|
|
screenshots: screenshots.map(path => ({
|
|
layout: config.layouts[0], // For now, assume one layout
|
|
timeframe: config.timeframe,
|
|
url: `/screenshots/${path.split('/').pop()}`,
|
|
timestamp: Date.now()
|
|
})),
|
|
analysis: analysis,
|
|
message: `Successfully captured ${screenshots.length} screenshot(s)${analysis ? ' with AI analysis' : ''}`
|
|
}
|
|
|
|
return NextResponse.json(result)
|
|
} catch (error) {
|
|
console.error('Enhanced screenshot API error:', error)
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
error: 'Analysis failed',
|
|
message: error.message
|
|
},
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|
|
|
|
export async function GET() {
|
|
return NextResponse.json({
|
|
message: 'Enhanced Screenshot API - use POST method for analysis',
|
|
endpoints: {
|
|
POST: '/api/enhanced-screenshot - Run analysis with parameters'
|
|
}
|
|
})
|
|
}
|