xmtp_api_d14n/queries/v3/
identity.rs

1use crate::protocol::CursorStore;
2use crate::{V3Client, v3::*};
3use xmtp_common::RetryableError;
4use xmtp_proto::api::{ApiClientError, Client, Query};
5use xmtp_proto::api_client::XmtpIdentityClient;
6use xmtp_proto::identity_v1;
7use xmtp_proto::xmtp::identity::associations::IdentifierKind;
8
9#[xmtp_common::async_trait]
10impl<C, Store, E> XmtpIdentityClient for V3Client<C, Store>
11where
12    C: Client<Error = E>,
13    E: RetryableError + 'static,
14    Store: CursorStore,
15{
16    type Error = ApiClientError<E>;
17
18    async fn publish_identity_update(
19        &self,
20        request: identity_v1::PublishIdentityUpdateRequest,
21    ) -> Result<identity_v1::PublishIdentityUpdateResponse, Self::Error> {
22        PublishIdentityUpdate::builder()
23            .identity_update(request.identity_update)
24            .build()?
25            .query(&self.client)
26            .await
27    }
28
29    async fn get_identity_updates_v2(
30        &self,
31        request: identity_v1::GetIdentityUpdatesRequest,
32    ) -> Result<identity_v1::GetIdentityUpdatesResponse, Self::Error> {
33        GetIdentityUpdatesV2::builder()
34            .requests(request.requests)
35            .build()?
36            .query(&self.client)
37            .await
38    }
39
40    async fn get_inbox_ids(
41        &self,
42        request: identity_v1::GetInboxIdsRequest,
43    ) -> Result<identity_v1::GetInboxIdsResponse, Self::Error> {
44        GetInboxIds::builder()
45            .addresses(
46                request
47                    .requests
48                    .iter()
49                    .filter(|r| r.identifier_kind == IdentifierKind::Ethereum as i32)
50                    .map(|r| r.identifier.clone())
51                    .collect::<Vec<_>>(),
52            )
53            .passkeys(
54                request
55                    .requests
56                    .iter()
57                    .filter(|r| r.identifier_kind == IdentifierKind::Passkey as i32)
58                    .map(|r| r.identifier.clone())
59                    .collect::<Vec<_>>(),
60            )
61            .build()?
62            .query(&self.client)
63            .await
64    }
65
66    async fn verify_smart_contract_wallet_signatures(
67        &self,
68        request: identity_v1::VerifySmartContractWalletSignaturesRequest,
69    ) -> Result<identity_v1::VerifySmartContractWalletSignaturesResponse, Self::Error> {
70        VerifySmartContractWalletSignatures::builder()
71            .signatures(request.signatures)
72            .build()?
73            .query(&self.client)
74            .await
75    }
76}