From 99769203309bd68665f82686aee2aa2994aa77c2 Mon Sep 17 00:00:00 2001 From: Ritikydv1 Date: Tue, 23 Jun 2026 01:49:06 +0530 Subject: [PATCH 1/4] feat: implement all repos fetch with PAT functionality --- src/context/AppContext.jsx | 2 +- src/services/github.js | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/context/AppContext.jsx b/src/context/AppContext.jsx index ceab84d..a2a4be3 100644 --- a/src/context/AppContext.jsx +++ b/src/context/AppContext.jsx @@ -33,7 +33,7 @@ export function AppProvider({ children }) { setLoadMsg('Fetching repositories...') const reposPerOrg = {} await Promise.allSettled(validOrgs.map(async org => { - reposPerOrg[org.login] = await fetchRepos(org.login, pat) + reposPerOrg[org.login] = await fetchRepos(org.login, org.public_repos, pat) })) setLoadMsg('Fetching contributor data for top repositories...') diff --git a/src/services/github.js b/src/services/github.js index 8b10597..0e4ed8a 100644 --- a/src/services/github.js +++ b/src/services/github.js @@ -74,10 +74,11 @@ async function fetchWithCache(url, pat) { export const fetchOrg = (org, pat) => fetchWithCache(`https://api.github.com/orgs/${org}`, pat) -export async function fetchRepos(org, pat) { +export async function fetchRepos(org, repoCount, pat) { const all = [] - for (let page = 1; page <= 5; page++) { - const url = `https://api.github.com/orgs/${org}/repos?per_page=100&page=${page}&sort=updated` + const maxPages = pat ? Math.ceil(repoCount / 100) : 5 + for (let page = 1; page <= maxPages; page++) { + const url = `https://api.github.com/orgs/${org}/repos?per_page=100&page=${page}&sort=updated` const data = await fetchWithCache(url, pat) all.push(...data) if (data.length < 100) break @@ -88,7 +89,7 @@ export async function fetchRepos(org, pat) { export async function fetchContributors(org, repo, pat) { try { return await fetchWithCache( - `https://api.github.com/repos/${org}/${repo}/contributors?per_page=30`, pat + `https://api.github.com/repos/${org}/${repo}/contributors?per_page=100`, pat ) } catch { return [] } } From e618fd7c6b2d5be5e1197e045963f8f93662545f Mon Sep 17 00:00:00 2001 From: Ritikydv1 Date: Tue, 23 Jun 2026 01:53:44 +0530 Subject: [PATCH 2/4] feat: implement all contributors fetch with PAT functionality --- src/context/AppContext.jsx | 2 +- src/services/github.js | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/context/AppContext.jsx b/src/context/AppContext.jsx index a2a4be3..8ced992 100644 --- a/src/context/AppContext.jsx +++ b/src/context/AppContext.jsx @@ -39,7 +39,7 @@ export function AppProvider({ children }) { setLoadMsg('Fetching contributor data for top repositories...') const contribsPerRepo = {} for (const org of validOrgs) { - const top = (reposPerOrg[org.login] || []) + const top = pat ? reposPerOrg[org.login] : (reposPerOrg[org.login] || []) .sort((a, b) => b.stargazers_count - a.stargazers_count) .slice(0, 10) await Promise.allSettled(top.map(async repo => { diff --git a/src/services/github.js b/src/services/github.js index 0e4ed8a..f932168 100644 --- a/src/services/github.js +++ b/src/services/github.js @@ -87,11 +87,14 @@ export async function fetchRepos(org, repoCount, pat) { } export async function fetchContributors(org, repo, pat) { - try { - return await fetchWithCache( - `https://api.github.com/repos/${org}/${repo}/contributors?per_page=100`, pat - ) - } catch { return [] } + const all = [] + for(let page = 1; ; page++) { + const url = `https://api.github.com/repos/${org}/${repo}/contributors?per_page=100&page=${page}` + const data = await fetchWithCache(url, pat) + all.push(...data) + if(data.length < 100) break + } + return all } export async function fetchIssues(org, repo, pat) { From d04608af5afae8f98dc8ded39000447b4171b205 Mon Sep 17 00:00:00 2001 From: Ritikydv1 Date: Tue, 23 Jun 2026 02:09:01 +0530 Subject: [PATCH 3/4] feat: implement functonality for all issue fetch with PAT --- src/context/AppContext.jsx | 2 +- src/services/github.js | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/context/AppContext.jsx b/src/context/AppContext.jsx index 8ced992..05790e2 100644 --- a/src/context/AppContext.jsx +++ b/src/context/AppContext.jsx @@ -73,7 +73,7 @@ export function AppProvider({ children }) { if (!model || govLoading) return setGovLoading(true) const map = {} - const repos = model.allRepos.slice(0, 15) + const repos = pat? model.allRepos : model.allRepos.slice(0, 15) // Batches of 5 using Promise.allSettled for (let i = 0; i < repos.length; i += 5) { diff --git a/src/services/github.js b/src/services/github.js index f932168..8e720df 100644 --- a/src/services/github.js +++ b/src/services/github.js @@ -98,11 +98,14 @@ export async function fetchContributors(org, repo, pat) { } export async function fetchIssues(org, repo, pat) { - try { - return await fetchWithCache( - `https://api.github.com/repos/${org}/${repo}/issues?state=all&per_page=100`, pat - ) - } catch { return [] } + const all = [] + for(let page = 1; ; page++) { + const url = `https://api.github.com/repos/${org}/${repo}/issues?state=all&per_page=100&page=${page}` + const data = await fetchWithCache(url, pat) + all.push(...data) + if(data.length < 100) break + } + return all } export async function fetchRateLimit(pat) { From f18c73df575a62694cb2d639a2d1ebf454e98945 Mon Sep 17 00:00:00 2001 From: Ritikydv1 Date: Wed, 24 Jun 2026 21:17:35 +0530 Subject: [PATCH 4/4] fix: address coderabbit suggestion for repository fallback --- src/context/AppContext.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/context/AppContext.jsx b/src/context/AppContext.jsx index 05790e2..0a250a7 100644 --- a/src/context/AppContext.jsx +++ b/src/context/AppContext.jsx @@ -39,7 +39,7 @@ export function AppProvider({ children }) { setLoadMsg('Fetching contributor data for top repositories...') const contribsPerRepo = {} for (const org of validOrgs) { - const top = pat ? reposPerOrg[org.login] : (reposPerOrg[org.login] || []) + const top = pat ? (reposPerOrg[org.login] || []) : (reposPerOrg[org.login] || []) .sort((a, b) => b.stargazers_count - a.stargazers_count) .slice(0, 10) await Promise.allSettled(top.map(async repo => {