diff --git a/lib/routes/obsidian/plugins.ts b/lib/routes/obsidian/plugins.ts new file mode 100644 index 00000000000000..83198bfacd388c --- /dev/null +++ b/lib/routes/obsidian/plugins.ts @@ -0,0 +1,41 @@ +import { Route } from '@/types'; + +import ofetch from '@/utils/ofetch'; + +export const route: Route = { + path: '/plugins', + name: 'Obsidian Plugins', + maintainers: ['DIYgod'], + categories: ['program-update'], + example: '/obsidian/plugins', + handler, +}; + +async function handler() { + const data = JSON.parse(await ofetch('https://raw.githubusercontent.com/obsidianmd/obsidian-releases/refs/heads/master/community-plugins.json')) as { + id: string; + name: string; + author: string; + description: string; + repo: string; + }[]; + const stats = JSON.parse(await ofetch('https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-plugin-stats.json')) as { + [key: string]: { + downloads: number; + updated: number; + }; + }; + + return { + title: 'Obsidian Plugins', + link: `https://obsidian.md/plugins`, + item: data.map((item) => ({ + title: item.name, + description: `${item.description}

Downloads: ${stats[item.id].downloads}`, + link: `https://github.com/${item.repo}`, + guid: item.id, + pubDate: new Date(stats[item.id].updated), + author: item.author, + })), + }; +}