aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/metamask-controller.js
diff options
context:
space:
mode:
authorChi Kei Chan <chikeichan@gmail.com>2017-12-08 01:46:28 +0800
committerGitHub <noreply@github.com>2017-12-08 01:46:28 +0800
commit845aec82b976b1676c504832f152d6d9142c11e1 (patch)
treef6306a17629d68e217488ab15af7ce5029c07335 /app/scripts/metamask-controller.js
parentbd5ce9461e5119c13ab8be29db5cdfc57228bac8 (diff)
parent2e9137dddd4abd07cc45caa670f09bdc9559bbbb (diff)
downloadtangerine-wallet-browser-845aec82b976b1676c504832f152d6d9142c11e1.tar
tangerine-wallet-browser-845aec82b976b1676c504832f152d6d9142c11e1.tar.gz
tangerine-wallet-browser-845aec82b976b1676c504832f152d6d9142c11e1.tar.bz2
tangerine-wallet-browser-845aec82b976b1676c504832f152d6d9142c11e1.tar.lz
tangerine-wallet-browser-845aec82b976b1676c504832f152d6d9142c11e1.tar.xz
tangerine-wallet-browser-845aec82b976b1676c504832f152d6d9142c11e1.tar.zst
tangerine-wallet-browser-845aec82b976b1676c504832f152d6d9142c11e1.zip
Merge branch 'NewUI-flat' into MM-333-auto-add-users-to-new-UI
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 8966ba393..018eb2c76 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.
@@ -454,7 +463,7 @@ module.exports = class MetamaskController extends EventEmitter {
setupPublicConfig (outStream) {
pump(
- this.publicConfigStore,
+ asStream(this.publicConfigStore),
outStream,
(err) => {
if (err) log.error(err)
@@ -470,15 +479,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
}
@@ -785,4 +813,13 @@ module.exports = class MetamaskController extends EventEmitter {
}
}
+ recordFirstTimeInfo (initState) {
+ if (!('firstTimeInfo' in initState)) {
+ initState.firstTimeInfo = {
+ version,
+ date: Date.now(),
+ }
+ }
+ }
+
}