@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,340 @@
|
|
|
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
|
+
addTag: () => addTag,
|
|
43
|
+
addTagToItem: () => addTagToItem,
|
|
44
|
+
createTag: () => createTag,
|
|
45
|
+
createTagEdge: () => createTagEdge,
|
|
46
|
+
deleteTag: () => deleteTag,
|
|
47
|
+
deleteTagFromItem: () => deleteTagFromItem,
|
|
48
|
+
extractTags: () => extractTags,
|
|
49
|
+
getTag: () => getTag,
|
|
50
|
+
getTags: () => getTags,
|
|
51
|
+
getTagsByItem: () => getTagsByItem,
|
|
52
|
+
getTagsByOwner: () => getTagsByOwner,
|
|
53
|
+
linkTags: () => linkTags,
|
|
54
|
+
updateTag: () => updateTag
|
|
55
|
+
});
|
|
56
|
+
var import_utils = __toModule(require("@nlabs/utils"));
|
|
57
|
+
var import_arangojs = __toModule(require("arangojs"));
|
|
58
|
+
var import_words = __toModule(require("lodash/words"));
|
|
59
|
+
var import_utils2 = __toModule(require("../utils"));
|
|
60
|
+
const eventCategory = "tags";
|
|
61
|
+
const getTags = (context, args) => {
|
|
62
|
+
const action = "getList";
|
|
63
|
+
const { database } = context;
|
|
64
|
+
const { search = "", from = 0, to = 30 } = args;
|
|
65
|
+
const limit = (0, import_utils2.getLimit)(from, to);
|
|
66
|
+
const filter = search.length ? `FILTER LIKE(t.name, "%${search}%")` : "";
|
|
67
|
+
const aqlQry = `FOR t IN tags
|
|
68
|
+
${filter}
|
|
69
|
+
${limit.aql}
|
|
70
|
+
SORT t.name
|
|
71
|
+
RETURN t`;
|
|
72
|
+
return database.query(aqlQry).then((cursor) => cursor.all()).then((list = []) => list).catch((error) => (0, import_utils2.logError)({
|
|
73
|
+
action,
|
|
74
|
+
category: eventCategory,
|
|
75
|
+
label: "db_error"
|
|
76
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
77
|
+
};
|
|
78
|
+
const getTagsByItem = (context, itemId, args) => {
|
|
79
|
+
const action = "getList";
|
|
80
|
+
const { from = 0, to = 30 } = args;
|
|
81
|
+
const { database } = context;
|
|
82
|
+
const limit = (0, import_utils2.getLimit)(from, to);
|
|
83
|
+
const formatItemId = (0, import_utils.parseArangoId)(itemId);
|
|
84
|
+
const tagQuery = `FOR t, it IN INBOUND "${formatItemId}" isTagged
|
|
85
|
+
${limit.aql}
|
|
86
|
+
SORT it.added
|
|
87
|
+
RETURN t`;
|
|
88
|
+
return database.query(tagQuery).then((cursor) => cursor.all() || []).catch((error) => (0, import_utils2.logError)({
|
|
89
|
+
action,
|
|
90
|
+
category: eventCategory,
|
|
91
|
+
label: "db_error"
|
|
92
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
93
|
+
};
|
|
94
|
+
const getTagsByOwner = (context, args) => {
|
|
95
|
+
const action = "getList";
|
|
96
|
+
const { from = 0, id, to = 30 } = args;
|
|
97
|
+
const { database } = context;
|
|
98
|
+
const limit = (0, import_utils2.getLimit)(from, to);
|
|
99
|
+
const aqlQry = `FOR t IN tags
|
|
100
|
+
FILTER t.userId == "${id}"
|
|
101
|
+
${limit.aql}
|
|
102
|
+
SORT t.added
|
|
103
|
+
RETURN t`;
|
|
104
|
+
return database.query(aqlQry).then((cursor) => cursor.all()).then((list = []) => list).catch((error) => (0, import_utils2.logError)({
|
|
105
|
+
action,
|
|
106
|
+
category: eventCategory,
|
|
107
|
+
label: "db_error"
|
|
108
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
109
|
+
};
|
|
110
|
+
const getTag = (context, tagId) => {
|
|
111
|
+
const action = "getItem";
|
|
112
|
+
const { database } = context;
|
|
113
|
+
const formatId = JSON.stringify((0, import_utils.parseId)(tagId));
|
|
114
|
+
const aqlQry = `FOR t IN tags
|
|
115
|
+
FILTER t._key == ${formatId}
|
|
116
|
+
LIMIT 1
|
|
117
|
+
RETURN t`;
|
|
118
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).then((tag = {}) => tag).catch((error) => (0, import_utils2.logError)({
|
|
119
|
+
action,
|
|
120
|
+
category: eventCategory,
|
|
121
|
+
label: "db_error"
|
|
122
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
123
|
+
};
|
|
124
|
+
const addTag = (context, { tag }) => {
|
|
125
|
+
const action = "addTag";
|
|
126
|
+
const { database, session } = context;
|
|
127
|
+
const { userAccess } = session;
|
|
128
|
+
if (userAccess < 3) {
|
|
129
|
+
return (0, import_utils2.logException)({
|
|
130
|
+
action,
|
|
131
|
+
category: eventCategory,
|
|
132
|
+
label: "db_error"
|
|
133
|
+
}, session);
|
|
134
|
+
}
|
|
135
|
+
const now = Date.now();
|
|
136
|
+
const { description, name } = tag;
|
|
137
|
+
const formatId = (0, import_utils.createHash)(`tag-${name.toLowercase()}`, null);
|
|
138
|
+
const insert = {
|
|
139
|
+
_key: formatId,
|
|
140
|
+
added: now,
|
|
141
|
+
description: (0, import_utils.parseVarChar)(description, 64),
|
|
142
|
+
modified: now,
|
|
143
|
+
name: (0, import_utils.parseVarChar)(name, 32)
|
|
144
|
+
};
|
|
145
|
+
const aqlQry = import_arangojs.aql`INSERT ${insert} IN tags RETURN NEW`;
|
|
146
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).then((tag2 = {}) => tag2).catch((error) => (0, import_utils2.logError)({
|
|
147
|
+
action,
|
|
148
|
+
category: eventCategory,
|
|
149
|
+
label: "db_error"
|
|
150
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
151
|
+
};
|
|
152
|
+
const addTagToItem = async (context, { itemId, tagId }) => {
|
|
153
|
+
const action = "addTagToItem";
|
|
154
|
+
const { database } = context;
|
|
155
|
+
const added = Date.now();
|
|
156
|
+
const formatTagId = (0, import_utils.parseArangoId)(tagId);
|
|
157
|
+
const formatItemId = (0, import_utils.parseArangoId)(itemId);
|
|
158
|
+
const edgeId = (0, import_utils.createHash)(`isTagged-${formatTagId}-${formatItemId}`, null);
|
|
159
|
+
const edgeCollection = database.collection("isTagged");
|
|
160
|
+
const edge = { _from: formatTagId, _key: edgeId, _to: formatItemId, added };
|
|
161
|
+
console.log({ edge });
|
|
162
|
+
await edgeCollection.save(edge, { overwriteMode: "ignore", silent: true }).catch((error) => (0, import_utils2.logError)({
|
|
163
|
+
action,
|
|
164
|
+
category: eventCategory,
|
|
165
|
+
label: "db_error",
|
|
166
|
+
params: {
|
|
167
|
+
edge
|
|
168
|
+
}
|
|
169
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
170
|
+
const tagQuery = import_arangojs.aql`LET t = DOCUMENT(${formatTagId}) RETURN t`;
|
|
171
|
+
return database.query(tagQuery).then((cursor) => cursor.next()).catch((error) => (0, import_utils2.logError)({
|
|
172
|
+
action,
|
|
173
|
+
category: eventCategory,
|
|
174
|
+
label: "db_error",
|
|
175
|
+
params: {
|
|
176
|
+
edge
|
|
177
|
+
}
|
|
178
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
179
|
+
};
|
|
180
|
+
const updateTag = (context, item = {}) => {
|
|
181
|
+
const action = "update";
|
|
182
|
+
const { database, session } = context;
|
|
183
|
+
const { userAccess } = session;
|
|
184
|
+
if (userAccess < 3) {
|
|
185
|
+
return (0, import_utils2.logException)({
|
|
186
|
+
action,
|
|
187
|
+
category: eventCategory,
|
|
188
|
+
label: "db_error"
|
|
189
|
+
}, session);
|
|
190
|
+
}
|
|
191
|
+
const now = Date.now();
|
|
192
|
+
const { description, id, name } = item;
|
|
193
|
+
const formatName = (0, import_utils.parseVarChar)(name, 32);
|
|
194
|
+
const update = {
|
|
195
|
+
description: (0, import_utils.parseVarChar)(description, 64),
|
|
196
|
+
modified: now,
|
|
197
|
+
name: formatName
|
|
198
|
+
};
|
|
199
|
+
const formatId = (0, import_utils.parseId)(id);
|
|
200
|
+
const tagId = !formatId ? (0, import_utils.createHash)(`tag-${formatName.toLowerCase()}`, null) : formatId;
|
|
201
|
+
const insert = __spreadProps(__spreadValues({}, update), {
|
|
202
|
+
_key: tagId,
|
|
203
|
+
added: now
|
|
204
|
+
});
|
|
205
|
+
const aqlQry = import_arangojs.aql`UPSERT {_key: ${tagId}}
|
|
206
|
+
INSERT ${insert}
|
|
207
|
+
UPDATE ${update}
|
|
208
|
+
IN tags RETURN NEW`;
|
|
209
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).then((tag = {}) => tag).catch((error) => (0, import_utils2.logError)({
|
|
210
|
+
action,
|
|
211
|
+
category: eventCategory,
|
|
212
|
+
label: "db_error"
|
|
213
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
214
|
+
};
|
|
215
|
+
const deleteTag = (context, { tagId }) => {
|
|
216
|
+
const action = "deleteTag";
|
|
217
|
+
const { database, session } = context;
|
|
218
|
+
const { userAccess } = session;
|
|
219
|
+
if (userAccess < 3) {
|
|
220
|
+
return (0, import_utils2.logException)({
|
|
221
|
+
action,
|
|
222
|
+
category: eventCategory,
|
|
223
|
+
label: "db_error"
|
|
224
|
+
}, session);
|
|
225
|
+
}
|
|
226
|
+
const formatTagId = (0, import_utils.parseId)(tagId);
|
|
227
|
+
const aqlQry = import_arangojs.aql`FOR t IN tags
|
|
228
|
+
FILTER t._key == ${formatTagId}
|
|
229
|
+
REMOVE t IN tags
|
|
230
|
+
RETURN OLD`;
|
|
231
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).then((tag = {}) => tag).catch((error) => (0, import_utils2.logError)({
|
|
232
|
+
action,
|
|
233
|
+
category: eventCategory,
|
|
234
|
+
label: "db_error"
|
|
235
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
236
|
+
};
|
|
237
|
+
const deleteTagFromItem = async (context, { itemId, tagId }) => {
|
|
238
|
+
const action = "deleteTagFromItem";
|
|
239
|
+
const { database } = context;
|
|
240
|
+
const formatTagId = (0, import_utils.parseArangoId)(tagId);
|
|
241
|
+
const formatItemId = (0, import_utils.parseArangoId)(itemId);
|
|
242
|
+
const edgeId = (0, import_utils.createHash)(`isTagged-${formatTagId}-${formatItemId}`, null);
|
|
243
|
+
const edgeCollection = database.collection("isTagged");
|
|
244
|
+
const edge = { _key: edgeId };
|
|
245
|
+
await edgeCollection.remove(edge, { silent: true }).catch((error) => (0, import_utils2.logError)({
|
|
246
|
+
action,
|
|
247
|
+
category: eventCategory,
|
|
248
|
+
label: "db_error"
|
|
249
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
250
|
+
const tagQuery = import_arangojs.aql`LET t = DOCUMENT(${tagId}) RETURN t`;
|
|
251
|
+
return database.query(tagQuery).then((cursor) => cursor.next()).catch((error) => (0, import_utils2.logError)({
|
|
252
|
+
action,
|
|
253
|
+
category: eventCategory,
|
|
254
|
+
label: "db_error"
|
|
255
|
+
}, error, {}).then(() => null).catch((error2) => Promise.reject(error2)));
|
|
256
|
+
};
|
|
257
|
+
const createTag = (db, tagName) => {
|
|
258
|
+
const tagId = (0, import_utils.createHash)(`tag-${tagName.toLowerCase()}`, null);
|
|
259
|
+
const insert = {
|
|
260
|
+
_key: tagId,
|
|
261
|
+
added: Date.now(),
|
|
262
|
+
name: tagName
|
|
263
|
+
};
|
|
264
|
+
const aqlQry = import_arangojs.aql`UPSERT {_key: ${tagId}}
|
|
265
|
+
INSERT ${insert}
|
|
266
|
+
UPDATE {}
|
|
267
|
+
IN tags RETURN NEW`;
|
|
268
|
+
return db.query(aqlQry).then((cursor) => cursor.next()).then((tag = {}) => tag).catch((error) => {
|
|
269
|
+
throw error;
|
|
270
|
+
});
|
|
271
|
+
};
|
|
272
|
+
const createTagEdge = (db, tag, itemId) => {
|
|
273
|
+
const edgeCollection = db.collection("isTagged");
|
|
274
|
+
const { _id: tagId } = tag;
|
|
275
|
+
const edgeId = (0, import_utils.createHash)(`isTagged-${tagId}-${itemId}`);
|
|
276
|
+
const type = itemId.split("/")[0];
|
|
277
|
+
const edge = {
|
|
278
|
+
_from: tagId,
|
|
279
|
+
_key: edgeId,
|
|
280
|
+
_to: itemId,
|
|
281
|
+
added: Date.now(),
|
|
282
|
+
type
|
|
283
|
+
};
|
|
284
|
+
return edgeCollection.save(edge, { returnNew: true }).then(() => tag);
|
|
285
|
+
};
|
|
286
|
+
const linkTags = async (db, tagNames, itemId) => {
|
|
287
|
+
const edgeCollection = db.collection("isTagged");
|
|
288
|
+
const edges = await edgeCollection.inEdges(itemId);
|
|
289
|
+
console.log({ edges });
|
|
290
|
+
if (edges.length) {
|
|
291
|
+
await Promise.all(edges.map((edge) => {
|
|
292
|
+
const { _key: edgeKey } = edge;
|
|
293
|
+
const aqlQry = import_arangojs.aql`REMOVE {_key:${edgeKey}} IN isTagged`;
|
|
294
|
+
return db.query(aqlQry);
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
return Promise.all(tagNames.map((tagName) => createTag(db, tagName).then((tag) => createTagEdge(db, tag, itemId))));
|
|
298
|
+
};
|
|
299
|
+
const extractTags = (db, itemId, content) => {
|
|
300
|
+
const tags = (0, import_words.default)(content, /#[a-zA-Z\d-]+/g).map((tag) => (0, import_utils.parseId)(tag));
|
|
301
|
+
const edgeCollection = db.collection("isTagged");
|
|
302
|
+
return edgeCollection.inEdges(itemId).then((edges) => {
|
|
303
|
+
if (edges.length) {
|
|
304
|
+
return Promise.all(edges.map((edge) => {
|
|
305
|
+
const { _key: edgeKey } = edge;
|
|
306
|
+
const aqlQry = import_arangojs.aql`REMOVE {_key:${edgeKey}} IN isTagged`;
|
|
307
|
+
return db.query(aqlQry).catch((error) => {
|
|
308
|
+
throw error;
|
|
309
|
+
});
|
|
310
|
+
})).then(() => {
|
|
311
|
+
if (tags.length) {
|
|
312
|
+
return linkTags(db, tags, itemId);
|
|
313
|
+
}
|
|
314
|
+
return [];
|
|
315
|
+
});
|
|
316
|
+
} else if (tags.length) {
|
|
317
|
+
return linkTags(db, tags, itemId);
|
|
318
|
+
}
|
|
319
|
+
return [];
|
|
320
|
+
}).catch((error) => {
|
|
321
|
+
throw error;
|
|
322
|
+
});
|
|
323
|
+
};
|
|
324
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
325
|
+
0 && (module.exports = {
|
|
326
|
+
addTag,
|
|
327
|
+
addTagToItem,
|
|
328
|
+
createTag,
|
|
329
|
+
createTagEdge,
|
|
330
|
+
deleteTag,
|
|
331
|
+
deleteTagFromItem,
|
|
332
|
+
extractTags,
|
|
333
|
+
getTag,
|
|
334
|
+
getTags,
|
|
335
|
+
getTagsByItem,
|
|
336
|
+
getTagsByOwner,
|
|
337
|
+
linkTags,
|
|
338
|
+
updateTag
|
|
339
|
+
});
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvdGFncy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUlkLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbCwgRGF0YWJhc2V9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9uJztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2N1cnNvcic7XG5pbXBvcnQgd29yZHMgZnJvbSAnbG9kYXNoL3dvcmRzJztcblxuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtUYWdUeXBlfSBmcm9tICcuLi90eXBlcy90YWdzJztcbmltcG9ydCB7Z2V0TGltaXQsIGxvZ0Vycm9yLCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICd0YWdzJztcblxuZXhwb3J0IGNvbnN0IGdldFRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGFyZ3Ncbik6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3Qge3NlYXJjaCA9ICcnLCBmcm9tID0gMCwgdG8gPSAzMH0gPSBhcmdzO1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgZmlsdGVyOiBzdHJpbmcgPSBzZWFyY2gubGVuZ3RoID8gYEZJTFRFUiBMSUtFKHQubmFtZSwgXCIlJHtzZWFyY2h9JVwiKWAgOiAnJztcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHQgSU4gdGFnc1xuICAgICR7ZmlsdGVyfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgdC5uYW1lXG4gICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigobGlzdCA9IFtdKSA9PiBsaXN0KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGFnc0J5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZywgIGFyZ3MpOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0JztcbiAgY29uc3Qge2Zyb20gPSAwLCB0byA9IDMwfSA9IGFyZ3M7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG5cbiAgY29uc3QgdGFnUXVlcnk6IHN0cmluZyA9IGBGT1IgdCwgaXQgSU4gSU5CT1VORCBcIiR7Zm9ybWF0SXRlbUlkfVwiIGlzVGFnZ2VkXG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCBpdC5hZGRlZFxuICAgIFJFVFVSTiB0YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkodGFnUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSB8fCBbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhZ3NCeU93bmVyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGFyZ3MpOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0JztcbiAgY29uc3Qge2Zyb20gPSAwLCBpZCwgdG8gPSAzMH0gPSBhcmdzO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB0IElOIHRhZ3NcbiAgICBGSUxURVIgdC51c2VySWQgPT0gXCIke2lkfVwiXG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCB0LmFkZGVkXG4gICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigobGlzdCA9IFtdKSA9PiBsaXN0KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZ0lkOiBzdHJpbmcpOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocGFyc2VJZCh0YWdJZCkpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdCBJTiB0YWdzXG4gICAgRklMVEVSIHQuX2tleSA9PSAke2Zvcm1hdElkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFRhZyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB7dGFnfSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRUYWcnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3Qge3VzZXJBY2Nlc3N9ID0gc2Vzc2lvbjtcblxuICBpZih1c2VyQWNjZXNzIDwgMykge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIHNlc3Npb24pO1xuICB9XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB7ZGVzY3JpcHRpb24sIG5hbWV9ID0gdGFnO1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgdGFnLSR7bmFtZS50b0xvd2VyY2FzZSgpfWAsIG51bGwpO1xuXG4gIGNvbnN0IGluc2VydDogYW55ID0ge1xuICAgIF9rZXk6IGZvcm1hdElkLFxuICAgIGFkZGVkOiBub3csXG4gICAgZGVzY3JpcHRpb246IHBhcnNlVmFyQ2hhcihkZXNjcmlwdGlvbiwgNjQpLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZTogcGFyc2VWYXJDaGFyKG5hbWUsIDMyKVxuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiB0YWdzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHRhZzogVGFnVHlwZSA9IHt9KSA9PiB0YWcpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRUYWdUb0l0ZW0gPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwge2l0ZW1JZCwgdGFnSWR9KTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFRhZ1RvSXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBhZGRlZDogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0VGFnSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQodGFnSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBpc1RhZ2dlZC0ke2Zvcm1hdFRhZ0lkfS0ke2Zvcm1hdEl0ZW1JZH1gLCBudWxsKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaXNUYWdnZWQnKTtcbiAgY29uc3QgZWRnZTogYW55ID0ge19mcm9tOiBmb3JtYXRUYWdJZCwgX2tleTogZWRnZUlkLCBfdG86IGZvcm1hdEl0ZW1JZCwgYWRkZWR9O1xuICBjb25zb2xlLmxvZyh7ZWRnZX0pO1xuICBhd2FpdCBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtvdmVyd3JpdGVNb2RlOiAnaWdub3JlJywgc2lsZW50OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJyxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBlZGdlXG4gICAgICB9XG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5cblxuICBjb25zdCB0YWdRdWVyeTogQXFsUXVlcnkgPSBhcWxgTEVUIHQgPSBET0NVTUVOVCgke2Zvcm1hdFRhZ0lkfSkgUkVUVVJOIHRgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeSh0YWdRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJyxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBlZGdlXG4gICAgICB9XG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW06IFRhZ1R5cGUgPSB7fSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGUnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3Qge3VzZXJBY2Nlc3N9ID0gc2Vzc2lvbjtcblxuICBpZih1c2VyQWNjZXNzIDwgMykge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIHNlc3Npb24pO1xuICB9XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB7ZGVzY3JpcHRpb24sIGlkLCBuYW1lfSA9IGl0ZW07XG4gIGNvbnN0IGZvcm1hdE5hbWU6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihuYW1lLCAzMik7XG5cbiAgY29uc3QgdXBkYXRlOiBUYWdUeXBlID0ge1xuICAgIGRlc2NyaXB0aW9uOiBwYXJzZVZhckNoYXIoZGVzY3JpcHRpb24sIDY0KSxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IGZvcm1hdE5hbWVcbiAgfTtcblxuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChpZCk7XG4gIGNvbnN0IHRhZ0lkOiBzdHJpbmcgPSAhZm9ybWF0SWQgPyBjcmVhdGVIYXNoKGB0YWctJHtmb3JtYXROYW1lLnRvTG93ZXJDYXNlKCl9YCwgbnVsbCkgOiBmb3JtYXRJZDtcblxuICBjb25zdCBpbnNlcnQ6IFRhZ1R5cGUgPSB7XG4gICAgLi4udXBkYXRlLFxuICAgIF9rZXk6IHRhZ0lkLFxuICAgIGFkZGVkOiBub3dcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7dGFnSWR9fVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gdGFncyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWcgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHt0YWdJZH0pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlVGFnJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9ufSA9IGNvbnRleHQ7XG4gIGNvbnN0IHt1c2VyQWNjZXNzfSA9IHNlc3Npb247XG5cbiAgaWYodXNlckFjY2VzcyA8IDMpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBzZXNzaW9uKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFRhZ0lkOiBzdHJpbmcgPSBwYXJzZUlkKHRhZ0lkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdCBJTiB0YWdzXG4gICAgRklMVEVSIHQuX2tleSA9PSAke2Zvcm1hdFRhZ0lkfVxuICAgIFJFTU9WRSB0IElOIHRhZ3NcbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWc6IFRhZ1R5cGUgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVGFnRnJvbUl0ZW0gPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwge2l0ZW1JZCwgdGFnSWR9KTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVRhZ0Zyb21JdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFRhZ0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKHRhZ0lkKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgaXNUYWdnZWQtJHtmb3JtYXRUYWdJZH0tJHtmb3JtYXRJdGVtSWR9YCwgbnVsbCk7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG4gIGNvbnN0IGVkZ2U6IGFueSA9IHtfa2V5OiBlZGdlSWR9O1xuXG4gIGF3YWl0IGVkZ2VDb2xsZWN0aW9uLnJlbW92ZShlZGdlLCB7c2lsZW50OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xuXG4gIGNvbnN0IHRhZ1F1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgdCA9IERPQ1VNRU5UKCR7dGFnSWR9KSBSRVRVUk4gdGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KHRhZ1F1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGFnID0gKGRiOiBEYXRhYmFzZSwgdGFnTmFtZTogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IHRhZ0lkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGB0YWctJHt0YWdOYW1lLnRvTG93ZXJDYXNlKCl9YCwgbnVsbCk7XG4gIGNvbnN0IGluc2VydDogVGFnVHlwZSA9IHtcbiAgICBfa2V5OiB0YWdJZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICBuYW1lOiB0YWdOYW1lXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHt0YWdJZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSB7fVxuICAgIElOIHRhZ3MgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGFnRWRnZSA9IChkYjogRGF0YWJhc2UsIHRhZzogVGFnVHlwZSwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYi5jb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuICBjb25zdCB7X2lkOiB0YWdJZH0gPSB0YWc7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGlzVGFnZ2VkLSR7dGFnSWR9LSR7aXRlbUlkfWApO1xuICBjb25zdCB0eXBlOiBzdHJpbmcgPSBpdGVtSWQuc3BsaXQoJy8nKVswXTtcbiAgY29uc3QgZWRnZTogYW55ID0ge1xuICAgIF9mcm9tOiB0YWdJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBpdGVtSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgdHlwZVxuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IHRhZyk7XG59O1xuXG5leHBvcnQgY29uc3QgbGlua1RhZ3MgPSBhc3luYyAoZGI6IERhdGFiYXNlLCB0YWdOYW1lczogc3RyaW5nW10sIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYi5jb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuICBjb25zdCBlZGdlczogYW55ID0gYXdhaXQgZWRnZUNvbGxlY3Rpb24uaW5FZGdlcyhpdGVtSWQpO1xuXG4gIGNvbnNvbGUubG9nKHtlZGdlc30pO1xuICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICBjb25zdCB7X2tleTogZWRnZUtleX0gPSBlZGdlO1xuICAgICAgICBjb25zdCBhcWxRcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGlzVGFnZ2VkYDtcbiAgICAgICAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5hbGwodGFnTmFtZXMubWFwKCh0YWdOYW1lOiBzdHJpbmcpID0+IGNyZWF0ZVRhZyhkYiwgdGFnTmFtZSlcbiAgICAudGhlbigodGFnOiBUYWdUeXBlKSA9PiBjcmVhdGVUYWdFZGdlKGRiLCB0YWcsIGl0ZW1JZCkpKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RUYWdzID0gKGRiOiBEYXRhYmFzZSwgaXRlbUlkLCBjb250ZW50KTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgdGFnczogc3RyaW5nW10gPSB3b3Jkcyhjb250ZW50LCAvI1thLXpBLVpcXGQtXSsvZykubWFwKCh0YWc6IHN0cmluZykgPT4gcGFyc2VJZCh0YWcpKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSBkYi5jb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5pbkVkZ2VzKGl0ZW1JZClcbiAgICAudGhlbigoZWRnZXM6IGFueSkgPT4ge1xuICAgICAgaWYoZWRnZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBsaW5rZWQgZWRnZXNcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBSRU1PVkUge19rZXk6JHtlZGdlS2V5fX0gSU4gaXNUYWdnZWRgO1xuICAgICAgICAgICAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSkuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmKHRhZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSB0YWdzXG4gICAgICAgICAgICAgIHJldHVybiBsaW5rVGFncyhkYiwgdGFncywgaXRlbUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZih0YWdzLmxlbmd0aCkge1xuICAgICAgICAvLyBDcmVhdGUgdGFnc1xuICAgICAgICByZXR1cm4gbGlua1RhZ3MoZGIsIHRhZ3MsIGl0ZW1JZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUErRDtBQUMvRCxzQkFBNEI7QUFJNUIsbUJBQWtCO0FBS2xCLG9CQUErQztBQU0vQyxNQUFNLGdCQUF3QjtBQUV2QixNQUFNLFVBQVUsQ0FDckIsU0FDQSxTQUN1QjtBQUN2QixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxhQUFZO0FBQ25CLFFBQU0sRUFBQyxTQUFTLElBQUksT0FBTyxHQUFHLEtBQUssT0FBTTtBQUN6QyxRQUFNLFFBQXVCLDRCQUFTLE1BQU07QUFDNUMsUUFBTSxTQUFpQixPQUFPLFNBQVMseUJBQXlCLGNBQWM7QUFDOUUsUUFBTSxTQUFpQjtBQUFBLE1BQ25CO0FBQUEsTUFDQSxNQUFNO0FBQUE7QUFBQTtBQUlWLFNBQU8sU0FBUyxNQUFNLFFBQ25CLEtBQUssQ0FBQyxXQUF3QixPQUFPLE9BQ3JDLEtBQUssQ0FBQyxPQUFPLE9BQU8sTUFDcEIsTUFBTSxDQUFDLFVBQWlCLDRCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxLQUNOLE9BQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUMsV0FBVSxRQUFRLE9BQU87QUFBQTtBQUc1RCxNQUFNLGdCQUFnQixDQUFDLFNBQXFCLFFBQWlCLFNBQTZCO0FBQy9GLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLE9BQU8sR0FBRyxLQUFLLE9BQU07QUFD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
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ApiContext } from '../types/auth';
|
|
2
|
+
import { User } from '../types/users';
|
|
3
|
+
import { SessionError, SessionToken } from '../utils/session';
|
|
4
|
+
export interface UserOptions {
|
|
5
|
+
readonly from?: number;
|
|
6
|
+
readonly to?: number;
|
|
7
|
+
readonly username?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare enum UserAccess {
|
|
10
|
+
DEACTIVATED = 0,
|
|
11
|
+
ACTIVE = 1,
|
|
12
|
+
PREMIUM = 2,
|
|
13
|
+
CONTENT_ADMIN = 3,
|
|
14
|
+
ADMIN = 4
|
|
15
|
+
}
|
|
16
|
+
export declare const createToken: (userId: string, username: string, userAccess: number, expires?: number) => SessionToken;
|
|
17
|
+
export declare const getUserOptional: (fields?: string[]) => any;
|
|
18
|
+
export declare const parseUserOptions: (options?: UserOptions) => {
|
|
19
|
+
limit: import("..").ArangoDBLimit;
|
|
20
|
+
from?: number;
|
|
21
|
+
to?: number;
|
|
22
|
+
username?: string;
|
|
23
|
+
};
|
|
24
|
+
export declare const addUser: (context: ApiContext, args: any) => Promise<User>;
|
|
25
|
+
export declare const updateUser: (context: ApiContext, user: User) => Promise<any>;
|
|
26
|
+
export declare const confirmCode: (context: ApiContext, args: any) => Promise<boolean>;
|
|
27
|
+
export declare const deleteUser: (context: ApiContext, args: any) => Promise<any>;
|
|
28
|
+
export declare const deactivateUser: (context: ApiContext, userId: string) => Promise<User>;
|
|
29
|
+
export declare const getDisplayName: (user?: User) => string;
|
|
30
|
+
export declare const getSessionUser: (context: ApiContext) => Promise<User>;
|
|
31
|
+
export declare const getUser: (context: ApiContext, args: any) => Promise<User>;
|
|
32
|
+
export declare const getUsers: (context: ApiContext, options?: UserOptions) => Promise<User[]>;
|
|
33
|
+
export declare const getUsersByReactions: (context: ApiContext, { reactions, username }: any, options?: UserOptions) => Promise<User[]>;
|
|
34
|
+
export declare const getUsersByTags: (context: ApiContext, { tags, username }: any, options?: UserOptions) => Promise<User[]>;
|
|
35
|
+
export declare const getUsersByLatest: (context: ApiContext, { username }: {
|
|
36
|
+
username: any;
|
|
37
|
+
}, options?: UserOptions) => Promise<User[]>;
|
|
38
|
+
export declare const refreshSession: (context: ApiContext, { expires, token }: {
|
|
39
|
+
expires: any;
|
|
40
|
+
token: any;
|
|
41
|
+
}) => Promise<SessionToken | SessionError>;
|
|
42
|
+
export declare const signIn: (context: ApiContext, args: any) => Promise<SessionToken>;
|
|
43
|
+
export declare const signOut: (context: ApiContext, args: any) => Promise<boolean>;
|
|
44
|
+
export declare const getActiveUserCount: (context: ApiContext) => Promise<any>;
|