nym_node_requests/api/
client.rs

1// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::api::v1::gateway::models::WebSockets;
5use crate::api::v1::node::models::{
6    AuxiliaryDetails, NodeDescription, NodeRoles, SignedHostInformation,
7};
8use crate::routes;
9use async_trait::async_trait;
10use nym_bin_common::build_information::BinaryBuildInformationOwned;
11use nym_http_api_client::{ApiClient, HttpClientError};
12
13use super::v1::gateway::models::Wireguard;
14use super::v1::metrics::models::SessionStats;
15use crate::api::v1::authenticator::models::Authenticator;
16use crate::api::v1::health::models::NodeHealth;
17use crate::api::v1::ip_packet_router::models::IpPacketRouter;
18use crate::api::v1::lewes_protocol::models::LewesProtocol;
19use crate::api::v1::network_requester::exit_policy::models::UsedExitPolicy;
20use crate::api::v1::network_requester::models::NetworkRequester;
21use crate::api::v1::node_load::models::NodeLoad;
22pub use nym_http_api_client::Client;
23
24pub type NymNodeApiClientError = HttpClientError;
25
26#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
27#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
28pub trait NymNodeApiClientExt: ApiClient {
29    async fn get_health(&self) -> Result<NodeHealth, NymNodeApiClientError> {
30        self.get_json_from(routes::api::v1::health_absolute()).await
31    }
32
33    async fn get_node_load(&self) -> Result<NodeLoad, NymNodeApiClientError> {
34        self.get_json_from(routes::api::v1::load_absolute()).await
35    }
36
37    async fn get_host_information(&self) -> Result<SignedHostInformation, NymNodeApiClientError> {
38        self.get_json_from(routes::api::v1::host_info_absolute())
39            .await
40    }
41
42    async fn get_description(&self) -> Result<NodeDescription, NymNodeApiClientError> {
43        self.get_json_from(routes::api::v1::description_absolute())
44            .await
45    }
46
47    async fn get_build_information(
48        &self,
49    ) -> Result<BinaryBuildInformationOwned, NymNodeApiClientError> {
50        self.get_json_from(routes::api::v1::build_info_absolute())
51            .await
52    }
53
54    async fn get_roles(&self) -> Result<NodeRoles, NymNodeApiClientError> {
55        self.get_json_from(routes::api::v1::roles_absolute()).await
56    }
57
58    async fn get_auxiliary_details(&self) -> Result<AuxiliaryDetails, NymNodeApiClientError> {
59        self.get_json_from(routes::api::v1::auxiliary_absolute())
60            .await
61    }
62
63    // TODO: implement calls for other endpoints; for now I only care about the wss
64    async fn get_mixnet_websockets(&self) -> Result<WebSockets, NymNodeApiClientError> {
65        self.get_json_from(
66            routes::api::v1::gateway::client_interfaces::mixnet_websockets_absolute(),
67        )
68        .await
69    }
70
71    async fn get_network_requester(&self) -> Result<NetworkRequester, NymNodeApiClientError> {
72        self.get_json_from(routes::api::v1::network_requester_absolute())
73            .await
74    }
75
76    async fn get_exit_policy(&self) -> Result<UsedExitPolicy, NymNodeApiClientError> {
77        self.get_json_from(routes::api::v1::network_requester::exit_policy_absolute())
78            .await
79    }
80
81    async fn get_ip_packet_router(&self) -> Result<IpPacketRouter, NymNodeApiClientError> {
82        self.get_json_from(routes::api::v1::ip_packet_router_absolute())
83            .await
84    }
85
86    async fn get_authenticator(&self) -> Result<Authenticator, NymNodeApiClientError> {
87        self.get_json_from(routes::api::v1::authenticator_absolute())
88            .await
89    }
90
91    async fn get_wireguard(&self) -> Result<Wireguard, NymNodeApiClientError> {
92        self.get_json_from(routes::api::v1::gateway::client_interfaces::wireguard_absolute())
93            .await
94    }
95
96    async fn get_sessions_metrics(&self) -> Result<SessionStats, NymNodeApiClientError> {
97        self.get_json_from(routes::api::v1::metrics::sessions_absolute())
98            .await
99    }
100
101    async fn get_lewes_protocol(&self) -> Result<LewesProtocol, NymNodeApiClientError> {
102        self.get_json_from(routes::api::v1::lp_absolute()).await
103    }
104}
105
106#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
107#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
108impl NymNodeApiClientExt for Client {}