xmtp_api_d14n/endpoints/v3/identity/
get_inbox_ids.rs

1use derive_builder::Builder;
2use prost::Message;
3use prost::bytes::Bytes;
4use std::borrow::Cow;
5use xmtp_proto::api::{BodyError, Endpoint};
6use xmtp_proto::identity_v1::GetInboxIdsResponse;
7use xmtp_proto::xmtp::identity::api::v1::{GetInboxIdsRequest, get_inbox_ids_request};
8use xmtp_proto::xmtp::identity::associations::IdentifierKind;
9
10#[derive(Debug, Builder, Default)]
11#[builder(setter(strip_option), build_fn(error = "BodyError"))]
12pub struct GetInboxIds {
13    #[builder(setter(into), default)]
14    addresses: Vec<String>,
15    #[builder(setter(into), default)]
16    passkeys: Vec<String>,
17}
18
19impl GetInboxIds {
20    pub fn builder() -> GetInboxIdsBuilder {
21        Default::default()
22    }
23}
24
25impl Endpoint for GetInboxIds {
26    type Output = GetInboxIdsResponse;
27    fn grpc_endpoint(&self) -> Cow<'static, str> {
28        xmtp_proto::path_and_query::<GetInboxIdsRequest>()
29    }
30
31    fn body(&self) -> Result<Bytes, BodyError> {
32        let addresses = self
33            .addresses
34            .iter()
35            .cloned()
36            .map(|a| (a, IdentifierKind::Ethereum));
37        let passkeys = self
38            .passkeys
39            .iter()
40            .cloned()
41            .map(|p| (p, IdentifierKind::Passkey));
42
43        Ok(GetInboxIdsRequest {
44            requests: addresses
45                .chain(passkeys)
46                .map(|(i, kind)| get_inbox_ids_request::Request {
47                    identifier: i,
48                    identifier_kind: kind as i32,
49                })
50                .collect(),
51        }
52        .encode_to_vec()
53        .into())
54    }
55}
56
57#[cfg(test)]
58mod test {
59    use super::*;
60    use xmtp_api_grpc::test::NodeGoClient;
61    use xmtp_proto::{identity_v1::GetInboxIdsResponse, prelude::*};
62
63    #[xmtp_common::test]
64    fn test_file_descriptor() {
65        use xmtp_proto::xmtp::identity::api::v1::GetInboxIdsRequest;
66
67        let pnq = xmtp_proto::path_and_query::<GetInboxIdsRequest>();
68        println!("{}", pnq);
69    }
70
71    #[xmtp_common::test]
72    fn test_grpc_endpoint_returns_correct_path() {
73        let endpoint = GetInboxIds::default();
74        assert_eq!(
75            endpoint.grpc_endpoint(),
76            "/xmtp.identity.api.v1.IdentityApi/GetInboxIds"
77        );
78    }
79
80    #[xmtp_common::test]
81    async fn test_get_inbox_ids() {
82        let client = NodeGoClient::create();
83        let client = client.build().unwrap();
84        let mut endpoint = GetInboxIds::builder()
85            .addresses(vec![
86                "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045".to_string(),
87            ])
88            .build()
89            .unwrap();
90
91        let result: GetInboxIdsResponse = endpoint.query(&client).await.unwrap();
92        assert_eq!(result.responses.len(), 1);
93    }
94}