sharkey/packages/backend/src/server/api/mastodon/endpoints/notifications.ts

71 lines
2.2 KiB
TypeScript
Raw Normal View History

2023-09-24 19:05:59 +09:00
import type { MegalodonInterface } from 'megalodon';
import type { FastifyRequest } from 'fastify';
2023-09-24 19:05:59 +09:00
import { convertTimelinesArgsId } from './timeline.js';
import { IdConvertType as IdType, convertId, convertNotification } from '../converters.js';
function toLimitToInt(q: any) {
2023-09-24 19:05:59 +09:00
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);
2023-09-24 19:05:59 +09:00
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);
2023-09-24 19:05:59 +09:00
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;
}
}
}