MoralisWeb3.js 63 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814
  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 _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  8. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
  9. var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
  10. var _ethers = require("ethers");
  11. var _events = _interopRequireDefault(require("events"));
  12. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  13. var _ParseQuery = _interopRequireDefault(require("./ParseQuery"));
  14. var _ParseUser = _interopRequireDefault(require("./ParseUser"));
  15. var _ParseACL = _interopRequireDefault(require("./ParseACL"));
  16. var _MoralisErd = _interopRequireDefault(require("./MoralisErd"));
  17. var _MoralisDot = _interopRequireDefault(require("./MoralisDot"));
  18. var _MoralisSol = _interopRequireDefault(require("./MoralisSol"));
  19. var _TransferUtils = _interopRequireDefault(require("./TransferUtils"));
  20. var _Cloud = require("./Cloud");
  21. var _createSigningData = _interopRequireDefault(require("./createSigningData"));
  22. var _WalletConnectWeb3Connector = _interopRequireDefault(require("./Web3Connector/WalletConnectWeb3Connector"));
  23. var _InjectedWeb3Connector = _interopRequireDefault(require("./Web3Connector/InjectedWeb3Connector"));
  24. var _NetworkWeb3Connector = _interopRequireDefault(require("./Web3Connector/NetworkWeb3Connector"));
  25. var _ParseError = _interopRequireDefault(require("./ParseError"));
  26. var _InternalWeb3Provider = _interopRequireWildcard(require("./InternalWeb3Provider"));
  27. var _detectProvider = _interopRequireDefault(require("@metamask/detect-provider"));
  28. var _MagicWeb3Connector = _interopRequireDefault(require("./Web3Connector/MagicWeb3Connector"));
  29. var _Web3AuthConnector = require("./Web3Connector/Web3AuthConnector");
  30. function _getRequireWildcardCache(nodeInterop) {
  31. if (typeof WeakMap !== "function") return null;
  32. var cacheBabelInterop = new WeakMap();
  33. var cacheNodeInterop = new WeakMap();
  34. return (_getRequireWildcardCache = function (nodeInterop) {
  35. return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
  36. })(nodeInterop);
  37. }
  38. function _interopRequireWildcard(obj, nodeInterop) {
  39. if (!nodeInterop && obj && obj.__esModule) {
  40. return obj;
  41. }
  42. if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
  43. return {
  44. default: obj
  45. };
  46. }
  47. var cache = _getRequireWildcardCache(nodeInterop);
  48. if (cache && cache.has(obj)) {
  49. return cache.get(obj);
  50. }
  51. var newObj = {};
  52. var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
  53. for (var key in obj) {
  54. if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
  55. var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
  56. if (desc && (desc.get || desc.set)) {
  57. Object.defineProperty(newObj, key, desc);
  58. } else {
  59. newObj[key] = obj[key];
  60. }
  61. }
  62. }
  63. newObj.default = obj;
  64. if (cache) {
  65. cache.set(obj, newObj);
  66. }
  67. return newObj;
  68. }
  69. function _createForOfIteratorHelperLoose(o, allowArrayLike) {
  70. var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
  71. if (it) return (it = it.call(o)).next.bind(it);
  72. if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
  73. if (it) o = it;
  74. var i = 0;
  75. return function () {
  76. if (i >= o.length) return {
  77. done: true
  78. };
  79. return {
  80. done: false,
  81. value: o[i++]
  82. };
  83. };
  84. }
  85. throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  86. }
  87. function _unsupportedIterableToArray(o, minLen) {
  88. if (!o) return;
  89. if (typeof o === "string") return _arrayLikeToArray(o, minLen);
  90. var n = Object.prototype.toString.call(o).slice(8, -1);
  91. if (n === "Object" && o.constructor) n = o.constructor.name;
  92. if (n === "Map" || n === "Set") return Array.from(o);
  93. if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
  94. }
  95. function _arrayLikeToArray(arr, len) {
  96. if (len == null || len > arr.length) len = arr.length;
  97. for (var i = 0, arr2 = new Array(len); i < len; i++) {
  98. arr2[i] = arr[i];
  99. }
  100. return arr2;
  101. }
  102. var MoralisEmitter = new _events.default();
  103. var WARNING = 'Non ethereum enabled browser';
  104. var ERROR_WEB3_MISSING = 'Missing web3 instance, make sure to call Moralis.enableWeb3() or Moralis.authenticate()';
  105. var MoralisWeb3 = function () {
  106. function MoralisWeb3() {
  107. (0, _classCallCheck2.default)(this, MoralisWeb3);
  108. }
  109. (0, _createClass2.default)(MoralisWeb3, null, [{
  110. key: "addListener",
  111. value: function (eventName, listener) {
  112. MoralisEmitter.on(eventName, listener);
  113. return function () {
  114. return MoralisEmitter.removeListener(eventName, listener);
  115. };
  116. }
  117. }, {
  118. key: "on",
  119. value: function (eventName, listener) {
  120. MoralisEmitter.on(eventName, listener);
  121. return function () {
  122. return MoralisEmitter.removeListener(eventName, listener);
  123. };
  124. }
  125. }, {
  126. key: "once",
  127. value: function (eventName, listener) {
  128. MoralisEmitter.once(eventName, listener);
  129. return function () {
  130. return MoralisEmitter.removeListener(eventName, listener);
  131. };
  132. }
  133. }, {
  134. key: "removeListener",
  135. value: function (eventName, listener) {
  136. return MoralisEmitter.removeListener(eventName, listener);
  137. }
  138. }, {
  139. key: "off",
  140. value: function (eventName, listener) {
  141. return MoralisEmitter.off(eventName, listener);
  142. }
  143. }, {
  144. key: "removeAllListeners",
  145. value: function (eventName, listener) {
  146. return MoralisEmitter.removeAllListeners(eventName, listener);
  147. }
  148. }, {
  149. key: "isWeb3Enabled",
  150. value: function () {
  151. return this.ensureWeb3IsInstalled();
  152. }
  153. }, {
  154. key: "handleWeb3AccountChanged",
  155. value: function (account) {
  156. MoralisEmitter.emit(_InternalWeb3Provider.InternalWeb3Events.ACCOUNT_CHANGED, account);
  157. }
  158. }, {
  159. key: "handleWeb3ChainChanged",
  160. value: function (chainId) {
  161. var _this$internalWeb3Pro;
  162. this.web3 = (_this$internalWeb3Pro = this.internalWeb3Provider) == null ? void 0 : _this$internalWeb3Pro.web3;
  163. MoralisEmitter.emit(_InternalWeb3Provider.InternalWeb3Events.CHAIN_CHANGED, chainId);
  164. }
  165. }, {
  166. key: "handleWeb3Connect",
  167. value: function (connectInfo) {
  168. MoralisEmitter.emit(_InternalWeb3Provider.InternalWeb3Events.PROVIDER_CONNECT, connectInfo);
  169. }
  170. }, {
  171. key: "handleWeb3Disconnect",
  172. value: function (error) {
  173. if ((error == null ? void 0 : error.message) === 'MetaMask: Disconnected from chain. Attempting to connect.') {
  174. return;
  175. }
  176. this.cleanup();
  177. MoralisEmitter.emit(_InternalWeb3Provider.InternalWeb3Events.PROVIDER_DISCONNECT, error);
  178. }
  179. }, {
  180. key: "enableWeb3",
  181. value: function () {
  182. var _this = this;
  183. var options,
  184. _options$connector,
  185. Connector,
  186. connector,
  187. anyNetwork,
  188. provider,
  189. chainId,
  190. account,
  191. internalWeb3,
  192. _await$this$internalW,
  193. web3,
  194. _args = arguments;
  195. return _regenerator.default.async(function (_context) {
  196. while (1) {
  197. switch (_context.prev = _context.next) {
  198. case 0:
  199. options = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};
  200. if (!this.isEnablingWeb3) {
  201. _context.next = 3;
  202. break;
  203. }
  204. throw new Error('Cannot execute Moralis.enableWeb3(), as Moralis Moralis.enableWeb3() already has been called, but is not finished yet ');
  205. case 3:
  206. _context.prev = 3;
  207. this.isEnablingWeb3 = true;
  208. if (this.speedyNodeApiKey) {
  209. options.speedyNodeApiKey = this.speedyNodeApiKey;
  210. options.provider = 'network';
  211. }
  212. Connector = (_options$connector = options == null ? void 0 : options.connector) != null ? _options$connector : MoralisWeb3.getWeb3Connector(options == null ? void 0 : options.provider);
  213. connector = new Connector(options);
  214. anyNetwork = (options == null ? void 0 : options.anyNetwork) === true ? true : false;
  215. this.internalWeb3Provider = new _InternalWeb3Provider.default(connector, anyNetwork, options.privateKey);
  216. this.internalWeb3Provider.on(_InternalWeb3Provider.InternalWeb3Events.ACCOUNT_CHANGED, function (args) {
  217. return _this.handleWeb3AccountChanged(args);
  218. });
  219. this.internalWeb3Provider.on(_InternalWeb3Provider.InternalWeb3Events.CHAIN_CHANGED, function (args) {
  220. return _this.handleWeb3ChainChanged(args);
  221. });
  222. this.internalWeb3Provider.on(_InternalWeb3Provider.InternalWeb3Events.PROVIDER_CONNECT, function (args) {
  223. return _this.handleWeb3Connect(args);
  224. });
  225. this.internalWeb3Provider.on(_InternalWeb3Provider.InternalWeb3Events.PROVIDER_DISCONNECT, function (args) {
  226. return _this.handleWeb3Disconnect(args);
  227. });
  228. _context.prev = 14;
  229. _context.next = 17;
  230. return _regenerator.default.awrap(this.internalWeb3Provider.activate(options));
  231. case 17:
  232. _await$this$internalW = _context.sent;
  233. provider = _await$this$internalW.provider;
  234. chainId = _await$this$internalW.chainId;
  235. account = _await$this$internalW.account;
  236. internalWeb3 = _await$this$internalW.web3;
  237. if (provider) {
  238. _context.next = 24;
  239. break;
  240. }
  241. throw new Error('Failed to activate, no provider returned');
  242. case 24:
  243. _context.next = 31;
  244. break;
  245. case 26:
  246. _context.prev = 26;
  247. _context.t0 = _context["catch"](14);
  248. _context.next = 30;
  249. return _regenerator.default.awrap(this.cleanup());
  250. case 30:
  251. throw _context.t0;
  252. case 31:
  253. web3 = internalWeb3;
  254. this.web3 = internalWeb3;
  255. MoralisEmitter.emit(_InternalWeb3Provider.InternalWeb3Events.WEB3_ENABLED, {
  256. chainId: chainId,
  257. account: account,
  258. connector: connector,
  259. provider: provider,
  260. web3: web3
  261. });
  262. return _context.abrupt("return", web3);
  263. case 37:
  264. _context.prev = 37;
  265. _context.t1 = _context["catch"](3);
  266. throw _context.t1;
  267. case 40:
  268. _context.prev = 40;
  269. this.isEnablingWeb3 = false;
  270. return _context.finish(40);
  271. case 43:
  272. case "end":
  273. return _context.stop();
  274. }
  275. }
  276. }, null, this, [[3, 37, 40, 43], [14, 26]], Promise);
  277. }
  278. }, {
  279. key: "isDotAuth",
  280. value: function (options) {
  281. switch (options == null ? void 0 : options.type) {
  282. case 'dot':
  283. case 'polkadot':
  284. case 'kusama':
  285. return true;
  286. default:
  287. return false;
  288. }
  289. }
  290. }, {
  291. key: "isElrondAuth",
  292. value: function (options) {
  293. switch (options == null ? void 0 : options.type) {
  294. case 'erd':
  295. case 'elrond':
  296. return true;
  297. default:
  298. return false;
  299. }
  300. }
  301. }, {
  302. key: "isSolAuth",
  303. value: function (options) {
  304. switch (options == null ? void 0 : options.type) {
  305. case 'sol':
  306. return true;
  307. default:
  308. return false;
  309. }
  310. }
  311. }, {
  312. key: "getWeb3Connector",
  313. value: function (provider) {
  314. switch (provider) {
  315. case 'walletconnect':
  316. case 'walletConnect':
  317. case 'wc':
  318. return _WalletConnectWeb3Connector.default;
  319. case 'network':
  320. return _NetworkWeb3Connector.default;
  321. case 'magicLink':
  322. return _MagicWeb3Connector.default;
  323. case 'web3Auth':
  324. return _Web3AuthConnector.Web3Auth;
  325. default:
  326. return _InjectedWeb3Connector.default;
  327. }
  328. }
  329. }, {
  330. key: "deactivateWeb3",
  331. value: function () {
  332. return _regenerator.default.async(function (_context2) {
  333. while (1) {
  334. switch (_context2.prev = _context2.next) {
  335. case 0:
  336. return _context2.abrupt("return", this.cleanup());
  337. case 1:
  338. case "end":
  339. return _context2.stop();
  340. }
  341. }
  342. }, null, this, null, Promise);
  343. }
  344. }, {
  345. key: "cleanup",
  346. value: function () {
  347. return _regenerator.default.async(function (_context3) {
  348. while (1) {
  349. switch (_context3.prev = _context3.next) {
  350. case 0:
  351. if (!this.isEnablingWeb3) {
  352. _context3.next = 2;
  353. break;
  354. }
  355. return _context3.abrupt("return");
  356. case 2:
  357. if (this.web3 && this.internalWeb3Provider) {
  358. MoralisEmitter.emit(_InternalWeb3Provider.InternalWeb3Events.WEB3_DEACTIVATED, {
  359. connector: this.internalWeb3Provider.connector,
  360. provider: this.internalWeb3Provider.provider
  361. });
  362. }
  363. if (!this.internalWeb3Provider) {
  364. _context3.next = 15;
  365. break;
  366. }
  367. this.internalWeb3Provider.removeListener(_InternalWeb3Provider.InternalWeb3Events.ACCOUNT_CHANGED, this.handleWeb3AccountChanged);
  368. this.internalWeb3Provider.removeListener(_InternalWeb3Provider.InternalWeb3Events.CHAIN_CHANGED, this.handleWeb3ChainChanged);
  369. this.internalWeb3Provider.removeListener(_InternalWeb3Provider.InternalWeb3Events.PROVIDER_CONNECT, this.handleWeb3Connect);
  370. this.internalWeb3Provider.removeListener(_InternalWeb3Provider.InternalWeb3Events.PROVIDER_DISCONNECT, this.handleWeb3Disconnect);
  371. _context3.prev = 8;
  372. _context3.next = 11;
  373. return _regenerator.default.awrap(this.internalWeb3Provider.deactivate());
  374. case 11:
  375. _context3.next = 15;
  376. break;
  377. case 13:
  378. _context3.prev = 13;
  379. _context3.t0 = _context3["catch"](8);
  380. case 15:
  381. this.internalWeb3Provider = null;
  382. this.web3 = null;
  383. case 17:
  384. case "end":
  385. return _context3.stop();
  386. }
  387. }
  388. }, null, this, [[8, 13]], Promise);
  389. }
  390. }, {
  391. key: "authenticate",
  392. value: function (options) {
  393. var isLoggedIn, _this$getInternalWeb, account, internalWeb3, signer, message, data, ethAddress, signature, authData, user;
  394. return _regenerator.default.async(function (_context4) {
  395. while (1) {
  396. switch (_context4.prev = _context4.next) {
  397. case 0:
  398. _context4.next = 2;
  399. return _regenerator.default.awrap(_ParseUser.default.currentAsync());
  400. case 2:
  401. isLoggedIn = _context4.sent;
  402. if (!isLoggedIn) {
  403. _context4.next = 6;
  404. break;
  405. }
  406. _context4.next = 6;
  407. return _regenerator.default.awrap(_ParseUser.default.logOut());
  408. case 6:
  409. if (!MoralisWeb3.isDotAuth(options)) {
  410. _context4.next = 8;
  411. break;
  412. }
  413. return _context4.abrupt("return", _MoralisDot.default.authenticate(options));
  414. case 8:
  415. if (!MoralisWeb3.isElrondAuth(options)) {
  416. _context4.next = 10;
  417. break;
  418. }
  419. return _context4.abrupt("return", _MoralisErd.default.authenticate(options));
  420. case 10:
  421. if (!MoralisWeb3.isSolAuth(options)) {
  422. _context4.next = 12;
  423. break;
  424. }
  425. return _context4.abrupt("return", _MoralisSol.default.authenticate(options));
  426. case 12:
  427. _context4.next = 14;
  428. return _regenerator.default.awrap(this.enableWeb3(options));
  429. case 14:
  430. _this$getInternalWeb = this.getInternalWeb3Provider(), account = _this$getInternalWeb.account, internalWeb3 = _this$getInternalWeb.web3, signer = _this$getInternalWeb.signer;
  431. if (account) {
  432. _context4.next = 17;
  433. break;
  434. }
  435. throw new Error('Cannot authenticate, no account returned from provider');
  436. case 17:
  437. message = (options == null ? void 0 : options.signingMessage) || MoralisWeb3.getSigningData();
  438. _context4.next = 20;
  439. return _regenerator.default.awrap((0, _createSigningData.default)(message));
  440. case 20:
  441. data = _context4.sent;
  442. ethAddress = account.toLowerCase();
  443. if (ethAddress) {
  444. _context4.next = 24;
  445. break;
  446. }
  447. throw new Error('Address not found');
  448. case 24:
  449. _context4.next = 26;
  450. return _regenerator.default.awrap(signer.signMessage(data));
  451. case 26:
  452. signature = _context4.sent;
  453. if (signature) {
  454. _context4.next = 29;
  455. break;
  456. }
  457. throw new Error('Data not signed');
  458. case 29:
  459. authData = {
  460. id: ethAddress,
  461. signature: signature,
  462. data: data
  463. };
  464. _context4.next = 32;
  465. return _regenerator.default.awrap(_ParseUser.default.logInWith('moralisEth', {
  466. authData: authData
  467. }));
  468. case 32:
  469. user = _context4.sent;
  470. if (user) {
  471. _context4.next = 35;
  472. break;
  473. }
  474. throw new Error('Could not get user');
  475. case 35:
  476. _context4.next = 37;
  477. return _regenerator.default.awrap(user.setACL(new _ParseACL.default(user)));
  478. case 37:
  479. user.addAllUnique('accounts', [ethAddress]);
  480. user.set('ethAddress', ethAddress);
  481. _context4.next = 41;
  482. return _regenerator.default.awrap(user.save(null, options));
  483. case 41:
  484. return _context4.abrupt("return", user);
  485. case 42:
  486. case "end":
  487. return _context4.stop();
  488. }
  489. }
  490. }, null, this, null, Promise);
  491. }
  492. }, {
  493. key: "link",
  494. value: function (account, options) {
  495. var _this$getInternalWeb2, signer, message, user, ethAddress, EthAddress, query, ethAddressRecord, data, signature, authData;
  496. return _regenerator.default.async(function (_context5) {
  497. while (1) {
  498. switch (_context5.prev = _context5.next) {
  499. case 0:
  500. _this$getInternalWeb2 = this.getInternalWeb3Provider(), signer = _this$getInternalWeb2.signer;
  501. message = (options == null ? void 0 : options.signingMessage) || MoralisWeb3.getSigningData();
  502. _context5.next = 4;
  503. return _regenerator.default.awrap(_ParseUser.default.currentAsync());
  504. case 4:
  505. user = _context5.sent;
  506. ethAddress = account.toLowerCase();
  507. EthAddress = _ParseObject.default.extend('_EthAddress');
  508. query = new _ParseQuery.default(EthAddress);
  509. _context5.next = 10;
  510. return _regenerator.default.awrap(query.get(ethAddress).catch(function () {
  511. return null;
  512. }));
  513. case 10:
  514. ethAddressRecord = _context5.sent;
  515. if (ethAddressRecord) {
  516. _context5.next = 23;
  517. break;
  518. }
  519. _context5.next = 14;
  520. return _regenerator.default.awrap((0, _createSigningData.default)(message));
  521. case 14:
  522. data = _context5.sent;
  523. _context5.next = 17;
  524. return _regenerator.default.awrap(signer.signMessage(data));
  525. case 17:
  526. signature = _context5.sent;
  527. if (signature) {
  528. _context5.next = 20;
  529. break;
  530. }
  531. throw new Error('Data not signed');
  532. case 20:
  533. authData = {
  534. id: ethAddress,
  535. signature: signature,
  536. data: data
  537. };
  538. _context5.next = 23;
  539. return _regenerator.default.awrap(user.linkWith('moralisEth', {
  540. authData: authData
  541. }));
  542. case 23:
  543. user.addAllUnique('accounts', [ethAddress]);
  544. user.set('ethAddress', ethAddress);
  545. _context5.next = 27;
  546. return _regenerator.default.awrap(user.save(null, options));
  547. case 27:
  548. return _context5.abrupt("return", user);
  549. case 28:
  550. case "end":
  551. return _context5.stop();
  552. }
  553. }
  554. }, null, this, null, Promise);
  555. }
  556. }, {
  557. key: "unlink",
  558. value: function (account) {
  559. var _user$get;
  560. var accountsLower, EthAddress, query, ethAddressRecord, user, accounts, nextAccounts;
  561. return _regenerator.default.async(function (_context6) {
  562. while (1) {
  563. switch (_context6.prev = _context6.next) {
  564. case 0:
  565. accountsLower = account.toLowerCase();
  566. EthAddress = _ParseObject.default.extend('_EthAddress');
  567. query = new _ParseQuery.default(EthAddress);
  568. _context6.next = 5;
  569. return _regenerator.default.awrap(query.get(accountsLower));
  570. case 5:
  571. ethAddressRecord = _context6.sent;
  572. _context6.next = 8;
  573. return _regenerator.default.awrap(ethAddressRecord.destroy());
  574. case 8:
  575. _context6.next = 10;
  576. return _regenerator.default.awrap(_ParseUser.default.currentAsync());
  577. case 10:
  578. user = _context6.sent;
  579. accounts = (_user$get = user.get('accounts')) != null ? _user$get : [];
  580. nextAccounts = accounts.filter(function (v) {
  581. return v !== accountsLower;
  582. });
  583. user.set('accounts', nextAccounts);
  584. user.set('ethAddress', nextAccounts[0]);
  585. _context6.next = 17;
  586. return _regenerator.default.awrap(user._unlinkFrom('moralisEth'));
  587. case 17:
  588. _context6.next = 19;
  589. return _regenerator.default.awrap(user.save());
  590. case 19:
  591. return _context6.abrupt("return", user);
  592. case 20:
  593. case "end":
  594. return _context6.stop();
  595. }
  596. }
  597. }, null, null, null, Promise);
  598. }
  599. }, {
  600. key: "initPlugins",
  601. value: function (installedPlugins) {
  602. var _this2 = this;
  603. var specs, allPlugins;
  604. return _regenerator.default.async(function (_context8) {
  605. while (1) {
  606. switch (_context8.prev = _context8.next) {
  607. case 0:
  608. _context8.t0 = installedPlugins;
  609. if (_context8.t0) {
  610. _context8.next = 5;
  611. break;
  612. }
  613. _context8.next = 4;
  614. return _regenerator.default.awrap((0, _Cloud.run)('getPluginSpecs'));
  615. case 4:
  616. _context8.t0 = _context8.sent;
  617. case 5:
  618. specs = _context8.t0;
  619. if (!this.Plugins) this.Plugins = {};
  620. if (specs) {
  621. _context8.next = 9;
  622. break;
  623. }
  624. return _context8.abrupt("return");
  625. case 9:
  626. allPlugins = this.Plugins;
  627. specs.forEach(function (plugin) {
  628. allPlugins[plugin.name] = {};
  629. plugin.functions.forEach(function (f) {
  630. allPlugins[plugin.name][f] = function (params, options) {
  631. var response, error, triggerReturn;
  632. return _regenerator.default.async(function (_context7) {
  633. while (1) {
  634. switch (_context7.prev = _context7.next) {
  635. case 0:
  636. if (!options) options = {};
  637. _context7.next = 3;
  638. return _regenerator.default.awrap((0, _Cloud.run)(plugin.name + "_" + f, params));
  639. case 3:
  640. response = _context7.sent;
  641. if (response.data.success) {
  642. _context7.next = 7;
  643. break;
  644. }
  645. error = JSON.stringify(response.data.data, null, 2);
  646. throw new Error("Something went wrong\n" + error);
  647. case 7:
  648. if (!(options.disableTriggers !== true)) {
  649. _context7.next = 13;
  650. break;
  651. }
  652. _context7.next = 10;
  653. return _regenerator.default.awrap(_this2.handleTriggers(response.data.result.triggers, response.data.result.data));
  654. case 10:
  655. triggerReturn = _context7.sent;
  656. if (!triggerReturn) {
  657. _context7.next = 13;
  658. break;
  659. }
  660. return _context7.abrupt("return", triggerReturn);
  661. case 13:
  662. return _context7.abrupt("return", response.data.result);
  663. case 14:
  664. case "end":
  665. return _context7.stop();
  666. }
  667. }
  668. }, null, null, null, Promise);
  669. };
  670. });
  671. });
  672. this.Plugins = allPlugins;
  673. case 12:
  674. case "end":
  675. return _context8.stop();
  676. }
  677. }
  678. }, null, this, null, Promise);
  679. }
  680. }, {
  681. key: "handleTriggers",
  682. value: function (triggersArray, payload) {
  683. var _this3 = this;
  684. var _loop, i, _ret;
  685. return _regenerator.default.async(function (_context10) {
  686. while (1) {
  687. switch (_context10.prev = _context10.next) {
  688. case 0:
  689. if (triggersArray) {
  690. _context10.next = 2;
  691. break;
  692. }
  693. return _context10.abrupt("return");
  694. case 2:
  695. _loop = function (i) {
  696. var _triggersArray$i, _triggersArray$i$data, _triggersArray$i2, _triggersArray$i2$dat, _triggersArray$i$data2, _triggersArray$i3, _triggersArray$i3$dat, _triggersArray$i4, _triggersArray$i4$dat, _triggersArray$i5, _triggersArray$i6, _triggersArray$i7, _triggersArray$i8, _triggersArray$i9, _triggersArray$i10, _triggersArray$i11, _triggersArray$i12, _triggersArray$i13, _triggersArray$i14, _triggersArray$i15, _triggersArray$i16, _triggersArray$i17, _triggersArray$i18, _triggersArray$i20, _triggersArray$i22, _triggersArray$i23, _triggersArray$i24;
  697. var message, _response, _triggersArray$i19, _JSON$parse, domain, types, _message, signature, result, _JSON$parse2, _domain, _types, _message2;
  698. return _regenerator.default.async(function (_context9) {
  699. while (1) {
  700. switch (_context9.prev = _context9.next) {
  701. case 0:
  702. _context9.t0 = triggersArray[i].name;
  703. _context9.next = _context9.t0 === 'openUrl' ? 3 : _context9.t0 === 'web3Transaction' ? 5 : _context9.t0 === 'web3Sign' ? 18 : _context9.t0 === 'callPluginEndpoint' ? 33 : _context9.t0 === 'web3SignV4' ? 55 : 80;
  704. break;
  705. case 3:
  706. if (triggersArray[i].newTab) window.open(triggersArray[i].url);else window.open(triggersArray[i].url, '_self');
  707. return _context9.abrupt("break", 81);
  708. case 5:
  709. _context9.next = 7;
  710. return _regenerator.default.awrap(_this3.getInternalWeb3Provider().signer.sendTransaction({
  711. from: (_triggersArray$i = triggersArray[i]) == null ? void 0 : (_triggersArray$i$data = _triggersArray$i.data) == null ? void 0 : _triggersArray$i$data.from,
  712. to: (_triggersArray$i2 = triggersArray[i]) == null ? void 0 : (_triggersArray$i2$dat = _triggersArray$i2.data) == null ? void 0 : _triggersArray$i2$dat.to,
  713. value: _ethers.ethers.BigNumber.from((_triggersArray$i$data2 = (_triggersArray$i3 = triggersArray[i]) == null ? void 0 : (_triggersArray$i3$dat = _triggersArray$i3.data) == null ? void 0 : _triggersArray$i3$dat.value) != null ? _triggersArray$i$data2 : 0),
  714. data: (_triggersArray$i4 = triggersArray[i]) == null ? void 0 : (_triggersArray$i4$dat = _triggersArray$i4.data) == null ? void 0 : _triggersArray$i4$dat.data
  715. }));
  716. case 7:
  717. _response = _context9.sent;
  718. if (!(((_triggersArray$i5 = triggersArray[i]) == null ? void 0 : _triggersArray$i5.shouldAwait) === true)) {
  719. _context9.next = 12;
  720. break;
  721. }
  722. _context9.next = 11;
  723. return _regenerator.default.awrap(_response.wait());
  724. case 11:
  725. _response = _context9.sent;
  726. case 12:
  727. if (((_triggersArray$i6 = triggersArray[i]) == null ? void 0 : _triggersArray$i6.saveResponse) === true) _this3.memoryCard.save(_response);
  728. if (!(((_triggersArray$i7 = triggersArray[i]) == null ? void 0 : _triggersArray$i7.shouldReturnPayload) === true)) {
  729. _context9.next = 15;
  730. break;
  731. }
  732. return _context9.abrupt("return", {
  733. v: {
  734. payload: payload,
  735. response: _response
  736. }
  737. });
  738. case 15:
  739. if (!(((_triggersArray$i8 = triggersArray[i]) == null ? void 0 : _triggersArray$i8.shouldReturnResponse) === true)) {
  740. _context9.next = 17;
  741. break;
  742. }
  743. return _context9.abrupt("return", {
  744. v: _response
  745. });
  746. case 17:
  747. return _context9.abrupt("break", 81);
  748. case 18:
  749. if (triggersArray[i].message) {
  750. _context9.next = 20;
  751. break;
  752. }
  753. throw new Error('web3Sign trigger does not have a message to sign');
  754. case 20:
  755. if (triggersArray[i].signer) {
  756. _context9.next = 22;
  757. break;
  758. }
  759. throw new Error('web3Sign trigger signer address missing or invalid');
  760. case 22:
  761. message = JSON.parse(triggersArray[i].message);
  762. delete message.types.EIP712Domain;
  763. _context9.next = 26;
  764. return _regenerator.default.awrap(_this3.getInternalWeb3Provider().signer._signTypedData(message.domain, message.types, message.message));
  765. case 26:
  766. _response = _context9.sent;
  767. if (((_triggersArray$i9 = triggersArray[i]) == null ? void 0 : _triggersArray$i9.saveResponse) === true) _this3.memoryCard.save(_response);
  768. if (!(((_triggersArray$i10 = triggersArray[i]) == null ? void 0 : _triggersArray$i10.shouldReturnPayload) === true)) {
  769. _context9.next = 30;
  770. break;
  771. }
  772. return _context9.abrupt("return", {
  773. v: {
  774. payload: payload,
  775. response: _response
  776. }
  777. });
  778. case 30:
  779. if (!(((_triggersArray$i11 = triggersArray[i]) == null ? void 0 : _triggersArray$i11.shouldReturnResponse) === true)) {
  780. _context9.next = 32;
  781. break;
  782. }
  783. return _context9.abrupt("return", {
  784. v: _response
  785. });
  786. case 32:
  787. return _context9.abrupt("break", 81);
  788. case 33:
  789. if (triggersArray[i].pluginName) {
  790. _context9.next = 35;
  791. break;
  792. }
  793. throw new Error('callPluginEndpoint trigger does not have an plugin name to call');
  794. case 35:
  795. if (triggersArray[i].endpoint) {
  796. _context9.next = 37;
  797. break;
  798. }
  799. throw new Error('callPluginEndpoint trigger does not have an endpoint to call');
  800. case 37:
  801. if (!(((_triggersArray$i12 = triggersArray[i]) == null ? void 0 : _triggersArray$i12.shouldAwait) === true)) {
  802. _context9.next = 42;
  803. break;
  804. }
  805. if (triggersArray[i].useSavedResponse === true) {
  806. triggersArray[i].params[triggersArray[i].savedResponseAs] = _this3.memoryCard.get(triggersArray[i].savedResponseAt);
  807. }
  808. _context9.next = 41;
  809. return _regenerator.default.awrap((0, _Cloud.run)(triggersArray[i].pluginName + "_" + triggersArray[i].endpoint, triggersArray[i].params));
  810. case 41:
  811. _response = _context9.sent;
  812. case 42:
  813. if (((_triggersArray$i13 = triggersArray[i]) == null ? void 0 : _triggersArray$i13.shouldAwait) === false) {
  814. if (triggersArray[i].useSavedResponse === true) {
  815. triggersArray[i].params[triggersArray[i].savedResponseAs] = _this3.memoryCard.get(triggersArray[i].savedResponseAt);
  816. }
  817. _response = (0, _Cloud.run)(triggersArray[i].pluginName + "_" + triggersArray[i].endpoint, triggersArray[i].params);
  818. }
  819. if (!(triggersArray[i].runResponseTrigger === true)) {
  820. _context9.next = 47;
  821. break;
  822. }
  823. _context9.next = 46;
  824. return _regenerator.default.awrap(_this3.handleTriggers(_response.data.result.triggers, _response.data.result.data));
  825. case 46:
  826. _response = _context9.sent;
  827. case 47:
  828. if (((_triggersArray$i14 = triggersArray[i]) == null ? void 0 : _triggersArray$i14.saveResponse) === true) _this3.memoryCard.save(_response);
  829. if (!(((_triggersArray$i15 = triggersArray[i]) == null ? void 0 : _triggersArray$i15.runResponseTrigger) === false)) {
  830. _context9.next = 50;
  831. break;
  832. }
  833. return _context9.abrupt("return", "continue");
  834. case 50:
  835. if (!(((_triggersArray$i16 = triggersArray[i]) == null ? void 0 : _triggersArray$i16.shouldReturnPayload) === true)) {
  836. _context9.next = 52;
  837. break;
  838. }
  839. return _context9.abrupt("return", {
  840. v: {
  841. payload: 'payload',
  842. response: _response
  843. }
  844. });
  845. case 52:
  846. if (!(((_triggersArray$i17 = triggersArray[i]) == null ? void 0 : _triggersArray$i17.shouldReturnResponse) === true)) {
  847. _context9.next = 54;
  848. break;
  849. }
  850. return _context9.abrupt("return", {
  851. v: _response
  852. });
  853. case 54:
  854. return _context9.abrupt("break", 81);
  855. case 55:
  856. if (triggersArray[i].parameters) {
  857. _context9.next = 57;
  858. break;
  859. }
  860. throw new Error('web3SignV4 trigger does not have `parameters` to sign');
  861. case 57:
  862. if (triggersArray[i].from) {
  863. _context9.next = 59;
  864. break;
  865. }
  866. throw new Error('web3SignV4 trigger does not have a `from` address');
  867. case 59:
  868. if (!(((_triggersArray$i18 = triggersArray[i]) == null ? void 0 : _triggersArray$i18.shouldAwait) === true)) {
  869. _context9.next = 74;
  870. break;
  871. }
  872. _context9.prev = 60;
  873. _JSON$parse = JSON.parse(triggersArray[i].parameters[1]), domain = _JSON$parse.domain, types = _JSON$parse.types, _message = _JSON$parse.message;
  874. if (types.EIP712Domain) {
  875. delete types.EIP712Domain;
  876. }
  877. _context9.next = 65;
  878. return _regenerator.default.awrap(_this3.getInternalWeb3Provider().signer._signTypedData(domain, types, _message));
  879. case 65:
  880. signature = _context9.sent;
  881. result = {
  882. result: signature
  883. };
  884. if (((_triggersArray$i19 = triggersArray[i]) == null ? void 0 : _triggersArray$i19.saveResponse) === true) _this3.memoryCard.save(result);
  885. _response = result;
  886. _context9.next = 74;
  887. break;
  888. case 71:
  889. _context9.prev = 71;
  890. _context9.t1 = _context9["catch"](60);
  891. throw new Error(_context9.t1.message || _context9.t1);
  892. case 74:
  893. if (((_triggersArray$i20 = triggersArray[i]) == null ? void 0 : _triggersArray$i20.shouldAwait) === false) {
  894. _JSON$parse2 = JSON.parse(triggersArray[i].parameters[1]), _domain = _JSON$parse2.domain, _types = _JSON$parse2.types, _message2 = _JSON$parse2.message;
  895. if (_types.EIP712Domain) {
  896. delete _types.EIP712Domain;
  897. }
  898. _this3.getInternalWeb3Provider().signer._signTypedData(_domain, _types, _message2).then(function (signature) {
  899. var _triggersArray$i21;
  900. var result = {
  901. result: signature
  902. };
  903. if (((_triggersArray$i21 = triggersArray[i]) == null ? void 0 : _triggersArray$i21.saveResponse) === true) _this3.memoryCard.save(result);
  904. _response = result;
  905. }).catch(function (error) {
  906. throw new Error(error.message || error);
  907. });
  908. }
  909. if (!(((_triggersArray$i22 = triggersArray[i]) == null ? void 0 : _triggersArray$i22.shouldReturnPayload) === true)) {
  910. _context9.next = 77;
  911. break;
  912. }
  913. return _context9.abrupt("return", {
  914. v: {
  915. payload: payload,
  916. response: _response
  917. }
  918. });
  919. case 77:
  920. if (!(((_triggersArray$i23 = triggersArray[i]) == null ? void 0 : _triggersArray$i23.shouldReturnResponse) === true)) {
  921. _context9.next = 79;
  922. break;
  923. }
  924. return _context9.abrupt("return", {
  925. v: _response
  926. });
  927. case 79:
  928. return _context9.abrupt("break", 81);
  929. case 80:
  930. throw new Error("Unknown trigger: \"" + ((_triggersArray$i24 = triggersArray[i]) == null ? void 0 : _triggersArray$i24.name) + "\"");
  931. case 81:
  932. case "end":
  933. return _context9.stop();
  934. }
  935. }
  936. }, null, null, [[60, 71]], Promise);
  937. };
  938. i = 0;
  939. case 4:
  940. if (!(i < triggersArray.length)) {
  941. _context10.next = 15;
  942. break;
  943. }
  944. _context10.next = 7;
  945. return _regenerator.default.awrap(_loop(i));
  946. case 7:
  947. _ret = _context10.sent;
  948. if (!(_ret === "continue")) {
  949. _context10.next = 10;
  950. break;
  951. }
  952. return _context10.abrupt("continue", 12);
  953. case 10:
  954. if (!(typeof _ret === "object")) {
  955. _context10.next = 12;
  956. break;
  957. }
  958. return _context10.abrupt("return", _ret.v);
  959. case 12:
  960. i++;
  961. _context10.next = 4;
  962. break;
  963. case 15:
  964. this.memoryCard.deleteSaved();
  965. case 16:
  966. case "end":
  967. return _context10.stop();
  968. }
  969. }
  970. }, null, this, null, Promise);
  971. }
  972. }, {
  973. key: "getAllERC20",
  974. value: function () {
  975. var _ref,
  976. chain,
  977. address,
  978. result,
  979. _args11 = arguments;
  980. return _regenerator.default.async(function (_context11) {
  981. while (1) {
  982. switch (_context11.prev = _context11.next) {
  983. case 0:
  984. _ref = _args11.length > 0 && _args11[0] !== undefined ? _args11[0] : {}, chain = _ref.chain, address = _ref.address;
  985. _context11.next = 3;
  986. return _regenerator.default.awrap((0, _Cloud.run)('getAllERC20', {
  987. chain: chain,
  988. address: address
  989. }));
  990. case 3:
  991. result = _context11.sent;
  992. return _context11.abrupt("return", result);
  993. case 5:
  994. case "end":
  995. return _context11.stop();
  996. }
  997. }
  998. }, null, null, null, Promise);
  999. }
  1000. }, {
  1001. key: "getERC20",
  1002. value: function () {
  1003. var _ref2,
  1004. chain,
  1005. address,
  1006. symbol,
  1007. tokenAddress,
  1008. result,
  1009. _args12 = arguments;
  1010. return _regenerator.default.async(function (_context12) {
  1011. while (1) {
  1012. switch (_context12.prev = _context12.next) {
  1013. case 0:
  1014. _ref2 = _args12.length > 0 && _args12[0] !== undefined ? _args12[0] : {}, chain = _ref2.chain, address = _ref2.address, symbol = _ref2.symbol, tokenAddress = _ref2.tokenAddress;
  1015. result = (0, _Cloud.run)('getERC20', {
  1016. chain: chain,
  1017. address: address,
  1018. symbol: symbol,
  1019. tokenAddress: tokenAddress
  1020. });
  1021. return _context12.abrupt("return", result);
  1022. case 3:
  1023. case "end":
  1024. return _context12.stop();
  1025. }
  1026. }
  1027. }, null, null, null, Promise);
  1028. }
  1029. }, {
  1030. key: "getNFTs",
  1031. value: function () {
  1032. var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  1033. _ref3$chain = _ref3.chain,
  1034. chain = _ref3$chain === void 0 ? 'Eth' : _ref3$chain,
  1035. _ref3$address = _ref3.address,
  1036. address = _ref3$address === void 0 ? '' : _ref3$address;
  1037. return (0, _Cloud.run)('getNFTs_old', {
  1038. chain: chain,
  1039. address: address
  1040. });
  1041. }
  1042. }, {
  1043. key: "getNFTsCount",
  1044. value: function () {
  1045. var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  1046. _ref4$chain = _ref4.chain,
  1047. chain = _ref4$chain === void 0 ? 'Eth' : _ref4$chain,
  1048. _ref4$address = _ref4.address,
  1049. address = _ref4$address === void 0 ? '' : _ref4$address;
  1050. return (0, _Cloud.run)('getNFTsCount_old', {
  1051. chain: chain,
  1052. address: address
  1053. });
  1054. }
  1055. }, {
  1056. key: "getTransactions",
  1057. value: function () {
  1058. var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  1059. _ref5$chain = _ref5.chain,
  1060. chain = _ref5$chain === void 0 ? 'Eth' : _ref5$chain,
  1061. _ref5$address = _ref5.address,
  1062. address = _ref5$address === void 0 ? '' : _ref5$address,
  1063. _ref5$order = _ref5.order,
  1064. order = _ref5$order === void 0 ? 'desc' : _ref5$order;
  1065. return (0, _Cloud.run)('getTransactions', {
  1066. chain: chain,
  1067. address: address,
  1068. order: order
  1069. });
  1070. }
  1071. }, {
  1072. key: "getTransactionsCount",
  1073. value: function () {
  1074. var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  1075. _ref6$chain = _ref6.chain,
  1076. chain = _ref6$chain === void 0 ? 'Eth' : _ref6$chain,
  1077. _ref6$address = _ref6.address,
  1078. address = _ref6$address === void 0 ? '' : _ref6$address;
  1079. return (0, _Cloud.run)('getTransactionsCount', {
  1080. chain: chain,
  1081. address: address
  1082. });
  1083. }
  1084. }, {
  1085. key: "transfer",
  1086. value: function () {
  1087. var _ref7,
  1088. _ref7$type,
  1089. type,
  1090. _ref7$receiver,
  1091. receiver,
  1092. _ref7$contractAddress,
  1093. contractAddress,
  1094. contract_address,
  1095. _ref7$amount,
  1096. amount,
  1097. _ref7$tokenId,
  1098. tokenId,
  1099. token_id,
  1100. _ref7$system,
  1101. system,
  1102. options,
  1103. _this$getInternalWeb3,
  1104. internalWeb3,
  1105. sender,
  1106. signer,
  1107. transferOperation,
  1108. customToken,
  1109. result,
  1110. _args13 = arguments;
  1111. return _regenerator.default.async(function (_context13) {
  1112. while (1) {
  1113. switch (_context13.prev = _context13.next) {
  1114. case 0:
  1115. _ref7 = _args13.length > 0 && _args13[0] !== undefined ? _args13[0] : {}, _ref7$type = _ref7.type, type = _ref7$type === void 0 ? 'native' : _ref7$type, _ref7$receiver = _ref7.receiver, receiver = _ref7$receiver === void 0 ? '' : _ref7$receiver, _ref7$contractAddress = _ref7.contractAddress, contractAddress = _ref7$contractAddress === void 0 ? '' : _ref7$contractAddress, contract_address = _ref7.contract_address, _ref7$amount = _ref7.amount, amount = _ref7$amount === void 0 ? '' : _ref7$amount, _ref7$tokenId = _ref7.tokenId, tokenId = _ref7$tokenId === void 0 ? '' : _ref7$tokenId, token_id = _ref7.token_id, _ref7$system = _ref7.system, system = _ref7$system === void 0 ? 'evm' : _ref7$system;
  1116. contractAddress = contractAddress || contract_address;
  1117. tokenId = tokenId || token_id;
  1118. options = {
  1119. receiver: receiver,
  1120. contractAddress: contractAddress,
  1121. amount: amount,
  1122. tokenId: tokenId,
  1123. system: system
  1124. };
  1125. _TransferUtils.default.isSupportedType(type);
  1126. _TransferUtils.default.validateInput(type, options);
  1127. _this$getInternalWeb3 = this.getInternalWeb3Provider(), internalWeb3 = _this$getInternalWeb3.web3, sender = _this$getInternalWeb3.account, signer = _this$getInternalWeb3.signer;
  1128. if (sender) {
  1129. _context13.next = 9;
  1130. break;
  1131. }
  1132. throw new Error('Sender address not found');
  1133. case 9:
  1134. if (tokenId) _TransferUtils.default.isUint256(tokenId);
  1135. if (type !== 'native') {
  1136. customToken = new _ethers.ethers.Contract(contractAddress, _TransferUtils.default.abi[type], signer);
  1137. }
  1138. _context13.t0 = type;
  1139. _context13.next = _context13.t0 === 'native' ? 14 : _context13.t0 === 'erc20' ? 16 : _context13.t0 === 'erc721' ? 18 : _context13.t0 === 'erc1155' ? 20 : 22;
  1140. break;
  1141. case 14:
  1142. transferOperation = signer.sendTransaction({
  1143. to: receiver,
  1144. value: _ethers.ethers.BigNumber.from(amount)
  1145. });
  1146. return _context13.abrupt("break", 23);
  1147. case 16:
  1148. transferOperation = customToken.transfer(receiver, amount, {
  1149. from: sender
  1150. });
  1151. return _context13.abrupt("break", 23);
  1152. case 18:
  1153. transferOperation = customToken.safeTransferFrom(sender, receiver, "" + tokenId, {
  1154. from: sender
  1155. });
  1156. return _context13.abrupt("break", 23);
  1157. case 20:
  1158. transferOperation = customToken.safeTransferFrom(sender, receiver, "" + tokenId, amount, '0x', {
  1159. from: sender
  1160. });
  1161. return _context13.abrupt("break", 23);
  1162. case 22:
  1163. throw new Error("Unknown transfer type: \"" + type + "\"");
  1164. case 23:
  1165. _context13.next = 25;
  1166. return _regenerator.default.awrap(transferOperation);
  1167. case 25:
  1168. result = _context13.sent;
  1169. return _context13.abrupt("return", result);
  1170. case 27:
  1171. case "end":
  1172. return _context13.stop();
  1173. }
  1174. }
  1175. }, null, this, null, Promise);
  1176. }
  1177. }, {
  1178. key: "executeFunction",
  1179. value: function () {
  1180. var _functionData;
  1181. var _ref8,
  1182. contractAddress,
  1183. abi,
  1184. functionName,
  1185. msgValue,
  1186. _ref8$params,
  1187. params,
  1188. _ref8$overrides,
  1189. overrides,
  1190. contractOptions,
  1191. _this$getInternalWeb4,
  1192. account,
  1193. internalWeb3,
  1194. provider,
  1195. signerOrProvider,
  1196. overloadedFunction,
  1197. functionData,
  1198. nameWithoutTopics,
  1199. topics,
  1200. functionDataArray,
  1201. possibleTopics,
  1202. _functionDataArray,
  1203. _possibleTopics,
  1204. stateMutability,
  1205. isReadFunction,
  1206. currentAddress,
  1207. errors,
  1208. _iterator,
  1209. _step,
  1210. input,
  1211. value,
  1212. parsedInputs,
  1213. contract,
  1214. contractMethod,
  1215. response,
  1216. _args14 = arguments;
  1217. return _regenerator.default.async(function (_context14) {
  1218. while (1) {
  1219. switch (_context14.prev = _context14.next) {
  1220. case 0:
  1221. _ref8 = _args14.length > 0 && _args14[0] !== undefined ? _args14[0] : {}, contractAddress = _ref8.contractAddress, abi = _ref8.abi, functionName = _ref8.functionName, msgValue = _ref8.msgValue, _ref8$params = _ref8.params, params = _ref8$params === void 0 ? {} : _ref8$params, _ref8$overrides = _ref8.overrides, overrides = _ref8$overrides === void 0 ? {} : _ref8$overrides;
  1222. contractOptions = {};
  1223. _this$getInternalWeb4 = this.getInternalWeb3Provider(), account = _this$getInternalWeb4.account, internalWeb3 = _this$getInternalWeb4.web3, provider = _this$getInternalWeb4.provider, signerOrProvider = _this$getInternalWeb4.signerOrProvider;
  1224. overloadedFunction = functionName.match(/^(.+)\((.*)\)$/);
  1225. if (!overloadedFunction) {
  1226. _context14.next = 16;
  1227. break;
  1228. }
  1229. nameWithoutTopics = overloadedFunction[1];
  1230. topics = overloadedFunction[2].split(',').map(function (topic) {
  1231. return topic.trim();
  1232. }).filter(function (topic) {
  1233. return !!topic;
  1234. });
  1235. functionDataArray = abi.filter(function (x) {
  1236. return x.name === nameWithoutTopics;
  1237. });
  1238. if (!(functionDataArray.length === 0)) {
  1239. _context14.next = 10;
  1240. break;
  1241. }
  1242. throw new Error('Function does not exist in abi');
  1243. case 10:
  1244. functionData = functionDataArray.find(function (data) {
  1245. var _data$inputs$length;
  1246. return ((_data$inputs$length = data == null ? void 0 : data.inputs.length) != null ? _data$inputs$length : 0) === topics.length && data.inputs.every(function (input, index) {
  1247. return input.type === topics[index];
  1248. });
  1249. });
  1250. if (functionData) {
  1251. _context14.next = 14;
  1252. break;
  1253. }
  1254. possibleTopics = functionDataArray.map(function (data) {
  1255. return data.name + "(" + data.inputs.map(function (input) {
  1256. return input.type;
  1257. }).join(',') + ")";
  1258. });
  1259. throw new Error("Function with the provided topic does not exist in abi. Possible funcationNames: " + possibleTopics.join(' ,'));
  1260. case 14:
  1261. _context14.next = 23;
  1262. break;
  1263. case 16:
  1264. _functionDataArray = abi.filter(function (x) {
  1265. return x.name === functionName;
  1266. });
  1267. if (!(_functionDataArray.length === 0)) {
  1268. _context14.next = 19;
  1269. break;
  1270. }
  1271. throw new Error('Function does not exist in abi');
  1272. case 19:
  1273. if (!(_functionDataArray.length > 1)) {
  1274. _context14.next = 22;
  1275. break;
  1276. }
  1277. _possibleTopics = _functionDataArray.map(function (data) {
  1278. return data.name + "(" + data.inputs.map(function (input) {
  1279. return input.type;
  1280. }).join(',') + ")";
  1281. });
  1282. throw new Error("Multiple function definitions found in the abi. Please include the topic in the functionName. Possible funcationNames: " + _possibleTopics.join(' ,'));
  1283. case 22:
  1284. functionData = _functionDataArray[0];
  1285. case 23:
  1286. stateMutability = (_functionData = functionData) == null ? void 0 : _functionData.stateMutability;
  1287. isReadFunction = stateMutability === 'view' || stateMutability === 'pure';
  1288. if (isReadFunction) {
  1289. _context14.next = 31;
  1290. break;
  1291. }
  1292. if (params.from) {
  1293. _context14.next = 31;
  1294. break;
  1295. }
  1296. currentAddress = account;
  1297. if (currentAddress) {
  1298. _context14.next = 30;
  1299. break;
  1300. }
  1301. throw new Error('From address is required');
  1302. case 30:
  1303. contractOptions.from = currentAddress;
  1304. case 31:
  1305. errors = [];
  1306. for (_iterator = _createForOfIteratorHelperLoose(functionData.inputs); !(_step = _iterator()).done;) {
  1307. input = _step.value;
  1308. value = params[input.name];
  1309. if (!value && typeof value !== 'number' && typeof value !== 'boolean' && input.name !== '') {
  1310. errors.push(input.name + " is required");
  1311. }
  1312. }
  1313. if (!(errors.length > 0)) {
  1314. _context14.next = 35;
  1315. break;
  1316. }
  1317. throw errors;
  1318. case 35:
  1319. parsedInputs = functionData.inputs.map(function (x) {
  1320. return params[x.name];
  1321. });
  1322. contract = new _ethers.ethers.Contract(contractAddress, abi, signerOrProvider);
  1323. contractMethod = contract[functionName];
  1324. if (contractMethod) {
  1325. _context14.next = 40;
  1326. break;
  1327. }
  1328. throw new Error("Cannot find function \"" + functionName + "\" on the contract");
  1329. case 40:
  1330. _context14.next = 42;
  1331. return _regenerator.default.awrap(contractMethod.apply(void 0, (0, _toConsumableArray2.default)(Object.values(parsedInputs)).concat([msgValue ? {
  1332. value: _ethers.ethers.BigNumber.from("" + msgValue)
  1333. } : {}])));
  1334. case 42:
  1335. response = _context14.sent;
  1336. return _context14.abrupt("return", response);
  1337. case 44:
  1338. case "end":
  1339. return _context14.stop();
  1340. }
  1341. }
  1342. }, null, this, null, Promise);
  1343. }
  1344. }, {
  1345. key: "getSigningData",
  1346. value: function () {
  1347. return "Moralis Authentication";
  1348. }
  1349. }, {
  1350. key: "ensureWeb3IsInstalled",
  1351. value: function () {
  1352. return this.internalWeb3Provider && this.internalWeb3Provider.web3 ? true : false;
  1353. }
  1354. }, {
  1355. key: "getInternalWeb3Provider",
  1356. value: function () {
  1357. if (!this.ensureWeb3IsInstalled()) throw new Error(ERROR_WEB3_MISSING);
  1358. return this.internalWeb3Provider;
  1359. }
  1360. }, {
  1361. key: "getInternalWeb3",
  1362. value: function () {
  1363. return this.getInternalWeb3Provider().web3;
  1364. }
  1365. }, {
  1366. key: "provider",
  1367. get: function () {
  1368. var _this$internalWeb3Pro2, _this$internalWeb3Pro3;
  1369. return (_this$internalWeb3Pro2 = (_this$internalWeb3Pro3 = this.internalWeb3Provider) == null ? void 0 : _this$internalWeb3Pro3.provider) != null ? _this$internalWeb3Pro2 : null;
  1370. }
  1371. }, {
  1372. key: "connector",
  1373. get: function () {
  1374. var _this$internalWeb3Pro4, _this$internalWeb3Pro5;
  1375. return (_this$internalWeb3Pro4 = (_this$internalWeb3Pro5 = this.internalWeb3Provider) == null ? void 0 : _this$internalWeb3Pro5.connector) != null ? _this$internalWeb3Pro4 : null;
  1376. }
  1377. }, {
  1378. key: "connectorType",
  1379. get: function () {
  1380. var _this$connector$type, _this$connector;
  1381. return (_this$connector$type = (_this$connector = this.connector) == null ? void 0 : _this$connector.type) != null ? _this$connector$type : null;
  1382. }
  1383. }, {
  1384. key: "network",
  1385. get: function () {
  1386. var _this$connector$netwo, _this$connector2;
  1387. return (_this$connector$netwo = (_this$connector2 = this.connector) == null ? void 0 : _this$connector2.network) != null ? _this$connector$netwo : null;
  1388. }
  1389. }, {
  1390. key: "account",
  1391. get: function () {
  1392. var _this$internalWeb3Pro6, _this$internalWeb3Pro7;
  1393. return (_this$internalWeb3Pro6 = (_this$internalWeb3Pro7 = this.internalWeb3Provider) == null ? void 0 : _this$internalWeb3Pro7.account) != null ? _this$internalWeb3Pro6 : null;
  1394. }
  1395. }, {
  1396. key: "chainId",
  1397. get: function () {
  1398. var _this$internalWeb3Pro8, _this$internalWeb3Pro9;
  1399. return (_this$internalWeb3Pro8 = (_this$internalWeb3Pro9 = this.internalWeb3Provider) == null ? void 0 : _this$internalWeb3Pro9.chainId) != null ? _this$internalWeb3Pro8 : null;
  1400. }
  1401. }, {
  1402. key: "getChainId",
  1403. value: function () {
  1404. return this.chainId;
  1405. }
  1406. }, {
  1407. key: "web3Library",
  1408. get: function () {
  1409. return _ethers.ethers;
  1410. }
  1411. }, {
  1412. key: "_forwardToConnector",
  1413. value: function (methodName, args) {
  1414. var _this$getInternalWeb5 = this.getInternalWeb3Provider(),
  1415. connector = _this$getInternalWeb5.connector;
  1416. var hasMethod = Boolean(connector[methodName]);
  1417. if (!hasMethod) {
  1418. throw new Error("Cannot call " + methodName + ", as it does not exist on connector type \"" + connector.type + "\"");
  1419. }
  1420. return connector[methodName].apply(connector, (0, _toConsumableArray2.default)(args));
  1421. }
  1422. }, {
  1423. key: "switchNetwork",
  1424. value: function () {
  1425. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  1426. args[_key] = arguments[_key];
  1427. }
  1428. return this._forwardToConnector('switchNetwork', args);
  1429. }
  1430. }, {
  1431. key: "addNetwork",
  1432. value: function () {
  1433. for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
  1434. args[_key2] = arguments[_key2];
  1435. }
  1436. return this._forwardToConnector('addNetwork', args);
  1437. }
  1438. }, {
  1439. key: "isMetaMaskInstalled",
  1440. value: function () {
  1441. return _regenerator.default.async(function (_context15) {
  1442. while (1) {
  1443. switch (_context15.prev = _context15.next) {
  1444. case 0:
  1445. _context15.next = 2;
  1446. return _regenerator.default.awrap((0, _detectProvider.default)());
  1447. case 2:
  1448. if (!_context15.sent) {
  1449. _context15.next = 6;
  1450. break;
  1451. }
  1452. _context15.t0 = true;
  1453. _context15.next = 7;
  1454. break;
  1455. case 6:
  1456. _context15.t0 = false;
  1457. case 7:
  1458. return _context15.abrupt("return", _context15.t0);
  1459. case 8:
  1460. case "end":
  1461. return _context15.stop();
  1462. }
  1463. }
  1464. }, null, null, null, Promise);
  1465. }
  1466. }]);
  1467. return MoralisWeb3;
  1468. }();
  1469. MoralisWeb3.web3 = null;
  1470. MoralisWeb3.internalWeb3Provider = null;
  1471. MoralisWeb3.Plugins = {};
  1472. MoralisWeb3.isEnablingWeb3 = false;
  1473. MoralisWeb3.memoryCard = {
  1474. save: function (what) {
  1475. this.saved = what;
  1476. },
  1477. get: function (where) {
  1478. if (!this.saved) throw new Error('Nothing saved to memory card');
  1479. if (where.length === 0) return this.getSaved();
  1480. var tmp;
  1481. var savedTmp = this.saved;
  1482. for (var i = 0; i < where.length; i++) {
  1483. tmp = savedTmp[where[i]];
  1484. savedTmp = tmp;
  1485. }
  1486. return savedTmp;
  1487. },
  1488. getSaved: function () {
  1489. return this.saved;
  1490. },
  1491. deleteSaved: function () {
  1492. this.saved = undefined;
  1493. }
  1494. };
  1495. MoralisWeb3.onConnect = MoralisWeb3.on.bind(MoralisWeb3, _InternalWeb3Provider.InternalWeb3Events.PROVIDER_CONNECT);
  1496. MoralisWeb3.onDisconnect = MoralisWeb3.on.bind(MoralisWeb3, _InternalWeb3Provider.InternalWeb3Events.PROVIDER_DISCONNECT);
  1497. MoralisWeb3.onWeb3Enabled = MoralisWeb3.on.bind(MoralisWeb3, _InternalWeb3Provider.InternalWeb3Events.WEB3_ENABLED);
  1498. MoralisWeb3.onWeb3Deactivated = MoralisWeb3.on.bind(MoralisWeb3, _InternalWeb3Provider.InternalWeb3Events.WEB3_DEACTIVATED);
  1499. MoralisWeb3.onChainChanged = MoralisWeb3.on.bind(MoralisWeb3, _InternalWeb3Provider.InternalWeb3Events.CHAIN_CHANGED);
  1500. MoralisWeb3.onAccountChanged = MoralisWeb3.on.bind(MoralisWeb3, _InternalWeb3Provider.InternalWeb3Events.ACCOUNT_CHANGED);
  1501. var _default = MoralisWeb3;
  1502. exports.default = _default;