--- import { getCollection } from "astro:content"; import PostItem from "./PostItem.astro"; import { getLangFromUrl } from "@/i18n"; const token = import.meta.env.GITHUB_TOKEN; const owner = import.meta.env.GISCUS_REPO_OWNER; const name = import.meta.env.GISCUS_REPO_NAME; const categoryId = import.meta.env.GISCUS_CATEGORY_ID; const lang = getLangFromUrl(Astro.url); const allPosts = await getCollection("blog"); type ReactionGroup = { users?: { totalCount?: number; }; }; type DiscussionNode = { title: string; comments?: { totalCount?: number; }; reactionGroups?: ReactionGroup[]; }; function normalizePath(path: string) { return path.replace(/^\/+|\/+$/g, ""); } async function fetchDiscussionStats(): Promise { // const token = import.meta.env.GITHUB_TOKEN; if (!token) return []; const query = ` query($owner: String!, $name: String!, $categoryId: ID!) { repository(owner: $owner, name: $name) { discussions(first: 100, categoryId: $categoryId) { nodes { title comments(first: 0) { totalCount } reactionGroups { users { totalCount } } } } } } `; const res = await fetch("https://api.github.com/graphql", { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}`, }, body: JSON.stringify({ query, variables: { owner: owner, name: name, categoryId: categoryId, }, }), }); const json = await res.json(); return (json?.data?.repository?.discussions?.nodes ?? []) as DiscussionNode[]; } const discussions = await fetchDiscussionStats(); const sortedPosts = [...allPosts].sort( (a, b) => new Date(b.data.pubDate).getTime() - new Date(a.data.pubDate).getTime(), ); const latestPosts = sortedPosts.slice(0, 5); ---