···
4
+
DidDocument} from "@/lib/types/atproto";
7
+
} from "@/lib/types/atproto";
8
+
import type { Result } from "@/lib/utils/result";
9
+
import type { DidDocumentResolver } from "@atcute/identity-resolver";
11
+
CompositeDidDocumentResolver,
12
+
CompositeHandleResolver,
13
+
DohJsonHandleResolver,
14
+
PlcDidDocumentResolver,
15
+
WebDidDocumentResolver,
16
+
WellKnownHandleResolver,
17
+
} from "@atcute/identity-resolver";
19
+
export const didDocResolver: DidDocumentResolver =
20
+
new CompositeDidDocumentResolver({
22
+
plc: new PlcDidDocumentResolver(),
23
+
web: new WebDidDocumentResolver(),
27
+
export const handleResolver = new CompositeHandleResolver({
28
+
strategy: "dns-first",
30
+
dns: new DohJsonHandleResolver({
31
+
dohUrl: "https://mozilla.cloudflare-dns.com/dns-query",
33
+
http: new WellKnownHandleResolver(),
37
+
export const resolveDidDoc = async (
38
+
authority: Did | AtprotoHandle,
39
+
): Promise<Result<DidDocument, unknown>> => {
40
+
const { data: handle } = atprotoHandleSchema.safeParse(authority);
44
+
did = await handleResolver.resolve(handle);
46
+
return { ok: false, error: err };
49
+
// @ts-expect-error if handle is undefined, then we know that authority must be a valid did:web or did:plc
53
+
const doc: DidDocument = await didDocResolver.resolve(did);
54
+
return { ok: true, data: doc };
56
+
return { ok: false, error: err };