diff --git a/nym-api/nym-api-requests/src/models.rs b/nym-api/nym-api-requests/src/models.rs index 3ba87ce960..a8cbd19b84 100644 --- a/nym-api/nym-api-requests/src/models.rs +++ b/nym-api/nym-api-requests/src/models.rs @@ -10,7 +10,7 @@ use nym_mixnet_contract_common::rewarding::RewardEstimate; use nym_mixnet_contract_common::{ GatewayBond, IdentityKey, Interval, MixId, MixNode, Percent, RewardedSetNodeStatus, }; -use nym_node_requests::api::v1::node::models::BinaryBuildInformationOwned; +use nym_node_requests::api::v1::node::models::{AuxiliaryDetails, BinaryBuildInformationOwned}; use schemars::gen::SchemaGenerator; use schemars::schema::{InstanceType, Schema, SchemaObject}; use schemars::JsonSchema; @@ -483,6 +483,7 @@ impl JsonSchema for OffsetDateTimeJsonSchemaWrapper { } } +// this struct is getting quite bloated... #[derive(Clone, Debug, Serialize, Deserialize, schemars::JsonSchema)] pub struct NymNodeDescription { #[serde(default)] @@ -490,6 +491,9 @@ pub struct NymNodeDescription { pub host_information: HostInformation, + #[serde(default)] + pub auxiliary_details: AuxiliaryDetails, + // TODO: do we really care about ALL build info or just the version? pub build_information: BinaryBuildInformationOwned, diff --git a/nym-api/src/node_describe_cache/mod.rs b/nym-api/src/node_describe_cache/mod.rs index 77774dcf55..7518a07402 100644 --- a/nym-api/src/node_describe_cache/mod.rs +++ b/nym-api/src/node_describe_cache/mod.rs @@ -146,6 +146,11 @@ async fn get_gateway_description( source: err, })?; + // this can be an old node that hasn't yet exposed this + let auxiliary_details = client.get_auxiliary_details().await.inspect_err(|err| { + debug!("could not obtain auxiliary details of gateway {}: {err} is it running an old version?", gateway.identity_key); + }).unwrap_or_default(); + let websockets = client .get_mixnet_websockets() @@ -188,6 +193,7 @@ async fn get_gateway_description( network_requester, ip_packet_router, mixnet_websockets: websockets.into(), + auxiliary_details, }; Ok((gateway.identity_key, description)) diff --git a/nym-node/nym-node-requests/src/api/client.rs b/nym-node/nym-node-requests/src/api/client.rs index d6239a3bcd..9bc9455d20 100644 --- a/nym-node/nym-node-requests/src/api/client.rs +++ b/nym-node/nym-node-requests/src/api/client.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use crate::api::v1::gateway::models::WebSockets; -use crate::api::v1::node::models::SignedHostInformation; +use crate::api::v1::node::models::{AuxiliaryDetails, SignedHostInformation}; use crate::api::ErrorResponse; use crate::routes; use async_trait::async_trait; @@ -37,6 +37,11 @@ pub trait NymNodeApiClientExt: ApiClient { .await } + async fn get_auxiliary_details(&self) -> Result { + self.get_json_from(routes::api::v1::auxiliary_absolute()) + .await + } + // TODO: implement calls for other endpoints; for now I only care about the wss async fn get_mixnet_websockets(&self) -> Result { self.get_json_from(