const axios = require("axios"); require("dotenv").config(); async function fetchRepo(username, reponame) { const res = await axios({ url: "https://api.github.com/graphql", method: "post", headers: { Authorization: `bearer ${process.env.GITHUB_TOKEN}`, }, data: { query: ` query getRepo($login: String!, $repo: String!) { user(login: $login) { repository(name: $repo) { name stargazers { totalCount } description primaryLanguage { color id name } forkCount } } organization(login: $login) { repository(name: $repo) { name stargazers { totalCount } description primaryLanguage { color id name } forkCount } } } `, variables: { login: username, repo: reponame, }, }, }); if (res.data.error && res.data.error.type !== "NOT_FOUND") return {}; if (!res.data.data.organization && res.data.data.user) return res.data.data.user.repository; const isOrg = res.data.data.organization && !res.data.data.user; if (isOrg) return res.data.data.organization.repository; return res.data.data.user.repository; } const renderRepoCard = (repo) => { const { name, description, primaryLanguage, stargazers, forkCount } = repo; const height = 120; return ` ${name} ${description.slice( 0, 60 )}.. ${primaryLanguage.name} ${stargazers.totalCount} ${forkCount} `; }; module.exports = async (req, res) => { const username = req.query.username; const repo = req.query.repo; const repoData = await fetchRepo(username, repo); res.setHeader("Content-Type", "image/svg+xml"); res.send(renderRepoCard(repoData)); };