Standard.site landing page built in Next.js
0

Configure Feed

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

at main 1.9 kB View raw
1import { AtpAgent } from "@atproto/api"; 2import { writeFileSync, mkdirSync, existsSync } from "fs"; 3import { join, dirname } from "path"; 4import { fileURLToPath } from "url"; 5 6const STANDARD_DID = "did:plc:re3ebnp5v7ffagz6rb6xfei4"; 7const LEXICON_COLLECTION = "com.atproto.lexicon.schema"; 8 9const LEXICONS_TO_SYNC = [ 10 "site.standard.publication", 11 "site.standard.document", 12 "site.standard.theme.basic", 13 "site.standard.theme.color", 14 "site.standard.graph.subscription", 15 "site.standard.graph.recommend", 16 "site.standard.authFull", 17 "site.standard.authSocial", 18]; 19 20const __dirname = dirname(fileURLToPath(import.meta.url)); 21const OUTPUT_DIR = join(__dirname, "../app/data/lexicons"); 22 23const agent = new AtpAgent({ 24 service: "https://bsky.social", 25}); 26 27async function fetchLexicon(nsid: string) { 28 const response = await agent.com.atproto.repo.getRecord({ 29 repo: STANDARD_DID, 30 collection: LEXICON_COLLECTION, 31 rkey: nsid, 32 }); 33 34 return response.data.value; 35} 36 37function getFileName(nsid: string): string { 38 // site.standard.publication -> publication.json 39 // site.standard.theme.basic -> theme.basic.json 40 const parts = nsid.split("."); 41 const name = parts.slice(2).join("."); 42 return `${name}.json`; 43} 44 45async function main() { 46 console.log("Syncing lexicons from AT Protocol...\n"); 47 48 if (!existsSync(OUTPUT_DIR)) { 49 mkdirSync(OUTPUT_DIR, { recursive: true }); 50 console.log(`Created directory: ${OUTPUT_DIR}\n`); 51 } 52 53 for (const nsid of LEXICONS_TO_SYNC) { 54 try { 55 console.log(`Fetching ${nsid}...`); 56 const lexicon = await fetchLexicon(nsid); 57 const fileName = getFileName(nsid); 58 const filePath = join(OUTPUT_DIR, fileName); 59 60 writeFileSync(filePath, JSON.stringify(lexicon, null, 2)); 61 console.log(` Saved to ${fileName}`); 62 } catch (error) { 63 console.error(` Failed to fetch ${nsid}:`, error); 64 } 65 } 66 67 console.log("\nSync complete."); 68} 69 70main();