import SessionManager from '@/lib/session'; export const POST = async ( req: Request, { params }: { params: Promise<{ id: string }> }, ) => { try { const { id } = await params; const session = SessionManager.getSession(id); if (!session) { return Response.json({ message: 'Session not found' }, { status: 404 }); } const responseStream = new TransformStream(); const writer = responseStream.writable.getWriter(); const encoder = new TextEncoder(); const disconnect = session.subscribe((event, data) => { if (event === 'data') { if (data.type === 'block') { writer.write( encoder.encode( JSON.stringify({ type: 'block', block: data.block, }) + '\n', ), ); } else if (data.type === 'updateBlock') { writer.write( encoder.encode( JSON.stringify({ type: 'updateBlock', blockId: data.blockId, patch: data.patch, }) + '\n', ), ); } else if (data.type === 'researchComplete') { writer.write( encoder.encode( JSON.stringify({ type: 'researchComplete', }) + '\n', ), ); } } else if (event === 'end') { writer.write( encoder.encode( JSON.stringify({ type: 'messageEnd', }) + '\n', ), ); writer.close(); disconnect(); } else if (event === 'error') { writer.write( encoder.encode( JSON.stringify({ type: 'error', data: data.data, }) + '\n', ), ); writer.close(); disconnect(); } }); req.signal.addEventListener('abort', () => { disconnect(); writer.close(); }); return new Response(responseStream.readable, { headers: { 'Content-Type': 'text/event-stream', Connection: 'keep-alive', 'Cache-Control': 'no-cache, no-transform', }, }); } catch (err) { console.error('Error in reconnecting to session stream: ', err); return Response.json( { message: 'An error has occurred.' }, { status: 500 }, ); } };