@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.
Files changed (151) hide show
  1. package/lib/actions/conversations.d.ts +14 -0
  2. package/lib/actions/conversations.js +333 -0
  3. package/lib/actions/dynamodb.js +155 -0
  4. package/lib/actions/email.js +177 -0
  5. package/lib/actions/files.js +319 -0
  6. package/lib/{data → actions}/groups.d.ts +4 -3
  7. package/lib/actions/groups.js +282 -0
  8. package/lib/actions/images.d.ts +22 -0
  9. package/lib/actions/images.js +682 -0
  10. package/lib/actions/index.js +40 -0
  11. package/lib/{data → actions}/ios.d.ts +2 -1
  12. package/lib/actions/ios.js +179 -0
  13. package/lib/actions/locations.js +112 -0
  14. package/lib/actions/messages.d.ts +13 -0
  15. package/lib/actions/messages.js +216 -0
  16. package/lib/{data → actions}/notifications.d.ts +2 -2
  17. package/lib/actions/notifications.js +63 -0
  18. package/lib/{data → actions}/payments.d.ts +2 -2
  19. package/lib/actions/payments.js +491 -0
  20. package/lib/actions/posts.d.ts +19 -0
  21. package/lib/actions/posts.js +538 -0
  22. package/lib/actions/reactions.d.ts +30 -0
  23. package/lib/actions/reactions.js +340 -0
  24. package/lib/{data → actions}/s3.d.ts +1 -1
  25. package/lib/actions/s3.js +122 -0
  26. package/lib/{data → actions}/search.d.ts +2 -2
  27. package/lib/actions/search.js +99 -0
  28. package/lib/actions/sms.js +76 -0
  29. package/lib/actions/statistics.d.ts +2 -0
  30. package/lib/actions/statistics.js +63 -0
  31. package/lib/actions/subscription.js +209 -0
  32. package/lib/actions/tags.d.ts +26 -0
  33. package/lib/actions/tags.js +340 -0
  34. package/lib/actions/users.d.ts +44 -0
  35. package/lib/actions/users.js +571 -0
  36. package/lib/{data → actions}/websockets.d.ts +1 -1
  37. package/lib/actions/websockets.js +156 -0
  38. package/lib/config.d.ts +2 -3
  39. package/lib/config.js +116 -149
  40. package/lib/index.d.ts +1 -1
  41. package/lib/index.js +23 -45
  42. package/lib/templates/email/layout.d.ts +2 -0
  43. package/lib/templates/email/layout.js +292 -0
  44. package/lib/templates/email/passwordForgot.d.ts +2 -0
  45. package/lib/templates/email/passwordForgot.js +28 -0
  46. package/lib/templates/email/passwordRecovery.d.ts +2 -0
  47. package/lib/templates/email/passwordRecovery.js +25 -0
  48. package/lib/templates/email/verifyEmail.d.ts +2 -0
  49. package/lib/templates/email/verifyEmail.js +28 -0
  50. package/lib/templates/email/welcome.d.ts +2 -0
  51. package/lib/templates/email/welcome.js +28 -0
  52. package/lib/templates/sms/passwordForgot.d.ts +2 -0
  53. package/lib/templates/sms/passwordForgot.js +14 -0
  54. package/lib/templates/sms/passwordRecovery.d.ts +2 -0
  55. package/lib/templates/sms/passwordRecovery.js +14 -0
  56. package/lib/templates/sms/verifyEmail.d.ts +2 -0
  57. package/lib/templates/sms/verifyEmail.js +14 -0
  58. package/lib/templates/sms/verifyPhone.d.ts +2 -0
  59. package/lib/templates/sms/verifyPhone.js +14 -0
  60. package/lib/templates/sms/welcome.d.ts +2 -0
  61. package/lib/templates/sms/welcome.js +14 -0
  62. package/lib/types/apps.d.ts +2 -2
  63. package/lib/types/apps.js +4 -2
  64. package/lib/types/arangodb.js +4 -2
  65. package/lib/types/auth.d.ts +4 -8
  66. package/lib/types/auth.js +4 -2
  67. package/lib/types/conversations.d.ts +3 -3
  68. package/lib/types/conversations.js +4 -2
  69. package/lib/types/email.d.ts +2 -2
  70. package/lib/types/email.js +4 -2
  71. package/lib/types/files.js +4 -2
  72. package/lib/types/google.js +4 -2
  73. package/lib/types/groups.d.ts +2 -1
  74. package/lib/types/groups.js +4 -2
  75. package/lib/types/images.d.ts +8 -5
  76. package/lib/types/images.js +4 -2
  77. package/lib/types/index.d.ts +1 -1
  78. package/lib/types/index.js +37 -227
  79. package/lib/types/locations.js +4 -2
  80. package/lib/types/messages.d.ts +12 -2
  81. package/lib/types/messages.js +4 -2
  82. package/lib/types/notifications.d.ts +2 -2
  83. package/lib/types/notifications.js +4 -2
  84. package/lib/types/payments.js +4 -2
  85. package/lib/types/posts.d.ts +18 -1
  86. package/lib/types/posts.js +4 -2
  87. package/lib/types/statistics.d.ts +3 -0
  88. package/lib/types/statistics.js +4 -0
  89. package/lib/types/tags.d.ts +6 -0
  90. package/lib/types/tags.js +4 -2
  91. package/lib/types/users.d.ts +15 -11
  92. package/lib/types/users.js +4 -2
  93. package/lib/utils/analytics.d.ts +7 -0
  94. package/lib/utils/analytics.js +101 -77
  95. package/lib/utils/arangodb.d.ts +1 -1
  96. package/lib/utils/arangodb.js +93 -114
  97. package/lib/utils/auth.js +58 -55
  98. package/lib/utils/graphql.js +38 -19
  99. package/lib/utils/index.d.ts +1 -1
  100. package/lib/utils/index.js +26 -84
  101. package/lib/utils/objects.js +44 -53
  102. package/lib/utils/session.d.ts +18 -0
  103. package/lib/utils/session.js +42 -0
  104. package/package.json +32 -30
  105. package/lib/data/conversations.d.ts +0 -8
  106. package/lib/data/conversations.js +0 -311
  107. package/lib/data/dynamodb.js +0 -206
  108. package/lib/data/email.js +0 -222
  109. package/lib/data/files.js +0 -525
  110. package/lib/data/groups.js +0 -435
  111. package/lib/data/images.d.ts +0 -22
  112. package/lib/data/images.js +0 -1051
  113. package/lib/data/index.js +0 -266
  114. package/lib/data/ios.js +0 -355
  115. package/lib/data/locations.js +0 -172
  116. package/lib/data/messages.d.ts +0 -9
  117. package/lib/data/messages.js +0 -299
  118. package/lib/data/notifications.js +0 -59
  119. package/lib/data/payments.js +0 -771
  120. package/lib/data/posts.d.ts +0 -23
  121. package/lib/data/posts.js +0 -766
  122. package/lib/data/reactions.d.ts +0 -14
  123. package/lib/data/reactions.js +0 -529
  124. package/lib/data/s3.js +0 -155
  125. package/lib/data/search.js +0 -155
  126. package/lib/data/sms.js +0 -83
  127. package/lib/data/subscription.js +0 -337
  128. package/lib/data/tags.d.ts +0 -14
  129. package/lib/data/tags.js +0 -397
  130. package/lib/data/users.d.ts +0 -20
  131. package/lib/data/users.js +0 -470
  132. package/lib/data/websockets.js +0 -250
  133. package/lib/types/reactions.d.ts +0 -17
  134. package/lib/types/reactions.js +0 -2
  135. package/lib/utils/redis.d.ts +0 -1
  136. package/lib/utils/redis.js +0 -36
  137. package/templates/email/layout.html +0 -279
  138. package/templates/email/passwordForgot.html +0 -15
  139. package/templates/email/passwordRecovery.html +0 -12
  140. package/templates/email/verifyEmail.html +0 -15
  141. package/templates/sms/passwordForgot.txt +0 -1
  142. package/templates/sms/passwordRecovery.txt +0 -1
  143. package/templates/sms/verifyEmail.txt +0 -1
  144. package/templates/sms/verifyPhone.txt +0 -1
  145. /package/lib/{data → actions}/dynamodb.d.ts +0 -0
  146. /package/lib/{data → actions}/email.d.ts +0 -0
  147. /package/lib/{data → actions}/files.d.ts +0 -0
  148. /package/lib/{data → actions}/index.d.ts +0 -0
  149. /package/lib/{data → actions}/locations.d.ts +0 -0
  150. /package/lib/{data → actions}/sms.d.ts +0 -0
  151. /package/lib/{data → actions}/subscription.d.ts +0 -0
