@@ -49,15 +49,15 @@ struct WithdrawRequest {
4949
5050enum WithdrawRequestMethod {
5151 case bolt11Invoice( invoice: Lightning_kmpBolt11Invoice )
52- case bolt12Offer ( offer : Lightning_kmpOfferTypesOffer )
52+ case bolt12Invoice ( invoice : Lightning_kmpBolt12Invoice )
5353
5454 func encode( ) -> String {
5555 switch self {
5656 case . bolt11Invoice( let invoice) :
5757 return invoice. write ( )
5858
59- case . bolt12Offer ( let offer ) :
60- return offer . encode ( )
59+ case . bolt12Invoice ( let invoice ) :
60+ return invoice . write ( )
6161 }
6262 }
6363
@@ -66,8 +66,8 @@ enum WithdrawRequestMethod {
6666 case . bolt11Invoice( let invoice) :
6767 return invoice. description_
6868
69- case . bolt12Offer ( let offer ) :
70- return offer . description_
69+ case . bolt12Invoice ( let invoice ) :
70+ return invoice . description_
7171 }
7272 }
7373}
@@ -99,7 +99,7 @@ enum WithdrawRequestError: Error, CustomStringConvertible {
9999 case . frozenCard : return " frozen card "
100100 case . dailyLimitExceeded : return " daily limit exceeded "
101101 case . monthlyLimitExceeded : return " monthly limit exceeded "
102- case . badInvoice : return " bad invoice "
102+ case . badInvoice( _ , let details ) : return " bad invoice: \( details ) "
103103 case . alreadyPaidInvoice : return " already paid invoice "
104104 case . paymentPending : return " payment pending "
105105 case . internalError( _, let details) : return " internal error: \( details) "
@@ -218,30 +218,31 @@ extension PhoenixBusiness {
218218 // Step 4 of 7:
219219 // Validate the invoice.
220220 //
221- // We know the invoice is a proper Bolt 11 invoice.
222- // But the SendManager performs additional checks such as:
223- // - chain mismatch
221+ // We know the invoice is technically valid (not malformed),
222+ // but there are additional checks we need to perform such as:
223+ //
224+ // - chain mismatch (e.g. invoice is for mainnet but we're on testnet)
224225 // - invoice is expired
225226 // - already paid invoice
226227 // - invoice has payment pending
227228 //
228- // So we use the SendManager to perform those checks.
229- //
230- // Note that we already know the input is Bolt11 invoice,
231- // so we know which route it will take thru the parser.
229+ // The SendManager has standardized code to perform these checks.
232230
233231 do {
234- let result : SendManager . ParseResult =
235- try await self . sendManager. parse (
236- request: request. method. encode ( ) ,
237- progress: { _ in /* ignore */ }
238- )
232+ let badRequestReason : SendManager . BadRequestReason ?
239233
240- switch onEnum ( of : result ) {
241- case . badRequest ( let badRequest ) :
242- log . debug ( " SendManager.ParseResult = BadRequest: \( badRequest ) " )
234+ switch request . method {
235+ case . bolt11Invoice ( let invoice ) :
236+ badRequestReason = try await self . sendManager . checkForBadBolt11Invoice ( invoice : invoice )
243237
244- switch onEnum ( of: badRequest. reason) {
238+ case . bolt12Invoice( let invoice) :
239+ badRequestReason = try await self . sendManager. checkForBadBolt12Invoice ( invoice: invoice)
240+ }
241+
242+ if let badRequestReason {
243+ log. debug ( " SendManager.BadRequestReason: \( badRequestReason) " )
244+
245+ switch onEnum ( of: badRequestReason) {
245246 case . alreadyPaidInvoice( _) :
246247 return await asyncDeferred ( . failure( . alreadyPaidInvoice( card: matchingCard) ) )
247248
@@ -257,14 +258,11 @@ extension PhoenixBusiness {
257258 default :
258259 return await asyncDeferred ( . failure( . badInvoice( card: matchingCard, details: " parse error " ) ) )
259260 }
260-
261- case . success( _) :
262- log. debug ( " SendManager.ParseResult = Success " )
263261 }
264262
265263 } catch {
266- log. error ( " SendManager.parse() : threw error: \( error) " )
267- return await asyncDeferred ( . failure( . internalError( card: matchingCard, details: " parse error" ) ) )
264+ log. error ( " SendManager.checkForBadBolt1XInvoice : threw error: \( error) " )
265+ return await asyncDeferred ( . failure( . internalError( card: matchingCard, details: " validation error" ) ) )
268266 }
269267
270268 // Step 5 of 7:
0 commit comments