From 94fcda59a064b5e8952d1bccb6b9a153c39acda1 Mon Sep 17 00:00:00 2001 From: Joe Mou Date: Wed, 28 Jan 2026 22:41:00 -0500 Subject: Commits list --- cgithub/src/scraper.ts | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'cgithub/src/scraper.ts') diff --git a/cgithub/src/scraper.ts b/cgithub/src/scraper.ts index e58402a..71d0e3e 100644 --- a/cgithub/src/scraper.ts +++ b/cgithub/src/scraper.ts @@ -54,6 +54,26 @@ interface IssueIndexPageQuery { type StylingDirective = [number, number, string]; +interface Commit { + oid: string; + url: string; + authoredDate: string; + committedDate: string; + shortMessage: string; + bodyMessageHtml: string; + authors: { + login: string; + displayName: string; + avatarUrl: string; + path: string; + }[]; +} + +export interface CommitGroup { + title: string; + commits: Commit[]; +} + interface RawPayload { repo: { ownerLogin: string; @@ -82,6 +102,7 @@ interface RawPayload { overview?: { overviewFiles?: OverviewFile[]; }; + commitGroups?: CommitGroup[]; // Actually there may be other query types. preloadedQueries?: IssueIndexPageQuery[]; } @@ -159,6 +180,10 @@ export interface GitHubIssues extends GitHubCommon { issues: Issue[]; } +export interface GitHubCommits extends GitHubNav { + commitGroups: CommitGroup[]; +} + async function fetchGitHubPage(path: string): Promise { // GitHub throttles/blocks requests without realistic browser headers. // These headers make the request appear as a standard browser visit. @@ -350,3 +375,31 @@ export async function getGitHubIssues(owner: string, repo: string): Promise { + const urlPath = path + ? `${owner}/${repo}/commits/${branch}/${path}` + : `${owner}/${repo}/commits/${branch}`; + const html = await fetchGitHubPage(urlPath); + + const payload = parsePayload(html, "react-app.embeddedData", ["payload"]); + + if (payload?.commitGroups === undefined) { + throw new Error("Could not find commit history in embedded JSON"); + } + + return { + repo: { + owner, + name: repo, + }, + branch, + path, + commitGroups: payload.commitGroups, + }; +} -- cgit v1.3.1