MagicWeb3Connector.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _ethers = require("ethers");
  7. var _AbstractWeb3Connector = _interopRequireDefault(require("./AbstractWeb3Connector"));
  8. function _interopRequireDefault(obj) {
  9. return obj && obj.__esModule ? obj : {
  10. default: obj
  11. };
  12. }
  13. function _defineProperty(obj, key, value) {
  14. if (key in obj) {
  15. Object.defineProperty(obj, key, {
  16. value: value,
  17. enumerable: true,
  18. configurable: true,
  19. writable: true
  20. });
  21. } else {
  22. obj[key] = value;
  23. }
  24. return obj;
  25. }
  26. class MagicWeb3Connector extends _AbstractWeb3Connector.default {
  27. constructor(...args) {
  28. super(...args);
  29. _defineProperty(this, "type", 'MagicLink');
  30. _defineProperty(this, "deactivate", async () => {
  31. this.unsubscribeToEvents(this.provider);
  32. if (this.magicUser) {
  33. await this.magicUser.user.logout();
  34. }
  35. this.account = null;
  36. this.chainId = null;
  37. this.provider = null;
  38. });
  39. }
  40. async activate({
  41. email,
  42. apiKey,
  43. network,
  44. newSession
  45. } = {}) {
  46. let magic = null;
  47. let ether = null;
  48. if (!email) {
  49. throw new Error('"email" not provided, please provide Email');
  50. }
  51. if (!apiKey) {
  52. throw new Error('"apiKey" not provided, please provide Api Key');
  53. }
  54. if (!network) {
  55. throw new Error('"network" not provided, please provide network');
  56. }
  57. let Magic;
  58. try {
  59. var _require;
  60. Magic = (_require = require('magic-sdk')) === null || _require === void 0 ? void 0 : _require.Magic;
  61. } catch (error) {// Do nothing. User might not need walletconnect
  62. }
  63. if (!Magic) {
  64. var _window;
  65. Magic = (_window = window) === null || _window === void 0 ? void 0 : _window.Magic;
  66. }
  67. if (!Magic) {
  68. throw new Error('Cannot enable via MagicLink: dependency "magic-sdk" is missing');
  69. }
  70. try {
  71. magic = new Magic(apiKey, {
  72. network: network
  73. });
  74. if (newSession) {
  75. var _magic;
  76. if ((_magic = magic) !== null && _magic !== void 0 && _magic.user) {
  77. try {
  78. var _magic2, _magic2$user;
  79. await ((_magic2 = magic) === null || _magic2 === void 0 ? void 0 : (_magic2$user = _magic2.user) === null || _magic2$user === void 0 ? void 0 : _magic2$user.logout());
  80. } catch (error) {// Do nothing
  81. }
  82. }
  83. }
  84. ether = new _ethers.ethers.providers.Web3Provider(magic.rpcProvider);
  85. await magic.auth.loginWithMagicLink({
  86. email: email
  87. });
  88. } catch (err) {
  89. throw new Error('Error during enable via MagicLink, please double check network and apikey');
  90. }
  91. const loggedIn = await magic.user.isLoggedIn();
  92. if (loggedIn) {
  93. const signer = ether.getSigner();
  94. const {
  95. chainId
  96. } = await ether.getNetwork();
  97. const address = (await signer.getAddress()).toLowerCase(); // Assign Constants
  98. this.account = address;
  99. this.provider = ether.provider;
  100. this.chainId = `0x${chainId.toString(16)}`; // Assign magic user for deactivation
  101. this.magicUser = magic;
  102. this.subscribeToEvents(this.provider);
  103. return {
  104. provider: this.provider,
  105. account: this.account,
  106. chainId: this.chainId
  107. };
  108. }
  109. throw new Error('Error during enable via MagicLink, login to magic failed');
  110. }
  111. }
  112. exports.default = MagicWeb3Connector;