WalletConnectWeb3Connector.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = exports.WalletConnectEvent = 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 _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
  10. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
  11. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
  12. var _verifyChainId = _interopRequireDefault(require("../utils/verifyChainId"));
  13. var _AbstractWeb3Connector = _interopRequireDefault(require("./AbstractWeb3Connector"));
  14. var _events = require("./events");
  15. var _MoralisRpcs = require("./MoralisRpcs");
  16. function _createSuper(Derived) {
  17. var hasNativeReflectConstruct = _isNativeReflectConstruct();
  18. return function () {
  19. var Super = (0, _getPrototypeOf2.default)(Derived),
  20. result;
  21. if (hasNativeReflectConstruct) {
  22. var NewTarget = (0, _getPrototypeOf2.default)(this).constructor;
  23. result = Reflect.construct(Super, arguments, NewTarget);
  24. } else {
  25. result = Super.apply(this, arguments);
  26. }
  27. return (0, _possibleConstructorReturn2.default)(this, result);
  28. };
  29. }
  30. function _isNativeReflectConstruct() {
  31. if (typeof Reflect === "undefined" || !Reflect.construct) return false;
  32. if (Reflect.construct.sham) return false;
  33. if (typeof Proxy === "function") return true;
  34. try {
  35. Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
  36. return true;
  37. } catch (e) {
  38. return false;
  39. }
  40. }
  41. var WalletConnectEvent = Object.freeze({
  42. ACCOUNTS_CHANGED: 'accountsChanged',
  43. CHAIN_CHANGED: 'chainChanged',
  44. DISCONNECT: 'disconnect'
  45. });
  46. exports.WalletConnectEvent = WalletConnectEvent;
  47. var WalletConnectWeb3Connector = function (_AbstractWeb3Connecto) {
  48. (0, _inherits2.default)(WalletConnectWeb3Connector, _AbstractWeb3Connecto);
  49. var _super = _createSuper(WalletConnectWeb3Connector);
  50. function WalletConnectWeb3Connector() {
  51. var _this;
  52. (0, _classCallCheck2.default)(this, WalletConnectWeb3Connector);
  53. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  54. args[_key] = arguments[_key];
  55. }
  56. _this = _super.call.apply(_super, [this].concat(args));
  57. _this.type = 'WalletConnect';
  58. return _this;
  59. }
  60. (0, _createClass2.default)(WalletConnectWeb3Connector, [{
  61. key: "activate",
  62. value: function () {
  63. var _ref,
  64. providedChainId,
  65. mobileLinks,
  66. newSession,
  67. WalletConnectProvider,
  68. config,
  69. _require,
  70. _window,
  71. _window$WalletConnect,
  72. accounts,
  73. account,
  74. chainId,
  75. verifiedChainId,
  76. _args = arguments;
  77. return _regenerator.default.async(function (_context) {
  78. while (1) {
  79. switch (_context.prev = _context.next) {
  80. case 0:
  81. _ref = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}, providedChainId = _ref.chainId, mobileLinks = _ref.mobileLinks, newSession = _ref.newSession;
  82. if (newSession) {
  83. this.cleanup();
  84. }
  85. if (this.provider) {
  86. _context.next = 9;
  87. break;
  88. }
  89. config = {
  90. rpc: (0, _MoralisRpcs.getMoralisRpcs)('WalletConnect'),
  91. chainId: providedChainId,
  92. qrcodeModalOptions: {
  93. mobileLinks: mobileLinks
  94. }
  95. };
  96. try {
  97. WalletConnectProvider = (_require = require('@walletconnect/web3-provider')) == null ? void 0 : _require.default;
  98. } catch (error) {}
  99. if (!WalletConnectProvider) {
  100. WalletConnectProvider = (_window = window) == null ? void 0 : (_window$WalletConnect = _window.WalletConnectProvider) == null ? void 0 : _window$WalletConnect.default;
  101. }
  102. if (WalletConnectProvider) {
  103. _context.next = 8;
  104. break;
  105. }
  106. throw new Error('Cannot enable via WalletConnect: dependency "@walletconnect/web3-provider" is missing');
  107. case 8:
  108. if (typeof WalletConnectProvider === 'function') {
  109. this.provider = new WalletConnectProvider(config);
  110. } else {
  111. this.provider = new window.WalletConnectProvider(config);
  112. }
  113. case 9:
  114. if (this.provider) {
  115. _context.next = 11;
  116. break;
  117. }
  118. throw new Error('Could not connect via WalletConnect, error in connecting to provider');
  119. case 11:
  120. _context.next = 13;
  121. return _regenerator.default.awrap(this.provider.enable());
  122. case 13:
  123. accounts = _context.sent;
  124. account = accounts[0].toLowerCase();
  125. chainId = this.provider.chainId;
  126. verifiedChainId = (0, _verifyChainId.default)(chainId);
  127. this.account = account;
  128. this.chainId = verifiedChainId;
  129. this.subscribeToEvents(this.provider);
  130. return _context.abrupt("return", {
  131. provider: this.provider,
  132. account: account,
  133. chainId: verifiedChainId
  134. });
  135. case 21:
  136. case "end":
  137. return _context.stop();
  138. }
  139. }
  140. }, null, this, null, Promise);
  141. }
  142. }, {
  143. key: "cleanup",
  144. value: function () {
  145. try {
  146. if (window) {
  147. window.localStorage.removeItem('walletconnect');
  148. }
  149. } catch (error) {}
  150. }
  151. }, {
  152. key: "deactivate",
  153. value: function () {
  154. return _regenerator.default.async(function (_context2) {
  155. while (1) {
  156. switch (_context2.prev = _context2.next) {
  157. case 0:
  158. this.unsubscribeToEvents(this.provider);
  159. if (!this.provider) {
  160. _context2.next = 9;
  161. break;
  162. }
  163. _context2.prev = 2;
  164. _context2.next = 5;
  165. return _regenerator.default.awrap(this.provider.close());
  166. case 5:
  167. _context2.next = 9;
  168. break;
  169. case 7:
  170. _context2.prev = 7;
  171. _context2.t0 = _context2["catch"](2);
  172. case 9:
  173. this.account = null;
  174. this.chainId = null;
  175. this.provider = null;
  176. case 12:
  177. case "end":
  178. return _context2.stop();
  179. }
  180. }
  181. }, null, this, [[2, 7]], Promise);
  182. }
  183. }]);
  184. return WalletConnectWeb3Connector;
  185. }(_AbstractWeb3Connector.default);
  186. var _default = WalletConnectWeb3Connector;
  187. exports.default = _default;