xmtp_api_d14n/queries/
combined.rs

1use xmtp_proto::api_client::XmtpMlsClient;
2use xmtp_proto::identity_v1;
3use xmtp_proto::mls_v1;
4use xmtp_proto::prelude::XmtpIdentityClient;
5use xmtp_proto::types::InstallationId;
6use xmtp_proto::types::WelcomeMessage;
7use xmtp_proto::types::{GroupId, GroupMessage};
8
9#[derive(Clone)]
10pub struct CombinedD14nClient<C, D> {
11    pub(crate) v3_client: C,
12    pub(crate) xmtpd_client: D,
13}
14
15#[xmtp_common::async_trait]
16impl<C, D> XmtpMlsClient for CombinedD14nClient<C, D>
17where
18    C: XmtpMlsClient,
19    D: XmtpMlsClient<Error = C::Error>,
20{
21    type Error = <C as XmtpMlsClient>::Error;
22
23    async fn upload_key_package(
24        &self,
25        request: mls_v1::UploadKeyPackageRequest,
26    ) -> Result<(), Self::Error> {
27        self.v3_client.upload_key_package(request).await
28    }
29
30    async fn fetch_key_packages(
31        &self,
32        request: mls_v1::FetchKeyPackagesRequest,
33    ) -> Result<mls_v1::FetchKeyPackagesResponse, Self::Error> {
34        self.xmtpd_client.fetch_key_packages(request).await
35    }
36
37    async fn send_group_messages(
38        &self,
39        request: mls_v1::SendGroupMessagesRequest,
40    ) -> Result<(), Self::Error> {
41        self.v3_client.send_group_messages(request).await
42    }
43
44    async fn send_welcome_messages(
45        &self,
46        request: mls_v1::SendWelcomeMessagesRequest,
47    ) -> Result<(), Self::Error> {
48        self.v3_client.send_welcome_messages(request).await
49    }
50    async fn query_group_messages(
51        &self,
52        group_id: GroupId,
53    ) -> Result<Vec<GroupMessage>, Self::Error> {
54        self.xmtpd_client.query_group_messages(group_id).await
55    }
56
57    async fn query_latest_group_message(
58        &self,
59        group_id: GroupId,
60    ) -> Result<Option<GroupMessage>, Self::Error> {
61        self.xmtpd_client.query_latest_group_message(group_id).await
62    }
63
64    async fn query_welcome_messages(
65        &self,
66        installation_key: InstallationId,
67    ) -> Result<Vec<WelcomeMessage>, Self::Error> {
68        self.xmtpd_client
69            .query_welcome_messages(installation_key)
70            .await
71    }
72
73    async fn publish_commit_log(
74        &self,
75        request: mls_v1::BatchPublishCommitLogRequest,
76    ) -> Result<(), Self::Error> {
77        self.xmtpd_client.publish_commit_log(request).await
78    }
79
80    async fn query_commit_log(
81        &self,
82        request: mls_v1::BatchQueryCommitLogRequest,
83    ) -> Result<mls_v1::BatchQueryCommitLogResponse, Self::Error> {
84        self.v3_client.query_commit_log(request).await
85    }
86
87    async fn get_newest_group_message(
88        &self,
89        request: mls_v1::GetNewestGroupMessageRequest,
90    ) -> Result<Vec<Option<xmtp_proto::types::GroupMessageMetadata>>, Self::Error> {
91        self.xmtpd_client.get_newest_group_message(request).await
92    }
93}
94
95#[xmtp_common::async_trait]
96impl<C, D> XmtpIdentityClient for CombinedD14nClient<C, D>
97where
98    C: XmtpIdentityClient,
99    D: XmtpIdentityClient<Error = C::Error>,
100{
101    type Error = <C as XmtpIdentityClient>::Error;
102
103    async fn publish_identity_update(
104        &self,
105        request: identity_v1::PublishIdentityUpdateRequest,
106    ) -> Result<identity_v1::PublishIdentityUpdateResponse, Self::Error> {
107        self.v3_client.publish_identity_update(request).await
108    }
109
110    async fn get_identity_updates_v2(
111        &self,
112        request: identity_v1::GetIdentityUpdatesRequest,
113    ) -> Result<identity_v1::GetIdentityUpdatesResponse, Self::Error> {
114        self.xmtpd_client.get_identity_updates_v2(request).await
115    }
116
117    async fn get_inbox_ids(
118        &self,
119        request: identity_v1::GetInboxIdsRequest,
120    ) -> Result<identity_v1::GetInboxIdsResponse, Self::Error> {
121        self.xmtpd_client.get_inbox_ids(request).await
122    }
123
124    async fn verify_smart_contract_wallet_signatures(
125        &self,
126        request: identity_v1::VerifySmartContractWalletSignaturesRequest,
127    ) -> Result<identity_v1::VerifySmartContractWalletSignaturesResponse, Self::Error> {
128        self.xmtpd_client
129            .verify_smart_contract_wallet_signatures(request)
130            .await
131    }
132}