Packages
atproto_browser
0.1.0
A browser-native atproto OAuth + XRPC client for Gleam: WebCrypto DPoP, PKCE, and async transport, for building a public-client SPA with no server-side session custody.
Current section
Files
Jump to
Current section
Files
src/atproto/browser/identity.gleam
//// Async mirror of `atproto/identity.gleam` for the browser `Client`. URL,
//// decoder, and `MiniDoc` come from `atproto_core/identity`.
import atproto/browser/xrpc.{type Client, type XrpcError}
import atproto_core/identity as core_identity
import gleam/javascript/promise.{type Promise}
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,
) -> Promise(Result(String, XrpcError)) {
resolve_mini_doc(client, resolver, identifier)
|> promise.map(result.map(_, fn(doc) { doc.pds }))
}
pub fn resolve_mini_doc(
client: Client,
resolver: String,
identifier: String,
) -> Promise(Result(MiniDoc, XrpcError)) {
use resp <- promise.map(xrpc.get(
client,
core_identity.mini_doc_url(resolver, identifier),
None,
))
use resp <- result.try(resp)
xrpc.parse(resp.body, core_identity.mini_doc_decoder())
}