aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/metamask-controller.js
diff options
context:
space:
mode:
authorDan <danjm.com@gmail.com>2017-12-06 00:41:59 +0800
committerChi Kei Chan <chikeichan@gmail.com>2017-12-07 13:11:52 +0800
commitec6c3c33bdbe2d90dc71649d0cc5fb3c07d96af7 (patch)
tree4a89f70ed4481c78628f139676f92225f60e15fe /app/scripts/metamask-controller.js
parent2b1f2557c7dbd589724fd690ec72f789f9650e3c (diff)
downloadtangerine-wallet-browser-ec6c3c33bdbe2d90dc71649d0cc5fb3c07d96af7.tar
tangerine-wallet-browser-ec6c3c33bdbe2d90dc71649d0cc5fb3c07d96af7.tar.gz
tangerine-wallet-browser-ec6c3c33bdbe2d90dc71649d0cc5fb3c07d96af7.tar.bz2
tangerine-wallet-browser-ec6c3c33bdbe2d90dc71649d0cc5fb3c07d96af7.tar.lz
tangerine-wallet-browser-ec6c3c33bdbe2d90dc71649d0cc5fb3c07d96af7.tar.xz
tangerine-wallet-browser-ec6c3c33bdbe2d90dc71649d0cc5fb3c07d96af7.tar.zst
tangerine-wallet-browser-ec6c3c33bdbe2d90dc71649d0cc5fb3c07d96af7.zip
Merge branch 'master' into NewUI-flat-merge-with-master
Diffstat (limited to 'app/scripts/metamask-controller.js')
-rw-r--r--app/scripts/metamask-controller.js47
1 files changed, 42 insertions, 5 deletions
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 4dce89e3a..a96d20d3b 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -3,6 +3,7 @@ const extend = require('xtend')
const pump = require('pump')
const Dnode = require('dnode')
const ObservableStore = require('obs-store')
+const asStream = require('obs-store/lib/asStream')
const AccountTracker = require('./lib/account-tracker')
const EthQuery = require('eth-query')
const RpcEngine = require('json-rpc-engine')
@@ -31,6 +32,7 @@ const ConfigManager = require('./lib/config-manager')
const nodeify = require('./lib/nodeify')
const accountImporter = require('./account-import-strategies')
const getBuyEthUrl = require('./lib/buy-eth-url')
+const Mutex = require('await-semaphore').Mutex
const version = require('../manifest.json').version
module.exports = class MetamaskController extends EventEmitter {
@@ -38,10 +40,12 @@ module.exports = class MetamaskController extends EventEmitter {
constructor (opts) {
super()
+
this.sendUpdate = debounce(this.privateSendUpdate.bind(this), 200)
this.opts = opts
const initState = opts.initState || {}
+ this.recordFirstTimeInfo(initState)
// platform-specific api
this.platform = opts.platform
@@ -49,6 +53,9 @@ module.exports = class MetamaskController extends EventEmitter {
// observable state store
this.store = new ObservableStore(initState)
+ // lock to ensure only one vault created at once
+ this.createVaultMutex = new Mutex()
+
// network store
this.networkController = new NetworkController(initState.NetworkController)
@@ -144,6 +151,8 @@ module.exports = class MetamaskController extends EventEmitter {
// notices
this.noticeController = new NoticeController({
initState: initState.NoticeController,
+ version,
+ firstVersion: initState.firstTimeInfo.version,
})
this.noticeController.updateNoticesList()
// to be uncommented when retrieving notices from a remote server.
@@ -453,7 +462,7 @@ module.exports = class MetamaskController extends EventEmitter {
setupPublicConfig (outStream) {
pump(
- this.publicConfigStore,
+ asStream(this.publicConfigStore),
outStream,
(err) => {
if (err) log.error(err)
@@ -469,15 +478,34 @@ module.exports = class MetamaskController extends EventEmitter {
// Vault Management
//
- async createNewVaultAndKeychain (password, cb) {
- const vault = await this.keyringController.createNewVaultAndKeychain(password)
- this.selectFirstIdentity(vault)
+ async createNewVaultAndKeychain (password) {
+ const release = await this.createVaultMutex.acquire()
+ let vault
+
+ try {
+ const accounts = await this.keyringController.getAccounts()
+
+ if (accounts.length > 0) {
+ vault = await this.keyringController.fullUpdate()
+
+ } else {
+ vault = await this.keyringController.createNewVaultAndKeychain(password)
+ this.selectFirstIdentity(vault)
+ }
+ release()
+ } catch (err) {
+ release()
+ throw err
+ }
+
return vault
}
- async createNewVaultAndRestore (password, seed, cb) {
+ async createNewVaultAndRestore (password, seed) {
+ const release = await this.createVaultMutex.acquire()
const vault = await this.keyringController.createNewVaultAndRestore(password, seed)
this.selectFirstIdentity(vault)
+ release()
return vault
}
@@ -784,4 +812,13 @@ module.exports = class MetamaskController extends EventEmitter {
}
}
+ recordFirstTimeInfo (initState) {
+ if (!('firstTimeInfo' in initState)) {
+ initState.firstTimeInfo = {
+ version,
+ date: Date.now(),
+ }
+ }
+ }
+
}