Packages

A small, transport-agnostic atproto client for Gleam: XRPC, identity, OAuth discovery, blobs, and repo CRUD.

Current section

Files

Jump to
atproto_client src atproto identity.gleam
Raw

src/atproto/identity.gleam

//// Resolve a handle or DID to its PDS endpoint via an injected
//// Slingshot-compatible `resolveMiniDoc` resolver. This is not native atproto
//// identity resolution (DID doc / PLC / did:web / DNS); consumers depend on the
//// resolver service being available. URL, decoder, and `MiniDoc` come from
//// `atproto_core/identity`.
import atproto/xrpc.{type Client, type XrpcError}
import atproto_core/identity as core_identity
import gleam/option.{None}
import gleam/result
pub const default_resolver = core_identity.default_resolver
pub type MiniDoc =
core_identity.MiniDoc
pub fn resolve_pds(
client: Client,
resolver: String,
identifier: String,
) -> Result(String, XrpcError) {
resolve_mini_doc(client, resolver, identifier)
|> result.map(fn(doc) { doc.pds })
}
pub fn resolve_mini_doc(
client: Client,
resolver: String,
identifier: String,
) -> Result(MiniDoc, XrpcError) {
use resp <- result.try(xrpc.get(
client,
core_identity.mini_doc_url(resolver, identifier),
None,
))
xrpc.parse(resp.body, core_identity.mini_doc_decoder())
}