Summary#
- Implements
GET /xrpc/com.atproto.identity.resolveHandle?handle=<handle>(no auth required) - Resolution order: local
handlestable → DNS TXT record at_atproto.<handle>→ 404HandleNotFound - Adds
TxtResolvertrait todns.rs(injectable, followsDnsProviderpattern) withHickoryTxtResolverproduction impl (hickory-resolver0.25) - Adds
HandleNotFound(404) toErrorCode - Adds
txt_resolver: Option<Arc<dyn TxtResolver>>toAppState; wired viaHickoryTxtResolver::from_system_conf()inmain.rs
Test plan#
-
cargo test— 215 tests pass (6 new: local lookup, DNS fallback, DNS no-match, no resolver, empty DNS response, content-type) -
cargo clippy --workspace -- -D warnings— clean -
cargo fmt --all --check— clean - Bruno:
GET /xrpc/com.atproto.identity.resolveHandle?handle=<local-handle>returns{ "did": "..." } - Bruno: unknown handle returns
{ "error": { "code": "HANDLE_NOT_FOUND" } }with 404