diff --git a/Cargo.toml b/Cargo.toml index c67523ce8c..d9fb1194be 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -94,6 +94,7 @@ members = [ "nym-browser-extension/storage", "nym-api/nym-api-requests", "nym-node", + "nym-node/nym-node-requests", "nym-outfox", "tools/internal/ssl-inject", "tools/internal/sdk-version-bump", diff --git a/gateway/src/http/mod.rs b/gateway/src/http/mod.rs index a61ab7105c..b379245955 100644 --- a/gateway/src/http/mod.rs +++ b/gateway/src/http/mod.rs @@ -6,19 +6,20 @@ use crate::error::GatewayError; use crate::node::helpers::{load_identity_keys, load_public_key}; use nym_bin_common::bin_info_owned; use nym_crypto::asymmetric::{encryption, identity}; -use nym_node::http; -use nym_node::http::api::SignedHostInformation; +use nym_node::error::NymNodeError; +use nym_node::http::api::api_requests; +use nym_node::http::api::api_requests::SignedHostInformation; use nym_sphinx::addressing::clients::Recipient; use nym_task::TaskClient; use zeroize::Zeroize; fn load_gateway_details( config: &Config, -) -> Result { - Ok(http::api::v1::gateway::types::Gateway { - client_interfaces: http::api::v1::gateway::types::ClientInterfaces { +) -> Result { + Ok(api_requests::v1::gateway::models::Gateway { + client_interfaces: api_requests::v1::gateway::models::ClientInterfaces { wireguard: None, - mixnet_websockets: Some(http::api::v1::gateway::types::WebSockets { + mixnet_websockets: Some(api_requests::v1::gateway::models::WebSockets { ws_port: config.gateway.clients_port, wss_port: None, }), @@ -28,7 +29,7 @@ fn load_gateway_details( fn load_host_details( config: &Config, -) -> Result { +) -> Result { let mut identity_keypair = load_identity_keys(config)?; let sphinx_public_key: encryption::PublicKey = load_public_key( @@ -36,17 +37,18 @@ fn load_host_details( "gateway sphinx", )?; - let host_info = http::api::v1::node::types::HostInformation { + let host_info = api_requests::v1::node::models::HostInformation { // TODO: this should be extracted differently, i.e. it's the issue of the public/private address ip_address: vec![config.gateway.listening_address.to_string()], hostname: None, - keys: http::api::v1::node::types::HostKeys { + keys: api_requests::v1::node::models::HostKeys { ed25519: identity_keypair.public_key().to_base58_string(), x25519: sphinx_public_key.to_base58_string(), }, }; - let signed_info = SignedHostInformation::new(host_info, identity_keypair.private_key())?; + let signed_info = SignedHostInformation::new(host_info, identity_keypair.private_key()) + .map_err(NymNodeError::from)?; identity_keypair.zeroize(); Ok(signed_info) } @@ -54,7 +56,7 @@ fn load_host_details( fn load_network_requester_details( config: &Config, network_requester_config: &nym_network_requester::Config, -) -> Result { +) -> Result { let identity_public_key: identity::PublicKey = load_public_key( &network_requester_config .storage_paths @@ -78,16 +80,18 @@ fn load_network_requester_details( "gateway identity", )?; - Ok(http::api::v1::network_requester::types::NetworkRequester { - encoded_identity_key: identity_public_key.to_base58_string(), - encoded_x25519_key: dh_public_key.to_base58_string(), - address: Recipient::new( - identity_public_key, - dh_public_key, - gateway_identity_public_key, - ) - .to_string(), - }) + Ok( + api_requests::v1::network_requester::models::NetworkRequester { + encoded_identity_key: identity_public_key.to_base58_string(), + encoded_x25519_key: dh_public_key.to_base58_string(), + address: Recipient::new( + identity_public_key, + dh_public_key, + gateway_identity_public_key, + ) + .to_string(), + }, + ) } pub(crate) fn start_http_api( diff --git a/nym-api/nym-api-requests/Cargo.toml b/nym-api/nym-api-requests/Cargo.toml index 2d39074adb..d98fe9015d 100644 --- a/nym-api/nym-api-requests/Cargo.toml +++ b/nym-api/nym-api-requests/Cargo.toml @@ -11,7 +11,7 @@ cosmrs = { workspace = true } cosmwasm-std = { workspace = true } getset = "0.1.1" schemars = { version = "0.8", features = ["preserve_order"] } -serde = { version = "1.0", features = ["derive"] } +serde = { workspace = true, features = ["derive"] } ts-rs = { workspace = true, optional = true } nym-coconut-interface = { path = "../../common/coconut-interface" } diff --git a/nym-node/Cargo.toml b/nym-node/Cargo.toml index 13cbfe4c3d..c33045110c 100644 --- a/nym-node/Cargo.toml +++ b/nym-node/Cargo.toml @@ -42,6 +42,5 @@ utoipa-swagger-ui = { workspace = true, features = ["axum"] } #utoipa-rapidoc = { version = "0.1.0", features = ["axum"] } -nym-bin-common = { path = "../common/bin-common", features = ["openapi"] } -nym-crypto = { path = "../common/crypto", features = ["asymmetric"] } +nym-node-requests = { path = "nym-node-requests", default-features = false, features = ["openapi"]} nym-task = { path = "../common/task" } diff --git a/nym-node/nym-node-requests/Cargo.toml b/nym-node/nym-node-requests/Cargo.toml new file mode 100644 index 0000000000..3e00f9486c --- /dev/null +++ b/nym-node/nym-node-requests/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "nym-node-requests" +version = "0.1.0" +authors.workspace = true +repository.workspace = true +homepage.workspace = true +documentation.workspace = true +edition.workspace = true +license.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +utoipa = { workspace = true, optional = true } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true, optional = true } +thiserror = { workspace = true } + +nym-bin-common = { path = "../../common/bin-common", optional = true, features = ["openapi"] } +nym-crypto = { path = "../../common/crypto", features = ["asymmetric"] } + +[features] +default = ["client"] +client = [] +openapi = ["utoipa", "nym-bin-common", "serde_json"] diff --git a/nym-node/nym-node-requests/src/api/mod.rs b/nym-node/nym-node-requests/src/api/mod.rs new file mode 100644 index 0000000000..90d3c85a13 --- /dev/null +++ b/nym-node/nym-node-requests/src/api/mod.rs @@ -0,0 +1,52 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +use crate::api::v1::node::models::HostInformation; +use crate::error::Error; +use nym_crypto::asymmetric::identity; +use serde::Serialize; +use std::ops::Deref; + +pub mod v1; + +#[derive(Debug, Clone, Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "openapi", aliases(SignedHostInformation = SignedData))] +pub struct SignedData { + // #[serde(flatten)] + pub data: T, + pub signature: String, +} + +impl SignedData { + pub fn new(data: T, key: &identity::PrivateKey) -> Result + where + T: Serialize, + { + let plaintext = serde_json::to_string(&data)?; + let signature = key.sign(plaintext).to_base58_string(); + Ok(SignedData { data, signature }) + } + + pub fn verify(&self, key: &identity::PublicKey) -> bool + where + T: Serialize, + { + let Ok(plaintext) = serde_json::to_string(&self.data) else { + return false; + }; + let Ok(signature) = identity::Signature::from_base58_string(&self.signature) else { + return false; + }; + + key.verify(plaintext, &signature).is_ok() + } +} + +impl Deref for SignedData { + type Target = T; + + fn deref(&self) -> &Self::Target { + &self.data + } +} diff --git a/nym-node/nym-node-requests/src/api/v1/gateway/mod.rs b/nym-node/nym-node-requests/src/api/v1/gateway/mod.rs new file mode 100644 index 0000000000..c57081432b --- /dev/null +++ b/nym-node/nym-node-requests/src/api/v1/gateway/mod.rs @@ -0,0 +1,4 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +pub mod models; diff --git a/nym-node/nym-node-requests/src/api/v1/gateway/models.rs b/nym-node/nym-node-requests/src/api/v1/gateway/models.rs new file mode 100644 index 0000000000..bb6ebfa082 --- /dev/null +++ b/nym-node/nym-node-requests/src/api/v1/gateway/models.rs @@ -0,0 +1,38 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + + +use serde::Serialize; + +#[derive(Serialize, Debug, Clone)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +pub struct Gateway { + pub client_interfaces: ClientInterfaces, +} + +#[derive(Serialize, Debug, Clone)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +pub struct Wireguard { + #[cfg_attr(feature = "openapi", schema(example = 51820, default = 51820))] + pub port: u16, + + pub public_key: String, +} + +#[derive(Serialize, Debug, Clone)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +pub struct ClientInterfaces { + pub wireguard: Option, + + pub mixnet_websockets: Option, + // pub mixnet_tcp: +} + +#[derive(Serialize, Debug, Clone, Copy)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] +pub struct WebSockets { + #[cfg_attr(feature = "openapi", schema(example = 9000, default = 9000))] + pub ws_port: u16, + + pub wss_port: Option, +} \ No newline at end of file diff --git a/nym-node/nym-node-requests/src/api/v1/mixnode/mod.rs b/nym-node/nym-node-requests/src/api/v1/mixnode/mod.rs new file mode 100644 index 0000000000..afafedca78 --- /dev/null +++ b/nym-node/nym-node-requests/src/api/v1/mixnode/mod.rs @@ -0,0 +1,4 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +pub mod models; \ No newline at end of file diff --git a/nym-node/src/http/router/api/v1/mixnode/types.rs b/nym-node/nym-node-requests/src/api/v1/mixnode/models.rs similarity index 80% rename from nym-node/src/http/router/api/v1/mixnode/types.rs rename to nym-node/nym-node-requests/src/api/v1/mixnode/models.rs index a4ca77e7fe..706fb2e291 100644 --- a/nym-node/src/http/router/api/v1/mixnode/types.rs +++ b/nym-node/nym-node-requests/src/api/v1/mixnode/models.rs @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 use serde::Serialize; -use utoipa::ToSchema; -#[derive(Serialize, Debug, Clone, ToSchema)] +#[derive(Serialize, Debug, Clone)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] pub struct Mixnode { // /// Base58 encoded ed25519 EdDSA public key of the mixnode. // pub encoded_identity_key: String, diff --git a/nym-node/nym-node-requests/src/api/v1/mod.rs b/nym-node/nym-node-requests/src/api/v1/mod.rs new file mode 100644 index 0000000000..ec1ba4461b --- /dev/null +++ b/nym-node/nym-node-requests/src/api/v1/mod.rs @@ -0,0 +1,7 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +pub mod gateway; +pub mod mixnode; +pub mod network_requester; +pub mod node; diff --git a/nym-node/nym-node-requests/src/api/v1/network_requester/mod.rs b/nym-node/nym-node-requests/src/api/v1/network_requester/mod.rs new file mode 100644 index 0000000000..afafedca78 --- /dev/null +++ b/nym-node/nym-node-requests/src/api/v1/network_requester/mod.rs @@ -0,0 +1,4 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +pub mod models; \ No newline at end of file diff --git a/nym-node/src/http/router/api/v1/network_requester/types.rs b/nym-node/nym-node-requests/src/api/v1/network_requester/models.rs similarity index 89% rename from nym-node/src/http/router/api/v1/network_requester/types.rs rename to nym-node/nym-node-requests/src/api/v1/network_requester/models.rs index 370e807a30..bc95333568 100644 --- a/nym-node/src/http/router/api/v1/network_requester/types.rs +++ b/nym-node/nym-node-requests/src/api/v1/network_requester/models.rs @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 use serde::Serialize; -use utoipa::ToSchema; -#[derive(Serialize, Debug, Clone, ToSchema)] +#[derive(Serialize, Debug, Clone)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] pub struct NetworkRequester { /// Base58 encoded ed25519 EdDSA public key of the network requester. pub encoded_identity_key: String, diff --git a/nym-node/nym-node-requests/src/api/v1/node/mod.rs b/nym-node/nym-node-requests/src/api/v1/node/mod.rs new file mode 100644 index 0000000000..afafedca78 --- /dev/null +++ b/nym-node/nym-node-requests/src/api/v1/node/mod.rs @@ -0,0 +1,4 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +pub mod models; \ No newline at end of file diff --git a/nym-node/src/http/router/api/v1/node/types.rs b/nym-node/nym-node-requests/src/api/v1/node/models.rs similarity index 73% rename from nym-node/src/http/router/api/v1/node/types.rs rename to nym-node/nym-node-requests/src/api/v1/node/models.rs index e73b3a5796..d4bdbd6e70 100644 --- a/nym-node/src/http/router/api/v1/node/types.rs +++ b/nym-node/nym-node-requests/src/api/v1/node/models.rs @@ -1,19 +1,21 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -pub use crate::http::api::SignedHostInformation; -pub use nym_bin_common::build_information::BinaryBuildInformationOwned; use serde::Serialize; -use utoipa::ToSchema; -#[derive(Clone, Default, Debug, Copy, ToSchema, Serialize)] +pub use crate::api::SignedHostInformation; +pub use nym_bin_common::build_information::BinaryBuildInformationOwned; + +#[derive(Clone, Default, Debug, Copy, Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] pub struct NodeRoles { pub mixnode_enabled: bool, pub gateway_enabled: bool, pub network_requester_enabled: bool, } -#[derive(Clone, Default, Debug, ToSchema, Serialize)] +#[derive(Clone, Default, Debug, Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] pub struct HostInformation { /// Ip address(es) of this host, such as `1.1.1.1`. pub ip_address: Vec, @@ -25,7 +27,8 @@ pub struct HostInformation { pub keys: HostKeys, } -#[derive(Clone, Default, Debug, ToSchema, Serialize)] +#[derive(Clone, Default, Debug, Serialize)] +#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))] pub struct HostKeys { /// Base58-encoded ed25519 public key of this node. Currently it corresponds to either mixnode's or gateway's identity. pub ed25519: String, diff --git a/nym-node/nym-node-requests/src/error.rs b/nym-node/nym-node-requests/src/error.rs new file mode 100644 index 0000000000..8da9f5e813 --- /dev/null +++ b/nym-node/nym-node-requests/src/error.rs @@ -0,0 +1,13 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +use thiserror::Error; + +#[derive(Debug, Error)] +pub enum Error { + #[error("failed to serialize json data: {source}")] + JsonSerializationFailure { + #[from] + source: serde_json::Error, + }, +} diff --git a/nym-node/nym-node-requests/src/lib.rs b/nym-node/nym-node-requests/src/lib.rs new file mode 100644 index 0000000000..05161c1258 --- /dev/null +++ b/nym-node/nym-node-requests/src/lib.rs @@ -0,0 +1,5 @@ +// Copyright 2023 - Nym Technologies SA +// SPDX-License-Identifier: Apache-2.0 + +pub mod api; +pub mod error; diff --git a/nym-node/src/error.rs b/nym-node/src/error.rs index c117b7bb8c..61a364758c 100644 --- a/nym-node/src/error.rs +++ b/nym-node/src/error.rs @@ -12,10 +12,10 @@ pub enum NymNodeError { source: hyper::Error, }, - #[error("failed to serialize json data: {source}")] - JsonSerializationFailure { + #[error("failed to use nym-node requests: {source}")] + RequestError { #[from] - source: serde_json::Error, + source: nym_node_requests::error::Error, }, #[error("unimplemented")] diff --git a/nym-node/src/http/router/api/mod.rs b/nym-node/src/http/router/api/mod.rs index b6394bc4be..814ecf6c3b 100644 --- a/nym-node/src/http/router/api/mod.rs +++ b/nym-node/src/http/router/api/mod.rs @@ -1,20 +1,18 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::error::NymNodeError; -use crate::http::api::v1::node::types::HostInformation; use crate::http::state::AppState; use axum::http::{header, HeaderValue, StatusCode}; use axum::response::{IntoResponse, Response}; use axum::{Json, Router}; use bytes::{BufMut, BytesMut}; -use nym_crypto::asymmetric::identity; use serde::{Deserialize, Serialize}; -use std::ops::Deref; use utoipa::{IntoParams, ToSchema}; pub mod v1; +pub use nym_node_requests::api as api_requests; + pub(crate) mod routes { pub(crate) const V1: &str = "/v1"; } @@ -28,47 +26,6 @@ pub(super) fn routes(config: Config) -> Router { Router::new().nest(routes::V1, v1::routes(config.v1_config)) } -#[derive(Debug, Clone, ToSchema, Serialize)] -#[aliases(SignedHostInformation = SignedData)] -pub struct SignedData { - // #[serde(flatten)] - pub data: T, - pub signature: String, -} - -impl SignedData { - pub fn new(data: T, key: &identity::PrivateKey) -> Result - where - T: Serialize, - { - let plaintext = serde_json::to_string(&data)?; - let signature = key.sign(plaintext).to_base58_string(); - Ok(SignedData { data, signature }) - } - - pub fn verify(&self, key: &identity::PublicKey) -> bool - where - T: Serialize, - { - let Ok(plaintext) = serde_json::to_string(&self.data) else { - return false; - }; - let Ok(signature) = identity::Signature::from_base58_string(&self.signature) else { - return false; - }; - - key.verify(plaintext, &signature).is_ok() - } -} - -impl Deref for SignedData { - type Target = T; - - fn deref(&self) -> &Self::Target { - &self.data - } -} - #[derive(Debug, Clone, ToSchema)] pub enum FormattedResponse { Json(Json), diff --git a/nym-node/src/http/router/api/v1/gateway/client_interfaces/mod.rs b/nym-node/src/http/router/api/v1/gateway/client_interfaces/mod.rs index ee7f879993..0960ea27f5 100644 --- a/nym-node/src/http/router/api/v1/gateway/client_interfaces/mod.rs +++ b/nym-node/src/http/router/api/v1/gateway/client_interfaces/mod.rs @@ -1,13 +1,13 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::http::api::v1::gateway::types::{ClientInterfaces, WebSockets, Wireguard}; use crate::http::api::{FormattedResponse, OutputParams}; use crate::http::state::AppState; use axum::extract::Query; use axum::http::StatusCode; use axum::routing::get; use axum::Router; +use nym_node_requests::api::v1::gateway::models::{ClientInterfaces, WebSockets, Wireguard}; pub(crate) mod routes { pub(crate) const INTERFACES: &str = "/"; diff --git a/nym-node/src/http/router/api/v1/gateway/mod.rs b/nym-node/src/http/router/api/v1/gateway/mod.rs index fc8fcda65a..ac0aac3bf2 100644 --- a/nym-node/src/http/router/api/v1/gateway/mod.rs +++ b/nym-node/src/http/router/api/v1/gateway/mod.rs @@ -4,10 +4,10 @@ use crate::http::state::AppState; use axum::routing::get; use axum::Router; +use nym_node_requests::api::v1::gateway::models; pub mod client_interfaces; pub mod root; -pub mod types; pub(crate) mod routes { pub(crate) const ROOT: &str = "/"; @@ -16,7 +16,7 @@ pub(crate) mod routes { #[derive(Debug, Clone, Default)] pub struct Config { - pub details: Option, + pub details: Option, } pub(crate) fn routes(config: Config) -> Router { diff --git a/nym-node/src/http/router/api/v1/gateway/root.rs b/nym-node/src/http/router/api/v1/gateway/root.rs index 1904c0ddc4..c32177e7cd 100644 --- a/nym-node/src/http/router/api/v1/gateway/root.rs +++ b/nym-node/src/http/router/api/v1/gateway/root.rs @@ -1,10 +1,10 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::http::api::v1::gateway::types::Gateway; use crate::http::router::api::{FormattedResponse, OutputParams}; use axum::extract::Query; use axum::http::StatusCode; +use nym_node_requests::api::v1::gateway::models::Gateway; /// Returns root gateway information #[utoipa::path( diff --git a/nym-node/src/http/router/api/v1/gateway/types.rs b/nym-node/src/http/router/api/v1/gateway/types.rs deleted file mode 100644 index 9ae012ea9a..0000000000 --- a/nym-node/src/http/router/api/v1/gateway/types.rs +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2023 - Nym Technologies SA -// SPDX-License-Identifier: Apache-2.0 - -use serde::Serialize; -use utoipa::ToSchema; - -#[derive(Serialize, Debug, Clone, ToSchema)] -pub struct Gateway { - pub client_interfaces: ClientInterfaces, -} - -#[derive(Serialize, Debug, Clone, ToSchema)] -pub struct Wireguard { - #[schema(example = 1234, default = 51820)] - pub port: u16, - - pub public_key: String, -} - -#[derive(Serialize, Debug, Clone, ToSchema)] -pub struct ClientInterfaces { - pub wireguard: Option, - - pub mixnet_websockets: Option, - // pub mixnet_tcp: -} - -#[derive(Serialize, Debug, Clone, Copy, ToSchema)] -pub struct WebSockets { - #[schema(example = 1234, default = 9000)] - pub ws_port: u16, - - pub wss_port: Option, -} diff --git a/nym-node/src/http/router/api/v1/mixnode/mod.rs b/nym-node/src/http/router/api/v1/mixnode/mod.rs index 070f71d2b2..ecbbca0df8 100644 --- a/nym-node/src/http/router/api/v1/mixnode/mod.rs +++ b/nym-node/src/http/router/api/v1/mixnode/mod.rs @@ -4,9 +4,9 @@ use crate::http::state::AppState; use axum::routing::get; use axum::Router; +use nym_node_requests::api::v1::mixnode::models; pub mod root; -pub mod types; pub(crate) mod routes { pub(crate) const ROOT: &str = "/"; @@ -14,7 +14,7 @@ pub(crate) mod routes { #[derive(Debug, Clone, Default)] pub struct Config { - pub details: Option, + pub details: Option, } pub(crate) fn routes(config: Config) -> Router { diff --git a/nym-node/src/http/router/api/v1/mixnode/root.rs b/nym-node/src/http/router/api/v1/mixnode/root.rs index 927b556c54..2b71fea15c 100644 --- a/nym-node/src/http/router/api/v1/mixnode/root.rs +++ b/nym-node/src/http/router/api/v1/mixnode/root.rs @@ -1,10 +1,10 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::http::api::v1::mixnode::types::Mixnode; use crate::http::router::api::{FormattedResponse, OutputParams}; use axum::extract::Query; use axum::http::StatusCode; +use nym_node_requests::api::v1::mixnode::models::Mixnode; /// Returns root mixnode information #[utoipa::path( diff --git a/nym-node/src/http/router/api/v1/network_requester/mod.rs b/nym-node/src/http/router/api/v1/network_requester/mod.rs index 6bd474c429..2994b3449a 100644 --- a/nym-node/src/http/router/api/v1/network_requester/mod.rs +++ b/nym-node/src/http/router/api/v1/network_requester/mod.rs @@ -4,9 +4,9 @@ use crate::http::state::AppState; use axum::routing::get; use axum::Router; +use nym_node_requests::api::v1::network_requester::models; pub mod root; -pub mod types; pub(crate) mod routes { pub(crate) const ROOT: &str = "/"; @@ -14,7 +14,7 @@ pub(crate) mod routes { #[derive(Debug, Clone, Default)] pub struct Config { - pub details: Option, + pub details: Option, } pub(crate) fn routes(config: Config) -> Router { diff --git a/nym-node/src/http/router/api/v1/network_requester/root.rs b/nym-node/src/http/router/api/v1/network_requester/root.rs index 4683d1e686..a1849e2560 100644 --- a/nym-node/src/http/router/api/v1/network_requester/root.rs +++ b/nym-node/src/http/router/api/v1/network_requester/root.rs @@ -1,10 +1,10 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::http::api::v1::network_requester::types::NetworkRequester; use crate::http::router::api::{FormattedResponse, OutputParams}; use axum::extract::Query; use axum::http::StatusCode; +use nym_node_requests::api::v1::network_requester::models::NetworkRequester; /// Returns root network requester information #[utoipa::path( diff --git a/nym-node/src/http/router/api/v1/node/build_information.rs b/nym-node/src/http/router/api/v1/node/build_information.rs index 49ea0c6e0e..1288d94dda 100644 --- a/nym-node/src/http/router/api/v1/node/build_information.rs +++ b/nym-node/src/http/router/api/v1/node/build_information.rs @@ -3,7 +3,7 @@ use crate::http::router::api::{FormattedResponse, OutputParams}; use axum::extract::Query; -use nym_bin_common::build_information::BinaryBuildInformationOwned; +use nym_node_requests::api::v1::node::models::BinaryBuildInformationOwned; /// Returns build metadata of the binary running the API #[utoipa::path( diff --git a/nym-node/src/http/router/api/v1/node/host_information.rs b/nym-node/src/http/router/api/v1/node/host_information.rs index f4400b0fda..3581de10bc 100644 --- a/nym-node/src/http/router/api/v1/node/host_information.rs +++ b/nym-node/src/http/router/api/v1/node/host_information.rs @@ -1,9 +1,9 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::http::api::v1::node::types::SignedHostInformation; use crate::http::api::{FormattedResponse, OutputParams}; use axum::extract::Query; +use nym_node_requests::api::v1::node::models::SignedHostInformation; /// Returns host information of this node. #[utoipa::path( diff --git a/nym-node/src/http/router/api/v1/node/mod.rs b/nym-node/src/http/router/api/v1/node/mod.rs index 55637168fe..d4d085e017 100644 --- a/nym-node/src/http/router/api/v1/node/mod.rs +++ b/nym-node/src/http/router/api/v1/node/mod.rs @@ -4,16 +4,14 @@ use crate::http::api::v1::node::build_information::build_information; use crate::http::api::v1::node::host_information::host_information; use crate::http::api::v1::node::roles::roles; -use crate::http::api::v1::node::types::{NodeRoles, SignedHostInformation}; use crate::http::state::AppState; use axum::routing::get; use axum::Router; -use nym_bin_common::build_information::BinaryBuildInformationOwned; +use nym_node_requests::api::v1::node::models; pub mod build_information; pub mod host_information; pub mod roles; -pub mod types; pub(crate) mod routes { pub(crate) const ROLES: &str = "/roles"; @@ -23,9 +21,9 @@ pub(crate) mod routes { #[derive(Debug, Clone)] pub struct Config { - pub build_information: BinaryBuildInformationOwned, - pub host_information: SignedHostInformation, - pub roles: NodeRoles, + pub build_information: models::BinaryBuildInformationOwned, + pub host_information: models::SignedHostInformation, + pub roles: models::NodeRoles, } pub(super) fn routes(config: Config) -> Router { diff --git a/nym-node/src/http/router/api/v1/node/roles.rs b/nym-node/src/http/router/api/v1/node/roles.rs index 1a664bd6c0..811954ed52 100644 --- a/nym-node/src/http/router/api/v1/node/roles.rs +++ b/nym-node/src/http/router/api/v1/node/roles.rs @@ -1,9 +1,9 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::http::api::v1::node::types::NodeRoles; use crate::http::router::api::{FormattedResponse, OutputParams}; use axum::extract::Query; +use nym_node_requests::api::v1::node::models::NodeRoles; /// Returns roles supported by this node #[utoipa::path( diff --git a/nym-node/src/http/router/api/v1/openapi.rs b/nym-node/src/http/router/api/v1/openapi.rs index 4439b744af..ff29d40e96 100644 --- a/nym-node/src/http/router/api/v1/openapi.rs +++ b/nym-node/src/http/router/api/v1/openapi.rs @@ -4,6 +4,7 @@ use crate::http::router::api; use crate::http::state::AppState; use axum::Router; +use nym_node_requests::api as api_requests; use utoipa::OpenApi; use utoipa_swagger_ui::SwaggerUi; @@ -24,17 +25,17 @@ use utoipa_swagger_ui::SwaggerUi; components(schemas( api::Output, api::OutputParams, - api::v1::node::types::BinaryBuildInformationOwned, - api::v1::node::types::SignedHostInformation, - api::v1::node::types::HostInformation, - api::v1::node::types::HostKeys, - api::v1::node::types::NodeRoles, - api::v1::gateway::types::Gateway, - api::v1::gateway::types::Wireguard, - api::v1::gateway::types::ClientInterfaces, - api::v1::gateway::types::WebSockets, - api::v1::mixnode::types::Mixnode, - api::v1::network_requester::types::NetworkRequester, + api_requests::v1::node::models::BinaryBuildInformationOwned, + api_requests::v1::node::models::SignedHostInformation, + api_requests::v1::node::models::HostInformation, + api_requests::v1::node::models::HostKeys, + api_requests::v1::node::models::NodeRoles, + api_requests::v1::gateway::models::Gateway, + api_requests::v1::gateway::models::Wireguard, + api_requests::v1::gateway::models::ClientInterfaces, + api_requests::v1::gateway::models::WebSockets, + api_requests::v1::mixnode::models::Mixnode, + api_requests::v1::network_requester::models::NetworkRequester, )) )] pub(crate) struct ApiDoc; diff --git a/nym-node/src/http/router/mod.rs b/nym-node/src/http/router/mod.rs index a714df3aba..08bf0a4c3e 100644 --- a/nym-node/src/http/router/mod.rs +++ b/nym-node/src/http/router/mod.rs @@ -2,15 +2,15 @@ // SPDX-License-Identifier: Apache-2.0 use crate::error::NymNodeError; -use crate::http::api::v1::gateway::types::Gateway; -use crate::http::api::v1::mixnode::types::Mixnode; -use crate::http::api::v1::network_requester::types::NetworkRequester; -use crate::http::api::v1::node::types::SignedHostInformation; use crate::http::middleware::logging; use crate::http::state::AppState; use crate::http::NymNodeHTTPServer; use axum::Router; -use nym_bin_common::build_information::BinaryBuildInformationOwned; +use nym_node_requests::api::v1::gateway::models::Gateway; +use nym_node_requests::api::v1::mixnode::models::Mixnode; +use nym_node_requests::api::v1::network_requester::models::NetworkRequester; +use nym_node_requests::api::v1::node::models; +use nym_node_requests::api::SignedHostInformation; use std::net::SocketAddr; pub mod api; @@ -33,7 +33,7 @@ pub struct Config { impl Config { pub fn new( - build_information: BinaryBuildInformationOwned, + build_information: models::BinaryBuildInformationOwned, host_information: SignedHostInformation, ) -> Self { Config {