From b8f3beb49fe48aac157ee6c0f25e1d3481418bf6 Mon Sep 17 00:00:00 2001 From: Mshehu5 Date: Mon, 30 Jun 2025 16:15:28 +0100 Subject: [PATCH] Fix PR review issues from PR #812 - Add direct import of `bitcoin_uri::Uri` instead of using relative imports - Fix output substitution handling to properly default to enabled for v2 and disabled for v1 This addresses the review comments from the reviews --- payjoin/src/core/receive/v2/mod.rs | 4 +++- payjoin/src/core/receive/v2/session.rs | 19 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/payjoin/src/core/receive/v2/mod.rs b/payjoin/src/core/receive/v2/mod.rs index dad80f701..ea5d27281 100644 --- a/payjoin/src/core/receive/v2/mod.rs +++ b/payjoin/src/core/receive/v2/mod.rs @@ -902,6 +902,8 @@ pub(crate) fn pj_uri<'a>( session_context: &SessionContext, output_substitution: OutputSubstitution, ) -> crate::PjUri<'a> { + use bitcoin_uri::Uri; + use crate::uri::{PayjoinExtras, UrlExt}; let id = session_context.id(); let mut pj = subdir(&session_context.directory, &id).clone(); @@ -909,7 +911,7 @@ pub(crate) fn pj_uri<'a>( pj.set_ohttp(session_context.ohttp_keys.clone()); pj.set_exp(session_context.expiry); let extras = PayjoinExtras { endpoint: pj, output_substitution }; - bitcoin_uri::Uri::with_extras(session_context.address.clone(), extras) + Uri::with_extras(session_context.address.clone(), extras) } #[cfg(test)] diff --git a/payjoin/src/core/receive/v2/session.rs b/payjoin/src/core/receive/v2/session.rs index de4a23dca..066ae2ba6 100644 --- a/payjoin/src/core/receive/v2/session.rs +++ b/payjoin/src/core/receive/v2/session.rs @@ -7,7 +7,7 @@ use crate::output_substitution::OutputSubstitution; use crate::persist::SessionPersister; use crate::receive::v2::{extract_err_req, SessionError}; use crate::receive::{v1, JsonReply}; -use crate::{ImplementationError, IntoUrl, PjUri, Request}; +use crate::{ImplementationError, IntoUrl, PjUri, Request, Version}; /// Errors that can occur when replaying a receiver event log #[derive(Debug)] @@ -78,11 +78,20 @@ pub struct SessionHistory { impl SessionHistory { /// Receiver session Payjoin URI pub fn pj_uri<'a>(&self) -> Option> { - self.events.iter().find_map(|event| match event { - SessionEvent::Created(session_context) => - Some(crate::receive::v2::pj_uri(session_context, OutputSubstitution::Disabled)), + let session_context = self.events.iter().find_map(|event| match event { + SessionEvent::Created(session_context) => Some(session_context), _ => None, - }) + })?; + let mut output_substitution = OutputSubstitution::Enabled; + for event in &self.events { + if let SessionEvent::UncheckedProposal((unchecked_proposal, _)) = event { + if unchecked_proposal.params.v == Version::One { + output_substitution = OutputSubstitution::Disabled; + } + break; + } + } + Some(crate::receive::v2::pj_uri(session_context, output_substitution)) } /// Fallback transaction from the session if present