Skip to main content

nym_node_requests/api/
client.rs

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