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