import { IdResolver, MemoryCache } from '@atproto/identity' const HOUR = 60e3 * 60 const DAY = HOUR * 24 export interface Resolver { resolveDidToHandle(did: string): Promise resolveDidsToHandles(dids: string[]): Promise> } export function createResolver() { const resolver = new IdResolver({ didCache: new MemoryCache(HOUR, DAY), }) return { async resolveDidToHandle(did: string): Promise { const didDoc = await resolver.did.resolveAtprotoData(did) const resolvedHandle = await resolver.handle.resolve(didDoc.handle) if (resolvedHandle === did) { return didDoc.handle } return did }, async resolveDidsToHandles( dids: string[] ): Promise> { const didHandleMap: Record = {} const resolves = await Promise.all( dids.map((did) => this.resolveDidToHandle(did).catch((_) => did)) ) for (let i = 0; i < dids.length; i++) { didHandleMap[dids[i]] = resolves[i] } return didHandleMap }, } }