diff --git a/node_modules/web3-provider-engine/dist/es5/subproviders/hooked-wallet.js b/node_modules/web3-provider-engine/dist/es5/subproviders/hooked-wallet.js index 75576ec..2077f04 100644 --- a/node_modules/web3-provider-engine/dist/es5/subproviders/hooked-wallet.js +++ b/node_modules/web3-provider-engine/dist/es5/subproviders/hooked-wallet.js @@ -70,6 +70,7 @@ function HookedWalletSubprovider(opts) { if (opts.processMessage) self.processMessage = opts.processMessage; if (opts.processPersonalMessage) self.processPersonalMessage = opts.processPersonalMessage; if (opts.processTypedMessage) self.processTypedMessage = opts.processTypedMessage; // approval hooks + if (opts.processTypedMessageV3) self.processTypedMessageV3 = opts.processTypedMessageV3; // approval hooks self.approveTransaction = opts.approveTransaction || self.autoApprove; self.approveMessage = opts.approveMessage || self.autoApprove; @@ -84,6 +85,7 @@ function HookedWalletSubprovider(opts) { if (opts.decryptMessage) self.decryptMessage = opts.decryptMessage || mustProvideInConstructor('decryptMessage'); if (opts.encryptionPublicKey) self.encryptionPublicKey = opts.encryptionPublicKey || mustProvideInConstructor('encryptionPublicKey'); if (opts.signTypedMessage) self.signTypedMessage = opts.signTypedMessage || mustProvideInConstructor('signTypedMessage'); + if (opts.signTypedMessageV3) self.signTypedMessageV3 = opts.signTypedMessageV3 || mustProvideInConstructor('signTypedMessageV3'); if (opts.recoverPersonalSignature) self.recoverPersonalSignature = opts.recoverPersonalSignature; // publish to network if (opts.publishTransaction) self.publishTransaction = opts.publishTransaction; // gas options @@ -281,7 +283,9 @@ HookedWalletSubprovider.prototype.handleRequest = function (payload, next, end) waterfall([function (cb) { return self.validateTypedMessage(msgParams, cb); }, function (cb) { - return self.processTypedMessage(msgParams, cb); + return payload.method === 'eth_signTypedData' + ? self.processTypedMessage(msgParams, cb) + : self.processTypedMessageV3(msgParams, cb); }], end); }(); @@ -405,6 +409,19 @@ HookedWalletSubprovider.prototype.processTypedMessage = function (msgParams, cb) // approval // +HookedWalletSubprovider.prototype.processTypedMessageV3 = function (msgParams, cb) { + var self = this; + waterfall([function (cb) { + return self.approveTypedMessage(msgParams, cb); + }, function (didApprove, cb) { + return self.checkApproval('message', didApprove, cb); + }, function (cb) { + return self.signTypedMessageV3(msgParams, cb); + }], cb); +}; // +// approval +// + HookedWalletSubprovider.prototype.autoApprove = function (txParams, cb) { cb(null, true); diff --git a/node_modules/web3-provider-engine/index.js b/node_modules/web3-provider-engine/index.js index 3a1b7d5..a4081c5 100644 --- a/node_modules/web3-provider-engine/index.js +++ b/node_modules/web3-provider-engine/index.js @@ -120,7 +120,7 @@ Web3ProviderEngine.prototype.sendAsync = function(payload, cb){ if (Array.isArray(payload)) { // handle batch - map(payload, self._handleAsync.bind(self), cb) + map(payload, handleAsyncBatch.bind(self), cb) } else { // handle single self._handleAsync(payload, cb) @@ -129,6 +129,11 @@ Web3ProviderEngine.prototype.sendAsync = function(payload, cb){ }) } +function handleAsyncBatch(payload, finished) { + const self = this + const handleAsync = self._handleAsync.bind(self) + handleAsync(payload, finished, true) +} // private Web3ProviderEngine.prototype._getBlockByNumberWithRetry = function(blockNumber, cb) { @@ -176,7 +181,7 @@ Web3ProviderEngine.prototype._getBlockByNumber = function(blockNumber, cb) { }) } -Web3ProviderEngine.prototype._handleAsync = function(payload, finished) { +Web3ProviderEngine.prototype._handleAsync = function(payload, finished, isBatch) { var self = this var currentProvider = -1 var result = null @@ -229,7 +234,7 @@ Web3ProviderEngine.prototype._handleAsync = function(payload, finished) { code: -32000 } // respond with both error formats - finished(error, resultObj) + finished(isBatch ? null : error, resultObj) } else { finished(null, resultObj) }