readability improvements
This commit is contained in:
parent
f9169c645a
commit
67f6c170aa
|
@ -144,7 +144,7 @@ export function useWalletLogManager (setLogs) {
|
|||
}
|
||||
if (!wallet || wallet.sendPayment) {
|
||||
try {
|
||||
const tag = wallet ? walletTag(wallet) : null
|
||||
const tag = wallet ? walletTag(wallet.def) : null
|
||||
if (notSupported) {
|
||||
console.log('cannot clear wallet logs: indexeddb not supported')
|
||||
} else {
|
||||
|
|
|
@ -58,7 +58,14 @@ export class WalletAggregateError extends WalletError {
|
|||
constructor (errors, invoice) {
|
||||
super('WalletAggregateError')
|
||||
this.name = 'WalletAggregateError'
|
||||
this.errors = errors
|
||||
this.errors = errors.reduce((acc, e) => {
|
||||
if (Array.isArray(e?.errors)) {
|
||||
acc.push(...e.errors)
|
||||
} else {
|
||||
acc.push(e)
|
||||
}
|
||||
return acc
|
||||
}, [])
|
||||
this.invoice = invoice
|
||||
}
|
||||
}
|
||||
|
@ -67,11 +74,14 @@ export class WalletPaymentAggregateError extends WalletPaymentError {
|
|||
constructor (errors, invoice) {
|
||||
super('WalletPaymentAggregateError')
|
||||
this.name = 'WalletPaymentAggregateError'
|
||||
this.errors = errors
|
||||
this.errors = errors.reduce((acc, e) => {
|
||||
if (Array.isArray(e?.errors)) {
|
||||
acc.push(...e.errors)
|
||||
} else {
|
||||
acc.push(e)
|
||||
}
|
||||
return acc
|
||||
}, []).filter(e => e instanceof WalletPaymentError)
|
||||
this.invoice = invoice
|
||||
|
||||
if (!errors.every(e => e instanceof WalletPaymentError)) {
|
||||
throw new Error('only WalletPaymentError instances are allowed')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,22 +16,21 @@ export function useWalletPayment () {
|
|||
const invoiceHelper = useInvoice()
|
||||
|
||||
return useCallback(async (invoice, { waitFor }) => {
|
||||
let walletError = new WalletAggregateError([])
|
||||
let walletInvoice = invoice
|
||||
let aggregateError = new WalletAggregateError([])
|
||||
let latestInvoice = invoice
|
||||
|
||||
// throw a special error that caller can handle separately if no payment was attempted
|
||||
const noWalletAvailable = wallets.length === 0
|
||||
if (noWalletAvailable) {
|
||||
if (wallets.length === 0) {
|
||||
throw new WalletsNotAvailableError()
|
||||
}
|
||||
|
||||
for (const [i, wallet] of wallets.entries()) {
|
||||
const controller = invoiceController(walletInvoice, invoiceHelper.isInvoice)
|
||||
const controller = invoiceController(latestInvoice, invoiceHelper.isInvoice)
|
||||
try {
|
||||
return await new Promise((resolve, reject) => {
|
||||
// can't await wallet payments since we might pay hold invoices and thus payments might not settle immediately.
|
||||
// that's why we separately check if we received the payment with the invoice controller.
|
||||
sendPayment(wallet, walletInvoice).catch(reject)
|
||||
sendPayment(wallet, latestInvoice).catch(reject)
|
||||
controller.wait(waitFor)
|
||||
.then(resolve)
|
||||
.catch(reject)
|
||||
|
@ -39,14 +38,13 @@ export function useWalletPayment () {
|
|||
} catch (err) {
|
||||
// cancel invoice to make sure it cannot be paid later and create new invoice to retry.
|
||||
// we only need to do this if payment was attempted which is not the case if the wallet is not enabled.
|
||||
const paymentAttempt = err instanceof WalletPaymentError
|
||||
if (paymentAttempt) {
|
||||
await invoiceHelper.cancel(walletInvoice)
|
||||
if (err instanceof WalletPaymentError) {
|
||||
await invoiceHelper.cancel(latestInvoice)
|
||||
|
||||
// is there another wallet to try?
|
||||
const lastAttempt = i === wallets.length - 1
|
||||
if (!lastAttempt) {
|
||||
walletInvoice = await invoiceHelper.retry(walletInvoice)
|
||||
latestInvoice = await invoiceHelper.retry(latestInvoice)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -57,9 +55,8 @@ export function useWalletPayment () {
|
|||
|
||||
// try next wallet if the payment failed because of the wallet
|
||||
// and not because it expired or was canceled
|
||||
const isWalletError = err instanceof WalletError
|
||||
if (isWalletError) {
|
||||
walletError = new WalletAggregateError([...walletError.errors, err], walletInvoice)
|
||||
if (err instanceof WalletError) {
|
||||
aggregateError = new WalletAggregateError([aggregateError, err], latestInvoice)
|
||||
continue
|
||||
}
|
||||
|
||||
|
@ -71,9 +68,7 @@ export function useWalletPayment () {
|
|||
}
|
||||
|
||||
// if we reach this line, no wallet payment succeeded
|
||||
// only return payment errors
|
||||
const paymentErrors = walletError.errors.filter(e => e instanceof WalletPaymentError)
|
||||
throw new WalletPaymentAggregateError(paymentErrors, walletInvoice)
|
||||
throw new WalletPaymentAggregateError([aggregateError], latestInvoice)
|
||||
}, [wallets, invoiceHelper, sendPayment])
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue