@@ -809,8 +809,11 @@ impl<S: MutinyStorage> NodeManager<S> {
809809 for payjoin in all {
810810 let wallet = nm. wallet . clone ( ) ;
811811 let stop = nm. stop . clone ( ) ;
812+ let storage = Arc :: new ( nm. storage . clone ( ) ) ;
812813 utils:: spawn ( async move {
813- let pj_txid = Self :: receive_payjoin ( wallet, stop, payjoin) . await . unwrap ( ) ;
814+ let pj_txid = Self :: receive_payjoin ( wallet, stop, storage, payjoin)
815+ . await
816+ . unwrap ( ) ;
814817 log:: info!( "Received payjoin txid: {}" , pj_txid) ;
815818 } ) ;
816819 }
@@ -1057,14 +1060,17 @@ impl<S: MutinyStorage> NodeManager<S> {
10571060 . process_res ( ohttp_response. as_ref ( ) , context)
10581061 . map_err ( |e| anyhow ! ( "parse error {}" , e) )
10591062 . unwrap ( ) ;
1060- self . storage . persist_payjoin ( enrolled. clone ( ) ) . unwrap ( ) ;
1063+ let session = self . storage . persist_payjoin ( enrolled. clone ( ) ) . unwrap ( ) ;
10611064 let pj_uri = enrolled. fallback_target ( ) ;
10621065 log_debug ! ( self . logger, "{pj_uri}" ) ;
10631066 // run await payjoin task in the background as it'll keep polling the relay
10641067 let wallet = self . wallet . clone ( ) ;
10651068 let stop = self . stop . clone ( ) ;
1069+ let storage = Arc :: new ( self . storage . clone ( ) ) ;
10661070 utils:: spawn ( async move {
1067- let pj_txid = Self :: receive_payjoin ( wallet, stop, enrolled) . await . unwrap ( ) ;
1071+ let pj_txid = Self :: receive_payjoin ( wallet, stop, storage, session)
1072+ . await
1073+ . unwrap ( ) ;
10681074 log:: info!( "Received payjoin txid: {}" , pj_txid) ;
10691075 } ) ;
10701076 Some ( pj_uri)
@@ -1155,14 +1161,15 @@ impl<S: MutinyStorage> NodeManager<S> {
11551161 pub async fn receive_payjoin (
11561162 wallet : Arc < OnChainWallet < S > > ,
11571163 stop : Arc < AtomicBool > ,
1158- mut enrolled : payjoin:: receive:: v2:: Enrolled ,
1164+ storage : Arc < S > ,
1165+ mut session : crate :: payjoin:: Session ,
11591166 ) -> Result < Txid , MutinyError > {
11601167 let http_client = reqwest:: Client :: builder ( )
11611168 //.danger_accept_invalid_certs(true) ? is tls unchecked :O
11621169 . build ( )
11631170 . unwrap ( ) ;
11641171 let proposal: payjoin:: receive:: v2:: UncheckedProposal =
1165- Self :: poll_for_fallback_psbt ( stop, & http_client, & mut enrolled )
1172+ Self :: poll_for_fallback_psbt ( stop, storage , & http_client, & mut session )
11661173 . await
11671174 . unwrap ( ) ;
11681175 let payjoin_proposal = wallet. process_payjoin_proposal ( proposal) . unwrap ( ) ;
@@ -1187,17 +1194,23 @@ impl<S: MutinyStorage> NodeManager<S> {
11871194
11881195 async fn poll_for_fallback_psbt (
11891196 stop : Arc < AtomicBool > ,
1197+ storage : Arc < S > ,
11901198 client : & reqwest:: Client ,
1191- enroller : & mut payjoin :: receive :: v2 :: Enrolled ,
1199+ session : & mut crate :: payjoin :: Session ,
11921200 ) -> Result < payjoin:: receive:: v2:: UncheckedProposal , ( ) > {
11931201 loop {
11941202 if stop. load ( Ordering :: Relaxed ) {
11951203 return Err ( ( ) ) ; // stopped
11961204 }
1197- let ( req, context) = enroller. extract_req ( ) . unwrap ( ) ;
1205+ if session. expiry < utils:: now ( ) {
1206+ let _ = storage. delete_payjoin ( & session. enrolled . pubkey ( ) ) ;
1207+ return Err ( ( ) ) ; // expired
1208+ }
1209+ let ( req, context) = session. enrolled . extract_req ( ) . unwrap ( ) ;
11981210 let ohttp_response = client. post ( req. url ) . body ( req. body ) . send ( ) . await . unwrap ( ) ;
11991211 let ohttp_response = ohttp_response. bytes ( ) . await . unwrap ( ) ;
1200- let proposal = enroller
1212+ let proposal = session
1213+ . enrolled
12011214 . process_res ( ohttp_response. as_ref ( ) , context)
12021215 . map_err ( |e| anyhow ! ( "parse error {}" , e) )
12031216 . unwrap ( ) ;
0 commit comments