InjectedWeb3Connector.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = exports.InjectedEvents = void 0;
  6. var _AbstractWeb3Connector = _interopRequireDefault(require("./AbstractWeb3Connector"));
  7. var _events = _interopRequireDefault(require("events"));
  8. var _verifyChainId = _interopRequireDefault(require("../utils/verifyChainId"));
  9. function _interopRequireDefault(obj) {
  10. return obj && obj.__esModule ? obj : {
  11. default: obj
  12. };
  13. }
  14. function _defineProperty(obj, key, value) {
  15. if (key in obj) {
  16. Object.defineProperty(obj, key, {
  17. value: value,
  18. enumerable: true,
  19. configurable: true,
  20. writable: true
  21. });
  22. } else {
  23. obj[key] = value;
  24. }
  25. return obj;
  26. }
  27. const InjectedEvents = Object.freeze({
  28. ACCOUNTS_CHANGED: 'accountsChanged',
  29. CHAIN_CHANGED: 'chainChanged',
  30. CONNECT: 'connect',
  31. DISCONNECT: 'disconnect'
  32. });
  33. exports.InjectedEvents = InjectedEvents;
  34. class NoEthereumProviderError extends Error {
  35. constructor() {
  36. super();
  37. this.message = 'Non ethereum enabled browser';
  38. }
  39. }
  40. /**
  41. * Connector to connect an injected provider (like Metamask) to Moralis
  42. * The provider should be injected in window.ethereum
  43. */
  44. class InjectedWeb3Connector extends _AbstractWeb3Connector.default {
  45. constructor(...args) {
  46. super(...args);
  47. _defineProperty(this, "type", 'injected');
  48. }
  49. verifyEthereumBrowser() {
  50. var _window;
  51. if (!((_window = window) !== null && _window !== void 0 && _window.ethereum)) {
  52. throw new NoEthereumProviderError();
  53. }
  54. }
  55. async activate() {
  56. this.verifyEthereumBrowser();
  57. const [accounts, chainId] = await Promise.all([window.ethereum.request({
  58. method: 'eth_requestAccounts'
  59. }), window.ethereum.request({
  60. method: 'eth_chainId'
  61. })]);
  62. const account = accounts[0] ? accounts[0].toLowerCase() : null;
  63. const provider = window.ethereum;
  64. this.chainId = chainId;
  65. this.account = account;
  66. this.provider = provider;
  67. this.subscribeToEvents(provider);
  68. return {
  69. provider,
  70. chainId,
  71. account
  72. };
  73. }
  74. async switchNetwork(chainId) {
  75. this.verifyEthereumBrowser();
  76. chainId = (0, _verifyChainId.default)(chainId);
  77. const currentNetwork = this.chainId;
  78. if (currentNetwork === chainId) return;
  79. await window.ethereum.request({
  80. method: 'wallet_switchEthereumChain',
  81. params: [{
  82. chainId
  83. }]
  84. });
  85. }
  86. async addNetwork(chainId, chainName, currencyName, currencySymbol, rpcUrl, blockExplorerUrl) {
  87. this.verifyEthereumBrowser();
  88. const newchainId = (0, _verifyChainId.default)(chainId);
  89. await window.ethereum.request({
  90. method: 'wallet_addEthereumChain',
  91. params: [{
  92. chainId: newchainId,
  93. chainName: chainName,
  94. nativeCurrency: {
  95. name: currencyName,
  96. symbol: currencySymbol,
  97. decimals: 18
  98. },
  99. rpcUrls: [rpcUrl],
  100. blockExplorerUrls: blockExplorerUrl ? [blockExplorerUrl] : null
  101. }]
  102. });
  103. }
  104. }
  105. var _default = InjectedWeb3Connector;
  106. exports.default = _default;