aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/lib
diff options
context:
space:
mode:
Diffstat (limited to 'app/scripts/lib')
-rw-r--r--app/scripts/lib/message-manager.js150
1 files changed, 102 insertions, 48 deletions
diff --git a/app/scripts/lib/message-manager.js b/app/scripts/lib/message-manager.js
index b609b820e..bc9a9e6c8 100644
--- a/app/scripts/lib/message-manager.js
+++ b/app/scripts/lib/message-manager.js
@@ -1,61 +1,115 @@
-module.exports = new MessageManager()
+const EventEmitter = require('events')
+const ObservableStore = require('obs-store')
+const createId = require('./random-id')
-function MessageManager (opts) {
- this.messages = []
-}
-MessageManager.prototype.getMsgList = function () {
- return this.messages
-}
+module.exports = class MessageManager extends EventEmitter{
+ constructor (opts) {
+ super()
+ this.memStore = new ObservableStore({ messages: [] })
+ }
-MessageManager.prototype.unconfirmedMsgs = function () {
- var messages = this.getMsgList()
- return messages.filter(msg => msg.status === 'unconfirmed')
- .reduce((result, msg) => { result[msg.id] = msg; return result }, {})
-}
+ getState() {
+ return {
+ unapprovedMsgs: this.unapprovedMsgs(),
+ messages: this.getMsgList(),
+ }
+ }
-MessageManager.prototype._saveMsgList = function (msgList) {
- this.messages = msgList
-}
+ getMsgList () {
+ return this.memStore.getState().messages
+ }
-MessageManager.prototype.addMsg = function (msg) {
- var messages = this.getMsgList()
- messages.push(msg)
- this._saveMsgList(messages)
-}
+ get unapprovedMsgCount () {
+ return Object.keys(this.unapprovedMsgs()).length
+ }
-MessageManager.prototype.getMsg = function (msgId) {
- var messages = this.getMsgList()
- var matching = messages.filter(msg => msg.id === msgId)
- return matching.length > 0 ? matching[0] : null
-}
+ unapprovedMsgs () {
+ let messages = this.getMsgList()
+ return messages.filter(msg => msg.status === 'unapproved')
+ .reduce((result, msg) => { result[msg.id] = msg; return result }, {})
+ }
-MessageManager.prototype.confirmMsg = function (msgId) {
- this._setMsgStatus(msgId, 'confirmed')
-}
+ _saveMsgList (msgList) {
+ this.emit('updateBadge')
+ let state = this.memStore.getState()
+ state.messages = msgList
+ this.memStore.putState(state)
+ }
-MessageManager.prototype.rejectMsg = function (msgId) {
- this._setMsgStatus(msgId, 'rejected')
-}
+ 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)
-MessageManager.prototype._setMsgStatus = function (msgId, status) {
- var msg = this.getMsg(msgId)
- if (msg) msg.status = status
- this.updateMsg(msg)
-}
+ // 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
+ }
-MessageManager.prototype.updateMsg = function (msg) {
- var messages = this.getMsgList()
- var found, index
- messages.forEach((otherMsg, i) => {
- if (otherMsg.id === msg.id) {
- found = true
- index = i
+ addMsg (msg) {
+ let messages = this.getMsgList()
+ messages.push(msg)
+ this._saveMsgList(messages)
+ }
+
+ getMsg (msgId) {
+ let messages = this.getMsgList()
+ let matching = messages.filter(msg => msg.id === msgId)
+ return matching.length > 0 ? matching[0] : null
+ }
+
+ 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) {
+ this._setMsgStatus(msgId, 'rejected')
+ }
+
+ _setMsgStatus (msgId, status) {
+ let msg = this.getMsg(msgId)
+ if (msg) msg.status = status
+ this._updateMsg(msg)
+ }
+
+ _updateMsg (msg) {
+ let messages = this.getMsgList()
+ let index = messages.findIndex((message) => message.id === msg.id)
+ if (index !== -1) {
+ messages[index] = msg
}
- })
- if (found) {
- messages[index] = msg
+ this._saveMsgList(messages)
}
- this._saveMsgList(messages)
}
-