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