mirror of
https://github.com/minibits-cash/minibits_wallet.git
synced 2026-08-12 09:23:20 +00:00
Bugfix: Prevent crash if transactionData can not be parsed
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "minibits_wallet",
|
||||
"version": "0.2.2-beta.21",
|
||||
"version": "0.2.2-beta.22",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"android:clean": "cd android && ./gradlew clean",
|
||||
|
||||
@@ -839,8 +839,12 @@ export const SendScreen = observer(function SendScreen({ route }: Props) {
|
||||
if(!transaction || !transaction.data) {
|
||||
return
|
||||
}
|
||||
|
||||
const updated = JSON.parse(transaction.data)
|
||||
|
||||
let updated = []
|
||||
|
||||
try {
|
||||
updated = JSON.parse(transaction.data)
|
||||
} catch (e) {}
|
||||
|
||||
if(updated.length > 2) {
|
||||
updated[2].sentToRelays = relaysToShareTo
|
||||
|
||||
@@ -538,7 +538,11 @@ export const TopupScreen = observer(function TopupScreen({ route }: Props) {
|
||||
return
|
||||
}
|
||||
|
||||
const updated = JSON.parse(transaction.data)
|
||||
let updated = []
|
||||
|
||||
try {
|
||||
updated = JSON.parse(transaction.data)
|
||||
} catch (e) {}
|
||||
|
||||
if (updated.length > 1) {
|
||||
updated[1].sentToRelays = relaysToShareTo
|
||||
@@ -593,7 +597,11 @@ export const TopupScreen = observer(function TopupScreen({ route }: Props) {
|
||||
)
|
||||
}
|
||||
|
||||
const updated = JSON.parse(transaction.data)
|
||||
let updated = []
|
||||
|
||||
try {
|
||||
updated = JSON.parse(transaction.data)
|
||||
} catch (e) {}
|
||||
|
||||
updated.push({
|
||||
status: TransactionStatus.ERROR,
|
||||
|
||||
@@ -594,17 +594,17 @@ const ReceiveInfoBlock = function (props: {
|
||||
|
||||
// In case of error status, allow the retry for specific error messages
|
||||
if(transaction.status === TransactionStatus.ERROR) {
|
||||
const auditTrail = JSON.parse(transaction.data)
|
||||
let auditTrail = getAuditTrail(transaction)
|
||||
|
||||
const errorRecord = auditTrail.find(
|
||||
(record: any) => record.status === 'ERROR',
|
||||
)
|
||||
|
||||
const {error} = errorRecord
|
||||
|
||||
|
||||
if(error && error.message) {
|
||||
if(error.message.toLowerCase().includes('network') ||
|
||||
error.message.toLowerCase().includes('gateway') ||
|
||||
error.message.toLowerCase().includes('outputs')) {
|
||||
if(errorRecord) {
|
||||
const {error} = errorRecord
|
||||
|
||||
if(error.message && ['network', 'gateway', 'outputs'].some(word => error.message.toLowerCase().includes(word))) {
|
||||
setIsRetriable(true)
|
||||
|
||||
if(error.message.toLowerCase().includes('outputs')) {
|
||||
@@ -1711,7 +1711,7 @@ const TransferInfoBlock = function (props: {
|
||||
log.trace('[onRevertPreparedTransfer]', {tId: transaction.id})
|
||||
|
||||
const pendingProofs = proofsStore.getByTransactionId(transaction.id!, true) // PREPARED should always pending
|
||||
const transactionData = isDataParsable ? JSON.parse(transaction.data) : []
|
||||
const transactionData = getAuditTrail(transaction)
|
||||
|
||||
if(pendingProofs.length > 0) {
|
||||
// remove it from pending proofs in the wallet
|
||||
@@ -1998,22 +1998,12 @@ export const TranItem = function (props: {
|
||||
|
||||
|
||||
const getAuditTrail = function (transaction: Transaction) {
|
||||
let data = []
|
||||
try {
|
||||
const data = JSON.parse(transaction.data)
|
||||
data = JSON.parse(transaction.data)
|
||||
} catch (e) {}
|
||||
|
||||
if (data && isArray(data)) {
|
||||
return data
|
||||
/* for (const item of data) {
|
||||
if(item.status === TransactionStatus.ERROR) {
|
||||
return item
|
||||
}
|
||||
}*/
|
||||
}
|
||||
return false
|
||||
} catch (e) {
|
||||
// silent
|
||||
return false
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -286,7 +286,11 @@ export const receiveOfflineCompleteTask = async function (
|
||||
throw new AppError(Err.VALIDATION_ERROR, 'Could not retrieve transaction.', {transactionId})
|
||||
}
|
||||
|
||||
const transactionData = JSON.parse(transaction.data)
|
||||
let transactionData = []
|
||||
|
||||
try {
|
||||
transactionData = JSON.parse(transaction.data)
|
||||
} catch (e) {}
|
||||
|
||||
if (!transaction.inputToken) {
|
||||
throw new AppError(Err.VALIDATION_ERROR, 'Could not find ecash token to redeem', {caller: 'receiveOfflineComplete'})
|
||||
@@ -366,7 +370,12 @@ export const receiveOfflineCompleteTask = async function (
|
||||
// release lock
|
||||
if(transaction) {
|
||||
|
||||
const transactionData = JSON.parse(transaction.data)
|
||||
let transactionData = []
|
||||
|
||||
try {
|
||||
transactionData = JSON.parse(transaction.data)
|
||||
} catch (e) {}
|
||||
|
||||
transactionData.push({
|
||||
status: TransactionStatus.ERROR,
|
||||
error: WalletUtils.formatError(e),
|
||||
|
||||
@@ -24,7 +24,12 @@ export const revertTask = async function (
|
||||
): Promise<TransactionTaskResult> {
|
||||
|
||||
|
||||
const transactionData = JSON.parse(transaction.data)
|
||||
let transactionData = []
|
||||
|
||||
try {
|
||||
transactionData = JSON.parse(transaction.data)
|
||||
} catch (e) {}
|
||||
|
||||
const unit = transaction.unit as MintUnit
|
||||
|
||||
try {
|
||||
|
||||
@@ -1174,12 +1174,17 @@ const handleInFlightByMintTask = async function (mint: Mint): Promise<WalletTask
|
||||
for(const inFlight of counter.inFlightRequests) {
|
||||
|
||||
const transaction = transactionsStore.findById(inFlight.transactionId)
|
||||
const transactionData = JSON.parse(transaction.data)
|
||||
|
||||
if(!transaction) {
|
||||
counter.removeInFlightRequest(inFlight.transactionId)
|
||||
continue
|
||||
}
|
||||
|
||||
let transactionData = []
|
||||
|
||||
try {
|
||||
transactionData = JSON.parse(transaction.data)
|
||||
} catch (e) {}
|
||||
|
||||
const {mint, unit} = transaction
|
||||
|
||||
@@ -1583,8 +1588,13 @@ const handlePendingTopupTask = async function (params: {transaction: Transaction
|
||||
} = transaction
|
||||
|
||||
log.trace('[handlePendingTopupTask] start', transaction)
|
||||
|
||||
let transactionData = []
|
||||
|
||||
try {
|
||||
transactionData = JSON.parse(transaction.data)
|
||||
} catch (e) {}
|
||||
|
||||
const transactionData = JSON.parse(transaction.data)
|
||||
const mintInstance = mintsStore.findByUrl(mintUrl as string)
|
||||
|
||||
try {
|
||||
@@ -1800,8 +1810,7 @@ const recoverMintQuote = async function (params: {mintUrl: string, mintQuote: st
|
||||
}
|
||||
// store tx in db and in the model
|
||||
const transaction = await transactionsStore.addTransaction(newTransaction)
|
||||
const transactionId = transaction.id
|
||||
const transactioData = JSON.parse(transaction.data)
|
||||
const transactionId = transaction.id
|
||||
|
||||
let proofs: CashuProof[] = []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user