- 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
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { progressTracker } from '../../../../../lib/progress-tracker'
|
|
|
|
export async function GET(
|
|
request: NextRequest,
|
|
{ params }: { params: Promise<{ sessionId: string }> }
|
|
) {
|
|
const { sessionId } = await params
|
|
|
|
// Create a readable stream for Server-Sent Events
|
|
const encoder = new TextEncoder()
|
|
|
|
const stream = new ReadableStream({
|
|
start(controller) {
|
|
// Send initial progress if session exists
|
|
const initialProgress = progressTracker.getProgress(sessionId)
|
|
if (initialProgress) {
|
|
const data = `data: ${JSON.stringify(initialProgress)}\n\n`
|
|
controller.enqueue(encoder.encode(data))
|
|
}
|
|
|
|
// Listen for progress updates
|
|
const progressHandler = (progress: any) => {
|
|
const data = `data: ${JSON.stringify(progress)}\n\n`
|
|
controller.enqueue(encoder.encode(data))
|
|
}
|
|
|
|
// Listen for completion
|
|
const completeHandler = () => {
|
|
const data = `data: ${JSON.stringify({ type: 'complete' })}\n\n`
|
|
controller.enqueue(encoder.encode(data))
|
|
controller.close()
|
|
}
|
|
|
|
// Subscribe to events
|
|
progressTracker.on(`progress:${sessionId}`, progressHandler)
|
|
progressTracker.on(`progress:${sessionId}:complete`, completeHandler)
|
|
|
|
// Cleanup on stream close
|
|
request.signal.addEventListener('abort', () => {
|
|
progressTracker.off(`progress:${sessionId}`, progressHandler)
|
|
progressTracker.off(`progress:${sessionId}:complete`, completeHandler)
|
|
controller.close()
|
|
})
|
|
}
|
|
})
|
|
|
|
return new NextResponse(stream, {
|
|
headers: {
|
|
'Content-Type': 'text/event-stream',
|
|
'Cache-Control': 'no-cache',
|
|
'Connection': 'keep-alive',
|
|
'Access-Control-Allow-Origin': '*',
|
|
'Access-Control-Allow-Methods': 'GET',
|
|
'Access-Control-Allow-Headers': 'Cache-Control'
|
|
}
|
|
})
|
|
}
|