import { envConfig, prisma } from "./main.js"; import { PleromaEmoji, Notification, ContextResponse } from "../types.js"; const getNotifications = async () => { const { bearerToken, pleromaInstanceUrl } = envConfig; try { const request = await fetch( `${pleromaInstanceUrl}/api/v1/notifications?types[]=mention`, { method: "GET", headers: { Authorization: `Bearer ${bearerToken}`, }, } ); const notifications: Notification[] = await request.json(); return notifications; } catch (error: any) { throw new Error(error.message); } }; const getStatusContext = async (statusId: string) => { const { bearerToken, pleromaInstanceUrl } = envConfig; try { const response = await fetch( `${pleromaInstanceUrl}/api/v1/statuses/${statusId}/context`, { method: "GET", headers: { Authorization: `Bearer ${bearerToken}`, }, } ); if (!response.ok) { throw new Error( `Could not get conversation context: ${response.status} - ${response.statusText}` ); } const data: ContextResponse = await response.json(); return data; } catch (error: unknown) { if (error instanceof Error) { throw new Error(error.message); } } }; const getInstanceEmojis = async () => { const { bearerToken, pleromaInstanceUrl } = envConfig; try { const request = await fetch(`${pleromaInstanceUrl}/api/v1/pleroma/emoji`, { method: "GET", headers: { Authorization: `Bearer ${bearerToken}`, }, }); if (!request.ok) { console.error(`Emoji GET failed: ${request.status}`); return; } const emojis: PleromaEmoji[] = await request.json(); return Object.keys(emojis); } catch (error: any) { console.error(`Could not fetch emojis: ${error.message}`); } }; const deleteNotification = async (notification: Notification) => { const { pleromaInstanceUrl, bearerToken } = envConfig; try { if (!notification.id) { return; } await prisma.response.updateMany({ // this is probably not the best way to do this, but since we may have duplicate notifications, we have to update all of them - probably won't scale (lmao) where: { pleromaNotificationId: notification.id }, data: { isProcessing: false }, }); const response = await fetch( `${pleromaInstanceUrl}/api/v1/notifications/${notification.id}/dismiss`, { method: "POST", headers: { Authorization: `Bearer ${bearerToken}`, }, } ); if (!response.ok) { console.error( `Could not delete notification ID: ${notification.id}\nReason: ${response.status} - ${response.statusText}` ); } } catch (error: any) { throw new Error(error.message); } }; export { deleteNotification, getInstanceEmojis, getNotifications, getStatusContext, };