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

Configure Feed

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

possum: build the request directly

kacaii.dev (Jul 13, 2026, 10:56 AM -0300) 16383ca3 628d4a17

+146 -76
+146 -76
src/possum.gleam
··· 97 97 /// 98 98 /// Documentation: [DID PLC Directory](https://web.plc.directory/) 99 99 pub fn get_plc_data(did: did.Did) -> request.Request(String) { 100 - request.new() 101 - |> request.prepend_header("accept", "application/json") 102 - |> request.set_host("plc.directory") 103 - |> request.set_method(http.Get) 104 - |> request.set_path(did.to_string(did) <> "/data") 100 + request.Request( 101 + method: http.Get, 102 + headers: [#("accept", "application/json")], 103 + body: "", 104 + scheme: http.Https, 105 + host: "plc.directory", 106 + port: option.None, 107 + path: did.to_string(did) <> "/data", 108 + query: option.None, 109 + ) 105 110 } 106 111 107 112 /// Resolves a handle to a DID using a HTTPS `/.well-known/` URL path, ··· 123 128 /// 124 129 /// Documentation: [HTTPS well-known Method](https://atproto.com/specs/handle#https-well-known-method) 125 130 pub fn resolve_well_known_did(host host: String) -> request.Request(String) { 126 - request.new() 127 - |> request.set_host(host) 128 - |> request.set_method(http.Get) 129 - |> request.set_path(".well-known/atproto-did") 131 + request.Request( 132 + method: http.Get, 133 + headers: [], 134 + body: "", 135 + scheme: http.Https, 136 + host:, 137 + port: option.None, 138 + path: ".well-known/atproto-did", 139 + query: option.None, 140 + ) 130 141 } 131 142 132 143 /// Resolves an atproto handle (hostname) to a DID. ··· 159 170 handle: handle.Handle, 160 171 pds host: String, 161 172 ) -> request.Request(String) { 162 - request.new() 163 - |> request.prepend_header("accept", "application/json") 164 - |> request.set_host(host) 165 - |> request.set_method(http.Get) 166 - |> request.set_path(com_atproto_identity <> ".resolveHandle") 173 + request.Request( 174 + method: http.Get, 175 + headers: [#("accept", "application/json")], 176 + body: "", 177 + scheme: http.Https, 178 + host:, 179 + port: option.None, 180 + path: com_atproto_identity <> ".resolveHandle", 181 + query: option.None, 182 + ) 167 183 |> request.set_query([#("handle", handle.to_string(handle))]) 168 184 } 169 185 ··· 237 253 option.None -> values 238 254 } 239 255 240 - request.new() 241 - |> request.prepend_header("accept", "application/json") 242 - |> request.prepend_header("content-type", "application/json") 243 - |> request.set_body(json.to_string(json.object(values))) 244 - |> request.set_host(host) 245 - |> request.set_method(http.Post) 246 - |> request.set_path(com_atproto_server <> ".createSession") 256 + request.Request( 257 + method: http.Post, 258 + headers: [ 259 + #("accept", "application/json"), 260 + #("content-type", "application/json"), 261 + ], 262 + body: json.to_string(json.object(values)), 263 + scheme: http.Https, 264 + host:, 265 + port: option.None, 266 + path: com_atproto_server <> ".createSession", 267 + query: option.None, 268 + ) 247 269 } 248 270 249 271 /// Refresh an authentication session. ··· 277 299 /// 278 300 /// Endpoint Docs: [/xrpc/com.atproto.server.refreshSession](https://endpoints.bsky.app/#bluesky-app/tag/comatprotoserver/POST/xrpc/com.atproto.server.refreshSession) 279 301 pub fn refresh_session( 280 - refresh_token token: String, 302 + token: String, 281 303 pds host: String, 282 304 ) -> request.Request(String) { 283 - request.new() 305 + request.Request( 306 + method: http.Post, 307 + headers: [#("accept", "application/json")], 308 + body: "", 309 + scheme: http.Https, 310 + host:, 311 + port: option.None, 312 + path: com_atproto_server <> ".refreshSession", 313 + query: option.None, 314 + ) 284 315 |> authorized(token) 285 - |> request.prepend_header("accept", "application/json") 286 - |> request.set_host(host) 287 - |> request.set_method(http.Post) 288 - |> request.set_path(com_atproto_server <> ".refreshSession") 289 316 } 290 317 291 318 /// Get information about the current auth session. ··· 319 346 /// 320 347 /// Endpoint Docs: [/xrpc/com.atproto.server.getSession](https://endpoints.bsky.app/#bluesky-app/tag/comatprotoserver/POST/xrpc/com.atproto.server.getSession) 321 348 pub fn get_session_info(pds host: String) -> request.Request(String) { 322 - request.new() 323 - |> request.prepend_header("accept", "application/json") 324 - |> request.set_host(host) 325 - |> request.set_method(http.Get) 326 - |> request.set_path(com_atproto_server <> ".getSession") 349 + request.Request( 350 + method: http.Get, 351 + headers: [#("accept", "application/json")], 352 + body: "", 353 + scheme: http.Https, 354 + host:, 355 + port: option.None, 356 + path: com_atproto_server <> ".getSession", 357 + query: option.None, 358 + ) 327 359 } 328 360 329 361 /// Include a access token in the request's headers. ··· 337 369 /// 338 370 /// let request = 339 371 /// request.new() 340 - /// |> possum.authorized(access_token:"access-token") 372 + /// |> possum.authorized(access_token: "access-token") 373 + /// 374 + /// assert request.headers != [] 341 375 /// ``` 342 376 /// 343 377 pub fn authorized( ··· 380 414 did: did.Did, 381 415 pds host: String, 382 416 ) -> request.Request(String) { 383 - request.new() 384 - |> request.prepend_header("accept", "application/json") 385 - |> request.set_host(host) 386 - |> request.set_method(http.Get) 387 - |> request.set_path(com_atproto_repo <> ".describeRepo") 417 + request.Request( 418 + method: http.Get, 419 + headers: [#("accept", "application/json")], 420 + body: "", 421 + scheme: http.Https, 422 + host:, 423 + port: option.None, 424 + path: com_atproto_repo <> ".describeRepo", 425 + query: option.None, 426 + ) 388 427 |> request.set_query([#("repo", did.to_string(did))]) 389 428 } 390 429 ··· 470 509 option.None -> body 471 510 } 472 511 473 - request.new() 474 - |> request.prepend_header("accept", "application/json") 475 - |> request.prepend_header("content-type", "application/json") 476 - |> request.set_body(json.to_string(json.object(body))) 477 - |> request.set_host(host) 478 - |> request.set_method(http.Post) 479 - |> request.set_path(com_atproto_repo <> ".createRecord") 512 + request.Request( 513 + method: http.Post, 514 + headers: [ 515 + #("accept", "application/json"), 516 + #("content-type", "application/json"), 517 + ], 518 + body: json.to_string(json.object(body)), 519 + scheme: http.Https, 520 + host:, 521 + port: option.None, 522 + path: com_atproto_repo <> ".createRecord", 523 + query: option.None, 524 + ) 480 525 } 481 526 482 527 /// Get a single record from a repository. Does not require auth. ··· 534 579 option.None -> query 535 580 } 536 581 537 - request.new() 538 - |> request.prepend_header("accept", "application/json") 539 - |> request.set_host(host) 540 - |> request.set_method(http.Get) 541 - |> request.set_path(com_atproto_repo <> ".getRecord") 582 + request.Request( 583 + method: http.Get, 584 + headers: [#("accept", "application/json")], 585 + body: "", 586 + scheme: http.Https, 587 + host:, 588 + port: option.None, 589 + path: com_atproto_repo <> ".getRecord", 590 + query: option.None, 591 + ) 542 592 |> request.set_query(query) 543 593 } 544 594 ··· 610 660 option.None -> query 611 661 } 612 662 613 - request.new() 614 - |> request.prepend_header("accept", "application/json") 615 - |> request.set_host(host) 616 - |> request.set_method(http.Get) 617 - |> request.set_path(com_atproto_repo <> ".listRecords") 663 + request.Request( 664 + method: http.Get, 665 + headers: [#("accept", "application/json")], 666 + body: "", 667 + scheme: http.Https, 668 + host:, 669 + port: option.None, 670 + path: com_atproto_repo <> ".listRecords", 671 + query: option.None, 672 + ) 618 673 |> request.set_query(query) 619 674 } 620 675 ··· 686 741 option.None -> body 687 742 } 688 743 689 - request.new() 690 - |> request.prepend_header("accept", "application/json") 691 - |> request.prepend_header("content-type", "application/json") 692 - |> request.set_body(json.to_string(json.object(body))) 693 - |> request.set_host(host) 694 - |> request.set_method(http.Post) 695 - |> request.set_path(com_atproto_repo <> ".deleteRecord") 744 + request.Request( 745 + method: http.Post, 746 + headers: [ 747 + #("accept", "application/json"), 748 + #("content-type", "application/json"), 749 + ], 750 + body: json.to_string(json.object(body)), 751 + scheme: http.Https, 752 + host:, 753 + port: option.None, 754 + path: com_atproto_repo <> ".deleteRecord", 755 + query: option.None, 756 + ) 696 757 } 697 758 698 759 /// Write a repository record, creating or updating it as needed. ··· 750 811 /// 751 812 /// Endpoint Docs: [/xrpc/com.atproto.repo.putRecord](https://endpoints.bsky.app/#bluesky-app/tag/comatprotorepo/POST/xrpc/com.atproto.repo.putRecord) 752 813 pub fn put_record( 753 - request: request.Request(String), 754 814 did: did.Did, 755 815 pds host: String, 756 816 collection nsid: nsid.Nsid, ··· 782 842 option.None -> body 783 843 } 784 844 785 - request 786 - |> request.prepend_header("accept", "application/json") 787 - |> request.prepend_header("content-type", "application/json") 788 - |> request.set_body(json.to_string(json.object(body))) 789 - |> request.set_host(host) 790 - |> request.set_method(http.Post) 791 - |> request.set_path(com_atproto_repo <> ".putRecord") 845 + request.Request( 846 + method: http.Post, 847 + headers: [ 848 + #("accept", "application/json"), 849 + #("content-type", "application/json"), 850 + ], 851 + body: json.to_string(json.object(body)), 852 + scheme: http.Https, 853 + host:, 854 + port: option.None, 855 + path: com_atproto_repo <> ".putRecord", 856 + query: option.None, 857 + ) 792 858 } 793 859 794 860 /// Get a blob associated with a given account. ··· 803 869 ) -> request.Request(BitArray) { 804 870 let query = [#("did", did.to_string(did)), #("cid", cid)] 805 871 806 - request.new() 807 - |> request.prepend_header("accept", "*/*") 808 - |> request.set_body(<<>>) 809 - |> request.set_host(host) 810 - |> request.set_method(http.Get) 811 - |> request.set_path(com_atproto_sync <> ".getBlob") 872 + request.Request( 873 + method: http.Get, 874 + headers: [#("accept", "*/*")], 875 + body: <<>>, 876 + scheme: http.Https, 877 + host:, 878 + port: option.None, 879 + path: com_atproto_sync <> ".getBlob", 880 + query: option.None, 881 + ) 812 882 |> request.set_query(query) 813 883 }