web3-providers
Advanced tools
Comparing version 1.0.0-beta.48 to 1.0.0-beta.49
@@ -11,9 +11,5 @@ 'use strict'; | ||
var isFunction = _interopDefault(require('lodash/isFunction')); | ||
var _regeneratorRuntime = _interopDefault(require('@babel/runtime/regenerator')); | ||
var _asyncToGenerator = _interopDefault(require('@babel/runtime/helpers/asyncToGenerator')); | ||
var EventEmitter = _interopDefault(require('eventemitter3')); | ||
var oboe = _interopDefault(require('oboe')); | ||
var http = _interopDefault(require('http')); | ||
var https = _interopDefault(require('https')); | ||
var _typeof = _interopDefault(require('@babel/runtime/helpers/typeof')); | ||
var isArray = _interopDefault(require('lodash/isArray')); | ||
@@ -25,4 +21,7 @@ var isObject = _interopDefault(require('lodash/isObject')); | ||
var _inherits = _interopDefault(require('@babel/runtime/helpers/inherits')); | ||
var _regeneratorRuntime = _interopDefault(require('@babel/runtime/regenerator')); | ||
var _asyncToGenerator = _interopDefault(require('@babel/runtime/helpers/asyncToGenerator')); | ||
var _classCallCheck = _interopDefault(require('@babel/runtime/helpers/classCallCheck')); | ||
var _createClass = _interopDefault(require('@babel/runtime/helpers/createClass')); | ||
var _typeof = _interopDefault(require('@babel/runtime/helpers/typeof')); | ||
@@ -52,3 +51,3 @@ var global = function () { | ||
} | ||
if (this.isWeb3Provider(provider)) { | ||
if (provider.sendPayload && provider.subscribe) { | ||
return provider; | ||
@@ -68,16 +67,2 @@ } | ||
}, { | ||
key: "isWeb3Provider", | ||
value: function isWeb3Provider(provider) { | ||
switch (provider.constructor.name) { | ||
case 'HttpProvider': | ||
case 'IpcProvider': | ||
case 'WebsocketProvider': | ||
case 'CustomProvider': | ||
case 'MetamaskProvider': | ||
case 'MistEthereumProvider': | ||
case 'Web3EthereumProvider': | ||
return true; | ||
} | ||
} | ||
}, { | ||
key: "isMetamaskInpageProvider", | ||
@@ -91,25 +76,2 @@ value: function isMetamaskInpageProvider(provider) { | ||
var global$1 = function () { | ||
return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object' && self; | ||
}() || new Function('return this')(); | ||
var ProviderDetector = | ||
function () { | ||
function ProviderDetector() { | ||
_classCallCheck(this, ProviderDetector); | ||
} | ||
_createClass(ProviderDetector, [{ | ||
key: "detect", | ||
value: function detect() { | ||
if (typeof global$1.ethereumProvider !== 'undefined' && global$1.ethereumProvider.constructor.name === 'EthereumProvider') { | ||
return global$1.ethereumProvider; | ||
} | ||
if (typeof global$1.web3 !== 'undefined' && global$1.web3.currentProvider) { | ||
return global$1.web3.currentProvider; | ||
} | ||
return null; | ||
} | ||
}]); | ||
return ProviderDetector; | ||
}(); | ||
var messageId = 0; | ||
@@ -140,2 +102,32 @@ var JsonRpcMapper = | ||
var JsonRpcResponseValidator = | ||
function () { | ||
function JsonRpcResponseValidator() { | ||
_classCallCheck(this, JsonRpcResponseValidator); | ||
} | ||
_createClass(JsonRpcResponseValidator, null, [{ | ||
key: "validate", | ||
value: function validate(response) { | ||
var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | ||
if (isObject(response)) { | ||
if (response.error) { | ||
if (response.error instanceof Error) { | ||
return new Error("Node error: ".concat(response.error.message)); | ||
} | ||
return new Error("Node error: ".concat(JSON.stringify(response.error))); | ||
} | ||
if (payload && response.id !== payload.id) { | ||
return new Error("Validation error: Invalid JSON-RPC response ID (request: ".concat(payload.id, " / response: ").concat(response.id, ")")); | ||
} | ||
if (response.result === undefined) { | ||
return new Error('Validation error: Undefined JSON-RPC result'); | ||
} | ||
return true; | ||
} | ||
return new Error('Validation error: Response should be of type Object'); | ||
} | ||
}]); | ||
return JsonRpcResponseValidator; | ||
}(); | ||
var AbstractSocketProvider = | ||
@@ -182,6 +174,44 @@ function (_EventEmitter) { | ||
key: "send", | ||
value: function send(method, parameters) {} | ||
value: function () { | ||
var _send = _asyncToGenerator( | ||
_regeneratorRuntime.mark(function _callee(method, parameters) { | ||
var response, validationResult; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)); | ||
case 2: | ||
response = _context.sent; | ||
validationResult = JsonRpcResponseValidator.validate(response); | ||
if (!(validationResult instanceof Error)) { | ||
_context.next = 6; | ||
break; | ||
} | ||
throw validationResult; | ||
case 6: | ||
return _context.abrupt("return", response.result); | ||
case 7: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function send(_x, _x2) { | ||
return _send.apply(this, arguments); | ||
} | ||
return send; | ||
}() | ||
}, { | ||
key: "sendBatch", | ||
value: function sendBatch(methods, moduleInstance) {} | ||
value: function sendBatch(methods, moduleInstance) { | ||
var payload = []; | ||
methods.forEach(function (method) { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
}, { | ||
@@ -214,11 +244,11 @@ key: "onReady", | ||
var _onConnect = _asyncToGenerator( | ||
_regeneratorRuntime.mark(function _callee() { | ||
_regeneratorRuntime.mark(function _callee2() { | ||
var subscriptionKeys, subscriptionId, _i, key; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
return _regeneratorRuntime.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
subscriptionKeys = Object.keys(this.subscriptions); | ||
if (!(subscriptionKeys.length > 0)) { | ||
_context.next = 13; | ||
_context2.next = 13; | ||
break; | ||
@@ -229,10 +259,10 @@ } | ||
if (!(_i < subscriptionKeys.length)) { | ||
_context.next = 13; | ||
_context2.next = 13; | ||
break; | ||
} | ||
key = subscriptionKeys[_i]; | ||
_context.next = 7; | ||
_context2.next = 7; | ||
return this.subscribe(this.subscriptions[key].subscribeMethod, this.subscriptions[key].parameters[0], this.subscriptions[key].parameters.slice(1)); | ||
case 7: | ||
subscriptionId = _context.sent; | ||
subscriptionId = _context2.sent; | ||
delete this.subscriptions[subscriptionId]; | ||
@@ -242,16 +272,18 @@ this.subscriptions[this.getSubscriptionEvent(this.subscriptions[key].id)].id = subscriptionId; | ||
_i++; | ||
_context.next = 3; | ||
_context2.next = 3; | ||
break; | ||
case 13: | ||
this.emit(this.SOCKET_CONNECT); | ||
this.emit(this.CONNECT); | ||
case 14: | ||
case 15: | ||
case "end": | ||
return _context.stop(); | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
}, _callee2, this); | ||
})); | ||
return function onConnect() { | ||
function onConnect() { | ||
return _onConnect.apply(this, arguments); | ||
}; | ||
} | ||
return onConnect; | ||
}() | ||
@@ -361,32 +393,2 @@ }, { | ||
var JsonRpcResponseValidator = | ||
function () { | ||
function JsonRpcResponseValidator() { | ||
_classCallCheck(this, JsonRpcResponseValidator); | ||
} | ||
_createClass(JsonRpcResponseValidator, null, [{ | ||
key: "validate", | ||
value: function validate(response) { | ||
var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | ||
if (isObject(response)) { | ||
if (response.error) { | ||
if (response.error instanceof Error) { | ||
return new Error("Node error: ".concat(response.error.message)); | ||
} | ||
return new Error("Node error: ".concat(JSON.stringify(response.error))); | ||
} | ||
if (payload && response.id !== payload.id) { | ||
return new Error("Validation error: Invalid JSON-RPC response ID (request: ".concat(payload.id, " / response: ").concat(response.id, ")")); | ||
} | ||
if (response.result === undefined) { | ||
return new Error('Validation error: Undefined JSON-RPC result'); | ||
} | ||
return true; | ||
} | ||
return new Error('Validation error: Response should be of type Object'); | ||
} | ||
}]); | ||
return JsonRpcResponseValidator; | ||
}(); | ||
var WebsocketProvider = | ||
@@ -486,23 +488,2 @@ function (_AbstractSocketProvid) { | ||
}, { | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
}, { | ||
key: "sendBatch", | ||
value: function sendBatch(methods, moduleInstance) { | ||
var payload = []; | ||
methods.forEach(function (method) { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
}, { | ||
key: "sendPayload", | ||
@@ -559,2 +540,3 @@ value: function sendPayload(payload) { | ||
_this.host = path; | ||
_this.chunks = ''; | ||
return _this; | ||
@@ -577,3 +559,9 @@ } | ||
value: function onMessage(message) { | ||
_get(_getPrototypeOf(IpcProvider.prototype), "onMessage", this).call(this, message.toString()); | ||
var chunk = message.toString('utf8'); | ||
if (chunk.indexOf('\n') < 0) { | ||
this.chunks += chunk; | ||
return; | ||
} | ||
_get(_getPrototypeOf(IpcProvider.prototype), "onMessage", this).call(this, this.chunks + chunk.substring(0, chunk.indexOf('\n'))); | ||
this.chunks = chunk.substring(chunk.indexOf('\n') + 1); | ||
} | ||
@@ -583,13 +571,8 @@ }, { | ||
value: function registerEventListeners() { | ||
if (this.connection.constructor.name === 'Socket') { | ||
oboe(this.connection).done(this.onMessage); | ||
} else { | ||
this.connection.addListener('data', this.onMessage.bind(this)); | ||
} | ||
this.connection.addListener('connect', this.onConnect.bind(this)); | ||
this.connection.addListener('error', this.onError.bind(this)); | ||
this.connection.addListener('end', this.onError.bind(this)); | ||
this.connection.addListener('close', this.onClose.bind(this)); | ||
this.connection.addListener('timeout', this.onClose.bind(this)); | ||
this.connection.addListener('ready', this.onReady.bind(this)); | ||
this.connection.on('data', this.onMessage.bind(this)); | ||
this.connection.on('connect', this.onConnect.bind(this)); | ||
this.connection.on('error', this.onError.bind(this)); | ||
this.connection.on('close', this.onClose.bind(this)); | ||
this.connection.on('timeout', this.onClose.bind(this)); | ||
this.connection.on('ready', this.onReady.bind(this)); | ||
} | ||
@@ -601,15 +584,15 @@ }, { | ||
case this.SOCKET_MESSAGE: | ||
this.connection.removeEventListener('data', this.onMessage); | ||
this.connection.removeListener('data', this.onMessage); | ||
break; | ||
case this.SOCKET_READY: | ||
this.connection.removeEventListener('ready', this.onReady); | ||
this.connection.removeListener('ready', this.onReady); | ||
break; | ||
case this.SOCKET_CLOSE: | ||
this.connection.removeEventListener('close', this.onClose); | ||
this.connection.removeListener('close', this.onClose); | ||
break; | ||
case this.SOCKET_ERROR: | ||
this.connection.removeEventListener('error', this.onError); | ||
this.connection.removeListener('error', this.onError); | ||
break; | ||
case this.SOCKET_CONNECT: | ||
this.connection.removeEventListener('connect', this.onConnect); | ||
this.connection.removeListener('connect', this.onConnect); | ||
break; | ||
@@ -620,23 +603,2 @@ } | ||
}, { | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
}, { | ||
key: "sendBatch", | ||
value: function sendBatch(methods, moduleInstance) { | ||
var payload = []; | ||
methods.forEach(function (method) { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
}, { | ||
key: "sendPayload", | ||
@@ -646,5 +608,2 @@ value: function sendPayload(payload) { | ||
return new Promise(function (resolve, reject) { | ||
if (_this2.connection.pending) { | ||
return reject(new Error('Connection error: The socket is still trying to connect')); | ||
} | ||
if (!_this2.connection.writable) { | ||
@@ -662,6 +621,3 @@ _this2.connection.connect({ | ||
} | ||
_this2.on(id, function (response) { | ||
resolve(response); | ||
_this2.removeAllListeners(id); | ||
}); | ||
_this2.once(id, resolve); | ||
return; | ||
@@ -725,11 +681,34 @@ } | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
value: function () { | ||
var _send = _asyncToGenerator( | ||
_regeneratorRuntime.mark(function _callee(method, parameters) { | ||
var response, validationResult; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)); | ||
case 2: | ||
response = _context.sent; | ||
validationResult = JsonRpcResponseValidator.validate(response); | ||
if (!(validationResult instanceof Error)) { | ||
_context.next = 6; | ||
break; | ||
} | ||
throw validationResult; | ||
case 6: | ||
return _context.abrupt("return", response.result); | ||
case 7: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function send(_x, _x2) { | ||
return _send.apply(this, arguments); | ||
} | ||
return send; | ||
}() | ||
}, { | ||
@@ -775,5 +754,3 @@ key: "sendBatch", | ||
} catch (error) { | ||
if (error.constructor.name === 'NetworkError') { | ||
_this.connected = false; | ||
} | ||
_this.connected = false; | ||
reject(error); | ||
@@ -918,11 +895,31 @@ } | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.connection.send(method, parameters).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response; | ||
}); | ||
} | ||
value: function () { | ||
var _send = _asyncToGenerator( | ||
_regeneratorRuntime.mark(function _callee(method, parameters) { | ||
var response, validationResult; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
response = this.connection.send(method, parameters); | ||
validationResult = JsonRpcResponseValidator.validate(response); | ||
if (!(validationResult instanceof Error)) { | ||
_context.next = 4; | ||
break; | ||
} | ||
throw validationResult; | ||
case 4: | ||
return _context.abrupt("return", response); | ||
case 5: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function send(_x, _x2) { | ||
return _send.apply(this, arguments); | ||
} | ||
return send; | ||
}() | ||
}, { | ||
@@ -1009,23 +1006,2 @@ key: "sendBatch", | ||
}, { | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
}, { | ||
key: "sendBatch", | ||
value: function sendBatch(methods, moduleInstance) { | ||
var payload = []; | ||
methods.forEach(function (method) { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
}, { | ||
key: "sendPayload", | ||
@@ -1100,23 +1076,2 @@ value: function sendPayload(payload) { | ||
}, { | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
}, { | ||
key: "sendBatch", | ||
value: function sendBatch(methods, moduleInstance) { | ||
var payload = []; | ||
methods.forEach(function (method) { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
}, { | ||
key: "sendPayload", | ||
@@ -1172,11 +1127,34 @@ value: function sendPayload(payload) { | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
value: function () { | ||
var _send = _asyncToGenerator( | ||
_regeneratorRuntime.mark(function _callee(method, parameters) { | ||
var response, validationResult; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)); | ||
case 2: | ||
response = _context.sent; | ||
validationResult = JsonRpcResponseValidator.validate(response); | ||
if (!(validationResult instanceof Error)) { | ||
_context.next = 6; | ||
break; | ||
} | ||
throw validationResult; | ||
case 6: | ||
return _context.abrupt("return", response.result); | ||
case 7: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function send(_x, _x2) { | ||
return _send.apply(this, arguments); | ||
} | ||
return send; | ||
}() | ||
}, { | ||
@@ -1234,7 +1212,2 @@ key: "sendBatch", | ||
}, { | ||
key: "createProviderDetector", | ||
value: function createProviderDetector() { | ||
return new ProviderDetector(); | ||
} | ||
}, { | ||
key: "createHttpProvider", | ||
@@ -1317,21 +1290,44 @@ value: function createHttpProvider(url) { | ||
var HttpProvider$1 = function HttpProvider(url, options) { | ||
var global$1 = function () { | ||
return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object' && self; | ||
}() || new Function('return this')(); | ||
var ProviderDetector = | ||
function () { | ||
function ProviderDetector() { | ||
_classCallCheck(this, ProviderDetector); | ||
} | ||
_createClass(ProviderDetector, null, [{ | ||
key: "detect", | ||
value: function detect() { | ||
if (typeof global$1.ethereumProvider !== 'undefined' && global$1.ethereumProvider.constructor.name === 'EthereumProvider') { | ||
return global$1.ethereumProvider; | ||
} | ||
if (typeof global$1.web3 !== 'undefined' && global$1.web3.currentProvider) { | ||
return global$1.web3.currentProvider; | ||
} | ||
return null; | ||
} | ||
}]); | ||
return ProviderDetector; | ||
}(); | ||
function HttpProvider$1(url) { | ||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
return new ProvidersModuleFactory().createHttpProvider(url, options); | ||
}; | ||
var WebsocketProvider$1 = function WebsocketProvider(url, options) { | ||
} | ||
function WebsocketProvider$1(url) { | ||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
return new ProvidersModuleFactory().createWebsocketProvider(url, options); | ||
}; | ||
var IpcProvider$1 = function IpcProvider(path, net) { | ||
} | ||
function IpcProvider$1(path, net) { | ||
return new ProvidersModuleFactory().createIpcProvider(path, net); | ||
}; | ||
var BatchRequest$1 = function BatchRequest(moduleInstance) { | ||
} | ||
function BatchRequest$1(moduleInstance) { | ||
return new ProvidersModuleFactory().createBatchRequest(moduleInstance); | ||
}; | ||
var ProviderResolver$1 = function ProviderResolver() { | ||
} | ||
function ProviderResolver$1() { | ||
return new ProvidersModuleFactory().createProviderResolver(); | ||
}; | ||
var ProviderDetector$1 = function ProviderDetector() { | ||
return new ProvidersModuleFactory().createProviderDetector(); | ||
}; | ||
} | ||
exports.ProviderDetector = ProviderDetector; | ||
exports.HttpProvider = HttpProvider$1; | ||
@@ -1342,4 +1338,3 @@ exports.WebsocketProvider = WebsocketProvider$1; | ||
exports.ProviderResolver = ProviderResolver$1; | ||
exports.ProviderDetector = ProviderDetector$1; | ||
exports.ProvidersModuleFactory = ProvidersModuleFactory; | ||
exports.Web3EthereumProvider = Web3EthereumProvider; |
@@ -6,3 +6,2 @@ import { w3cwebsocket } from 'websocket'; | ||
import EventEmitter from 'eventemitter3'; | ||
import oboe from 'oboe'; | ||
import http from 'http'; | ||
@@ -32,3 +31,3 @@ import https from 'https'; | ||
} | ||
if (this.isWeb3Provider(provider)) { | ||
if (provider.sendPayload && provider.subscribe) { | ||
return provider; | ||
@@ -47,14 +46,2 @@ } | ||
} | ||
isWeb3Provider(provider) { | ||
switch (provider.constructor.name) { | ||
case 'HttpProvider': | ||
case 'IpcProvider': | ||
case 'WebsocketProvider': | ||
case 'CustomProvider': | ||
case 'MetamaskProvider': | ||
case 'MistEthereumProvider': | ||
case 'Web3EthereumProvider': | ||
return true; | ||
} | ||
} | ||
isMetamaskInpageProvider(provider) { | ||
@@ -65,17 +52,2 @@ return provider.constructor.name === 'MetamaskInpageProvider'; | ||
const global$1 = function () { | ||
return this || typeof self === 'object' && self; | ||
}() || new Function('return this')(); | ||
class ProviderDetector { | ||
detect() { | ||
if (typeof global$1.ethereumProvider !== 'undefined' && global$1.ethereumProvider.constructor.name === 'EthereumProvider') { | ||
return global$1.ethereumProvider; | ||
} | ||
if (typeof global$1.web3 !== 'undefined' && global$1.web3.currentProvider) { | ||
return global$1.web3.currentProvider; | ||
} | ||
return null; | ||
} | ||
} | ||
let messageId = 0; | ||
@@ -98,2 +70,23 @@ class JsonRpcMapper { | ||
class JsonRpcResponseValidator { | ||
static validate(response, payload = false) { | ||
if (isObject(response)) { | ||
if (response.error) { | ||
if (response.error instanceof Error) { | ||
return new Error(`Node error: ${response.error.message}`); | ||
} | ||
return new Error(`Node error: ${JSON.stringify(response.error)}`); | ||
} | ||
if (payload && response.id !== payload.id) { | ||
return new Error(`Validation error: Invalid JSON-RPC response ID (request: ${payload.id} / response: ${response.id})`); | ||
} | ||
if (response.result === undefined) { | ||
return new Error('Validation error: Undefined JSON-RPC result'); | ||
} | ||
return true; | ||
} | ||
return new Error('Validation error: Response should be of type Object'); | ||
} | ||
} | ||
class AbstractSocketProvider extends EventEmitter { | ||
@@ -128,4 +121,18 @@ constructor(connection, timeout) { | ||
get connected() {} | ||
send(method, parameters) {} | ||
sendBatch(methods, moduleInstance) {} | ||
async send(method, parameters) { | ||
const response = await this.sendPayload(JsonRpcMapper.toPayload(method, parameters)); | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
} | ||
sendBatch(methods, moduleInstance) { | ||
let payload = []; | ||
methods.forEach(method => { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
onReady(event) { | ||
@@ -157,2 +164,3 @@ this.emit(this.READY, event); | ||
} | ||
this.emit(this.SOCKET_CONNECT); | ||
this.emit(this.CONNECT); | ||
@@ -235,23 +243,2 @@ } | ||
class JsonRpcResponseValidator { | ||
static validate(response, payload = false) { | ||
if (isObject(response)) { | ||
if (response.error) { | ||
if (response.error instanceof Error) { | ||
return new Error(`Node error: ${response.error.message}`); | ||
} | ||
return new Error(`Node error: ${JSON.stringify(response.error)}`); | ||
} | ||
if (payload && response.id !== payload.id) { | ||
return new Error(`Validation error: Invalid JSON-RPC response ID (request: ${payload.id} / response: ${response.id})`); | ||
} | ||
if (response.result === undefined) { | ||
return new Error('Validation error: Undefined JSON-RPC result'); | ||
} | ||
return true; | ||
} | ||
return new Error('Validation error: Response should be of type Object'); | ||
} | ||
} | ||
class WebsocketProvider extends AbstractSocketProvider { | ||
@@ -329,19 +316,2 @@ constructor(connection, timeout) { | ||
} | ||
send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(response => { | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
sendBatch(methods, moduleInstance) { | ||
let payload = []; | ||
methods.forEach(method => { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
sendPayload(payload) { | ||
@@ -385,2 +355,3 @@ return new Promise((resolve, reject) => { | ||
this.host = path; | ||
this.chunks = ''; | ||
} | ||
@@ -399,16 +370,17 @@ disconnect() { | ||
onMessage(message) { | ||
super.onMessage(message.toString()); | ||
const chunk = message.toString('utf8'); | ||
if (chunk.indexOf('\n') < 0) { | ||
this.chunks += chunk; | ||
return; | ||
} | ||
super.onMessage(this.chunks + chunk.substring(0, chunk.indexOf('\n'))); | ||
this.chunks = chunk.substring(chunk.indexOf('\n') + 1); | ||
} | ||
registerEventListeners() { | ||
if (this.connection.constructor.name === 'Socket') { | ||
oboe(this.connection).done(this.onMessage); | ||
} else { | ||
this.connection.addListener('data', this.onMessage.bind(this)); | ||
} | ||
this.connection.addListener('connect', this.onConnect.bind(this)); | ||
this.connection.addListener('error', this.onError.bind(this)); | ||
this.connection.addListener('end', this.onError.bind(this)); | ||
this.connection.addListener('close', this.onClose.bind(this)); | ||
this.connection.addListener('timeout', this.onClose.bind(this)); | ||
this.connection.addListener('ready', this.onReady.bind(this)); | ||
this.connection.on('data', this.onMessage.bind(this)); | ||
this.connection.on('connect', this.onConnect.bind(this)); | ||
this.connection.on('error', this.onError.bind(this)); | ||
this.connection.on('close', this.onClose.bind(this)); | ||
this.connection.on('timeout', this.onClose.bind(this)); | ||
this.connection.on('ready', this.onReady.bind(this)); | ||
} | ||
@@ -418,15 +390,15 @@ removeAllListeners(event) { | ||
case this.SOCKET_MESSAGE: | ||
this.connection.removeEventListener('data', this.onMessage); | ||
this.connection.removeListener('data', this.onMessage); | ||
break; | ||
case this.SOCKET_READY: | ||
this.connection.removeEventListener('ready', this.onReady); | ||
this.connection.removeListener('ready', this.onReady); | ||
break; | ||
case this.SOCKET_CLOSE: | ||
this.connection.removeEventListener('close', this.onClose); | ||
this.connection.removeListener('close', this.onClose); | ||
break; | ||
case this.SOCKET_ERROR: | ||
this.connection.removeEventListener('error', this.onError); | ||
this.connection.removeListener('error', this.onError); | ||
break; | ||
case this.SOCKET_CONNECT: | ||
this.connection.removeEventListener('connect', this.onConnect); | ||
this.connection.removeListener('connect', this.onConnect); | ||
break; | ||
@@ -436,24 +408,4 @@ } | ||
} | ||
send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(response => { | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
sendBatch(methods, moduleInstance) { | ||
let payload = []; | ||
methods.forEach(method => { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
sendPayload(payload) { | ||
return new Promise((resolve, reject) => { | ||
if (this.connection.pending) { | ||
return reject(new Error('Connection error: The socket is still trying to connect')); | ||
} | ||
if (!this.connection.writable) { | ||
@@ -471,6 +423,3 @@ this.connection.connect({ | ||
} | ||
this.on(id, response => { | ||
resolve(response); | ||
this.removeAllListeners(id); | ||
}); | ||
this.once(id, resolve); | ||
return; | ||
@@ -514,10 +463,9 @@ } | ||
} | ||
send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(response => { | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
async send(method, parameters) { | ||
const response = await this.sendPayload(JsonRpcMapper.toPayload(method, parameters)); | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
} | ||
@@ -559,5 +507,3 @@ sendBatch(methods, moduleInstance) { | ||
} catch (error) { | ||
if (error.constructor.name === 'NetworkError') { | ||
this.connected = false; | ||
} | ||
this.connected = false; | ||
reject(error); | ||
@@ -670,10 +616,9 @@ } | ||
} | ||
send(method, parameters) { | ||
return this.connection.send(method, parameters).then(response => { | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response; | ||
}); | ||
async send(method, parameters) { | ||
const response = this.connection.send(method, parameters); | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response; | ||
} | ||
@@ -739,19 +684,2 @@ sendBatch(methods, moduleInstance) { | ||
} | ||
send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(response => { | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
sendBatch(methods, moduleInstance) { | ||
let payload = []; | ||
methods.forEach(method => { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
sendPayload(payload) { | ||
@@ -808,19 +736,2 @@ return new Promise((resolve, reject) => { | ||
} | ||
send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(response => { | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
sendBatch(methods, moduleInstance) { | ||
let payload = []; | ||
methods.forEach(method => { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
sendPayload(payload) { | ||
@@ -857,10 +768,9 @@ return new Promise((resolve, reject) => { | ||
} | ||
send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(response => { | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
async send(method, parameters) { | ||
const response = await this.sendPayload(JsonRpcMapper.toPayload(method, parameters)); | ||
const validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
} | ||
@@ -903,5 +813,2 @@ sendBatch(methods, moduleInstance) { | ||
} | ||
createProviderDetector() { | ||
return new ProviderDetector(); | ||
} | ||
createHttpProvider(url, options = {}) { | ||
@@ -962,21 +869,33 @@ return new HttpProvider(url, options, this); | ||
const HttpProvider$1 = (url, options) => { | ||
const global$1 = function () { | ||
return this || typeof self === 'object' && self; | ||
}() || new Function('return this')(); | ||
class ProviderDetector { | ||
static detect() { | ||
if (typeof global$1.ethereumProvider !== 'undefined' && global$1.ethereumProvider.constructor.name === 'EthereumProvider') { | ||
return global$1.ethereumProvider; | ||
} | ||
if (typeof global$1.web3 !== 'undefined' && global$1.web3.currentProvider) { | ||
return global$1.web3.currentProvider; | ||
} | ||
return null; | ||
} | ||
} | ||
function HttpProvider$1(url, options = {}) { | ||
return new ProvidersModuleFactory().createHttpProvider(url, options); | ||
}; | ||
const WebsocketProvider$1 = (url, options) => { | ||
} | ||
function WebsocketProvider$1(url, options = {}) { | ||
return new ProvidersModuleFactory().createWebsocketProvider(url, options); | ||
}; | ||
const IpcProvider$1 = (path, net) => { | ||
} | ||
function IpcProvider$1(path, net) { | ||
return new ProvidersModuleFactory().createIpcProvider(path, net); | ||
}; | ||
const BatchRequest$1 = moduleInstance => { | ||
} | ||
function BatchRequest$1(moduleInstance) { | ||
return new ProvidersModuleFactory().createBatchRequest(moduleInstance); | ||
}; | ||
const ProviderResolver$1 = () => { | ||
} | ||
function ProviderResolver$1() { | ||
return new ProvidersModuleFactory().createProviderResolver(); | ||
}; | ||
const ProviderDetector$1 = () => { | ||
return new ProvidersModuleFactory().createProviderDetector(); | ||
}; | ||
} | ||
export { HttpProvider$1 as HttpProvider, WebsocketProvider$1 as WebsocketProvider, IpcProvider$1 as IpcProvider, BatchRequest$1 as BatchRequest, ProviderResolver$1 as ProviderResolver, ProviderDetector$1 as ProviderDetector, ProvidersModuleFactory, Web3EthereumProvider }; | ||
export { ProviderDetector, HttpProvider$1 as HttpProvider, WebsocketProvider$1 as WebsocketProvider, IpcProvider$1 as IpcProvider, BatchRequest$1 as BatchRequest, ProviderResolver$1 as ProviderResolver, ProvidersModuleFactory, Web3EthereumProvider }; |
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('websocket'), require('xhr2-cookies'), require('url-parse'), require('lodash/isFunction'), require('@babel/runtime/regenerator'), require('@babel/runtime/helpers/asyncToGenerator'), require('eventemitter3'), require('oboe'), require('http'), require('https'), require('@babel/runtime/helpers/typeof'), require('lodash/isArray'), require('lodash/isObject'), require('@babel/runtime/helpers/possibleConstructorReturn'), require('@babel/runtime/helpers/getPrototypeOf'), require('@babel/runtime/helpers/get'), require('@babel/runtime/helpers/inherits'), require('@babel/runtime/helpers/classCallCheck'), require('@babel/runtime/helpers/createClass')) : | ||
typeof define === 'function' && define.amd ? define(['exports', 'websocket', 'xhr2-cookies', 'url-parse', 'lodash/isFunction', '@babel/runtime/regenerator', '@babel/runtime/helpers/asyncToGenerator', 'eventemitter3', 'oboe', 'http', 'https', '@babel/runtime/helpers/typeof', 'lodash/isArray', 'lodash/isObject', '@babel/runtime/helpers/possibleConstructorReturn', '@babel/runtime/helpers/getPrototypeOf', '@babel/runtime/helpers/get', '@babel/runtime/helpers/inherits', '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/createClass'], factory) : | ||
(factory((global.Web3Providers = {}),global.websocket,global.xhr2Cookies,global.URL,global.isFunction,global._regeneratorRuntime,global._asyncToGenerator,global.EventEmitter,global.oboe,global.http,global.https,global._typeof,global.isArray,global.isObject,global._possibleConstructorReturn,global._getPrototypeOf,global._get,global._inherits,global._classCallCheck,global._createClass)); | ||
}(this, (function (exports,websocket,xhr2Cookies,URL,isFunction,_regeneratorRuntime,_asyncToGenerator,EventEmitter,oboe,http,https,_typeof,isArray,isObject,_possibleConstructorReturn,_getPrototypeOf,_get,_inherits,_classCallCheck,_createClass) { 'use strict'; | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('websocket'), require('xhr2-cookies'), require('url-parse'), require('lodash/isFunction'), require('eventemitter3'), require('http'), require('https'), require('lodash/isArray'), require('lodash/isObject'), require('@babel/runtime/helpers/possibleConstructorReturn'), require('@babel/runtime/helpers/getPrototypeOf'), require('@babel/runtime/helpers/get'), require('@babel/runtime/helpers/inherits'), require('@babel/runtime/regenerator'), require('@babel/runtime/helpers/asyncToGenerator'), require('@babel/runtime/helpers/classCallCheck'), require('@babel/runtime/helpers/createClass'), require('@babel/runtime/helpers/typeof')) : | ||
typeof define === 'function' && define.amd ? define(['exports', 'websocket', 'xhr2-cookies', 'url-parse', 'lodash/isFunction', 'eventemitter3', 'http', 'https', 'lodash/isArray', 'lodash/isObject', '@babel/runtime/helpers/possibleConstructorReturn', '@babel/runtime/helpers/getPrototypeOf', '@babel/runtime/helpers/get', '@babel/runtime/helpers/inherits', '@babel/runtime/regenerator', '@babel/runtime/helpers/asyncToGenerator', '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/createClass', '@babel/runtime/helpers/typeof'], factory) : | ||
(factory((global.Web3Providers = {}),global.websocket,global.xhr2Cookies,global.URL,global.isFunction,global.EventEmitter,global.http,global.https,global.isArray,global.isObject,global._possibleConstructorReturn,global._getPrototypeOf,global._get,global._inherits,global._regeneratorRuntime,global._asyncToGenerator,global._classCallCheck,global._createClass,global._typeof)); | ||
}(this, (function (exports,websocket,xhr2Cookies,URL,isFunction,EventEmitter,http,https,isArray,isObject,_possibleConstructorReturn,_getPrototypeOf,_get,_inherits,_regeneratorRuntime,_asyncToGenerator,_classCallCheck,_createClass,_typeof) { 'use strict'; | ||
URL = URL && URL.hasOwnProperty('default') ? URL['default'] : URL; | ||
isFunction = isFunction && isFunction.hasOwnProperty('default') ? isFunction['default'] : isFunction; | ||
_regeneratorRuntime = _regeneratorRuntime && _regeneratorRuntime.hasOwnProperty('default') ? _regeneratorRuntime['default'] : _regeneratorRuntime; | ||
_asyncToGenerator = _asyncToGenerator && _asyncToGenerator.hasOwnProperty('default') ? _asyncToGenerator['default'] : _asyncToGenerator; | ||
EventEmitter = EventEmitter && EventEmitter.hasOwnProperty('default') ? EventEmitter['default'] : EventEmitter; | ||
oboe = oboe && oboe.hasOwnProperty('default') ? oboe['default'] : oboe; | ||
http = http && http.hasOwnProperty('default') ? http['default'] : http; | ||
https = https && https.hasOwnProperty('default') ? https['default'] : https; | ||
_typeof = _typeof && _typeof.hasOwnProperty('default') ? _typeof['default'] : _typeof; | ||
isArray = isArray && isArray.hasOwnProperty('default') ? isArray['default'] : isArray; | ||
@@ -22,4 +18,7 @@ isObject = isObject && isObject.hasOwnProperty('default') ? isObject['default'] : isObject; | ||
_inherits = _inherits && _inherits.hasOwnProperty('default') ? _inherits['default'] : _inherits; | ||
_regeneratorRuntime = _regeneratorRuntime && _regeneratorRuntime.hasOwnProperty('default') ? _regeneratorRuntime['default'] : _regeneratorRuntime; | ||
_asyncToGenerator = _asyncToGenerator && _asyncToGenerator.hasOwnProperty('default') ? _asyncToGenerator['default'] : _asyncToGenerator; | ||
_classCallCheck = _classCallCheck && _classCallCheck.hasOwnProperty('default') ? _classCallCheck['default'] : _classCallCheck; | ||
_createClass = _createClass && _createClass.hasOwnProperty('default') ? _createClass['default'] : _createClass; | ||
_typeof = _typeof && _typeof.hasOwnProperty('default') ? _typeof['default'] : _typeof; | ||
@@ -49,3 +48,3 @@ var global = function () { | ||
} | ||
if (this.isWeb3Provider(provider)) { | ||
if (provider.sendPayload && provider.subscribe) { | ||
return provider; | ||
@@ -65,16 +64,2 @@ } | ||
}, { | ||
key: "isWeb3Provider", | ||
value: function isWeb3Provider(provider) { | ||
switch (provider.constructor.name) { | ||
case 'HttpProvider': | ||
case 'IpcProvider': | ||
case 'WebsocketProvider': | ||
case 'CustomProvider': | ||
case 'MetamaskProvider': | ||
case 'MistEthereumProvider': | ||
case 'Web3EthereumProvider': | ||
return true; | ||
} | ||
} | ||
}, { | ||
key: "isMetamaskInpageProvider", | ||
@@ -88,25 +73,2 @@ value: function isMetamaskInpageProvider(provider) { | ||
var global$1 = function () { | ||
return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object' && self; | ||
}() || new Function('return this')(); | ||
var ProviderDetector = | ||
function () { | ||
function ProviderDetector() { | ||
_classCallCheck(this, ProviderDetector); | ||
} | ||
_createClass(ProviderDetector, [{ | ||
key: "detect", | ||
value: function detect() { | ||
if (typeof global$1.ethereumProvider !== 'undefined' && global$1.ethereumProvider.constructor.name === 'EthereumProvider') { | ||
return global$1.ethereumProvider; | ||
} | ||
if (typeof global$1.web3 !== 'undefined' && global$1.web3.currentProvider) { | ||
return global$1.web3.currentProvider; | ||
} | ||
return null; | ||
} | ||
}]); | ||
return ProviderDetector; | ||
}(); | ||
var messageId = 0; | ||
@@ -137,2 +99,32 @@ var JsonRpcMapper = | ||
var JsonRpcResponseValidator = | ||
function () { | ||
function JsonRpcResponseValidator() { | ||
_classCallCheck(this, JsonRpcResponseValidator); | ||
} | ||
_createClass(JsonRpcResponseValidator, null, [{ | ||
key: "validate", | ||
value: function validate(response) { | ||
var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | ||
if (isObject(response)) { | ||
if (response.error) { | ||
if (response.error instanceof Error) { | ||
return new Error("Node error: ".concat(response.error.message)); | ||
} | ||
return new Error("Node error: ".concat(JSON.stringify(response.error))); | ||
} | ||
if (payload && response.id !== payload.id) { | ||
return new Error("Validation error: Invalid JSON-RPC response ID (request: ".concat(payload.id, " / response: ").concat(response.id, ")")); | ||
} | ||
if (response.result === undefined) { | ||
return new Error('Validation error: Undefined JSON-RPC result'); | ||
} | ||
return true; | ||
} | ||
return new Error('Validation error: Response should be of type Object'); | ||
} | ||
}]); | ||
return JsonRpcResponseValidator; | ||
}(); | ||
var AbstractSocketProvider = | ||
@@ -179,6 +171,44 @@ function (_EventEmitter) { | ||
key: "send", | ||
value: function send(method, parameters) {} | ||
value: function () { | ||
var _send = _asyncToGenerator( | ||
_regeneratorRuntime.mark(function _callee(method, parameters) { | ||
var response, validationResult; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)); | ||
case 2: | ||
response = _context.sent; | ||
validationResult = JsonRpcResponseValidator.validate(response); | ||
if (!(validationResult instanceof Error)) { | ||
_context.next = 6; | ||
break; | ||
} | ||
throw validationResult; | ||
case 6: | ||
return _context.abrupt("return", response.result); | ||
case 7: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function send(_x, _x2) { | ||
return _send.apply(this, arguments); | ||
} | ||
return send; | ||
}() | ||
}, { | ||
key: "sendBatch", | ||
value: function sendBatch(methods, moduleInstance) {} | ||
value: function sendBatch(methods, moduleInstance) { | ||
var payload = []; | ||
methods.forEach(function (method) { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
}, { | ||
@@ -211,11 +241,11 @@ key: "onReady", | ||
var _onConnect = _asyncToGenerator( | ||
_regeneratorRuntime.mark(function _callee() { | ||
_regeneratorRuntime.mark(function _callee2() { | ||
var subscriptionKeys, subscriptionId, _i, key; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
return _regeneratorRuntime.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
subscriptionKeys = Object.keys(this.subscriptions); | ||
if (!(subscriptionKeys.length > 0)) { | ||
_context.next = 13; | ||
_context2.next = 13; | ||
break; | ||
@@ -226,10 +256,10 @@ } | ||
if (!(_i < subscriptionKeys.length)) { | ||
_context.next = 13; | ||
_context2.next = 13; | ||
break; | ||
} | ||
key = subscriptionKeys[_i]; | ||
_context.next = 7; | ||
_context2.next = 7; | ||
return this.subscribe(this.subscriptions[key].subscribeMethod, this.subscriptions[key].parameters[0], this.subscriptions[key].parameters.slice(1)); | ||
case 7: | ||
subscriptionId = _context.sent; | ||
subscriptionId = _context2.sent; | ||
delete this.subscriptions[subscriptionId]; | ||
@@ -239,16 +269,18 @@ this.subscriptions[this.getSubscriptionEvent(this.subscriptions[key].id)].id = subscriptionId; | ||
_i++; | ||
_context.next = 3; | ||
_context2.next = 3; | ||
break; | ||
case 13: | ||
this.emit(this.SOCKET_CONNECT); | ||
this.emit(this.CONNECT); | ||
case 14: | ||
case 15: | ||
case "end": | ||
return _context.stop(); | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
}, _callee2, this); | ||
})); | ||
return function onConnect() { | ||
function onConnect() { | ||
return _onConnect.apply(this, arguments); | ||
}; | ||
} | ||
return onConnect; | ||
}() | ||
@@ -358,32 +390,2 @@ }, { | ||
var JsonRpcResponseValidator = | ||
function () { | ||
function JsonRpcResponseValidator() { | ||
_classCallCheck(this, JsonRpcResponseValidator); | ||
} | ||
_createClass(JsonRpcResponseValidator, null, [{ | ||
key: "validate", | ||
value: function validate(response) { | ||
var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | ||
if (isObject(response)) { | ||
if (response.error) { | ||
if (response.error instanceof Error) { | ||
return new Error("Node error: ".concat(response.error.message)); | ||
} | ||
return new Error("Node error: ".concat(JSON.stringify(response.error))); | ||
} | ||
if (payload && response.id !== payload.id) { | ||
return new Error("Validation error: Invalid JSON-RPC response ID (request: ".concat(payload.id, " / response: ").concat(response.id, ")")); | ||
} | ||
if (response.result === undefined) { | ||
return new Error('Validation error: Undefined JSON-RPC result'); | ||
} | ||
return true; | ||
} | ||
return new Error('Validation error: Response should be of type Object'); | ||
} | ||
}]); | ||
return JsonRpcResponseValidator; | ||
}(); | ||
var WebsocketProvider = | ||
@@ -483,23 +485,2 @@ function (_AbstractSocketProvid) { | ||
}, { | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
}, { | ||
key: "sendBatch", | ||
value: function sendBatch(methods, moduleInstance) { | ||
var payload = []; | ||
methods.forEach(function (method) { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
}, { | ||
key: "sendPayload", | ||
@@ -556,2 +537,3 @@ value: function sendPayload(payload) { | ||
_this.host = path; | ||
_this.chunks = ''; | ||
return _this; | ||
@@ -574,3 +556,9 @@ } | ||
value: function onMessage(message) { | ||
_get(_getPrototypeOf(IpcProvider.prototype), "onMessage", this).call(this, message.toString()); | ||
var chunk = message.toString('utf8'); | ||
if (chunk.indexOf('\n') < 0) { | ||
this.chunks += chunk; | ||
return; | ||
} | ||
_get(_getPrototypeOf(IpcProvider.prototype), "onMessage", this).call(this, this.chunks + chunk.substring(0, chunk.indexOf('\n'))); | ||
this.chunks = chunk.substring(chunk.indexOf('\n') + 1); | ||
} | ||
@@ -580,13 +568,8 @@ }, { | ||
value: function registerEventListeners() { | ||
if (this.connection.constructor.name === 'Socket') { | ||
oboe(this.connection).done(this.onMessage); | ||
} else { | ||
this.connection.addListener('data', this.onMessage.bind(this)); | ||
} | ||
this.connection.addListener('connect', this.onConnect.bind(this)); | ||
this.connection.addListener('error', this.onError.bind(this)); | ||
this.connection.addListener('end', this.onError.bind(this)); | ||
this.connection.addListener('close', this.onClose.bind(this)); | ||
this.connection.addListener('timeout', this.onClose.bind(this)); | ||
this.connection.addListener('ready', this.onReady.bind(this)); | ||
this.connection.on('data', this.onMessage.bind(this)); | ||
this.connection.on('connect', this.onConnect.bind(this)); | ||
this.connection.on('error', this.onError.bind(this)); | ||
this.connection.on('close', this.onClose.bind(this)); | ||
this.connection.on('timeout', this.onClose.bind(this)); | ||
this.connection.on('ready', this.onReady.bind(this)); | ||
} | ||
@@ -598,15 +581,15 @@ }, { | ||
case this.SOCKET_MESSAGE: | ||
this.connection.removeEventListener('data', this.onMessage); | ||
this.connection.removeListener('data', this.onMessage); | ||
break; | ||
case this.SOCKET_READY: | ||
this.connection.removeEventListener('ready', this.onReady); | ||
this.connection.removeListener('ready', this.onReady); | ||
break; | ||
case this.SOCKET_CLOSE: | ||
this.connection.removeEventListener('close', this.onClose); | ||
this.connection.removeListener('close', this.onClose); | ||
break; | ||
case this.SOCKET_ERROR: | ||
this.connection.removeEventListener('error', this.onError); | ||
this.connection.removeListener('error', this.onError); | ||
break; | ||
case this.SOCKET_CONNECT: | ||
this.connection.removeEventListener('connect', this.onConnect); | ||
this.connection.removeListener('connect', this.onConnect); | ||
break; | ||
@@ -617,23 +600,2 @@ } | ||
}, { | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
}, { | ||
key: "sendBatch", | ||
value: function sendBatch(methods, moduleInstance) { | ||
var payload = []; | ||
methods.forEach(function (method) { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
}, { | ||
key: "sendPayload", | ||
@@ -643,5 +605,2 @@ value: function sendPayload(payload) { | ||
return new Promise(function (resolve, reject) { | ||
if (_this2.connection.pending) { | ||
return reject(new Error('Connection error: The socket is still trying to connect')); | ||
} | ||
if (!_this2.connection.writable) { | ||
@@ -659,6 +618,3 @@ _this2.connection.connect({ | ||
} | ||
_this2.on(id, function (response) { | ||
resolve(response); | ||
_this2.removeAllListeners(id); | ||
}); | ||
_this2.once(id, resolve); | ||
return; | ||
@@ -722,11 +678,34 @@ } | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
value: function () { | ||
var _send = _asyncToGenerator( | ||
_regeneratorRuntime.mark(function _callee(method, parameters) { | ||
var response, validationResult; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)); | ||
case 2: | ||
response = _context.sent; | ||
validationResult = JsonRpcResponseValidator.validate(response); | ||
if (!(validationResult instanceof Error)) { | ||
_context.next = 6; | ||
break; | ||
} | ||
throw validationResult; | ||
case 6: | ||
return _context.abrupt("return", response.result); | ||
case 7: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function send(_x, _x2) { | ||
return _send.apply(this, arguments); | ||
} | ||
return send; | ||
}() | ||
}, { | ||
@@ -772,5 +751,3 @@ key: "sendBatch", | ||
} catch (error) { | ||
if (error.constructor.name === 'NetworkError') { | ||
_this.connected = false; | ||
} | ||
_this.connected = false; | ||
reject(error); | ||
@@ -915,11 +892,31 @@ } | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.connection.send(method, parameters).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response; | ||
}); | ||
} | ||
value: function () { | ||
var _send = _asyncToGenerator( | ||
_regeneratorRuntime.mark(function _callee(method, parameters) { | ||
var response, validationResult; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
response = this.connection.send(method, parameters); | ||
validationResult = JsonRpcResponseValidator.validate(response); | ||
if (!(validationResult instanceof Error)) { | ||
_context.next = 4; | ||
break; | ||
} | ||
throw validationResult; | ||
case 4: | ||
return _context.abrupt("return", response); | ||
case 5: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function send(_x, _x2) { | ||
return _send.apply(this, arguments); | ||
} | ||
return send; | ||
}() | ||
}, { | ||
@@ -1006,23 +1003,2 @@ key: "sendBatch", | ||
}, { | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
}, { | ||
key: "sendBatch", | ||
value: function sendBatch(methods, moduleInstance) { | ||
var payload = []; | ||
methods.forEach(function (method) { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
}, { | ||
key: "sendPayload", | ||
@@ -1097,23 +1073,2 @@ value: function sendPayload(payload) { | ||
}, { | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
}, { | ||
key: "sendBatch", | ||
value: function sendBatch(methods, moduleInstance) { | ||
var payload = []; | ||
methods.forEach(function (method) { | ||
method.beforeExecution(moduleInstance); | ||
payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters)); | ||
}); | ||
return this.sendPayload(payload); | ||
} | ||
}, { | ||
key: "sendPayload", | ||
@@ -1169,11 +1124,34 @@ value: function sendPayload(payload) { | ||
key: "send", | ||
value: function send(method, parameters) { | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)).then(function (response) { | ||
var validationResult = JsonRpcResponseValidator.validate(response); | ||
if (validationResult instanceof Error) { | ||
throw validationResult; | ||
} | ||
return response.result; | ||
}); | ||
} | ||
value: function () { | ||
var _send = _asyncToGenerator( | ||
_regeneratorRuntime.mark(function _callee(method, parameters) { | ||
var response, validationResult; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return this.sendPayload(JsonRpcMapper.toPayload(method, parameters)); | ||
case 2: | ||
response = _context.sent; | ||
validationResult = JsonRpcResponseValidator.validate(response); | ||
if (!(validationResult instanceof Error)) { | ||
_context.next = 6; | ||
break; | ||
} | ||
throw validationResult; | ||
case 6: | ||
return _context.abrupt("return", response.result); | ||
case 7: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function send(_x, _x2) { | ||
return _send.apply(this, arguments); | ||
} | ||
return send; | ||
}() | ||
}, { | ||
@@ -1231,7 +1209,2 @@ key: "sendBatch", | ||
}, { | ||
key: "createProviderDetector", | ||
value: function createProviderDetector() { | ||
return new ProviderDetector(); | ||
} | ||
}, { | ||
key: "createHttpProvider", | ||
@@ -1314,21 +1287,44 @@ value: function createHttpProvider(url) { | ||
var HttpProvider$1 = function HttpProvider(url, options) { | ||
var global$1 = function () { | ||
return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object' && self; | ||
}() || new Function('return this')(); | ||
var ProviderDetector = | ||
function () { | ||
function ProviderDetector() { | ||
_classCallCheck(this, ProviderDetector); | ||
} | ||
_createClass(ProviderDetector, null, [{ | ||
key: "detect", | ||
value: function detect() { | ||
if (typeof global$1.ethereumProvider !== 'undefined' && global$1.ethereumProvider.constructor.name === 'EthereumProvider') { | ||
return global$1.ethereumProvider; | ||
} | ||
if (typeof global$1.web3 !== 'undefined' && global$1.web3.currentProvider) { | ||
return global$1.web3.currentProvider; | ||
} | ||
return null; | ||
} | ||
}]); | ||
return ProviderDetector; | ||
}(); | ||
function HttpProvider$1(url) { | ||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
return new ProvidersModuleFactory().createHttpProvider(url, options); | ||
}; | ||
var WebsocketProvider$1 = function WebsocketProvider(url, options) { | ||
} | ||
function WebsocketProvider$1(url) { | ||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
return new ProvidersModuleFactory().createWebsocketProvider(url, options); | ||
}; | ||
var IpcProvider$1 = function IpcProvider(path, net) { | ||
} | ||
function IpcProvider$1(path, net) { | ||
return new ProvidersModuleFactory().createIpcProvider(path, net); | ||
}; | ||
var BatchRequest$1 = function BatchRequest(moduleInstance) { | ||
} | ||
function BatchRequest$1(moduleInstance) { | ||
return new ProvidersModuleFactory().createBatchRequest(moduleInstance); | ||
}; | ||
var ProviderResolver$1 = function ProviderResolver() { | ||
} | ||
function ProviderResolver$1() { | ||
return new ProvidersModuleFactory().createProviderResolver(); | ||
}; | ||
var ProviderDetector$1 = function ProviderDetector() { | ||
return new ProvidersModuleFactory().createProviderDetector(); | ||
}; | ||
} | ||
exports.ProviderDetector = ProviderDetector; | ||
exports.HttpProvider = HttpProvider$1; | ||
@@ -1339,3 +1335,2 @@ exports.WebsocketProvider = WebsocketProvider$1; | ||
exports.ProviderResolver = ProviderResolver$1; | ||
exports.ProviderDetector = ProviderDetector$1; | ||
exports.ProvidersModuleFactory = ProvidersModuleFactory; | ||
@@ -1342,0 +1337,0 @@ exports.Web3EthereumProvider = Web3EthereumProvider; |
{ | ||
"name": "web3-providers", | ||
"namespace": "ethereum", | ||
"version": "1.0.0-beta.48", | ||
"version": "1.0.0-beta.49", | ||
"description": "Web3 module to handle requests to external providers.", | ||
@@ -23,3 +23,2 @@ "repository": "https://github.com/ethereum/web3.js/tree/1.0/packages/web3-providers", | ||
"lodash": "^4.17.11", | ||
"oboe": "2.1.4", | ||
"url-parse": "1.4.4", | ||
@@ -30,7 +29,8 @@ "websocket": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", | ||
"devDependencies": { | ||
"dtslint": "^0.4.2", | ||
"web3-core": "1.0.0-beta.48", | ||
"web3-core-helpers": "1.0.0-beta.48", | ||
"web3-core-method": "1.0.0-beta.48", | ||
"web3-utils": "1.0.0-beta.48" | ||
"definitelytyped-header-parser": "^1.0.1", | ||
"dtslint": "0.4.2", | ||
"web3-core": "1.0.0-beta.49", | ||
"web3-core-helpers": "1.0.0-beta.49", | ||
"web3-core-method": "1.0.0-beta.49", | ||
"web3-utils": "1.0.0-beta.49" | ||
}, | ||
@@ -40,3 +40,4 @@ "files": [ | ||
"types/index.d.ts" | ||
] | ||
], | ||
"gitHead": "eb1452cdd1591e0f26ff0f66df68ee0feb3f8c47" | ||
} |
@@ -32,7 +32,7 @@ /* | ||
execute(): Promise<{methods: AbstractMethod[], response: object[]}|Error[]>; | ||
execute(): Promise<{methods: AbstractMethod[]; response: any[]} | Error[]>; | ||
} | ||
export class ProviderDetector { | ||
detect(): provider | undefined; | ||
static detect(): provider | undefined; | ||
} | ||
@@ -45,4 +45,2 @@ | ||
createProviderDetector(): ProviderDetector; | ||
createHttpProvider(url: string): HttpProvider; | ||
@@ -63,5 +61,5 @@ | ||
send(method: string, parameters: any[]): Promise<object>; | ||
send(method: string, parameters: any[]): Promise<any>; | ||
sendBatch(methods: AbstractMethod[], moduleInstance: AbstractWeb3Module): Promise<object[]>; | ||
sendBatch(methods: AbstractMethod[], moduleInstance: AbstractWeb3Module): Promise<any[]>; | ||
@@ -79,5 +77,5 @@ disconnect(): boolean; | ||
send(method: string, parameters: any[]): Promise<object>; | ||
send(method: string, parameters: any[]): Promise<any>; | ||
sendBatch(methods: AbstractMethod[], moduleInstance: AbstractWeb3Module): Promise<object[]>; | ||
sendBatch(methods: AbstractMethod[], moduleInstance: AbstractWeb3Module): Promise<any[]>; | ||
@@ -88,3 +86,3 @@ subscribe(subscribeMethod: string, subscriptionMethod: string, parameters: any[]): Promise<string>; | ||
clearSubscriptions(unsubscribeMethod: string): Promise<boolean> | ||
clearSubscriptions(unsubscribeMethod: string): Promise<boolean>; | ||
@@ -99,3 +97,3 @@ on(type: string, callback: () => void): void; | ||
reconnect(): void | ||
reconnect(): void; | ||
@@ -121,5 +119,5 @@ disconnect(code: number, reason: string): void; | ||
send(method: string, parameters: any[]): Promise<object>; | ||
send(method: string, parameters: any[]): Promise<any>; | ||
sendBatch(methods: AbstractMethod[], moduleInstance: AbstractWeb3Module): Promise<object[]>; | ||
sendBatch(methods: AbstractMethod[], moduleInstance: AbstractWeb3Module): Promise<any[]>; | ||
@@ -130,3 +128,3 @@ subscribe(subscribeMethod: string, subscriptionMethod: string, parameters: any[]): Promise<string>; | ||
clearSubscriptions(unsubscribeMethod: string): Promise<boolean> | ||
clearSubscriptions(unsubscribeMethod: string): Promise<boolean>; | ||
@@ -147,4 +145,2 @@ on(type: string, callback: () => void): void; | ||
export class ProviderResolver { | ||
constructor(providersPackageFactory: ProvidersModuleFactory); | ||
resolve(provider: provider, net: net.Socket): provider; | ||
@@ -151,0 +147,0 @@ } |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Copyleft License
License(Experimental) Copyleft license information was found.
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
Non-permissive License
License(Experimental) A license not known to be considered permissive was found.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Copyleft License
License(Experimental) Copyleft license information was found.
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
Non-permissive License
License(Experimental) A license not known to be considered permissive was found.
Found 1 instance in 1 package
7
8
228781
6
3568
- Removedoboe@2.1.4
- Removedhttp-https@1.0.0(transitive)
- Removedoboe@2.1.4(transitive)