InjectedWeb3Connector.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  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.InjectedEvents = void 0;
  9. var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
  10. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
  11. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
  12. var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/assertThisInitialized"));
  13. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
  14. var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
  15. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
  16. var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/inherits"));
  17. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/possibleConstructorReturn"));
  18. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/getPrototypeOf"));
  19. var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/wrapNativeSuper"));
  20. var _freeze = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/freeze"));
  21. var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
  22. var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
  23. var _AbstractWeb3Connector = _interopRequireDefault(require("./AbstractWeb3Connector"));
  24. var _events = _interopRequireDefault(require("events"));
  25. var _verifyChainId = _interopRequireDefault(require("../utils/verifyChainId"));
  26. function _createSuper(Derived) {
  27. var hasNativeReflectConstruct = _isNativeReflectConstruct();
  28. return function () {
  29. var Super = (0, _getPrototypeOf2.default)(Derived),
  30. result;
  31. if (hasNativeReflectConstruct) {
  32. var NewTarget = (0, _getPrototypeOf2.default)(this).constructor;
  33. result = _Reflect$construct(Super, arguments, NewTarget);
  34. } else {
  35. result = Super.apply(this, arguments);
  36. }
  37. return (0, _possibleConstructorReturn2.default)(this, result);
  38. };
  39. }
  40. function _isNativeReflectConstruct() {
  41. if (typeof Reflect === "undefined" || !_Reflect$construct) return false;
  42. if (_Reflect$construct.sham) return false;
  43. if (typeof Proxy === "function") return true;
  44. try {
  45. Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {}));
  46. return true;
  47. } catch (e) {
  48. return false;
  49. }
  50. }
  51. var InjectedEvents = (0, _freeze.default)({
  52. ACCOUNTS_CHANGED: 'accountsChanged',
  53. CHAIN_CHANGED: 'chainChanged',
  54. CONNECT: 'connect',
  55. DISCONNECT: 'disconnect'
  56. });
  57. exports.InjectedEvents = InjectedEvents;
  58. var NoEthereumProviderError = /*#__PURE__*/function (_Error) {
  59. (0, _inherits2.default)(NoEthereumProviderError, _Error);
  60. var _super = _createSuper(NoEthereumProviderError);
  61. function NoEthereumProviderError() {
  62. var _this;
  63. (0, _classCallCheck2.default)(this, NoEthereumProviderError);
  64. _this = _super.call(this);
  65. _this.message = 'Non ethereum enabled browser';
  66. return _this;
  67. }
  68. return (0, _createClass2.default)(NoEthereumProviderError);
  69. }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
  70. /**
  71. * Connector to connect an injected provider (like Metamask) to Moralis
  72. * The provider should be injected in window.ethereum
  73. */
  74. var InjectedWeb3Connector = /*#__PURE__*/function (_AbstractWeb3Connecto) {
  75. (0, _inherits2.default)(InjectedWeb3Connector, _AbstractWeb3Connecto);
  76. var _super2 = _createSuper(InjectedWeb3Connector);
  77. function InjectedWeb3Connector() {
  78. var _context;
  79. var _this2;
  80. (0, _classCallCheck2.default)(this, InjectedWeb3Connector);
  81. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  82. args[_key] = arguments[_key];
  83. }
  84. _this2 = _super2.call.apply(_super2, (0, _concat.default)(_context = [this]).call(_context, args));
  85. (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "type", 'injected');
  86. return _this2;
  87. }
  88. (0, _createClass2.default)(InjectedWeb3Connector, [{
  89. key: "verifyEthereumBrowser",
  90. value: function () {
  91. var _window;
  92. if (!((_window = window) !== null && _window !== void 0 && _window.ethereum)) {
  93. throw new NoEthereumProviderError();
  94. }
  95. }
  96. }, {
  97. key: "activate",
  98. value: function () {
  99. var _activate = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
  100. var _yield$Promise$all, _yield$Promise$all2, accounts, chainId, account, provider;
  101. return _regenerator.default.wrap(function (_context2) {
  102. while (1) {
  103. switch (_context2.prev = _context2.next) {
  104. case 0:
  105. this.verifyEthereumBrowser();
  106. _context2.next = 3;
  107. return _promise.default.all([window.ethereum.request({
  108. method: 'eth_requestAccounts'
  109. }), window.ethereum.request({
  110. method: 'eth_chainId'
  111. })]);
  112. case 3:
  113. _yield$Promise$all = _context2.sent;
  114. _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 2);
  115. accounts = _yield$Promise$all2[0];
  116. chainId = _yield$Promise$all2[1];
  117. account = accounts[0] ? accounts[0].toLowerCase() : null;
  118. provider = window.ethereum;
  119. this.chainId = chainId;
  120. this.account = account;
  121. this.provider = provider;
  122. this.subscribeToEvents(provider);
  123. return _context2.abrupt("return", {
  124. provider: provider,
  125. chainId: chainId,
  126. account: account
  127. });
  128. case 14:
  129. case "end":
  130. return _context2.stop();
  131. }
  132. }
  133. }, _callee, this);
  134. }));
  135. return function () {
  136. return _activate.apply(this, arguments);
  137. };
  138. }()
  139. }, {
  140. key: "switchNetwork",
  141. value: function () {
  142. var _switchNetwork = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(chainId) {
  143. var currentNetwork;
  144. return _regenerator.default.wrap(function (_context3) {
  145. while (1) {
  146. switch (_context3.prev = _context3.next) {
  147. case 0:
  148. this.verifyEthereumBrowser();
  149. chainId = (0, _verifyChainId.default)(chainId);
  150. currentNetwork = this.chainId;
  151. if (!(currentNetwork === chainId)) {
  152. _context3.next = 5;
  153. break;
  154. }
  155. return _context3.abrupt("return");
  156. case 5:
  157. _context3.next = 7;
  158. return window.ethereum.request({
  159. method: 'wallet_switchEthereumChain',
  160. params: [{
  161. chainId: chainId
  162. }]
  163. });
  164. case 7:
  165. case "end":
  166. return _context3.stop();
  167. }
  168. }
  169. }, _callee2, this);
  170. }));
  171. return function () {
  172. return _switchNetwork.apply(this, arguments);
  173. };
  174. }()
  175. }, {
  176. key: "addNetwork",
  177. value: function () {
  178. var _addNetwork = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(chainId, chainName, currencyName, currencySymbol, rpcUrl, blockExplorerUrl) {
  179. var newchainId;
  180. return _regenerator.default.wrap(function (_context4) {
  181. while (1) {
  182. switch (_context4.prev = _context4.next) {
  183. case 0:
  184. this.verifyEthereumBrowser();
  185. newchainId = (0, _verifyChainId.default)(chainId);
  186. _context4.next = 4;
  187. return window.ethereum.request({
  188. method: 'wallet_addEthereumChain',
  189. params: [{
  190. chainId: newchainId,
  191. chainName: chainName,
  192. nativeCurrency: {
  193. name: currencyName,
  194. symbol: currencySymbol,
  195. decimals: 18
  196. },
  197. rpcUrls: [rpcUrl],
  198. blockExplorerUrls: blockExplorerUrl ? [blockExplorerUrl] : null
  199. }]
  200. });
  201. case 4:
  202. case "end":
  203. return _context4.stop();
  204. }
  205. }
  206. }, _callee3, this);
  207. }));
  208. return function () {
  209. return _addNetwork.apply(this, arguments);
  210. };
  211. }()
  212. }]);
  213. return InjectedWeb3Connector;
  214. }(_AbstractWeb3Connector.default);
  215. var _default = InjectedWeb3Connector;
  216. exports.default = _default;