diff options
Diffstat (limited to 'app/scripts/lib/message-manager.js')
-rw-r--r-- | app/scripts/lib/message-manager.js | 77 |
1 files changed, 67 insertions, 10 deletions
diff --git a/app/scripts/lib/message-manager.js b/app/scripts/lib/message-manager.js index 379f38917..bc9a9e6c8 100644 --- a/app/scripts/lib/message-manager.js +++ b/app/scripts/lib/message-manager.js @@ -1,23 +1,61 @@ const EventEmitter = require('events') +const ObservableStore = require('obs-store') +const createId = require('./random-id') + module.exports = class MessageManager extends EventEmitter{ constructor (opts) { super() - this.messages = [] + this.memStore = new ObservableStore({ messages: [] }) + } + + getState() { + return { + unapprovedMsgs: this.unapprovedMsgs(), + messages: this.getMsgList(), + } } getMsgList () { - return this.messages + return this.memStore.getState().messages } - unconfirmedMsgs () { + get unapprovedMsgCount () { + return Object.keys(this.unapprovedMsgs()).length + } + + unapprovedMsgs () { let messages = this.getMsgList() - return messages.filter(msg => msg.status === 'unconfirmed') + return messages.filter(msg => msg.status === 'unapproved') .reduce((result, msg) => { result[msg.id] = msg; return result }, {}) } _saveMsgList (msgList) { - this.messages = msgList + this.emit('updateBadge') + let state = this.memStore.getState() + state.messages = msgList + this.memStore.putState(state) + } + + addUnapprovedMessage (msgParams) { + // create txData obj with parameters and meta data + var time = (new Date()).getTime() + var msgId = createId() + var msgData = { + id: msgId, + msgParams: msgParams, + time: time, + status: 'unapproved', + } + this.addMsg(msgData) + console.log('addUnapprovedMessage:', msgData) + + // keep the cb around for after approval (requires user interaction) + // This cb fires completion to the Dapp's write operation. + + // signal update + this.emit('update') + return msgId } addMsg (msg) { @@ -32,8 +70,28 @@ module.exports = class MessageManager extends EventEmitter{ return matching.length > 0 ? matching[0] : null } - confirmMsg (msgId) { - this._setMsgStatus(msgId, 'confirmed') + brodcastMessage (rawSig, msgId, status) { + this.emit(`${msgId}:finished`, {status, rawSig}) + } + + approveMessage (msgParams) { + this.setMessageApproved(msgParams.metamaskId) + return this.prepMsgForSigning(msgParams) + } + + setMessageApproved (msgId) { + this._setMsgStatus(msgId, 'approved') + } + prepMsgForSigning (msgParams) { + delete msgParams.metamaskId + return Promise.resolve(msgParams) + } + + cancelMessage (msgId) { + // reject tx + // clean up + this.brodcastMessage(null, msgId, 'rejected') + this.rejectMsg(msgId) } rejectMsg (msgId) { @@ -43,14 +101,13 @@ module.exports = class MessageManager extends EventEmitter{ _setMsgStatus (msgId, status) { let msg = this.getMsg(msgId) if (msg) msg.status = status - this.updateMsg(msg) + this._updateMsg(msg) } - updateMsg (msg) { + _updateMsg (msg) { let messages = this.getMsgList() let index = messages.findIndex((message) => message.id === msg.id) if (index !== -1) { - this.emit('update', msg.id) messages[index] = msg } this._saveMsgList(messages) |