@nlabs/reaktor 0.8.1 → 0.9.0

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 (183) hide show
  1. package/.eslintrc +10 -0
  2. package/.prettierrc.js +4 -0
  3. package/README.md +1 -1
  4. package/coverage/actions/groups.ts.html +1039 -0
  5. package/coverage/actions/images.ts.html +2500 -0
  6. package/coverage/actions/index.html +131 -0
  7. package/coverage/actions/tags.ts.html +1000 -0
  8. package/coverage/adapters/arangoAdapter.ts.html +151 -0
  9. package/coverage/adapters/index.html +146 -0
  10. package/coverage/adapters/reaktorAdapter.ts.html +127 -0
  11. package/coverage/adapters/tagAdapter.ts.html +160 -0
  12. package/coverage/base.css +224 -0
  13. package/coverage/block-navigation.js +87 -0
  14. package/coverage/clover.xml +6 -0
  15. package/coverage/coverage-final.json +1 -0
  16. package/coverage/favicon.png +0 -0
  17. package/coverage/index.html +176 -0
  18. package/coverage/lcov-report/base.css +224 -0
  19. package/coverage/lcov-report/block-navigation.js +87 -0
  20. package/coverage/lcov-report/favicon.png +0 -0
  21. package/coverage/lcov-report/index.html +101 -0
  22. package/coverage/lcov-report/prettify.css +1 -0
  23. package/coverage/lcov-report/prettify.js +2 -0
  24. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  25. package/coverage/lcov-report/sorter.js +196 -0
  26. package/coverage/lcov.info +0 -0
  27. package/coverage/mocks/file.ts.html +118 -0
  28. package/coverage/mocks/group.ts.html +145 -0
  29. package/coverage/mocks/image.ts.html +136 -0
  30. package/coverage/mocks/index.html +146 -0
  31. package/coverage/mocks/post.ts.html +169 -0
  32. package/coverage/mocks/tag.ts.html +121 -0
  33. package/coverage/mocks/user.ts.html +268 -0
  34. package/coverage/prettify.css +1 -0
  35. package/coverage/prettify.js +2 -0
  36. package/coverage/sort-arrow-sprite.png +0 -0
  37. package/coverage/sorter.js +196 -0
  38. package/coverage/types/error.ts.html +145 -0
  39. package/coverage/types/index.html +116 -0
  40. package/coverage/utils/adapterUtils.ts.html +151 -0
  41. package/coverage/utils/analyticsUtils.ts.html +292 -0
  42. package/coverage/utils/arangodbUtils.ts.html +463 -0
  43. package/coverage/utils/index.html +146 -0
  44. package/jest.setup.js +0 -0
  45. package/jpg:- +0 -0
  46. package/lib/actions/apps.d.ts +25 -0
  47. package/lib/actions/apps.js +252 -0
  48. package/lib/actions/conversations.d.ts +12 -12
  49. package/lib/actions/conversations.js +131 -126
  50. package/lib/actions/dynamodb.d.ts +8 -8
  51. package/lib/actions/dynamodb.js +35 -32
  52. package/lib/actions/email.d.ts +2 -4
  53. package/lib/actions/email.js +23 -53
  54. package/lib/actions/files.d.ts +15 -12
  55. package/lib/actions/files.js +188 -202
  56. package/lib/actions/groups.d.ts +2 -2
  57. package/lib/actions/groups.js +38 -36
  58. package/lib/actions/images.d.ts +15 -11
  59. package/lib/actions/images.js +236 -229
  60. package/lib/actions/index.d.ts +1 -0
  61. package/lib/actions/index.js +3 -1
  62. package/lib/actions/ios.js +11 -10
  63. package/lib/actions/locations.d.ts +2 -0
  64. package/lib/actions/locations.js +29 -37
  65. package/lib/actions/messages.d.ts +2 -2
  66. package/lib/actions/messages.js +10 -10
  67. package/lib/actions/notifications.d.ts +2 -2
  68. package/lib/actions/notifications.js +1 -1
  69. package/lib/actions/payments.d.ts +2 -2
  70. package/lib/actions/payments.js +27 -26
  71. package/lib/actions/posts.d.ts +7 -9
  72. package/lib/actions/posts.js +176 -156
  73. package/lib/actions/reactions.d.ts +5 -5
  74. package/lib/actions/reactions.js +30 -28
  75. package/lib/actions/s3.d.ts +7 -7
  76. package/lib/actions/s3.js +37 -32
  77. package/lib/actions/search.d.ts +3 -3
  78. package/lib/actions/search.js +11 -9
  79. package/lib/actions/sms.d.ts +2 -2
  80. package/lib/actions/sms.js +58 -34
  81. package/lib/actions/statistics.d.ts +2 -1
  82. package/lib/actions/statistics.js +21 -18
  83. package/lib/actions/subscription.d.ts +2 -2
  84. package/lib/actions/subscription.js +24 -21
  85. package/lib/actions/tags.d.ts +21 -23
  86. package/lib/actions/tags.js +129 -198
  87. package/lib/actions/users.d.ts +23 -20
  88. package/lib/actions/users.js +188 -194
  89. package/lib/actions/websockets.d.ts +13 -0
  90. package/lib/actions/websockets.js +60 -34
  91. package/lib/adapters/arangoAdapter.d.ts +2 -0
  92. package/lib/adapters/arangoAdapter.js +46 -0
  93. package/lib/adapters/fileAdapter.d.ts +3 -0
  94. package/lib/adapters/fileAdapter.js +76 -0
  95. package/lib/adapters/postAdapter.d.ts +2 -0
  96. package/lib/adapters/postAdapter.js +70 -0
  97. package/lib/adapters/reaktorAdapter.d.ts +6 -0
  98. package/lib/adapters/reaktorAdapter.js +44 -0
  99. package/lib/adapters/tagAdapter.d.ts +2 -0
  100. package/lib/adapters/tagAdapter.js +50 -0
  101. package/lib/adapters/userAdapter.d.ts +2 -0
  102. package/lib/adapters/userAdapter.js +110 -0
  103. package/lib/config.js +14 -15
  104. package/lib/lambdas/actions/websockets.js +7 -7
  105. package/lib/lambdas/authorizer.js +1 -1
  106. package/lib/lambdas/connection.js +5 -4
  107. package/lib/lambdas/utils/websocket.js +7 -6
  108. package/lib/mocks/conversation.d.ts +8 -0
  109. package/lib/mocks/conversation.js +35 -0
  110. package/lib/mocks/file.d.ts +11 -0
  111. package/lib/mocks/file.js +38 -0
  112. package/lib/mocks/group.d.ts +17 -0
  113. package/lib/mocks/group.js +47 -0
  114. package/lib/mocks/image.d.ts +3 -0
  115. package/lib/mocks/image.js +43 -0
  116. package/lib/mocks/nlabs.png +0 -0
  117. package/lib/mocks/post.d.ts +38 -0
  118. package/lib/mocks/post.js +55 -0
  119. package/lib/mocks/tag.d.ts +2 -0
  120. package/lib/mocks/tag.js +37 -0
  121. package/lib/mocks/user.d.ts +4 -0
  122. package/lib/mocks/user.js +88 -0
  123. package/lib/types/apps.d.ts +19 -17
  124. package/lib/types/apps.js +17 -1
  125. package/lib/types/arangodb.d.ts +19 -6
  126. package/lib/types/arangodb.js +1 -1
  127. package/lib/types/auth.d.ts +4 -4
  128. package/lib/types/auth.js +1 -1
  129. package/lib/types/connections.d.ts +2 -3
  130. package/lib/types/connections.js +1 -1
  131. package/lib/types/conversations.d.ts +21 -8
  132. package/lib/types/conversations.js +1 -1
  133. package/lib/types/email.d.ts +4 -3
  134. package/lib/types/email.js +1 -1
  135. package/lib/types/error.d.ts +20 -0
  136. package/lib/types/error.js +44 -0
  137. package/lib/types/files.d.ts +10 -10
  138. package/lib/types/files.js +1 -1
  139. package/lib/types/google.d.ts +29 -27
  140. package/lib/types/google.js +1 -1
  141. package/lib/types/groups.d.ts +6 -7
  142. package/lib/types/groups.js +1 -1
  143. package/lib/types/images.d.ts +26 -17
  144. package/lib/types/images.js +1 -1
  145. package/lib/types/locations.d.ts +4 -4
  146. package/lib/types/locations.js +1 -1
  147. package/lib/types/messages.d.ts +3 -14
  148. package/lib/types/messages.js +1 -1
  149. package/lib/types/notifications.d.ts +9 -11
  150. package/lib/types/notifications.js +1 -1
  151. package/lib/types/payments.d.ts +13 -16
  152. package/lib/types/payments.js +1 -1
  153. package/lib/types/posts.d.ts +7 -23
  154. package/lib/types/posts.js +1 -1
  155. package/lib/types/statistics.d.ts +2 -2
  156. package/lib/types/statistics.js +1 -1
  157. package/lib/types/tags.d.ts +7 -12
  158. package/lib/types/tags.js +1 -1
  159. package/lib/types/users.d.ts +10 -14
  160. package/lib/types/users.js +1 -1
  161. package/lib/types/websocket.d.ts +2 -3
  162. package/lib/types/websocket.js +1 -1
  163. package/lib/utils/adapterUtils.d.ts +1 -0
  164. package/lib/utils/adapterUtils.js +45 -0
  165. package/lib/utils/analyticsUtils.d.ts +21 -0
  166. package/lib/utils/analyticsUtils.js +72 -0
  167. package/lib/utils/arangodbUtils.d.ts +65 -0
  168. package/lib/utils/arangodbUtils.js +144 -0
  169. package/lib/utils/auth.d.ts +18 -3
  170. package/lib/utils/auth.js +13 -30
  171. package/lib/utils/index.d.ts +3 -4
  172. package/lib/utils/index.js +7 -9
  173. package/lib/utils/session.d.ts +7 -9
  174. package/lib/utils/session.js +11 -2
  175. package/package.json +12 -5
  176. package/lib/utils/analytics.d.ts +0 -14
  177. package/lib/utils/analytics.js +0 -88
  178. package/lib/utils/arangodb.d.ts +0 -9
  179. package/lib/utils/arangodb.js +0 -118
  180. package/lib/utils/graphql.d.ts +0 -1
  181. package/lib/utils/graphql.js +0 -46
  182. package/lib/utils/objects.d.ts +0 -3
  183. package/lib/utils/objects.js +0 -59
