From 22926f8b21eb68359366e0e6bbbb3f1e897cb6d3 Mon Sep 17 00:00:00 2001 From: thesimplekid Date: Mon, 18 Aug 2025 14:46:18 +0100 Subject: [PATCH] fix: bolt12 ws on mint (#972) * fix: bolt12 ws on mint * fix: bolt12 ws on mint --- crates/cdk/src/mint/issue/mod.rs | 36 ++++++++++++++++++--- crates/cdk/src/mint/ln.rs | 24 ++++++++++++-- crates/cdk/src/mint/mod.rs | 17 +++++++++- crates/cdk/src/mint/subscription/manager.rs | 19 ++++++++++- 4 files changed, 87 insertions(+), 9 deletions(-) diff --git a/crates/cdk/src/mint/issue/mod.rs b/crates/cdk/src/mint/issue/mod.rs index 1d46b41f..1f37d568 100644 --- a/crates/cdk/src/mint/issue/mod.rs +++ b/crates/cdk/src/mint/issue/mod.rs @@ -433,8 +433,22 @@ impl Mint { ) .await?; - self.pubsub_manager - .mint_quote_bolt11_status(mint_quote.clone(), MintQuoteState::Paid); + match mint_quote.payment_method { + PaymentMethod::Bolt11 => { + self.pubsub_manager + .mint_quote_bolt11_status(mint_quote.clone(), MintQuoteState::Paid); + } + PaymentMethod::Bolt12 => { + self.pubsub_manager.mint_quote_bolt12_status( + mint_quote.clone(), + wait_payment_response.payment_amount, + Amount::ZERO, + ); + } + _ => { + // We don't send ws updates for unknown methods + } + } } } else { tracing::info!("Received payment notification for already seen payment."); @@ -603,8 +617,22 @@ impl Mint { tx.commit().await?; - self.pubsub_manager - .mint_quote_bolt11_status(mint_quote, MintQuoteState::Issued); + match mint_quote.payment_method { + PaymentMethod::Bolt11 => { + self.pubsub_manager + .mint_quote_bolt11_status(mint_quote.clone(), MintQuoteState::Issued); + } + PaymentMethod::Bolt12 => { + self.pubsub_manager.mint_quote_bolt12_status( + mint_quote.clone(), + Amount::ZERO, + mint_request.total_amount()?, + ); + } + PaymentMethod::Custom(_) => { + // We don't send ws updates for unknown methods + } + } Ok(MintResponse { signatures: blind_signatures, diff --git a/crates/cdk/src/mint/ln.rs b/crates/cdk/src/mint/ln.rs index 281638d1..901ed1a5 100644 --- a/crates/cdk/src/mint/ln.rs +++ b/crates/cdk/src/mint/ln.rs @@ -2,7 +2,7 @@ use cdk_common::amount::to_unit; use cdk_common::common::PaymentProcessorKey; use cdk_common::mint::MintQuote; use cdk_common::util::unix_time; -use cdk_common::{MintQuoteState, PaymentMethod}; +use cdk_common::{Amount, MintQuoteState, PaymentMethod}; use tracing::instrument; use super::Mint; @@ -39,6 +39,10 @@ impl Mint { .check_incoming_payment_status("e.request_lookup_id) .await?; + if ln_status.is_empty() { + return Ok(()); + } + let mut tx = self.localstore.begin_transaction().await?; for payment in ln_status { @@ -52,8 +56,22 @@ impl Mint { tx.increment_mint_quote_amount_paid("e.id, amount_paid, payment.payment_id) .await?; - self.pubsub_manager - .mint_quote_bolt11_status(quote.clone(), MintQuoteState::Paid); + match quote.payment_method { + PaymentMethod::Bolt11 => { + self.pubsub_manager + .mint_quote_bolt11_status(quote.clone(), MintQuoteState::Paid); + } + PaymentMethod::Bolt12 => { + self.pubsub_manager.mint_quote_bolt12_status( + quote.clone(), + amount_paid, + Amount::ZERO, + ); + } + PaymentMethod::Custom(_) => { + // We don't send ws updates for unknown methods + } + } } } diff --git a/crates/cdk/src/mint/mod.rs b/crates/cdk/src/mint/mod.rs index ed0752b0..0acc5cbe 100644 --- a/crates/cdk/src/mint/mod.rs +++ b/crates/cdk/src/mint/mod.rs @@ -571,7 +571,22 @@ impl Mint { ) .await?; - pubsub_manager.mint_quote_bolt11_status(mint_quote.clone(), MintQuoteState::Paid); + match mint_quote.payment_method { + PaymentMethod::Bolt11 => { + pubsub_manager + .mint_quote_bolt11_status(mint_quote.clone(), MintQuoteState::Paid); + } + PaymentMethod::Bolt12 => { + pubsub_manager.mint_quote_bolt12_status( + mint_quote.clone(), + wait_payment_response.payment_amount, + Amount::ZERO, + ); + } + _ => { + // We don't send ws updates for unknown methods + } + } } } else { tracing::info!("Received payment notification for already seen payment."); diff --git a/crates/cdk/src/mint/subscription/manager.rs b/crates/cdk/src/mint/subscription/manager.rs index 345b94fb..7b1b693f 100644 --- a/crates/cdk/src/mint/subscription/manager.rs +++ b/crates/cdk/src/mint/subscription/manager.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use cdk_common::database::{self, MintDatabase}; use cdk_common::nut17::Notification; -use cdk_common::NotificationPayload; +use cdk_common::{Amount, MintQuoteBolt12Response, NotificationPayload}; use uuid::Uuid; use super::OnSubscription; @@ -60,6 +60,23 @@ impl PubSubManager { self.broadcast(event.into()); } + /// Helper function to emit a MintQuoteBolt11Response status + pub fn mint_quote_bolt12_status>>( + &self, + quote: E, + amount_paid: Amount, + amount_issued: Amount, + ) { + if let Ok(mut event) = quote.try_into() { + event.amount_paid += amount_paid; + event.amount_issued += amount_issued; + + self.broadcast(event.into()); + } else { + tracing::warn!("Could not convert quote to MintQuoteResponse"); + } + } + /// Helper function to emit a MeltQuoteBolt11Response status pub fn melt_quote_status>>( &self,