···
const githubFeed = await parseFeedToActivity('https://github.com/90-008.atom');
const codebergFeed = await parseFeedToActivity('https://codeberg.org/90-008.atom');
10
-
const mergedFeed = sortActivities(githubFeed.concat(codebergFeed)).slice(0, 7);
10
+
const tangledFeed = await fetchTangledActivity();
11
+
const mergedFeed = sortActivities(
12
+
githubFeed.concat(codebergFeed).concat(tangledFeed)
lastCommits.set(mergedFeed);
console.log('could not fetch git activity: ', why);
···
31
+
const toHex = (bytes: number[]): string => {
32
+
return bytes.map((b) => b.toString(16).padStart(2, '0')).join('');
35
+
const fetchTangledActivity = async (): Promise<Activity[]> => {
36
+
const did = 'did:plc:dfl62fgb7wtjj3fcbb72naae';
37
+
const pds = 'https://gaze.systems';
38
+
const knot = 'https://knot.gaze.systems';
39
+
const activities: Activity[] = [];
42
+
const listRes = await fetch(
43
+
`${pds}/xrpc/com.atproto.repo.listRecords?repo=${did}&collection=sh.tangled.repo`
45
+
if (!listRes.ok) return [];
46
+
const listData = await listRes.json();
48
+
for (const record of listData.records || []) {
49
+
const repoName = record.value.name;
50
+
if (!repoName) continue;
53
+
const logRes = await fetch(
54
+
`${knot}/xrpc/sh.tangled.repo.log?repo=${did}/${repoName}`
56
+
if (!logRes.ok) continue;
57
+
const logData = await logRes.json();
59
+
const commits = logData.commits || [];
61
+
for (const commit of commits) {
62
+
const hash = commit.Hash ? toHex(commit.Hash) : '';
63
+
const message = commit.Message || '';
64
+
const dateStr = commit.Author?.When;
67
+
source: 'knot.gaze.systems',
68
+
description: message,
69
+
link: `https://tangled.sh/${did}/${repoName}/commit/${hash}`,
70
+
date: dateStr ? new Date(dateStr) : null
74
+
console.log(`could not fetch tangled log for ${repoName}:`, err);
78
+
console.log('could not fetch tangled repos:', err);
const parseFeedToActivity = async (url: string) => {