xmtp_api_d14n/queries/
combined.rs1use 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}