xmtp_api_d14n/endpoints/v3/mls/
upload_key_package.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::xmtp::mls::api::v1::{KeyPackageUpload, UploadKeyPackageRequest};
7
8#[derive(Debug, Builder, Default)]
9#[builder(build_fn(error = "BodyError"))]
10pub struct UploadKeyPackage {
11    key_package: Option<KeyPackageUpload>,
12    #[builder(setter(into))]
13    is_inbox_id_credential: bool,
14}
15
16impl UploadKeyPackage {
17    pub fn builder() -> UploadKeyPackageBuilder {
18        Default::default()
19    }
20}
21
22impl Endpoint for UploadKeyPackage {
23    type Output = ();
24    fn grpc_endpoint(&self) -> Cow<'static, str> {
25        xmtp_proto::path_and_query::<UploadKeyPackageRequest>()
26    }
27
28    fn body(&self) -> Result<Bytes, BodyError> {
29        Ok(UploadKeyPackageRequest {
30            key_package: self.key_package.clone(),
31            is_inbox_id_credential: self.is_inbox_id_credential,
32        }
33        .encode_to_vec()
34        .into())
35    }
36}
37
38#[cfg(test)]
39mod test {
40    use crate::v3::UploadKeyPackage;
41    use xmtp_api_grpc::test::NodeGoClient;
42    use xmtp_proto::xmtp::mls::api::v1::*;
43    use xmtp_proto::{api, prelude::*};
44
45    #[xmtp_common::test]
46    fn test_file_descriptor() {
47        let pnq = xmtp_proto::path_and_query::<UploadKeyPackageRequest>();
48        println!("{}", pnq);
49    }
50
51    #[xmtp_common::test]
52    fn test_grpc_endpoint_returns_correct_path() {
53        let endpoint = UploadKeyPackage::default();
54        assert_eq!(
55            endpoint.grpc_endpoint(),
56            "/xmtp.mls.api.v1.MlsApi/UploadKeyPackage"
57        );
58    }
59
60    #[xmtp_common::test]
61    async fn test_upload_key_package() {
62        let client = NodeGoClient::create();
63        let client = client.build().unwrap();
64        let endpoint = UploadKeyPackage::builder()
65            .key_package(Some(KeyPackageUpload {
66                key_package_tls_serialized: vec![1, 2, 3],
67            }))
68            .is_inbox_id_credential(false)
69            .build()
70            .unwrap();
71
72        let result = api::ignore(endpoint).query(&client).await;
73        assert!(result.is_err());
74    }
75}