diff --git a/clientd-stateless/Cargo.toml b/clientd-stateless/Cargo.toml index 0e88f3b..1f795d1 100644 --- a/clientd-stateless/Cargo.toml +++ b/clientd-stateless/Cargo.toml @@ -7,10 +7,6 @@ repository = "https://github.com/fedimint/fedimint-clientd" keywords = ["fedimint", "bitcoin", "lightning", "ecash"] license = "MIT" -[[example]] -name = "cashu_encoding" -path = "examples/cashu_encoding.rs" - [dependencies] anyhow = "1.0.75" axum = { version = "0.7.1", features = ["json", "ws"] } diff --git a/clientd-stateless/src/cashu.rs b/clientd-stateless/src/cashu.rs index e92acb9..bce91c7 100644 --- a/clientd-stateless/src/cashu.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}; @@ -148,7 +148,7 @@ impl fmt::Display for TokenV3 { } } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "lowercase")] pub enum Unit { Msat, @@ -161,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/router/keysets.rs b/clientd-stateless/src/router/keysets.rs index 89b6e0d..a721c40 100644 --- a/clientd-stateless/src/router/keysets.rs +++ b/clientd-stateless/src/router/keysets.rs @@ -1,10 +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> { - // TODO: Implement this function - Ok(()) +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 })) }