aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/metamask-controller.js
diff options
context:
space:
mode:
authorkumavis <aaron@kumavis.me>2017-08-25 06:44:40 +0800
committerkumavis <aaron@kumavis.me>2017-08-25 06:44:40 +0800
commitcc56d0d2f61da576acc72b1e7f63df4015469267 (patch)
tree5ddce6b8b9a32a0a83009b576904b778991e53bc /app/scripts/metamask-controller.js
parent34b327caf07cd395229806cedecdeb770c034562 (diff)
downloadtangerine-wallet-browser-cc56d0d2f61da576acc72b1e7f63df4015469267.tar
tangerine-wallet-browser-cc56d0d2f61da576acc72b1e7f63df4015469267.tar.gz
tangerine-wallet-browser-cc56d0d2f61da576acc72b1e7f63df4015469267.tar.bz2
tangerine-wallet-browser-cc56d0d2f61da576acc72b1e7f63df4015469267.tar.lz
tangerine-wallet-browser-cc56d0d2f61da576acc72b1e7f63df4015469267.tar.xz
tangerine-wallet-browser-cc56d0d2f61da576acc72b1e7f63df4015469267.tar.zst
tangerine-wallet-browser-cc56d0d2f61da576acc72b1e7f63df4015469267.zip
inpage - use json-rpc-engine for inpage-provider
Diffstat (limited to 'app/scripts/metamask-controller.js')
-rw-r--r--app/scripts/metamask-controller.js42
1 files changed, 32 insertions, 10 deletions
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index a007d6fc5..e4b1b5975 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -6,7 +6,8 @@ const Dnode = require('dnode')
const ObservableStore = require('obs-store')
const EthStore = require('./lib/eth-store')
const EthQuery = require('eth-query')
-const streamIntoProvider = require('web3-stream-provider/handler')
+const RpcEngine = require('json-rpc-engine')
+const createEngineStream = require('json-rpc-middleware-stream/engineStream')
const setupMultiplex = require('./lib/stream-utils.js').setupMultiplex
const KeyringController = require('./keyring-controller')
const NetworkController = require('./controllers/network')
@@ -375,19 +376,40 @@ module.exports = class MetamaskController extends EventEmitter {
}
setupProviderConnection (outStream, originDomain) {
- streamIntoProvider(outStream, this.provider, onRequest, onResponse)
+ const engine = new RpcEngine()
+ engine.push(originMiddleware)
+ engine.push(loggerMiddleware)
+ engine.push(createProviderMiddleware({ provider: this.provider }))
+
+ // setup connection
+ const providerStream = createEngineStream({ engine })
+ outStream.pipe(providerStream).pipe(outStream)
+
// append dapp origin domain to request
- function onRequest (request) {
- request.origin = originDomain
+ function originMiddleware (req, res, next, end) {
+ req.origin = originDomain
+ next()
}
// log rpc activity
- function onResponse (err, request, response) {
- if (err) return console.error(err)
- if (response.error) {
- console.error('Error in RPC response:\n', response)
+ function loggerMiddleware (req, res, next, end) {
+ next((cb) => {
+ if (res.error) {
+ console.error('Error in RPC response:\n', res)
+ }
+ if (req.isMetamaskInternal) return
+ log.info(`RPC (${originDomain}):`, req, '->', res)
+ cb()
+ })
+ }
+ // forward requests to provider
+ function createProviderMiddleware({ provider }) {
+ return (req, res, next, end) => {
+ provider.sendAsync(req, (err, _res) => {
+ if (err) return end(err)
+ res.result = _res.result
+ end()
+ })
}
- if (request.isMetamaskInternal) return
- log.info(`RPC (${originDomain}):`, request, '->', response)
}
}