MoralisSolanaApi.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. "use strict";
  2. var _Object$keys2 = require("@babel/runtime-corejs3/core-js-stable/object/keys");
  3. var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
  4. var _filterInstanceProperty2 = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
  5. var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
  6. var _forEachInstanceProperty2 = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
  7. var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
  8. var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
  9. var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
  10. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  11. _Object$defineProperty(exports, "__esModule", {
  12. value: true
  13. });
  14. exports.default = void 0;
  15. var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
  16. var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
  17. var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
  18. var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
  19. var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
  20. var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/json/stringify"));
  21. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
  22. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
  23. var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
  24. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
  25. function ownKeys(object, enumerableOnly) {
  26. var keys = _Object$keys2(object);
  27. if (_Object$getOwnPropertySymbols) {
  28. var symbols = _Object$getOwnPropertySymbols(object);
  29. enumerableOnly && (symbols = _filterInstanceProperty2(symbols).call(symbols, function (sym) {
  30. return _Object$getOwnPropertyDescriptor(object, sym).enumerable;
  31. })), keys.push.apply(keys, symbols);
  32. }
  33. return keys;
  34. }
  35. function _objectSpread(target) {
  36. for (var i = 1; i < arguments.length; i++) {
  37. var _context10, _context11;
  38. var source = null != arguments[i] ? arguments[i] : {};
  39. i % 2 ? _forEachInstanceProperty2(_context10 = ownKeys(Object(source), !0)).call(_context10, function (key) {
  40. (0, _defineProperty2.default)(target, key, source[key]);
  41. }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty2(_context11 = ownKeys(Object(source))).call(_context11, function (key) {
  42. _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key));
  43. });
  44. }
  45. return target;
  46. }
  47. /**
  48. * Automatically generated code, via genSolanaAPI.js
  49. * Do not modify manually
  50. */
  51. var axios = require('axios');
  52. var SolanaApi = /*#__PURE__*/function () {
  53. function SolanaApi() {
  54. (0, _classCallCheck2.default)(this, SolanaApi);
  55. }
  56. (0, _createClass2.default)(SolanaApi, null, [{
  57. key: "initialize",
  58. value: // URL will be changed when api is deployed
  59. function (_ref) {
  60. var apiKey = _ref.apiKey,
  61. serverUrl = _ref.serverUrl,
  62. _ref$Moralis = _ref.Moralis,
  63. Moralis = _ref$Moralis === void 0 ? null : _ref$Moralis;
  64. if (!serverUrl && !apiKey) {
  65. throw new Error('SolanaApi.initialize failed: initialize with apiKey or serverUrl');
  66. }
  67. if (apiKey) this.apiKey = apiKey;
  68. if (serverUrl) this.serverUrl = serverUrl;
  69. this.Moralis = Moralis;
  70. }
  71. }, {
  72. key: "getBody",
  73. value: function (params, bodyParams) {
  74. var _this = this;
  75. if (!params || !bodyParams || !bodyParams.length) {
  76. return undefined;
  77. }
  78. var body = {};
  79. (0, _forEach.default)(bodyParams).call(bodyParams, function (_ref2) {
  80. var key = _ref2.key,
  81. type = _ref2.type,
  82. required = _ref2.required;
  83. if (params[key] === undefined) {
  84. if (required) throw new Error("param ".concat(key, " is required!"));
  85. } else if (type === _this.BodyParamTypes.setBody) {
  86. body = params[key];
  87. } else {
  88. body[key] = params[key];
  89. } // remove the param so it doesn't also get added as a query param
  90. delete params[key];
  91. });
  92. return body;
  93. }
  94. }, {
  95. key: "getParameterizedUrl",
  96. value: function (url, params) {
  97. var _context;
  98. if (!(0, _keys.default)(params).length) return url; // find url params, they start with :
  99. var requiredParams = (0, _filter.default)(_context = url.split('/')).call(_context, function (s) {
  100. return s && (0, _includes.default)(s).call(s, ':');
  101. });
  102. if (!requiredParams.length) return url;
  103. var parameterizedUrl = url;
  104. (0, _forEach.default)(requiredParams).call(requiredParams, function (p) {
  105. // strip the : and replace with param value
  106. var key = p.substr(1);
  107. var value = params[key];
  108. if (!value) {
  109. throw new Error("required param ".concat(key, " not provided"));
  110. }
  111. parameterizedUrl = parameterizedUrl.replace(p, value); // remove required param from param list
  112. // so it doesn't become part of the query params
  113. delete params[key];
  114. });
  115. return parameterizedUrl;
  116. }
  117. }, {
  118. key: "getApiRateLimitInfo",
  119. value: function (headers) {
  120. return {
  121. 'x-rate-limit-limit': headers['x-rate-limit-limit'],
  122. 'x-rate-limit-remaining-ttl': headers['x-rate-limit-remaining-ttl'],
  123. 'x-rate-limit-used': headers['x-rate-limit-used'],
  124. 'x-rate-limit-remaining-ip-ttl': headers['x-rate-limit-remaining-ip-ttl'],
  125. 'x-rate-limit-ip-used': headers['x-rate-limit-ip-used']
  126. };
  127. }
  128. }, {
  129. key: "getErrorMessage",
  130. value: function (error, url) {
  131. var _error$response, _error$response$data;
  132. return (error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.message) || (error === null || error === void 0 ? void 0 : error.message) || (error === null || error === void 0 ? void 0 : error.toString()) || "Solana API error while calling ".concat(url);
  133. }
  134. }, {
  135. key: "fetch",
  136. value: function () {
  137. var _fetch = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref3) {
  138. var endpoint, providedParams, params, User, user;
  139. return _regenerator.default.wrap(function (_context2) {
  140. while (1) {
  141. switch (_context2.prev = _context2.next) {
  142. case 0:
  143. endpoint = _ref3.endpoint, providedParams = _ref3.params; // Make a shallow copy to prevent modification of original params
  144. params = _objectSpread({}, providedParams);
  145. if (this.Moralis) {
  146. User = this.Moralis.User;
  147. user = User.current();
  148. if (!params.address) {
  149. if (user) {
  150. params.address = user.get('solAddress');
  151. }
  152. }
  153. }
  154. if (!params.network) params.network = 'mainnet';
  155. if (!params.responseType) params.responseType = 'native';
  156. if (this.apiKey) {
  157. _context2.next = 7;
  158. break;
  159. }
  160. return _context2.abrupt("return", this.fetchFromServer(endpoint.name, params));
  161. case 7:
  162. return _context2.abrupt("return", this.fetchFromApi(endpoint, params));
  163. case 8:
  164. case "end":
  165. return _context2.stop();
  166. }
  167. }
  168. }, _callee, this);
  169. }));
  170. return function () {
  171. return _fetch.apply(this, arguments);
  172. };
  173. }()
  174. }, {
  175. key: "fetchFromApi",
  176. value: function () {
  177. var _fetchFromApi = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(endpoint, params) {
  178. var _endpoint$method, method, url, bodyParams, parameterizedUrl, body, response, _error$response2, status, headers, data, msg;
  179. return _regenerator.default.wrap(function (_context3) {
  180. while (1) {
  181. switch (_context3.prev = _context3.next) {
  182. case 0:
  183. _endpoint$method = endpoint.method, method = _endpoint$method === void 0 ? 'GET' : _endpoint$method, url = endpoint.url, bodyParams = endpoint.bodyParams;
  184. _context3.prev = 1;
  185. parameterizedUrl = this.getParameterizedUrl(url, params);
  186. body = this.getBody(params, bodyParams);
  187. _context3.next = 6;
  188. return axios(this.baseURL + parameterizedUrl, {
  189. params: params,
  190. method: method,
  191. body: body,
  192. headers: {
  193. Accept: 'application/json',
  194. 'Content-Type': 'application/json',
  195. 'x-api-key': this.apiKey
  196. }
  197. });
  198. case 6:
  199. response = _context3.sent;
  200. return _context3.abrupt("return", response.data);
  201. case 10:
  202. _context3.prev = 10;
  203. _context3.t0 = _context3["catch"](1);
  204. _error$response2 = _context3.t0.response, status = _error$response2.status, headers = _error$response2.headers, data = _error$response2.data;
  205. if (status === 429) {
  206. msg = "This Moralis Server is rate-limited because of the plan restrictions. See the details about the current rate and throttle limits: ".concat((0, _stringify.default)(this.getApiRateLimitInfo(headers)));
  207. } else {
  208. msg = this.getApiErrorMessage(_context3.t0, url);
  209. }
  210. throw new Error(msg);
  211. case 15:
  212. case "end":
  213. return _context3.stop();
  214. }
  215. }
  216. }, _callee2, this, [[1, 10]]);
  217. }));
  218. return function () {
  219. return _fetchFromApi.apply(this, arguments);
  220. };
  221. }()
  222. }, {
  223. key: "fetchFromServer",
  224. value: function () {
  225. var _fetchFromServer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(name, options) {
  226. var http, user, response, _error$response3, _error$response3$data;
  227. return _regenerator.default.wrap(function (_context4) {
  228. while (1) {
  229. switch (_context4.prev = _context4.next) {
  230. case 0:
  231. if (this.serverUrl) {
  232. _context4.next = 2;
  233. break;
  234. }
  235. throw new Error('SolanaAPI not initialized, run Moralis.start() first');
  236. case 2:
  237. _context4.prev = 2;
  238. http = axios.create({
  239. baseURL: this.serverUrl
  240. });
  241. user = this.Moralis.User.current();
  242. if (user) {
  243. options._SessionToken = user.attributes.sessionToken;
  244. options._ApplicationId = this.Moralis.applicationId;
  245. }
  246. _context4.next = 8;
  247. return http.post("/functions/sol-".concat(name), options, {
  248. headers: {
  249. Accept: 'application/json',
  250. 'Content-Type': 'application/json'
  251. }
  252. });
  253. case 8:
  254. response = _context4.sent;
  255. return _context4.abrupt("return", response.data.result);
  256. case 12:
  257. _context4.prev = 12;
  258. _context4.t0 = _context4["catch"](2);
  259. if (!((_error$response3 = _context4.t0.response) !== null && _error$response3 !== void 0 && (_error$response3$data = _error$response3.data) !== null && _error$response3$data !== void 0 && _error$response3$data.error)) {
  260. _context4.next = 16;
  261. break;
  262. }
  263. throw new Error(_context4.t0.response.data.error);
  264. case 16:
  265. throw _context4.t0;
  266. case 17:
  267. case "end":
  268. return _context4.stop();
  269. }
  270. }
  271. }, _callee3, this, [[2, 12]]);
  272. }));
  273. return function () {
  274. return _fetchFromServer.apply(this, arguments);
  275. };
  276. }()
  277. }]);
  278. return SolanaApi;
  279. }();
  280. (0, _defineProperty2.default)(SolanaApi, "baseURL", 'https://solana-gateway.moralis.io');
  281. (0, _defineProperty2.default)(SolanaApi, "BodyParamTypes", {
  282. setBody: 'set body',
  283. property: 'property'
  284. });
  285. (0, _defineProperty2.default)(SolanaApi, "account", {
  286. balance: function () {
  287. var _balance = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
  288. var options,
  289. _args4 = arguments;
  290. return _regenerator.default.wrap(function (_context5) {
  291. while (1) {
  292. switch (_context5.prev = _context5.next) {
  293. case 0:
  294. options = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {};
  295. return _context5.abrupt("return", SolanaApi.fetch({
  296. endpoint: {
  297. "method": "GET",
  298. "group": "account",
  299. "name": "balance",
  300. "url": "/account/:network/:address/balance"
  301. },
  302. params: options
  303. }));
  304. case 2:
  305. case "end":
  306. return _context5.stop();
  307. }
  308. }
  309. }, _callee4);
  310. }));
  311. return function () {
  312. return _balance.apply(this, arguments);
  313. };
  314. }(),
  315. getSPL: function () {
  316. var _getSPL = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
  317. var options,
  318. _args5 = arguments;
  319. return _regenerator.default.wrap(function (_context6) {
  320. while (1) {
  321. switch (_context6.prev = _context6.next) {
  322. case 0:
  323. options = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : {};
  324. return _context6.abrupt("return", SolanaApi.fetch({
  325. endpoint: {
  326. "method": "GET",
  327. "group": "account",
  328. "name": "getSPL",
  329. "url": "/account/:network/:address/tokens"
  330. },
  331. params: options
  332. }));
  333. case 2:
  334. case "end":
  335. return _context6.stop();
  336. }
  337. }
  338. }, _callee5);
  339. }));
  340. return function () {
  341. return _getSPL.apply(this, arguments);
  342. };
  343. }(),
  344. getNFTs: function () {
  345. var _getNFTs = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
  346. var options,
  347. _args6 = arguments;
  348. return _regenerator.default.wrap(function (_context7) {
  349. while (1) {
  350. switch (_context7.prev = _context7.next) {
  351. case 0:
  352. options = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : {};
  353. return _context7.abrupt("return", SolanaApi.fetch({
  354. endpoint: {
  355. "method": "GET",
  356. "group": "account",
  357. "name": "getNFTs",
  358. "url": "/account/:network/:address/nft"
  359. },
  360. params: options
  361. }));
  362. case 2:
  363. case "end":
  364. return _context7.stop();
  365. }
  366. }
  367. }, _callee6);
  368. }));
  369. return function () {
  370. return _getNFTs.apply(this, arguments);
  371. };
  372. }(),
  373. getPortfolio: function () {
  374. var _getPortfolio = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
  375. var options,
  376. _args7 = arguments;
  377. return _regenerator.default.wrap(function (_context8) {
  378. while (1) {
  379. switch (_context8.prev = _context8.next) {
  380. case 0:
  381. options = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : {};
  382. return _context8.abrupt("return", SolanaApi.fetch({
  383. endpoint: {
  384. "method": "GET",
  385. "group": "account",
  386. "name": "getPortfolio",
  387. "url": "/account/:network/:address/portfolio"
  388. },
  389. params: options
  390. }));
  391. case 2:
  392. case "end":
  393. return _context8.stop();
  394. }
  395. }
  396. }, _callee7);
  397. }));
  398. return function () {
  399. return _getPortfolio.apply(this, arguments);
  400. };
  401. }()
  402. });
  403. (0, _defineProperty2.default)(SolanaApi, "nft", {
  404. getNFTMetadata: function () {
  405. var _getNFTMetadata = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {
  406. var options,
  407. _args8 = arguments;
  408. return _regenerator.default.wrap(function (_context9) {
  409. while (1) {
  410. switch (_context9.prev = _context9.next) {
  411. case 0:
  412. options = _args8.length > 0 && _args8[0] !== undefined ? _args8[0] : {};
  413. return _context9.abrupt("return", SolanaApi.fetch({
  414. endpoint: {
  415. "method": "GET",
  416. "group": "nft",
  417. "name": "getNFTMetadata",
  418. "url": "/nft/:network/:address/metadata"
  419. },
  420. params: options
  421. }));
  422. case 2:
  423. case "end":
  424. return _context9.stop();
  425. }
  426. }
  427. }, _callee8);
  428. }));
  429. return function () {
  430. return _getNFTMetadata.apply(this, arguments);
  431. };
  432. }()
  433. });
  434. var _default = SolanaApi;
  435. exports.default = _default;