@nlabs/reaktor 0.4.0 → 0.4.1
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.
- package/lib/actions/conversations.d.ts +14 -0
- package/lib/actions/conversations.js +333 -0
- package/lib/actions/dynamodb.js +155 -0
- package/lib/actions/email.js +177 -0
- package/lib/actions/files.js +319 -0
- package/lib/{data → actions}/groups.d.ts +4 -3
- package/lib/actions/groups.js +282 -0
- package/lib/actions/images.d.ts +22 -0
- package/lib/actions/images.js +682 -0
- package/lib/actions/index.js +40 -0
- package/lib/{data → actions}/ios.d.ts +2 -1
- package/lib/actions/ios.js +179 -0
- package/lib/actions/locations.js +112 -0
- package/lib/actions/messages.d.ts +13 -0
- package/lib/actions/messages.js +216 -0
- package/lib/{data → actions}/notifications.d.ts +2 -2
- package/lib/actions/notifications.js +63 -0
- package/lib/{data → actions}/payments.d.ts +2 -2
- package/lib/actions/payments.js +491 -0
- package/lib/actions/posts.d.ts +19 -0
- package/lib/actions/posts.js +538 -0
- package/lib/actions/reactions.d.ts +30 -0
- package/lib/actions/reactions.js +340 -0
- package/lib/{data → actions}/s3.d.ts +1 -1
- package/lib/actions/s3.js +122 -0
- package/lib/{data → actions}/search.d.ts +2 -2
- package/lib/actions/search.js +99 -0
- package/lib/actions/sms.js +76 -0
- package/lib/actions/statistics.d.ts +2 -0
- package/lib/actions/statistics.js +63 -0
- package/lib/actions/subscription.js +209 -0
- package/lib/actions/tags.d.ts +26 -0
- package/lib/actions/tags.js +340 -0
- package/lib/actions/users.d.ts +44 -0
- package/lib/actions/users.js +571 -0
- package/lib/{data → actions}/websockets.d.ts +1 -1
- package/lib/actions/websockets.js +156 -0
- package/lib/config.d.ts +2 -3
- package/lib/config.js +116 -149
- package/lib/index.d.ts +1 -1
- package/lib/index.js +23 -45
- package/lib/templates/email/layout.d.ts +2 -0
- package/lib/templates/email/layout.js +292 -0
- package/lib/templates/email/passwordForgot.d.ts +2 -0
- package/lib/templates/email/passwordForgot.js +28 -0
- package/lib/templates/email/passwordRecovery.d.ts +2 -0
- package/lib/templates/email/passwordRecovery.js +25 -0
- package/lib/templates/email/verifyEmail.d.ts +2 -0
- package/lib/templates/email/verifyEmail.js +28 -0
- package/lib/templates/email/welcome.d.ts +2 -0
- package/lib/templates/email/welcome.js +28 -0
- package/lib/templates/sms/passwordForgot.d.ts +2 -0
- package/lib/templates/sms/passwordForgot.js +14 -0
- package/lib/templates/sms/passwordRecovery.d.ts +2 -0
- package/lib/templates/sms/passwordRecovery.js +14 -0
- package/lib/templates/sms/verifyEmail.d.ts +2 -0
- package/lib/templates/sms/verifyEmail.js +14 -0
- package/lib/templates/sms/verifyPhone.d.ts +2 -0
- package/lib/templates/sms/verifyPhone.js +14 -0
- package/lib/templates/sms/welcome.d.ts +2 -0
- package/lib/templates/sms/welcome.js +14 -0
- package/lib/types/apps.d.ts +2 -2
- package/lib/types/apps.js +4 -2
- package/lib/types/arangodb.js +4 -2
- package/lib/types/auth.d.ts +4 -8
- package/lib/types/auth.js +4 -2
- package/lib/types/conversations.d.ts +3 -3
- package/lib/types/conversations.js +4 -2
- package/lib/types/email.d.ts +2 -2
- package/lib/types/email.js +4 -2
- package/lib/types/files.js +4 -2
- package/lib/types/google.js +4 -2
- package/lib/types/groups.d.ts +2 -1
- package/lib/types/groups.js +4 -2
- package/lib/types/images.d.ts +8 -5
- package/lib/types/images.js +4 -2
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.js +37 -227
- package/lib/types/locations.js +4 -2
- package/lib/types/messages.d.ts +12 -2
- package/lib/types/messages.js +4 -2
- package/lib/types/notifications.d.ts +2 -2
- package/lib/types/notifications.js +4 -2
- package/lib/types/payments.js +4 -2
- package/lib/types/posts.d.ts +18 -1
- package/lib/types/posts.js +4 -2
- package/lib/types/statistics.d.ts +3 -0
- package/lib/types/statistics.js +4 -0
- package/lib/types/tags.d.ts +6 -0
- package/lib/types/tags.js +4 -2
- package/lib/types/users.d.ts +15 -11
- package/lib/types/users.js +4 -2
- package/lib/utils/analytics.d.ts +7 -0
- package/lib/utils/analytics.js +101 -77
- package/lib/utils/arangodb.d.ts +1 -1
- package/lib/utils/arangodb.js +93 -114
- package/lib/utils/auth.js +58 -55
- package/lib/utils/graphql.js +38 -19
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +26 -84
- package/lib/utils/objects.js +44 -53
- package/lib/utils/session.d.ts +18 -0
- package/lib/utils/session.js +42 -0
- package/package.json +32 -30
- package/lib/data/conversations.d.ts +0 -8
- package/lib/data/conversations.js +0 -311
- package/lib/data/dynamodb.js +0 -206
- package/lib/data/email.js +0 -222
- package/lib/data/files.js +0 -525
- package/lib/data/groups.js +0 -435
- package/lib/data/images.d.ts +0 -22
- package/lib/data/images.js +0 -1051
- package/lib/data/index.js +0 -266
- package/lib/data/ios.js +0 -355
- package/lib/data/locations.js +0 -172
- package/lib/data/messages.d.ts +0 -9
- package/lib/data/messages.js +0 -299
- package/lib/data/notifications.js +0 -59
- package/lib/data/payments.js +0 -771
- package/lib/data/posts.d.ts +0 -23
- package/lib/data/posts.js +0 -766
- package/lib/data/reactions.d.ts +0 -14
- package/lib/data/reactions.js +0 -529
- package/lib/data/s3.js +0 -155
- package/lib/data/search.js +0 -155
- package/lib/data/sms.js +0 -83
- package/lib/data/subscription.js +0 -337
- package/lib/data/tags.d.ts +0 -14
- package/lib/data/tags.js +0 -397
- package/lib/data/users.d.ts +0 -20
- package/lib/data/users.js +0 -470
- package/lib/data/websockets.js +0 -250
- package/lib/types/reactions.d.ts +0 -17
- package/lib/types/reactions.js +0 -2
- package/lib/utils/redis.d.ts +0 -1
- package/lib/utils/redis.js +0 -36
- package/templates/email/layout.html +0 -279
- package/templates/email/passwordForgot.html +0 -15
- package/templates/email/passwordRecovery.html +0 -12
- package/templates/email/verifyEmail.html +0 -15
- package/templates/sms/passwordForgot.txt +0 -1
- package/templates/sms/passwordRecovery.txt +0 -1
- package/templates/sms/verifyEmail.txt +0 -1
- package/templates/sms/verifyPhone.txt +0 -1
- /package/lib/{data → actions}/dynamodb.d.ts +0 -0
- /package/lib/{data → actions}/email.d.ts +0 -0
- /package/lib/{data → actions}/files.d.ts +0 -0
- /package/lib/{data → actions}/index.d.ts +0 -0
- /package/lib/{data → actions}/locations.d.ts +0 -0
- /package/lib/{data → actions}/sms.d.ts +0 -0
- /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,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[]>;
|