Scrapboard.org client
at main 43 lines 1.2 kB view raw
1import { Agent } from "@atproto/api"; 2import { DidCache } from "../stores/did"; 3import { PLC_DIRECTORY } from "@/constants"; 4import { 5 CompositeDidDocumentResolver, 6 PlcDidDocumentResolver, 7 WebDidDocumentResolver, 8} from "@atcute/identity-resolver"; 9import { Did } from "@atcute/lexicons"; 10 11export async function getPdsAgent( 12 did: string | null, 13 didStore: DidCache, 14 defaultAgent: Agent 15) { 16 const docResolver = new CompositeDidDocumentResolver({ 17 methods: { 18 plc: new PlcDidDocumentResolver(), 19 web: new WebDidDocumentResolver(), 20 }, 21 }); 22 23 if (!did) { 24 return defaultAgent; 25 } else { 26 let didDoc = didStore.getDid(did); 27 if (!didDoc) { 28 const doc = await docResolver.resolve(did as Did<"plc">); 29 didDoc = didStore.setDid(did, doc); 30 } 31 32 if (!didDoc?.doc?.service) 33 throw Error("DID document doesn't include 'service'"); 34 const pdsUrl = didDoc?.doc?.service.filter((e) => e.id == "#atproto_pds")[0] 35 .serviceEndpoint; 36 37 if (!pdsUrl) throw Error("DID doesn't include atproto"); 38 if (typeof pdsUrl != "string") 39 throw Error("'#atproto_pds' service endpoint isn't a string"); 40 41 return new Agent({ service: pdsUrl }); 42 } 43}