MoralisErd.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = 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 _ParseUser = _interopRequireDefault(require("./ParseUser"));
  10. var _ParseQuery = _interopRequireDefault(require("./ParseQuery"));
  11. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  12. var _ParseACL = _interopRequireDefault(require("./ParseACL"));
  13. var _createSigningData = _interopRequireDefault(require("./createSigningData"));
  14. var INIT_ERROR = 'Could not initialise ledger app, make sure Elrond app is open';
  15. function getErdJs() {
  16. return MoralisErd.getErdJs();
  17. }
  18. var MoralisErd = function () {
  19. function MoralisErd() {
  20. (0, _classCallCheck2.default)(this, MoralisErd);
  21. }
  22. (0, _createClass2.default)(MoralisErd, null, [{
  23. key: "getErdJs",
  24. value: function () {
  25. if (typeof window !== 'undefined' && window.erdjs) return window.erdjs;
  26. throw new Error('Please add erdjs scripts');
  27. }
  28. }, {
  29. key: "gatewayAddress",
  30. value: function () {
  31. return 'https://gateway.elrond.com';
  32. }
  33. }, {
  34. key: "hwProxy",
  35. value: function () {
  36. var _getErdJs, ProxyProvider, proxy;
  37. return _regenerator.default.async(function (_context) {
  38. while (1) {
  39. switch (_context.prev = _context.next) {
  40. case 0:
  41. if (!MoralisErd._proxy) {
  42. _context.next = 2;
  43. break;
  44. }
  45. return _context.abrupt("return", MoralisErd._proxy);
  46. case 2:
  47. _getErdJs = getErdJs(), ProxyProvider = _getErdJs.ProxyProvider;
  48. proxy = new ProxyProvider(MoralisErd.gatewayAddress());
  49. MoralisErd._proxy = proxy;
  50. return _context.abrupt("return", MoralisErd._proxy);
  51. case 6:
  52. case "end":
  53. return _context.stop();
  54. }
  55. }
  56. }, null, null, null, Promise);
  57. }
  58. }, {
  59. key: "hwProvider",
  60. value: function () {
  61. return MoralisErd._hw;
  62. }
  63. }, {
  64. key: "enable",
  65. value: function () {
  66. var _getErdJs2, HWProvider, proxy, hw, success;
  67. return _regenerator.default.async(function (_context2) {
  68. while (1) {
  69. switch (_context2.prev = _context2.next) {
  70. case 0:
  71. _getErdJs2 = getErdJs(), HWProvider = _getErdJs2.HWProvider;
  72. _context2.next = 3;
  73. return _regenerator.default.awrap(MoralisErd.hwProxy());
  74. case 3:
  75. proxy = _context2.sent;
  76. hw = new HWProvider(proxy);
  77. _context2.next = 7;
  78. return _regenerator.default.awrap(hw.init());
  79. case 7:
  80. success = _context2.sent;
  81. if (success) {
  82. _context2.next = 10;
  83. break;
  84. }
  85. throw new Error(INIT_ERROR);
  86. case 10:
  87. MoralisErd._hw = hw;
  88. return _context2.abrupt("return", hw);
  89. case 12:
  90. case "end":
  91. return _context2.stop();
  92. }
  93. }
  94. }, null, null, null, Promise);
  95. }
  96. }, {
  97. key: "authenticate",
  98. value: function () {
  99. var hw, address, erdAddress, accounts, message, data, signature, authData, user;
  100. return _regenerator.default.async(function (_context3) {
  101. while (1) {
  102. switch (_context3.prev = _context3.next) {
  103. case 0:
  104. _context3.next = 2;
  105. return _regenerator.default.awrap(MoralisErd.enable());
  106. case 2:
  107. hw = _context3.sent;
  108. _context3.next = 5;
  109. return _regenerator.default.awrap(hw.login());
  110. case 5:
  111. address = _context3.sent;
  112. erdAddress = address.toLowerCase();
  113. accounts = [erdAddress];
  114. message = MoralisErd.getSigningData();
  115. _context3.next = 11;
  116. return _regenerator.default.awrap((0, _createSigningData.default)(message));
  117. case 11:
  118. data = _context3.sent;
  119. _context3.next = 14;
  120. return _regenerator.default.awrap(MoralisErd.sign(data));
  121. case 14:
  122. signature = _context3.sent;
  123. authData = {
  124. id: erdAddress,
  125. signature: signature,
  126. data: data
  127. };
  128. _context3.next = 18;
  129. return _regenerator.default.awrap(_ParseUser.default.logInWith('moralisErd', {
  130. authData: authData
  131. }));
  132. case 18:
  133. user = _context3.sent;
  134. if (user) {
  135. _context3.next = 21;
  136. break;
  137. }
  138. throw new Error('Could not get user');
  139. case 21:
  140. _context3.next = 23;
  141. return _regenerator.default.awrap(user.setACL(new _ParseACL.default(user)));
  142. case 23:
  143. user.addAllUnique('erdAccounts', accounts);
  144. user.set('erdAddress', erdAddress);
  145. _context3.next = 27;
  146. return _regenerator.default.awrap(user.save());
  147. case 27:
  148. return _context3.abrupt("return", user);
  149. case 28:
  150. case "end":
  151. return _context3.stop();
  152. }
  153. }
  154. }, null, null, null, Promise);
  155. }
  156. }, {
  157. key: "link",
  158. value: function (account, options) {
  159. var message, user, erdAddress, ErdAddress, query, erdAddressRecord, data, signature, authData;
  160. return _regenerator.default.async(function (_context4) {
  161. while (1) {
  162. switch (_context4.prev = _context4.next) {
  163. case 0:
  164. message = (options == null ? void 0 : options.signingMessage) || MoralisErd.getSigningData();
  165. _context4.next = 3;
  166. return _regenerator.default.awrap(_ParseUser.default.current());
  167. case 3:
  168. user = _context4.sent;
  169. erdAddress = account.toLowerCase();
  170. ErdAddress = _ParseObject.default.extend('_ErdAddress');
  171. query = new _ParseQuery.default(ErdAddress);
  172. _context4.next = 9;
  173. return _regenerator.default.awrap(query.get(erdAddress).catch(function () {
  174. return null;
  175. }));
  176. case 9:
  177. erdAddressRecord = _context4.sent;
  178. if (erdAddressRecord) {
  179. _context4.next = 20;
  180. break;
  181. }
  182. _context4.next = 13;
  183. return _regenerator.default.awrap((0, _createSigningData.default)(message));
  184. case 13:
  185. data = _context4.sent;
  186. _context4.next = 16;
  187. return _regenerator.default.awrap(MoralisErd.sign(data));
  188. case 16:
  189. signature = _context4.sent;
  190. authData = {
  191. id: erdAddress,
  192. signature: signature,
  193. data: data
  194. };
  195. _context4.next = 20;
  196. return _regenerator.default.awrap(user.linkWith('moralisErd', {
  197. authData: authData
  198. }));
  199. case 20:
  200. user.addAllUnique('erdAccounts', [erdAddress]);
  201. user.set('erdAddress', erdAddress);
  202. _context4.next = 24;
  203. return _regenerator.default.awrap(user.save());
  204. case 24:
  205. return _context4.abrupt("return", user);
  206. case 25:
  207. case "end":
  208. return _context4.stop();
  209. }
  210. }
  211. }, null, null, null, Promise);
  212. }
  213. }, {
  214. key: "unlink",
  215. value: function (account) {
  216. var _user$get;
  217. var accountsLower, ErdAddress, query, erdAddressRecord, user, accounts, nextAccounts;
  218. return _regenerator.default.async(function (_context5) {
  219. while (1) {
  220. switch (_context5.prev = _context5.next) {
  221. case 0:
  222. accountsLower = account.toLowerCase();
  223. ErdAddress = _ParseObject.default.extend('_ErdAddress');
  224. query = new _ParseQuery.default(ErdAddress);
  225. _context5.next = 5;
  226. return _regenerator.default.awrap(query.get(accountsLower));
  227. case 5:
  228. erdAddressRecord = _context5.sent;
  229. _context5.next = 8;
  230. return _regenerator.default.awrap(erdAddressRecord.destroy());
  231. case 8:
  232. _context5.next = 10;
  233. return _regenerator.default.awrap(_ParseUser.default.current());
  234. case 10:
  235. user = _context5.sent;
  236. accounts = (_user$get = user.get('erdAccounts')) != null ? _user$get : [];
  237. nextAccounts = accounts.filter(function (v) {
  238. return v !== accountsLower;
  239. });
  240. user.set('erdAccounts', nextAccounts);
  241. user.set('erdAddress', nextAccounts[0]);
  242. _context5.next = 17;
  243. return _regenerator.default.awrap(user._unlinkFrom('moralisErd'));
  244. case 17:
  245. _context5.next = 19;
  246. return _regenerator.default.awrap(user.save());
  247. case 19:
  248. return _context5.abrupt("return", user);
  249. case 20:
  250. case "end":
  251. return _context5.stop();
  252. }
  253. }
  254. }, null, null, null, Promise);
  255. }
  256. }, {
  257. key: "sign",
  258. value: function (data) {
  259. return _regenerator.default.async(function (_context6) {
  260. while (1) {
  261. switch (_context6.prev = _context6.next) {
  262. case 0:
  263. return _context6.abrupt("return", data);
  264. case 1:
  265. case "end":
  266. return _context6.stop();
  267. }
  268. }
  269. }, null, null, null, Promise);
  270. }
  271. }, {
  272. key: "getSigningData",
  273. value: function () {
  274. return 'Moralis Authentication';
  275. }
  276. }]);
  277. return MoralisErd;
  278. }();
  279. var _default = MoralisErd;
  280. exports.default = _default;