mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge pull request #4570 from MetaMask/persistence-stream-fix
background - persistence pipeline - fix persistence bug
This commit is contained in:
commit
66c77dc2bd
@ -2,6 +2,7 @@
|
||||
|
||||
## Current Master
|
||||
|
||||
- Fix bug where metamask data would stop being written to disk after prolonged use
|
||||
- Fix bug where account reset did not work with custom RPC providers.
|
||||
- Fix bug where nonce mutex was never released
|
||||
- Stop reloading browser page on Ethereum network change
|
||||
|
@ -16,6 +16,7 @@ const ExtensionPlatform = require('./platforms/extension')
|
||||
const Migrator = require('./lib/migrator/')
|
||||
const migrations = require('./migrations/')
|
||||
const PortStream = require('./lib/port-stream.js')
|
||||
const createStreamSink = require('./lib/createStreamSink')
|
||||
const NotificationManager = require('./lib/notification-manager.js')
|
||||
const MetamaskController = require('./metamask-controller')
|
||||
const firstTimeState = require('./first-time-state')
|
||||
@ -273,7 +274,7 @@ function setupController (initState, initLangCode) {
|
||||
asStream(controller.store),
|
||||
debounce(1000),
|
||||
storeTransform(versionifyData),
|
||||
storeTransform(persistData),
|
||||
createStreamSink(persistData),
|
||||
(error) => {
|
||||
log.error('MetaMask - Persistence pipeline failed', error)
|
||||
}
|
||||
@ -289,7 +290,7 @@ function setupController (initState, initLangCode) {
|
||||
return versionedData
|
||||
}
|
||||
|
||||
function persistData (state) {
|
||||
async function persistData (state) {
|
||||
if (!state) {
|
||||
throw new Error('MetaMask - updated state is missing', state)
|
||||
}
|
||||
@ -297,12 +298,13 @@ function setupController (initState, initLangCode) {
|
||||
throw new Error('MetaMask - updated state does not have data', state)
|
||||
}
|
||||
if (localStore.isSupported) {
|
||||
localStore.set(state)
|
||||
.catch((err) => {
|
||||
try {
|
||||
await localStore.set(state)
|
||||
} catch (err) {
|
||||
// log error so we dont break the pipeline
|
||||
log.error('error setting state in local store:', err)
|
||||
})
|
||||
}
|
||||
}
|
||||
return state
|
||||
}
|
||||
|
||||
//
|
||||
|
24
app/scripts/lib/createStreamSink.js
Normal file
24
app/scripts/lib/createStreamSink.js
Normal file
@ -0,0 +1,24 @@
|
||||
const WritableStream = require('readable-stream').Writable
|
||||
const promiseToCallback = require('promise-to-callback')
|
||||
|
||||
module.exports = createStreamSink
|
||||
|
||||
|
||||
function createStreamSink(asyncWriteFn, _opts) {
|
||||
return new AsyncWritableStream(asyncWriteFn, _opts)
|
||||
}
|
||||
|
||||
class AsyncWritableStream extends WritableStream {
|
||||
|
||||
constructor (asyncWriteFn, _opts) {
|
||||
const opts = Object.assign({ objectMode: true }, _opts)
|
||||
super(opts)
|
||||
this._asyncWriteFn = asyncWriteFn
|
||||
}
|
||||
|
||||
// write from incomming stream to state
|
||||
_write (chunk, encoding, callback) {
|
||||
promiseToCallback(this._asyncWriteFn(chunk, encoding))(callback)
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user