import { query } from "@solidjs/router" import { config } from "~/config" export const github = query(async () => { "use server" const headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36", } const apiBaseUrl = config.github.repoUrl.replace("https://github.com/", "https://api.github.com/repos/") try { const [meta, releases, contributors] = await Promise.all([ fetch(apiBaseUrl, { headers }).then((res) => res.json()), fetch(`${apiBaseUrl}/releases`, { headers }).then((res) => res.json()), fetch(`${apiBaseUrl}/contributors?per_page=1`, { headers }), ]) if (!Array.isArray(releases) || releases.length === 0) { return undefined } const [release] = releases const linkHeader = contributors.headers.get("Link") const contributorCount = linkHeader ? Number.parseInt(linkHeader.match(/&page=(\d+)>; rel="last"/)?.at(1) ?? "0") : 0 return { stars: meta.stargazers_count, release: { name: release.name, url: release.html_url, tag_name: release.tag_name, }, contributors: contributorCount, } } catch (e) { console.error(e) } return undefined }, "github")