@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
@@ -27,6 +27,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
28
  var conversations_exports = {};
29
29
  __export(conversations_exports, {
30
+ addDirectConversation: () => addDirectConversation,
30
31
  addUserToConversation: () => addUserToConversation,
31
32
  deleteUserFromConversation: () => deleteUserFromConversation,
32
33
  getConnectionUsers: () => getConnectionUsers,
@@ -34,7 +35,6 @@ __export(conversations_exports, {
34
35
  getConversationUsers: () => getConversationUsers,
35
36
  getConversations: () => getConversations,
36
37
  getDirectConversation: () => getDirectConversation,
37
- getDirectConversationOld: () => getDirectConversationOld,
38
38
  parseConversationOptions: () => parseConversationOptions,
39
39
  updateConversation: () => updateConversation
40
40
  });
@@ -42,10 +42,11 @@ module.exports = __toCommonJS(conversations_exports);
42
42
  var import_utils = require("@nlabs/utils");
43
43
  var import_arangojs = require("arangojs");
44
44
  var import_cloneDeep = __toESM(require("lodash/cloneDeep"));
45
- var import_utils2 = require("../utils");
46
- var import_analytics = require("../utils/analytics");
45
+ var import_analyticsUtils = require("../utils/analyticsUtils");
47
46
  var import_images = require("./images");
48
47
  var import_users = require("./users");
48
+ var import_error = require("../types/error");
49
+ var import_arangodbUtils = require("../utils/arangodbUtils");
49
50
  const eventCategory = "conversations";
50
51
  const parseConversationOptions = (options = {}) => {
51
52
  const {
@@ -53,55 +54,74 @@ const parseConversationOptions = (options = {}) => {
53
54
  to = 30
54
55
  } = options;
55
56
  return {
56
- limit: (0, import_utils2.getLimit)(from, to)
57
+ limit: (0, import_arangodbUtils.getLimit)(from, to)
57
58
  };
58
59
  };
59
- const getConversations = (context, options) => {
60
+ const getConversations = (context, userId, options) => {
60
61
  const action = "getConversations";
61
- const { database, session: { userId: sessionId } } = context;
62
+ const { database } = context;
62
63
  const { limit } = parseConversationOptions(options);
63
- const sessionDocId = `users/${sessionId}`;
64
- const aqlQry = `FOR c, e IN 1..1 OUTBOUND "${sessionDocId}" hasConversation
64
+ const userDocId = `users/${userId}`;
65
+ const aqlQry = `FOR c, e IN 1..1 OUTBOUND "${userDocId}" hasConversation
65
66
  ${limit.aql}
66
67
  LET users = (
67
68
  FOR u, uc IN 1..1 INBOUND c._id hasConversation
68
- FILTER u._id != "${sessionDocId}"
69
+ FILTER u._id != "${userDocId}"
69
70
  RETURN u
70
71
  )
71
72
  RETURN MERGE(c, {users: users})`;
72
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analytics.logError)({
73
+ return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
73
74
  action,
74
75
  category: eventCategory,
75
- label: "db_error"
76
- }, error, context).then(() => null));
76
+ label: import_error.ErrorTypes.DATABASE_ERROR
77
+ }, error, context));
77
78
  };
78
- const getDirectConversation = async (context, fromId, toId) => {
79
+ const getDirectConversation = async (context, {
80
+ fromId,
81
+ toId,
82
+ toUser
83
+ }) => {
79
84
  const action = "getDirectConversation";
80
85
  const { database } = context;
81
86
  try {
82
87
  const formatFromId = (0, import_utils.parseId)(fromId);
83
88
  const formatToId = (0, import_utils.parseId)(toId);
84
89
  const userIds = [formatFromId, formatToId];
85
- const sortedUserIds = userIds.sort((a, b) => {
86
- if (a < b) {
87
- return -1;
88
- }
89
- if (a > b) {
90
- return 1;
91
- }
92
- return 0;
93
- });
90
+ const sortedUserIds = (0, import_arangodbUtils.sortIds)(userIds);
94
91
  const conversationId = (0, import_utils.createHash)(`conversations-${sortedUserIds.join("-")}`, null);
95
- const user = await (0, import_users.getUser)(context, { userId: formatToId });
92
+ const user = toUser || await (0, import_users.getUser)(context, { userId: formatToId });
96
93
  const aqlQry = import_arangojs.aql`LET c = DOCUMENT(${`conversations/${conversationId}`}) RETURN c`;
97
- const conversation = await database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analytics.logError)({
94
+ const conversation = await database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
98
95
  action,
99
96
  category: eventCategory,
100
- label: "db_error"
101
- }, error, context).then(() => null));
97
+ label: import_error.ErrorTypes.DATABASE_ERROR
98
+ }, error, context));
102
99
  if (conversation) {
103
100
  return { ...conversation, users: [user] };
104
101
  }
102
+ return addDirectConversation(context, { fromId, toId, toUser: user });
103
+ } catch (databaseError) {
104
+ return (0, import_analyticsUtils.logError)({
105
+ action,
106
+ category: eventCategory,
107
+ label: import_error.ErrorTypes.DATABASE_ERROR
108
+ }, databaseError, context);
109
+ }
110
+ };
111
+ const addDirectConversation = async (context, {
112
+ fromId,
113
+ toId,
114
+ toUser
115
+ }) => {
116
+ const action = "getDirectConversation";
117
+ const { database } = context;
118
+ try {
119
+ const formatFromId = (0, import_utils.parseId)(fromId);
120
+ const formatToId = (0, import_utils.parseId)(toId);
121
+ const userIds = [formatFromId, formatToId];
122
+ const sortedUserIds = (0, import_arangodbUtils.sortIds)([formatFromId, formatToId]);
123
+ const user = toUser || await (0, import_users.getUser)(context, { userId: formatToId });
124
+ const conversationId = (0, import_utils.createHash)(`conversations-${sortedUserIds.join("-")}`, null);
105
125
  const now = Date.now();
106
126
  const insert = {
107
127
  _key: conversationId,
@@ -123,16 +143,20 @@ const getDirectConversation = async (context, fromId, toId) => {
123
143
  return database.query(insertEdgeQuery);
124
144
  }));
125
145
  return { ...updatedConversation, users: [user] };
126
- } catch (updateError) {
127
- return (0, import_analytics.logError)({
146
+ } catch (databaseError) {
147
+ return (0, import_analyticsUtils.logError)({
128
148
  action,
129
149
  category: eventCategory,
130
- label: "db_error"
131
- }, updateError, context).then(() => null);
150
+ label: import_error.ErrorTypes.DATABASE_ERROR
151
+ }, databaseError, context);
132
152
  }
133
153
  };
134
- const getConnectionUsers = (context, conversationId, includeAll = false, isDirect) => {
135
- const action = "getConversationUsers";
154
+ const getConnectionUsers = (context, {
155
+ conversationId,
156
+ includeAll = false,
157
+ isDirect
158
+ }) => {
159
+ const action = "getConnectionUsers";
136
160
  const { database, session: { userId: sessionUserId } } = context;
137
161
  const filters = ["c.userId == u._key"];
138
162
  if (!includeAll) {
@@ -146,13 +170,19 @@ const getConnectionUsers = (context, conversationId, includeAll = false, isDirec
146
170
  FOR c IN connections
147
171
  FILTER ${filters.join(" && ")}
148
172
  RETURN c`;
149
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analytics.logError)({
150
- action,
151
- category: eventCategory,
152
- label: "db_error"
153
- }, error, context).then(() => null));
173
+ return database.query(aqlQry).then((cursor) => cursor.all()).catch(
174
+ (error) => (0, import_analyticsUtils.logError)({
175
+ action,
176
+ category: eventCategory,
177
+ label: import_error.ErrorTypes.DATABASE_ERROR
178
+ }, error, context)
179
+ );
154
180
  };
155
- const getConversationUsers = (context, conversationId, includeAll = false, isDirect) => {
181
+ const getConversationUsers = (context, {
182
+ conversationId,
183
+ includeAll = false,
184
+ isDirect
185
+ }) => {
156
186
  const action = "getConversationUsers";
157
187
  const { database, session: { userId: sessionUserId } } = context;
158
188
  const filters = ["c.userId == u._key"];
@@ -166,92 +196,61 @@ const getConversationUsers = (context, conversationId, includeAll = false, isDir
166
196
  OPTIONS {vertexCollections: "users"}
167
197
  FILTER ${filters.join(" && ")}
168
198
  RETURN u`;
169
- console.log({ aqlQry });
170
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analytics.logError)({
171
- action,
172
- category: eventCategory,
173
- label: "db_error"
174
- }, error, context).then(() => null));
175
- };
176
- const getDirectConversationOld = (context, userId) => {
177
- const action = "getDirectConversation";
178
- const { database, session: { userId: sessionId } } = context;
179
- const sessionDocId = `users/${sessionId}`;
180
- const formatUserId = (0, import_utils.parseArangoId)(userId);
181
- const aqlQry = import_arangojs.aql`LET from = (
182
- FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversation
183
- FILTER c.direct == true
184
- RETURN c
185
- )
186
- LET to = (
187
- FOR c, e IN 1..1 OUTBOUND ${formatUserId} hasConversation
188
- FILTER c.direct == true
189
- RETURN c
190
- )
191
- LET conversation = FIRST(INTERSECTION(from, to))
192
- LET users = !IS_NULL(conversation) && (
193
- FOR g IN[${sessionDocId}, ${formatUserId}]
194
- FOR u IN users
195
- FILTER g == u._id
196
- RETURN u
197
- )
198
- RETURN IS_NULL(conversation) ? null : MERGE(conversation, {users: users})`;
199
- return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analytics.logError)({
199
+ return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
200
200
  action,
201
201
  category: eventCategory,
202
- label: "db_error"
203
- }, error, context).then(() => null));
202
+ label: import_error.ErrorTypes.DATABASE_ERROR
203
+ }, error, context));
204
204
  };
205
- const getConversation = (context, convoId) => {
205
+ const getConversation = (context, conversationId) => {
206
206
  const action = "getItem";
207
207
  const { database, session: { userId: sessionId } } = context;
208
208
  const sessionDocId = `users/${sessionId}`;
209
- const convoDocId = `conversations/${(0, import_utils.parseId)(convoId)}`;
209
+ const conversationDocId = `conversations/${(0, import_utils.parseId)(conversationId)}`;
210
210
  const aqlQry = import_arangojs.aql`FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversation
211
- FILTER c._id == ${convoDocId}
211
+ FILTER c._id == ${conversationDocId}
212
212
  LET u = (
213
- FOR inUser, inEdge IN 1..1 INBOUND ${convoDocId} hasConversation
213
+ FOR inUser, inEdge IN 1..1 INBOUND ${conversationDocId} hasConversation
214
214
  RETURN inUser
215
215
  )
216
216
  LIMIT 1
217
217
  RETURN MERGE(c, {users: u})`;
218
- return database.query(aqlQry).then((cursor) => cursor.next()).then((conversation = {}) => {
219
- if (conversation) {
220
- conversation.users = conversation.users.map((user) => {
221
- const { imageId, userId } = user;
222
- const thumbUrlData = {
223
- imageId,
224
- isThumb: true,
225
- userId
226
- };
227
- return {
228
- ...user,
229
- name: (0, import_users.getDisplayName)(user),
230
- thumb: (0, import_images.getImageUrl)(thumbUrlData)
231
- };
232
- });
233
- return conversation;
218
+ return database.query(aqlQry).then((cursor) => cursor.next()).then((conversation) => {
219
+ if (!conversation) {
220
+ return {};
234
221
  }
235
- return {};
236
- }).catch((error) => (0, import_analytics.logError)({
222
+ conversation.users = conversation.users.map((user) => {
223
+ const { imageId, userId } = user;
224
+ const thumbUrlData = {
225
+ imageId,
226
+ isThumb: true,
227
+ userId
228
+ };
229
+ return {
230
+ ...user,
231
+ name: (0, import_users.getDisplayName)(user),
232
+ thumb: (0, import_images.getImageUrl)(thumbUrlData)
233
+ };
234
+ });
235
+ return conversation;
236
+ }).catch((error) => (0, import_analyticsUtils.logError)({
237
237
  action,
238
238
  category: eventCategory,
239
- label: "db_error"
240
- }, error, context).then(() => null));
239
+ label: import_error.ErrorTypes.DATABASE_ERROR
240
+ }, error, context));
241
241
  };
242
242
  const updateConversation = (context, conversation) => {
243
243
  const action = "updateConversation";
244
244
  const { database, session: { userId: sessionId } } = context;
245
245
  const {
246
246
  conversationId = (0, import_utils.createHash)(`conversation-${sessionId} `),
247
- direct = false,
247
+ isDirect = false,
248
248
  name
249
249
  } = conversation;
250
250
  const formatConversationId = (0, import_utils.parseId)(conversationId);
251
251
  const now = Date.now();
252
252
  const update = {
253
- // Direct message
254
- direct,
253
+ isDirect,
255
254
  modified: now,
256
255
  name
257
256
  };
@@ -264,62 +263,69 @@ const updateConversation = (context, conversation) => {
264
263
  INSERT ${insert}
265
264
  UPDATE ${update}
266
265
  IN conversations RETURN NEW`;
267
- return database.query(aqlQry).then((cursor) => cursor.next()).then((conversation2 = {}) => conversation2).catch((error) => (0, import_analytics.logError)({
266
+ return database.query(aqlQry).then((cursor) => cursor.next()).then((conversation2) => conversation2).catch((error) => (0, import_analyticsUtils.logError)({
268
267
  action,
269
268
  category: eventCategory,
270
- label: "db_error"
271
- }, error, context).then(() => null));
269
+ label: import_error.ErrorTypes.DATABASE_ERROR
270
+ }, error, context));
272
271
  };
273
- const addUserToConversation = (context, convoId, userId) => {
272
+ const addUserToConversation = (context, {
273
+ conversationId,
274
+ userId
275
+ }) => {
274
276
  const action = "addUserToConversation";
275
277
  const { database } = context;
276
- const formatConvoId = (0, import_utils.parseId)(convoId);
278
+ const formatConversationId = (0, import_utils.parseId)(conversationId);
277
279
  const formatUserId = (0, import_utils.parseId)(userId);
278
- const convoDocId = `conversations/${formatConvoId}`;
280
+ const conversationDocId = `conversations/${formatConversationId}`;
279
281
  const userDocId = `users/${formatUserId}`;
280
- const aqlQry = import_arangojs.aql`FOR c IN hasConversation
281
- FILTER c._from == ${userDocId} && c._to == ${convoDocId}
282
+ const aqlQry = import_arangojs.aql`FOR hc IN hasConversation
283
+ FILTER hc._from == ${userDocId} && hc._to == ${conversationDocId}
282
284
  LIMIT 1
283
- RETURN c`;
284
- return database.query(aqlQry).then((cursor) => cursor.next()).then((conversationEdge) => {
285
- if (!!conversationEdge) {
286
- return conversationEdge;
285
+ RETURN hc`;
286
+ return database.query(aqlQry).then((cursor) => cursor.next()).then((hasConversationEdge) => {
287
+ if (!!hasConversationEdge) {
288
+ return hasConversationEdge;
287
289
  }
288
290
  const edgeCollection = database.collection("hasConversation");
289
- const edgeId = (0, import_utils.createHash)(`convo - ${formatConvoId} -${formatUserId} `);
291
+ const edgeId = (0, import_utils.createHash)(`convo - ${formatConversationId} -${formatUserId} `);
290
292
  const edge = {
291
293
  _from: userDocId,
292
294
  _key: edgeId,
293
- _to: convoDocId,
295
+ _to: conversationDocId,
294
296
  added: Date.now()
295
297
  };
296
298
  return edgeCollection.save(edge, { returnNew: true }).then(() => edge);
297
- }).catch((error) => (0, import_analytics.logError)({
299
+ }).catch((error) => (0, import_analyticsUtils.logError)({
298
300
  action,
299
301
  category: eventCategory,
300
- label: "db_error"
301
- }, error, context).then(() => null));
302
+ label: import_error.ErrorTypes.DATABASE_ERROR
303
+ }, error, context));
302
304
  };
303
- const deleteUserFromConversation = (context, convoId, userId) => {
305
+ const deleteUserFromConversation = (context, {
306
+ conversationId,
307
+ userId
308
+ }) => {
304
309
  const action = "deleteUserFromConversation";
305
310
  const { database } = context;
306
- const formatConvoId = (0, import_utils.parseId)(convoId);
311
+ const formatConversationId = (0, import_utils.parseId)(conversationId);
307
312
  const formatUserId = (0, import_utils.parseId)(userId);
308
- const convoDocId = `conversations/${formatConvoId}`;
313
+ const conversationDocId = `conversations/${formatConversationId}`;
309
314
  const userDocId = `users/${formatUserId}`;
310
- const aqlQry = import_arangojs.aql`FOR c IN hasConversation
311
- FILTER c._from == ${userDocId} && c._to == ${convoDocId}
315
+ const aqlQry = import_arangojs.aql`FOR hc IN hasConversation
316
+ FILTER hc._from == ${userDocId} && hc._to == ${conversationDocId}
312
317
  LIMIT 1
313
- REMOVE c IN hasConversation
318
+ REMOVE hc IN hasConversation
314
319
  RETURN OLD`;
315
- return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analytics.logError)({
320
+ return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
316
321
  action,
317
322
  category: eventCategory,
318
- label: "db_error"
319
- }, error, context).then(() => null));
323
+ label: import_error.ErrorTypes.DATABASE_ERROR
324
+ }, error, context));
320
325
  };
321
326
  // Annotate the CommonJS export names for ESM import in node:
322
327
  0 && (module.exports = {
328
+ addDirectConversation,
323
329
  addUserToConversation,
324
330
  deleteUserFromConversation,
325
331
  getConnectionUsers,
@@ -327,8 +333,7 @@ const deleteUserFromConversation = (context, convoId, userId) => {
327
333
  getConversationUsers,
328
334
  getConversations,
329
335
  getDirectConversation,
330
- getDirectConversationOld,
331
336
  parseConversationOptions,
332
337
  updateConversation
333
338
  });
334
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbic7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuaW1wb3J0IHtDb25uZWN0aW9uVHlwZSwgQ29udmVyc2F0aW9uT3B0aW9ucywgQ29udmVyc2F0aW9uVHlwZSwgSW1hZ2VVcmxEYXRhLCBVc2VyfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtnZXRMaW1pdH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzJztcbmltcG9ydCB7Z2V0SW1hZ2VVcmx9IGZyb20gJy4vaW1hZ2VzJztcbmltcG9ydCB7Z2V0RGlzcGxheU5hbWUsIGdldFVzZXJ9IGZyb20gJy4vdXNlcnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnY29udmVyc2F0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMgPSAob3B0aW9uczogQ29udmVyc2F0aW9uT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwLFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0byksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9ucyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldENvbnZlcnNhdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCBcIiR7c2Vzc2lvbkRvY0lkfVwiIGhhc0NvbnZlcnNhdGlvblxuICAgICR7bGltaXQuYXFsfVxuICAgIExFVCB1c2VycyA9IChcbiAgICAgIEZPUiB1LCB1YyBJTiAxLi4xIElOQk9VTkQgYy5faWQgaGFzQ29udmVyc2F0aW9uXG4gICAgICBGSUxURVIgdS5faWQgIT0gXCIke3Nlc3Npb25Eb2NJZH1cIlxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdXNlcnN9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0RnJvbUlkOiBzdHJpbmcgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZDogc3RyaW5nID0gcGFyc2VJZCh0b0lkKTtcbiAgICBjb25zdCB1c2VySWRzOiBzdHJpbmdbXSA9IFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdO1xuICAgIGNvbnN0IHNvcnRlZFVzZXJJZHM6IHN0cmluZ1tdID0gdXNlcklkcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZihhIDwgYikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZihhID4gYikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG4gICAgY29uc3QgdXNlcjogVXNlciA9IGF3YWl0IGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuXG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgYyA9IERPQ1VNRU5UKCR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSkgUkVUVVJOIGNgO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcblxuICAgIGlmKGNvbnZlcnNhdGlvbikge1xuICAgICAgcmV0dXJuIHsuLi5jb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICAgIH1cblxuICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICBfa2V5OiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGFkZGVkOiBub3csXG4gICAgICBpc0RpcmVjdDogdHJ1ZSxcbiAgICAgIG1vZGlmaWVkOiBub3dcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG4gICAgY29uc3QgdXBkYXRlZENvbnZlcnNhdGlvbiA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGluc2VydFF1ZXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodXNlcklkcy5tYXAoKHVzZXJJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBoYXNDb252ZXJzYXRpb24tJHt1c2VySWR9LSR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgICAgIF9mcm9tOiBgdXNlcnMvJHt1c2VySWR9YCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGBjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnNlcnRFZGdlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2VkZ2V9IElOIGhhc0NvbnZlcnNhdGlvbiBSRVRVUk4gTkVXYDtcbiAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShpbnNlcnRFZGdlUXVlcnkpO1xuICAgIH0pKTtcblxuICAgIHJldHVybiB7Li4udXBkYXRlZENvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gIH0gY2F0Y2godXBkYXRlRXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIHVwZGF0ZUVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICBpbmNsdWRlQWxsOiBib29sZWFuID0gZmFsc2UsXG4gIGlzRGlyZWN0PzogYm9vbGVhblxuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldENvbnZlcnNhdGlvblVzZXJzJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRk9SIGMgSU4gY29ubmVjdGlvbnNcbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gY2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICBpbmNsdWRlQWxsOiBib29sZWFuID0gZmFsc2UsXG4gIGlzRGlyZWN0PzogYm9vbGVhblxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29udmVyc2F0aW9uVXNlcnMnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gdWA7XG5cbiAgY29uc29sZS5sb2coe2FxbFFyeX0pO1xuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uT2xkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQodXNlcklkKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBmcm9tID0gKFxuICAgICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3Nlc3Npb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgICBGSUxURVIgYy5kaXJlY3QgPT0gdHJ1ZVxuICAgICAgUkVUVVJOIGNcbiAgICApXG4gICAgTEVUIHRvID0gKFxuICAgICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke2Zvcm1hdFVzZXJJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgICBGSUxURVIgYy5kaXJlY3QgPT0gdHJ1ZVxuICAgICAgUkVUVVJOIGNcbiAgICApXG4gICAgTEVUIGNvbnZlcnNhdGlvbiA9IEZJUlNUKElOVEVSU0VDVElPTihmcm9tLCB0bykpXG4gICAgTEVUIHVzZXJzID0gIUlTX05VTEwoY29udmVyc2F0aW9uKSAmJiAoXG4gICAgICBGT1IgZyBJTlske3Nlc3Npb25Eb2NJZH0sICR7Zm9ybWF0VXNlcklkfV1cbiAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICBGSUxURVIgZyA9PSB1Ll9pZFxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIElTX05VTEwoY29udmVyc2F0aW9uKSA/IG51bGwgOiBNRVJHRShjb252ZXJzYXRpb24sIHt1c2VyczogdXNlcnN9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udm9JZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgY29udm9Eb2NJZDogc3RyaW5nID0gYGNvbnZlcnNhdGlvbnMvJHtwYXJzZUlkKGNvbnZvSWQpfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7c2Vzc2lvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgYy5faWQgPT0gJHtjb252b0RvY0lkfVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGluVXNlciwgaW5FZGdlIElOIDEuLjEgSU5CT1VORCAke2NvbnZvRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgICAgUkVUVVJOIGluVXNlclxuICAgIClcbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdX0pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUgPSB7fSkgPT4ge1xuICAgICAgaWYoY29udmVyc2F0aW9uKSB7XG4gICAgICAgIGNvbnZlcnNhdGlvbi51c2VycyA9IGNvbnZlcnNhdGlvbi51c2Vycy5tYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtpbWFnZUlkLCB1c2VySWR9ID0gdXNlcjtcbiAgICAgICAgICBjb25zdCB0aHVtYlVybERhdGE6IEltYWdlVXJsRGF0YSA9IHtcbiAgICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgICBpc1RodW1iOiB0cnVlLFxuICAgICAgICAgICAgdXNlcklkXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICAgIG5hbWU6IGdldERpc3BsYXlOYW1lKHVzZXIpLFxuICAgICAgICAgICAgdGh1bWI6IGdldEltYWdlVXJsKHRodW1iVXJsRGF0YSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBkaXJlY3QgPSBmYWxzZSxcbiAgICBuYW1lXG4gIH0gPSBjb252ZXJzYXRpb247XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICAvLyBEaXJlY3QgbWVzc2FnZVxuICAgIGRpcmVjdCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICAuLi5jbG9uZURlZXAodXBkYXRlKSxcbiAgICBfa2V5OiBmb3JtYXRDb252ZXJzYXRpb25JZCxcbiAgICBhZGRlZDogbm93XG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9IH1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlID0ge30pID0+IGNvbnZlcnNhdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyVG9Db252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udm9JZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRVc2VyVG9Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udm9JZDogc3RyaW5nID0gcGFyc2VJZChjb252b0lkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZvRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udm9JZH1gO1xuICBjb25zdCB1c2VyRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGMuX3RvID09ICR7Y29udm9Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbkVkZ2UpID0+IHtcbiAgICAgIGlmKCEhY29udmVyc2F0aW9uRWRnZSkge1xuICAgICAgICByZXR1cm4gY29udmVyc2F0aW9uRWRnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaGFzQ29udmVyc2F0aW9uJyk7XG4gICAgICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGNvbnZvIC0gJHtmb3JtYXRDb252b0lkfSAtJHtmb3JtYXRVc2VySWR9IGApO1xuXG4gICAgICBjb25zdCBlZGdlOiBDb252ZXJzYXRpb25UeXBlID0ge1xuICAgICAgICBfZnJvbTogdXNlckRvY0lkLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogY29udm9Eb2NJZCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IGVkZ2UpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udm9JZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252b0lkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZvSWQpO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udm9Eb2NJZDogc3RyaW5nID0gYGNvbnZlcnNhdGlvbnMvJHtmb3JtYXRDb252b0lkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgYy5fdG8gPT0gJHtjb252b0RvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQSxtQkFBaUQ7QUFDakQsc0JBQWtCO0FBSWxCLHVCQUFzQjtBQUl0QixJQUFBQSxnQkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLG9CQUEwQjtBQUMxQixtQkFBc0M7QUFFdEMsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSwyQkFBMkIsQ0FBQyxVQUErQixDQUFDLE1BQU07QUFDN0UsUUFBTTtBQUFBLElBQ0osT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLEVBQ1AsSUFBSTtBQUVKLFNBQU87QUFBQSxJQUNMLFdBQU8sd0JBQVMsTUFBTSxFQUFFO0FBQUEsRUFDMUI7QUFDRjtBQUVPLE1BQU0sbUJBQW1CLENBQUMsU0FBcUIsWUFBMEM7QUFDOUYsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsVUFBVSxTQUFTLEVBQUMsUUFBUSxVQUFTLEVBQUMsSUFBSTtBQUNqRCxRQUFNLEVBQUMsTUFBSyxJQUFJLHlCQUF5QixPQUFPO0FBQ2hELFFBQU0sZUFBdUIsU0FBUyxTQUFTO0FBQy9DLFFB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QyxFQUFFLEtBQUssTUFBTSxJQUFJO0FBQUEsRUFDckUsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxjQUFpQiwyQkFBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsRUFDVCxHQUFHLE9BQU8sT0FBTyxFQUFFLEtBQUssTUFBTSxJQUFJLENBQUM7QUFDdkM7QUFFTyxNQUFNLDZCQUE2QixDQUFDLFNBQXFCLFNBQWlCLFdBQW1CO0FBQ2xHLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFNBQVEsSUFBSTtBQUNuQixRQUFNLG9CQUF3QixzQkFBUSxPQUFPO0FBQzdDLFFBQU0sbUJBQXVCLHNCQUFRLE1BQU07QUFDM0MsUUFBTSxhQUFxQixpQkFBaUIsYUFBYTtBQUN6RCxRQUFNLFlBQW9CLFNBQVMsWUFBWTtBQUUvQyxRQUFNLFNBQW1CO0FBQUEsd0JBQ0gsU0FBUyxnQkFBZ0IsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUt6RCxTQUFPLFNBQVMsTUFBTSxNQUFNLEVBQ3pCLEtBQUssQ0FBQyxXQUF3QixPQUFPLEtBQUssQ0FBQyxFQUMzQyxNQUFNLENBQUMsY0FBaUIsMkJBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEVBQ1QsR0FBRyxPQUFPLE9BQU8sRUFBRSxLQUFLLE1BQU0sSUFBSSxDQUFDO0FBQ3ZDOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfdXRpbHMiLCAiY2xvbmVEZWVwIiwgImNvbnZlcnNhdGlvbiJdCn0K
339
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbic7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuaW1wb3J0IHR5cGUge1xuICBBcmFuZ29EYkxpbWl0LFxuICBDb25uZWN0aW9uVHlwZSxcbiAgQ29udmVyc2F0aW9uT3B0aW9ucyxcbiAgQ29udmVyc2F0aW9uVHlwZSxcbiAgQ29udmVyc2F0aW9uVXNlcnNQYXJhbXMsXG4gIERpcmVjdENvbnZlcnNhdGlvblBhcmFtcyxcbiAgSW1hZ2VVcmxEYXRhLFxuICBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zLFxuICBVc2VyVHlwZVxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aCc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscyc7XG5pbXBvcnQge2dldEltYWdlVXJsfSBmcm9tICcuL2ltYWdlcyc7XG5pbXBvcnQge2dldERpc3BsYXlOYW1lLCBnZXRVc2VyfSBmcm9tICcuL3VzZXJzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3InO1xuaW1wb3J0IHtnZXRMaW1pdCwgc29ydElkc30gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdjb252ZXJzYXRpb25zJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyA9IChvcHRpb25zOiBDb252ZXJzYXRpb25PcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzBcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25zID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nLCBvcHRpb25zPyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldENvbnZlcnNhdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgdXNlckRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHt1c2VySWR9YDtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCBcIiR7dXNlckRvY0lkfVwiIGhhc0NvbnZlcnNhdGlvblxuICAgICR7bGltaXQuYXFsfVxuICAgIExFVCB1c2VycyA9IChcbiAgICAgIEZPUiB1LCB1YyBJTiAxLi4xIElOQk9VTkQgYy5faWQgaGFzQ29udmVyc2F0aW9uXG4gICAgICBGSUxURVIgdS5faWQgIT0gXCIke3VzZXJEb2NJZH1cIlxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdXNlcnN9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXJlY3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBmcm9tSWQsXG4gICAgdG9JZCxcbiAgICB0b1VzZXJcbiAgfTogRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0RGlyZWN0Q29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgY29uc3QgdXNlcklkcyA9IFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdO1xuICAgIGNvbnN0IHNvcnRlZFVzZXJJZHMgPSBzb3J0SWRzKHVzZXJJZHMpO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuICAgIGNvbnN0IHVzZXI6IFVzZXJUeXBlID0gdG9Vc2VyIHx8IGF3YWl0IGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIGMgPSBET0NVTUVOVCgke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0pIFJFVFVSTiBjYDtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuXG4gICAgaWYoY29udmVyc2F0aW9uKSB7XG4gICAgICByZXR1cm4gey4uLmNvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZERpcmVjdENvbnZlcnNhdGlvbihjb250ZXh0LCB7ZnJvbUlkLCB0b0lkLCB0b1VzZXI6IHVzZXJ9KTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBkYXRhYmFzZUVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIHRvVXNlclxuICB9OiBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdEZyb21JZCA9IHBhcnNlSWQoZnJvbUlkKTtcbiAgICBjb25zdCBmb3JtYXRUb0lkID0gcGFyc2VJZCh0b0lkKTtcbiAgICBjb25zdCB1c2VySWRzID0gW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF07XG4gICAgY29uc3Qgc29ydGVkVXNlcklkcyA9IHNvcnRJZHMoW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF0pO1xuICAgIGNvbnN0IHVzZXI6IFVzZXJUeXBlID0gdG9Vc2VyIHx8IGF3YWl0IGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgX2tleTogY29udmVyc2F0aW9uSWQsXG4gICAgICBhZGRlZDogbm93LFxuICAgICAgaXNEaXJlY3Q6IHRydWUsXG4gICAgICBtb2RpZmllZDogbm93XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgO1xuICAgIGNvbnN0IHVwZGF0ZWRDb252ZXJzYXRpb24gPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShpbnNlcnRRdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHVzZXJJZHMubWFwKCh1c2VySWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgaGFzQ29udmVyc2F0aW9uLSR7dXNlcklkfS0ke2NvbnZlcnNhdGlvbklkfWApO1xuICAgICAgY29uc3QgZWRnZTogYW55ID0ge1xuICAgICAgICBfZnJvbTogYHVzZXJzLyR7dXNlcklkfWAsXG4gICAgICAgIF9rZXk6IGVkZ2VJZCxcbiAgICAgICAgX3RvOiBgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWAsXG4gICAgICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuICAgICAgY29uc3QgaW5zZXJ0RWRnZVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtlZGdlfSBJTiBoYXNDb252ZXJzYXRpb24gUkVUVVJOIE5FV2A7XG4gICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoaW5zZXJ0RWRnZVF1ZXJ5KTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gey4uLnVwZGF0ZWRDb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbm5lY3Rpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29ubmVjdGlvblVzZXJzJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRk9SIGMgSU4gY29ubmVjdGlvbnNcbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gY2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25Vc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29udmVyc2F0aW9uVXNlcnMnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbi8vIGV4cG9ydCBjb25zdCBnZXREaXJlY3RDb252ZXJzYXRpb25PbGQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbi8vICAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0RGlyZWN0Q29udmVyc2F0aW9uJztcbi8vICAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4vLyAgIGNvbnN0IHNlc3Npb25Eb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4vLyAgIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZCh1c2VySWQpO1xuXG4vLyAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIGZyb20gPSAoXG4vLyAgICAgICBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7c2Vzc2lvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbi8vICAgICAgIEZJTFRFUiBjLmRpcmVjdCA9PSB0cnVlXG4vLyAgICAgICBSRVRVUk4gY1xuLy8gICAgIClcbi8vICAgICBMRVQgdG8gPSAoXG4vLyAgICAgICBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7Zm9ybWF0VXNlcklkfSBoYXNDb252ZXJzYXRpb25cbi8vICAgICAgIEZJTFRFUiBjLmRpcmVjdCA9PSB0cnVlXG4vLyAgICAgICBSRVRVUk4gY1xuLy8gICAgIClcbi8vICAgICBMRVQgY29udmVyc2F0aW9uID0gRklSU1QoSU5URVJTRUNUSU9OKGZyb20sIHRvKSlcbi8vICAgICBMRVQgdXNlcnMgPSAhSVNfTlVMTChjb252ZXJzYXRpb24pICYmIChcbi8vICAgICAgIEZPUiBnIElOWyR7c2Vzc2lvbkRvY0lkfSwgJHtmb3JtYXRVc2VySWR9XVxuLy8gICAgICAgRk9SIHUgSU4gdXNlcnNcbi8vICAgICAgIEZJTFRFUiBnID09IHUuX2lkXG4vLyAgICAgICBSRVRVUk4gdVxuLy8gICAgIClcbi8vICAgICBSRVRVUk4gSVNfTlVMTChjb252ZXJzYXRpb24pID8gbnVsbCA6IE1FUkdFKGNvbnZlcnNhdGlvbiwge3VzZXJzOiB1c2Vyc30pYDtcblxuLy8gICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuLy8gICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4vLyAgICAgICBhY3Rpb24sXG4vLyAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbi8vICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4vLyAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbi8vIH07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udmVyc2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbkRvY0lkOiBzdHJpbmcgPSBgY29udmVyc2F0aW9ucy8ke3BhcnNlSWQoY29udmVyc2F0aW9uSWQpfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7c2Vzc2lvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgYy5faWQgPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMRVQgdSA9IChcbiAgICAgIEZPUiBpblVzZXIsIGluRWRnZSBJTiAxLi4xIElOQk9VTkQgJHtjb252ZXJzYXRpb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgICBSRVRVUk4gaW5Vc2VyXG4gICAgKVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1fSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgaWYoIWNvbnZlcnNhdGlvbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnZlcnNhdGlvbi51c2VycyA9IGNvbnZlcnNhdGlvbi51c2Vycy5tYXAoKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtpbWFnZUlkLCB1c2VySWR9ID0gdXNlcjtcbiAgICAgICAgY29uc3QgdGh1bWJVcmxEYXRhOiBJbWFnZVVybERhdGEgPSB7XG4gICAgICAgICAgaW1hZ2VJZCxcbiAgICAgICAgICBpc1RodW1iOiB0cnVlLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICBuYW1lOiBnZXREaXNwbGF5TmFtZSh1c2VyKSxcbiAgICAgICAgICB0aHVtYjogZ2V0SW1hZ2VVcmwodGh1bWJVcmxEYXRhKVxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjb252ZXJzYXRpb247XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGVcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBpc0RpcmVjdCA9IGZhbHNlLFxuICAgIG5hbWVcbiAgfSA9IGNvbnZlcnNhdGlvbjtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHVwZGF0ZTogYW55ID0ge1xuICAgIGlzRGlyZWN0LFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZVxuICB9O1xuXG4gIGNvbnN0IGluc2VydDogYW55ID0ge1xuICAgIC4uLmNsb25lRGVlcCh1cGRhdGUpLFxuICAgIF9rZXk6IGZvcm1hdENvbnZlcnNhdGlvbklkLFxuICAgIGFkZGVkOiBub3dcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmb3JtYXRDb252ZXJzYXRpb25JZH0gfVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IGNvbnZlcnNhdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVXNlclRvQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgdXNlcklkXG4gIH06IFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRVc2VyVG9Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGhjLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gaGNgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGhhc0NvbnZlcnNhdGlvbkVkZ2UpID0+IHtcbiAgICAgIGlmKCEhaGFzQ29udmVyc2F0aW9uRWRnZSkge1xuICAgICAgICByZXR1cm4gaGFzQ29udmVyc2F0aW9uRWRnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaGFzQ29udmVyc2F0aW9uJyk7XG4gICAgICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGNvbnZvIC0gJHtmb3JtYXRDb252ZXJzYXRpb25JZH0gLSR7Zm9ybWF0VXNlcklkfSBgKTtcblxuICAgICAgY29uc3QgZWRnZTogQ29udmVyc2F0aW9uVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IHVzZXJEb2NJZCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGNvbnZlcnNhdGlvbkRvY0lkLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uXG4gICAgICAgIC5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgICAudGhlbigoKSA9PiBlZGdlKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGhjLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLG1CQUFrQztBQUNsQyxzQkFB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
@@ -1,8 +1,8 @@
1
- import { BatchWriteItemInput, BatchWriteItemOutput, DeleteItemInput, DeleteItemOutput, GetItemInput, GetItemOutput, PutItemInput, PutItemOutput, QueryInput, QueryOutput, UpdateItemInput, UpdateItemOutput } from 'aws-sdk/clients/dynamodb';
2
- export declare const dynamoGet: (params: GetItemInput) => Promise<GetItemOutput>;
3
- export declare const parseDynamo: (results: QueryOutput) => any[];
4
- export declare const dynamoGetList: (params: QueryInput, index: any) => Promise<GetItemOutput[]>;
5
- export declare const dynamoPut: (params: PutItemInput) => Promise<PutItemOutput>;
6
- export declare const dynamoUpdate: (params: UpdateItemInput) => Promise<UpdateItemOutput>;
7
- export declare const dynamoPutList: (params: BatchWriteItemInput) => Promise<BatchWriteItemOutput>;
8
- export declare const dynamoDel: (params: DeleteItemInput) => Promise<DeleteItemOutput>;
1
+ import { BatchWriteItemCommandInput, BatchWriteItemCommandOutput, DeleteItemCommandInput, DeleteItemCommandOutput, GetItemCommandInput, GetItemCommandOutput, PutItemCommandInput, PutItemCommandOutput, QueryCommandInput, QueryCommandOutput, UpdateItemCommandInput, UpdateItemCommandOutput } from '@aws-sdk/client-dynamodb';
2
+ export declare const dynamoGet: (params: GetItemCommandInput) => Promise<GetItemCommandOutput>;
3
+ export declare const parseDynamoList: (results: QueryCommandOutput) => any[];
4
+ export declare const dynamoGetList: (params: QueryCommandInput, startItem?: any) => Promise<GetItemCommandOutput[]>;
5
+ export declare const dynamoPut: (params: PutItemCommandInput) => Promise<PutItemCommandOutput>;
6
+ export declare const dynamoUpdate: (params: UpdateItemCommandInput) => Promise<UpdateItemCommandOutput>;
7
+ export declare const dynamoPutList: (params: BatchWriteItemCommandInput) => Promise<BatchWriteItemCommandOutput>;
8
+ export declare const dynamoDel: (params: DeleteItemCommandInput) => Promise<DeleteItemCommandOutput>;