import { getServerSession } from "next-auth"; import { authOptions } from "@/app/api/auth/[...nextauth]/route"; import { NextResponse } from "next/server"; export async function GET() { try { const session = await getServerSession(authOptions); if (!session) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } // Debug log to see all session data console.log('Session data:', { user: session.user, accessToken: session.accessToken ? 'present' : 'missing' }); // Use email prefix as username if username is not available const username = session.user.username || session.user.email?.split('@')[0]; if (!username) { return NextResponse.json({ error: "No username or email found in session" }, { status: 400 }); } // Get the user's info from Rocket.Chat using their username const userInfoResponse = await fetch( `https://parole.slm-lab.net/api/v1/users.info?username=${encodeURIComponent(username)}`, { method: 'GET', headers: { 'X-Auth-Token': 'C_3ekrsgtsaU0sVQzpJ8aRSyMQjBIvcsmXVvBI8Wmgb', 'X-User-Id': 'Tpuww59PJKsrGNQJB', }, cache: 'no-store', } ); if (!userInfoResponse.ok) { // If user info request fails, try searching by email const searchResponse = await fetch( `https://parole.slm-lab.net/api/v1/users.list?query={"emails.address":"${session.user.email}"}`, { method: 'GET', headers: { 'X-Auth-Token': 'C_3ekrsgtsaU0sVQzpJ8aRSyMQjBIvcsmXVvBI8Wmgb', 'X-User-Id': 'Tpuww59PJKsrGNQJB', }, cache: 'no-store', } ); if (!searchResponse.ok) { console.error('Rocket.Chat user search error:', { status: searchResponse.status, statusText: searchResponse.statusText, email: session.user.email, response: await searchResponse.text().catch(() => 'Could not get response text') }); return NextResponse.json( { error: "Failed to find user" }, { status: searchResponse.status } ); } const searchData = await searchResponse.json(); if (!searchData.users || searchData.users.length === 0) { return NextResponse.json({ error: "User not found in Rocket.Chat" }, { status: 404 }); } const userInfo = { user: searchData.users[0] }; const userId = userInfo.user._id; // Get the user's subscriptions (rooms they are in) const subscriptionsResponse = await fetch( `https://parole.slm-lab.net/api/v1/subscriptions.get?userId=${userId}`, { headers: { 'X-Auth-Token': 'C_3ekrsgtsaU0sVQzpJ8aRSyMQjBIvcsmXVvBI8Wmgb', 'X-User-Id': 'Tpuww59PJKsrGNQJB', }, cache: 'no-store', } ); if (!subscriptionsResponse.ok) { console.error('Rocket.Chat subscriptions error:', { status: subscriptionsResponse.status, statusText: subscriptionsResponse.statusText, response: await subscriptionsResponse.text().catch(() => 'Could not get response text') }); return NextResponse.json( { error: "Failed to fetch subscriptions" }, { status: subscriptionsResponse.status } ); } const subscriptions = await subscriptionsResponse.json(); if (!subscriptions.update || subscriptions.update.length === 0) { return NextResponse.json({ messages: [] }); } // Get the last message from each room const messages = await Promise.all( subscriptions.update.map(async (room: any) => { if (!room.lastMessage?._id) return null; const messageResponse = await fetch( `https://parole.slm-lab.net/api/v1/chat.getMessage?msgId=${room.lastMessage._id}`, { headers: { 'X-Auth-Token': 'C_3ekrsgtsaU0sVQzpJ8aRSyMQjBIvcsmXVvBI8Wmgb', 'X-User-Id': 'Tpuww59PJKsrGNQJB', }, cache: 'no-store', } ); if (messageResponse.ok) { const messageData = await messageResponse.json(); return { ...messageData.message, roomName: room.name || 'Direct Message', roomType: room.t, }; } console.error('Failed to fetch message:', { roomId: room._id, messageId: room.lastMessage._id, status: messageResponse.status, response: await messageResponse.text().catch(() => 'Could not get response text') }); return null; }) ); // Filter out any null messages and sort by timestamp const validMessages = messages .filter((msg): msg is NonNullable => msg !== null) .sort((a, b) => new Date(b.ts).getTime() - new Date(a.ts).getTime()); return NextResponse.json({ messages: validMessages }); } const userInfo = await userInfoResponse.json(); const userId = userInfo.user._id; // Get the user's subscriptions (rooms they are in) const subscriptionsResponse = await fetch( `https://parole.slm-lab.net/api/v1/subscriptions.get?userId=${userId}`, { headers: { 'X-Auth-Token': 'C_3ekrsgtsaU0sVQzpJ8aRSyMQjBIvcsmXVvBI8Wmgb', 'X-User-Id': 'Tpuww59PJKsrGNQJB', }, cache: 'no-store', } ); if (!subscriptionsResponse.ok) { console.error('Rocket.Chat subscriptions error:', { status: subscriptionsResponse.status, statusText: subscriptionsResponse.statusText, response: await subscriptionsResponse.text().catch(() => 'Could not get response text') }); return NextResponse.json( { error: "Failed to fetch subscriptions" }, { status: subscriptionsResponse.status } ); } const subscriptions = await subscriptionsResponse.json(); if (!subscriptions.update || subscriptions.update.length === 0) { return NextResponse.json({ messages: [] }); } // Get the last message from each room const messages = await Promise.all( subscriptions.update.map(async (room: any) => { if (!room.lastMessage?._id) return null; const messageResponse = await fetch( `https://parole.slm-lab.net/api/v1/chat.getMessage?msgId=${room.lastMessage._id}`, { headers: { 'X-Auth-Token': 'C_3ekrsgtsaU0sVQzpJ8aRSyMQjBIvcsmXVvBI8Wmgb', 'X-User-Id': 'Tpuww59PJKsrGNQJB', }, cache: 'no-store', } ); if (messageResponse.ok) { const messageData = await messageResponse.json(); return { ...messageData.message, roomName: room.name || 'Direct Message', roomType: room.t, }; } console.error('Failed to fetch message:', { roomId: room._id, messageId: room.lastMessage._id, status: messageResponse.status, response: await messageResponse.text().catch(() => 'Could not get response text') }); return null; }) ); // Filter out any null messages and sort by timestamp const validMessages = messages .filter((msg): msg is NonNullable => msg !== null) .sort((a, b) => new Date(b.ts).getTime() - new Date(a.ts).getTime()); return NextResponse.json({ messages: validMessages }); } catch (error) { console.error('Error fetching messages:', error); return NextResponse.json( { error: "Internal server error" }, { status: 500 } ); } }