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}