MoralisDot.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  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 _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
  9. var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
  10. var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
  11. var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
  12. var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
  13. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
  14. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
  15. var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
  16. var _ParseUser = _interopRequireDefault(require("./ParseUser"));
  17. var _ParseQuery = _interopRequireDefault(require("./ParseQuery"));
  18. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  19. var _ParseACL = _interopRequireDefault(require("./ParseACL"));
  20. var _createSigningData = _interopRequireDefault(require("./createSigningData"));
  21. /* global window */
  22. var web3EnablePromise = null;
  23. var MoralisDot = /*#__PURE__*/function () {
  24. function MoralisDot() {
  25. (0, _classCallCheck2.default)(this, MoralisDot);
  26. }
  27. (0, _createClass2.default)(MoralisDot, null, [{
  28. key: "web3IsInjected",
  29. value: function () {
  30. return (0, _keys.default)(window.injectedWeb3).length !== 0;
  31. }
  32. }, {
  33. key: "enable",
  34. value: function () {
  35. var _enable = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(opts) {
  36. var _window$injectedWeb, _window$injectedWeb$t;
  37. var type,
  38. _args = arguments;
  39. return _regenerator.default.wrap(function (_context) {
  40. while (1) {
  41. switch (_context.prev = _context.next) {
  42. case 0:
  43. type = _args.length > 1 && _args[1] !== undefined ? _args[1] : 'polkadot-js';
  44. if (!web3EnablePromise) {
  45. _context.next = 3;
  46. break;
  47. }
  48. return _context.abrupt("return", web3EnablePromise);
  49. case 3:
  50. 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);
  51. return _context.abrupt("return", web3EnablePromise);
  52. case 5:
  53. case "end":
  54. return _context.stop();
  55. }
  56. }
  57. }, _callee);
  58. }));
  59. return function () {
  60. return _enable.apply(this, arguments);
  61. };
  62. }()
  63. }, {
  64. key: "authenticate",
  65. value: function () {
  66. var _authenticate = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(opts) {
  67. var _opts$name;
  68. var allAccounts, account, address, dotAddress, accounts, message, data, signature, authData, user;
  69. return _regenerator.default.wrap(function (_context2) {
  70. while (1) {
  71. switch (_context2.prev = _context2.next) {
  72. case 0:
  73. _context2.next = 2;
  74. return MoralisDot.enable((_opts$name = opts === null || opts === void 0 ? void 0 : opts.name) !== null && _opts$name !== void 0 ? _opts$name : 'Moralis');
  75. case 2:
  76. MoralisDot.web3 = _context2.sent;
  77. _context2.next = 5;
  78. return MoralisDot.web3.accounts.get();
  79. case 5:
  80. allAccounts = _context2.sent;
  81. account = allAccounts[0];
  82. address = account === null || account === void 0 ? void 0 : account.address;
  83. if (address) {
  84. _context2.next = 10;
  85. break;
  86. }
  87. throw new Error('Address not found');
  88. case 10:
  89. dotAddress = address;
  90. accounts = [dotAddress];
  91. message = MoralisDot.getSigningData();
  92. _context2.next = 15;
  93. return (0, _createSigningData.default)(message);
  94. case 15:
  95. data = _context2.sent;
  96. _context2.next = 18;
  97. return MoralisDot.sign(address, data);
  98. case 18:
  99. signature = _context2.sent;
  100. authData = {
  101. id: dotAddress,
  102. signature: signature,
  103. data: data
  104. };
  105. _context2.next = 22;
  106. return _ParseUser.default.logInWith('moralisDot', {
  107. authData: authData
  108. });
  109. case 22:
  110. user = _context2.sent;
  111. if (user) {
  112. _context2.next = 25;
  113. break;
  114. }
  115. throw new Error('Could not get user');
  116. case 25:
  117. _context2.next = 27;
  118. return user.setACL(new _ParseACL.default(user));
  119. case 27:
  120. user.addAllUnique('dotAccounts', accounts);
  121. user.set('dotAddress', dotAddress);
  122. _context2.next = 31;
  123. return user.save();
  124. case 31:
  125. return _context2.abrupt("return", user);
  126. case 32:
  127. case "end":
  128. return _context2.stop();
  129. }
  130. }
  131. }, _callee2);
  132. }));
  133. return function () {
  134. return _authenticate.apply(this, arguments);
  135. };
  136. }()
  137. }, {
  138. key: "link",
  139. value: function () {
  140. var _link = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(account, options) {
  141. var message, user, dotAddress, DotAddress, query, dotAddressRecord, data, signature, authData;
  142. return _regenerator.default.wrap(function (_context3) {
  143. while (1) {
  144. switch (_context3.prev = _context3.next) {
  145. case 0:
  146. message = (options === null || options === void 0 ? void 0 : options.signingMessage) || MoralisDot.getSigningData();
  147. _context3.next = 3;
  148. return _ParseUser.default.current();
  149. case 3:
  150. user = _context3.sent;
  151. dotAddress = account;
  152. DotAddress = _ParseObject.default.extend('_DotAddress');
  153. query = new _ParseQuery.default(DotAddress);
  154. _context3.next = 9;
  155. return query.get(dotAddress).catch(function () {
  156. return null;
  157. });
  158. case 9:
  159. dotAddressRecord = _context3.sent;
  160. if (dotAddressRecord) {
  161. _context3.next = 20;
  162. break;
  163. }
  164. _context3.next = 13;
  165. return (0, _createSigningData.default)(message);
  166. case 13:
  167. data = _context3.sent;
  168. _context3.next = 16;
  169. return MoralisDot.sign(dotAddress, data);
  170. case 16:
  171. signature = _context3.sent;
  172. authData = {
  173. id: dotAddress,
  174. signature: signature,
  175. data: data
  176. };
  177. _context3.next = 20;
  178. return user.linkWith('moralisDot', {
  179. authData: authData
  180. });
  181. case 20:
  182. user.addAllUnique('dotAccounts', [dotAddress]);
  183. user.set('dotAddress', dotAddress);
  184. _context3.next = 24;
  185. return user.save();
  186. case 24:
  187. return _context3.abrupt("return", user);
  188. case 25:
  189. case "end":
  190. return _context3.stop();
  191. }
  192. }
  193. }, _callee3);
  194. }));
  195. return function () {
  196. return _link.apply(this, arguments);
  197. };
  198. }()
  199. }, {
  200. key: "unlink",
  201. value: function () {
  202. var _unlink = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(account) {
  203. var _user$get;
  204. var accountsLower, DotAddress, query, dotAddressRecord, user, accounts, nextAccounts;
  205. return _regenerator.default.wrap(function (_context4) {
  206. while (1) {
  207. switch (_context4.prev = _context4.next) {
  208. case 0:
  209. accountsLower = account;
  210. DotAddress = _ParseObject.default.extend('_DotAddress');
  211. query = new _ParseQuery.default(DotAddress);
  212. _context4.next = 5;
  213. return query.get(accountsLower);
  214. case 5:
  215. dotAddressRecord = _context4.sent;
  216. _context4.next = 8;
  217. return dotAddressRecord.destroy();
  218. case 8:
  219. _context4.next = 10;
  220. return _ParseUser.default.current();
  221. case 10:
  222. user = _context4.sent;
  223. accounts = (_user$get = user.get('dotAccounts')) !== null && _user$get !== void 0 ? _user$get : [];
  224. nextAccounts = (0, _filter.default)(accounts).call(accounts, function (v) {
  225. return v !== accountsLower;
  226. });
  227. user.set('dotAccounts', nextAccounts);
  228. user.set('dotAddress', nextAccounts[0]);
  229. _context4.next = 17;
  230. return user._unlinkFrom('moralisDot');
  231. case 17:
  232. _context4.next = 19;
  233. return user.save();
  234. case 19:
  235. return _context4.abrupt("return", user);
  236. case 20:
  237. case "end":
  238. return _context4.stop();
  239. }
  240. }
  241. }, _callee4);
  242. }));
  243. return function () {
  244. return _unlink.apply(this, arguments);
  245. };
  246. }()
  247. }, {
  248. key: "sign",
  249. value: function () {
  250. var _sign = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(address, data) {
  251. var web3, _yield$web3$signer$si, signature;
  252. return _regenerator.default.wrap(function (_context5) {
  253. while (1) {
  254. switch (_context5.prev = _context5.next) {
  255. case 0:
  256. if (web3EnablePromise) {
  257. _context5.next = 2;
  258. break;
  259. }
  260. throw new Error('Must enable MoralisDot');
  261. case 2:
  262. _context5.next = 4;
  263. return web3EnablePromise;
  264. case 4:
  265. web3 = _context5.sent;
  266. if (web3.signer) {
  267. _context5.next = 7;
  268. break;
  269. }
  270. throw new Error('No signer found');
  271. case 7:
  272. _context5.next = 9;
  273. return web3.signer.signRaw({
  274. address: address,
  275. data: stringToHex(data),
  276. type: 'bytes'
  277. });
  278. case 9:
  279. _yield$web3$signer$si = _context5.sent;
  280. signature = _yield$web3$signer$si.signature;
  281. return _context5.abrupt("return", signature);
  282. case 12:
  283. case "end":
  284. return _context5.stop();
  285. }
  286. }
  287. }, _callee5);
  288. }));
  289. return function () {
  290. return _sign.apply(this, arguments);
  291. };
  292. }()
  293. }, {
  294. key: "getSigningData",
  295. value: function () {
  296. return 'Moralis Authentication';
  297. }
  298. }]);
  299. return MoralisDot;
  300. }();
  301. var _default = MoralisDot;
  302. exports.default = _default;
  303. function stringToHex(value) {
  304. return toHexString(stringToU8a(value));
  305. }
  306. function stringToU8a(value) {
  307. var u8a = new Uint8Array(value.length);
  308. for (var i = 0; i < value.length; i++) {
  309. u8a[i] = value.charCodeAt(i);
  310. }
  311. return u8a;
  312. }
  313. function toHexString(byteArray) {
  314. return "0x".concat((0, _from.default)(byteArray, function (byte) {
  315. var _context6; // eslint-disable-next-line no-bitwise
  316. return (0, _slice.default)(_context6 = "0".concat((byte & 0xff).toString(16))).call(_context6, -2);
  317. }).join(''));
  318. }