aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/lib/inpage-provider.js
diff options
context:
space:
mode:
authorKevin Serrano <kevin.serrano@consensys.net>2017-09-19 02:46:10 +0800
committerKevin Serrano <kevin.serrano@consensys.net>2017-09-19 02:46:10 +0800
commit51f0911f8734745bed452e07f7bf1e5dc7211235 (patch)
tree6594bf81b2b42e8d2511435fd3058f1682177b10 /app/scripts/lib/inpage-provider.js
parent456ceefcf7967423ea66e81d2108ffcb0e144082 (diff)
parentc463647ad7a825eb954a56599ec205a3ba6cd3e6 (diff)
downloadtangerine-wallet-browser-51f0911f8734745bed452e07f7bf1e5dc7211235.tar
tangerine-wallet-browser-51f0911f8734745bed452e07f7bf1e5dc7211235.tar.gz
tangerine-wallet-browser-51f0911f8734745bed452e07f7bf1e5dc7211235.tar.bz2
tangerine-wallet-browser-51f0911f8734745bed452e07f7bf1e5dc7211235.tar.lz
tangerine-wallet-browser-51f0911f8734745bed452e07f7bf1e5dc7211235.tar.xz
tangerine-wallet-browser-51f0911f8734745bed452e07f7bf1e5dc7211235.tar.zst
tangerine-wallet-browser-51f0911f8734745bed452e07f7bf1e5dc7211235.zip
Merge branch 'master' into new-currency-test
Diffstat (limited to 'app/scripts/lib/inpage-provider.js')
-rw-r--r--app/scripts/lib/inpage-provider.js69
1 files changed, 22 insertions, 47 deletions
diff --git a/app/scripts/lib/inpage-provider.js b/app/scripts/lib/inpage-provider.js
index 13888dc67..da75c4be2 100644
--- a/app/scripts/lib/inpage-provider.js
+++ b/app/scripts/lib/inpage-provider.js
@@ -1,8 +1,9 @@
-const pipe = require('pump')
-const StreamProvider = require('web3-stream-provider')
+const pump = require('pump')
+const RpcEngine = require('json-rpc-engine')
+const createIdRemapMiddleware = require('json-rpc-engine/src/idRemapMiddleware')
+const createStreamMiddleware = require('json-rpc-middleware-stream')
const LocalStorageStore = require('obs-store')
-const ObjectMultiplex = require('./obj-multiplex')
-const createRandomId = require('./random-id')
+const ObjectMultiplex = require('obj-multiplex')
module.exports = MetamaskInpageProvider
@@ -10,64 +11,46 @@ function MetamaskInpageProvider (connectionStream) {
const self = this
// setup connectionStream multiplexing
- var multiStream = self.multiStream = ObjectMultiplex()
- pipe(
+ const mux = self.mux = new ObjectMultiplex()
+ pump(
connectionStream,
- multiStream,
+ mux,
connectionStream,
(err) => logStreamDisconnectWarning('MetaMask', err)
)
// subscribe to metamask public config (one-way)
self.publicConfigStore = new LocalStorageStore({ storageKey: 'MetaMask-Config' })
- pipe(
- multiStream.createStream('publicConfig'),
+ pump(
+ mux.createStream('publicConfig'),
self.publicConfigStore,
(err) => logStreamDisconnectWarning('MetaMask PublicConfigStore', err)
)
// ignore phishing warning message (handled elsewhere)
- multiStream.ignoreStream('phishing')
+ mux.ignoreStream('phishing')
// connect to async provider
- const asyncProvider = self.asyncProvider = new StreamProvider()
- pipe(
- asyncProvider,
- multiStream.createStream('provider'),
- asyncProvider,
+ const streamMiddleware = createStreamMiddleware()
+ pump(
+ streamMiddleware.stream,
+ mux.createStream('provider'),
+ streamMiddleware.stream,
(err) => logStreamDisconnectWarning('MetaMask RpcProvider', err)
)
- // start and stop polling to unblock first block lock
- self.idMap = {}
+ // handle sendAsync requests via dapp-side rpc engine
+ const rpcEngine = new RpcEngine()
+ rpcEngine.push(createIdRemapMiddleware())
+ rpcEngine.push(streamMiddleware)
+ self.rpcEngine = rpcEngine
}
// handle sendAsync requests via asyncProvider
// also remap ids inbound and outbound
MetamaskInpageProvider.prototype.sendAsync = function (payload, cb) {
const self = this
-
- // rewrite request ids
- const request = eachJsonMessage(payload, (_message) => {
- const message = Object.assign({}, _message)
- const newId = createRandomId()
- self.idMap[newId] = message.id
- message.id = newId
- return message
- })
-
- // forward to asyncProvider
- self.asyncProvider.sendAsync(request, (err, _res) => {
- if (err) return cb(err)
- // transform messages to original ids
- const res = eachJsonMessage(_res, (message) => {
- const oldId = self.idMap[message.id]
- delete self.idMap[message.id]
- message.id = oldId
- return message
- })
- cb(null, res)
- })
+ self.rpcEngine.handle(payload, cb)
}
@@ -124,14 +107,6 @@ MetamaskInpageProvider.prototype.isMetaMask = true
// util
-function eachJsonMessage (payload, transformFn) {
- if (Array.isArray(payload)) {
- return payload.map(transformFn)
- } else {
- return transformFn(payload)
- }
-}
-
function logStreamDisconnectWarning (remoteLabel, err) {
let warningMsg = `MetamaskInpageProvider - lost connection to ${remoteLabel}`
if (err) warningMsg += '\n' + err.stack