···55Helps you build HTTP requests that interact with your [Personal Data Server](https://docs.bsky.app/docs/advanced-guides/atproto#achieving-scale).
66The user is responsible for sending the request and decode the response.
7788+## AT Protocol
99+1010+The "Atmosphere" is the term used to describe the ecosystem around the AT Protocol.
1111+1212+The AT Protocol stands for "Authenticated Transfer Protocol," and is frequently
1313+shortened to "atproto." The name is in reference to the fact that all user-data
1414+is signed by the authoring users, which makes it possible to broadcast the data
1515+through many services and prove it's real without having to speak directly to
1616+the originating server.
1717+1818+source: <https://atproto.com/guides/glossary>
1919+820## Example
9211022```sh
+44-10
src/possum.gleam
···11-//// AT Protocol uses Decentralized Identifiers (DIDs) as persistent account
22-//// identifiers. PLC stands for "Public Ledger of Credentials".
11+//// ## PDS (Personal Data Server)
32////
44-//// DIDs are the long-term persistent identifiers for accounts in atproto,
55-//// but they can be opaque and unfriendly for human use.
66-//// Handles are mutable and human-friendly account usernames,
77-//// in the form of a DNS hostname. For example, user.example.com.
88-//// Handles must be bi-directionally linked to a DID: the DID document must claim
99-//// the handle, and the handle must resolve to the DID identifier.
33+//// A PDS, or Personal Data Server, is a server that hosts a user.
44+//// A PDS will always store the user's data repo and signing keys.
55+//// It may also assign the user a handle and a DID.
66+//// Many PDSes will host multiple users.
107////
1111-//// Two methods of resolving handles to DID are supported: one using
1212-//// TXT DNS records, and the other using an HTTPS /.well-known/ URL path.
88+//// A PDS communicates with AppViews to run applications.
99+//// A PDS doesn't typically run any applications itself,
1010+//// though it will have general account management interfaces
1111+//// such as the OAuth login screen.
1212+//// PDSes actively sync their data repos with Relays.
1313+////
1414+//// ## Lexicon
1515+////
1616+//// Lexicon is a schema language. It's used in the Atmosphere to describe data
1717+//// records and HTTP APIs. Functionally it's very similar to JSON-Schema and OpenAPI.
1818+//// Lexicon's sole purpose is to help developers build compatible software.
1919+////
2020+//// ## DID (Decentralized ID)
2121+////
2222+//// DIDs, or Decentralized IDentifiers, are universally-unique identifiers which
2323+//// represent data repos. They are permanent and non-human-readable.
2424+//// DIDs are a W3C specification. The AT Protocol currently supports
2525+//// did:web and did:plc, two different DID methods.
2626+////
2727+//// DIDs resolve to documents which contain metadata about a repo,
2828+//// including the address of the repo's PDS, the repo's handles,
2929+//// and the public signing keys.
3030+////
3131+//// ## Record Keys
3232+////
3333+//// A record key (sometimes shortened to "rkey") is used to name and reference an individual
3434+//// record within the same collection of an atproto repository.
3535+//// It ends up as a segment in AT URIs, and in the repo MST path.
3636+////
3737+//// ## CID (Content ID)
3838+////
3939+//// CIDs, or Content Identifiers, are cryptographic hashes of records.
4040+//// They are used to track specific versions of records.
13411442import gleam/bool
1543import gleam/http
···6997///
7098/// request.new()
7199/// |> possum.resolve_well_known_did("gleam.run")
100100+///
101101+/// assert response.body == "did=did:plc:k5vecqzf4d5mdvkcu3mx6l5g"
72102/// ```
73103///
74104/// Documentation: [HTTPS well-known Method](https://atproto.com/specs/handle#https-well-known-method)
···262292///
263293/// A **record key** (rkey) is used to name and reference an individual record
264294/// withing the same collection of an repository.
295295+///
296296+/// CIDs include a metadata code which indicates whether it links to a node
297297+/// or arbitrary binary data. In atproto, object nodes often include a string
298298+/// field `$type` that specifies their Lexicon schema.
265299///
266300/// ```gleam
267301/// import gleam/http/request