diff options
author | Dan Finlay <542863+danfinlay@users.noreply.github.com> | 2018-11-17 13:27:01 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-17 13:27:01 +0800 |
commit | fdea642e6d5b23d4573759e4f1a1f4016557c0be (patch) | |
tree | f72b545aa959014be4e0ec53f75cf3b0d4bbf785 /app/scripts/migrations/fail-tx.js | |
parent | 1988e1e96b09a47ad5428083bb2ed38cb2d7e0a8 (diff) | |
download | tangerine-wallet-browser-fdea642e6d5b23d4573759e4f1a1f4016557c0be.tar.gz tangerine-wallet-browser-fdea642e6d5b23d4573759e4f1a1f4016557c0be.tar.zst tangerine-wallet-browser-fdea642e6d5b23d4573759e4f1a1f4016557c0be.zip |
Auto fail transactions that have been approved for over 12 hours (#5765)
* Auto fail transactions that have been approved for over 12 hours
Converts txs using a migration.
This migration uses a new helper function that generates tx-failing
migrations, and only requires a version, error message, and condition to
run on each transaction.
* Linted
* Only migrate approved txs to failed
* Cleanup
* Cleanup
* Small lint fixes
Diffstat (limited to 'app/scripts/migrations/fail-tx.js')
-rw-r--r-- | app/scripts/migrations/fail-tx.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/app/scripts/migrations/fail-tx.js b/app/scripts/migrations/fail-tx.js new file mode 100644 index 000000000..98e3ffddb --- /dev/null +++ b/app/scripts/migrations/fail-tx.js @@ -0,0 +1,41 @@ +const clone = require('clone') + +module.exports = function (version, reason, condition) { + return function (originalVersionedData) { + const versionedData = clone(originalVersionedData) + versionedData.meta.version = version + try { + const state = versionedData.data + const newState = transformState(state, condition, reason) + versionedData.data = newState + } catch (err) { + console.warn(`MetaMask Migration #${version}` + err.stack) + } + return Promise.resolve(versionedData) + + } +} + +function transformState (state, condition, reason) { + const newState = state + const { TransactionController } = newState + if (TransactionController && TransactionController.transactions) { + const transactions = TransactionController.transactions + + newState.TransactionController.transactions = transactions.map((txMeta) => { + if (!condition(txMeta)) { + return txMeta + } + + txMeta.status = 'failed' + txMeta.err = { + message: reason, + note: `Tx automatically failed by migration because ${reason}`, + } + + return txMeta + }) + } + return newState +} + |