PaymentResponse.complete("fail") IS leaving the payment sheet open until it closes after the second attempt when it's no longer bound to the promise. I tried PaymentResponse.retry() and had the same experience where the first attempt stated Payment Failed, and to try a different card, and the second had a timeout waiting for the client callback.