data endpoint for entity 90008 (aka. a website)
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

show tangled activity

dawn 21d33a14 b42a0251

+56 -1
+56 -1
src/lib/activity.ts
··· 7 7 try { 8 8 const githubFeed = await parseFeedToActivity('https://github.com/90-008.atom'); 9 9 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) 13 + ).slice(0, 7); 11 14 lastCommits.set(mergedFeed); 12 15 } catch (why) { 13 16 console.log('could not fetch git activity: ', why); ··· 23 26 description: string; 24 27 link: string | null; 25 28 date: Date | null; 29 + }; 30 + 31 + const toHex = (bytes: number[]): string => { 32 + return bytes.map((b) => b.toString(16).padStart(2, '0')).join(''); 33 + }; 34 + 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[] = []; 40 + 41 + try { 42 + const listRes = await fetch( 43 + `${pds}/xrpc/com.atproto.repo.listRecords?repo=${did}&collection=sh.tangled.repo` 44 + ); 45 + if (!listRes.ok) return []; 46 + const listData = await listRes.json(); 47 + 48 + for (const record of listData.records || []) { 49 + const repoName = record.value.name; 50 + if (!repoName) continue; 51 + 52 + try { 53 + const logRes = await fetch( 54 + `${knot}/xrpc/sh.tangled.repo.log?repo=${did}/${repoName}` 55 + ); 56 + if (!logRes.ok) continue; 57 + const logData = await logRes.json(); 58 + 59 + const commits = logData.commits || []; 60 + 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; 65 + 66 + activities.push({ 67 + source: 'knot.gaze.systems', 68 + description: message, 69 + link: `https://tangled.sh/${did}/${repoName}/commit/${hash}`, 70 + date: dateStr ? new Date(dateStr) : null 71 + }); 72 + } 73 + } catch (err) { 74 + console.log(`could not fetch tangled log for ${repoName}:`, err); 75 + } 76 + } 77 + } catch (err) { 78 + console.log('could not fetch tangled repos:', err); 79 + } 80 + return activities; 26 81 }; 27 82 28 83 const parseFeedToActivity = async (url: string) => {