import type { DidDocument } from "@atcute/identity"; import type { ATProtoUniverse } from "@char/lexicon.ts/atproto"; import { XRPC } from "@char/lexicon.ts/rpc"; const bskyPublic = new XRPC("https://public.api.bsky.app"); export async function resolveHandle(handle: string): Promise<`did:${string}`> { const { did } = await bskyPublic.get("com.atproto.identity.resolveHandle", { params: { handle }, }); return did; } export async function resolveDid(did: string): Promise { if (did.startsWith("did:plc:")) { const doc = await fetch("https://plc.directory/" + did).then(r => r.json()); return doc; } else if (did.startsWith("did:web:")) { // TODO: write our own did:web resolver (maybe use a CORS proxy on clientside) const { WebDidDocumentResolver } = await import("@atcute/identity-resolver"); const resolver = new WebDidDocumentResolver(); return resolver.resolve(did as `did:web:${string}`); } throw new Error("unsupported did type: " + did); }