aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/lib
diff options
context:
space:
mode:
Diffstat (limited to 'app/scripts/lib')
-rw-r--r--app/scripts/lib/eth-store.js2
-rw-r--r--app/scripts/lib/message-manager.js35
-rw-r--r--app/scripts/lib/migrator/index.js13
3 files changed, 41 insertions, 9 deletions
diff --git a/app/scripts/lib/eth-store.js b/app/scripts/lib/eth-store.js
index 96b4a60f2..773c81d1b 100644
--- a/app/scripts/lib/eth-store.js
+++ b/app/scripts/lib/eth-store.js
@@ -25,6 +25,8 @@ class EthereumStore extends ObservableStore {
this._blockTracker = opts.blockTracker
// subscribe to latest block
this._blockTracker.on('block', this._updateForBlock.bind(this))
+ // blockTracker.currentBlock may be null
+ this._currentBlockNumber = this._blockTracker.currentBlock
}
//
diff --git a/app/scripts/lib/message-manager.js b/app/scripts/lib/message-manager.js
index 38fa42017..ceaf8ee2f 100644
--- a/app/scripts/lib/message-manager.js
+++ b/app/scripts/lib/message-manager.js
@@ -1,5 +1,6 @@
const EventEmitter = require('events')
const ObservableStore = require('obs-store')
+const ethUtil = require('ethereumjs-util')
const createId = require('./random-id')
@@ -23,6 +24,7 @@ module.exports = class MessageManager extends EventEmitter{
}
addUnapprovedMessage (msgParams) {
+ msgParams.data = normalizeMsgData(msgParams.data)
// create txData obj with parameters and meta data
var time = (new Date()).getTime()
var msgId = createId()
@@ -57,32 +59,39 @@ module.exports = class MessageManager extends EventEmitter{
this._setMsgStatus(msgId, 'approved')
}
+ setMsgStatusSigned (msgId, rawSig) {
+ const msg = this.getMsg(msgId)
+ msg.rawSig = rawSig
+ this._updateMsg(msg)
+ this._setMsgStatus(msgId, 'signed')
+ }
+
prepMsgForSigning (msgParams) {
delete msgParams.metamaskId
return Promise.resolve(msgParams)
}
rejectMsg (msgId) {
- this.brodcastMessage(null, msgId, 'rejected')
this._setMsgStatus(msgId, 'rejected')
}
- brodcastMessage (rawSig, msgId, status) {
- this.emit(`${msgId}:finished`, {status, rawSig})
- }
-
//
// PRIVATE METHODS
//
_setMsgStatus (msgId, status) {
- let msg = this.getMsg(msgId)
- if (msg) msg.status = status
+ const msg = this.getMsg(msgId)
+ if (!msg) throw new Error('MessageManager - Message not found for id: "${msgId}".')
+ msg.status = status
this._updateMsg(msg)
+ this.emit(`${msgId}:${status}`, msg)
+ if (status === 'rejected' || status === 'signed') {
+ this.emit(`${msgId}:finished`, msg)
+ }
}
_updateMsg (msg) {
- let index = this.messages.findIndex((message) => message.id === msg.id)
+ const index = this.messages.findIndex((message) => message.id === msg.id)
if (index !== -1) {
this.messages[index] = msg
}
@@ -97,3 +106,13 @@ module.exports = class MessageManager extends EventEmitter{
}
}
+
+function normalizeMsgData(data) {
+ if (data.slice(0, 2) === '0x') {
+ // data is already hex
+ return data
+ } else {
+ // data is unicode, convert to hex
+ return ethUtil.bufferToHex(new Buffer(data, 'utf8'))
+ }
+} \ No newline at end of file
diff --git a/app/scripts/lib/migrator/index.js b/app/scripts/lib/migrator/index.js
index ab5a757b3..312345263 100644
--- a/app/scripts/lib/migrator/index.js
+++ b/app/scripts/lib/migrator/index.js
@@ -15,7 +15,7 @@ class Migrator {
let remaining = this.migrations.filter(migrationIsPending)
return (
- asyncQ.eachSeries(remaining, (migration) => migration.migrate(versionedData))
+ asyncQ.eachSeries(remaining, (migration) => this.runMigration(versionedData, migration))
.then(() => versionedData)
)
@@ -26,6 +26,17 @@ class Migrator {
}
}
+ runMigration(versionedData, migration) {
+ return (
+ migration.migrate(versionedData)
+ .then((versionedData) => {
+ if (!versionedData.data) return Promise.reject(new Error('Migrator - Migration returned empty data'))
+ if (migration.version !== undefined && versionedData.meta.version !== migration.version) return Promise.reject(new Error('Migrator - Migration did not update version number correctly'))
+ return Promise.resolve(versionedData)
+ })
+ )
+ }
+
generateInitialState (initState) {
return {
meta: {