@nlabs/reaktor 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/lib/actions/conversations.d.ts +14 -0
  2. package/lib/actions/conversations.js +333 -0
  3. package/lib/actions/dynamodb.js +155 -0
  4. package/lib/actions/email.js +177 -0
  5. package/lib/actions/files.js +319 -0
  6. package/lib/{data → actions}/groups.d.ts +4 -3
  7. package/lib/actions/groups.js +282 -0
  8. package/lib/actions/images.d.ts +22 -0
  9. package/lib/actions/images.js +682 -0
  10. package/lib/actions/index.js +40 -0
  11. package/lib/{data → actions}/ios.d.ts +2 -1
  12. package/lib/actions/ios.js +179 -0
  13. package/lib/actions/locations.js +112 -0
  14. package/lib/actions/messages.d.ts +13 -0
  15. package/lib/actions/messages.js +216 -0
  16. package/lib/{data → actions}/notifications.d.ts +2 -2
  17. package/lib/actions/notifications.js +63 -0
  18. package/lib/{data → actions}/payments.d.ts +2 -2
  19. package/lib/actions/payments.js +491 -0
  20. package/lib/actions/posts.d.ts +19 -0
  21. package/lib/actions/posts.js +538 -0
  22. package/lib/actions/reactions.d.ts +30 -0
  23. package/lib/actions/reactions.js +340 -0
  24. package/lib/{data → actions}/s3.d.ts +1 -1
  25. package/lib/actions/s3.js +122 -0
  26. package/lib/{data → actions}/search.d.ts +2 -2
  27. package/lib/actions/search.js +99 -0
  28. package/lib/actions/sms.js +76 -0
  29. package/lib/actions/statistics.d.ts +2 -0
  30. package/lib/actions/statistics.js +63 -0
  31. package/lib/actions/subscription.js +209 -0
  32. package/lib/actions/tags.d.ts +26 -0
  33. package/lib/actions/tags.js +340 -0
  34. package/lib/actions/users.d.ts +44 -0
  35. package/lib/actions/users.js +571 -0
  36. package/lib/{data → actions}/websockets.d.ts +1 -1
  37. package/lib/actions/websockets.js +156 -0
  38. package/lib/config.d.ts +2 -3
  39. package/lib/config.js +116 -149
  40. package/lib/index.d.ts +1 -1
  41. package/lib/index.js +23 -45
  42. package/lib/templates/email/layout.d.ts +2 -0
  43. package/lib/templates/email/layout.js +292 -0
  44. package/lib/templates/email/passwordForgot.d.ts +2 -0
  45. package/lib/templates/email/passwordForgot.js +28 -0
  46. package/lib/templates/email/passwordRecovery.d.ts +2 -0
  47. package/lib/templates/email/passwordRecovery.js +25 -0
  48. package/lib/templates/email/verifyEmail.d.ts +2 -0
  49. package/lib/templates/email/verifyEmail.js +28 -0
  50. package/lib/templates/email/welcome.d.ts +2 -0
  51. package/lib/templates/email/welcome.js +28 -0
  52. package/lib/templates/sms/passwordForgot.d.ts +2 -0
  53. package/lib/templates/sms/passwordForgot.js +14 -0
  54. package/lib/templates/sms/passwordRecovery.d.ts +2 -0
  55. package/lib/templates/sms/passwordRecovery.js +14 -0
  56. package/lib/templates/sms/verifyEmail.d.ts +2 -0
  57. package/lib/templates/sms/verifyEmail.js +14 -0
  58. package/lib/templates/sms/verifyPhone.d.ts +2 -0
  59. package/lib/templates/sms/verifyPhone.js +14 -0
  60. package/lib/templates/sms/welcome.d.ts +2 -0
  61. package/lib/templates/sms/welcome.js +14 -0
  62. package/lib/types/apps.d.ts +2 -2
  63. package/lib/types/apps.js +4 -2
  64. package/lib/types/arangodb.js +4 -2
  65. package/lib/types/auth.d.ts +4 -8
  66. package/lib/types/auth.js +4 -2
  67. package/lib/types/conversations.d.ts +3 -3
  68. package/lib/types/conversations.js +4 -2
  69. package/lib/types/email.d.ts +2 -2
  70. package/lib/types/email.js +4 -2
  71. package/lib/types/files.js +4 -2
  72. package/lib/types/google.js +4 -2
  73. package/lib/types/groups.d.ts +2 -1
  74. package/lib/types/groups.js +4 -2
  75. package/lib/types/images.d.ts +8 -5
  76. package/lib/types/images.js +4 -2
  77. package/lib/types/index.d.ts +1 -1
  78. package/lib/types/index.js +37 -227
  79. package/lib/types/locations.js +4 -2
  80. package/lib/types/messages.d.ts +12 -2
  81. package/lib/types/messages.js +4 -2
  82. package/lib/types/notifications.d.ts +2 -2
  83. package/lib/types/notifications.js +4 -2
  84. package/lib/types/payments.js +4 -2
  85. package/lib/types/posts.d.ts +18 -1
  86. package/lib/types/posts.js +4 -2
  87. package/lib/types/statistics.d.ts +3 -0
  88. package/lib/types/statistics.js +4 -0
  89. package/lib/types/tags.d.ts +6 -0
  90. package/lib/types/tags.js +4 -2
  91. package/lib/types/users.d.ts +15 -11
  92. package/lib/types/users.js +4 -2
  93. package/lib/utils/analytics.d.ts +7 -0
  94. package/lib/utils/analytics.js +101 -77
  95. package/lib/utils/arangodb.d.ts +1 -1
  96. package/lib/utils/arangodb.js +93 -114
  97. package/lib/utils/auth.js +58 -55
  98. package/lib/utils/graphql.js +38 -19
  99. package/lib/utils/index.d.ts +1 -1
  100. package/lib/utils/index.js +26 -84
  101. package/lib/utils/objects.js +44 -53
  102. package/lib/utils/session.d.ts +18 -0
  103. package/lib/utils/session.js +42 -0
  104. package/package.json +32 -30
  105. package/lib/data/conversations.d.ts +0 -8
  106. package/lib/data/conversations.js +0 -311
  107. package/lib/data/dynamodb.js +0 -206
  108. package/lib/data/email.js +0 -222
  109. package/lib/data/files.js +0 -525
  110. package/lib/data/groups.js +0 -435
  111. package/lib/data/images.d.ts +0 -22
  112. package/lib/data/images.js +0 -1051
  113. package/lib/data/index.js +0 -266
  114. package/lib/data/ios.js +0 -355
  115. package/lib/data/locations.js +0 -172
  116. package/lib/data/messages.d.ts +0 -9
  117. package/lib/data/messages.js +0 -299
  118. package/lib/data/notifications.js +0 -59
  119. package/lib/data/payments.js +0 -771
  120. package/lib/data/posts.d.ts +0 -23
  121. package/lib/data/posts.js +0 -766
  122. package/lib/data/reactions.d.ts +0 -14
  123. package/lib/data/reactions.js +0 -529
  124. package/lib/data/s3.js +0 -155
  125. package/lib/data/search.js +0 -155
  126. package/lib/data/sms.js +0 -83
  127. package/lib/data/subscription.js +0 -337
  128. package/lib/data/tags.d.ts +0 -14
  129. package/lib/data/tags.js +0 -397
  130. package/lib/data/users.d.ts +0 -20
  131. package/lib/data/users.js +0 -470
  132. package/lib/data/websockets.js +0 -250
  133. package/lib/types/reactions.d.ts +0 -17
  134. package/lib/types/reactions.js +0 -2
  135. package/lib/utils/redis.d.ts +0 -1
  136. package/lib/utils/redis.js +0 -36
  137. package/templates/email/layout.html +0 -279
  138. package/templates/email/passwordForgot.html +0 -15
  139. package/templates/email/passwordRecovery.html +0 -12
  140. package/templates/email/verifyEmail.html +0 -15
  141. package/templates/sms/passwordForgot.txt +0 -1
  142. package/templates/sms/passwordRecovery.txt +0 -1
  143. package/templates/sms/verifyEmail.txt +0 -1
  144. package/templates/sms/verifyPhone.txt +0 -1
  145. /package/lib/{data → actions}/dynamodb.d.ts +0 -0
  146. /package/lib/{data → actions}/email.d.ts +0 -0
  147. /package/lib/{data → actions}/files.d.ts +0 -0
  148. /package/lib/{data → actions}/index.d.ts +0 -0
  149. /package/lib/{data → actions}/locations.d.ts +0 -0
  150. /package/lib/{data → actions}/sms.d.ts +0 -0
  151. /package/lib/{data → actions}/subscription.d.ts +0 -0
