MoralisDot.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _ParseUser = _interopRequireDefault(require("./ParseUser"));
  7. var _ParseQuery = _interopRequireDefault(require("./ParseQuery"));
  8. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  9. var _ParseACL = _interopRequireDefault(require("./ParseACL"));
  10. var _createSigningData = _interopRequireDefault(require("./createSigningData"));
  11. function _interopRequireDefault(obj) {
  12. return obj && obj.__esModule ? obj : {
  13. default: obj
  14. };
  15. }
  16. /* global window */
  17. let web3EnablePromise = null;
  18. class MoralisDot {
  19. static web3IsInjected() {
  20. return Object.keys(window.injectedWeb3).length !== 0;
  21. }
  22. static async enable(opts, type = 'polkadot-js') {
  23. var _window$injectedWeb, _window$injectedWeb$t;
  24. if (web3EnablePromise) return web3EnablePromise;
  25. web3EnablePromise = (_window$injectedWeb = window.injectedWeb3) === null || _window$injectedWeb === void 0 ? void 0 : (_window$injectedWeb$t = _window$injectedWeb[type]) === null || _window$injectedWeb$t === void 0 ? void 0 : _window$injectedWeb$t.enable(opts);
  26. return web3EnablePromise;
  27. }
  28. static async authenticate(opts) {
  29. var _opts$name;
  30. MoralisDot.web3 = await MoralisDot.enable((_opts$name = opts === null || opts === void 0 ? void 0 : opts.name) !== null && _opts$name !== void 0 ? _opts$name : 'Moralis');
  31. const allAccounts = await MoralisDot.web3.accounts.get();
  32. const account = allAccounts[0];
  33. const address = account === null || account === void 0 ? void 0 : account.address;
  34. if (!address) throw new Error('Address not found');
  35. const dotAddress = address;
  36. const message = MoralisDot.getSigningData();
  37. const data = await (0, _createSigningData.default)(message);
  38. const signature = await MoralisDot.sign(address, data);
  39. const user = await _ParseUser.default.logInWith('moralisDot', {
  40. authData: {
  41. id: dotAddress,
  42. signature,
  43. data
  44. }
  45. });
  46. if (!user) throw new Error('Could not get user');
  47. await user.setACL(new _ParseACL.default(user));
  48. user.addAllUnique('dotAccounts', [dotAddress]);
  49. user.set('dotAddress', dotAddress);
  50. await user.save();
  51. return user;
  52. }
  53. static async link(account, options) {
  54. const message = (options === null || options === void 0 ? void 0 : options.signingMessage) || MoralisDot.getSigningData();
  55. const user = await _ParseUser.default.current();
  56. const dotAddress = account;
  57. const DotAddress = _ParseObject.default.extend('_DotAddress');
  58. const query = new _ParseQuery.default(DotAddress);
  59. const dotAddressRecord = await query.get(dotAddress).catch(() => null);
  60. if (!dotAddressRecord) {
  61. const data = await (0, _createSigningData.default)(message);
  62. const signature = await MoralisDot.sign(dotAddress, data);
  63. await user.linkWith('moralisDot', {
  64. authData: {
  65. id: dotAddress,
  66. signature,
  67. data
  68. }
  69. });
  70. }
  71. user.addAllUnique('dotAccounts', [dotAddress]);
  72. user.set('dotAddress', dotAddress);
  73. await user.save();
  74. return user;
  75. }
  76. static async unlink(account) {
  77. var _user$get;
  78. const accountsLower = account;
  79. const DotAddress = _ParseObject.default.extend('_DotAddress');
  80. const query = new _ParseQuery.default(DotAddress);
  81. const dotAddressRecord = await query.get(accountsLower);
  82. await dotAddressRecord.destroy();
  83. const user = await _ParseUser.default.current();
  84. const accounts = (_user$get = user.get('dotAccounts')) !== null && _user$get !== void 0 ? _user$get : [];
  85. const nextAccounts = accounts.filter(v => v !== accountsLower);
  86. user.set('dotAccounts', nextAccounts);
  87. user.set('dotAddress', nextAccounts[0]);
  88. await user._unlinkFrom('moralisDot');
  89. await user.save();
  90. return user;
  91. }
  92. static async sign(address, data) {
  93. if (!web3EnablePromise) throw new Error('Must enable MoralisDot');
  94. const web3 = await web3EnablePromise;
  95. if (!web3.signer) {
  96. throw new Error('No signer found');
  97. }
  98. const {
  99. signature
  100. } = await web3.signer.signRaw({
  101. address,
  102. data: stringToHex(data),
  103. type: 'bytes'
  104. });
  105. return signature;
  106. }
  107. static getSigningData() {
  108. return 'Moralis Authentication';
  109. }
  110. }
  111. var _default = MoralisDot;
  112. exports.default = _default;
  113. function stringToHex(value) {
  114. return toHexString(stringToU8a(value));
  115. }
  116. function stringToU8a(value) {
  117. const u8a = new Uint8Array(value.length);
  118. for (let i = 0; i < value.length; i++) {
  119. u8a[i] = value.charCodeAt(i);
  120. }
  121. return u8a;
  122. }
  123. function toHexString(byteArray) {
  124. return `0x${Array.from(byteArray, byte => {
  125. // eslint-disable-next-line no-bitwise
  126. return `0${(byte & 0xff).toString(16)}`.slice(-2);
  127. }).join('')}`;
  128. }