@pokt-network/web3-provider
Version:
Pocket JavaScript Web3 Provider
1 lines • 4.14 kB
JavaScript
"use strict";function _classCallCheck(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),e}var pocket_core=require("@pokt-network/pocket-js"),Pocket=pocket_core.Pocket,typeGuard=pocket_core.typeGuard,Hex=pocket_core.Hex,RpcError=pocket_core.RpcError,PocketProvider=function(){function a(e,r,t,n){if(_classCallCheck(this,a),this.pocket=t,this.activeBlockchain=e,this.pocketAAT=r,this.transactionSigner=n,this.isConnected=!0,!this.isValid())throw new Error("Invalid PocketProvider properties.")}return _createClass(a,[{key:"send",value:function(r,t){var n,a;return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,regeneratorRuntime.awrap(this._generateRelayData(r));case 2:if(n=e.sent,typeGuard(n,Error))throw n;e.next=5;break;case 5:return e.prev=5,e.next=8,regeneratorRuntime.awrap(this.pocket.sendRelay(JSON.stringify(n),this.activeBlockchain,this.pocketAAT));case 8:if(a=e.sent,!typeGuard(a,RpcError)){e.next=15;break}if(this.isConnected=!1,t)return t(a),e.abrupt("return");e.next=14;break;case 14:return e.abrupt("return",a);case 15:if(t)return t(null,JSON.parse(a.payload)),e.abrupt("return");e.next=18;break;case 18:return e.abrupt("return",JSON.parse(a.payload));case 21:if(e.prev=21,e.t0=e.catch(5),this.isConnected=!1,t)return t(new RpcError.fromError(e.t0)),e.abrupt("return");e.next=27;break;case 27:return e.abrupt("return",new RpcError.fromError(e.t0));case 28:case"end":return e.stop()}},null,this,[[5,21]])}},{key:"isValid",value:function(){return 0!==this.activeBlockchain.length&&this.pocketAAT.isValid()}},{key:"_getNonce",value:function(r){var t,n;return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:return t={id:(new Date).getTime(),jsonrpc:"2.0",method:"eth_getTransactionCount",params:[r,"latest"]},e.prev=1,e.next=4,regeneratorRuntime.awrap(this.send(t));case 4:if(n=e.sent,typeGuard(n,RpcError))return e.abrupt("return",n);e.next=7;break;case 7:return e.abrupt("return",n.result);case 10:return e.prev=10,e.t0=e.catch(1),e.abrupt("return",e.t0);case 13:case"end":return e.stop()}},null,this,[[1,10]])}},{key:"_generateRelayData",value:function(r){var t,n;return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:if(void(e.prev=0)!==(t=r.method)&&"eth_sendTransaction"===t)return e.next=5,regeneratorRuntime.awrap(this._parseRelayParams(r));e.next=9;break;case 5:return n=e.sent,e.abrupt("return",n);case 9:return e.abrupt("return",r);case 10:e.next=15;break;case 12:return e.prev=12,e.t0=e.catch(0),e.abrupt("return",r);case 15:case"end":return e.stop()}},null,this,[[0,12]])}},{key:"_parseRelayParams",value:function(r){var t,n,a,s,c,i;return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:if(t=r.params[0],n=t.from,void 0===this.transactionSigner)return e.abrupt("return",new Error("Error: TransactionSigner is undefined"));e.next=4;break;case 4:return e.next=6,regeneratorRuntime.awrap(this.transactionSigner.hasAddress(n));case 6:if(!1===(a=e.sent)||void 0===a)return e.abrupt("return",new Error("Address doesn't exist in the provided transactionSigner"));e.next=9;break;case 9:if(!t.nonce){e.next=13;break}s=t.nonce,e.next=16;break;case 13:return e.next=15,regeneratorRuntime.awrap(this._getNonce(n));case 15:s=e.sent;case 16:if(typeGuard(s,RpcError))return e.abrupt("return",s);e.next=18;break;case 18:return t.nonce=s,e.next=21,regeneratorRuntime.awrap(this.transactionSigner.signTransaction(t));case 21:if(c=e.sent,typeGuard(c,Error))return e.abrupt("return",c);e.next=24;break;case 24:return i={id:r.id,jsonrpc:"2.0",method:"eth_sendRawTransaction",params:[c]},e.abrupt("return",i);case 26:case"end":return e.stop()}},null,this)}},{key:"setActiveBlockchain",set:function(e){0!==e.length&&Hex.isHex(e)&&(this.activeBlockchain=e)}}]),a}();module.exports.PocketProvider=PocketProvider;