From bad7e590fa1bf2241de55b2b735b4cb72bafe050 Mon Sep 17 00:00:00 2001 From: Alma Date: Wed, 9 Apr 2025 23:23:00 +0200 Subject: [PATCH] update widget token mail 4 --- app/api/rocket-chat/messages/route.ts | 119 +++++++++++++++++++++++--- 1 file changed, 107 insertions(+), 12 deletions(-) diff --git a/app/api/rocket-chat/messages/route.ts b/app/api/rocket-chat/messages/route.ts index 66401311..c9933a46 100644 --- a/app/api/rocket-chat/messages/route.ts +++ b/app/api/rocket-chat/messages/route.ts @@ -15,13 +15,15 @@ export async function GET() { accessToken: session.accessToken ? 'present' : 'missing' }); - if (!session.user?.username) { - return NextResponse.json({ error: "No username found in session" }, { status: 400 }); + // 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(session.user.username)}`, + `https://parole.slm-lab.net/api/v1/users.info?username=${encodeURIComponent(username)}`, { method: 'GET', headers: { @@ -33,16 +35,109 @@ export async function GET() { ); if (!userInfoResponse.ok) { - console.error('Rocket.Chat user info error:', { - status: userInfoResponse.status, - statusText: userInfoResponse.statusText, - username: session.user.username, - response: await userInfoResponse.text().catch(() => 'Could not get response text') - }); - return NextResponse.json( - { error: "Failed to fetch user info" }, - { status: userInfoResponse.status } + // 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();