InternalWeb3Provider.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = exports.InternalWeb3Events = void 0;
  6. var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
  7. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
  8. var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
  9. var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
  10. var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
  11. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
  12. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
  13. var _events = _interopRequireDefault(require("events"));
  14. var _events2 = require("./Web3Connector/events");
  15. var _ethers = require("ethers");
  16. var _convert = require("./utils/convert");
  17. function _createSuper(Derived) {
  18. var hasNativeReflectConstruct = _isNativeReflectConstruct();
  19. return function () {
  20. var Super = (0, _getPrototypeOf2.default)(Derived),
  21. result;
  22. if (hasNativeReflectConstruct) {
  23. var NewTarget = (0, _getPrototypeOf2.default)(this).constructor;
  24. result = Reflect.construct(Super, arguments, NewTarget);
  25. } else {
  26. result = Super.apply(this, arguments);
  27. }
  28. return (0, _possibleConstructorReturn2.default)(this, result);
  29. };
  30. }
  31. function _isNativeReflectConstruct() {
  32. if (typeof Reflect === "undefined" || !Reflect.construct) return false;
  33. if (Reflect.construct.sham) return false;
  34. if (typeof Proxy === "function") return true;
  35. try {
  36. Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
  37. return true;
  38. } catch (e) {
  39. return false;
  40. }
  41. }
  42. var InternalWeb3Events = Object.freeze({
  43. ACCOUNT_CHANGED: 'accountChanged',
  44. CHAIN_CHANGED: 'chainChanged',
  45. PROVIDER_CONNECT: 'provider-connect',
  46. PROVIDER_DISCONNECT: 'provider-disconnect',
  47. WEB3_ENABLED: 'web3Enabled',
  48. WEB3_DEACTIVATED: 'web3Deactivated'
  49. });
  50. exports.InternalWeb3Events = InternalWeb3Events;
  51. var InternalWeb3Provider = function (_EventEmitter) {
  52. (0, _inherits2.default)(InternalWeb3Provider, _EventEmitter);
  53. var _super = _createSuper(InternalWeb3Provider);
  54. function InternalWeb3Provider(connector) {
  55. var _this;
  56. var anyNetwork = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  57. var privateKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  58. (0, _classCallCheck2.default)(this, InternalWeb3Provider);
  59. _this = _super.call(this);
  60. if (!connector) {
  61. throw new Error('Cannot initialize InternalWeb3Provider without a connector');
  62. }
  63. _this.connector = connector;
  64. _this.anyNetwork = anyNetwork;
  65. _this.privateKey = privateKey;
  66. _this.handleAccountChanged = _this.handleAccountChanged.bind((0, _assertThisInitialized2.default)(_this));
  67. _this.handleChainChanged = _this.handleChainChanged.bind((0, _assertThisInitialized2.default)(_this));
  68. _this.handleConnect = _this.handleConnect.bind((0, _assertThisInitialized2.default)(_this));
  69. _this.handleDisconnect = _this.handleDisconnect.bind((0, _assertThisInitialized2.default)(_this));
  70. return _this;
  71. }
  72. (0, _createClass2.default)(InternalWeb3Provider, [{
  73. key: "activate",
  74. value: function (options) {
  75. var _await$this$connector, provider, chainId, account, network;
  76. return _regenerator.default.async(function (_context) {
  77. while (1) {
  78. switch (_context.prev = _context.next) {
  79. case 0:
  80. if (this.connector) {
  81. _context.next = 2;
  82. break;
  83. }
  84. throw new Error('Cannot acticate InternalWeb3Provider without a connector');
  85. case 2:
  86. _context.next = 4;
  87. return _regenerator.default.awrap(this.connector.activate(options));
  88. case 4:
  89. _await$this$connector = _context.sent;
  90. provider = _await$this$connector.provider;
  91. chainId = _await$this$connector.chainId;
  92. account = _await$this$connector.account;
  93. this.provider = provider;
  94. this.chainId = chainId;
  95. this.account = account;
  96. network = this.anyNetwork ? 'any' : (0, _convert.fromHexToDecimal)(chainId);
  97. this.web3 = new _ethers.ethers.providers.Web3Provider(provider, network);
  98. if (this.connector.on) {
  99. this.connector.on(_events2.ConnectorEvents.ACCOUNT_CHANGED, this.handleAccountChanged);
  100. this.connector.on(_events2.ConnectorEvents.CHAIN_CHANGED, this.handleChainChanged);
  101. this.connector.on(_events2.ConnectorEvents.CONNECT, this.handleConnect);
  102. this.connector.on(_events2.ConnectorEvents.DISCONNECT, this.handleDisconnect);
  103. }
  104. return _context.abrupt("return", {
  105. provider: provider,
  106. chainId: chainId,
  107. account: account,
  108. web3: this.web3
  109. });
  110. case 15:
  111. case "end":
  112. return _context.stop();
  113. }
  114. }
  115. }, null, this, null, Promise);
  116. }
  117. }, {
  118. key: "signer",
  119. get: function () {
  120. return this.privateKey != null ? new _ethers.ethers.Wallet(this.privateKey, this.web3) : this.web3.getSigner(this.account);
  121. }
  122. }, {
  123. key: "signerOrProvider",
  124. get: function () {
  125. try {
  126. if (this.account) {
  127. return this.privateKey != null ? new _ethers.ethers.Wallet(this.privateKey, this.web3) : this.web3.getSigner(this.account);
  128. }
  129. return this.web3;
  130. } catch (error) {
  131. return this.web3;
  132. }
  133. }
  134. }, {
  135. key: "handleChainChanged",
  136. value: function (chainId) {
  137. this.chainId = chainId;
  138. this.web3 = new _ethers.ethers.providers.Web3Provider(this.provider, (0, _convert.fromHexToDecimal)(chainId));
  139. this.emit(InternalWeb3Events.CHAIN_CHANGED, chainId);
  140. }
  141. }, {
  142. key: "handleAccountChanged",
  143. value: function (account) {
  144. this.account = account;
  145. this.emit(InternalWeb3Events.ACCOUNT_CHANGED, account);
  146. }
  147. }, {
  148. key: "handleConnect",
  149. value: function (connectInfo) {
  150. this.emit(InternalWeb3Events.PROVIDER_CONNECT, connectInfo);
  151. }
  152. }, {
  153. key: "handleDisconnect",
  154. value: function (error) {
  155. this.emit(InternalWeb3Events.PROVIDER_DISCONNECT, error);
  156. }
  157. }, {
  158. key: "deactivate",
  159. value: function () {
  160. return _regenerator.default.async(function (_context2) {
  161. while (1) {
  162. switch (_context2.prev = _context2.next) {
  163. case 0:
  164. this.account = null;
  165. this.chianId = null;
  166. this.web3 = null;
  167. this.provider = null;
  168. this.privateKey = null;
  169. if (!this.connector) {
  170. _context2.next = 10;
  171. break;
  172. }
  173. if (this.connector.removeListener) {
  174. this.connector.removeListener(InternalWeb3Events.CHAIN_CHANGED, this.handleChainChanged);
  175. this.connector.removeListener(InternalWeb3Events.ACCOUNT_CHANGED, this.handleAccountChanged);
  176. this.connector.removeListener(InternalWeb3Events.PROVIDER_CONNECT, this.handleConnect);
  177. this.connector.removeListener(InternalWeb3Events.PROVIDER_DISCONNECT, this.handleDisconnect);
  178. }
  179. if (!this.connector.deactivate) {
  180. _context2.next = 10;
  181. break;
  182. }
  183. _context2.next = 10;
  184. return _regenerator.default.awrap(this.connector.deactivate());
  185. case 10:
  186. this.connector = null;
  187. case 11:
  188. case "end":
  189. return _context2.stop();
  190. }
  191. }
  192. }, null, this, null, Promise);
  193. }
  194. }]);
  195. return InternalWeb3Provider;
  196. }(_events.default);
  197. var _default = InternalWeb3Provider;
  198. exports.default = _default;