utils.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  3. var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
  4. var _RESTController = _interopRequireDefault(require("./RESTController"));
  5. var DEEP_INDEX_API_HOST = 'deep-index.moralis.io';
  6. var DEEP_INDEX_SWAGGER_PATH = '/api-docs/v2/swagger.json';
  7. var TrackingEventName = Object.freeze({
  8. START_FUNCTION: 'Moralis SDK start'
  9. });
  10. var fetchSwaggerJson = function () {
  11. var _await$RESTController, response;
  12. return _regenerator.default.async(function (_context) {
  13. while (1) {
  14. switch (_context.prev = _context.next) {
  15. case 0:
  16. _context.next = 2;
  17. return _regenerator.default.awrap(_RESTController.default.ajax('GET', "https://" + DEEP_INDEX_API_HOST + DEEP_INDEX_SWAGGER_PATH));
  18. case 2:
  19. _await$RESTController = _context.sent;
  20. response = _await$RESTController.response;
  21. return _context.abrupt("return", response);
  22. case 5:
  23. case "end":
  24. return _context.stop();
  25. }
  26. }
  27. }, null, null, null, Promise);
  28. };
  29. var getPathByTag = function (swaggerJSON) {
  30. var pathByTag = {};
  31. var pathDetails = {};
  32. Object.entries(swaggerJSON.paths).map(function (_ref) {
  33. var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
  34. pathName = _ref2[0],
  35. requestData = _ref2[1];
  36. return Object.entries(requestData).forEach(function (_ref3) {
  37. var _ref4 = (0, _slicedToArray2.default)(_ref3, 2),
  38. method = _ref4[0],
  39. data = _ref4[1];
  40. var tags = data.tags;
  41. if (tags.length > 0) {
  42. if (!pathByTag[tags[0]]) {
  43. pathByTag[tags[0]] = [];
  44. }
  45. pathByTag[tags[0]].push(data.operationId);
  46. pathDetails[data.operationId] = {
  47. method: method,
  48. pathName: pathName,
  49. data: data
  50. };
  51. }
  52. });
  53. });
  54. return {
  55. pathByTag: pathByTag,
  56. pathDetails: pathDetails
  57. };
  58. };
  59. var fetchEndpoints = function () {
  60. var swaggerJSON, _await$getPathByTag, pathDetails, data;
  61. return _regenerator.default.async(function (_context2) {
  62. while (1) {
  63. switch (_context2.prev = _context2.next) {
  64. case 0:
  65. _context2.next = 2;
  66. return _regenerator.default.awrap(fetchSwaggerJson());
  67. case 2:
  68. swaggerJSON = _context2.sent;
  69. _context2.next = 5;
  70. return _regenerator.default.awrap(getPathByTag(swaggerJSON));
  71. case 5:
  72. _await$getPathByTag = _context2.sent;
  73. pathDetails = _await$getPathByTag.pathDetails;
  74. data = [];
  75. Object.keys(pathDetails).forEach(function (x) {
  76. var item = pathDetails[x];
  77. var endpoint = {
  78. method: item.method.toUpperCase(),
  79. group: item.data.tags[0],
  80. name: x,
  81. url: item.pathName.split('{').join(':').split('}').join('')
  82. };
  83. data.push(endpoint);
  84. });
  85. return _context2.abrupt("return", data);
  86. case 10:
  87. case "end":
  88. return _context2.stop();
  89. }
  90. }
  91. }, null, null, null, Promise);
  92. };
  93. var isSemanticVersionLarger = function (version1, version2) {
  94. var _version1$split = version1.split('-'),
  95. _version1$split2 = (0, _slicedToArray2.default)(_version1$split, 2),
  96. version1Main = _version1$split2[0],
  97. version1Pre = _version1$split2[1];
  98. var version1Arr = version1Main.split('.').map(function (s) {
  99. return Number(s);
  100. });
  101. var _version2$split = version2.split('-'),
  102. _version2$split2 = (0, _slicedToArray2.default)(_version2$split, 2),
  103. version2Main = _version2$split2[0],
  104. version2Pre = _version2$split2[1];
  105. var version2Arr = version2Main.split('.').map(function (s) {
  106. return Number(s);
  107. });
  108. for (var index = 0; index < 3; index++) {
  109. var compare1 = version1Arr[index];
  110. var compare2 = version2Arr[index];
  111. if (compare1 > compare2) return true;
  112. if (compare1 < compare2) return false;
  113. if (!Number.isNaN(compare1) && Number.isNaN(compare2)) return true;
  114. if (Number.isNaN(compare1) && !Number.isNaN(compare2)) return false;
  115. }
  116. if (version1Pre && version2Pre) {
  117. var _version1Pre$split$, _version2Pre$split$;
  118. var version1PreNumber = (_version1Pre$split$ = version1Pre.split('.')[1]) != null ? _version1Pre$split$ : 0;
  119. var version2PreNumber = (_version2Pre$split$ = version2Pre.split('.')[1]) != null ? _version2Pre$split$ : 0;
  120. return version1PreNumber > version2PreNumber;
  121. }
  122. if (version2Pre) {
  123. return true;
  124. }
  125. return false;
  126. };
  127. var checkForSdkUpdates = function () {
  128. var _await$RESTController2, response, latestVersion, installedVersion;
  129. return _regenerator.default.async(function (_context3) {
  130. while (1) {
  131. switch (_context3.prev = _context3.next) {
  132. case 0:
  133. _context3.prev = 0;
  134. _context3.next = 3;
  135. return _regenerator.default.awrap(_RESTController.default.ajax('GET', 'https://www.unpkg.com/moralis/package.json'));
  136. case 3:
  137. _await$RESTController2 = _context3.sent;
  138. response = _await$RESTController2.response;
  139. latestVersion = response.version;
  140. installedVersion = "1.5.9";
  141. if (isSemanticVersionLarger(latestVersion, installedVersion)) console.warn("You are not using the latest version of the SDK. Please update it as soon as possible to enjoy the newest features. Most recent version: " + latestVersion);
  142. _context3.next = 12;
  143. break;
  144. case 10:
  145. _context3.prev = 10;
  146. _context3.t0 = _context3["catch"](0);
  147. case 12:
  148. case "end":
  149. return _context3.stop();
  150. }
  151. }
  152. }, null, null, [[0, 10]], Promise);
  153. };
  154. var trackEvent = function (name, subdomain, options) {
  155. var _await$RESTController3, response;
  156. return _regenerator.default.async(function (_context4) {
  157. while (1) {
  158. switch (_context4.prev = _context4.next) {
  159. case 0:
  160. _context4.prev = 0;
  161. _context4.next = 3;
  162. return _regenerator.default.awrap(_RESTController.default.ajax('POST', 'https://internal-api.moralis.io/api/functions/trackEvent', JSON.stringify({
  163. subdomain: subdomain,
  164. event: name,
  165. options: options
  166. }), {
  167. Accept: 'application/json',
  168. 'Content-Type': 'application/json'
  169. }));
  170. case 3:
  171. _await$RESTController3 = _context4.sent;
  172. response = _await$RESTController3.response;
  173. return _context4.abrupt("return", response.result);
  174. case 8:
  175. _context4.prev = 8;
  176. _context4.t0 = _context4["catch"](0);
  177. case 10:
  178. case "end":
  179. return _context4.stop();
  180. }
  181. }
  182. }, null, null, [[0, 8]], Promise);
  183. };
  184. var validServerUrlRegex = /^https?:\/\/(?<subdomain>\w+\.\w+\.\w+)(:\d{4})?\/server\/?$/;
  185. var validateServerUrl = function (serverUrl) {
  186. return validServerUrlRegex.test(serverUrl);
  187. };
  188. var getSubdomain = function (serverUrl) {
  189. var _match$groups$subdoma, _match$groups;
  190. var isValidServerUrl = validateServerUrl(serverUrl);
  191. if (!isValidServerUrl) {
  192. return null;
  193. }
  194. var match = validServerUrlRegex.exec(serverUrl);
  195. return (_match$groups$subdoma = match == null ? void 0 : (_match$groups = match.groups) == null ? void 0 : _match$groups.subdomain) != null ? _match$groups$subdoma : null;
  196. };
  197. module.exports = {
  198. fetchSwaggerJson: fetchSwaggerJson,
  199. getPathByTag: getPathByTag,
  200. fetchEndpoints: fetchEndpoints,
  201. checkForSdkUpdates: checkForSdkUpdates,
  202. trackEvent: trackEvent,
  203. TrackingEventName: TrackingEventName,
  204. getSubdomain: getSubdomain
  205. };