import { IdResolver, MemoryCache } from '@atproto/identity' const HOUR = 60e3 * 60 const DAY = HOUR * 24 export function createIdResolver() { return new IdResolver({ didCache: new MemoryCache(HOUR, DAY), }) } export interface BidirectionalResolver { resolveDidToHandle(did: string): Promise resolveDidsToHandles(dids: string[]): Promise> } export function createBidirectionalResolver(resolver: IdResolver) { 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 }, } }