import { MiscHelpers } from "../helpers/misc.js"; import { argsToBools, limitToInt } from "./timeline.js"; import { Announcements } from "../../../../models/index.js"; import { auth } from "../middleware/auth.js"; import { MastoApiError } from "../middleware/catch-errors.js"; import { filterContext } from "../middleware/filter-context.js"; export function setupEndpointsMisc(router) { router.get("/v1/custom_emojis", async (ctx)=>{ ctx.body = await MiscHelpers.getCustomEmoji(); }); router.get("/v1/instance", async (ctx)=>{ ctx.body = await MiscHelpers.getInstance(ctx); }); router.get("/v1/announcements", auth(true), async (ctx)=>{ const args = argsToBools(ctx.query, [ 'with_dismissed' ]); ctx.body = await MiscHelpers.getAnnouncements(args['with_dismissed'], ctx); }); router.post("/v1/announcements/:id/dismiss", auth(true, [ 'write:accounts' ]), async (ctx)=>{ const announcement = await Announcements.findOneBy({ id: ctx.params.id }); if (!announcement) throw new MastoApiError(404); await MiscHelpers.dismissAnnouncement(announcement, ctx); ctx.body = {}; }); //FIXME: add link pagination to trends (ref: https://mastodon.social/api/v1/trends/tags?offset=10&limit=1) router.get([ "/v1/trends/tags", "/v1/trends" ], async (ctx)=>{ const args = limitToInt(ctx.query); ctx.body = await MiscHelpers.getTrendingHashtags(args.limit, args.offset); //FIXME: convert ids }); router.get("/v1/trends/statuses", filterContext('public'), async (ctx)=>{ const args = limitToInt(ctx.query); ctx.body = await MiscHelpers.getTrendingStatuses(args.limit, args.offset, ctx); }); router.get("/v1/trends/links", async (ctx)=>{ ctx.body = []; }); router.get("/v1/preferences", auth(true, [ 'read:accounts' ]), async (ctx)=>{ ctx.body = await MiscHelpers.getPreferences(ctx); }); router.get("/v2/suggestions", auth(true, [ 'read:accounts' ]), async (ctx)=>{ const args = limitToInt(ctx.query); ctx.body = await MiscHelpers.getFollowSuggestions(args.limit, ctx); }); }