mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-10-22 19:26:13 +02:00
background - persistence pipeline - fix persistence bug
This commit is contained in:
parent
451d05a400
commit
7b414f3ed0
@ -16,6 +16,7 @@ const ExtensionPlatform = require('./platforms/extension')
|
|||||||
const Migrator = require('./lib/migrator/')
|
const Migrator = require('./lib/migrator/')
|
||||||
const migrations = require('./migrations/')
|
const migrations = require('./migrations/')
|
||||||
const PortStream = require('./lib/port-stream.js')
|
const PortStream = require('./lib/port-stream.js')
|
||||||
|
const createStreamSink = require('./lib/createStreamSink')
|
||||||
const NotificationManager = require('./lib/notification-manager.js')
|
const NotificationManager = require('./lib/notification-manager.js')
|
||||||
const MetamaskController = require('./metamask-controller')
|
const MetamaskController = require('./metamask-controller')
|
||||||
const firstTimeState = require('./first-time-state')
|
const firstTimeState = require('./first-time-state')
|
||||||
@ -273,7 +274,7 @@ function setupController (initState, initLangCode) {
|
|||||||
asStream(controller.store),
|
asStream(controller.store),
|
||||||
debounce(1000),
|
debounce(1000),
|
||||||
storeTransform(versionifyData),
|
storeTransform(versionifyData),
|
||||||
storeTransform(persistData),
|
createStreamSink(persistData),
|
||||||
(error) => {
|
(error) => {
|
||||||
log.error('MetaMask - Persistence pipeline failed', error)
|
log.error('MetaMask - Persistence pipeline failed', error)
|
||||||
}
|
}
|
||||||
@ -289,7 +290,7 @@ function setupController (initState, initLangCode) {
|
|||||||
return versionedData
|
return versionedData
|
||||||
}
|
}
|
||||||
|
|
||||||
function persistData (state) {
|
async function persistData (state) {
|
||||||
if (!state) {
|
if (!state) {
|
||||||
throw new Error('MetaMask - updated state is missing', 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)
|
throw new Error('MetaMask - updated state does not have data', state)
|
||||||
}
|
}
|
||||||
if (localStore.isSupported) {
|
if (localStore.isSupported) {
|
||||||
localStore.set(state)
|
try {
|
||||||
.catch((err) => {
|
await localStore.set(state)
|
||||||
|
} catch (err) {
|
||||||
|
// log error so we dont break the pipeline
|
||||||
log.error('error setting state in local store:', err)
|
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