diff --git a/src/possum/tangled.gleam b/src/possum/tangled.gleam index c0ed57a..c85b340 100644 --- a/src/possum/tangled.gleam +++ b/src/possum/tangled.gleam @@ -219,7 +219,7 @@ pub fn list_ref_updates( /// let assert Ok(did) = did.parse("did:plc:dvyyslcz7bicxdumlccviqyv") /// /// request.new() -/// |> tangled.list_follows(did, option.None, option.None) +/// |> tangled.list_followers(did, option.None, option.None) /// ``` pub fn list_followers( request: request.Request(_), @@ -247,3 +247,45 @@ pub fn list_followers( |> request.set_path("/xrpc/sh.tangled" <> endpoint) |> request.set_query(query) } + +/// List all vouches that an user received +/// +/// ## Examples +/// +/// ```gleam +/// import gleam/http/request +/// import possum/did +/// import possum/tangled +/// +/// // DID of the repository +/// let assert Ok(did) = did.parse("did:plc:dvyyslcz7bicxdumlccviqyv") +/// +/// request.new() +/// |> tangled.list_vouches(did, option.None, option.None) +/// ``` +pub fn list_vouches( + request: request.Request(_), + did: did.Did, + cursor: option.Option(String), + limit: option.Option(Int), +) -> request.Request(_) { + let endpoint = ".graph.listVouches" + + let query = [#("subject", did.to_string(did))] + + let query = case cursor { + option.Some(value) -> [#("cursor", value), ..query] + option.None -> query + } + + let query = case limit { + option.Some(value) -> [#("limit", int.to_string(value)), ..query] + option.None -> query + } + + request + |> request.set_host(api) + |> request.set_header("accept", "application/json") + |> request.set_path("/xrpc/sh.tangled" <> endpoint) + |> request.set_query(query) +} diff --git a/test/possum_tangled_test.gleam b/test/possum_tangled_test.gleam index 5496a1a..1b17288 100644 --- a/test/possum_tangled_test.gleam +++ b/test/possum_tangled_test.gleam @@ -83,6 +83,7 @@ pub fn list_stars_test() -> Nil { Nil } +/// https://api.tangled.org/xrpc/sh.tangled.graph.listFollows?subject=did:plc:dvyyslcz7bicxdumlccviqyv pub fn list_followers_test() -> Nil { let assert Ok(did) = did.parse("did:plc:dvyyslcz7bicxdumlccviqyv") @@ -97,3 +98,19 @@ pub fn list_followers_test() -> Nil { Nil } + +/// https://api.tangled.org/xrpc/sh.tangled.graph.listVouches?subject=did:plc:dvyyslcz7bicxdumlccviqyv +pub fn list_vouches_test() -> Nil { + let assert Ok(did) = did.parse("did:plc:dvyyslcz7bicxdumlccviqyv") + + let assert Ok(response) = + request.new() + |> tangled.list_vouches(did, option.None, option.None) + |> httpc.send + + let assert Ok(_) = + response.body + |> json.parse(lexicon_decoder("sh.tangled.graph.vouch")) + + Nil +}