aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/popup-core.js
diff options
context:
space:
mode:
authorkumavis <kumavis@users.noreply.github.com>2016-09-14 02:29:46 +0800
committerGitHub <noreply@github.com>2016-09-14 02:29:46 +0800
commitb13eaaa0cd201704a63e30f3601552c136c9278c (patch)
treea2b85fba2f42921ce2c9afb158f6bcad787f4ea0 /app/scripts/popup-core.js
parentb4344f2a02ac7b130fc69bbb772f68b4d042b49c (diff)
parent81d25d560f4920ee7a357881931e674bea97176c (diff)
downloadtangerine-wallet-browser-b13eaaa0cd201704a63e30f3601552c136c9278c.tar.gz
tangerine-wallet-browser-b13eaaa0cd201704a63e30f3601552c136c9278c.tar.zst
tangerine-wallet-browser-b13eaaa0cd201704a63e30f3601552c136c9278c.zip
Merge pull request #651 from MetaMask/library
MetaMask "Mascara" Library - initial PR
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,
+ })
+}