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