You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
275 lines
6.5 KiB
275 lines
6.5 KiB
const ethUtil = require('ethereumjs-util')
|
|
const normalize = require('eth-sig-util').normalize
|
|
const MetamaskConfig = require('../config.js')
|
|
|
|
|
|
const MAINNET_RPC = MetamaskConfig.network.mainnet
|
|
const ROPSTEN_RPC = MetamaskConfig.network.ropsten
|
|
const KOVAN_RPC = MetamaskConfig.network.kovan
|
|
const RINKEBY_RPC = MetamaskConfig.network.rinkeby
|
|
|
|
/* The config-manager is a convenience object
|
|
* wrapping a pojo-migrator.
|
|
*
|
|
* It exists mostly to allow the creation of
|
|
* convenience methods to access and persist
|
|
* particular portions of the state.
|
|
*/
|
|
module.exports = ConfigManager
|
|
function ConfigManager (opts) {
|
|
// ConfigManager is observable and will emit updates
|
|
this._subs = []
|
|
this.store = opts.store
|
|
}
|
|
|
|
ConfigManager.prototype.setConfig = function (config) {
|
|
var data = this.getData()
|
|
data.config = config
|
|
this.setData(data)
|
|
this._emitUpdates(config)
|
|
}
|
|
|
|
ConfigManager.prototype.getConfig = function () {
|
|
var data = this.getData()
|
|
return data.config
|
|
}
|
|
|
|
ConfigManager.prototype.setData = function (data) {
|
|
this.store.putState(data)
|
|
}
|
|
|
|
ConfigManager.prototype.getData = function () {
|
|
return this.store.getState()
|
|
}
|
|
|
|
ConfigManager.prototype.setPasswordForgotten = function (passwordForgottenState) {
|
|
const data = this.getData()
|
|
data.forgottenPassword = passwordForgottenState
|
|
this.setData(data)
|
|
}
|
|
|
|
ConfigManager.prototype.getPasswordForgotten = function (passwordForgottenState) {
|
|
const data = this.getData()
|
|
return data.forgottenPassword
|
|
}
|
|
|
|
ConfigManager.prototype.setWallet = function (wallet) {
|
|
var data = this.getData()
|
|
data.wallet = wallet
|
|
this.setData(data)
|
|
}
|
|
|
|
ConfigManager.prototype.setVault = function (encryptedString) {
|
|
var data = this.getData()
|
|
data.vault = encryptedString
|
|
this.setData(data)
|
|
}
|
|
|
|
ConfigManager.prototype.getVault = function () {
|
|
var data = this.getData()
|
|
return data.vault
|
|
}
|
|
|
|
ConfigManager.prototype.getKeychains = function () {
|
|
return this.getData().keychains || []
|
|
}
|
|
|
|
ConfigManager.prototype.setKeychains = function (keychains) {
|
|
var data = this.getData()
|
|
data.keychains = keychains
|
|
this.setData(data)
|
|
}
|
|
|
|
ConfigManager.prototype.getSelectedAccount = function () {
|
|
var config = this.getConfig()
|
|
return config.selectedAccount
|
|
}
|
|
|
|
ConfigManager.prototype.setSelectedAccount = function (address) {
|
|
var config = this.getConfig()
|
|
config.selectedAccount = ethUtil.addHexPrefix(address)
|
|
this.setConfig(config)
|
|
}
|
|
|
|
ConfigManager.prototype.getWallet = function () {
|
|
return this.getData().wallet
|
|
}
|
|
|
|
// Takes a boolean
|
|
ConfigManager.prototype.setShowSeedWords = function (should) {
|
|
var data = this.getData()
|
|
data.showSeedWords = should
|
|
this.setData(data)
|
|
}
|
|
|
|
ConfigManager.prototype.getShouldShowSeedWords = function () {
|
|
var data = this.getData()
|
|
return data.showSeedWords
|
|
}
|
|
|
|
ConfigManager.prototype.setSeedWords = function (words) {
|
|
var data = this.getData()
|
|
data.seedWords = words
|
|
this.setData(data)
|
|
}
|
|
|
|
ConfigManager.prototype.getSeedWords = function () {
|
|
var data = this.getData()
|
|
return data.seedWords
|
|
}
|
|
|
|
/**
|
|
* Called to set the isRevealingSeedWords flag. This happens only when the user chooses to reveal
|
|
* the seed words and not during the first time flow.
|
|
* @param {boolean} reveal - Value to set the isRevealingSeedWords flag.
|
|
*/
|
|
ConfigManager.prototype.setIsRevealingSeedWords = function (reveal = false) {
|
|
const data = this.getData()
|
|
data.isRevealingSeedWords = reveal
|
|
this.setData(data)
|
|
}
|
|
|
|
/**
|
|
* Returns the isRevealingSeedWords flag.
|
|
* @returns {boolean|undefined}
|
|
*/
|
|
ConfigManager.prototype.getIsRevealingSeedWords = function () {
|
|
const data = this.getData()
|
|
return data.isRevealingSeedWords
|
|
}
|
|
|
|
ConfigManager.prototype.setRpcTarget = function (rpcUrl) {
|
|
var config = this.getConfig()
|
|
config.provider = {
|
|
type: 'rpc',
|
|
rpcTarget: rpcUrl,
|
|
}
|
|
this.setConfig(config)
|
|
}
|
|
|
|
ConfigManager.prototype.setProviderType = function (type) {
|
|
var config = this.getConfig()
|
|
config.provider = {
|
|
type: type,
|
|
}
|
|
this.setConfig(config)
|
|
}
|
|
|
|
ConfigManager.prototype.useEtherscanProvider = function () {
|
|
var config = this.getConfig()
|
|
config.provider = {
|
|
type: 'etherscan',
|
|
}
|
|
this.setConfig(config)
|
|
}
|
|
|
|
ConfigManager.prototype.getProvider = function () {
|
|
var config = this.getConfig()
|
|
return config.provider
|
|
}
|
|
|
|
ConfigManager.prototype.getCurrentRpcAddress = function () {
|
|
var provider = this.getProvider()
|
|
if (!provider) return null
|
|
switch (provider.type) {
|
|
|
|
case 'mainnet':
|
|
return MAINNET_RPC
|
|
|
|
case 'ropsten':
|
|
return ROPSTEN_RPC
|
|
|
|
case 'kovan':
|
|
return KOVAN_RPC
|
|
|
|
case 'rinkeby':
|
|
return RINKEBY_RPC
|
|
|
|
default:
|
|
return provider && provider.rpcTarget ? provider.rpcTarget : RINKEBY_RPC
|
|
}
|
|
}
|
|
|
|
//
|
|
// Tx
|
|
//
|
|
|
|
ConfigManager.prototype.getTxList = function () {
|
|
var data = this.getData()
|
|
if (data.transactions !== undefined) {
|
|
return data.transactions
|
|
} else {
|
|
return []
|
|
}
|
|
}
|
|
|
|
ConfigManager.prototype.setTxList = function (txList) {
|
|
var data = this.getData()
|
|
data.transactions = txList
|
|
this.setData(data)
|
|
}
|
|
|
|
|
|
// wallet nickname methods
|
|
|
|
ConfigManager.prototype.getWalletNicknames = function () {
|
|
var data = this.getData()
|
|
const nicknames = ('walletNicknames' in data) ? data.walletNicknames : {}
|
|
return nicknames
|
|
}
|
|
|
|
ConfigManager.prototype.nicknameForWallet = function (account) {
|
|
const address = normalize(account)
|
|
const nicknames = this.getWalletNicknames()
|
|
return nicknames[address]
|
|
}
|
|
|
|
ConfigManager.prototype.setNicknameForWallet = function (account, nickname) {
|
|
const address = normalize(account)
|
|
const nicknames = this.getWalletNicknames()
|
|
nicknames[address] = nickname
|
|
var data = this.getData()
|
|
data.walletNicknames = nicknames
|
|
this.setData(data)
|
|
}
|
|
|
|
// observable
|
|
|
|
ConfigManager.prototype.getSalt = function () {
|
|
var data = this.getData()
|
|
return data.salt
|
|
}
|
|
|
|
ConfigManager.prototype.setSalt = function (salt) {
|
|
var data = this.getData()
|
|
data.salt = salt
|
|
this.setData(data)
|
|
}
|
|
|
|
ConfigManager.prototype.subscribe = function (fn) {
|
|
this._subs.push(fn)
|
|
var unsubscribe = this.unsubscribe.bind(this, fn)
|
|
return unsubscribe
|
|
}
|
|
|
|
ConfigManager.prototype.unsubscribe = function (fn) {
|
|
var index = this._subs.indexOf(fn)
|
|
if (index !== -1) this._subs.splice(index, 1)
|
|
}
|
|
|
|
ConfigManager.prototype._emitUpdates = function (state) {
|
|
this._subs.forEach(function (handler) {
|
|
handler(state)
|
|
})
|
|
}
|
|
|
|
ConfigManager.prototype.setLostAccounts = function (lostAccounts) {
|
|
var data = this.getData()
|
|
data.lostAccounts = lostAccounts
|
|
this.setData(data)
|
|
}
|
|
|
|
ConfigManager.prototype.getLostAccounts = function () {
|
|
var data = this.getData()
|
|
return data.lostAccounts || []
|
|
}
|
|
|