utils.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. "use strict";
  2. var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
  3. var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
  4. var _reduceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/reduce");
  5. var _Object$keys2 = require("@babel/runtime-corejs3/core-js-stable/object/keys");
  6. var _Object$create = require("@babel/runtime-corejs3/core-js-stable/object/create");
  7. var _Symbol$replace = require("@babel/runtime-corejs3/core-js-stable/symbol/replace");
  8. var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/slice");
  9. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  10. var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
  11. var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/inherits"));
  12. var _setPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/setPrototypeOf"));
  13. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
  14. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
  15. var _freeze = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/freeze"));
  16. var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
  17. var _entries = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/entries"));
  18. var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
  19. var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
  20. var _isNan = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/number/is-nan"));
  21. var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/json/stringify"));
  22. var _RESTController = _interopRequireDefault(require("./RESTController"));
  23. function _wrapRegExp() {
  24. _wrapRegExp = function (re, groups) {
  25. return new BabelRegExp(re, void 0, groups);
  26. };
  27. var _super = RegExp.prototype,
  28. _groups = new _WeakMap();
  29. function BabelRegExp(re, flags, groups) {
  30. var _this = new RegExp(re, flags);
  31. return _groups.set(_this, groups || _groups.get(re)), (0, _setPrototypeOf2.default)(_this, BabelRegExp.prototype);
  32. }
  33. function buildGroups(result, re) {
  34. var _context10;
  35. var g = _groups.get(re);
  36. return _reduceInstanceProperty(_context10 = _Object$keys2(g)).call(_context10, function (groups, name) {
  37. return groups[name] = result[g[name]], groups;
  38. }, _Object$create(null));
  39. }
  40. return (0, _inherits2.default)(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (str) {
  41. var result = _super.exec.call(this, str);
  42. return result && (result.groups = buildGroups(result, this)), result;
  43. }, BabelRegExp.prototype[_Symbol$replace] = function (str, substitution) {
  44. if ("string" == typeof substitution) {
  45. var groups = _groups.get(this);
  46. return _super[_Symbol$replace].call(this, str, substitution.replace(/\$<([^>]+)>/g, function (_, name) {
  47. return "$" + groups[name];
  48. }));
  49. }
  50. if ("function" == typeof substitution) {
  51. var _this = this;
  52. return _super[_Symbol$replace].call(this, str, function () {
  53. var args = arguments;
  54. return "object" != _typeof(args[args.length - 1]) && (args = _sliceInstanceProperty([]).call(args)).push(buildGroups(args, _this)), substitution.apply(this, args);
  55. });
  56. }
  57. return _super[_Symbol$replace].call(this, str, substitution);
  58. }, _wrapRegExp.apply(this, arguments);
  59. }
  60. var DEEP_INDEX_API_HOST = 'deep-index.moralis.io';
  61. var DEEP_INDEX_SWAGGER_PATH = '/api-docs/v2/swagger.json';
  62. var TrackingEventName = (0, _freeze.default)({
  63. START_FUNCTION: 'Moralis SDK start'
  64. });
  65. var fetchSwaggerJson = /*#__PURE__*/function () {
  66. var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
  67. var _yield$RESTController, response;
  68. return _regenerator.default.wrap(function (_context) {
  69. while (1) {
  70. switch (_context.prev = _context.next) {
  71. case 0:
  72. _context.next = 2;
  73. return _RESTController.default.ajax('GET', "https://".concat(DEEP_INDEX_API_HOST).concat(DEEP_INDEX_SWAGGER_PATH));
  74. case 2:
  75. _yield$RESTController = _context.sent;
  76. response = _yield$RESTController.response;
  77. return _context.abrupt("return", response);
  78. case 5:
  79. case "end":
  80. return _context.stop();
  81. }
  82. }
  83. }, _callee);
  84. }));
  85. return function () {
  86. return _ref.apply(this, arguments);
  87. };
  88. }();
  89. var getPathByTag = function (swaggerJSON) {
  90. var _context2;
  91. var pathByTag = {};
  92. var pathDetails = {};
  93. (0, _map.default)(_context2 = (0, _entries.default)(swaggerJSON.paths)).call(_context2, function (_ref2) {
  94. var _context3;
  95. var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
  96. pathName = _ref3[0],
  97. requestData = _ref3[1];
  98. return (0, _forEach.default)(_context3 = (0, _entries.default)(requestData)).call(_context3, function (_ref4) {
  99. var _ref5 = (0, _slicedToArray2.default)(_ref4, 2),
  100. method = _ref5[0],
  101. data = _ref5[1];
  102. var tags = data.tags;
  103. if (tags.length > 0) {
  104. if (!pathByTag[tags[0]]) {
  105. pathByTag[tags[0]] = [];
  106. }
  107. pathByTag[tags[0]].push(data.operationId);
  108. pathDetails[data.operationId] = {
  109. method: method,
  110. pathName: pathName,
  111. data: data
  112. };
  113. }
  114. });
  115. });
  116. return {
  117. pathByTag: pathByTag,
  118. pathDetails: pathDetails
  119. };
  120. };
  121. var fetchEndpoints = /*#__PURE__*/function () {
  122. var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
  123. var _context4;
  124. var swaggerJSON, _yield$getPathByTag, pathDetails, data;
  125. return _regenerator.default.wrap(function (_context5) {
  126. while (1) {
  127. switch (_context5.prev = _context5.next) {
  128. case 0:
  129. _context5.next = 2;
  130. return fetchSwaggerJson();
  131. case 2:
  132. swaggerJSON = _context5.sent;
  133. _context5.next = 5;
  134. return getPathByTag(swaggerJSON);
  135. case 5:
  136. _yield$getPathByTag = _context5.sent;
  137. pathDetails = _yield$getPathByTag.pathDetails;
  138. data = [];
  139. (0, _forEach.default)(_context4 = (0, _keys.default)(pathDetails)).call(_context4, function (x) {
  140. var item = pathDetails[x];
  141. var endpoint = {
  142. method: item.method.toUpperCase(),
  143. group: item.data.tags[0],
  144. name: x,
  145. url: item.pathName.split('{').join(':').split('}').join('')
  146. };
  147. data.push(endpoint);
  148. });
  149. return _context5.abrupt("return", data);
  150. case 10:
  151. case "end":
  152. return _context5.stop();
  153. }
  154. }
  155. }, _callee2);
  156. }));
  157. return function () {
  158. return _ref6.apply(this, arguments);
  159. };
  160. }();
  161. /**
  162. * Compares if the semantic version of version1 is larger than version2
  163. */
  164. var isSemanticVersionLarger = function (version1, version2) {
  165. var _context6, _context7;
  166. var _version1$split = version1.split('-'),
  167. _version1$split2 = (0, _slicedToArray2.default)(_version1$split, 2),
  168. version1Main = _version1$split2[0],
  169. version1Pre = _version1$split2[1];
  170. var version1Arr = (0, _map.default)(_context6 = version1Main.split('.')).call(_context6, function (s) {
  171. return Number(s);
  172. });
  173. var _version2$split = version2.split('-'),
  174. _version2$split2 = (0, _slicedToArray2.default)(_version2$split, 2),
  175. version2Main = _version2$split2[0],
  176. version2Pre = _version2$split2[1];
  177. var version2Arr = (0, _map.default)(_context7 = version2Main.split('.')).call(_context7, function (s) {
  178. return Number(s);
  179. });
  180. for (var index = 0; index < 3; index++) {
  181. var compare1 = version1Arr[index];
  182. var compare2 = version2Arr[index];
  183. if (compare1 > compare2) return true;
  184. if (compare1 < compare2) return false;
  185. if (!(0, _isNan.default)(compare1) && (0, _isNan.default)(compare2)) return true;
  186. if ((0, _isNan.default)(compare1) && !(0, _isNan.default)(compare2)) return false;
  187. } // Compare pre-releasees if main versions are the same
  188. if (version1Pre && version2Pre) {
  189. var _version1Pre$split$, _version2Pre$split$;
  190. var version1PreNumber = (_version1Pre$split$ = version1Pre.split('.')[1]) !== null && _version1Pre$split$ !== void 0 ? _version1Pre$split$ : 0;
  191. var version2PreNumber = (_version2Pre$split$ = version2Pre.split('.')[1]) !== null && _version2Pre$split$ !== void 0 ? _version2Pre$split$ : 0;
  192. return version1PreNumber > version2PreNumber;
  193. } // If version2 is a pre-release and version1 is not, then version 1 is newer
  194. if (version2Pre) {
  195. return true;
  196. }
  197. return false;
  198. };
  199. var checkForSdkUpdates = /*#__PURE__*/function () {
  200. var _ref7 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
  201. var _yield$RESTController2, response, latestVersion, installedVersion;
  202. return _regenerator.default.wrap(function (_context8) {
  203. while (1) {
  204. switch (_context8.prev = _context8.next) {
  205. case 0:
  206. _context8.prev = 0;
  207. _context8.next = 3;
  208. return _RESTController.default.ajax('GET', 'https://www.unpkg.com/moralis/package.json');
  209. case 3:
  210. _yield$RESTController2 = _context8.sent;
  211. response = _yield$RESTController2.response;
  212. latestVersion = response.version;
  213. installedVersion = "1.5.9";
  214. if (isSemanticVersionLarger(latestVersion, installedVersion)) // eslint-disable-next-line no-console
  215. 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: ".concat(latestVersion));
  216. _context8.next = 12;
  217. break;
  218. case 10:
  219. _context8.prev = 10;
  220. _context8.t0 = _context8["catch"](0);
  221. case 12:
  222. case "end":
  223. return _context8.stop();
  224. }
  225. }
  226. }, _callee3, null, [[0, 10]]);
  227. }));
  228. return function () {
  229. return _ref7.apply(this, arguments);
  230. };
  231. }();
  232. var trackEvent = /*#__PURE__*/function () {
  233. var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(name, subdomain, options) {
  234. var _yield$RESTController3, response;
  235. return _regenerator.default.wrap(function (_context9) {
  236. while (1) {
  237. switch (_context9.prev = _context9.next) {
  238. case 0:
  239. _context9.prev = 0;
  240. _context9.next = 3;
  241. return _RESTController.default.ajax('POST', 'https://internal-api.moralis.io/api/functions/trackEvent', (0, _stringify.default)({
  242. subdomain: subdomain,
  243. event: name,
  244. options: options
  245. }), {
  246. Accept: 'application/json',
  247. 'Content-Type': 'application/json'
  248. });
  249. case 3:
  250. _yield$RESTController3 = _context9.sent;
  251. response = _yield$RESTController3.response;
  252. return _context9.abrupt("return", response.result);
  253. case 8:
  254. _context9.prev = 8;
  255. _context9.t0 = _context9["catch"](0);
  256. case 10:
  257. case "end":
  258. return _context9.stop();
  259. }
  260. }
  261. }, _callee4, null, [[0, 8]]);
  262. }));
  263. return function () {
  264. return _ref8.apply(this, arguments);
  265. };
  266. }();
  267. /**
  268. * Regex to validate serverUrl, for example: https://xxxxxxxxxxxx.yyyyyyyyyy.zzzzzz:1234/server
  269. * It's very generous and doesn't assume the value of domain, subdomain and port, it only checks if we can extract
  270. * a subddomain
  271. */
  272. var validServerUrlRegex = /*#__PURE__*/_wrapRegExp(/^https?:\/\/([0-9A-Z_a-z]+\.[0-9A-Z_a-z]+\.[0-9A-Z_a-z]+)(:[0-9]{4})?\/server\/?$/, {
  273. subdomain: 1
  274. });
  275. var validateServerUrl = function (serverUrl) {
  276. return validServerUrlRegex.test(serverUrl);
  277. };
  278. var getSubdomain = function (serverUrl) {
  279. var _match$groups$subdoma, _match$groups;
  280. var isValidServerUrl = validateServerUrl(serverUrl);
  281. if (!isValidServerUrl) {
  282. return null;
  283. }
  284. var match = validServerUrlRegex.exec(serverUrl);
  285. return (_match$groups$subdoma = match === null || match === void 0 ? void 0 : (_match$groups = match.groups) === null || _match$groups === void 0 ? void 0 : _match$groups.subdomain) !== null && _match$groups$subdoma !== void 0 ? _match$groups$subdoma : null;
  286. };
  287. module.exports = {
  288. fetchSwaggerJson: fetchSwaggerJson,
  289. getPathByTag: getPathByTag,
  290. fetchEndpoints: fetchEndpoints,
  291. checkForSdkUpdates: checkForSdkUpdates,
  292. trackEvent: trackEvent,
  293. TrackingEventName: TrackingEventName,
  294. getSubdomain: getSubdomain
  295. };