Scratch space for learning atproto app development
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}