@@ -0,0 +1,252 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var apps_exports = {};
19
+ __export(apps_exports, {
20
+ addApp: () => addApp,
21
+ deactivateApp: () => deactivateApp,
22
+ deleteApp: () => deleteApp,
23
+ getApp: () => getApp,
24
+ getAppOptional: () => getAppOptional,
25
+ getApps: () => getApps,
26
+ parseAppOptions: () => parseAppOptions,
27
+ updateApp: () => updateApp
28
+ });
29
+ module.exports = __toCommonJS(apps_exports);
30
+ var import_arangojs = require("arangojs");
31
+ var import_utils = require("@nlabs/utils");
32
+ var import_error = require("../types/error");
33
+ var import_analyticsUtils = require("../utils/analyticsUtils");
34
+ var import_arangodbUtils = require("../utils/arangodbUtils");
35
+ var import_session = require("../utils/session");
36
+ const eventCategory = "apps";
37
+ const getAppOptional = (fields = []) => fields.reduce((selects, field) => {
38
+ if (field.includes("Count")) {
39
+ return (0, import_arangodbUtils.selectReactionCountByType)("apps", "a", field, selects);
40
+ }
41
+ return selects;
42
+ }, { objects: [], queries: [] });
43
+ const parseAppOptions = (options = {}) => {
44
+ const {
45
+ from = 0,
46
+ to = 30
47
+ } = options;
48
+ const limit = (0, import_arangodbUtils.getLimit)(from, to);
49
+ return {
50
+ ...options,
51
+ limit
52
+ };
53
+ };
54
+ const addApp = async (context, app) => {
55
+ const action = "addUser";
56
+ const { database } = context;
57
+ const { email, name, phone } = app;
58
+ const formatName = (0, import_utils.parseString)(name);
59
+ const formatEmail = (0, import_utils.parseEmail)(email);
60
+ const formatPhone = (0, import_utils.parsePhone)(phone);
61
+ if (!formatName) {
62
+ return (0, import_analyticsUtils.logException)({
63
+ action,
64
+ category: eventCategory,
65
+ params: { name },
66
+ value: import_error.ErrorTypes.INVALID_ARGUMENTS
67
+ }, context);
68
+ }
69
+ const filters = [`a.name == "${formatName}"`];
70
+ if (formatEmail) {
71
+ filters.push(`a.email == "${formatEmail}"`);
72
+ }
73
+ const checkQuery = `FOR u IN users
74
+ FILTER ${filters.join(" || ")}
75
+ RETURN u`;
76
+ try {
77
+ const existingApps = await database.query(checkQuery).then((cursor) => cursor.all());
78
+ if (existingApps.length) {
79
+ return (0, import_analyticsUtils.logException)({
80
+ action,
81
+ category: eventCategory,
82
+ value: import_error.ErrorTypes.EXISTING_ITEM,
83
+ params: { name }
84
+ }, context);
85
+ }
86
+ } catch (error) {
87
+ return (0, import_analyticsUtils.logError)({
88
+ action,
89
+ category: eventCategory,
90
+ label: import_error.ErrorTypes.DATABASE_ERROR,
91
+ params: { name }
92
+ }, error, context);
93
+ }
94
+ const insert = {
95
+ _key: (0, import_utils.createHash)(name, null),
96
+ active: true,
97
+ added: Date.now(),
98
+ email: formatEmail,
99
+ modified: Date.now(),
100
+ phone: formatPhone,
101
+ name: formatName
102
+ };
103
+ const insertQuery = import_arangojs.aql`INSERT ${insert} IN apps RETURN NEW`;
104
+ return await database.query(insertQuery).then((cursor) => cursor.next() || {}).catch((error) => (0, import_analyticsUtils.logError)({
105
+ action,
106
+ category: eventCategory,
107
+ label: import_error.ErrorTypes.DATABASE_ERROR,
108
+ params: { name }
109
+ }, error, context));
110
+ };
111
+ const updateApp = async (context, app) => {
112
+ const action = "updateApp";
113
+ const { database } = context;
114
+ const { _key, _id, id, appId, ...updated } = app;
115
+ const appDocId = (0, import_arangodbUtils.getDocId)("apps", app);
116
+ const appQuery = import_arangojs.aql`LET a = DOCUMENT(${appDocId})
117
+ UPDATE a WITH ${updated} IN apps
118
+ RETURN NEW`;
119
+ return await database.query(appQuery).then((cursor) => cursor.next()).catch(
120
+ (error) => (0, import_analyticsUtils.logError)({
121
+ action,
122
+ category: eventCategory,
123
+ label: import_error.ErrorTypes.DATABASE_ERROR,
124
+ params: { app }
125
+ }, error, context)
126
+ );
127
+ };
128
+ const deleteApp = async (context, app) => {
129
+ const action = "deleteApp";
130
+ const { database, session } = context;
131
+ const isAdmin = (0, import_session.isAdminUser)(session);
132
+ const appDocId = (0, import_arangodbUtils.getDocId)("apps", app);
133
+ if (!isAdmin) {
134
+ return (0, import_analyticsUtils.logException)({
135
+ action,
136
+ category: eventCategory,
137
+ label: "unauthorized",
138
+ params: app,
139
+ value: import_error.ErrorTypes.INVALID_SESSION
140
+ }, context);
141
+ }
142
+ const aqlQuery = import_arangojs.aql`FOR a IN apps
143
+ FILTER a._id == \"${appDocId}\"
144
+ LIMIT 1
145
+ REMOVE a IN apps
146
+ RETURN OLD`;
147
+ return database.query(aqlQuery).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
148
+ action,
149
+ category: eventCategory,
150
+ label: import_error.ErrorTypes.DATABASE_ERROR,
151
+ params: app
152
+ }, error, context));
153
+ };
154
+ const deactivateApp = (context, app) => {
155
+ const action = "deactivateApp";
156
+ const { database, session } = context;
157
+ const isAdmin = (0, import_session.isAdminUser)(session);
158
+ const appDocId = (0, import_arangodbUtils.getDocId)("apps", app);
159
+ if (!isAdmin) {
160
+ return (0, import_analyticsUtils.logException)({
161
+ action,
162
+ category: eventCategory,
163
+ label: "unauthorized",
164
+ value: import_error.ErrorTypes.INVALID_SESSION
165
+ }, context);
166
+ }
167
+ const updated = {
168
+ active: false
169
+ };
170
+ const aqlQuery = import_arangojs.aql`UPDATE ${appDocId} WITH ${updated} IN apps LIMIT 1 RETURN NEW`;
171
+ return database.query(aqlQuery).then((cursor) => cursor.next()).catch((error) => {
172
+ throw error;
173
+ });
174
+ };
175
+ const getApp = (context, options) => {
176
+ const action = "getApp";
177
+ const { database, fields, session } = context;
178
+ const { id, key, name } = parseAppOptions(options);
179
+ const { objects: selectObjects, queries: selectQueries } = getAppOptional(fields);
180
+ const filterBy = ["a.active == true"];
181
+ const isAdmin = (0, import_session.isAdminUser)(session);
182
+ if (!isAdmin) {
183
+ return (0, import_analyticsUtils.logException)({
184
+ action,
185
+ category: eventCategory,
186
+ label: "unauthorized",
187
+ value: import_error.ErrorTypes.INVALID_SESSION
188
+ }, context);
189
+ }
190
+ if (id) {
191
+ filterBy.push(`a._id == "${(0, import_utils.parseArangoId)(id)}"`);
192
+ }
193
+ if (key) {
194
+ filterBy.push(`a._key == "apps/${(0, import_utils.parseId)(key)}"`);
195
+ }
196
+ if (name) {
197
+ filterBy.push(`CONTAINS(a.name, "${(0, import_utils.parseString)(name)}")`);
198
+ }
199
+ const aqlQuery = `FOR a IN apps
200
+ FILTER ${filterBy.join(" && ")}
201
+ ${selectQueries.join("\n")}
202
+ RETURN MERGE(a, {${selectObjects.join(", ")}})`;
203
+ return database.query(aqlQuery).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
204
+ action,
205
+ category: eventCategory,
206
+ label: import_error.ErrorTypes.DATABASE_ERROR,
207
+ params: options
208
+ }, error, context));
209
+ };
210
+ const getApps = (context, options) => {
211
+ const action = "getApps";
212
+ const { database, fields, session } = context;
213
+ const { limit, name } = parseAppOptions(options);
214
+ const { objects: selectObjects, queries: selectQueries } = getAppOptional(fields);
215
+ const filterBy = ["a.active == true"];
216
+ const isAdmin = (0, import_session.isAdminUser)(session);
217
+ if (!isAdmin) {
218
+ return (0, import_analyticsUtils.logException)({
219
+ action,
220
+ category: eventCategory,
221
+ label: "unauthorized",
222
+ value: import_error.ErrorTypes.INVALID_SESSION
223
+ }, context);
224
+ }
225
+ if (name) {
226
+ filterBy.push(`CONTAINS(a.name, "${(0, import_utils.parseString)(name)}")`);
227
+ }
228
+ const aqlQuery = `FOR a IN apps
229
+ FILTER ${filterBy.join(" && ")}
230
+ ${selectQueries.join("\n")}
231
+ ${limit.aql}
232
+ SORT a.name
233
+ RETURN MERGE(a, {${selectObjects.join(", ")}})`;
234
+ return database.query(aqlQuery).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
235
+ action,
236
+ category: eventCategory,
237
+ label: import_error.ErrorTypes.DATABASE_ERROR,
238
+ params: options
239
+ }, error, context));
240
+ };
241
+ // Annotate the CommonJS export names for ESM import in node:
242
+ 0 && (module.exports = {
243
+ addApp,
244
+ deactivateApp,
245
+ deleteApp,
246
+ getApp,
247
+ getAppOptional,
248
+ getApps,
249
+ parseAppOptions,
250
+ updateApp
251
+ });
252
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvYXBwcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvY3Vyc29yJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VFbWFpbCwgcGFyc2VJZCwgcGFyc2VQaG9uZSwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7QXBwVHlwZX0gZnJvbSAnLi4vdHlwZXMvYXBwcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGV9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMnO1xuaW1wb3J0IHtpc0FkbWluVXNlcn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvbic7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aCc7XG5pbXBvcnQgdHlwZSB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2FwcHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcE9wdGlvbnMge1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBmcm9tPzogbnVtYmVyO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB0bz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEFwcE9wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0czogYW55LCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgaWYoZmllbGQuaW5jbHVkZXMoJ0NvdW50JykpIHtcbiAgICAgIHJldHVybiBzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlKCdhcHBzJywgJ2EnLCBmaWVsZCwgc2VsZWN0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdHM7XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQXBwT3B0aW9ucyA9IChvcHRpb25zOiBBcHBPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzBcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuXG4gIHJldHVybiB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBsaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtlbWFpbCwgbmFtZSwgcGhvbmV9ID0gYXBwO1xuICBjb25zdCBmb3JtYXROYW1lID0gcGFyc2VTdHJpbmcobmFtZSk7XG4gIGNvbnN0IGZvcm1hdEVtYWlsID0gcGFyc2VFbWFpbChlbWFpbCk7XG4gIGNvbnN0IGZvcm1hdFBob25lID0gcGFyc2VQaG9uZShwaG9uZSk7XG5cbiAgaWYoIWZvcm1hdE5hbWUpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7bmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FSR1VNRU5UU1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYGEubmFtZSA9PSBcIiR7Zm9ybWF0TmFtZX1cImBdO1xuXG4gIGlmKGZvcm1hdEVtYWlsKSB7XG4gICAgZmlsdGVycy5wdXNoKGBhLmVtYWlsID09IFwiJHtmb3JtYXRFbWFpbH1cImApO1xuICB9XG5cbiAgY29uc3QgY2hlY2tRdWVyeTogc3RyaW5nID0gYEZPUiB1IElOIHVzZXJzXG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgfHwgJyl9XG4gICAgUkVUVVJOIHVgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZXhpc3RpbmdBcHBzID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoY2hlY2tRdWVyeSkudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcblxuICAgIGlmKGV4aXN0aW5nQXBwcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5FWElTVElOR19JVEVNLFxuICAgICAgICBwYXJhbXM6IHtuYW1lfVxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtuYW1lfVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydDogQXBwVHlwZSA9IHtcbiAgICBfa2V5OiBjcmVhdGVIYXNoKG5hbWUsIG51bGwpLFxuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICBlbWFpbDogZm9ybWF0RW1haWwsXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgcGhvbmU6IGZvcm1hdFBob25lLFxuICAgIG5hbWU6IGZvcm1hdE5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnRRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBhcHBzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBhd2FpdCBkYXRhYmFzZS5xdWVyeShpbnNlcnRRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSB8fCB7fSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgcGFyYW1zOiB7bmFtZX1cbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlQXBwJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtfa2V5LCBfaWQsIGlkLCBhcHBJZCwgLi4udXBkYXRlZH0gPSBhcHA7XG4gIGNvbnN0IGFwcERvY0lkID0gZ2V0RG9jSWQoJ2FwcHMnLCBhcHApO1xuICBjb25zdCBhcHBRdWVyeTogQXFsUXVlcnkgPSBhcWxgTEVUIGEgPSBET0NVTUVOVCgke2FwcERvY0lkfSlcbiAgICBVUERBVEUgYSBXSVRIICR7dXBkYXRlZH0gSU4gYXBwc1xuICAgIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcHBRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3IpID0+XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgICBwYXJhbXM6IHthcHB9XG4gICAgICB9LCBlcnJvciwgY29udGV4dClcbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUFwcCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlQXBwJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9ufSA9IGNvbnRleHQ7XG4gIGNvbnN0IGlzQWRtaW4gPSBpc0FkbWluVXNlcihzZXNzaW9uKTtcbiAgY29uc3QgYXBwRG9jSWQgPSBnZXREb2NJZCgnYXBwcycsIGFwcCk7XG5cbiAgaWYoIWlzQWRtaW4pIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgcGFyYW1zOiBhcHAsXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT05cbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYSBJTiBhcHBzXG4gICAgRklMVEVSIGEuX2lkID09IFxcXCIke2FwcERvY0lkfVxcXCJcbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIGEgSU4gYXBwc1xuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PlxuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgICAgcGFyYW1zOiBhcHBcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVhY3RpdmF0ZUFwcCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBhcHA6IEFwcFR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlYWN0aXZhdGVBcHAnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24pO1xuICBjb25zdCBhcHBEb2NJZCA9IGdldERvY0lkKCdhcHBzJywgYXBwKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT05cbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWQ6IEFwcFR5cGUgPSB7XG4gICAgYWN0aXZlOiBmYWxzZVxuICB9O1xuICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7YXBwRG9jSWR9IFdJVEggJHt1cGRhdGVkfSBJTiBhcHBzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IEFwcE9wdGlvbnMpOiBQcm9taXNlPEFwcFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0QXBwJztcbiAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3Qge2lkLCBrZXksIG5hbWV9ID0gcGFyc2VBcHBPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRBcHBPcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbJ2EuYWN0aXZlID09IHRydWUnXTtcbiAgY29uc3QgaXNBZG1pbiA9IGlzQWRtaW5Vc2VyKHNlc3Npb24pO1xuXG4gIGlmKCFpc0FkbWluKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTlxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgaWYoaWQpIHtcbiAgICBmaWx0ZXJCeS5wdXNoKGBhLl9pZCA9PSBcIiR7cGFyc2VBcmFuZ29JZChpZCl9XCJgKTtcbiAgfVxuXG4gIGlmKGtleSkge1xuICAgIGZpbHRlckJ5LnB1c2goYGEuX2tleSA9PSBcImFwcHMvJHtwYXJzZUlkKGtleSl9XCJgKTtcbiAgfVxuXG4gIGlmKG5hbWUpIHtcbiAgICBmaWx0ZXJCeS5wdXNoKGBDT05UQUlOUyhhLm5hbWUsIFwiJHtwYXJzZVN0cmluZyhuYW1lKX1cIilgKTtcbiAgfVxuXG4gIC8vIEdldCBkYXRhIGZyb20gZGF0YWJhc2VcbiAgY29uc3QgYXFsUXVlcnk6IHN0cmluZyA9IGBGT1IgYSBJTiBhcHBzXG4gICAgRklMVEVSICR7ZmlsdGVyQnkuam9pbignICYmICcpfVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBSRVRVUk4gTUVSR0UoYSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IG9wdGlvbnNcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcHMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IEFwcE9wdGlvbnMpOiBQcm9taXNlPEFwcFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRBcHBzJztcbiAgY29uc3Qge2RhdGFiYXNlLCBmaWVsZHMsIHNlc3Npb259ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCBuYW1lfSA9IHBhcnNlQXBwT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0QXBwT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gWydhLmFjdGl2ZSA9PSB0cnVlJ107XG4gIGNvbnN0IGlzQWRtaW4gPSBpc0FkbWluVXNlcihzZXNzaW9uKTtcblxuICBpZighaXNBZG1pbikge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX1NFU1NJT05cbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGlmKG5hbWUpIHtcbiAgICBmaWx0ZXJCeS5wdXNoKGBDT05UQUlOUyhhLm5hbWUsIFwiJHtwYXJzZVN0cmluZyhuYW1lKX1cIilgKTtcbiAgfVxuXG4gIC8vIEdldCBkYXRhIGZyb20gZGF0YWJhc2VcbiAgY29uc3QgYXFsUXVlcnk6IHN0cmluZyA9IGBGT1IgYSBJTiBhcHBzXG4gICAgRklMVEVSICR7ZmlsdGVyQnkuam9pbignICYmICcpfVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUIGEubmFtZVxuICAgIFJFVFVSTiBNRVJHRShhLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgcGFyYW1zOiBvcHRp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
@@ -1,14 +1,14 @@
1
- import { ConnectionType, ConversationOptions, ConversationType } from '../types';
2
- import { ApiContext } from '../types/auth';
1
+ import type { ArangoDbLimit, ConnectionType, ConversationOptions, ConversationType, ConversationUsersParams, DirectConversationParams, UpdateConversationUserParams } from '../types';
2
+ import type { ApiContext } from '../types/auth';
3
3
  export declare const parseConversationOptions: (options?: ConversationOptions) => {
4
- limit: import("types/arangodb").ArangoDBLimit;
4
+ limit: ArangoDbLimit;
5
5
  };