@@ -0,0 +1,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+IHtcbiAgICAgICAgICAgIGlmKHRhZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSB0YWdzXG4gICAgICAgICAgICAgIHJldHVybiBsaW5rVGFncyhkYiwgdGFncywgaXRlbUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZih0YWdzLmxlbmd0aCkge1xuICAgICAgICAvLyBDcmVhdGUgdGFnc1xuICAgICAgICByZXR1cm4gbGlua1RhZ3MoZGIsIHRhZ3MsIGl0ZW1JZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUErRDtBQUMvRCxzQkFBNEI7QUFJNUIsbUJBQWtCO0FBS2xCLG9CQUErQztBQU0vQyxNQUFNLGdCQUF3QjtBQUV2QixNQUFNLFVBQVUsQ0FDckIsU0FDQSxTQUN1QjtBQUN2QixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxhQUFZO0FBQ25CLFFBQU0sRUFBQyxTQUFTLElBQUksT0FBTyxHQUFHLEtBQUssT0FBTTtBQUN6QyxRQUFNLFFBQXVCLDRCQUFTLE1BQU07QUFDNUMsUUFBTSxTQUFpQixPQUFPLFNBQVMseUJBQXlCLGNBQWM7QUFDOUUsUUFBTSxTQUFpQjtBQUFBLE1BQ25CO0FBQUEsTUFDQSxNQUFNO0FBQUE7QUFBQTtBQUlWLFNBQU8sU0FBUyxNQUFNLFFBQ25CLEtBQUssQ0FBQyxXQUF3QixPQUFPLE9BQ3JDLEtBQUssQ0FBQyxPQUFPLE9BQU8sTUFDcEIsTUFBTSxDQUFDLFVBQWlCLDRCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxLQUNOLE9BQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUMsV0FBVSxRQUFRLE9BQU87QUFBQTtBQUc1RCxNQUFNLGdCQUFnQixDQUFDLFNBQXFCLFFBQWlCLFNBQTZCO0FBQy9GLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLE9BQU8sR0FBRyxLQUFLLE9BQU07QUFDNUIsUUFBTSxFQUFDLGFBQVk7QUFDbkIsUUFBTSxRQUF1Qiw0QkFBUyxNQUFNO0FBQzVDLFFBQU0sZUFBdUIsZ0NBQWM7QUFFM0MsUUFBTSxXQUFtQix5QkFBeUI7QUFBQSxNQUM5QyxNQUFNO0FBQUE7QUFBQTtBQUlWLFNBQU8sU0FBUyxNQUFNLFVBQ25CLEtBQUssQ0FBQyxXQUF3QixPQUFPLFNBQVMsSUFDOUMsTUFBTSxDQUFDLFVBQWlCLDRCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxLQUNOLE9BQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUMsV0FBVSxRQUFRLE9BQU87QUFBQTtBQUc1RCxNQUFNLGlCQUFpQixDQUFDLFNBQXFCLFNBQTZCO0FBQy9FLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLE9BQU8sR0FBRyxJQUFJLEtBQUssT0FBTTtBQUNoQyxRQUFNLEVBQUMsYUFBWTtBQUNuQixRQUFNLFFBQXVCLDRCQUFTLE1BQU07QUFDNUMsUUFBTSxTQUFpQjtBQUFBLDBCQUNDO0FBQUEsTUFDcEIsTUFBTTtBQUFBO0FBQUE7QUFJVixTQUFPLFNBQVMsTUFBTSxRQUNuQixLQUFLLENBQUMsV0FBd0IsT0FBTyxPQUNyQyxLQUFLLENBQUMsT0FBTyxPQUFPLE1BQ3BCLE1BQU0sQ0FBQyxVQUFpQiw0QkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsS0FDTixPQUFPLElBQUksS0FBSyxNQUFNLE1BQU0sTUFBTSxDQUFDLFdBQVUsUUFBUSxPQUFPO0FBQUE7QUFHNUQsTUFBTSxTQUFTLENBQUMsU0FBcUIsVUFBb0M7QUFDOUUsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsYUFBWTtBQUNuQixRQUFNLFdBQW1CLEtBQUssVUFBVSwwQkFBUTtBQUNoRCxRQUFNLFNBQWlCO0FBQUEsdUJBQ0Y7QUFBQTtBQUFBO0FBSXJCLFNBQU8sU0FBUyxNQUFNLFFBQ25CLEtBQUssQ0FBQyxXQUF3QixPQUFPLFFBQ3JDLEtBQUssQ0FBQyxNQUFNLE9BQU8sS0FDbkIsTUFBTSxDQUFDLFVBQWlCLDRCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxLQUNOLE9BQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUMsV0FBVSxRQUFRLE9BQU87QUFBQTtBQUc1RCxNQUFNLFNBQVMsQ0FBQyxTQUFxQixFQUFDLFVBQTJCO0FBQ3RFLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFVBQVUsWUFBVztBQUM1QixRQUFNLEVBQUMsZUFBYztBQUVyQixNQUFHLGFBQWEsR0FBRztBQUNqQixXQUFPLGdDQUFhO0FBQUEsTUFDbEI7QUFBQSxNQUNBLFVBQVU7QUFBQSxNQUNWLE9BQU87QUFBQSxPQUNOO0FBQUE7QUFHTCxRQUFNLE1BQWMsS0FBSztBQUN6QixRQUFNLEVBQUMsYUFBYSxTQUFRO0FBQzVCLFFBQU0sV0FBbUIsNkJBQVcsT0FBTyxLQUFLLGlCQUFpQjtBQUVqRSxRQUFNLFNBQWM7QUFBQSxJQUNsQixNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsSUFDUCxhQUFhLCtCQUFhLGFBQWE7QUFBQSxJQUN2QyxVQUFVO0FBQUEsSUFDVixNQUFNLCtCQUFhLE1BQU07QUFBQTtBQUczQixRQUFNLFNBQW1CLDZCQUFhO0FBRXRDLFNBQU8sU0FBUyxNQUFNLFFBQ25CLEtBQUssQ0FBQyxXQUF3QixPQUFPLFFBQ3JDLEtBQUssQ0FBQyxPQUFlLE9BQU8sTUFDNUIsTUFBTSxDQUFDLFVBQWlCLDRCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxLQUNOLE9BQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUMsV0FBVSxRQUFRLE9BQU87QUFBQTtBQUc1RCxNQUFNLGVBQWUsT0FBTyxTQUFxQixFQUFDLFFBQVEsWUFBNkI7QUFDNUYsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsYUFBWTtBQUNuQixRQUFNLFFBQWdCLEtBQUs7QUFDM0IsUUFBTSxjQUFzQixnQ0FBYztBQUMxQyxRQUFNLGVBQXVCLGdDQUFjO0FBQzNDLFFBQU0sU0FBaUIsNkJBQVcsWUFBWSxlQUFlLGdCQUFnQjtBQUM3RSxRQUFNLGlCQUFpQyxTQUFTLFdBQVc7QUFDM0QsUUFBTSxPQUFZLEVBQUMsT0FBTyxhQUFhLE1BQU0sUUFBUSxLQUFLLGNBQWM7QUFDeEUsVUFBUSxJQUFJLEVBQUM7QUFDYixRQUFNLGVBQWUsS0FBSyxNQUFNLEVBQUMsZUFBZSxVQUFVLFFBQVEsUUFDL0QsTUFBTSxDQUFDLFVBQWlCLDRCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxNQUNOO0FBQUE7QUFBQSxLQUVELE9BQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUMsV0FBVSxRQUFRLE9BQU87QUFHakUsUUFBTSxXQUFxQix1Q0FBdUI7QUFFbEQsU0FBTyxTQUFTLE1BQU0sVUFDbkIsS0FBSyxDQUFDLFdBQXdCLE9BQU8sUUFDckMsTUFBTSxDQUFDLFVBQWlCLDRCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxNQUNOO0FBQUE7QUFBQSxLQUVELE9BQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUMsV0FBVSxRQUFRLE9BQU87QUFBQTtBQUc1RCxNQUFNLFlBQVksQ0FBQyxTQUFxQixPQUFnQixPQUF5QjtBQUN0RixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxVQUFVLFlBQVc7QUFDNUIsUUFBTSxFQUFDLGVBQWM7QUFFckIsTUFBRyxhQUFhLEdBQUc7QUFDakIsV0FBTyxnQ0FBYTtBQUFBLE1BQ2xCO0FBQUEsTUFDQSxVQUFVO0FBQUEsTUFDVixPQUFPO0FBQUEsT0FDTjtBQUFBO0FBR0wsUUFBTSxNQUFjLEtBQUs7QUFDekIsUUFBTSxFQUFDLGFBQWEsSUFBSSxTQUFRO0FBQ2hDLFFBQU0sYUFBcUIsK0JBQWEsTUFBTTtBQUU5QyxRQUFNLFNBQWtCO0FBQUEsSUFDdEIsYUFBYSwrQkFBYSxhQUFhO0FBQUEsSUFDdkMsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBO0FBR1IsUUFBTSxXQUFtQiwwQkFBUTtBQUNqQyxRQUFNLFFBQWdCLENBQUMsV0FBVyw2QkFBVyxPQUFPLFdBQVcsaUJBQWlCLFFBQVE7QUFFeEYsUUFBTSxTQUFrQixpQ0FDbkIsU0FEbUI7QUFBQSxJQUV0QixNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUE7QUFFVCxRQUFNLFNBQW1CLG9DQUFvQjtBQUFBLGFBQ2xDO0FBQUEsYUFDQTtBQUFBO0FBR1gsU0FBTyxTQUFTLE1BQU0sUUFDbkIsS0FBSyxDQUFDLFdBQXdCLE9BQU8sUUFDckMsS0FBSyxDQUFDLE1BQU0sT0FBTyxLQUNuQixNQUFNLENBQUMsVUFBaUIsNEJBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEtBQ04sT0FBTyxJQUFJLEtBQUssTUFBTSxNQUFNLE1BQU0sQ0FBQyxXQUFVLFFBQVEsT0FBTztBQUFBO0FBRzVELE1BQU0sWUFBWSxDQUFDLFNBQXFCLEVBQUMsWUFBNkI7QUFDM0UsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsVUFBVSxZQUFXO0FBQzVCLFFBQU0sRUFBQyxlQUFjO0FBRXJCLE1BQUcsYUFBYSxHQUFHO0FBQ2pCLFdBQU8sZ0NBQWE7QUFBQSxNQUNsQjtBQUFBLE1BQ0EsVUFBVTtBQUFBLE1BQ1YsT0FBTztBQUFBLE9BQ047QUFBQTtBQUdMLFFBQU0sY0FBc0IsMEJBQVE7QUFDcEMsUUFBTSxTQUFtQjtBQUFBLHVCQUNKO0FBQUE7QUFBQTtBQUlyQixTQUFPLFNBQVMsTUFBTSxRQUNuQixLQUFLLENBQUMsV0FBd0IsT0FBTyxRQUNyQyxLQUFLLENBQUMsTUFBZSxPQUFPLEtBQzVCLE1BQU0sQ0FBQyxVQUFpQiw0QkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsS0FDTixPQUFPLElBQUksS0FBSyxNQUFNLE1BQU0sTUFBTSxDQUFDLFdBQVUsUUFBUSxPQUFPO0FBQUE7QUFHNUQsTUFBTSxvQkFBb0IsT0FBTyxTQUFxQixFQUFDLFFBQVEsWUFBNkI7QUFDakcsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsYUFBWTtBQUNuQixRQUFNLGNBQXNCLGdDQUFjO0FBQzFDLFFBQU0sZUFBdUIsZ0NBQWM7QUFDM0MsUUFBTSxTQUFpQiw2QkFBVyxZQUFZLGVBQWUsZ0JBQWdCO0FBQzdFLFFBQU0saUJBQWlDLFNBQVMsV0FBVztBQUMzRCxRQUFNLE9BQVksRUFBQyxNQUFNO0FBRXpCLFFBQU0sZUFBZSxPQUFPLE1BQU0sRUFBQyxRQUFRLFFBQ3hDLE1BQU0sQ0FBQyxVQUFpQiw0QkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsS0FDTixPQUFPLElBQUksS0FBSyxNQUFNLE1BQU0sTUFBTSxDQUFDLFdBQVUsUUFBUSxPQUFPO0FBRWpFLFFBQU0sV0FBcUIsdUNBQXVCO0FBRWxELFNBQU8sU0FBUyxNQUFNLFVBQ25CLEtBQUssQ0FBQyxXQUF3QixPQUFPLFFBQ3JDLE1BQU0sQ0FBQyxVQUFpQiw0QkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsS0FDTixPQUFPLElBQUksS0FBSyxNQUFNLE1BQU0sTUFBTSxDQUFDLFdBQVUsUUFBUSxPQUFPO0FBQUE7QUFHNUQsTUFBTSxZQUFZLENBQUMsSUFBYyxZQUFzQztBQUM1RSxRQUFNLFFBQWdCLDZCQUFXLE9BQU8sUUFBUSxpQkFBaUI7QUFDakUsUUFBTSxTQUFrQjtBQUFBLElBQ3RCLE1BQU07QUFBQSxJQUNOLE9BQU8sS0FBSztBQUFBLElBQ1osTUFBTTtBQUFBO0FBR1IsUUFBTSxTQUFTLG9DQUFvQjtBQUFBLGFBQ3hCO0FBQUE7QUFBQTtBQUlYLFNBQU8sR0FBRyxNQUFNLFFBQ2IsS0FBSyxDQUFDLFdBQXdCLE9BQU8sUUFDckMsS0FBSyxDQUFDLE1BQU0sT0FBTyxLQUNuQixNQUFNLENBQUMsVUFBaUI7QUFDdkIsVUFBTTtBQUFBO0FBQUE7QUFJTCxNQUFNLGdCQUFnQixDQUFDLElBQWMsS0FBYyxXQUFxQztBQUM3RixRQUFNLGlCQUFpQixHQUFHLFdBQVc7QUFDckMsUUFBTSxFQUFDLEtBQUssVUFBUztBQUNyQixRQUFNLFNBQVMsNkJBQVcsWUFBWSxTQUFTO0FBQy9DLFFBQU0sT0FBZSxPQUFPLE1BQU0sS0FBSztBQUN2QyxRQUFNLE9BQVk7QUFBQSxJQUNoQixPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTCxPQUFPLEtBQUs7QUFBQSxJQUNaO0FBQUE7QUFHRixTQUFPLGVBQWUsS0FBSyxNQUFNLEVBQUMsV0FBVyxRQUFPLEtBQUssTUFBTTtBQUFBO0FBRzFELE1BQU0sV0FBVyxPQUFPLElBQWMsVUFBb0IsV0FBdUM7QUFDdEcsUUFBTSxpQkFBaUIsR0FBRyxXQUFXO0FBQ3JDLFFBQU0sUUFBYSxNQUFNLGVBQWUsUUFBUTtBQUVoRCxVQUFRLElBQUksRUFBQztBQUNiLE1BQUcsTUFBTSxRQUFRO0FBQ2YsVUFBTSxRQUFRLElBQ1osTUFBTSxJQUFJLENBQUMsU0FBUztBQUNsQixZQUFNLEVBQUMsTUFBTSxZQUFXO0FBQ3hCLFlBQU0sU0FBUyxtQ0FBbUI7QUFDbEMsYUFBTyxHQUFHLE1BQU07QUFBQTtBQUFBO0FBS3RCLFNBQU8sUUFBUSxJQUFJLFNBQVMsSUFBSSxDQUFDLFlBQW9CLFVBQVUsSUFBSSxTQUNoRSxLQUFLLENBQUMsUUFBaUIsY0FBYyxJQUFJLEtBQUs7QUFBQTtBQUk1QyxNQUFNLGNBQWMsQ0FBQyxJQUFjLFFBQVEsWUFBZ0M7QUFDaEYsUUFBTSxPQUFpQiwwQkFBTSxTQUFTLGtCQUFrQixJQUFJLENBQUMsUUFBZ0IsMEJBQVE7QUFDckYsUUFBTSxpQkFBaUIsR0FBRyxXQUFXO0FBRXJDLFNBQU8sZUFBZSxRQUFRLFFBQzNCLEtBQUssQ0FBQyxVQUFlO0FBQ3BCLFFBQUcsTUFBTSxRQUFRO0FBRWYsYUFBTyxRQUFRLElBQ2IsTUFBTSxJQUFJLENBQUMsU0FBUztBQUNsQixjQUFNLEVBQUMsTUFBTSxZQUFXO0FBQ3hCLGNBQU0sU0FBUyxtQ0FBbUI7QUFDbEMsZUFBTyxHQUFHLE1BQU0sUUFBUSxNQUFNLENBQUMsVUFBaUI7QUFDOUMsZ0JBQU07QUFBQTtBQUFBLFVBR1QsS0FBSyxNQUFNO0FBQ1YsWUFBRyxLQUFLLFFBQVE7QUFFZCxpQkFBTyxTQUFTLElBQUksTUFBTTtBQUFBO0FBRTVCLGVBQU87QUFBQTtBQUFBLGVBRUgsS0FBSyxRQUFRO0FBRXJCLGFBQU8sU0FBUyxJQUFJLE1BQU07QUFBQTtBQUU1QixXQUFPO0FBQUEsS0FFUixNQUFNLENBQUMsVUFBaUI7QUFDdkIsVUFBTTtBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -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>;