MoralisErd.js 12 KB

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