aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/background.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/scripts/background.js')
-rw-r--r--app/scripts/background.js112
1 files changed, 54 insertions, 58 deletions
diff --git a/app/scripts/background.js b/app/scripts/background.js
index 66108c251..6934e9d3e 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -1,11 +1,9 @@
const urlUtil = require('url')
const Dnode = require('dnode')
const eos = require('end-of-stream')
-const combineStreams = require('pumpify')
const extend = require('xtend')
const EthStore = require('eth-store')
const MetaMaskProvider = require('web3-provider-engine/zero.js')
-const ObjectMultiplex = require('./lib/obj-multiplex')
const PortStream = require('./lib/port-stream.js')
const IdentityStore = require('./lib/idStore')
const createUnlockRequestNotification = require('./lib/notifications.js').createUnlockRequestNotification
@@ -22,7 +20,7 @@ const Web3 = require('web3')
//
chrome.runtime.onConnect.addListener(connectRemote)
-function connectRemote(remotePort){
+function connectRemote (remotePort) {
var isMetaMaskInternalProcess = (remotePort.name === 'popup')
var portStream = new PortStream(remotePort)
if (isMetaMaskInternalProcess) {
@@ -35,7 +33,7 @@ function connectRemote(remotePort){
}
}
-function setupUntrustedCommunication(connectionStream, originDomain){
+function setupUntrustedCommunication (connectionStream, originDomain) {
// setup multiplexing
var mx = setupMultiplex(connectionStream)
// connect features
@@ -43,7 +41,7 @@ function setupUntrustedCommunication(connectionStream, originDomain){
setupPublicConfig(mx.createStream('publicConfig'))
}
-function setupTrustedCommunication(connectionStream, originDomain){
+function setupTrustedCommunication (connectionStream, originDomain) {
// setup multiplexing
var mx = setupMultiplex(connectionStream)
// connect features
@@ -55,13 +53,12 @@ function setupTrustedCommunication(connectionStream, originDomain){
// state and network
//
-var providerConfig = configManager.getProvider()
var idStore = new IdentityStore()
var providerOpts = {
rpcUrl: configManager.getCurrentRpcAddress(),
// account mgmt
- getAccounts: function(cb){
+ getAccounts: function (cb) {
var selectedAddress = idStore.getSelectedAddress()
var result = selectedAddress ? [selectedAddress] : []
cb(null, result)
@@ -79,8 +76,8 @@ idStore.web3 = web3
idStore.getNetwork()
// log new blocks
-provider.on('block', function(block){
- console.log('BLOCK CHANGED:', '#'+block.number.toString('hex'), '0x'+block.hash.toString('hex'))
+provider.on('block', function (block) {
+ console.log('BLOCK CHANGED:', '#' + block.number.toString('hex'), '0x' + block.hash.toString('hex'))
// Check network when restoring connectivity:
if (idStore._currentState.network === 'loading') {
@@ -93,7 +90,7 @@ provider.on('error', idStore.getNetwork.bind(idStore))
var ethStore = new EthStore(provider)
idStore.setStore(ethStore)
-function getState(){
+function getState () {
var state = extend(
ethStore.getState(),
idStore.getState(),
@@ -115,47 +112,46 @@ var initPublicState = extend(
var publicConfigStore = new HostStore(initPublicState)
// subscribe to changes
-configManager.subscribe(function(state){
+configManager.subscribe(function (state) {
storeSetFromObj(publicConfigStore, configToPublic(state))
})
-idStore.on('update', function(state){
+idStore.on('update', function (state) {
storeSetFromObj(publicConfigStore, idStoreToPublic(state))
})
// idStore substate
-function idStoreToPublic(state){
+function idStoreToPublic (state) {
return {
selectedAddress: state.selectedAddress,
}
}
// config substate
-function configToPublic(state){
+function configToPublic (state) {
return {
provider: state.provider,
}
}
// dump obj into store
-function storeSetFromObj(store, obj){
- Object.keys(obj).forEach(function(key){
+function storeSetFromObj (store, obj) {
+ Object.keys(obj).forEach(function (key) {
store.set(key, obj[key])
})
}
-
//
// remote features
//
-function setupPublicConfig(stream){
+function setupPublicConfig (stream) {
var storeStream = publicConfigStore.createStream()
stream.pipe(storeStream).pipe(stream)
}
-function setupProviderConnection(stream, originDomain){
+function setupProviderConnection (stream, originDomain) {
// decorate all payloads with origin domain
- stream.on('data', function onRpcRequest(request){
+ stream.on('data', function onRpcRequest (request) {
var payloads = Array.isArray(request) ? request : [request]
- payloads.forEach(function(payload){
+ payloads.forEach(function (payload) {
// Append origin to rpc payload
payload.origin = originDomain
// Append origin to signature request
@@ -166,7 +162,10 @@ function setupProviderConnection(stream, originDomain){
}
})
// handle rpc request
- provider.sendAsync(request, function onPayloadHandled(err, response){
+ provider.sendAsync(request, function onPayloadHandled (err, response) {
+ if (err) {
+ return logger(err)
+ }
logger(null, request, response)
try {
stream.write(response)
@@ -176,54 +175,52 @@ function setupProviderConnection(stream, originDomain){
})
})
- function logger(err, request, response){
+ function logger (err, request, response) {
if (err) return console.error(err.stack)
if (!request.isMetamaskInternal) {
console.log(`RPC (${originDomain}):`, request, '->', response)
- if (response.error) console.error('Error in RPC response:\n'+response.error.message)
+ if (response.error) console.error('Error in RPC response:\n' + response.error.message)
}
}
}
-function setupControllerConnection(stream){
+function setupControllerConnection (stream) {
var dnode = Dnode({
- getState: function(cb){ cb(null, getState()) },
- setRpcTarget: setRpcTarget,
- setProviderType: setProviderType,
+ getState: function (cb) { cb(null, getState()) },
+ setRpcTarget: setRpcTarget,
+ setProviderType: setProviderType,
useEtherscanProvider: useEtherscanProvider,
- agreeToDisclaimer: agreeToDisclaimer,
+ agreeToDisclaimer: agreeToDisclaimer,
// forward directly to idStore
- createNewVault: idStore.createNewVault.bind(idStore),
- recoverFromSeed: idStore.recoverFromSeed.bind(idStore),
- submitPassword: idStore.submitPassword.bind(idStore),
+ createNewVault: idStore.createNewVault.bind(idStore),
+ recoverFromSeed: idStore.recoverFromSeed.bind(idStore),
+ submitPassword: idStore.submitPassword.bind(idStore),
setSelectedAddress: idStore.setSelectedAddress.bind(idStore),
approveTransaction: idStore.approveTransaction.bind(idStore),
- cancelTransaction: idStore.cancelTransaction.bind(idStore),
- signMessage: idStore.signMessage.bind(idStore),
- cancelMessage: idStore.cancelMessage.bind(idStore),
- setLocked: idStore.setLocked.bind(idStore),
+ cancelTransaction: idStore.cancelTransaction.bind(idStore),
+ signMessage: idStore.signMessage.bind(idStore),
+ cancelMessage: idStore.cancelMessage.bind(idStore),
+ setLocked: idStore.setLocked.bind(idStore),
clearSeedWordCache: idStore.clearSeedWordCache.bind(idStore),
- exportAccount: idStore.exportAccount.bind(idStore),
- revealAccount: idStore.revealAccount.bind(idStore),
- saveAccountLabel: idStore.saveAccountLabel.bind(idStore),
- tryPassword: idStore.tryPassword.bind(idStore),
- recoverSeed: idStore.recoverSeed.bind(idStore),
+ exportAccount: idStore.exportAccount.bind(idStore),
+ revealAccount: idStore.revealAccount.bind(idStore),
+ saveAccountLabel: idStore.saveAccountLabel.bind(idStore),
+ tryPassword: idStore.tryPassword.bind(idStore),
+ recoverSeed: idStore.recoverSeed.bind(idStore),
})
stream.pipe(dnode).pipe(stream)
- dnode.on('remote', function(remote){
-
+ dnode.on('remote', function (remote) {
// push updates to popup
ethStore.on('update', sendUpdate)
idStore.on('update', sendUpdate)
// teardown on disconnect
- eos(stream, function unsubscribe(){
+ eos(stream, function unsubscribe () {
ethStore.removeListener('update', sendUpdate)
})
- function sendUpdate(){
+ function sendUpdate () {
var state = getState()
remote.sendUpdate(state)
}
-
})
}
@@ -233,7 +230,7 @@ function setupControllerConnection(stream){
idStore.on('update', updateBadge)
-function updateBadge(state){
+function updateBadge (state) {
var label = ''
var unconfTxs = configManager.unconfirmedTxs()
var unconfTxLen = Object.keys(unconfTxs).length
@@ -251,7 +248,7 @@ function updateBadge(state){
// Add unconfirmed Tx + Msg
//
-function newUnsignedTransaction(txParams, onTxDoneCb){
+function newUnsignedTransaction (txParams, onTxDoneCb) {
var state = idStore.getState()
if (!state.isUnlocked) {
createUnlockRequestNotification({
@@ -263,20 +260,19 @@ function newUnsignedTransaction(txParams, onTxDoneCb){
}
}
-function newUnsignedMessage(msgParams, cb){
+function newUnsignedMessage (msgParams, cb) {
var state = idStore.getState()
if (!state.isUnlocked) {
createUnlockRequestNotification({
title: 'Account Unlock Request',
})
- var msgId = idStore.addUnconfirmedMessage(msgParams, cb)
} else {
addUnconfirmedMsg(msgParams, cb)
}
}
-function addUnconfirmedTx(txParams, onTxDoneCb){
- idStore.addUnconfirmedTransaction(txParams, onTxDoneCb, function(err, txData){
+function addUnconfirmedTx (txParams, onTxDoneCb) {
+ idStore.addUnconfirmedTransaction(txParams, onTxDoneCb, function (err, txData) {
if (err) return onTxDoneCb(err)
createTxNotification({
title: 'New Unsigned Transaction',
@@ -287,7 +283,7 @@ function addUnconfirmedTx(txParams, onTxDoneCb){
})
}
-function addUnconfirmedMsg(msgParams, cb){
+function addUnconfirmedMsg (msgParams, cb) {
var msgId = idStore.addUnconfirmedMessage(msgParams, cb)
createMsgNotification({
title: 'New Unsigned Message',
@@ -301,7 +297,7 @@ function addUnconfirmedMsg(msgParams, cb){
// config
//
-function agreeToDisclaimer(cb) {
+function agreeToDisclaimer (cb) {
try {
configManager.setConfirmed(true)
cb()
@@ -311,23 +307,23 @@ function agreeToDisclaimer(cb) {
}
// called from popup
-function setRpcTarget(rpcTarget){
+function setRpcTarget (rpcTarget) {
configManager.setRpcTarget(rpcTarget)
chrome.runtime.reload()
idStore.getNetwork()
}
-function setProviderType(type) {
+function setProviderType (type) {
configManager.setProviderType(type)
chrome.runtime.reload()
idStore.getNetwork()
}
-function useEtherscanProvider() {
+function useEtherscanProvider () {
configManager.useEtherscanProvider()
chrome.runtime.reload()
}
// util
-function noop(){}
+function noop () {}