@@ -0,0 +1,99 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
25
+ var __export = (target, all) => {
26
+ __markAsModule(target);
27
+ for (var name in all)
28
+ __defProp(target, name, { get: all[name], enumerable: true });
29
+ };
30
+ var __reExport = (target, module2, desc) => {
31
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
32
+ for (let key of __getOwnPropNames(module2))
33
+ if (!__hasOwnProp.call(target, key) && key !== "default")
34
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
35
+ }
36
+ return target;
37
+ };
38
+ var __toModule = (module2) => {
39
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
40
+ };
41
+ __export(exports, {
42
+ getSearchList: () => getSearchList
43
+ });
44
+ var import_arangojs = __toModule(require("arangojs"));
45
+ var import_flatten = __toModule(require("lodash/flatten"));
46
+ var import_uniqBy = __toModule(require("lodash/uniqBy"));
47
+ var import_utils = __toModule(require("../utils"));
48
+ var import_users2 = __toModule(require("./users"));
49
+ const eventCategory = "search";
50
+ const getSearchList = (context, query, from, to) => {
51
+ const action = "getList";
52
+ const { database } = context;
53
+ const isString = true;
54
+ if (isString) {
55
+ const fields = [
56
+ { collection: "users", field: "first" },
57
+ { collection: "users", field: "last" },
58
+ { collection: "users", field: "email" },
59
+ { collection: "users", field: "username" },
60
+ { collection: "users", field: "name" }
61
+ ];
62
+ return Promise.all(fields.map((obj) => {
63
+ const qry = `prefix:${query}`;
64
+ const userQry = import_arangojs.aql`FOR u IN FULLTEXT(${obj.collection}, ${obj.field}, ${qry}, 50) RETURN u`;
65
+ return database.query(userQry).then((cursor) => cursor.all());
66
+ })).then((results) => {
67
+ const list = (0, import_uniqBy.default)((0, import_flatten.default)(results), "_key");
68
+ return list.map((item) => {
69
+ const { _id: itemId, name: itemName } = item;
70
+ const collectionIdList = itemId.split("/");
71
+ const collection = collectionIdList[0];
72
+ const name = collection === "users" ? (0, import_users2.getDisplayName)(item) : itemName;
73
+ return __spreadProps(__spreadValues({}, item), { name });
74
+ });
75
+ });
76
+ }
77
+ const limit = (0, import_utils.getLimit)(from, to);
78
+ const aqlQry = `FOR u IN users
79
+ FILTER u.phone == "${query}"
80
+ ${limit.aql}
81
+ RETURN u`;
82
+ return database.query(aqlQry).then((cursor) => cursor.all()).then((list = []) => list.map((item = {}) => {
83
+ const { _id: itemId, name: itemName } = item;
84
+ const collectionIdList = itemId.split("/");
85
+ const collection = collectionIdList[0];
86
+ const name = collection === "users" ? (0, import_users2.getDisplayName)(item) : itemName;
87
+ return __spreadProps(__spreadValues({}, item), { name });
88
+ })).catch((error) => (0, import_utils.logException)({
89
+ action,
90
+ category: eventCategory,
91
+ label: "db_error",
92
+ value: error.message
93
+ }, context).then(() => null));
94
+ };
95
+ // Annotate the CommonJS export names for ESM import in node:
96
+ 0 && (module.exports = {
97
+ getSearchList
98
+ });
99
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvc2VhcmNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gvdW5pcUJ5JztcblxuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi90eXBlcy91c2Vycyc7XG5pbXBvcnQge2dldExpbWl0LCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7Z2V0RGlzcGxheU5hbWV9IGZyb20gJy4vdXNlcnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnc2VhcmNoJztcblxuZXhwb3J0IGNvbnN0IGdldFNlYXJjaExpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcXVlcnk6IHN0cmluZywgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTxVc2VyW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBpc1N0cmluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgaWYoaXNTdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZHM6IGFueVtdID0gW1xuICAgICAge2NvbGxlY3Rpb246ICd1c2VycycsIGZpZWxkOiAnZmlyc3QnfSxcbiAgICAgIHtjb2xsZWN0aW9uOiAndXNlcnMnLCBmaWVsZDogJ2xhc3QnfSxcbiAgICAgIHtjb2xsZWN0aW9uOiAndXNlcnMnLCBmaWVsZDogJ2VtYWlsJ30sXG4gICAgICB7Y29sbGVjdGlvbjogJ3VzZXJzJywgZmllbGQ6ICd1c2VybmFtZSd9LFxuICAgICAge2NvbGxlY3Rpb246ICd1c2VycycsIGZpZWxkOiAnbmFtZSd9XG4gICAgXTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChmaWVsZHMubWFwKChvYmopID0+IHtcbiAgICAgIGNvbnN0IHFyeTogc3RyaW5nID0gYHByZWZpeDoke3F1ZXJ5fWA7XG4gICAgICBjb25zdCB1c2VyUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSBJTiBGVUxMVEVYVCgke29iai5jb2xsZWN0aW9ufSwgJHtvYmouZmllbGR9LCAke3FyeX0sIDUwKSBSRVRVUk4gdWA7XG4gICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkodXNlclFyeSkudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgICB9KSlcbiAgICAgIC50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB1bmlxQnkoZmxhdHRlbihyZXN1bHRzKSwgJ19rZXknKTtcblxuICAgICAgICByZXR1cm4gbGlzdC5tYXAoKGl0ZW06IFVzZXIpID0+IHtcbiAgICAgICAgICBjb25zdCB7X2lkOiBpdGVtSWQsIG5hbWU6IGl0ZW1OYW1lfSA9IGl0ZW07XG4gICAgICAgICAgY29uc3QgY29sbGVjdGlvbklkTGlzdDogc3RyaW5nW10gPSBpdGVtSWQuc3BsaXQoJy8nKTtcbiAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uOiBzdHJpbmcgPSBjb2xsZWN0aW9uSWRMaXN0WzBdO1xuICAgICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGNvbGxlY3Rpb24gPT09ICd1c2VycycgPyBnZXREaXNwbGF5TmFtZShpdGVtKSA6IGl0ZW1OYW1lO1xuXG4gICAgICAgICAgcmV0dXJuIHsuLi5pdGVtLCBuYW1lfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICBGSUxURVIgdS5waG9uZSA9PSBcIiR7cXVlcnl9XCJcbiAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3Q6IFVzZXJbXSA9IFtdKSA9PiBsaXN0Lm1hcCgoaXRlbSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7X2lkOiBpdGVtSWQsIG5hbWU6IGl0ZW1OYW1lfSA9IGl0ZW07XG4gICAgICBjb25zdCBjb2xsZWN0aW9uSWRMaXN0OiBzdHJpbmdbXSA9IGl0ZW1JZC5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgY29sbGVjdGlvbjogc3RyaW5nID0gY29sbGVjdGlvbklkTGlzdFswXTtcbiAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGNvbGxlY3Rpb24gPT09ICd1c2VycycgPyBnZXREaXNwbGF5TmFtZShpdGVtKSA6IGl0ZW1OYW1lO1xuXG4gICAgICByZXR1cm4gey4uLml0ZW0sIG5hbWV9O1xuICAgIH0pKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJyxcbiAgICAgIHZhbHVlOiBlcnJvci5tZXNzYWdlXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUlBLHNCQUFrQjtBQUdsQixxQkFBb0I7QUFDcEIsb0JBQW1CO0FBS25CLG1CQUFxQztBQUNyQyxvQkFBNkI7QUFFN0IsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSxnQkFBZ0IsQ0FBQyxTQUFxQixPQUFlLE1BQWMsT0FBZ0M7QUFDOUcsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsYUFBWTtBQUNuQixRQUFNLFdBQW9CO0FBRTFCLE1BQUcsVUFBVTtBQUNYLFVBQU0sU0FBZ0I7QUFBQSxNQUNwQixFQUFDLFlBQVksU0FBUyxPQUFPO0FBQUEsTUFDN0IsRUFBQyxZQUFZLFNBQVMsT0FBTztBQUFBLE1BQzdCLEVBQUMsWUFBWSxTQUFTLE9BQU87QUFBQSxNQUM3QixFQUFDLFlBQVksU0FBUyxPQUFPO0FBQUEsTUFDN0IsRUFBQyxZQUFZLFNBQVMsT0FBTztBQUFBO0FBRy9CLFdBQU8sUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVE7QUFDckMsWUFBTSxNQUFjLFVBQVU7QUFDOUIsWUFBTSxVQUFvQix3Q0FBd0IsSUFBSSxlQUFlLElBQUksVUFBVTtBQUNuRixhQUFPLFNBQVMsTUFBTSxTQUFTLEtBQUssQ0FBQyxXQUF3QixPQUFPO0FBQUEsUUFFbkUsS0FBSyxDQUFDLFlBQVk7QUFDakIsWUFBTSxPQUFPLDJCQUFPLDRCQUFRLFVBQVU7QUFFdEMsYUFBTyxLQUFLLElBQUksQ0FBQyxTQUFlO0FBQzlCLGNBQU0sRUFBQyxLQUFLLFFBQVEsTUFBTSxhQUFZO0FBQ3RDLGNBQU0sbUJBQTZCLE9BQU8sTUFBTTtBQUNoRCxjQUFNLGFBQXFCLGlCQUFpQjtBQUM1QyxjQUFNLE9BQWUsZUFBZSxVQUFVLGtDQUFlLFFBQVE7QUFFckUsZUFBTyxpQ0FBSSxPQUFKLEVBQVU7QUFBQTtBQUFBO0FBQUE7QUFLekIsUUFBTSxRQUF1QiwyQkFBUyxNQUFNO0FBQzVDLFFBQU0sU0FBaUI7QUFBQSw2QkFDSTtBQUFBLFVBQ25CLE1BQU07QUFBQTtBQUdkLFNBQU8sU0FBUyxNQUFNLFFBQ25CLEtBQUssQ0FBQyxXQUF3QixPQUFPLE9BQ3JDLEtBQUssQ0FBQyxPQUFlLE9BQU8sS0FBSyxJQUFJLENBQUMsT0FBTyxPQUFPO0FBQ25ELFVBQU0sRUFBQyxLQUFLLFFBQVEsTUFBTSxhQUFZO0FBQ3RDLFVBQU0sbUJBQTZCLE9BQU8sTUFBTTtBQUNoRCxVQUFNLGFBQXFCLGlCQUFpQjtBQUM1QyxVQUFNLE9BQWUsZUFBZSxVQUFVLGtDQUFlLFFBQVE7QUFFckUsV0FBTyxpQ0FBSSxPQUFKLEVBQVU7QUFBQSxNQUVsQixNQUFNLENBQUMsVUFBaUIsK0JBQWE7QUFBQSxJQUNwQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLElBQ1AsT0FBTyxNQUFNO0FBQUEsS0FDWixTQUFTLEtBQUssTUFBTTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,76 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __export = (target, all) => {
9
+ __markAsModule(target);
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __reExport = (target, module2, desc) => {
14
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
15
+ for (let key of __getOwnPropNames(module2))
16
+ if (!__hasOwnProp.call(target, key) && key !== "default")
17
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
18
+ }
19
+ return target;
20
+ };
21
+ var __toModule = (module2) => {
22
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
23
+ };
24
+ __export(exports, {
25
+ sendSms: () => sendSms,
26
+ sendSmsTemplate: () => sendSmsTemplate
27
+ });
28
+ var import_utils = __toModule(require("@nlabs/utils"));
29
+ var import_fs = __toModule(require("fs"));
30
+ var import_twilio = __toModule(require("twilio"));
31
+ var import_config = __toModule(require("../config"));
32
+ var import_email = __toModule(require("./email"));
33
+ const sendSms = (params) => {
34
+ const {
35
+ app = {},
36
+ content,
37
+ user = {}
38
+ } = params;
39
+ const country = user.country || "US";
40
+ const phone = (0, import_utils.parsePhone)(user.phone, country);
41
+ const templateContent = (0, import_email.appTemplate)(app, content);
42
+ const twilio = (0, import_twilio.default)(import_config.Config.get("twilio.sid"), import_config.Config.get("twilio.token"));
43
+ const cfg = {
44
+ body: templateContent,
45
+ from: import_config.Config.get("twilio.number"),
46
+ to: phone
47
+ };
48
+ return new Promise((resolve, reject) => {
49
+ twilio.sendMessage(cfg, (error, data) => {
50
+ if (error) {
51
+ reject(new Error(error.error_message));
52
+ } else {
53
+ resolve(data);
54
+ }
55
+ });
56
+ });
57
+ };
58
+ const sendSmsTemplate = (templateName, smsParams) => {
59
+ const { app, user, vars } = smsParams;
60
+ try {
61
+ const data = import_fs.default.readFileSync(`./templates/sms/${templateName}.txt`, "utf8");
62
+ const text = (0, import_email.appTemplate)(app, data, vars);
63
+ const params = { app, text, user };
64
+ return sendSms(params).then((res) => res.status === "queued").catch((error) => {
65
+ throw error;
66
+ });
67
+ } catch (error) {
68
+ return Promise.reject(error);
69
+ }
70
+ };
71
+ // Annotate the CommonJS export names for ESM import in node:
72
+ 0 && (module.exports = {
73
+ sendSms,
74
+ sendSmsTemplate
75
+ });
76
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvc21zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtwYXJzZVBob25lfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCB0d2lsaW9TZGsgZnJvbSAndHdpbGlvJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge1NNU1BhcmFtc1R5cGUsIFR3aWxpb09wdGlvbnNUeXBlfSBmcm9tICcuLi90eXBlcy9ub3RpZmljYXRpb25zJztcbmltcG9ydCB7YXBwVGVtcGxhdGV9IGZyb20gJy4vZW1haWwnO1xuXG4vLyBjb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnc21zJztcblxuLy8gVHdpbGlvXG5leHBvcnQgY29uc3Qgc2VuZFNtcyA9IChwYXJhbXM6IFNNU1BhcmFtc1R5cGUpOiBhbnkgPT4ge1xuICBjb25zdCB7XG4gICAgYXBwID0ge30sXG4gICAgY29udGVudCxcbiAgICB1c2VyID0ge31cbiAgfSA9IHBhcmFtcztcblxuICBjb25zdCBjb3VudHJ5ID0gdXNlci5jb3VudHJ5IHx8ICdVUyc7XG4gIGNvbnN0IHBob25lID0gcGFyc2VQaG9uZSh1c2VyLnBob25lLCBjb3VudHJ5KTtcbiAgY29uc3QgdGVtcGxhdGVDb250ZW50OiBzdHJpbmcgPSBhcHBUZW1wbGF0ZShhcHAsIGNvbnRlbnQpO1xuXG4gIGNvbnN0IHR3aWxpbzogYW55ID0gdHdpbGlvU2RrKENvbmZpZy5nZXQoJ3R3aWxpby5zaWQnKSwgQ29uZmlnLmdldCgndHdpbGlvLnRva2VuJykpO1xuICBjb25zdCBjZmc6IFR3aWxpb09wdGlvbnNUeXBlID0ge1xuICAgIGJvZHk6IHRlbXBsYXRlQ29udGVudCxcbiAgICBmcm9tOiBDb25maWcuZ2V0KCd0d2lsaW8ubnVtYmVyJyksXG4gICAgdG86IHBob25lXG4gIH07XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0d2lsaW8uc2VuZE1lc3NhZ2UoY2ZnLCAoZXJyb3IsIGRhdGEpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IuZXJyb3JfbWVzc2FnZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZFNtc1RlbXBsYXRlID0gKHRlbXBsYXRlTmFtZTogc3RyaW5nLCBzbXNQYXJhbXM6IFNNU1BhcmFtc1R5cGUpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2FwcCwgdXNlciwgdmFyc30gPSBzbXNQYXJhbXM7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhgLi90ZW1wbGF0ZXMvc21zLyR7dGVtcGxhdGVOYW1lfS50eHRgLCAndXRmOCcpO1xuICAgIGNvbnN0IHRleHQgPSBhcHBUZW1wbGF0ZShhcHAsIGRhdGEsIHZhcnMpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHthcHAsIHRleHQsIHVzZXJ9O1xuXG4gICAgcmV0dXJuIHNlbmRTbXMocGFyYW1zKVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLnN0YXR1cyA9PT0gJ3F1ZXVlZCcpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQSxtQkFBeUI7QUFDekIsZ0JBQWU7QUFDZixvQkFBc0I7QUFFdEIsb0JBQXFCO0FBRXJCLG1CQUEwQjtBQUtuQixNQUFNLFVBQVUsQ0FBQyxXQUErQjtBQUNyRCxRQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0w7QUFFSixRQUFNLFVBQVUsS0FBSyxXQUFXO0FBQ2hDLFFBQU0sUUFBUSw2QkFBVyxLQUFLLE9BQU87QUFDckMsUUFBTSxrQkFBMEIsOEJBQVksS0FBSztBQUVqRCxRQUFNLFNBQWMsMkJBQVUscUJBQU8sSUFBSSxlQUFlLHFCQUFPLElBQUk7QUFDbkUsUUFBTSxNQUF5QjtBQUFBLElBQzdCLE1BQU07QUFBQSxJQUNOLE1BQU0scUJBQU8sSUFBSTtBQUFBLElBQ2pCLElBQUk7QUFBQTtBQUdOLFNBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3RDLFdBQU8sWUFBWSxLQUFLLENBQUMsT0FBTyxTQUFTO0FBQ3ZDLFVBQUcsT0FBTztBQUNSLGVBQU8sSUFBSSxNQUFNLE1BQU07QUFBQSxhQUNsQjtBQUNMLGdCQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNVCxNQUFNLGtCQUFrQixDQUFDLGNBQXNCLGNBQStDO0FBQ25HLFFBQU0sRUFBQyxLQUFLLE1BQU0sU0FBUTtBQUMxQixNQUFJO0FBQ0YsVUFBTSxPQUFPLGtCQUFHLGFBQWEsbUJBQW1CLG9CQUFvQjtBQUNwRSxVQUFNLE9BQU8sOEJBQVksS0FBSyxNQUFNO0FBQ3BDLFVBQU0sU0FBUyxFQUFDLEtBQUssTUFBTTtBQUUzQixXQUFPLFFBQVEsUUFDWixLQUFLLENBQUMsUUFBUSxJQUFJLFdBQVcsVUFDN0IsTUFBTSxDQUFDLFVBQWlCO0FBQ3ZCLFlBQU07QUFBQTtBQUFBLFdBRUosT0FBTjtBQUNBLFdBQU8sUUFBUSxPQUFPO0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,2 @@
1
+ import { ApiContext, StatisticsType } from '../types';
2
+ export declare const getGlobalStatistics: (context: ApiContext) => Promise<Partial<StatisticsType>>;
@@ -0,0 +1,63 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __export = (target, all) => {
9
+ __markAsModule(target);
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __reExport = (target, module2, desc) => {
14
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
15
+ for (let key of __getOwnPropNames(module2))
16
+ if (!__hasOwnProp.call(target, key) && key !== "default")
17
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
18
+ }
19
+ return target;
20
+ };
21
+ var __toModule = (module2) => {
22
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
23
+ };
24
+ __export(exports, {
25
+ getGlobalStatistics: () => getGlobalStatistics
26
+ });
27
+ var import_arangojs = __toModule(require("arangojs"));
28
+ var import__ = __toModule(require("."));
29
+ var import_utils = __toModule(require("../utils"));
30
+ const eventCategory = "statistics";
31
+ const getGlobalStatistics = async (context) => {
32
+ const action = "getStatistics";
33
+ const { database } = context;
34
+ const statisticsQuery = import_arangojs.aql`FOR s IN statistics
35
+ FILTER s.isGlobal == true
36
+ LIMIT 1
37
+ RETURN s`;
38
+ const statistics = await database.query(statisticsQuery).then((cursor) => cursor.next()).catch((error) => (0, import_utils.logError)({
39
+ action,
40
+ category: eventCategory,
41
+ label: "db_error"
42
+ }, error, context).then(() => null));
43
+ if (statistics) {
44
+ return statistics;
45
+ }
46
+ const activeUsers = (0, import__.getActiveUserCount)(context);
47
+ const updatedData = { activeUsers };
48
+ const updateQuery = import_arangojs.aql`UPSERT {isGlobal: true}
49
+ INSERT ${updatedData}
50
+ UPDATE ${updatedData}
51
+ IN statistics RETURN NEW`;
52
+ const updatedStatistics = await database.query(updateQuery).then((cursor) => cursor.next()).catch((error) => (0, import_utils.logError)({
53
+ action,
54
+ category: eventCategory,
55
+ label: "db_error"
56
+ }, error, context).then(() => ({})));
57
+ return updatedStatistics;
58
+ };
59
+ // Annotate the CommonJS export names for ESM import in node:
60
+ 0 && (module.exports = {
61
+ getGlobalStatistics
62
+ });
63
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvc3RhdGlzdGljcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuXG5pbXBvcnQge2dldEFjdGl2ZVVzZXJDb3VudH0gZnJvbSAnLic7XG5pbXBvcnQge0FwaUNvbnRleHQsIFN0YXRpc3RpY3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdzdGF0aXN0aWNzJztcblxuZXhwb3J0IGNvbnN0IGdldEdsb2JhbFN0YXRpc3RpY3MgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGFydGlhbDxTdGF0aXN0aWNzVHlwZT4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0U3RhdGlzdGljcyc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBzdGF0aXN0aWNzUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBzIElOIHN0YXRpc3RpY3NcbiAgICBGSUxURVIgcy5pc0dsb2JhbCA9PSB0cnVlXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBzYDtcblxuICBjb25zdCBzdGF0aXN0aWNzID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoc3RhdGlzdGljc1F1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gKG51bGwpKSk7XG5cbiAgaWYoc3RhdGlzdGljcykge1xuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG4gIGNvbnN0IGFjdGl2ZVVzZXJzID0gZ2V0QWN0aXZlVXNlckNvdW50KGNvbnRleHQpO1xuICBjb25zdCB1cGRhdGVkRGF0YSA9IHthY3RpdmVVc2Vyc307XG5cbiAgY29uc3QgdXBkYXRlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7aXNHbG9iYWw6IHRydWV9XG4gIElOU0VSVCAke3VwZGF0ZWREYXRhfVxuICBVUERBVEUgJHt1cGRhdGVkRGF0YX1cbiAgSU4gc3RhdGlzdGljcyBSRVRVUk4gTkVXYDtcblxuICBjb25zdCB1cGRhdGVkU3RhdGlzdGljcyA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KHVwZGF0ZVF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gKHt9KSkpO1xuXG4gIHJldHVybiB1cGRhdGVkU3RhdGlzdGljcztcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBLHNCQUFrQjtBQUlsQixlQUFpQztBQUVqQyxtQkFBdUI7QUFFdkIsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSxzQkFBc0IsT0FBTyxZQUEwRDtBQUNsRyxRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxhQUFZO0FBQ25CLFFBQU0sa0JBQTRCO0FBQUE7QUFBQTtBQUFBO0FBS2xDLFFBQU0sYUFBYSxNQUFNLFNBQVMsTUFBTSxpQkFDckMsS0FBSyxDQUFDLFdBQXdCLE9BQU8sUUFDckMsTUFBTSxDQUFDLFVBQWlCLDJCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxLQUNOLE9BQU8sU0FBUyxLQUFLLE1BQU87QUFFakMsTUFBRyxZQUFZO0FBQ2IsV0FBTztBQUFBO0FBRVQsUUFBTSxjQUFjLGlDQUFtQjtBQUN2QyxRQUFNLGNBQWMsRUFBQztBQUVyQixRQUFNLGNBQXdCO0FBQUEsV0FDckI7QUFBQSxXQUNBO0FBQUE7QUFHVCxRQUFNLG9CQUFvQixNQUFNLFNBQVMsTUFBTSxhQUM1QyxLQUFLLENBQUMsV0FBd0IsT0FBTyxRQUNyQyxNQUFNLENBQUMsVUFBaUIsMkJBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEtBQ04sT0FBTyxTQUFTLEtBQUssTUFBTztBQUVqQyxTQUFPO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,209 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __export = (target, all) => {
9
+ __markAsModule(target);
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __reExport = (target, module2, desc) => {
14
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
15
+ for (let key of __getOwnPropNames(module2))
16
+ if (!__hasOwnProp.call(target, key) && key !== "default")
17
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
18
+ }
19
+ return target;
20
+ };
21
+ var __toModule = (module2) => {
22
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
23
+ };
24
+ __export(exports, {
25
+ addPlan: () => addPlan,
26
+ addSubscription: () => addSubscription,
27
+ deleteSubscription: () => deleteSubscription,
28
+ getPlanList: () => getPlanList,
29
+ getSubscription: () => getSubscription
30
+ });
31
+ var import_utils = __toModule(require("@nlabs/utils"));
32
+ var import_arangojs = __toModule(require("arangojs"));
33
+ var import_luxon = __toModule(require("luxon"));
34
+ var import_stripe = __toModule(require("stripe"));
35
+ var import_config = __toModule(require("../config"));
36
+ var import_utils2 = __toModule(require("../utils"));
37
+ var import_users = __toModule(require("./users"));
38
+ const eventCategory = "subscription";
39
+ const apiVersion = "2020-03-02";
40
+ const getPlanList = (context, from = 0, to = 30) => {
41
+ const action = "getList";
42
+ const { database } = context;
43
+ const limit = (0, import_utils2.getLimit)(from, to);
44
+ const aqlQry = `FOR p IN plans
45
+ ${limit.aql}
46
+ SORT p.amount
47
+ RETURN p`;
48
+ return database.query(aqlQry).then((cursor) => cursor.all()).then((list = []) => list).catch((error) => (0, import_utils2.logError)({
49
+ action,
50
+ category: eventCategory,
51
+ label: "db_error"
52
+ }, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
53
+ };
54
+ const getSubscription = (context) => {
55
+ const action = "getItem";
56
+ const { database, session: { userId: sessionId } } = context;
57
+ const aqlQry = `FOR s IN subscriptions
58
+ FILTER s.userId == ${sessionId} && s.cancelled > 0
59
+ LET plan = FIRST(
60
+ FOR p IN plans
61
+ FILTER p._key == s.planId
62
+ )
63
+ LIMIT 1
64
+ RETURN MERGE(s, {plan: plan})`;
65
+ return database.query(aqlQry).then((cursor) => cursor.next()).then((subscription = {}) => subscription).catch((error) => (0, import_utils2.logError)({
66
+ action,
67
+ category: eventCategory,
68
+ label: "db_error"
69
+ }, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
70
+ };
71
+ const addPlan = (context, item) => {
72
+ const action = "addPlan";
73
+ const { database, session: { userId: sessionId, userAccess } } = context;
74
+ const isAdmin = userAccess > 2;
75
+ if (!isAdmin) {
76
+ return (0, import_utils2.logException)({
77
+ action,
78
+ category: eventCategory,
79
+ label: "unauthorized",
80
+ value: "invalid_session"
81
+ }, context).then(() => null);
82
+ }
83
+ const now = Date.now();
84
+ const formatId = (0, import_utils.parseId)(item.id);
85
+ const planId = formatId === "" ? (0, import_utils.createHash)(`subscription-${sessionId}`) : formatId;
86
+ const { amount, currency = "USD", description, interval, intervalCount, name } = item;
87
+ const formatAmount = (0, import_utils.parseNum)(amount);
88
+ const formatInterval = (0, import_utils.parseChar)(interval, 5).toLowerCase();
89
+ const formatIntervalCnt = (0, import_utils.parseNum)(intervalCount, 5);
90
+ const formatName = (0, import_utils.parseVarChar)(name, 32);
91
+ const formatDesc = (0, import_utils.parseVarChar)(description, 32);
92
+ const insert = {
93
+ _key: planId,
94
+ added: now,
95
+ amount: formatAmount,
96
+ currency,
97
+ description: formatDesc,
98
+ interval: formatInterval,
99
+ intervalCount: formatIntervalCnt,
100
+ modified: now,
101
+ name: formatName
102
+ };
103
+ const aqlQry = import_arangojs.aql`INSERT ${insert} IN plans RETURN NEW`;
104
+ return database.query(aqlQry).then((cursor) => cursor.next()).then((plan = {}) => {
105
+ const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
106
+ const stripePlan = {
107
+ amount: formatAmount * 100,
108
+ currency,
109
+ id: planId,
110
+ interval: formatInterval,
111
+ interval_count: formatIntervalCnt,
112
+ metadata: {},
113
+ name: formatName,
114
+ statement_descriptor: formatDesc
115
+ };
116
+ return stripeClient.plans.create(stripePlan).then(() => plan);
117
+ }).catch((error) => (0, import_utils2.logError)({
118
+ action,
119
+ category: eventCategory,
120
+ label: "db_error"
121
+ }, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
122
+ };
123
+ const addSubscription = (context, item) => {
124
+ const action = "addSubscription";
125
+ const { database, session: { userId: sessionId, userAccess } } = context;
126
+ const isAdmin = userAccess > 2;
127
+ if (!isAdmin) {
128
+ return (0, import_utils2.logException)({
129
+ action,
130
+ category: eventCategory,
131
+ label: "unauthorized",
132
+ value: "invalid_session"
133
+ }, context).then(() => null);
134
+ }
135
+ const now = Date.now();
136
+ const formatId = (0, import_utils.parseId)(item.id);
137
+ const subscriptionId = formatId === "" ? (0, import_utils.createHash)(`subscription-${sessionId}`) : formatId;
138
+ const { planId, trialEnd, trialPeriod } = item;
139
+ const formatPlanId = (0, import_utils.parseId)(planId);
140
+ const formatTrialPeriod = 0;
141
+ let formatTrialEnd = trialEnd || Date.now();
142
+ if (formatTrialPeriod) {
143
+ formatTrialEnd = import_luxon.DateTime.local().plus({ days: trialPeriod }).toMillis();
144
+ }
145
+ return (0, import_users.getUser)(context, sessionId).then((user) => {
146
+ const insert = {
147
+ _key: subscriptionId,
148
+ added: now,
149
+ cancelDate: 0,
150
+ modified: now,
151
+ planId: formatPlanId,
152
+ trialEnd: formatTrialEnd,
153
+ userId: sessionId
154
+ };
155
+ const aqlQry = import_arangojs.aql`INSERT ${insert} IN plans RETURN NEW`;
156
+ return database.query(aqlQry).then((cursor) => cursor.next()).then((subscription = {}) => {
157
+ const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
158
+ return stripeClient.subscriptions.create({
159
+ customer: user.stripeCustomerId,
160
+ items: [
161
+ {
162
+ plan: formatPlanId
163
+ }
164
+ ],
165
+ metadata: {
166
+ userId: sessionId
167
+ },
168
+ trial_end: formatTrialEnd
169
+ }).then(() => subscription);
170
+ }).catch((error) => (0, import_utils2.logError)({
171
+ action,
172
+ category: eventCategory,
173
+ label: "db_error"
174
+ }, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
175
+ });
176
+ };
177
+ const deleteSubscription = (context) => {
178
+ const action = "deleteSubscription";
179
+ const { database } = context;
180
+ const now = Date.now();
181
+ return getSubscription(context).then((subscription) => {
182
+ const stripeClient = new import_stripe.default(import_config.Config.get("stripe.token"), { apiVersion, typescript: true });
183
+ return stripeClient.subscriptions.del(subscription.transactionId).then(({ canceled_at: cancelDate }) => {
184
+ if (cancelDate) {
185
+ const update = {
186
+ cancelDate,
187
+ modified: now,
188
+ planId: ""
189
+ };
190
+ const aqlQry = import_arangojs.aql`UPDATE s WITH ${update} IN subscriptions`;
191
+ return database.query(aqlQry).then(() => true).catch((error) => (0, import_utils2.logError)({
192
+ action,
193
+ category: eventCategory,
194
+ label: "db_error"
195
+ }, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
196
+ }
197
+ return false;
198
+ });
199
+ });
200
+ };
201
+ // Annotate the CommonJS export names for ESM import in node:
202
+ 0 && (module.exports = {
203
+ addPlan,
204
+ addSubscription,
205
+ deleteSubscription,
206
+ getPlanList,
207
+ getSubscription
208
+ });
209
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvc3Vic2NyaXB0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2N1cnNvcic7XG5pbXBvcnQge0RhdGVUaW1lfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgU3RyaXBlIGZyb20gJ3N0cmlwZSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtQYXltZW50SW50ZXJ2YWwsIFBheW1lbnRQbGFuLCBQYXltZW50U3Vic2NyaXB0aW9ufSBmcm9tICcuLi90eXBlcy9wYXltZW50cyc7XG5pbXBvcnQge2dldExpbWl0LCBsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2dldFVzZXJ9IGZyb20gJy4vdXNlcnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnc3Vic2NyaXB0aW9uJztcbmNvbnN0IGFwaVZlcnNpb246IGFueSA9ICcyMDIwLTAzLTAyJztcblxuZXhwb3J0IGNvbnN0IGdldFBsYW5MaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZyb206IG51bWJlciA9IDAsIHRvOiBudW1iZXIgPSAzMCk6IFByb21pc2U8UGF5bWVudFBsYW5bXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0JztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwbGFuc1xuICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICBTT1JUIHAuYW1vdW50XG4gICAgICBSRVRVUk4gcGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0ID0gW10pID0+IGxpc3QpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdWJzY3JpcHRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBzIElOIHN1YnNjcmlwdGlvbnNcbiAgICAgIEZJTFRFUiBzLnVzZXJJZCA9PSAke3Nlc3Npb25JZH0gJiYgcy5jYW5jZWxsZWQgPiAwXG4gICAgICBMRVQgcGxhbiA9IEZJUlNUKFxuICAgICAgICBGT1IgcCBJTiBwbGFuc1xuICAgICAgICBGSUxURVIgcC5fa2V5ID09IHMucGxhbklkXG4gICAgICApXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gTUVSR0Uocywge3BsYW46IHBsYW59KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoc3Vic2NyaXB0aW9uID0ge30pID0+IHN1YnNjcmlwdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBsYW4gPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogUGF5bWVudFBsYW4pOiBQcm9taXNlPFBheW1lbnRQbGFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFBsYW4nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlckFjY2Vzc319ID0gY29udGV4dDtcbiAgY29uc3QgaXNBZG1pbjogYm9vbGVhbiA9IHVzZXJBY2Nlc3MgPiAyO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW0uaWQpO1xuICBjb25zdCBwbGFuSWQ6IHN0cmluZyA9IGZvcm1hdElkID09PSAnJyA/IGNyZWF0ZUhhc2goYHN1YnNjcmlwdGlvbi0ke3Nlc3Npb25JZH1gKSA6IGZvcm1hdElkO1xuICBjb25zdCB7YW1vdW50LCBjdXJyZW5jeSA9ICdVU0QnLCBkZXNjcmlwdGlvbiwgaW50ZXJ2YWwsIGludGVydmFsQ291bnQsIG5hbWV9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0QW1vdW50OiBudW1iZXIgPSBwYXJzZU51bShhbW91bnQpO1xuICBjb25zdCBmb3JtYXRJbnRlcnZhbDogUGF5bWVudEludGVydmFsID0gcGFyc2VDaGFyKGludGVydmFsLCA1KS50b0xvd2VyQ2FzZSgpIGFzIFBheW1lbnRJbnRlcnZhbDtcbiAgY29uc3QgZm9ybWF0SW50ZXJ2YWxDbnQ6IG51bWJlciA9IHBhcnNlTnVtKGludGVydmFsQ291bnQsIDUpO1xuICBjb25zdCBmb3JtYXROYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIobmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXREZXNjOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZGVzY3JpcHRpb24sIDMyKTtcblxuICBjb25zdCBpbnNlcnQ6IFBheW1lbnRQbGFuID0ge1xuICAgIF9rZXk6IHBsYW5JZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgIGN1cnJlbmN5LFxuICAgIGRlc2NyaXB0aW9uOiBmb3JtYXREZXNjLFxuICAgIGludGVydmFsOiBmb3JtYXRJbnRlcnZhbCxcbiAgICBpbnRlcnZhbENvdW50OiBmb3JtYXRJbnRlcnZhbENudCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IGZvcm1hdE5hbWVcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHBsYW5zIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBsYW46IFBheW1lbnRQbGFuID0ge30pID0+IHtcbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIGNvbnN0IHN0cmlwZVBsYW46IGFueSA9IHtcbiAgICAgICAgYW1vdW50OiBmb3JtYXRBbW91bnQgKiAxMDAsXG4gICAgICAgIGN1cnJlbmN5LFxuICAgICAgICBpZDogcGxhbklkLFxuICAgICAgICBpbnRlcnZhbDogZm9ybWF0SW50ZXJ2YWwsXG4gICAgICAgIGludGVydmFsX2NvdW50OiBmb3JtYXRJbnRlcnZhbENudCxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICAgICAgc3RhdGVtZW50X2Rlc2NyaXB0b3I6IGZvcm1hdERlc2NcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQucGxhbnNcbiAgICAgICAgLmNyZWF0ZShzdHJpcGVQbGFuKVxuICAgICAgICAudGhlbigoKSA9PiBwbGFuKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU3Vic2NyaXB0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW0pOiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkU3Vic2NyaXB0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQsIHVzZXJBY2Nlc3N9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGlzQWRtaW46IGJvb2xlYW4gPSB1c2VyQWNjZXNzID4gMjtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChpdGVtLmlkKTtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyA9IGZvcm1hdElkID09PSAnJyA/IGNyZWF0ZUhhc2goYHN1YnNjcmlwdGlvbi0ke3Nlc3Npb25JZH1gKSA6IGZvcm1hdElkO1xuICBjb25zdCB7cGxhbklkLCB0cmlhbEVuZCwgdHJpYWxQZXJpb2R9ID0gaXRlbTtcbiAgY29uc3QgZm9ybWF0UGxhbklkOiBzdHJpbmcgPSBwYXJzZUlkKHBsYW5JZCk7XG4gIGNvbnN0IGZvcm1hdFRyaWFsUGVyaW9kOiBudW1iZXIgPSAwO1xuICBsZXQgZm9ybWF0VHJpYWxFbmQ6IG51bWJlciA9IHRyaWFsRW5kIHx8IERhdGUubm93KCk7XG5cbiAgaWYoZm9ybWF0VHJpYWxQZXJpb2QpIHtcbiAgICBmb3JtYXRUcmlhbEVuZCA9IERhdGVUaW1lLmxvY2FsKCkucGx1cyh7ZGF5czogdHJpYWxQZXJpb2R9KS50b01pbGxpcygpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwgc2Vzc2lvbklkKVxuICAgIC50aGVuKCh1c2VyKSA9PiB7XG4gICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4gICAgICAgIF9rZXk6IHN1YnNjcmlwdGlvbklkLFxuICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICBjYW5jZWxEYXRlOiAwLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICBwbGFuSWQ6IGZvcm1hdFBsYW5JZCxcbiAgICAgICAgdHJpYWxFbmQ6IGZvcm1hdFRyaWFsRW5kLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwbGFucyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChzdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7fSkgPT4ge1xuICAgICAgICAgIC8vIFN0cmlwZVxuICAgICAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IG5ldyBTdHJpcGUoQ29uZmlnLmdldCgnc3RyaXBlLnRva2VuJyksIHthcGlWZXJzaW9uLCB0eXBlc2NyaXB0OiB0cnVlfSk7XG4gICAgICAgICAgcmV0dXJuIHN0cmlwZUNsaWVudC5zdWJzY3JpcHRpb25zXG4gICAgICAgICAgICAuY3JlYXRlKHtcbiAgICAgICAgICAgICAgY3VzdG9tZXI6IHVzZXIuc3RyaXBlQ3VzdG9tZXJJZCxcbiAgICAgICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBwbGFuOiBmb3JtYXRQbGFuSWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJpYWxfZW5kOiBmb3JtYXRUcmlhbEVuZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVN1YnNjcmlwdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVN1YnNjcmlwdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgcmV0dXJuIGdldFN1YnNjcmlwdGlvbihjb250ZXh0KVxuICAgIC50aGVuKChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgIC8vIFN0cmlwZVxuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gbmV3IFN0cmlwZShDb25maWcuZ2V0KCdzdHJpcGUudG9rZW4nKSwge2FwaVZlcnNpb24sIHR5cGVzY3JpcHQ6IHRydWV9KTtcbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuc3Vic2NyaXB0aW9uc1xuICAgICAgICAuZGVsKHN1YnNjcmlwdGlvbi50cmFuc2FjdGlvbklkKVxuICAgICAgICAudGhlbigoe2NhbmNlbGVkX2F0OiBjYW5jZWxEYXRlfSkgPT4ge1xuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW5jZWxsZWQgb24gU3RyaXBlIGJlZm9yZSB1cGRhdGluZyB0aGUgZGJcbiAgICAgICAgICBpZihjYW5jZWxEYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGU6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgIGNhbmNlbERhdGUsXG4gICAgICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgICAgICAgIHBsYW5JZDogJydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSBzIFdJVEggJHt1cGRhdGV9IElOIHN1YnNjcmlwdGlvbnNgO1xuXG4gICAgICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgICAgICAgICAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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
@@ -0,0 +1,26 @@
1
+ import { Database } from 'arangojs';
2
+ import { ApiContext } from '../types/auth';
3
+ import { TagType } from '../types/tags';
4
+ export declare const getTags: (context: ApiContext, args: any) => Promise<TagType[]>;
5
+ export declare const getTagsByItem: (context: ApiContext, itemId: string, args: any) => Promise<TagType[]>;
6
+ export declare const getTagsByOwner: (context: ApiContext, args: any) => Promise<TagType[]>;
7
+ export declare const getTag: (context: ApiContext, tagId: string) => Promise<TagType>;
8
+ export declare const addTag: (context: ApiContext, { tag }: {
9
+ tag: any;
10
+ }) => Promise<TagType>;
11
+ export declare const addTagToItem: (context: ApiContext, { itemId, tagId }: {
12
+ itemId: any;
13
+ tagId: any;
14
+ }) => Promise<TagType>;
15
+ export declare const updateTag: (context: ApiContext, item?: TagType) => Promise<TagType>;
16
+ export declare const deleteTag: (context: ApiContext, { tagId }: {
17
+ tagId: any;
18
+ }) => Promise<TagType>;
19
+ export declare const deleteTagFromItem: (context: ApiContext, { itemId, tagId }: {
20
+ itemId: any;
21
+ tagId: any;
22
+ }) => Promise<TagType>;
23
+ export declare const createTag: (db: Database, tagName: string) => Promise<TagType>;
24
+ export declare const createTagEdge: (db: Database, tag: TagType, itemId: string) => Promise<TagType>;
25
+ export declare const linkTags: (db: Database, tagNames: string[], itemId: string) => Promise<TagType[]>;
26
+ export declare const extractTags: (db: Database, itemId: any, content: any) => Promise<TagType[]>;