๐Ÿ€ ATproto library for gleam
atproto library gleam
34

Configure Feed

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

possum: add get_blob

kacaii.dev (Jul 12, 2026, 2:52 PM -0300) a8b0ca07 d6e77ada

+52
+20
src/possum.gleam
··· 814 814 |> request.set_method(http.Post) 815 815 |> request.set_path(com_atproto_repo <> ".putRecord") 816 816 } 817 + 818 + /// Get a blob associated with a given account. 819 + /// Returns the full blob as originally uploaded. 820 + /// Does not require auth; implemented by PDS. 821 + /// 822 + /// Endpoint Docs: [/xrpc/com.atproto.sync.getBlob](https://endpoints.bsky.app/#bluesky-app/tag/comatprotosync/GET/xrpc/com.atproto.sync.getBlob) 823 + pub fn get_blob( 824 + request: request.Request(String), 825 + did: did.Did, 826 + cid: String, 827 + ) -> request.Request(BitArray) { 828 + let query = [#("did", did.to_string(did)), #("cid", cid)] 829 + 830 + request 831 + |> request.prepend_header("accept", "*/*") 832 + |> request.set_body(<<>>) 833 + |> request.set_method(http.Get) 834 + |> request.set_path(com_atproto_sync <> ".getBlob") 835 + |> request.set_query(query) 836 + }
+32
test/possum_test.gleam
··· 1 1 import envoy 2 + import gleam/bit_array 2 3 import gleam/dict 3 4 import gleam/dynamic 4 5 import gleam/dynamic/decode ··· 162 163 let assert Ok(_) = json.parse(response.body, decoder) 163 164 Nil 164 165 } 166 + 167 + pub fn get_blob_test() -> Nil { 168 + let context = global_data() 169 + let assert Ok(bsky_profile) = nsid.parse("app.bsky.actor.profile") 170 + 171 + let assert Ok(bsky_query) = 172 + request.new() 173 + |> request.set_host(slingshot) 174 + |> possum.get_record( 175 + context.did, 176 + collection: bsky_profile, 177 + rkey: "self", 178 + cid: option.None, 179 + ) 180 + |> httpc.send 181 + 182 + let assert Ok(rkey) = 183 + json.parse( 184 + bsky_query.body, 185 + decode.at(["value", "avatar", "ref", "$link"], decode.string), 186 + ) 187 + 188 + let assert Ok(response) = 189 + request.new() 190 + |> request.set_host(context.pds) 191 + |> possum.get_blob(context.did, rkey) 192 + |> httpc.send_bits 193 + 194 + assert bit_array.byte_size(response.body) != 0 195 + Nil 196 + }