An easy-to-host PDS on the ATProtocol, iPhone and MacOS. Maintain control of your keys and data, always.
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(MM-97): implement GET /xrpc/com.atproto.identity.resolveHandle #28

Summary#

  • Implements GET /xrpc/com.atproto.identity.resolveHandle?handle=<handle> (no auth required)
  • Resolution order: local handles table → DNS TXT record at _atproto.<handle> → 404 HandleNotFound
  • Adds TxtResolver trait to dns.rs (injectable, follows DnsProvider pattern) with HickoryTxtResolver production impl (hickory-resolver 0.25)
  • Adds HandleNotFound (404) to ErrorCode
  • Adds txt_resolver: Option<Arc<dyn TxtResolver>> to AppState; wired via HickoryTxtResolver::from_system_conf() in main.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
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:web:malpercio.dev/sh.tangled.repo.pull/3mh23zgc2de22
Diff #0

No differences found between the selected revisions.

History

1 round 0 comments
sign up or login to add to the discussion
malpercio.dev submitted #0
patch application failed: error: No valid patches in input (allow with "--allow-empty")
expand 0 comments