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) { console.log(`🔍 Starting EventSource stream for session: ${sessionId}`) // Send initial progress if session exists const initialProgress = progressTracker.getProgress(sessionId) if (initialProgress) { console.log(`🔍 Sending initial progress for ${sessionId}:`, initialProgress.currentStep) const data = `data: ${JSON.stringify(initialProgress)}\n\n` controller.enqueue(encoder.encode(data)) } else { // Send a connection established message even if no progress yet const connectMsg = `data: ${JSON.stringify({ type: 'connected', sessionId })}\n\n` controller.enqueue(encoder.encode(connectMsg)) } // Listen for progress updates const progressHandler = (progress: any) => { console.log(`🔍 Streaming progress update for ${sessionId}:`, progress.currentStep) const data = `data: ${JSON.stringify(progress)}\n\n` controller.enqueue(encoder.encode(data)) } // Listen for completion const completeHandler = () => { console.log(`🔍 Streaming completion for ${sessionId}`) 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' } }) }