web3-provdr 0.0.1-security → 1.0.0-beta.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of web3-provdr might be problematic. Click here for more details.

@@ -0,0 +1,1356 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@babel/runtime/helpers/classCallCheck'), require('@babel/runtime/helpers/createClass'), require('websocket'), require('xhr2-cookies'), require('url-parse'), require('@babel/runtime/helpers/typeof'), require('lodash/isFunction'), 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('eventemitter3'), require('lodash/isArray'), require('http'), require('https')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/createClass', 'websocket', 'xhr2-cookies', 'url-parse', '@babel/runtime/helpers/typeof', 'lodash/isFunction', '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', 'eventemitter3', 'lodash/isArray', 'http', 'https'], factory) :
4
+ (global = global || self, factory(global.Web3Providers = {}, global._classCallCheck, global._createClass, global.websocket, global.xhr2Cookies, global.URL, global._typeof, global.isFunction, global.isObject, global._possibleConstructorReturn, global._getPrototypeOf, global._get, global._inherits, global._regeneratorRuntime, global._asyncToGenerator, global.EventEmitter, global.isArray, global.http, global.https));
5
+ }(this, function (exports, _classCallCheck, _createClass, websocket, xhr2Cookies, URL, _typeof, isFunction, isObject, _possibleConstructorReturn, _getPrototypeOf, _get, _inherits, _regeneratorRuntime, _asyncToGenerator, EventEmitter, isArray, http, https) { 'use strict';
6
+
7
+ _classCallCheck = _classCallCheck && _classCallCheck.hasOwnProperty('default') ? _classCallCheck['default'] : _classCallCheck;
8
+ _createClass = _createClass && _createClass.hasOwnProperty('default') ? _createClass['default'] : _createClass;
9
+ URL = URL && URL.hasOwnProperty('default') ? URL['default'] : URL;
10
+ _typeof = _typeof && _typeof.hasOwnProperty('default') ? _typeof['default'] : _typeof;
11
+ isFunction = isFunction && isFunction.hasOwnProperty('default') ? isFunction['default'] : isFunction;
12
+ isObject = isObject && isObject.hasOwnProperty('default') ? isObject['default'] : isObject;
13
+ _possibleConstructorReturn = _possibleConstructorReturn && _possibleConstructorReturn.hasOwnProperty('default') ? _possibleConstructorReturn['default'] : _possibleConstructorReturn;
14
+ _getPrototypeOf = _getPrototypeOf && _getPrototypeOf.hasOwnProperty('default') ? _getPrototypeOf['default'] : _getPrototypeOf;
15
+ _get = _get && _get.hasOwnProperty('default') ? _get['default'] : _get;
16
+ _inherits = _inherits && _inherits.hasOwnProperty('default') ? _inherits['default'] : _inherits;
17
+ _regeneratorRuntime = _regeneratorRuntime && _regeneratorRuntime.hasOwnProperty('default') ? _regeneratorRuntime['default'] : _regeneratorRuntime;
18
+ _asyncToGenerator = _asyncToGenerator && _asyncToGenerator.hasOwnProperty('default') ? _asyncToGenerator['default'] : _asyncToGenerator;
19
+ EventEmitter = EventEmitter && EventEmitter.hasOwnProperty('default') ? EventEmitter['default'] : EventEmitter;
20
+ isArray = isArray && isArray.hasOwnProperty('default') ? isArray['default'] : isArray;
21
+ http = http && http.hasOwnProperty('default') ? http['default'] : http;
22
+ https = https && https.hasOwnProperty('default') ? https['default'] : https;
23
+
24
+ var global = function () {
25
+ return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object' && self;
26
+ }() || new Function('return this')();
27
+ var ProviderResolver =
28
+ function () {
29
+ function ProviderResolver(providersModuleFactory) {
30
+ _classCallCheck(this, ProviderResolver);
31
+ this.providersModuleFactory = providersModuleFactory;
32
+ }
33
+ _createClass(ProviderResolver, [{
34
+ key: "resolve",
35
+ value: function resolve(provider, net) {
36
+ if (!provider) {
37
+ return provider;
38
+ }
39
+ if (typeof provider === 'string') {
40
+ if (/^http(s)?:\/\//i.test(provider)) {
41
+ return this.providersModuleFactory.createHttpProvider(provider);
42
+ }
43
+ if (/^ws(s)?:\/\//i.test(provider)) {
44
+ return this.providersModuleFactory.createWebsocketProvider(provider);
45
+ }
46
+ if (provider && isObject(net) && isFunction(net.connect)) {
47
+ return this.providersModuleFactory.createIpcProvider(provider, net);
48
+ }
49
+ }
50
+ if (provider.sendPayload && provider.subscribe) {
51
+ return provider;
52
+ }
53
+ if (typeof global.mist !== 'undefined' && provider.constructor.name === 'EthereumProvider') {
54
+ return this.providersModuleFactory.createMistEthereumProvider(provider);
55
+ }
56
+ if (provider.isEIP1193) {
57
+ return this.providersModuleFactory.createWeb3EthereumProvider(provider);
58
+ }
59
+ if (this.isMetamaskInpageProvider(provider)) {
60
+ return this.providersModuleFactory.createMetamaskProvider(provider);
61
+ }
62
+ return this.providersModuleFactory.createCustomProvider(provider);
63
+ }
64
+ }, {
65
+ key: "isMetamaskInpageProvider",
66
+ value: function isMetamaskInpageProvider(provider) {
67
+ return provider.constructor.name === 'MetamaskInpageProvider';
68
+ }
69
+ }]);
70
+ return ProviderResolver;
71
+ }();
72
+
73
+ var messageId = 0;
74
+ var JsonRpcMapper =
75
+ function () {
76
+ function JsonRpcMapper() {
77
+ _classCallCheck(this, JsonRpcMapper);
78
+ }
79
+ _createClass(JsonRpcMapper, null, [{
80
+ key: "toPayload",
81
+ value: function toPayload(method, params) {
82
+ if (!method) {
83
+ throw new Error("JSONRPC method should be specified for params: \"".concat(JSON.stringify(params), "\"!"));
84
+ }
85
+ var id = messageId;
86
+ messageId++;
87
+ return {
88
+ jsonrpc: '2.0',
89
+ id: id,
90
+ method: method,
91
+ params: params || []
92
+ };
93
+ }
94
+ }]);
95
+ return JsonRpcMapper;
96
+ }();
97
+
98
+ var JsonRpcResponseValidator =
99
+ function () {
100
+ function JsonRpcResponseValidator() {
101
+ _classCallCheck(this, JsonRpcResponseValidator);
102
+ }
103
+ _createClass(JsonRpcResponseValidator, null, [{
104
+ key: "validate",
105
+ value: function validate(response) {
106
+ var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
107
+ if (isObject(response)) {
108
+ if (response.error) {
109
+ if (response.error instanceof Error) {
110
+ return new Error("Node error: ".concat(response.error.message));
111
+ }
112
+ return new Error("Node error: ".concat(JSON.stringify(response.error)));
113
+ }
114
+ if (payload && response.id !== payload.id) {
115
+ return new Error("Validation error: Invalid JSON-RPC response ID (request: ".concat(payload.id, " / response: ").concat(response.id, ")"));
116
+ }
117
+ if (response.result === undefined) {
118
+ return new Error('Validation error: Undefined JSON-RPC result');
119
+ }
120
+ return true;
121
+ }
122
+ return new Error('Validation error: Response should be of type Object');
123
+ }
124
+ }]);
125
+ return JsonRpcResponseValidator;
126
+ }();
127
+
128
+ var AbstractSocketProvider =
129
+ function (_EventEmitter) {
130
+ _inherits(AbstractSocketProvider, _EventEmitter);
131
+ function AbstractSocketProvider(connection, timeout) {
132
+ var _this;
133
+ _classCallCheck(this, AbstractSocketProvider);
134
+ _this = _possibleConstructorReturn(this, _getPrototypeOf(AbstractSocketProvider).call(this));
135
+ _this.connection = connection;
136
+ _this.timeout = timeout;
137
+ _this.subscriptions = {};
138
+ _this.registerEventListeners();
139
+ _this.READY = 'ready';
140
+ _this.CONNECT = 'connect';
141
+ _this.ERROR = 'error';
142
+ _this.CLOSE = 'close';
143
+ _this.SOCKET_MESSAGE = 'socket_message';
144
+ _this.SOCKET_READY = 'socket_ready';
145
+ _this.SOCKET_CLOSE = 'socket_close';
146
+ _this.SOCKET_ERROR = 'socket_error';
147
+ _this.SOCKET_CONNECT = 'socket_connect';
148
+ _this.SOCKET_NETWORK_CHANGED = 'socket_networkChanged';
149
+ _this.SOCKET_ACCOUNTS_CHANGED = 'socket_accountsChanged';
150
+ return _this;
151
+ }
152
+ _createClass(AbstractSocketProvider, [{
153
+ key: "supportsSubscriptions",
154
+ value: function supportsSubscriptions() {
155
+ return true;
156
+ }
157
+ }, {
158
+ key: "registerEventListeners",
159
+ value: function registerEventListeners() {}
160
+ }, {
161
+ key: "removeAllSocketListeners",
162
+ value: function removeAllSocketListeners() {
163
+ this.removeAllListeners(this.SOCKET_MESSAGE);
164
+ this.removeAllListeners(this.SOCKET_READY);
165
+ this.removeAllListeners(this.SOCKET_CLOSE);
166
+ this.removeAllListeners(this.SOCKET_ERROR);
167
+ this.removeAllListeners(this.SOCKET_CONNECT);
168
+ }
169
+ }, {
170
+ key: "disconnect",
171
+ value: function disconnect(code, reason) {}
172
+ }, {
173
+ key: "send",
174
+ value: function () {
175
+ var _send = _asyncToGenerator(
176
+ _regeneratorRuntime.mark(function _callee(method, parameters) {
177
+ var response, validationResult;
178
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
179
+ while (1) {
180
+ switch (_context.prev = _context.next) {
181
+ case 0:
182
+ _context.next = 2;
183
+ return this.sendPayload(JsonRpcMapper.toPayload(method, parameters));
184
+ case 2:
185
+ response = _context.sent;
186
+ validationResult = JsonRpcResponseValidator.validate(response);
187
+ if (!(validationResult instanceof Error)) {
188
+ _context.next = 6;
189
+ break;
190
+ }
191
+ throw validationResult;
192
+ case 6:
193
+ return _context.abrupt("return", response.result);
194
+ case 7:
195
+ case "end":
196
+ return _context.stop();
197
+ }
198
+ }
199
+ }, _callee, this);
200
+ }));
201
+ function send(_x, _x2) {
202
+ return _send.apply(this, arguments);
203
+ }
204
+ return send;
205
+ }()
206
+ }, {
207
+ key: "sendBatch",
208
+ value: function sendBatch(methods, moduleInstance) {
209
+ var payload = [];
210
+ methods.forEach(function (method) {
211
+ method.beforeExecution(moduleInstance);
212
+ payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters));
213
+ });
214
+ return this.sendPayload(payload);
215
+ }
216
+ }, {
217
+ key: "onReady",
218
+ value: function onReady(event) {
219
+ this.emit(this.READY, event);
220
+ this.emit(this.SOCKET_READY, event);
221
+ }
222
+ }, {
223
+ key: "onError",
224
+ value: function onError(error) {
225
+ this.emit(this.ERROR, error);
226
+ this.emit(this.SOCKET_ERROR, error);
227
+ this.removeAllSocketListeners();
228
+ this.removeAllListeners();
229
+ }
230
+ }, {
231
+ key: "onClose",
232
+ value: function onClose() {
233
+ var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
234
+ this.emit(this.CLOSE, error);
235
+ this.emit(this.SOCKET_CLOSE, error);
236
+ this.removeAllSocketListeners();
237
+ this.removeAllListeners();
238
+ }
239
+ }, {
240
+ key: "onConnect",
241
+ value: function () {
242
+ var _onConnect = _asyncToGenerator(
243
+ _regeneratorRuntime.mark(function _callee2() {
244
+ var subscriptionKeys, subscriptionId, _i, _subscriptionKeys, key;
245
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
246
+ while (1) {
247
+ switch (_context2.prev = _context2.next) {
248
+ case 0:
249
+ subscriptionKeys = Object.keys(this.subscriptions);
250
+ if (!(subscriptionKeys.length > 0)) {
251
+ _context2.next = 13;
252
+ break;
253
+ }
254
+ _i = 0, _subscriptionKeys = subscriptionKeys;
255
+ case 3:
256
+ if (!(_i < _subscriptionKeys.length)) {
257
+ _context2.next = 13;
258
+ break;
259
+ }
260
+ key = _subscriptionKeys[_i];
261
+ _context2.next = 7;
262
+ return this.subscribe(this.subscriptions[key].subscribeMethod, this.subscriptions[key].parameters[0], this.subscriptions[key].parameters.slice(1));
263
+ case 7:
264
+ subscriptionId = _context2.sent;
265
+ delete this.subscriptions[subscriptionId];
266
+ this.subscriptions[key].id = subscriptionId;
267
+ case 10:
268
+ _i++;
269
+ _context2.next = 3;
270
+ break;
271
+ case 13:
272
+ this.emit(this.SOCKET_CONNECT);
273
+ this.emit(this.CONNECT);
274
+ case 15:
275
+ case "end":
276
+ return _context2.stop();
277
+ }
278
+ }
279
+ }, _callee2, this);
280
+ }));
281
+ function onConnect() {
282
+ return _onConnect.apply(this, arguments);
283
+ }
284
+ return onConnect;
285
+ }()
286
+ }, {
287
+ key: "onMessage",
288
+ value: function onMessage(response) {
289
+ var event;
290
+ if (!isObject(response)) {
291
+ response = JSON.parse(response);
292
+ }
293
+ if (isArray(response)) {
294
+ event = response[0].id;
295
+ } else if (typeof response.id === 'undefined') {
296
+ event = this.getSubscriptionEvent(response.params.subscription);
297
+ response = response.params;
298
+ } else {
299
+ event = response.id;
300
+ }
301
+ this.emit(this.SOCKET_MESSAGE, response);
302
+ this.emit(event, response);
303
+ }
304
+ }, {
305
+ key: "reset",
306
+ value: function reset() {
307
+ this.removeAllListeners();
308
+ this.registerEventListeners();
309
+ }
310
+ }, {
311
+ key: "subscribe",
312
+ value: function subscribe() {
313
+ var _this2 = this;
314
+ var subscribeMethod = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'eth_subscribe';
315
+ var subscriptionMethod = arguments.length > 1 ? arguments[1] : undefined;
316
+ var parameters = arguments.length > 2 ? arguments[2] : undefined;
317
+ parameters.unshift(subscriptionMethod);
318
+ return this.send(subscribeMethod, parameters).then(function (subscriptionId) {
319
+ _this2.subscriptions[subscriptionId] = {
320
+ id: subscriptionId,
321
+ subscribeMethod: subscribeMethod,
322
+ parameters: parameters
323
+ };
324
+ return subscriptionId;
325
+ }).catch(function (error) {
326
+ throw new Error("Provider error: ".concat(error));
327
+ });
328
+ }
329
+ }, {
330
+ key: "unsubscribe",
331
+ value: function unsubscribe(subscriptionId) {
332
+ var _this3 = this;
333
+ var unsubscribeMethod = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'eth_unsubscribe';
334
+ if (this.hasSubscription(subscriptionId)) {
335
+ return this.send(unsubscribeMethod, [subscriptionId]).then(function (response) {
336
+ if (response) {
337
+ _this3.removeAllListeners(_this3.getSubscriptionEvent(subscriptionId));
338
+ delete _this3.subscriptions[subscriptionId];
339
+ }
340
+ return response;
341
+ });
342
+ }
343
+ return Promise.reject(new Error("Provider error: Subscription with ID ".concat(subscriptionId, " does not exist.")));
344
+ }
345
+ }, {
346
+ key: "clearSubscriptions",
347
+ value: function clearSubscriptions() {
348
+ var _this4 = this;
349
+ var unsubscribeMethod = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'eth_unsubscribe';
350
+ var unsubscribePromises = [];
351
+ Object.keys(this.subscriptions).forEach(function (key) {
352
+ _this4.removeAllListeners(key);
353
+ unsubscribePromises.push(_this4.unsubscribe(_this4.subscriptions[key].id, unsubscribeMethod));
354
+ });
355
+ return Promise.all(unsubscribePromises).then(function (results) {
356
+ if (results.includes(false)) {
357
+ throw new Error("Could not unsubscribe all subscriptions: ".concat(JSON.stringify(results)));
358
+ }
359
+ return true;
360
+ });
361
+ }
362
+ }, {
363
+ key: "hasSubscription",
364
+ value: function hasSubscription(subscriptionId) {
365
+ return typeof this.getSubscriptionEvent(subscriptionId) !== 'undefined';
366
+ }
367
+ }, {
368
+ key: "getSubscriptionEvent",
369
+ value: function getSubscriptionEvent(subscriptionId) {
370
+ var _this5 = this;
371
+ if (this.subscriptions[subscriptionId]) {
372
+ return subscriptionId;
373
+ }
374
+ var event;
375
+ Object.keys(this.subscriptions).forEach(function (key) {
376
+ if (_this5.subscriptions[key].id === subscriptionId) {
377
+ event = key;
378
+ }
379
+ });
380
+ return event;
381
+ }
382
+ }, {
383
+ key: "connected",
384
+ get: function get() {}
385
+ }]);
386
+ return AbstractSocketProvider;
387
+ }(EventEmitter);
388
+
389
+ var WebsocketProvider =
390
+ function (_AbstractSocketProvid) {
391
+ _inherits(WebsocketProvider, _AbstractSocketProvid);
392
+ function WebsocketProvider(connection, timeout) {
393
+ var _this;
394
+ _classCallCheck(this, WebsocketProvider);
395
+ _this = _possibleConstructorReturn(this, _getPrototypeOf(WebsocketProvider).call(this, connection, timeout));
396
+ _this.host = _this.connection.url;
397
+ return _this;
398
+ }
399
+ _createClass(WebsocketProvider, [{
400
+ key: "onMessage",
401
+ value: function onMessage(messageEvent) {
402
+ _get(_getPrototypeOf(WebsocketProvider.prototype), "onMessage", this).call(this, messageEvent.data);
403
+ }
404
+ }, {
405
+ key: "onError",
406
+ value: function onError(event) {
407
+ if (event.code === 'ECONNREFUSED') {
408
+ this.reconnect();
409
+ return;
410
+ }
411
+ _get(_getPrototypeOf(WebsocketProvider.prototype), "onError", this).call(this, event);
412
+ }
413
+ }, {
414
+ key: "onClose",
415
+ value: function onClose(closeEvent) {
416
+ if (closeEvent.code !== 1000 || closeEvent.wasClean === false) {
417
+ this.reconnect();
418
+ return;
419
+ }
420
+ _get(_getPrototypeOf(WebsocketProvider.prototype), "onClose", this).call(this);
421
+ }
422
+ }, {
423
+ key: "reconnect",
424
+ value: function reconnect() {
425
+ var _this2 = this;
426
+ setTimeout(function () {
427
+ _this2.removeAllSocketListeners();
428
+ var connection = [];
429
+ if (_this2.connection.constructor.name === 'W3CWebsocket') {
430
+ connection = new _this2.connection.constructor(_this2.host, _this2.connection._client.protocol, null, _this2.connection._client.headers, _this2.connection._client.requestOptions, _this2.connection._client.config);
431
+ } else {
432
+ connection = new _this2.connection.constructor(_this2.host, _this2.connection.protocol || undefined);
433
+ }
434
+ _this2.connection = connection;
435
+ _this2.registerEventListeners();
436
+ }, 5000);
437
+ }
438
+ }, {
439
+ key: "disconnect",
440
+ value: function disconnect() {
441
+ var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
442
+ var reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
443
+ this.connection.close(code, reason);
444
+ }
445
+ }, {
446
+ key: "registerEventListeners",
447
+ value: function registerEventListeners() {
448
+ this.connection.addEventListener('message', this.onMessage.bind(this));
449
+ this.connection.addEventListener('open', this.onReady.bind(this));
450
+ this.connection.addEventListener('open', this.onConnect.bind(this));
451
+ this.connection.addEventListener('close', this.onClose.bind(this));
452
+ this.connection.addEventListener('error', this.onError.bind(this));
453
+ }
454
+ }, {
455
+ key: "removeAllListeners",
456
+ value: function removeAllListeners(event) {
457
+ switch (event) {
458
+ case this.SOCKET_MESSAGE:
459
+ this.connection.removeEventListener('message', this.onMessage);
460
+ break;
461
+ case this.SOCKET_READY:
462
+ this.connection.removeEventListener('open', this.onReady);
463
+ break;
464
+ case this.SOCKET_CLOSE:
465
+ this.connection.removeEventListener('close', this.onClose);
466
+ break;
467
+ case this.SOCKET_ERROR:
468
+ this.connection.removeEventListener('error', this.onError);
469
+ break;
470
+ case this.SOCKET_CONNECT:
471
+ this.connection.removeEventListener('connect', this.onConnect);
472
+ break;
473
+ }
474
+ _get(_getPrototypeOf(WebsocketProvider.prototype), "removeAllListeners", this).call(this, event);
475
+ }
476
+ }, {
477
+ key: "isConnecting",
478
+ value: function isConnecting() {
479
+ return this.connection.readyState === this.connection.CONNECTING;
480
+ }
481
+ }, {
482
+ key: "sendPayload",
483
+ value: function sendPayload(payload) {
484
+ var _this3 = this;
485
+ return new Promise(function (resolve, reject) {
486
+ _this3.once('error', reject);
487
+ if (!_this3.isConnecting()) {
488
+ var timeout, id;
489
+ if (_this3.connection.readyState !== _this3.connection.OPEN) {
490
+ return reject(new Error('Connection error: Connection is not open on send()'));
491
+ }
492
+ try {
493
+ _this3.connection.send(JSON.stringify(payload));
494
+ } catch (error) {
495
+ reject(error);
496
+ }
497
+ if (_this3.timeout) {
498
+ timeout = setTimeout(function () {
499
+ reject(new Error('Connection error: Timeout exceeded'));
500
+ }, _this3.timeout);
501
+ }
502
+ if (isArray(payload)) {
503
+ id = payload[0].id;
504
+ } else {
505
+ id = payload.id;
506
+ }
507
+ _this3.once(id, function (response) {
508
+ if (timeout) {
509
+ clearTimeout(timeout);
510
+ }
511
+ return resolve(response);
512
+ });
513
+ return;
514
+ }
515
+ _this3.once('connect', function () {
516
+ _this3.sendPayload(payload).then(resolve).catch(reject);
517
+ });
518
+ });
519
+ }
520
+ }, {
521
+ key: "connected",
522
+ get: function get() {
523
+ return this.connection.readyState === this.connection.OPEN;
524
+ }
525
+ }]);
526
+ return WebsocketProvider;
527
+ }(AbstractSocketProvider);
528
+
529
+ var IpcProvider =
530
+ function (_AbstractSocketProvid) {
531
+ _inherits(IpcProvider, _AbstractSocketProvid);
532
+ function IpcProvider(connection, path) {
533
+ var _this;
534
+ _classCallCheck(this, IpcProvider);
535
+ _this = _possibleConstructorReturn(this, _getPrototypeOf(IpcProvider).call(this, connection, null));
536
+ _this.host = path;
537
+ _this.lastChunk = '';
538
+ return _this;
539
+ }
540
+ _createClass(IpcProvider, [{
541
+ key: "disconnect",
542
+ value: function disconnect() {
543
+ this.connection.destroy();
544
+ }
545
+ }, {
546
+ key: "reconnect",
547
+ value: function reconnect() {
548
+ this.connection.connect({
549
+ path: this.path
550
+ });
551
+ }
552
+ }, {
553
+ key: "onMessage",
554
+ value: function onMessage(message) {
555
+ var _this2 = this;
556
+ var result = null;
557
+ var returnValues = [];
558
+ var dechunkedData = message.toString().replace(/\}[\n\r]?\{/g, '}|--|{')
559
+ .replace(/\}\][\n\r]?\[\{/g, '}]|--|[{')
560
+ .replace(/\}[\n\r]?\[\{/g, '}|--|[{')
561
+ .replace(/\}\][\n\r]?\{/g, '}]|--|{')
562
+ .split('|--|');
563
+ dechunkedData.forEach(function (data) {
564
+ result = null;
565
+ if (_this2.lastChunk) {
566
+ data = _this2.lastChunk + data;
567
+ }
568
+ try {
569
+ result = JSON.parse(data);
570
+ } catch (error) {
571
+ _this2.lastChunk = data;
572
+ return;
573
+ }
574
+ _this2.lastChunk = null;
575
+ returnValues.push(result);
576
+ });
577
+ returnValues.forEach(function (chunk) {
578
+ _get(_getPrototypeOf(IpcProvider.prototype), "onMessage", _this2).call(_this2, chunk);
579
+ });
580
+ }
581
+ }, {
582
+ key: "registerEventListeners",
583
+ value: function registerEventListeners() {
584
+ this.connection.on('data', this.onMessage.bind(this));
585
+ this.connection.on('connect', this.onConnect.bind(this));
586
+ this.connection.on('error', this.onError.bind(this));
587
+ this.connection.on('close', this.onClose.bind(this));
588
+ this.connection.on('timeout', this.onClose.bind(this));
589
+ this.connection.on('ready', this.onReady.bind(this));
590
+ }
591
+ }, {
592
+ key: "removeAllListeners",
593
+ value: function removeAllListeners(event) {
594
+ switch (event) {
595
+ case this.SOCKET_MESSAGE:
596
+ this.connection.removeListener('data', this.onMessage);
597
+ break;
598
+ case this.SOCKET_READY:
599
+ this.connection.removeListener('ready', this.onReady);
600
+ break;
601
+ case this.SOCKET_CLOSE:
602
+ this.connection.removeListener('close', this.onClose);
603
+ break;
604
+ case this.SOCKET_ERROR:
605
+ this.connection.removeListener('error', this.onError);
606
+ break;
607
+ case this.SOCKET_CONNECT:
608
+ this.connection.removeListener('connect', this.onConnect);
609
+ break;
610
+ }
611
+ _get(_getPrototypeOf(IpcProvider.prototype), "removeAllListeners", this).call(this, event);
612
+ }
613
+ }, {
614
+ key: "sendPayload",
615
+ value: function sendPayload(payload) {
616
+ var _this3 = this;
617
+ return new Promise(function (resolve, reject) {
618
+ _this3.once('error', reject);
619
+ if (!_this3.connection.writable) {
620
+ _this3.connection.connect({
621
+ path: _this3.path
622
+ });
623
+ }
624
+ if (_this3.connection.write(JSON.stringify(payload))) {
625
+ var id;
626
+ if (isArray(payload)) {
627
+ id = payload[0].id;
628
+ } else {
629
+ id = payload.id;
630
+ }
631
+ _this3.once(id, resolve);
632
+ return;
633
+ }
634
+ return reject(new Error("Connection error: Couldn't write on the socket with Socket.write(payload)"));
635
+ });
636
+ }
637
+ }, {
638
+ key: "connected",
639
+ get: function get() {
640
+ return !this.connection.pending;
641
+ }
642
+ }]);
643
+ return IpcProvider;
644
+ }(AbstractSocketProvider);
645
+
646
+ var HttpProvider =
647
+ function () {
648
+ function HttpProvider() {
649
+ var host = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'http://localhost:8545';
650
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
651
+ var providersModuleFactory = arguments.length > 2 ? arguments[2] : undefined;
652
+ _classCallCheck(this, HttpProvider);
653
+ this.host = host;
654
+ this.timeout = options.timeout || 0;
655
+ this.headers = options.headers;
656
+ this.withCredentials = options.withCredentials || false;
657
+ this.connected = true;
658
+ this.providersModuleFactory = providersModuleFactory;
659
+ this.agent = {};
660
+ var keepAlive = false;
661
+ if (options.keepAlive === true || options.keepAlive !== false) {
662
+ keepAlive = true;
663
+ }
664
+ if (host.substring(0, 5) === 'https') {
665
+ this.agent['httpsAgent'] = new https.Agent({
666
+ keepAlive: keepAlive
667
+ });
668
+ } else {
669
+ this.agent['httpAgent'] = new http.Agent({
670
+ keepAlive: keepAlive
671
+ });
672
+ }
673
+ }
674
+ _createClass(HttpProvider, [{
675
+ key: "supportsSubscriptions",
676
+ value: function supportsSubscriptions() {
677
+ return false;
678
+ }
679
+ }, {
680
+ key: "subscribe",
681
+ value: function subscribe() {
682
+ throw new Error('Subscriptions are not supported with the HttpProvider.');
683
+ }
684
+ }, {
685
+ key: "unsubscribe",
686
+ value: function unsubscribe() {
687
+ throw new Error('Subscriptions are not supported with the HttpProvider.');
688
+ }
689
+ }, {
690
+ key: "disconnect",
691
+ value: function disconnect() {
692
+ return true;
693
+ }
694
+ }, {
695
+ key: "send",
696
+ value: function () {
697
+ var _send = _asyncToGenerator(
698
+ _regeneratorRuntime.mark(function _callee(method, parameters) {
699
+ var response, validationResult;
700
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
701
+ while (1) {
702
+ switch (_context.prev = _context.next) {
703
+ case 0:
704
+ _context.next = 2;
705
+ return this.sendPayload(JsonRpcMapper.toPayload(method, parameters));
706
+ case 2:
707
+ response = _context.sent;
708
+ validationResult = JsonRpcResponseValidator.validate(response);
709
+ if (!(validationResult instanceof Error)) {
710
+ _context.next = 6;
711
+ break;
712
+ }
713
+ throw validationResult;
714
+ case 6:
715
+ return _context.abrupt("return", response.result);
716
+ case 7:
717
+ case "end":
718
+ return _context.stop();
719
+ }
720
+ }
721
+ }, _callee, this);
722
+ }));
723
+ function send(_x, _x2) {
724
+ return _send.apply(this, arguments);
725
+ }
726
+ return send;
727
+ }()
728
+ }, {
729
+ key: "sendBatch",
730
+ value: function sendBatch(methods, moduleInstance) {
731
+ var payload = [];
732
+ methods.forEach(function (method) {
733
+ method.beforeExecution(moduleInstance);
734
+ payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters));
735
+ });
736
+ return this.sendPayload(payload);
737
+ }
738
+ }, {
739
+ key: "sendPayload",
740
+ value: function sendPayload(payload) {
741
+ var _this = this;
742
+ return new Promise(function (resolve, reject) {
743
+ var request = _this.providersModuleFactory.createXMLHttpRequest(_this.host, _this.timeout, _this.headers, _this.agent, _this.withCredentials);
744
+ request.onreadystatechange = function () {
745
+ if (request.readyState !== 0 && request.readyState !== 1) {
746
+ _this.connected = true;
747
+ }
748
+ if (request.readyState === 4) {
749
+ if (request.status === 200) {
750
+ try {
751
+ return resolve(JSON.parse(request.responseText));
752
+ } catch (error) {
753
+ reject(new Error("Invalid JSON as response: ".concat(request.responseText)));
754
+ }
755
+ }
756
+ if (_this.isInvalidHttpEndpoint(request)) {
757
+ reject(new Error("Connection refused or URL couldn't be resolved: ".concat(_this.host)));
758
+ }
759
+ if (request.status >= 400 && request.status <= 499) {
760
+ reject(new Error("HttpProvider ERROR: ".concat(request.responseText, " (code: ").concat(request.status, ")")));
761
+ }
762
+ }
763
+ };
764
+ request.ontimeout = function () {
765
+ _this.connected = false;
766
+ reject(new Error("Connection error: Timeout exceeded after ".concat(_this.timeout, "ms")));
767
+ };
768
+ try {
769
+ request.send(JSON.stringify(payload));
770
+ } catch (error) {
771
+ _this.connected = false;
772
+ reject(error);
773
+ }
774
+ });
775
+ }
776
+ }, {
777
+ key: "isInvalidHttpEndpoint",
778
+ value: function isInvalidHttpEndpoint(request) {
779
+ return request.response === null && request.status === 0;
780
+ }
781
+ }]);
782
+ return HttpProvider;
783
+ }();
784
+
785
+ var BatchRequest =
786
+ function () {
787
+ function BatchRequest(moduleInstance) {
788
+ _classCallCheck(this, BatchRequest);
789
+ this.moduleInstance = moduleInstance;
790
+ this.methods = [];
791
+ }
792
+ _createClass(BatchRequest, [{
793
+ key: "add",
794
+ value: function add(method) {
795
+ if (!isObject(method) && method) {
796
+ throw new Error('Please provide a object of type AbstractMethod.');
797
+ }
798
+ this.methods.push(method);
799
+ }
800
+ }, {
801
+ key: "execute",
802
+ value: function execute() {
803
+ var _this = this;
804
+ return this.moduleInstance.currentProvider.sendBatch(this.methods, this.moduleInstance).then(function (response) {
805
+ var errors = [];
806
+ _this.methods.forEach(function (method, index) {
807
+ if (!isArray(response)) {
808
+ method.callback(new Error("BatchRequest error: Response should be of type Array but is: ".concat(_typeof(response))), null);
809
+ errors.push("Response should be of type Array but is: ".concat(_typeof(response)));
810
+ return;
811
+ }
812
+ var responseItem = response[index] || null;
813
+ var validationResult = JsonRpcResponseValidator.validate(responseItem);
814
+ if (validationResult) {
815
+ try {
816
+ var mappedResult = method.afterExecution(responseItem.result);
817
+ response[index] = mappedResult;
818
+ method.callback(false, mappedResult);
819
+ } catch (error) {
820
+ errors.push(error);
821
+ method.callback(error, null);
822
+ }
823
+ return;
824
+ }
825
+ errors.push(validationResult);
826
+ method.callback(validationResult, null);
827
+ });
828
+ if (errors.length > 0) {
829
+ throw new Error("BatchRequest error: ".concat(JSON.stringify(errors)));
830
+ }
831
+ return {
832
+ methods: _this.methods,
833
+ response: response
834
+ };
835
+ });
836
+ }
837
+ }]);
838
+ return BatchRequest;
839
+ }();
840
+
841
+ var Web3EthereumProvider =
842
+ function (_AbstractSocketProvid) {
843
+ _inherits(Web3EthereumProvider, _AbstractSocketProvid);
844
+ function Web3EthereumProvider(connection) {
845
+ var _this;
846
+ _classCallCheck(this, Web3EthereumProvider);
847
+ _this = _possibleConstructorReturn(this, _getPrototypeOf(Web3EthereumProvider).call(this, connection, null));
848
+ _this.host = 'Web3EthereumProvider';
849
+ return _this;
850
+ }
851
+ _createClass(Web3EthereumProvider, [{
852
+ key: "registerEventListeners",
853
+ value: function registerEventListeners() {
854
+ this.connection.on('notification', this.onMessage.bind(this));
855
+ this.connection.on('connect', this.onConnect.bind(this));
856
+ this.connection.on('connect', this.onReady.bind(this));
857
+ this.connection.on('close', this.onClose.bind(this));
858
+ this.connection.on('networkChanged', this.onNetworkChanged.bind(this));
859
+ this.connection.on('accountsChanged', this.onAccountsChanged.bind(this));
860
+ }
861
+ }, {
862
+ key: "removeAllListeners",
863
+ value: function removeAllListeners(event) {
864
+ switch (event) {
865
+ case this.SOCKET_NETWORK_CHANGED:
866
+ this.connection.removeListener('networkChanged', this.onNetworkChanged);
867
+ break;
868
+ case this.SOCKET_ACCOUNTS_CHANGED:
869
+ this.connection.removeListener('accountsChanged', this.onAccountsChanged);
870
+ break;
871
+ case this.SOCKET_MESSAGE:
872
+ this.connection.removeListener('notification', this.onMessage);
873
+ break;
874
+ case this.SOCKET_READY:
875
+ this.connection.removeListener('connect', this.onReady);
876
+ break;
877
+ case this.SOCKET_CLOSE:
878
+ this.connection.removeListener('close', this.onClose);
879
+ break;
880
+ case this.SOCKET_ERROR:
881
+ this.connection.removeListener('close', this.onError);
882
+ break;
883
+ case this.SOCKET_CONNECT:
884
+ this.connection.removeListener('connect', this.onConnect);
885
+ break;
886
+ }
887
+ _get(_getPrototypeOf(Web3EthereumProvider.prototype), "removeAllListeners", this).call(this, event);
888
+ }
889
+ }, {
890
+ key: "removeAllSocketListeners",
891
+ value: function removeAllSocketListeners() {
892
+ this.connection.removeAllListeners();
893
+ }
894
+ }, {
895
+ key: "onNetworkChanged",
896
+ value: function onNetworkChanged(networkId) {
897
+ this.emit('networkChanged', networkId);
898
+ }
899
+ }, {
900
+ key: "onAccountsChanged",
901
+ value: function onAccountsChanged(accounts) {
902
+ this.emit('accountsChanged', accounts);
903
+ }
904
+ }, {
905
+ key: "onMessage",
906
+ value: function onMessage(response) {
907
+ this.emit(this.getSubscriptionEvent(response.subscription), response);
908
+ }
909
+ }, {
910
+ key: "send",
911
+ value: function () {
912
+ var _send = _asyncToGenerator(
913
+ _regeneratorRuntime.mark(function _callee(method, parameters) {
914
+ var response, validationResult;
915
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
916
+ while (1) {
917
+ switch (_context.prev = _context.next) {
918
+ case 0:
919
+ response = this.connection.send(method, parameters);
920
+ validationResult = JsonRpcResponseValidator.validate(response);
921
+ if (!(validationResult instanceof Error)) {
922
+ _context.next = 4;
923
+ break;
924
+ }
925
+ throw validationResult;
926
+ case 4:
927
+ return _context.abrupt("return", response);
928
+ case 5:
929
+ case "end":
930
+ return _context.stop();
931
+ }
932
+ }
933
+ }, _callee, this);
934
+ }));
935
+ function send(_x, _x2) {
936
+ return _send.apply(this, arguments);
937
+ }
938
+ return send;
939
+ }()
940
+ }, {
941
+ key: "sendBatch",
942
+ value: function sendBatch(methods, moduleInstance) {
943
+ var _this2 = this;
944
+ var methodCalls = [];
945
+ methods.forEach(function (method) {
946
+ method.beforeExecution(moduleInstance);
947
+ methodCalls.push(_this2.connection.send(method.rpcMethod, method.parameters));
948
+ });
949
+ return Promise.all(methodCalls);
950
+ }
951
+ }]);
952
+ return Web3EthereumProvider;
953
+ }(AbstractSocketProvider);
954
+
955
+ var MetamaskProvider =
956
+ function (_AbstractSocketProvid) {
957
+ _inherits(MetamaskProvider, _AbstractSocketProvid);
958
+ function MetamaskProvider(inpageProvider) {
959
+ var _this;
960
+ _classCallCheck(this, MetamaskProvider);
961
+ _this = _possibleConstructorReturn(this, _getPrototypeOf(MetamaskProvider).call(this, inpageProvider, null));
962
+ _this.host = 'metamask';
963
+ return _this;
964
+ }
965
+ _createClass(MetamaskProvider, [{
966
+ key: "registerEventListeners",
967
+ value: function registerEventListeners() {
968
+ this.connection.on('accountsChanged', this.onAccountsChanged.bind(this));
969
+ this.connection.on('networkChanged', this.onReady.bind(this));
970
+ this.connection.on('networkChanged', this.onNetworkChanged.bind(this));
971
+ this.connection.on('data', this.onMessage.bind(this));
972
+ this.connection.on('error', this.onError.bind(this));
973
+ }
974
+ }, {
975
+ key: "onMessage",
976
+ value: function onMessage(metamaskParam, payload) {
977
+ _get(_getPrototypeOf(MetamaskProvider.prototype), "onMessage", this).call(this, payload);
978
+ }
979
+ }, {
980
+ key: "removeAllListeners",
981
+ value: function removeAllListeners(event) {
982
+ switch (event) {
983
+ case this.SOCKET_NETWORK_CHANGED:
984
+ this.connection.removeListener('networkChanged', this.onNetworkChanged);
985
+ break;
986
+ case this.SOCKET_ACCOUNTS_CHANGED:
987
+ this.connection.removeListener('accountsChanged', this.onAccountsChanged);
988
+ break;
989
+ case this.SOCKET_MESSAGE:
990
+ this.connection.removeListener('data', this.onMessage);
991
+ break;
992
+ case this.SOCKET_ERROR:
993
+ this.connection.removeListener('error', this.onError);
994
+ break;
995
+ }
996
+ _get(_getPrototypeOf(MetamaskProvider.prototype), "removeAllListeners", this).call(this, event);
997
+ }
998
+ }, {
999
+ key: "removeAllSocketListeners",
1000
+ value: function removeAllSocketListeners() {
1001
+ this.connection.removeListener(this.SOCKET_NETWORK_CHANGED, this.onNetworkChanged);
1002
+ this.connection.removeListener(this.SOCKET_ACCOUNTS_CHANGED, this.onAccountsChanged);
1003
+ _get(_getPrototypeOf(MetamaskProvider.prototype), "removeAllSocketListeners", this).call(this);
1004
+ }
1005
+ }, {
1006
+ key: "onNetworkChanged",
1007
+ value: function onNetworkChanged(networkId) {
1008
+ this.emit('networkChanged', networkId);
1009
+ }
1010
+ }, {
1011
+ key: "onAccountsChanged",
1012
+ value: function onAccountsChanged(accounts) {
1013
+ this.emit('accountsChanged', accounts);
1014
+ }
1015
+ }, {
1016
+ key: "disconnect",
1017
+ value: function disconnect() {
1018
+ return true;
1019
+ }
1020
+ }, {
1021
+ key: "sendPayload",
1022
+ value: function sendPayload(payload) {
1023
+ var _this2 = this;
1024
+ return new Promise(function (resolve, reject) {
1025
+ _this2.connection.send(payload, function (error, response) {
1026
+ _this2.removeAllListeners(payload.id);
1027
+ if (!error) {
1028
+ return resolve(response);
1029
+ }
1030
+ reject(error);
1031
+ });
1032
+ });
1033
+ }
1034
+ }, {
1035
+ key: "connected",
1036
+ get: function get() {
1037
+ return this.connection.isConnected();
1038
+ }
1039
+ }]);
1040
+ return MetamaskProvider;
1041
+ }(AbstractSocketProvider);
1042
+
1043
+ var MistEthereumProvider =
1044
+ function (_AbstractSocketProvid) {
1045
+ _inherits(MistEthereumProvider, _AbstractSocketProvid);
1046
+ function MistEthereumProvider(connection) {
1047
+ var _this;
1048
+ _classCallCheck(this, MistEthereumProvider);
1049
+ _this = _possibleConstructorReturn(this, _getPrototypeOf(MistEthereumProvider).call(this, connection, null));
1050
+ _this.host = 'mist';
1051
+ return _this;
1052
+ }
1053
+ _createClass(MistEthereumProvider, [{
1054
+ key: "registerEventListeners",
1055
+ value: function registerEventListeners() {
1056
+ this.connection.on('data', this.onMessage.bind(this));
1057
+ this.connection.on('error', this.onError.bind(this));
1058
+ this.connection.on('connect', this.onConnect.bind(this));
1059
+ this.connection.on('connect', this.onReady.bind(this));
1060
+ this.connection.on('end', this.onClose.bind(this));
1061
+ }
1062
+ }, {
1063
+ key: "removeAllListeners",
1064
+ value: function removeAllListeners(event) {
1065
+ switch (event) {
1066
+ case this.SOCKET_MESSAGE:
1067
+ this.connection.removeListener('data', this.onMessage);
1068
+ break;
1069
+ case this.SOCKET_ERROR:
1070
+ this.connection.removeListener('error', this.onError);
1071
+ break;
1072
+ case this.SOCKET_CONNECT:
1073
+ this.connection.removeListener('connect', this.onConnect);
1074
+ break;
1075
+ case this.SOCKET_READY:
1076
+ this.connection.removeListener('connect', this.onConnect);
1077
+ break;
1078
+ case this.SOCKET_CLOSE:
1079
+ this.connection.removeListener('end', this.onClose);
1080
+ break;
1081
+ }
1082
+ _get(_getPrototypeOf(MistEthereumProvider.prototype), "removeAllListeners", this).call(this, event);
1083
+ }
1084
+ }, {
1085
+ key: "disconnect",
1086
+ value: function disconnect() {
1087
+ return true;
1088
+ }
1089
+ }, {
1090
+ key: "sendPayload",
1091
+ value: function sendPayload(payload) {
1092
+ var _this2 = this;
1093
+ return new Promise(function (resolve, reject) {
1094
+ _this2.connection.send(payload, function (error, response) {
1095
+ _this2.removeAllListeners(payload.id);
1096
+ if (!error) {
1097
+ return resolve(response);
1098
+ }
1099
+ reject(error);
1100
+ });
1101
+ });
1102
+ }
1103
+ }, {
1104
+ key: "connected",
1105
+ get: function get() {
1106
+ return this.connection.isConnected();
1107
+ }
1108
+ }]);
1109
+ return MistEthereumProvider;
1110
+ }(AbstractSocketProvider);
1111
+
1112
+ var CustomProvider =
1113
+ function () {
1114
+ function CustomProvider(connection) {
1115
+ _classCallCheck(this, CustomProvider);
1116
+ this.host = 'CustomProvider';
1117
+ this.connection = connection;
1118
+ this.checkConnectionMethods();
1119
+ }
1120
+ _createClass(CustomProvider, [{
1121
+ key: "supportsSubscriptions",
1122
+ value: function supportsSubscriptions() {
1123
+ return false;
1124
+ }
1125
+ }, {
1126
+ key: "checkConnectionMethods",
1127
+ value: function checkConnectionMethods() {
1128
+ if (this.connection.send || this.connection.sendAsync) {
1129
+ return true;
1130
+ }
1131
+ throw new Error('Invalid provider injected!');
1132
+ }
1133
+ }, {
1134
+ key: "subscribe",
1135
+ value: function subscribe() {
1136
+ throw new Error('Subscriptions are not supported with the CustomProvider.');
1137
+ }
1138
+ }, {
1139
+ key: "unsubscribe",
1140
+ value: function unsubscribe() {
1141
+ throw new Error('Subscriptions are not supported with the CustomProvider.');
1142
+ }
1143
+ }, {
1144
+ key: "send",
1145
+ value: function () {
1146
+ var _send = _asyncToGenerator(
1147
+ _regeneratorRuntime.mark(function _callee(method, parameters) {
1148
+ var response, validationResult;
1149
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
1150
+ while (1) {
1151
+ switch (_context.prev = _context.next) {
1152
+ case 0:
1153
+ _context.next = 2;
1154
+ return this.sendPayload(JsonRpcMapper.toPayload(method, parameters));
1155
+ case 2:
1156
+ response = _context.sent;
1157
+ validationResult = JsonRpcResponseValidator.validate(response);
1158
+ if (!(validationResult instanceof Error)) {
1159
+ _context.next = 6;
1160
+ break;
1161
+ }
1162
+ throw validationResult;
1163
+ case 6:
1164
+ return _context.abrupt("return", response.result);
1165
+ case 7:
1166
+ case "end":
1167
+ return _context.stop();
1168
+ }
1169
+ }
1170
+ }, _callee, this);
1171
+ }));
1172
+ function send(_x, _x2) {
1173
+ return _send.apply(this, arguments);
1174
+ }
1175
+ return send;
1176
+ }()
1177
+ }, {
1178
+ key: "sendBatch",
1179
+ value: function sendBatch(methods, moduleInstance) {
1180
+ var payload = [];
1181
+ methods.forEach(function (method) {
1182
+ method.beforeExecution(moduleInstance);
1183
+ payload.push(JsonRpcMapper.toPayload(method.rpcMethod, method.parameters));
1184
+ });
1185
+ return this.sendPayload(payload);
1186
+ }
1187
+ }, {
1188
+ key: "sendPayload",
1189
+ value: function sendPayload(payload) {
1190
+ var _this = this;
1191
+ return new Promise(function (resolve, reject) {
1192
+ if (_this.connection.sendAsync) {
1193
+ _this.connection.sendAsync(payload, function (error, response) {
1194
+ if (!error) {
1195
+ resolve(response);
1196
+ }
1197
+ reject(error);
1198
+ });
1199
+ return;
1200
+ }
1201
+ _this.connection.send(payload, function (error, response) {
1202
+ if (!error) {
1203
+ resolve(response);
1204
+ }
1205
+ reject(error);
1206
+ });
1207
+ });
1208
+ }
1209
+ }]);
1210
+ return CustomProvider;
1211
+ }();
1212
+
1213
+ var ProvidersModuleFactory =
1214
+ function () {
1215
+ function ProvidersModuleFactory() {
1216
+ _classCallCheck(this, ProvidersModuleFactory);
1217
+ }
1218
+ _createClass(ProvidersModuleFactory, [{
1219
+ key: "createBatchRequest",
1220
+ value: function createBatchRequest(moduleInstance) {
1221
+ return new BatchRequest(moduleInstance);
1222
+ }
1223
+ }, {
1224
+ key: "createProviderResolver",
1225
+ value: function createProviderResolver() {
1226
+ return new ProviderResolver(this);
1227
+ }
1228
+ }, {
1229
+ key: "createHttpProvider",
1230
+ value: function createHttpProvider(url) {
1231
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1232
+ return new HttpProvider(url, options, this);
1233
+ }
1234
+ }, {
1235
+ key: "createXMLHttpRequest",
1236
+ value: function createXMLHttpRequest(host, timeout, headers, agent, withCredentials) {
1237
+ var request;
1238
+ if (typeof process !== 'undefined' && process.versions != null && process.versions.node != null) {
1239
+ request = new xhr2Cookies.XMLHttpRequest();
1240
+ request.nodejsSet(agent);
1241
+ } else {
1242
+ request = new XMLHttpRequest();
1243
+ }
1244
+ request.open('POST', host, true);
1245
+ request.setRequestHeader('Content-Type', 'application/json');
1246
+ request.timeout = timeout;
1247
+ request.withCredentials = withCredentials;
1248
+ if (headers) {
1249
+ headers.forEach(function (header) {
1250
+ request.setRequestHeader(header.name, header.value);
1251
+ });
1252
+ }
1253
+ return request;
1254
+ }
1255
+ }, {
1256
+ key: "createWebsocketProvider",
1257
+ value: function createWebsocketProvider(url) {
1258
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1259
+ var connection = '';
1260
+ if (typeof process !== 'undefined' && process.versions != null && process.versions.node != null) {
1261
+ var headers = options.headers || {};
1262
+ var urlObject = new URL(url);
1263
+ if (!headers.authorization && urlObject.username && urlObject.password) {
1264
+ var authToken = Buffer.from("".concat(urlObject.username, ":").concat(urlObject.password)).toString('base64');
1265
+ headers.authorization = "Basic ".concat(authToken);
1266
+ }
1267
+ connection = new websocket.w3cwebsocket(url, options.protocol, null, headers, null, options.clientConfig);
1268
+ } else {
1269
+ connection = new window.WebSocket(url, options.protocol);
1270
+ }
1271
+ return new WebsocketProvider(connection, options.timeout);
1272
+ }
1273
+ }, {
1274
+ key: "createIpcProvider",
1275
+ value: function createIpcProvider(path, net) {
1276
+ return new IpcProvider(net.connect({
1277
+ path: path
1278
+ }), path);
1279
+ }
1280
+ }, {
1281
+ key: "createWeb3EthereumProvider",
1282
+ value: function createWeb3EthereumProvider(connection) {
1283
+ return new Web3EthereumProvider(connection);
1284
+ }
1285
+ }, {
1286
+ key: "createMetamaskProvider",
1287
+ value: function createMetamaskProvider(inpageProvider) {
1288
+ return new MetamaskProvider(inpageProvider);
1289
+ }
1290
+ }, {
1291
+ key: "createMistEthereumProvider",
1292
+ value: function createMistEthereumProvider(mistEthereumProvider) {
1293
+ return new MistEthereumProvider(mistEthereumProvider);
1294
+ }
1295
+ }, {
1296
+ key: "createCustomProvider",
1297
+ value: function createCustomProvider(connection) {
1298
+ return new CustomProvider(connection);
1299
+ }
1300
+ }]);
1301
+ return ProvidersModuleFactory;
1302
+ }();
1303
+
1304
+ var global$1 = function () {
1305
+ return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object' && self;
1306
+ }() || new Function('return this')();
1307
+ var ProviderDetector =
1308
+ function () {
1309
+ function ProviderDetector() {
1310
+ _classCallCheck(this, ProviderDetector);
1311
+ }
1312
+ _createClass(ProviderDetector, null, [{
1313
+ key: "detect",
1314
+ value: function detect() {
1315
+ if (typeof global$1.ethereumProvider !== 'undefined' && global$1.ethereumProvider.constructor.name === 'EthereumProvider') {
1316
+ return global$1.ethereumProvider;
1317
+ }
1318
+ if (typeof global$1.web3 !== 'undefined' && global$1.web3.currentProvider) {
1319
+ return global$1.web3.currentProvider;
1320
+ }
1321
+ return null;
1322
+ }
1323
+ }]);
1324
+ return ProviderDetector;
1325
+ }();
1326
+
1327
+ function HttpProvider$1(url) {
1328
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1329
+ return new ProvidersModuleFactory().createHttpProvider(url, options);
1330
+ }
1331
+ function WebsocketProvider$1(url) {
1332
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1333
+ return new ProvidersModuleFactory().createWebsocketProvider(url, options);
1334
+ }
1335
+ function IpcProvider$1(path, net) {
1336
+ return new ProvidersModuleFactory().createIpcProvider(path, net);
1337
+ }
1338
+ function BatchRequest$1(moduleInstance) {
1339
+ return new ProvidersModuleFactory().createBatchRequest(moduleInstance);
1340
+ }
1341
+ function ProviderResolver$1() {
1342
+ return new ProvidersModuleFactory().createProviderResolver();
1343
+ }
1344
+
1345
+ exports.BatchRequest = BatchRequest$1;
1346
+ exports.HttpProvider = HttpProvider$1;
1347
+ exports.IpcProvider = IpcProvider$1;
1348
+ exports.ProviderDetector = ProviderDetector;
1349
+ exports.ProviderResolver = ProviderResolver$1;
1350
+ exports.ProvidersModuleFactory = ProvidersModuleFactory;
1351
+ exports.Web3EthereumProvider = Web3EthereumProvider;
1352
+ exports.WebsocketProvider = WebsocketProvider$1;
1353
+
1354
+ Object.defineProperty(exports, '__esModule', { value: true });
1355
+
1356
+ }));