WalletConnectWeb3Connector.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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.WalletConnectEvent = 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
  18. var _freeze = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/freeze"));
  19. var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
  20. var _verifyChainId = _interopRequireDefault(require("../utils/verifyChainId"));
  21. var _AbstractWeb3Connector = _interopRequireDefault(require("./AbstractWeb3Connector"));
  22. var _events = require("./events");
  23. var _MoralisRpcs = require("./MoralisRpcs");
  24. function _createSuper(Derived) {
  25. var hasNativeReflectConstruct = _isNativeReflectConstruct();
  26. return function () {
  27. var Super = (0, _getPrototypeOf2.default)(Derived),
  28. result;
  29. if (hasNativeReflectConstruct) {
  30. var NewTarget = (0, _getPrototypeOf2.default)(this).constructor;
  31. result = _Reflect$construct(Super, arguments, NewTarget);
  32. } else {
  33. result = Super.apply(this, arguments);
  34. }
  35. return (0, _possibleConstructorReturn2.default)(this, result);
  36. };
  37. }
  38. function _isNativeReflectConstruct() {
  39. if (typeof Reflect === "undefined" || !_Reflect$construct) return false;
  40. if (_Reflect$construct.sham) return false;
  41. if (typeof Proxy === "function") return true;
  42. try {
  43. Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {}));
  44. return true;
  45. } catch (e) {
  46. return false;
  47. }
  48. }
  49. var WalletConnectEvent = (0, _freeze.default)({
  50. ACCOUNTS_CHANGED: 'accountsChanged',
  51. CHAIN_CHANGED: 'chainChanged',
  52. DISCONNECT: 'disconnect'
  53. });
  54. /**
  55. * Connector to connect an WalletConenct provider to Moralis
  56. * Note: this assumes using WalletConnect v1
  57. * // TODO: support WalletConnect v2
  58. */
  59. exports.WalletConnectEvent = WalletConnectEvent;
  60. var WalletConnectWeb3Connector = /*#__PURE__*/function (_AbstractWeb3Connecto) {
  61. (0, _inherits2.default)(WalletConnectWeb3Connector, _AbstractWeb3Connecto);
  62. var _super = _createSuper(WalletConnectWeb3Connector);
  63. function WalletConnectWeb3Connector() {
  64. var _context;
  65. var _this;
  66. (0, _classCallCheck2.default)(this, WalletConnectWeb3Connector);
  67. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  68. args[_key] = arguments[_key];
  69. }
  70. _this = _super.call.apply(_super, (0, _concat.default)(_context = [this]).call(_context, args));
  71. (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "type", 'WalletConnect');
  72. return _this;
  73. }
  74. (0, _createClass2.default)(WalletConnectWeb3Connector, [{
  75. key: "activate",
  76. value: function () {
  77. var _activate = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
  78. var _ref,
  79. providedChainId,
  80. mobileLinks,
  81. newSession,
  82. WalletConnectProvider,
  83. config,
  84. _require,
  85. _window,
  86. _window$WalletConnect,
  87. accounts,
  88. account,
  89. chainId,
  90. verifiedChainId,
  91. _args = arguments;
  92. return _regenerator.default.wrap(function (_context2) {
  93. while (1) {
  94. switch (_context2.prev = _context2.next) {
  95. case 0:
  96. _ref = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}, providedChainId = _ref.chainId, mobileLinks = _ref.mobileLinks, newSession = _ref.newSession; // Log out of any previous sessions
  97. if (newSession) {
  98. this.cleanup();
  99. }
  100. if (this.provider) {
  101. _context2.next = 9;
  102. break;
  103. }
  104. config = {
  105. rpc: (0, _MoralisRpcs.getMoralisRpcs)('WalletConnect'),
  106. chainId: providedChainId,
  107. qrcodeModalOptions: {
  108. mobileLinks: mobileLinks
  109. }
  110. };
  111. try {
  112. WalletConnectProvider = (_require = require('@walletconnect/web3-provider')) === null || _require === void 0 ? void 0 : _require.default;
  113. } catch (error) {// Do nothing. User might not need walletconnect
  114. }
  115. if (!WalletConnectProvider) {
  116. WalletConnectProvider = (_window = window) === null || _window === void 0 ? void 0 : (_window$WalletConnect = _window.WalletConnectProvider) === null || _window$WalletConnect === void 0 ? void 0 : _window$WalletConnect.default;
  117. }
  118. if (WalletConnectProvider) {
  119. _context2.next = 8;
  120. break;
  121. }
  122. throw new Error('Cannot enable via WalletConnect: dependency "@walletconnect/web3-provider" is missing');
  123. case 8:
  124. if (typeof WalletConnectProvider === 'function') {
  125. this.provider = new WalletConnectProvider(config);
  126. } else {
  127. this.provider = new window.WalletConnectProvider(config);
  128. }
  129. case 9:
  130. if (this.provider) {
  131. _context2.next = 11;
  132. break;
  133. }
  134. throw new Error('Could not connect via WalletConnect, error in connecting to provider');
  135. case 11:
  136. _context2.next = 13;
  137. return this.provider.enable();
  138. case 13:
  139. accounts = _context2.sent;
  140. account = accounts[0].toLowerCase();
  141. chainId = this.provider.chainId;
  142. verifiedChainId = (0, _verifyChainId.default)(chainId);
  143. this.account = account;
  144. this.chainId = verifiedChainId;
  145. this.subscribeToEvents(this.provider);
  146. return _context2.abrupt("return", {
  147. provider: this.provider,
  148. account: account,
  149. chainId: verifiedChainId
  150. });
  151. case 21:
  152. case "end":
  153. return _context2.stop();
  154. }
  155. }
  156. }, _callee, this);
  157. }));
  158. return function () {
  159. return _activate.apply(this, arguments);
  160. };
  161. }() // Cleanup old sessions
  162. }, {
  163. key: "cleanup",
  164. value: function () {
  165. try {
  166. if (window) {
  167. window.localStorage.removeItem('walletconnect');
  168. }
  169. } catch (error) {// Do nothing
  170. }
  171. }
  172. }, {
  173. key: "deactivate",
  174. value: function () {
  175. var _deactivate = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
  176. return _regenerator.default.wrap(function (_context3) {
  177. while (1) {
  178. switch (_context3.prev = _context3.next) {
  179. case 0:
  180. this.unsubscribeToEvents(this.provider);
  181. if (!this.provider) {
  182. _context3.next = 9;
  183. break;
  184. }
  185. _context3.prev = 2;
  186. _context3.next = 5;
  187. return this.provider.close();
  188. case 5:
  189. _context3.next = 9;
  190. break;
  191. case 7:
  192. _context3.prev = 7;
  193. _context3.t0 = _context3["catch"](2);
  194. case 9:
  195. this.account = null;
  196. this.chainId = null;
  197. this.provider = null;
  198. case 12:
  199. case "end":
  200. return _context3.stop();
  201. }
  202. }
  203. }, _callee2, this, [[2, 7]]);
  204. }));
  205. return function () {
  206. return _deactivate.apply(this, arguments);
  207. };
  208. }()
  209. }]);
  210. return WalletConnectWeb3Connector;
  211. }(_AbstractWeb3Connector.default);
  212. var _default = WalletConnectWeb3Connector;
  213. exports.default = _default;