diff --git a/Cargo.lock b/Cargo.lock index 5e1bc41..1b15a8e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -698,7 +698,7 @@ dependencies = [ ] [[package]] -name = "clientd-statless" +name = "clientd-stateless" version = "0.3.3" dependencies = [ "anyhow", diff --git a/clientd-stateless/Cargo.toml b/clientd-stateless/Cargo.toml index 16fb465..1f795d1 100644 --- a/clientd-stateless/Cargo.toml +++ b/clientd-stateless/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "clientd-statless" +name = "clientd-stateless" version = "0.3.3" edition = "2021" description = "A stateless fedimint client daemon" diff --git a/clientd-stateless/examples/cashu_encoding.rs b/clientd-stateless/examples/cashu_encoding.rs deleted file mode 100644 index 8b13789..0000000 --- a/clientd-stateless/examples/cashu_encoding.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/clientd-stateless/src/router/handlers/mod.rs b/clientd-stateless/src/cashu.rs similarity index 91% rename from clientd-stateless/src/router/handlers/mod.rs rename to clientd-stateless/src/cashu.rs index f4f3512..bce91c7 100644 --- a/clientd-stateless/src/router/handlers/mod.rs +++ b/clientd-stateless/src/cashu.rs @@ -7,7 +7,7 @@ use base64::Engine; use bitcoin::secp256k1::{Secp256k1, SecretKey}; use bitcoin::KeyPair; use fedimint_core::api::InviteCode; -use fedimint_core::config::FederationIdPrefix; +use fedimint_core::config::{FederationId, FederationIdPrefix}; use fedimint_core::db::DatabaseValue; use fedimint_core::module::registry::ModuleDecoderRegistry; use fedimint_core::{Amount, TieredMulti}; @@ -16,14 +16,6 @@ use serde::de::Error; use serde::{Deserialize, Serialize}; use tbs::Signature; -pub mod check; -pub mod info; -pub mod keys; -pub mod keysets; -pub mod melt; -pub mod mint; -pub mod swap; - #[derive(Debug, Clone, Deserialize, Serialize)] pub struct Proof { // Amount unassociated with the unit @@ -156,7 +148,7 @@ impl fmt::Display for TokenV3 { } } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "lowercase")] pub enum Unit { Msat, @@ -169,3 +161,22 @@ pub enum Method { Bolt11, Onchain, } + +#[derive(Debug, Deserialize, Serialize)] +#[serde(rename_all = "lowercase")] +pub struct Keyset { + id: String, + unit: Unit, + active: bool, +} + +impl From for Keyset { + fn from(federation_id: FederationId) -> Self { + let as_str = format!("00{}", federation_id.to_string()); + Keyset { + id: as_str, + unit: Unit::Msat, + active: true, + } + } +} diff --git a/clientd-stateless/src/main.rs b/clientd-stateless/src/main.rs index 941bd38..ee2d414 100644 --- a/clientd-stateless/src/main.rs +++ b/clientd-stateless/src/main.rs @@ -4,13 +4,14 @@ use std::str::FromStr; use anyhow::Result; use axum::http::Method; use fedimint_core::api::InviteCode; -use router::handlers; +use router::{check, info, keys, keysets, melt, mint, swap}; use tower_http::cors::{Any, CorsLayer}; use tower_http::trace::TraceLayer; use tracing::info; +mod cashu; mod error; -mod router; +pub mod router; mod state; mod utils; @@ -156,31 +157,22 @@ async fn main() -> Result<()> { /// - DLEQ in BlindedSignature for Mint to User fn cashu_v1_rest() -> Router { Router::new() - .route("/keys", get(handlers::keys::handle_keys)) - .route( - "/keys/:keyset_id", - get(handlers::keys::handle_keys_keyset_id), - ) - .route("/keysets", get(handlers::keysets::handle_keysets)) - .route("/swap", post(handlers::swap::handle_swap)) - .route( - "/mint/quote/:method", - get(handlers::mint::quote::handle_method), - ) + .route("/keys", get(keys::handle_keys)) + .route("/keys/:keyset_id", get(keys::handle_keys_keyset_id)) + .route("/keysets", get(keysets::handle_keysets)) + .route("/swap", post(swap::handle_swap)) + .route("/mint/quote/:method", get(mint::quote::handle_method)) .route( "/mint/quote/:method/:quote_id", - get(handlers::mint::quote::handle_method_quote_id), - ) - .route("/mint/:method", post(handlers::mint::method::handle_method)) - .route( - "/melt/quote/:method", - get(handlers::melt::quote::handle_method), + get(mint::quote::handle_method_quote_id), ) + .route("/mint/:method", post(mint::method::handle_method)) + .route("/melt/quote/:method", get(melt::quote::handle_method)) .route( "/melt/quote/:method/:quote_id", - get(handlers::melt::quote::handle_method_quote_id), + get(melt::quote::handle_method_quote_id), ) - .route("/melt/:method", post(handlers::melt::method::handle_method)) - .route("/info", get(handlers::info::handle_info)) - .route("/check", post(handlers::check::handle_check)) + .route("/melt/:method", post(melt::method::handle_method)) + .route("/info", get(info::handle_info)) + .route("/check", post(check::handle_check)) } diff --git a/clientd-stateless/src/router/handlers/check.rs b/clientd-stateless/src/router/check.rs similarity index 100% rename from clientd-stateless/src/router/handlers/check.rs rename to clientd-stateless/src/router/check.rs diff --git a/clientd-stateless/src/router/handlers/keysets.rs b/clientd-stateless/src/router/handlers/keysets.rs deleted file mode 100644 index 89b6e0d..0000000 --- a/clientd-stateless/src/router/handlers/keysets.rs +++ /dev/null @@ -1,10 +0,0 @@ -use axum::extract::State; - -use crate::error::AppError; -use crate::state::AppState; - -#[axum_macros::debug_handler] -pub async fn handle_keysets(State(_state): State) -> Result<(), AppError> { - // TODO: Implement this function - Ok(()) -} diff --git a/clientd-stateless/src/router/handlers/info.rs b/clientd-stateless/src/router/info.rs similarity index 100% rename from clientd-stateless/src/router/handlers/info.rs rename to clientd-stateless/src/router/info.rs diff --git a/clientd-stateless/src/router/handlers/keys.rs b/clientd-stateless/src/router/keys.rs similarity index 100% rename from clientd-stateless/src/router/handlers/keys.rs rename to clientd-stateless/src/router/keys.rs diff --git a/clientd-stateless/src/router/keysets.rs b/clientd-stateless/src/router/keysets.rs new file mode 100644 index 0000000..a721c40 --- /dev/null +++ b/clientd-stateless/src/router/keysets.rs @@ -0,0 +1,26 @@ +use axum::extract::State; +use axum::Json; +use serde::Serialize; + +use crate::cashu::Keyset; +use crate::error::AppError; +use crate::state::AppState; + +#[derive(Serialize)] +#[serde(rename_all = "lowercase")] +pub struct KeysetsResponse { + keysets: Vec, +} + +#[axum_macros::debug_handler] +pub async fn handle_keysets( + State(state): State, +) -> Result, AppError> { + let mut keysets = Vec::::new(); + let ids = state.multimint.ids().await; + for id in ids { + keysets.push(Keyset::from(id)) + } + + Ok(Json(KeysetsResponse { keysets })) +} diff --git a/clientd-stateless/src/router/handlers/melt/method.rs b/clientd-stateless/src/router/melt/method.rs similarity index 99% rename from clientd-stateless/src/router/handlers/melt/method.rs rename to clientd-stateless/src/router/melt/method.rs index 5553c4d..9ed7bd2 100644 --- a/clientd-stateless/src/router/handlers/melt/method.rs +++ b/clientd-stateless/src/router/melt/method.rs @@ -14,8 +14,8 @@ use lightning_invoice::Bolt11Invoice; use serde::{Deserialize, Serialize}; use tracing::{error, info}; +use crate::cashu::{Method, Unit}; use crate::error::AppError; -use crate::router::handlers::{Method, Unit}; use crate::state::AppState; #[derive(Debug, Deserialize)] diff --git a/clientd-stateless/src/router/handlers/melt/mod.rs b/clientd-stateless/src/router/melt/mod.rs similarity index 100% rename from clientd-stateless/src/router/handlers/melt/mod.rs rename to clientd-stateless/src/router/melt/mod.rs diff --git a/clientd-stateless/src/router/handlers/melt/quote.rs b/clientd-stateless/src/router/melt/quote.rs similarity index 100% rename from clientd-stateless/src/router/handlers/melt/quote.rs rename to clientd-stateless/src/router/melt/quote.rs diff --git a/clientd-stateless/src/router/handlers/mint/method.rs b/clientd-stateless/src/router/mint/method.rs similarity index 98% rename from clientd-stateless/src/router/handlers/mint/method.rs rename to clientd-stateless/src/router/mint/method.rs index 3c7eb13..ac4e79c 100644 --- a/clientd-stateless/src/router/handlers/mint/method.rs +++ b/clientd-stateless/src/router/mint/method.rs @@ -14,8 +14,8 @@ use lightning_invoice::{Bolt11InvoiceDescription, Description}; use serde::{Deserialize, Serialize}; use tracing::error; +use crate::cashu::{Method, Unit}; use crate::error::AppError; -use crate::router::handlers::{Method, Unit}; use crate::state::AppState; #[derive(Debug, Deserialize)] diff --git a/clientd-stateless/src/router/handlers/mint/mod.rs b/clientd-stateless/src/router/mint/mod.rs similarity index 100% rename from clientd-stateless/src/router/handlers/mint/mod.rs rename to clientd-stateless/src/router/mint/mod.rs diff --git a/clientd-stateless/src/router/handlers/mint/quote.rs b/clientd-stateless/src/router/mint/quote.rs similarity index 100% rename from clientd-stateless/src/router/handlers/mint/quote.rs rename to clientd-stateless/src/router/mint/quote.rs diff --git a/clientd-stateless/src/router/mod.rs b/clientd-stateless/src/router/mod.rs index c3d4495..86d3f25 100644 --- a/clientd-stateless/src/router/mod.rs +++ b/clientd-stateless/src/router/mod.rs @@ -1 +1,7 @@ -pub mod handlers; +pub mod check; +pub mod info; +pub mod keys; +pub mod keysets; +pub mod melt; +pub mod mint; +pub mod swap; diff --git a/clientd-stateless/src/router/handlers/swap.rs b/clientd-stateless/src/router/swap.rs similarity index 100% rename from clientd-stateless/src/router/handlers/swap.rs rename to clientd-stateless/src/router/swap.rs diff --git a/multimint/Cargo.toml b/multimint/Cargo.toml index 4e484cd..52881be 100644 --- a/multimint/Cargo.toml +++ b/multimint/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "multimint" -version = "0.3.3" +version = "0.3.4" edition = "2021" description = "A library for managing fedimint clients across multiple federations" license = "MIT" diff --git a/multimint/src/lib.rs b/multimint/src/lib.rs index d61442b..83ba159 100644 --- a/multimint/src/lib.rs +++ b/multimint/src/lib.rs @@ -78,6 +78,7 @@ use fedimint_wallet_client::WalletClientModule; use tokio::sync::Mutex; use tracing::warn; use types::InfoResponse; +pub use {fedimint_core, fedimint_ln_client, fedimint_mint_client, fedimint_wallet_client}; pub mod client; pub mod db;