atproto pastebin service: https://plonk.li
at main 1.1 kB view raw
1import { IdResolver, MemoryCache } from "@atproto/identity"; 2 3const HOUR = 60e3 * 60; 4const DAY = HOUR * 24; 5 6export function createIdResolver() { 7 return new IdResolver({ 8 didCache: new MemoryCache(HOUR, DAY), 9 }); 10} 11 12export interface BidirectionalResolver { 13 resolveDidToHandle(did: string): Promise<string>; 14 resolveDidsToHandles(dids: string[]): Promise<Record<string, string>>; 15} 16 17export function createBidirectionalResolver(resolver: IdResolver) { 18 return { 19 async resolveDidToHandle(did: string): Promise<string> { 20 const didDoc = await resolver.did.resolveAtprotoData(did); 21 const resolvedHandle = await resolver.handle.resolve(didDoc.handle); 22 if (resolvedHandle === did) { 23 return didDoc.handle; 24 } 25 return did; 26 }, 27 28 async resolveDidsToHandles( 29 dids: string[], 30 ): Promise<Record<string, string>> { 31 const didHandleMap: Record<string, string> = {}; 32 const resolves = await Promise.all( 33 dids.map((did) => this.resolveDidToHandle(did).catch((_) => did)), 34 ); 35 for (let i = 0; i < dids.length; i++) { 36 didHandleMap[dids[i]] = resolves[i]; 37 } 38 return didHandleMap; 39 }, 40 }; 41}