InternalWeb3Provider.js 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. "use strict";
  2. var _Reflect$construct = require("@babel/runtime-corejs3/core-js-stable/reflect/construct");
  3. var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
  4. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  5. _Object$defineProperty(exports, "__esModule", {
  6. value: true
  7. });
  8. exports.default = exports.InternalWeb3Events = void 0;
  9. var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
  10. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
  11. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
  12. var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
  13. var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/assertThisInitialized"));
  14. var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/inherits"));
  15. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/possibleConstructorReturn"));
  16. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/getPrototypeOf"));
  17. var _freeze = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/freeze"));
  18. var _bind = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/bind"));
  19. var _events = _interopRequireDefault(require("events"));
  20. var _events2 = require("./Web3Connector/events");
  21. var _ethers = require("ethers");
  22. var _convert = require("./utils/convert");
  23. function _createSuper(Derived) {
  24. var hasNativeReflectConstruct = _isNativeReflectConstruct();
  25. return function () {
  26. var Super = (0, _getPrototypeOf2.default)(Derived),
  27. result;
  28. if (hasNativeReflectConstruct) {
  29. var NewTarget = (0, _getPrototypeOf2.default)(this).constructor;
  30. result = _Reflect$construct(Super, arguments, NewTarget);
  31. } else {
  32. result = Super.apply(this, arguments);
  33. }
  34. return (0, _possibleConstructorReturn2.default)(this, result);
  35. };
  36. }
  37. function _isNativeReflectConstruct() {
  38. if (typeof Reflect === "undefined" || !_Reflect$construct) return false;
  39. if (_Reflect$construct.sham) return false;
  40. if (typeof Proxy === "function") return true;
  41. try {
  42. Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {}));
  43. return true;
  44. } catch (e) {
  45. return false;
  46. }
  47. } // Events emitted by Moralis
  48. var InternalWeb3Events = (0, _freeze.default)({
  49. ACCOUNT_CHANGED: 'accountChanged',
  50. CHAIN_CHANGED: 'chainChanged',
  51. PROVIDER_CONNECT: 'provider-connect',
  52. PROVIDER_DISCONNECT: 'provider-disconnect',
  53. WEB3_ENABLED: 'web3Enabled',
  54. WEB3_DEACTIVATED: 'web3Deactivated'
  55. });
  56. /**
  57. * Wrapper for the internal web3 provider,
  58. * responsible for syncing data when connector connects/deactivates
  59. * Gives access to ethers functionalities, initialized by the connector
  60. */
  61. exports.InternalWeb3Events = InternalWeb3Events;
  62. var InternalWeb3Provider = /*#__PURE__*/function (_EventEmitter) {
  63. (0, _inherits2.default)(InternalWeb3Provider, _EventEmitter);
  64. var _super = _createSuper(InternalWeb3Provider);
  65. function InternalWeb3Provider(connector) {
  66. var _context, _context2, _context3, _context4;
  67. var _this;
  68. var anyNetwork = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  69. var privateKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  70. (0, _classCallCheck2.default)(this, InternalWeb3Provider);
  71. _this = _super.call(this);
  72. if (!connector) {
  73. throw new Error('Cannot initialize InternalWeb3Provider without a connector');
  74. }
  75. _this.connector = connector;
  76. _this.anyNetwork = anyNetwork;
  77. _this.privateKey = privateKey;
  78. _this.handleAccountChanged = (0, _bind.default)(_context = _this.handleAccountChanged).call(_context, (0, _assertThisInitialized2.default)(_this));
  79. _this.handleChainChanged = (0, _bind.default)(_context2 = _this.handleChainChanged).call(_context2, (0, _assertThisInitialized2.default)(_this));
  80. _this.handleConnect = (0, _bind.default)(_context3 = _this.handleConnect).call(_context3, (0, _assertThisInitialized2.default)(_this));
  81. _this.handleDisconnect = (0, _bind.default)(_context4 = _this.handleDisconnect).call(_context4, (0, _assertThisInitialized2.default)(_this));
  82. return _this;
  83. }
  84. (0, _createClass2.default)(InternalWeb3Provider, [{
  85. key: "activate",
  86. value: function () {
  87. var _activate = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(options) {
  88. var _yield$this$connector, provider, chainId, account, network;
  89. return _regenerator.default.wrap(function (_context5) {
  90. while (1) {
  91. switch (_context5.prev = _context5.next) {
  92. case 0:
  93. if (this.connector) {
  94. _context5.next = 2;
  95. break;
  96. }
  97. throw new Error('Cannot acticate InternalWeb3Provider without a connector');
  98. case 2:
  99. _context5.next = 4;
  100. return this.connector.activate(options);
  101. case 4:
  102. _yield$this$connector = _context5.sent;
  103. provider = _yield$this$connector.provider;
  104. chainId = _yield$this$connector.chainId;
  105. account = _yield$this$connector.account;
  106. this.provider = provider;
  107. this.chainId = chainId;
  108. this.account = account;
  109. network = this.anyNetwork ? 'any' : (0, _convert.fromHexToDecimal)(chainId);
  110. this.web3 = new _ethers.ethers.providers.Web3Provider(provider, network);
  111. if (this.connector.on) {
  112. this.connector.on(_events2.ConnectorEvents.ACCOUNT_CHANGED, this.handleAccountChanged);
  113. this.connector.on(_events2.ConnectorEvents.CHAIN_CHANGED, this.handleChainChanged);
  114. this.connector.on(_events2.ConnectorEvents.CONNECT, this.handleConnect);
  115. this.connector.on(_events2.ConnectorEvents.DISCONNECT, this.handleDisconnect);
  116. }
  117. return _context5.abrupt("return", {
  118. provider: provider,
  119. chainId: chainId,
  120. account: account,
  121. web3: this.web3
  122. });
  123. case 15:
  124. case "end":
  125. return _context5.stop();
  126. }
  127. }
  128. }, _callee, this);
  129. }));
  130. return function () {
  131. return _activate.apply(this, arguments);
  132. };
  133. }() // Returns a provider (or wallet if a privateKey is provided) that can sign messages (throws if not possible, ie. the account cannot sign)
  134. }, {
  135. key: "signer",
  136. get: function () {
  137. return this.privateKey != null ? new _ethers.ethers.Wallet(this.privateKey, this.web3) : this.web3.getSigner(this.account);
  138. } // Returns a provider (or wallet if a privateKey is provided) that can sign messages or the normal web3 provider as fallback
  139. }, {
  140. key: "signerOrProvider",
  141. get: function () {
  142. try {
  143. if (this.account) {
  144. return this.privateKey != null ? new _ethers.ethers.Wallet(this.privateKey, this.web3) : this.web3.getSigner(this.account);
  145. }
  146. return this.web3;
  147. } catch (error) {
  148. return this.web3;
  149. }
  150. }
  151. }, {
  152. key: "handleChainChanged",
  153. value: function (chainId) {
  154. this.chainId = chainId;
  155. this.web3 = new _ethers.ethers.providers.Web3Provider(this.provider, (0, _convert.fromHexToDecimal)(chainId));
  156. this.emit(InternalWeb3Events.CHAIN_CHANGED, chainId);
  157. }
  158. }, {
  159. key: "handleAccountChanged",
  160. value: function (account) {
  161. this.account = account;
  162. this.emit(InternalWeb3Events.ACCOUNT_CHANGED, account);
  163. } // Handle Connect events fired from connectors
  164. }, {
  165. key: "handleConnect",
  166. value: function (connectInfo) {
  167. this.emit(InternalWeb3Events.PROVIDER_CONNECT, connectInfo);
  168. } // Handle Disconnect events fired from connectors
  169. }, {
  170. key: "handleDisconnect",
  171. value: function (error) {
  172. this.emit(InternalWeb3Events.PROVIDER_DISCONNECT, error);
  173. }
  174. }, {
  175. key: "deactivate",
  176. value: function () {
  177. var _deactivate = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
  178. return _regenerator.default.wrap(function (_context6) {
  179. while (1) {
  180. switch (_context6.prev = _context6.next) {
  181. case 0:
  182. this.account = null;
  183. this.chianId = null;
  184. this.web3 = null;
  185. this.provider = null;
  186. this.privateKey = null;
  187. if (!this.connector) {
  188. _context6.next = 10;
  189. break;
  190. }
  191. if (this.connector.removeListener) {
  192. this.connector.removeListener(InternalWeb3Events.CHAIN_CHANGED, this.handleChainChanged);
  193. this.connector.removeListener(InternalWeb3Events.ACCOUNT_CHANGED, this.handleAccountChanged);
  194. this.connector.removeListener(InternalWeb3Events.PROVIDER_CONNECT, this.handleConnect);
  195. this.connector.removeListener(InternalWeb3Events.PROVIDER_DISCONNECT, this.handleDisconnect);
  196. }
  197. if (!this.connector.deactivate) {
  198. _context6.next = 10;
  199. break;
  200. }
  201. _context6.next = 10;
  202. return this.connector.deactivate();
  203. case 10:
  204. this.connector = null;
  205. case 11:
  206. case "end":
  207. return _context6.stop();
  208. }
  209. }
  210. }, _callee2, this);
  211. }));
  212. return function () {
  213. return _deactivate.apply(this, arguments);
  214. };
  215. }()
  216. }]);
  217. return InternalWeb3Provider;
  218. }(_events.default);
  219. var _default = InternalWeb3Provider;
  220. exports.default = _default;