const axios = require("axios"); const { renderError, kFormatter } = require("../utils"); 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, }, }, }); const data = res.data.data; console.log(res.data); if (!data.user && !data.organization) { throw new Error("Not found"); } if (data.organization === null && data.user) { if (!data.user.repository) { throw new Error("User Repository Not found"); } return data.user.repository; } if (data.user === null && data.organization) { if (!data.organization.repository) { throw new Error("Organization Repository Not found"); } return data.organization.repository; } } const renderRepoCard = (repo) => { const { name, description, primaryLanguage, stargazers, forkCount } = repo; const height = 120; const shiftText = primaryLanguage.name.length > 15 ? 0 : 30; return ` ${name} ${ description ? description.slice(0, 60) : "No description provided" }.. ${primaryLanguage.name} ${kFormatter(stargazers.totalCount)} ${kFormatter(forkCount)} `; }; module.exports = async (req, res) => { const username = req.query.username; const repo = req.query.repo; let repoData; res.setHeader("Content-Type", "image/svg+xml"); try { repoData = await fetchRepo(username, repo); } catch (err) { console.log(err); return res.send(renderError(err.message)); } res.send(renderRepoCard(repoData)); };