diff --git a/package.json b/package.json index 5a99fba..cf7474e 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/screens/SendScreen.tsx b/src/screens/SendScreen.tsx index 17868bc..ad8f5b1 100644 --- a/src/screens/SendScreen.tsx +++ b/src/screens/SendScreen.tsx @@ -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 diff --git a/src/screens/TopupScreen.tsx b/src/screens/TopupScreen.tsx index 609945a..aa66782 100644 --- a/src/screens/TopupScreen.tsx +++ b/src/screens/TopupScreen.tsx @@ -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, diff --git a/src/screens/TranDetailScreen.tsx b/src/screens/TranDetailScreen.tsx index 6862cd6..daeba75 100644 --- a/src/screens/TranDetailScreen.tsx +++ b/src/screens/TranDetailScreen.tsx @@ -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 } diff --git a/src/services/wallet/receiveTask.ts b/src/services/wallet/receiveTask.ts index 4b37b5e..506f83a 100644 --- a/src/services/wallet/receiveTask.ts +++ b/src/services/wallet/receiveTask.ts @@ -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), diff --git a/src/services/wallet/revertTask.ts b/src/services/wallet/revertTask.ts index 2d5bdd3..93356c2 100644 --- a/src/services/wallet/revertTask.ts +++ b/src/services/wallet/revertTask.ts @@ -24,7 +24,12 @@ export const revertTask = async function ( ): Promise { -const transactionData = JSON.parse(transaction.data) +let transactionData = [] + +try { + transactionData = JSON.parse(transaction.data) +} catch (e) {} + const unit = transaction.unit as MintUnit try { diff --git a/src/services/walletService.ts b/src/services/walletService.ts index c21cd2d..860d331 100644 --- a/src/services/walletService.ts +++ b/src/services/walletService.ts @@ -1174,12 +1174,17 @@ const handleInFlightByMintTask = async function (mint: Mint): Promise