Fix setting transaction ERROR or EXPIRED statuses

This commit is contained in:
minibits-cash
2026-09-25 10:18:38 +02:00
parent ab07a29dd1
commit d10d3893e3
2 changed files with 16 additions and 4 deletions
+2
View File
@@ -88,6 +88,8 @@ export const sendTask = async function (
} as TransactionTaskResult
} catch (e: any) {
// Mark the tx ERROR if one was created during prepare.
// prepare() errors thrown after the draft exists carry its transactionId.
transactionIdForRecovery ??= e?.params?.transactionId
if (transactionIdForRecovery) {
const tx = transactionsStore.findById(transactionIdForRecovery)
if (tx) {
+14 -4
View File
@@ -100,6 +100,9 @@ export const transferTask = async function (
nwcEvent,
} as TransactionTaskResult
} catch (e: any) {
// prepare() may throw after creating the draft (e.g. expired invoice); its
// errors carry the transactionId so the draft still gets stamped ERROR/EXPIRED.
transactionIdForRecovery ??= e?.params?.transactionId
let txAfterError = transactionIdForRecovery
? transactionsStore.findById(transactionIdForRecovery)
: undefined
@@ -111,15 +114,17 @@ export const transferTask = async function (
txAfterError.status !== TransactionStatus.RECOVERED &&
txAfterError.status !== TransactionStatus.ERROR
) {
// Only prepare's expiry check puts `expiry` in the error params.
const status = e?.params?.expiry ? TransactionStatus.EXPIRED : TransactionStatus.ERROR
let transactionData: TransactionData[] = []
try { transactionData = JSON.parse(txAfterError.data) } catch {}
transactionData.push({
status: TransactionStatus.ERROR,
status,
error: WalletUtils.formatError(e),
createdAt: new Date(),
})
txAfterError.update({
status: TransactionStatus.ERROR,
status,
data: JSON.stringify(transactionData),
})
}
@@ -216,6 +221,9 @@ export const transferOnchainTask = async function (
nwcEvent,
} as TransactionTaskResult
} catch (e: any) {
// prepare() may throw after creating the draft (e.g. expired invoice); its
// errors carry the transactionId so the draft still gets stamped ERROR/EXPIRED.
transactionIdForRecovery ??= e?.params?.transactionId
const txAfterError = transactionIdForRecovery
? transactionsStore.findById(transactionIdForRecovery)
: undefined
@@ -228,15 +236,17 @@ export const transferOnchainTask = async function (
txAfterError.status !== TransactionStatus.RECOVERED &&
txAfterError.status !== TransactionStatus.ERROR
) {
// Only prepare's expiry check puts `expiry` in the error params.
const status = e?.params?.expiry ? TransactionStatus.EXPIRED : TransactionStatus.ERROR
let transactionData: TransactionData[] = []
try { transactionData = JSON.parse(txAfterError.data) } catch {}
transactionData.push({
status: TransactionStatus.ERROR,
status,
error: WalletUtils.formatError(e),
createdAt: new Date(),
})
txAfterError.update({
status: TransactionStatus.ERROR,
status,
data: JSON.stringify(transactionData),
})
}