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