@@ -37,6 +37,7 @@ use crate::models::{
3737} ;
3838use crate :: node_api:: NodeAPI ;
3939use crate :: persist:: db:: SqliteStorage ;
40+ use crate :: persist:: payment_store:: PaymentStore ;
4041use crate :: persist:: swap:: SwapStorage ;
4142use crate :: persist:: transactions:: PaymentStorage ;
4243use crate :: receiver:: { PaymentReceiver , Receiver } ;
@@ -144,6 +145,7 @@ pub struct BreezServices {
144145 config : Config ,
145146 started : Mutex < bool > ,
146147 node_api : Arc < dyn NodeAPI > ,
148+ payment_store : Arc < dyn PaymentStore > ,
147149 lsp_api : Arc < dyn LspAPI > ,
148150 receiver : Arc < dyn Receiver > ,
149151 fiat_api : Arc < dyn FiatAPI > ,
@@ -297,6 +299,17 @@ impl BreezServices {
297299 return Err ( SendPaymentError :: AlreadyPaid ) ;
298300 }
299301
302+ let info = LnPaymentInfo {
303+ bolt11 : parsed_invoice. bolt11 . clone ( ) ,
304+ payment_hash : parsed_invoice. payment_hash . clone ( ) ,
305+ destination_pubkey : parsed_invoice. payee_pubkey . clone ( ) ,
306+ description : parsed_invoice. description . clone ( ) ,
307+ keysend : false ,
308+ } ;
309+ self . payment_store
310+ . set_ln_info ( & parsed_invoice. payment_hash , & info)
311+ . await ?;
312+
300313 self . persist_pending_payment ( & parsed_invoice, amount_msat) ?;
301314
302315 debug ! ( "attempting normal payment" ) ;
@@ -414,9 +427,24 @@ impl BreezServices {
414427
415428 let lnurl_pay_domain = match req. data . ln_address {
416429 Some ( _) => None ,
417- None => Some ( req. data . domain ) ,
430+ None => Some ( req. data . domain . clone ( ) ) ,
418431 } ;
419432 // Store SA (if available) + LN Address in separate table, associated to payment_hash
433+ let target = match & req. data . ln_address {
434+ Some ( address) => LnUrlPayTarget :: LnAddress ( address. clone ( ) ) ,
435+ None => LnUrlPayTarget :: Domain ( req. data . domain ) ,
436+ } ;
437+ let info = LnUrlPayInfo {
438+ target,
439+ metadata : req. data . metadata_str . clone ( ) ,
440+ comment : req. comment . clone ( ) ,
441+ success_action : maybe_sa_processed. clone ( ) ,
442+ } ;
443+ let info = LnUrlInfo :: Pay ( info) ;
444+ self . payment_store
445+ . set_lnurl_info ( & invoice. payment_hash , & info)
446+ . await ?;
447+
420448 self . persister . insert_payment_external_info (
421449 & details. payment_hash ,
422450 PaymentExternalInfo {
@@ -465,6 +493,14 @@ impl BreezServices {
465493 let res = validate_lnurl_withdraw ( self . rest_client . as_ref ( ) , req. data , invoice) . await ?;
466494
467495 if let LnUrlWithdrawResult :: Ok { ref data } = res {
496+ let info = LnUrlWithdrawInfo {
497+ endpoint : lnurl_w_endpoint. clone ( ) ,
498+ } ;
499+ let info = LnUrlInfo :: Withdraw ( info) ;
500+ self . payment_store
501+ . set_lnurl_info ( & data. invoice . payment_hash , & info)
502+ . await ?;
503+
468504 // If endpoint was successfully called, store the LNURL-withdraw endpoint URL as metadata linked to the invoice
469505 self . persister . insert_payment_external_info (
470506 & data. invoice . payment_hash ,
@@ -1887,6 +1923,7 @@ struct BreezServicesBuilder {
18871923 node_api : Option < Arc < dyn NodeAPI > > ,
18881924 backup_transport : Option < Arc < dyn BackupTransport > > ,
18891925 seed : Option < Vec < u8 > > ,
1926+ payment_store : Option < Arc < dyn PaymentStore > > ,
18901927 lsp_api : Option < Arc < dyn LspAPI > > ,
18911928 fiat_api : Option < Arc < dyn FiatAPI > > ,
18921929 persister : Option < Arc < SqliteStorage > > ,
@@ -1908,6 +1945,7 @@ impl BreezServicesBuilder {
19081945 config,
19091946 node_api : None ,
19101947 seed : None ,
1948+ payment_store : None ,
19111949 lsp_api : None ,
19121950 fiat_api : None ,
19131951 persister : None ,
@@ -1927,6 +1965,11 @@ impl BreezServicesBuilder {
19271965 self
19281966 }
19291967
1968+ pub fn payment_store ( & mut self , payment_store : Arc < dyn PaymentStore > ) -> & mut Self {
1969+ self . payment_store = Some ( payment_store) ;
1970+ self
1971+ }
1972+
19301973 #[ cfg( test) ]
19311974 pub fn lsp_api ( & mut self , lsp_api : Arc < dyn LspAPI > ) -> & mut Self {
19321975 self . lsp_api = Some ( lsp_api. clone ( ) ) ;
@@ -2023,6 +2066,7 @@ impl BreezServicesBuilder {
20232066 let mut node_api = self . node_api . clone ( ) ;
20242067 let mut backup_transport = self . backup_transport . clone ( ) ;
20252068 let mut lsp_api = self . lsp_api . clone ( ) ;
2069+ let mut payment_store = self . payment_store . clone ( ) ;
20262070 if node_api. is_none ( ) {
20272071 let node_impls = node_builder:: build_node (
20282072 self . config . clone ( ) ,
@@ -2034,7 +2078,11 @@ impl BreezServicesBuilder {
20342078 node_api = Some ( node_impls. node ) ;
20352079 backup_transport = backup_transport. or ( Some ( node_impls. backup_transport ) ) ;
20362080 lsp_api = lsp_api. or ( node_impls. lsp ) ;
2081+ payment_store = payment_store. or ( Some ( node_impls. payment_store ) ) ;
20372082 }
2083+ let payment_store = payment_store. ok_or ( ConnectError :: Generic {
2084+ err : "Payment store should be provided" . into ( ) ,
2085+ } ) ?;
20382086 let lsp_api = lsp_api. ok_or ( ConnectError :: Generic {
20392087 err : "LSP Api should be provided" . into ( ) ,
20402088 } ) ?;
@@ -2149,6 +2197,7 @@ impl BreezServicesBuilder {
21492197 config : self . config . clone ( ) ,
21502198 started : Mutex :: new ( false ) ,
21512199 node_api : unwrapped_node_api. clone ( ) ,
2200+ payment_store,
21522201 lsp_api,
21532202 receiver,
21542203 fiat_api : self
@@ -2542,6 +2591,7 @@ pub(crate) mod tests {
25422591 . fiat_api ( Arc :: new ( MockBreezServer { } ) )
25432592 . node_api ( node_api)
25442593 . persister ( persister)
2594+ . payment_store ( Arc :: new ( MockPaymentStore :: default ( ) ) )
25452595 . backup_transport ( Arc :: new ( MockBackupTransport :: new ( ) ) )
25462596 . build ( None , None )
25472597 . await ?;
@@ -2705,6 +2755,7 @@ pub(crate) mod tests {
27052755 . persister ( persister)
27062756 . node_api ( node_api)
27072757 . rest_client ( rest_client)
2758+ . payment_store ( Arc :: new ( MockPaymentStore :: default ( ) ) )
27082759 . backup_transport ( Arc :: new ( MockBackupTransport :: new ( ) ) )
27092760 . build ( None , None )
27102761 . await ?;
0 commit comments