6
- export declare const getConversations: (context: ApiContext, options?: any) => Promise<ConversationType[]>;
7
- export declare const getDirectConversation: (context: ApiContext, fromId: string, toId: string) => Promise<ConversationType>;
8
- export declare const getConnectionUsers: (context: ApiContext, conversationId: string, includeAll?: boolean, isDirect?: boolean) => Promise<ConnectionType[]>;
9
- export declare const getConversationUsers: (context: ApiContext, conversationId: string, includeAll?: boolean, isDirect?: boolean) => Promise<ConversationType[]>;
10
- export declare const getDirectConversationOld: (context: ApiContext, userId: string) => Promise<ConversationType>;
11
- export declare const getConversation: (context: ApiContext, convoId: string) => Promise<ConversationType>;
12
- export declare const updateConversation: (context: ApiContext, conversation: any) => Promise<ConversationType>;
13
- export declare const addUserToConversation: (context: ApiContext, convoId: string, userId: string) => Promise<any>;
14
- export declare const deleteUserFromConversation: (context: ApiContext, convoId: string, userId: string) => Promise<any>;
6
+ export declare const getConversations: (context: ApiContext, userId: string, options?: any) => Promise<ConversationType[]>;
7
+ export declare const getDirectConversation: (context: ApiContext, { fromId, toId, toUser }: DirectConversationParams) => Promise<ConversationType>;
8
+ export declare const addDirectConversation: (context: ApiContext, { fromId, toId, toUser }: DirectConversationParams) => Promise<ConversationType>;
9
+ export declare const getConnectionUsers: (context: ApiContext, { conversationId, includeAll, isDirect }: ConversationUsersParams) => Promise<ConnectionType[]>;
10
+ export declare const getConversationUsers: (context: ApiContext, { conversationId, includeAll, isDirect }: ConversationUsersParams) => Promise<ConversationType[]>;
11
+ export declare const getConversation: (context: ApiContext, conversationId: string) => Promise<ConversationType>;
12
+ export declare const updateConversation: (context: ApiContext, conversation: ConversationType) => Promise<ConversationType>;
13
+ export declare const addUserToConversation: (context: ApiContext, { conversationId, userId }: UpdateConversationUserParams) => Promise<ConversationType>;
14
+ export declare const deleteUserFromConversation: (context: ApiContext, { conversationId, userId }: UpdateConversationUserParams) => Promise<ConversationType>;