import type { MegalodonInterface } from "megalodon"; import type { FastifyRequest } from 'fastify'; import { convertTimelinesArgsId } from "./timeline.js"; import { IdConvertType as IdType, convertId, convertNotification } from '../converters.js'; function toLimitToInt(q: any) { if (q.limit) if (typeof q.limit === "string") q.limit = parseInt(q.limit, 10); return q; } export class apiNotifyMastodon { private request: FastifyRequest; private client: MegalodonInterface; constructor(request: FastifyRequest, client: MegalodonInterface) { this.request = request; this.client = client; } public async getNotifications() { try { const data = await this.client.getNotifications( convertTimelinesArgsId(toLimitToInt(this.request.query)) ); const notifs = data.data; const processed = notifs.map((n) => { n = convertNotification(n); if (n.type !== "follow" && n.type !== "follow_request") { if (n.type === "reaction") n.type = "favourite"; return n; } else { return n; } }); return processed; } catch (e: any) { console.error(e); return e.response.data; } } public async getNotification() { try { const data = await this.client.getNotification( convertId((this.request.params as any).id, IdType.SharkeyId) ); const notif = convertNotification(data.data); if (notif.type !== "follow" && notif.type !== "follow_request" && notif.type === "reaction") notif.type = "favourite"; return notif; } catch (e: any) { console.error(e); return e.response.data; } } public async rmNotification() { try { const data = await this.client.dismissNotification( convertId((this.request.params as any).id, IdType.SharkeyId) ); return data.data; } catch (e: any) { console.error(e); return e.response.data; } } public async rmNotifications() { try { const data = await this.client.dismissNotifications(); return data.data; } catch (e: any) { console.error(e); return e.response.data; } } }