From 9c921590b837dd01a5f56e8d2179fa1a4fc2621b Mon Sep 17 00:00:00 2001 From: michael1011 Date: Sat, 1 Feb 2025 08:11:52 -0600 Subject: [PATCH] fix: make xpay exit handling more reliable (#802) --- lib/lightning/PendingPaymentTracker.ts | 4 ++-- .../paymentTrackers/ClnPendingPaymentTracker.ts | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/lightning/PendingPaymentTracker.ts b/lib/lightning/PendingPaymentTracker.ts index 29721b5a..bf37b321 100644 --- a/lib/lightning/PendingPaymentTracker.ts +++ b/lib/lightning/PendingPaymentTracker.ts @@ -1,6 +1,6 @@ import Logger from '../Logger'; import { racePromise } from '../PromiseUtils'; -import { formatError, getHexBuffer, getHexString } from '../Utils'; +import { getHexBuffer, getHexString } from '../Utils'; import DefaultMap from '../consts/DefaultMap'; import LightningPayment, { LightningPaymentStatus, @@ -233,7 +233,7 @@ class PendingPaymentTracker { if ( lightningClient.type === NodeType.CLN && !isPermanentError && - formatError(e).includes('xpay') + ClnPendingPaymentTracker.shouldBeWatched(e) ) { this.lightningTrackers[lightningClient.type].watchPayment( lightningClient, diff --git a/lib/lightning/paymentTrackers/ClnPendingPaymentTracker.ts b/lib/lightning/paymentTrackers/ClnPendingPaymentTracker.ts index ac4e2884..6a7b66e7 100644 --- a/lib/lightning/paymentTrackers/ClnPendingPaymentTracker.ts +++ b/lib/lightning/paymentTrackers/ClnPendingPaymentTracker.ts @@ -29,6 +29,15 @@ class ClnPendingPaymentTracker extends NodePendingPendingTracker { ); } + public static shouldBeWatched = (error: unknown) => { + const msg = formatError(error); + return ( + (msg.includes('Failed after') && msg.includes('attempts')) || + msg.includes('xpay') || + msg === 'Connection dropped' + ); + }; + public stop = () => { clearInterval(this.checkInterval as unknown as number); }; @@ -42,12 +51,10 @@ class ClnPendingPaymentTracker extends NodePendingPendingTracker { promise .then((result) => this.handleSucceededPayment(preimageHash, result)) .catch((error) => { - const msg = formatError(error); - // CLN xpay throws errors while the payment is still pending if ( !this.isPermanentError(error) && - (msg.includes('xpay') || msg === 'Connection dropped') + ClnPendingPaymentTracker.shouldBeWatched(error) ) { this.watchPayment(client, invoice, preimageHash); } else {