aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/popup-core.js
diff options
context:
space:
mode:
authorkumavis <aaron@kumavis.me>2016-09-13 14:28:07 +0800
committerkumavis <aaron@kumavis.me>2016-09-13 14:28:07 +0800
commitb4e3b83f0467ebd1610c18d318b5d1b54d8863bb (patch)
tree3ba79483bb8348a5e8c5bf961a0c8b9d255898d7 /app/scripts/popup-core.js
parented11ab6d18d798896db1f991ec80105c22074d0a (diff)
downloadtangerine-wallet-browser-b4e3b83f0467ebd1610c18d318b5d1b54d8863bb.tar.gz
tangerine-wallet-browser-b4e3b83f0467ebd1610c18d318b5d1b54d8863bb.tar.zst
tangerine-wallet-browser-b4e3b83f0467ebd1610c18d318b5d1b54d8863bb.zip
popup - breakout popup-core
Diffstat (limited to 'app/scripts/popup-core.js')
-rw-r--r--app/scripts/popup-core.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/app/scripts/popup-core.js b/app/scripts/popup-core.js
new file mode 100644
index 000000000..94413a1c4
--- /dev/null
+++ b/app/scripts/popup-core.js
@@ -0,0 +1,63 @@
+const EventEmitter = require('events').EventEmitter
+const Dnode = require('dnode')
+const Web3 = require('web3')
+const MetaMaskUi = require('../../ui')
+const StreamProvider = require('web3-stream-provider')
+const setupMultiplex = require('./lib/stream-utils.js').setupMultiplex
+
+
+module.exports = initializePopup
+
+
+function initializePopup(connectionStream){
+ // setup app
+ connectToAccountManager(connectionStream, setupApp)
+}
+
+function connectToAccountManager (connectionStream, cb) {
+ // setup communication with background
+ // setup multiplexing
+ var mx = setupMultiplex(connectionStream)
+ // connect features
+ setupControllerConnection(mx.createStream('controller'), cb)
+ setupWeb3Connection(mx.createStream('provider'))
+}
+
+function setupWeb3Connection (connectionStream) {
+ var providerStream = new StreamProvider()
+ providerStream.pipe(connectionStream).pipe(providerStream)
+ connectionStream.on('error', console.error.bind(console))
+ providerStream.on('error', console.error.bind(console))
+ global.web3 = new Web3(providerStream)
+}
+
+function setupControllerConnection (connectionStream, cb) {
+ // this is a really sneaky way of adding EventEmitter api
+ // to a bi-directional dnode instance
+ var eventEmitter = new EventEmitter()
+ var accountManagerDnode = Dnode({
+ sendUpdate: function (state) {
+ eventEmitter.emit('update', state)
+ },
+ })
+ connectionStream.pipe(accountManagerDnode).pipe(connectionStream)
+ accountManagerDnode.once('remote', function (accountManager) {
+ // setup push events
+ accountManager.on = eventEmitter.on.bind(eventEmitter)
+ cb(null, accountManager)
+ })
+}
+
+function setupApp (err, accountManager) {
+ if (err) {
+ alert(err.stack)
+ throw err
+ }
+
+ var container = document.getElementById('app-content')
+
+ MetaMaskUi({
+ container: container,
+ accountManager: accountManager,
+ })
+}