@nlabs/reaktor 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/actions/conversations.d.ts +14 -0
- package/lib/actions/conversations.js +333 -0
- package/lib/actions/dynamodb.js +155 -0
- package/lib/actions/email.js +177 -0
- package/lib/actions/files.js +319 -0
- package/lib/{data → actions}/groups.d.ts +4 -3
- package/lib/actions/groups.js +282 -0
- package/lib/actions/images.d.ts +22 -0
- package/lib/actions/images.js +682 -0
- package/lib/actions/index.js +40 -0
- package/lib/{data → actions}/ios.d.ts +2 -1
- package/lib/actions/ios.js +179 -0
- package/lib/actions/locations.js +112 -0
- package/lib/actions/messages.d.ts +13 -0
- package/lib/actions/messages.js +216 -0
- package/lib/actions/notifications.js +63 -0
- package/lib/{data → actions}/payments.d.ts +2 -2
- package/lib/actions/payments.js +491 -0
- package/lib/actions/posts.d.ts +19 -0
- package/lib/actions/posts.js +538 -0
- package/lib/actions/reactions.d.ts +30 -0
- package/lib/actions/reactions.js +340 -0
- package/lib/{data → actions}/s3.d.ts +1 -1
- package/lib/actions/s3.js +122 -0
- package/lib/{data → actions}/search.d.ts +2 -2
- package/lib/actions/search.js +99 -0
- package/lib/actions/sms.js +76 -0
- package/lib/actions/statistics.d.ts +2 -0
- package/lib/actions/statistics.js +63 -0
- package/lib/actions/subscription.js +209 -0
- package/lib/actions/tags.d.ts +26 -0
- package/lib/actions/tags.js +340 -0
- package/lib/actions/users.d.ts +44 -0
- package/lib/actions/users.js +571 -0
- package/lib/{data → actions}/websockets.d.ts +1 -1
- package/lib/actions/websockets.js +156 -0
- package/lib/config.d.ts +2 -3
- package/lib/config.js +120 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +23 -0
- package/lib/templates/email/layout.d.ts +2 -0
- package/lib/templates/email/layout.js +292 -0
- package/lib/templates/email/passwordForgot.d.ts +2 -0
- package/lib/templates/email/passwordForgot.js +28 -0
- package/lib/templates/email/passwordRecovery.d.ts +2 -0
- package/lib/templates/email/passwordRecovery.js +25 -0
- package/lib/templates/email/verifyEmail.d.ts +2 -0
- package/lib/templates/email/verifyEmail.js +28 -0
- package/lib/templates/email/welcome.d.ts +2 -0
- package/lib/templates/email/welcome.js +28 -0
- package/lib/templates/sms/passwordForgot.d.ts +2 -0
- package/lib/templates/sms/passwordForgot.js +14 -0
- package/lib/templates/sms/passwordRecovery.d.ts +2 -0
- package/lib/templates/sms/passwordRecovery.js +14 -0
- package/lib/templates/sms/verifyEmail.d.ts +2 -0
- package/lib/templates/sms/verifyEmail.js +14 -0
- package/lib/templates/sms/verifyPhone.d.ts +2 -0
- package/lib/templates/sms/verifyPhone.js +14 -0
- package/lib/templates/sms/welcome.d.ts +2 -0
- package/lib/templates/sms/welcome.js +14 -0
- package/lib/types/apps.d.ts +2 -2
- package/lib/types/apps.js +4 -0
- package/lib/types/arangodb.js +4 -0
- package/lib/types/auth.d.ts +4 -8
- package/lib/types/auth.js +4 -0
- package/lib/types/conversations.d.ts +5 -3
- package/lib/types/conversations.js +4 -0
- package/lib/types/email.d.ts +2 -2
- package/lib/types/email.js +4 -0
- package/lib/types/files.js +4 -0
- package/lib/types/google.js +4 -0
- package/lib/types/groups.d.ts +2 -1
- package/lib/types/groups.js +4 -0
- package/lib/types/images.d.ts +8 -5
- package/lib/types/images.js +4 -0
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.js +37 -0
- package/lib/types/locations.js +4 -0
- package/lib/types/messages.d.ts +12 -2
- package/lib/types/messages.js +4 -0
- package/lib/types/notifications.d.ts +2 -2
- package/lib/types/notifications.js +4 -0
- package/lib/types/payments.js +4 -0
- package/lib/types/posts.d.ts +18 -1
- package/lib/types/posts.js +4 -0
- package/lib/types/statistics.d.ts +3 -0
- package/lib/types/statistics.js +4 -0
- package/lib/types/tags.d.ts +6 -0
- package/lib/types/tags.js +4 -0
- package/lib/types/users.d.ts +15 -10
- package/lib/types/users.js +4 -0
- package/lib/utils/analytics.d.ts +7 -0
- package/lib/utils/analytics.js +107 -0
- package/lib/utils/arangodb.d.ts +1 -1
- package/lib/utils/arangodb.js +122 -0
- package/lib/utils/auth.js +78 -0
- package/lib/utils/graphql.js +40 -0
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +26 -0
- package/lib/utils/objects.js +53 -0
- package/lib/utils/session.d.ts +18 -0
- package/lib/utils/session.js +42 -0
- package/package.json +35 -33
- package/lib/data/conversations.d.ts +0 -8
- package/lib/data/images.d.ts +0 -21
- package/lib/data/messages.d.ts +0 -9
- package/lib/data/posts.d.ts +0 -23
- package/lib/data/reactions.d.ts +0 -14
- package/lib/data/tags.d.ts +0 -14
- package/lib/data/users.d.ts +0 -17
- package/lib/types/reactions.d.ts +0 -15
- package/lib/utils/redis.d.ts +0 -1
- package/templates/email/layout.html +0 -279
- package/templates/email/passwordForgot.html +0 -15
- package/templates/email/passwordRecovery.html +0 -12
- package/templates/email/verifyEmail.html +0 -15
- package/templates/sms/passwordForgot.txt +0 -1
- package/templates/sms/passwordRecovery.txt +0 -1
- package/templates/sms/verifyEmail.txt +0 -1
- package/templates/sms/verifyPhone.txt +0 -1
- /package/lib/{data → actions}/dynamodb.d.ts +0 -0
- /package/lib/{data → actions}/email.d.ts +0 -0
- /package/lib/{data → actions}/files.d.ts +0 -0
- /package/lib/{data → actions}/index.d.ts +0 -0
- /package/lib/{data → actions}/locations.d.ts +0 -0
- /package/lib/{data → actions}/notifications.d.ts +0 -0
- /package/lib/{data → actions}/sms.d.ts +0 -0
- /package/lib/{data → actions}/subscription.d.ts +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ApiContext } from 'types/auth';
|
|
2
|
+
import { ConversationType } from '../types';
|
|
3
|
+
export declare const getConversations: (context: ApiContext, { from, to }: {
|
|
4
|
+
from: any;
|
|
5
|
+
to: any;
|
|
6
|
+
}) => Promise<ConversationType[]>;
|
|
7
|
+
export declare const getDirectConversation: (context: ApiContext, fromId: string, toId: string) => Promise<ConversationType>;
|
|
8
|
+
export declare const getConnnectionUsers: (context: ApiContext, conversationId: string, includeAll?: boolean, isDirect?: boolean) => Promise<ConversationType[]>;
|
|
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>;
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defProps = Object.defineProperties;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
11
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
|
+
var __spreadValues = (a, b) => {
|
|
13
|
+
for (var prop in b || (b = {}))
|
|
14
|
+
if (__hasOwnProp.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
if (__getOwnPropSymbols)
|
|
17
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
18
|
+
if (__propIsEnum.call(b, prop))
|
|
19
|
+
__defNormalProp(a, prop, b[prop]);
|
|
20
|
+
}
|
|
21
|
+
return a;
|
|
22
|
+
};
|
|
23
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
24
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
25
|
+
var __export = (target, all) => {
|
|
26
|
+
__markAsModule(target);
|
|
27
|
+
for (var name in all)
|
|
28
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
29
|
+
};
|
|
30
|
+
var __reExport = (target, module2, desc) => {
|
|
31
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
32
|
+
for (let key of __getOwnPropNames(module2))
|
|
33
|
+
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
34
|
+
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
|
35
|
+
}
|
|
36
|
+
return target;
|
|
37
|
+
};
|
|
38
|
+
var __toModule = (module2) => {
|
|
39
|
+
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
|
40
|
+
};
|
|
41
|
+
__export(exports, {
|
|
42
|
+
addUserToConversation: () => addUserToConversation,
|
|
43
|
+
deleteUserFromConversation: () => deleteUserFromConversation,
|
|
44
|
+
getConnnectionUsers: () => getConnnectionUsers,
|
|
45
|
+
getConversation: () => getConversation,
|
|
46
|
+
getConversationUsers: () => getConversationUsers,
|
|
47
|
+
getConversations: () => getConversations,
|
|
48
|
+
getDirectConversation: () => getDirectConversation,
|
|
49
|
+
getDirectConversationOld: () => getDirectConversationOld,
|
|
50
|
+
updateConversation: () => updateConversation
|
|
51
|
+
});
|
|
52
|
+
var import_utils = __toModule(require("@nlabs/utils"));
|
|
53
|
+
var import_arangojs = __toModule(require("arangojs"));
|
|
54
|
+
var import_cloneDeep = __toModule(require("lodash/cloneDeep"));
|
|
55
|
+
var import_isEmpty = __toModule(require("lodash/isEmpty"));
|
|
56
|
+
var import_utils2 = __toModule(require("../utils"));
|
|
57
|
+
var import_analytics = __toModule(require("../utils/analytics"));
|
|
58
|
+
var import_images = __toModule(require("./images"));
|
|
59
|
+
var import_users = __toModule(require("./users"));
|
|
60
|
+
const eventCategory = "conversations";
|
|
61
|
+
const getConversations = (context, { from, to }) => {
|
|
62
|
+
const action = "getConversations";
|
|
63
|
+
const { database, session: { userId: sessionId } } = context;
|
|
64
|
+
const limit = (0, import_utils2.getLimit)(from, to);
|
|
65
|
+
const sessionDocId = `users/${sessionId}`;
|
|
66
|
+
const aqlQry = `FOR c, e IN 1..1 OUTBOUND "${sessionDocId}" hasConversations
|
|
67
|
+
${limit.aql}
|
|
68
|
+
LET users = (
|
|
69
|
+
FOR u, uc IN 1..1 INBOUND c._id hasConversations
|
|
70
|
+
FILTER u._id != "${sessionDocId}"
|
|
71
|
+
RETURN u
|
|
72
|
+
)
|
|
73
|
+
RETURN MERGE(c, {users: users})`;
|
|
74
|
+
return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analytics.logError)({
|
|
75
|
+
action,
|
|
76
|
+
category: eventCategory,
|
|
77
|
+
label: "db_error"
|
|
78
|
+
}, error, context).then(() => null));
|
|
79
|
+
};
|
|
80
|
+
const getDirectConversation = async (context, fromId, toId) => {
|
|
81
|
+
const action = "getDirectConversation";
|
|
82
|
+
const { database } = context;
|
|
83
|
+
try {
|
|
84
|
+
const formatFromId = (0, import_utils.parseId)(fromId);
|
|
85
|
+
const formatToId = (0, import_utils.parseId)(toId);
|
|
86
|
+
const userIds = [formatFromId, formatToId];
|
|
87
|
+
const sortedUserIds = userIds.sort((a, b) => {
|
|
88
|
+
if (a < b) {
|
|
89
|
+
return -1;
|
|
90
|
+
}
|
|
91
|
+
if (a > b) {
|
|
92
|
+
return 1;
|
|
93
|
+
}
|
|
94
|
+
return 0;
|
|
95
|
+
});
|
|
96
|
+
const conversationId = (0, import_utils.createHash)(`conversations-${sortedUserIds.join("-")}`, null);
|
|
97
|
+
const user = await (0, import_users.getUser)(context, { userId: formatToId });
|
|
98
|
+
const aqlQry = import_arangojs.aql`LET c = DOCUMENT(${`conversations/${conversationId}`}) RETURN c`;
|
|
99
|
+
const conversation = await database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analytics.logError)({
|
|
100
|
+
action,
|
|
101
|
+
category: eventCategory,
|
|
102
|
+
label: "db_error"
|
|
103
|
+
}, error, context).then(() => null));
|
|
104
|
+
if (conversation) {
|
|
105
|
+
return __spreadProps(__spreadValues({}, conversation), { users: [user] });
|
|
106
|
+
}
|
|
107
|
+
const now = Date.now();
|
|
108
|
+
const insert = {
|
|
109
|
+
_key: conversationId,
|
|
110
|
+
added: now,
|
|
111
|
+
isDirect: true,
|
|
112
|
+
modified: now
|
|
113
|
+
};
|
|
114
|
+
const insertQuery = import_arangojs.aql`INSERT ${insert} IN conversations RETURN NEW`;
|
|
115
|
+
const updatedConversation = await database.query(insertQuery).then((cursor) => cursor.next());
|
|
116
|
+
await Promise.all(userIds.map((userId) => {
|
|
117
|
+
const edgeId = (0, import_utils.createHash)(`hasConversations-${userId}-${conversationId}`);
|
|
118
|
+
const edge = {
|
|
119
|
+
_from: `users/${userId}`,
|
|
120
|
+
_key: edgeId,
|
|
121
|
+
_to: `conversations/${conversationId}`,
|
|
122
|
+
added: Date.now()
|
|
123
|
+
};
|
|
124
|
+
const insertEdgeQuery = import_arangojs.aql`INSERT ${edge} IN hasConversations RETURN NEW`;
|
|
125
|
+
return database.query(insertEdgeQuery);
|
|
126
|
+
}));
|
|
127
|
+
return __spreadProps(__spreadValues({}, updatedConversation), { users: [user] });
|
|
128
|
+
} catch (updateError) {
|
|
129
|
+
return (0, import_analytics.logError)({
|
|
130
|
+
action,
|
|
131
|
+
category: eventCategory,
|
|
132
|
+
label: "db_error"
|
|
133
|
+
}, updateError, context).then(() => null);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
const getConnnectionUsers = (context, conversationId, includeAll = false, isDirect) => {
|
|
137
|
+
const action = "getConversationUsers";
|
|
138
|
+
const { database, session: { userId: sessionUserId } } = context;
|
|
139
|
+
const filters = ["c.userId == u._key"];
|
|
140
|
+
if (!includeAll) {
|
|
141
|
+
filters.push(`u._key != ${sessionUserId}`);
|
|
142
|
+
}
|
|
143
|
+
if (isDirect) {
|
|
144
|
+
filters.push(`p.vertices[0].isDirect == ${isDirect}`);
|
|
145
|
+
}
|
|
146
|
+
const aqlQry = import_arangojs.aql`FOR u, e,p IN 1..1 INBOUND ${`conversations/${conversationId}`} hasConversations
|
|
147
|
+
OPTIONS {vertexCollections: "users"}
|
|
148
|
+
FOR c IN connections
|
|
149
|
+
FILTER ${filters.join(" && ")}
|
|
150
|
+
RETURN c`;
|
|
151
|
+
console.log({ aqlQry });
|
|
152
|
+
return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analytics.logError)({
|
|
153
|
+
action,
|
|
154
|
+
category: eventCategory,
|
|
155
|
+
label: "db_error"
|
|
156
|
+
}, error, context).then(() => null));
|
|
157
|
+
};
|
|
158
|
+
const getConversationUsers = (context, conversationId, includeAll = false, isDirect) => {
|
|
159
|
+
const action = "getConversationUsers";
|
|
160
|
+
const { database, session: { userId: sessionUserId } } = context;
|
|
161
|
+
const filters = ["c.userId == u._key"];
|
|
162
|
+
if (!includeAll) {
|
|
163
|
+
filters.push(`u._key != ${sessionUserId}`);
|
|
164
|
+
}
|
|
165
|
+
if (isDirect) {
|
|
166
|
+
filters.push(`p.vertices[0].isDirect == ${isDirect}`);
|
|
167
|
+
}
|
|
168
|
+
const aqlQry = import_arangojs.aql`FOR u, e,p IN 1..1 INBOUND ${`conversations/${conversationId}`} hasConversations
|
|
169
|
+
OPTIONS {vertexCollections: "users"}
|
|
170
|
+
FILTER ${filters.join(" && ")}
|
|
171
|
+
RETURN u`;
|
|
172
|
+
console.log({ aqlQry });
|
|
173
|
+
return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analytics.logError)({
|
|
174
|
+
action,
|
|
175
|
+
category: eventCategory,
|
|
176
|
+
label: "db_error"
|
|
177
|
+
}, error, context).then(() => null));
|
|
178
|
+
};
|
|
179
|
+
const getDirectConversationOld = (context, userId) => {
|
|
180
|
+
const action = "getDirectConversation";
|
|
181
|
+
const { database, session: { userId: sessionId } } = context;
|
|
182
|
+
const sessionDocId = `users/${sessionId}`;
|
|
183
|
+
const formatUserId = (0, import_utils.parseArangoId)(userId);
|
|
184
|
+
const aqlQry = import_arangojs.aql`LET from = (
|
|
185
|
+
FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversations
|
|
186
|
+
FILTER c.direct == true
|
|
187
|
+
RETURN c
|
|
188
|
+
)
|
|
189
|
+
LET to = (
|
|
190
|
+
FOR c, e IN 1..1 OUTBOUND ${formatUserId} hasConversations
|
|
191
|
+
FILTER c.direct == true
|
|
192
|
+
RETURN c
|
|
193
|
+
)
|
|
194
|
+
LET conversation = FIRST(INTERSECTION(from, to))
|
|
195
|
+
LET users = !IS_NULL(conversation) && (
|
|
196
|
+
FOR g IN[${sessionDocId}, ${formatUserId}]
|
|
197
|
+
FOR u IN users
|
|
198
|
+
FILTER g == u._id
|
|
199
|
+
RETURN u
|
|
200
|
+
)
|
|
201
|
+
RETURN IS_NULL(conversation) ? null : MERGE(conversation, {users: users})`;
|
|
202
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analytics.logError)({
|
|
203
|
+
action,
|
|
204
|
+
category: eventCategory,
|
|
205
|
+
label: "db_error"
|
|
206
|
+
}, error, context).then(() => null));
|
|
207
|
+
};
|
|
208
|
+
const getConversation = (context, convoId) => {
|
|
209
|
+
const action = "getItem";
|
|
210
|
+
const { database, session: { userId: sessionId } } = context;
|
|
211
|
+
const sessionDocId = `users/${sessionId}`;
|
|
212
|
+
const convoDocId = `conversations/${(0, import_utils.parseId)(convoId)}`;
|
|
213
|
+
const aqlQry = import_arangojs.aql`FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversations
|
|
214
|
+
FILTER c._id == ${convoDocId}
|
|
215
|
+
LET u = (
|
|
216
|
+
FOR inUser, inEdge IN 1..1 INBOUND ${convoDocId} hasConversations
|
|
217
|
+
RETURN inUser
|
|
218
|
+
)
|
|
219
|
+
LIMIT 1
|
|
220
|
+
RETURN MERGE(c, {users: u})`;
|
|
221
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).then((conversation = {}) => {
|
|
222
|
+
if (!(0, import_isEmpty.default)(conversation)) {
|
|
223
|
+
conversation.users = conversation.users.map((user) => {
|
|
224
|
+
const { imageId, userId } = user;
|
|
225
|
+
const thumbUrlData = {
|
|
226
|
+
imageId,
|
|
227
|
+
isThumb: true,
|
|
228
|
+
userId
|
|
229
|
+
};
|
|
230
|
+
return __spreadProps(__spreadValues({}, user), {
|
|
231
|
+
name: (0, import_users.getDisplayName)(user),
|
|
232
|
+
thumb: (0, import_images.getUserImageUrl)(thumbUrlData)
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
return conversation;
|
|
236
|
+
}
|
|
237
|
+
return {};
|
|
238
|
+
}).catch((error) => (0, import_analytics.logError)({
|
|
239
|
+
action,
|
|
240
|
+
category: eventCategory,
|
|
241
|
+
label: "db_error"
|
|
242
|
+
}, error, context).then(() => null));
|
|
243
|
+
};
|
|
244
|
+
const updateConversation = (context, conversation) => {
|
|
245
|
+
const action = "updateConversation";
|
|
246
|
+
const { database, session: { userId: sessionId } } = context;
|
|
247
|
+
const {
|
|
248
|
+
conversationId = (0, import_utils.createHash)(`conversation-${sessionId} `),
|
|
249
|
+
direct = false,
|
|
250
|
+
name
|
|
251
|
+
} = conversation;
|
|
252
|
+
const formatConversationId = (0, import_utils.parseId)(conversationId);
|
|
253
|
+
const now = Date.now();
|
|
254
|
+
const update = {
|
|
255
|
+
direct,
|
|
256
|
+
modified: now,
|
|
257
|
+
name
|
|
258
|
+
};
|
|
259
|
+
const insert = __spreadProps(__spreadValues({}, (0, import_cloneDeep.default)(update)), {
|
|
260
|
+
_key: formatConversationId,
|
|
261
|
+
added: now
|
|
262
|
+
});
|
|
263
|
+
const aqlQry = import_arangojs.aql`UPSERT {_key: ${formatConversationId} }
|
|
264
|
+
INSERT ${insert}
|
|
265
|
+
UPDATE ${update}
|
|
266
|
+
IN conversations RETURN NEW`;
|
|
267
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).then((conversation2 = {}) => conversation2).catch((error) => (0, import_analytics.logError)({
|
|
268
|
+
action,
|
|
269
|
+
category: eventCategory,
|
|
270
|
+
label: "db_error"
|
|
271
|
+
}, error, context).then(() => null));
|
|
272
|
+
};
|
|
273
|
+
const addUserToConversation = (context, convoId, userId) => {
|
|
274
|
+
const action = "addUserToConversation";
|
|
275
|
+
const { database } = context;
|
|
276
|
+
const formatConvoId = (0, import_utils.parseId)(convoId);
|
|
277
|
+
const formatUserId = (0, import_utils.parseId)(userId);
|
|
278
|
+
const convoDocId = `conversations/${formatConvoId} `;
|
|
279
|
+
const userDocId = `users/${formatUserId} `;
|
|
280
|
+
const aqlQry = import_arangojs.aql`FOR c IN hasConversations
|
|
281
|
+
FILTER c._from == ${userDocId} && c._to == ${convoDocId}
|
|
282
|
+
LIMIT 1
|
|
283
|
+
RETURN c`;
|
|
284
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).then((conversationEdge) => {
|
|
285
|
+
if (!!conversationEdge) {
|
|
286
|
+
return conversationEdge;
|
|
287
|
+
}
|
|
288
|
+
const edgeCollection = database.collection("hasConversations");
|
|
289
|
+
const edgeId = (0, import_utils.createHash)(`convo - ${formatConvoId} -${formatUserId} `);
|
|
290
|
+
const edge = {
|
|
291
|
+
_from: userDocId,
|
|
292
|
+
_key: edgeId,
|
|
293
|
+
_to: convoDocId,
|
|
294
|
+
added: Date.now()
|
|
295
|
+
};
|
|
296
|
+
return edgeCollection.save(edge, { returnNew: true }).then(() => edge);
|
|
297
|
+
}).catch((error) => (0, import_analytics.logError)({
|
|
298
|
+
action,
|
|
299
|
+
category: eventCategory,
|
|
300
|
+
label: "db_error"
|
|
301
|
+
}, error, context).then(() => null));
|
|
302
|
+
};
|
|
303
|
+
const deleteUserFromConversation = (context, convoId, userId) => {
|
|
304
|
+
const action = "deleteUserFromConversation";
|
|
305
|
+
const { database } = context;
|
|
306
|
+
const formatConvoId = (0, import_utils.parseId)(convoId);
|
|
307
|
+
const formatUserId = (0, import_utils.parseId)(userId);
|
|
308
|
+
const convoDocId = `conversations / ${formatConvoId} `;
|
|
309
|
+
const userDocId = `users/${formatUserId} `;
|
|
310
|
+
const aqlQry = import_arangojs.aql`FOR c IN hasConversations
|
|
311
|
+
FILTER c._from == ${userDocId} && c._to == ${convoDocId}
|
|
312
|
+
LIMIT 1
|
|
313
|
+
REMOVE c IN hasConversations
|
|
314
|
+
RETURN OLD`;
|
|
315
|
+
return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analytics.logError)({
|
|
316
|
+
action,
|
|
317
|
+
category: eventCategory,
|
|
318
|
+
label: "db_error"
|
|
319
|
+
}, error, context).then(() => null));
|
|
320
|
+
};
|
|
321
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
322
|
+
0 && (module.exports = {
|
|
323
|
+
addUserToConversation,
|
|
324
|
+
deleteUserFromConversation,
|
|
325
|
+
getConnnectionUsers,
|
|
326
|
+
getConversation,
|
|
327
|
+
getConversationUsers,
|
|
328
|
+
getConversations,
|
|
329
|
+
getDirectConversation,
|
|
330
|
+
getDirectConversationOld,
|
|
331
|
+
updateConversation
|
|
332
|
+
});
|
|
333
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbic7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAndHlwZXMvYXV0aCc7XG5cbmltcG9ydCB7QXJhbmdvREJMaW1pdCwgQ29udmVyc2F0aW9uVHlwZSwgSW1hZ2VVcmxEYXRhLCBVc2VyfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2dldExpbWl0fSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3MnO1xuaW1wb3J0IHtnZXRVc2VySW1hZ2VVcmx9IGZyb20gJy4vaW1hZ2VzJztcbmltcG9ydCB7Z2V0RGlzcGxheU5hbWUsIGdldFVzZXJ9IGZyb20gJy4vdXNlcnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnY29udmVyc2F0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25zID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHtmcm9tLCB0b30pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb252ZXJzYXRpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EIFwiJHtzZXNzaW9uRG9jSWR9XCIgaGFzQ29udmVyc2F0aW9uc1xuICAgICR7bGltaXQuYXFsfVxuICAgIExFVCB1c2VycyA9IChcbiAgICAgIEZPUiB1LCB1YyBJTiAxLi4xIElOQk9VTkQgYy5faWQgaGFzQ29udmVyc2F0aW9uc1xuICAgICAgRklMVEVSIHUuX2lkICE9IFwiJHtzZXNzaW9uRG9jSWR9XCJcbiAgICAgIFJFVFVSTiB1XG4gICAgKVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHVzZXJzfSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXJlY3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZyb21JZDogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmdcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdEZyb21JZDogc3RyaW5nID0gcGFyc2VJZChmcm9tSWQpO1xuICAgIGNvbnN0IGZvcm1hdFRvSWQ6IHN0cmluZyA9IHBhcnNlSWQodG9JZCk7XG4gICAgY29uc3QgdXNlcklkczogc3RyaW5nW10gPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzOiBzdHJpbmdbXSA9IHVzZXJJZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYoYSA8IGIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYoYSA+IGIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25JZDogc3RyaW5nID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuICAgIGNvbnN0IHVzZXI6IFVzZXIgPSBhd2FpdCBnZXRVc2VyKGNvbnRleHQsIHt1c2VySWQ6IGZvcm1hdFRvSWR9KTtcblxuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIGMgPSBET0NVTUVOVCgke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0pIFJFVFVSTiBjYDtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG5cbiAgICBpZihjb252ZXJzYXRpb24pIHtcbiAgICAgIHJldHVybiB7Li4uY29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgICB9XG5cbiAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgX2tleTogY29udmVyc2F0aW9uSWQsXG4gICAgICBhZGRlZDogbm93LFxuICAgICAgaXNEaXJlY3Q6IHRydWUsXG4gICAgICBtb2RpZmllZDogbm93XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgO1xuICAgIGNvbnN0IHVwZGF0ZWRDb252ZXJzYXRpb24gPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShpbnNlcnRRdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHVzZXJJZHMubWFwKCh1c2VySWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgaGFzQ29udmVyc2F0aW9ucy0ke3VzZXJJZH0tJHtjb252ZXJzYXRpb25JZH1gKTtcbiAgICAgIGNvbnN0IGVkZ2U6IGFueSA9IHtcbiAgICAgICAgX2Zyb206IGB1c2Vycy8ke3VzZXJJZH1gLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogYGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEVkZ2VRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7ZWRnZX0gSU4gaGFzQ29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcbiAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShpbnNlcnRFZGdlUXVlcnkpO1xuICAgIH0pKTtcblxuICAgIHJldHVybiB7Li4udXBkYXRlZENvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gIH0gY2F0Y2godXBkYXRlRXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIHVwZGF0ZUVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubm5lY3Rpb25Vc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgaW5jbHVkZUFsbDogYm9vbGVhbiA9IGZhbHNlLFxuICBpc0RpcmVjdD86IGJvb2xlYW5cbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldENvbnZlcnNhdGlvblVzZXJzJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvbnNcbiAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ1c2Vyc1wifVxuICAgIEZPUiBjIElOIGNvbm5lY3Rpb25zXG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIGNgO1xuXG4gIGNvbnNvbGUubG9nKHthcWxRcnl9KTtcbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICBpbmNsdWRlQWxsOiBib29sZWFuID0gZmFsc2UsXG4gIGlzRGlyZWN0PzogYm9vbGVhblxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29udmVyc2F0aW9uVXNlcnMnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uc1xuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIHVgO1xuXG4gIGNvbnNvbGUubG9nKHthcWxRcnl9KTtcbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpcmVjdENvbnZlcnNhdGlvbk9sZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKHVzZXJJZCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgZnJvbSA9IChcbiAgICAgIEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvbnNcbiAgICAgIEZJTFRFUiBjLmRpcmVjdCA9PSB0cnVlXG4gICAgICBSRVRVUk4gY1xuICAgIClcbiAgICBMRVQgdG8gPSAoXG4gICAgICBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7Zm9ybWF0VXNlcklkfSBoYXNDb252ZXJzYXRpb25zXG4gICAgICBGSUxURVIgYy5kaXJlY3QgPT0gdHJ1ZVxuICAgICAgUkVUVVJOIGNcbiAgICApXG4gICAgTEVUIGNvbnZlcnNhdGlvbiA9IEZJUlNUKElOVEVSU0VDVElPTihmcm9tLCB0bykpXG4gICAgTEVUIHVzZXJzID0gIUlTX05VTEwoY29udmVyc2F0aW9uKSAmJiAoXG4gICAgICBGT1IgZyBJTlske3Nlc3Npb25Eb2NJZH0sICR7Zm9ybWF0VXNlcklkfV1cbiAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICBGSUxURVIgZyA9PSB1Ll9pZFxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIElTX05VTEwoY29udmVyc2F0aW9uKSA/IG51bGwgOiBNRVJHRShjb252ZXJzYXRpb24sIHt1c2VyczogdXNlcnN9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udm9JZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgY29udm9Eb2NJZDogc3RyaW5nID0gYGNvbnZlcnNhdGlvbnMvJHtwYXJzZUlkKGNvbnZvSWQpfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7c2Vzc2lvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25zXG4gICAgRklMVEVSIGMuX2lkID09ICR7Y29udm9Eb2NJZH1cbiAgICBMRVQgdSA9IChcbiAgICAgIEZPUiBpblVzZXIsIGluRWRnZSBJTiAxLi4xIElOQk9VTkQgJHtjb252b0RvY0lkfSBoYXNDb252ZXJzYXRpb25zXG4gICAgICBSRVRVUk4gaW5Vc2VyXG4gICAgKVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1fSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSA9IHt9KSA9PiB7XG4gICAgICBpZighaXNFbXB0eShjb252ZXJzYXRpb24pKSB7XG4gICAgICAgIGNvbnZlcnNhdGlvbi51c2VycyA9IGNvbnZlcnNhdGlvbi51c2Vycy5tYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtpbWFnZUlkLCB1c2VySWR9ID0gdXNlcjtcbiAgICAgICAgICBjb25zdCB0aHVtYlVybERhdGE6IEltYWdlVXJsRGF0YSA9IHtcbiAgICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgICBpc1RodW1iOiB0cnVlLFxuICAgICAgICAgICAgdXNlcklkXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICAgIG5hbWU6IGdldERpc3BsYXlOYW1lKHVzZXIpLFxuICAgICAgICAgICAgdGh1bWI6IGdldFVzZXJJbWFnZVVybCh0aHVtYlVybERhdGEpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnNhdGlvbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNvbnZlcnNhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252ZXJzYXRpb24pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbi0ke3Nlc3Npb25JZH0gYCksXG4gICAgZGlyZWN0ID0gZmFsc2UsXG4gICAgbmFtZVxuICB9ID0gY29udmVyc2F0aW9uO1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZDogc3RyaW5nID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgdXBkYXRlOiBhbnkgPSB7XG4gICAgLy8gRGlyZWN0IG1lc3NhZ2VcbiAgICBkaXJlY3QsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lXG4gIH07XG5cbiAgY29uc3QgaW5zZXJ0OiBhbnkgPSB7XG4gICAgLi4uY2xvbmVEZWVwKHVwZGF0ZSksXG4gICAgX2tleTogZm9ybWF0Q29udmVyc2F0aW9uSWQsXG4gICAgYWRkZWQ6IG5vd1xuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke2Zvcm1hdENvbnZlcnNhdGlvbklkfSB9XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSA9IHt9KSA9PiBjb252ZXJzYXRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVXNlclRvQ29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZvSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkVXNlclRvQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZvSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udm9JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252b0RvY0lkOiBzdHJpbmcgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZvSWR9IGA7XG4gIGNvbnN0IHVzZXJEb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfSBgO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMgSU4gaGFzQ29udmVyc2F0aW9uc1xuICAgIEZJTFRFUiBjLl9mcm9tID09ICR7dXNlckRvY0lkfSAmJiBjLl90byA9PSAke2NvbnZvRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb25FZGdlKSA9PiB7XG4gICAgICBpZighIWNvbnZlcnNhdGlvbkVkZ2UpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnNhdGlvbkVkZ2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oJ2hhc0NvbnZlcnNhdGlvbnMnKTtcbiAgICAgIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgY29udm8gLSAke2Zvcm1hdENvbnZvSWR9IC0ke2Zvcm1hdFVzZXJJZH0gYCk7XG5cbiAgICAgIGNvbnN0IGVkZ2U6IENvbnZlcnNhdGlvblR5cGUgPSB7XG4gICAgICAgIF9mcm9tOiB1c2VyRG9jSWQsXG4gICAgICAgIF9rZXk6IGVkZ2VJZCxcbiAgICAgICAgX3RvOiBjb252b0RvY0lkLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pLnRoZW4oKCkgPT4gZWRnZSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252b0lkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZvSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udm9JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252b0RvY0lkOiBzdHJpbmcgPSBgY29udmVyc2F0aW9ucyAvICR7Zm9ybWF0Q29udm9JZH0gYDtcbiAgY29uc3QgdXNlckRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9IGA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYyBJTiBoYXNDb252ZXJzYXRpb25zXG4gICAgRklMVEVSIGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGMuX3RvID09ICR7Y29udm9Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIGMgSU4gaGFzQ29udmVyc2F0aW9uc1xuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQSxtQkFBaUQ7QUFDakQsc0JBQWtCO0FBSWxCLHVCQUFzQjtBQUN0QixxQkFBb0I7QUFJcEIsb0JBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2QixvQkFBOEI7QUFDOUIsbUJBQXNDO0FBRXRDLE1BQU0sZ0JBQXdCO0FBRXZCLE1BQU0sbUJBQW1CLENBQUMsU0FBcUIsRUFBQyxNQUFNLFNBQXFDO0FBQ2hHLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFVBQVUsU0FBUyxFQUFDLFFBQVEsZ0JBQWM7QUFDakQsUUFBTSxRQUF1Qiw0QkFBUyxNQUFNO0FBQzVDLFFBQU0sZUFBdUIsU0FBUztBQUN0QyxRQUFNLFNBQWlCLDhCQUE4QjtBQUFBLE1BQ2pELE1BQU07QUFBQTtBQUFBO0FBQUEseUJBR2E7QUFBQTtBQUFBO0FBQUE7QUFLdkIsU0FBTyxTQUFTLE1BQU0sUUFDbkIsS0FBSyxDQUFDLFdBQXdCLE9BQU8sT0FDckMsTUFBTSxDQUFDLFVBQWlCLCtCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxLQUNOLE9BQU8sU0FBUyxLQUFLLE1BQU07QUFBQTtBQUczQixNQUFNLHdCQUF3QixPQUNuQyxTQUNBLFFBQ0EsU0FDOEI7QUFDOUIsUUFBTSxTQUFp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
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
9
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
+
var __spreadValues = (a, b) => {
|
|
11
|
+
for (var prop in b || (b = {}))
|
|
12
|
+
if (__hasOwnProp.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
if (__getOwnPropSymbols)
|
|
15
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
16
|
+
if (__propIsEnum.call(b, prop))
|
|
17
|
+
__defNormalProp(a, prop, b[prop]);
|
|
18
|
+
}
|
|
19
|
+
return a;
|
|
20
|
+
};
|
|
21
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
22
|
+
var __export = (target, all) => {
|
|
23
|
+
__markAsModule(target);
|
|
24
|
+
for (var name in all)
|
|
25
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
26
|
+
};
|
|
27
|
+
var __reExport = (target, module2, desc) => {
|
|
28
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
29
|
+
for (let key of __getOwnPropNames(module2))
|
|
30
|
+
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
31
|
+
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
|
32
|
+
}
|
|
33
|
+
return target;
|
|
34
|
+
};
|
|
35
|
+
var __toModule = (module2) => {
|
|
36
|
+
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
|
37
|
+
};
|
|
38
|
+
__export(exports, {
|
|
39
|
+
dynamoDel: () => dynamoDel,
|
|
40
|
+
dynamoGet: () => dynamoGet,
|
|
41
|
+
dynamoGetList: () => dynamoGetList,
|
|
42
|
+
dynamoPut: () => dynamoPut,
|
|
43
|
+
dynamoPutList: () => dynamoPutList,
|
|
44
|
+
dynamoUpdate: () => dynamoUpdate,
|
|
45
|
+
parseDynamo: () => parseDynamo
|
|
46
|
+
});
|
|
47
|
+
var import_aws_sdk = __toModule(require("aws-sdk"));
|
|
48
|
+
var import_config = __toModule(require("../config"));
|
|
49
|
+
const dynamoGet = (params) => new Promise((resolve, reject) => {
|
|
50
|
+
import_aws_sdk.default.config.update(import_config.Config.get("aws"));
|
|
51
|
+
const dynamodb = new import_aws_sdk.DynamoDB();
|
|
52
|
+
params.ConsistentRead = false;
|
|
53
|
+
dynamodb.getItem(params, (error, results) => {
|
|
54
|
+
if (error) {
|
|
55
|
+
return reject(error);
|
|
56
|
+
}
|
|
57
|
+
return resolve(results);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
const parseDynamo = (results) => {
|
|
61
|
+
const { Items: items } = results;
|
|
62
|
+
const data = [];
|
|
63
|
+
for (let idx = 0, len = items.length; idx < len; idx++) {
|
|
64
|
+
const tmp = items[idx];
|
|
65
|
+
const obj = {};
|
|
66
|
+
let key;
|
|
67
|
+
for (key in tmp) {
|
|
68
|
+
if (tmp.hasOwnProperty(key)) {
|
|
69
|
+
if (tmp[key].S) {
|
|
70
|
+
obj[key] = tmp[key].S.toString();
|
|
71
|
+
} else if (tmp[key].N) {
|
|
72
|
+
obj[key] = parseFloat(tmp[key].N);
|
|
73
|
+
} else {
|
|
74
|
+
obj[key] = tmp[key].B;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
data.push(obj);
|
|
79
|
+
}
|
|
80
|
+
return data;
|
|
81
|
+
};
|
|
82
|
+
const dynamoGetList = (params, index) => new Promise((resolve, reject) => {
|
|
83
|
+
import_aws_sdk.default.config.update(import_config.Config.get("aws"));
|
|
84
|
+
const dynamodb = new import_aws_sdk.DynamoDB();
|
|
85
|
+
const { ConsistentRead: consistentRead } = params;
|
|
86
|
+
const updatedParams = __spreadValues({}, params);
|
|
87
|
+
if (index) {
|
|
88
|
+
updatedParams.ExclusiveStartKey = index;
|
|
89
|
+
}
|
|
90
|
+
if (!consistentRead) {
|
|
91
|
+
updatedParams.ConsistentRead = false;
|
|
92
|
+
}
|
|
93
|
+
dynamodb.query(updatedParams, (error, output) => {
|
|
94
|
+
if (error) {
|
|
95
|
+
return reject(error);
|
|
96
|
+
}
|
|
97
|
+
const list = parseDynamo(output);
|
|
98
|
+
const { LastEvaluatedKey: lastKey } = output;
|
|
99
|
+
if (lastKey !== void 0) {
|
|
100
|
+
return dynamoGetList(params, lastKey);
|
|
101
|
+
}
|
|
102
|
+
return resolve(list);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
const dynamoPut = (params) => new Promise((resolve, reject) => {
|
|
106
|
+
import_aws_sdk.default.config.update(import_config.Config.get("aws"));
|
|
107
|
+
const dynamodb = new import_aws_sdk.DynamoDB();
|
|
108
|
+
dynamodb.putItem(params, (error, output) => {
|
|
109
|
+
if (error) {
|
|
110
|
+
return reject(error);
|
|
111
|
+
}
|
|
112
|
+
return resolve(output);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
const dynamoUpdate = (params) => new Promise((resolve, reject) => {
|
|
116
|
+
import_aws_sdk.default.config.update(import_config.Config.get("aws"));
|
|
117
|
+
const dynamodb = new import_aws_sdk.DynamoDB();
|
|
118
|
+
dynamodb.updateItem(params, (error, output) => {
|
|
119
|
+
if (error) {
|
|
120
|
+
return reject(error);
|
|
121
|
+
}
|
|
122
|
+
return resolve(output);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
const dynamoPutList = (params) => new Promise((resolve, reject) => {
|
|
126
|
+
import_aws_sdk.default.config.update(import_config.Config.get("aws"));
|
|
127
|
+
const dynamodb = new import_aws_sdk.DynamoDB();
|
|
128
|
+
dynamodb.batchWriteItem(params, (error, output) => {
|
|
129
|
+
if (error) {
|
|
130
|
+
return reject(error);
|
|
131
|
+
}
|
|
132
|
+
return resolve(output);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
const dynamoDel = (params) => new Promise((resolve, reject) => {
|
|
136
|
+
import_aws_sdk.default.config.update(import_config.Config.get("aws"));
|
|
137
|
+
const dynamodb = new import_aws_sdk.DynamoDB();
|
|
138
|
+
dynamodb.deleteItem(params, (error, output) => {
|
|
139
|
+
if (error) {
|
|
140
|
+
return reject(error);
|
|
141
|
+
}
|
|
142
|
+
return resolve(output);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
146
|
+
0 && (module.exports = {
|
|
147
|
+
dynamoDel,
|
|
148
|
+
dynamoGet,
|
|
149
|
+
dynamoGetList,
|
|
150
|
+
dynamoPut,
|
|
151
|
+
dynamoPutList,
|
|
152
|
+
dynamoUpdate,
|
|
153
|
+
parseDynamo
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZHluYW1vZGIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgYXdzLCB7RHluYW1vREJ9IGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHtcbiAgQmF0Y2hXcml0ZUl0ZW1JbnB1dCxcbiAgQmF0Y2hXcml0ZUl0ZW1PdXRwdXQsXG4gIERlbGV0ZUl0ZW1JbnB1dCxcbiAgRGVsZXRlSXRlbU91dHB1dCxcbiAgR2V0SXRlbUlucHV0LFxuICBHZXRJdGVtT3V0cHV0LFxuICBQdXRJdGVtSW5wdXQsXG4gIFB1dEl0ZW1PdXRwdXQsXG4gIFF1ZXJ5SW5wdXQsXG4gIFF1ZXJ5T3V0cHV0LFxuICBVcGRhdGVJdGVtSW5wdXQsXG4gIFVwZGF0ZUl0ZW1PdXRwdXRcbn0gZnJvbSAnYXdzLXNkay9jbGllbnRzL2R5bmFtb2RiJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdkeW5hbW9kYic7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9HZXQgPSAocGFyYW1zOiBHZXRJdGVtSW5wdXQpOiBQcm9taXNlPEdldEl0ZW1PdXRwdXQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcbiAgcGFyYW1zLkNvbnNpc3RlbnRSZWFkID0gZmFsc2U7XG5cbiAgZHluYW1vZGIuZ2V0SXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3VsdHM6IEdldEl0ZW1PdXRwdXQpID0+IHtcbiAgICBpZihlcnJvcikge1xuICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmUocmVzdWx0cyk7XG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUR5bmFtbyA9IChyZXN1bHRzOiBRdWVyeU91dHB1dCk6IGFueVtdID0+IHtcbiAgY29uc3Qge0l0ZW1zOiBpdGVtc30gPSByZXN1bHRzO1xuICBjb25zdCBkYXRhOiBhbnlbXSA9IFtdO1xuXG4gIGZvcihsZXQgaWR4OiBudW1iZXIgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGlkeCA8IGxlbjsgaWR4KyspIHtcbiAgICBjb25zdCB0bXAgPSBpdGVtc1tpZHhdO1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3Ioa2V5IGluIHRtcCkge1xuICAgICAgaWYodG1wLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgaWYodG1wW2tleV0uUykge1xuICAgICAgICAgIG9ialtrZXldID0gdG1wW2tleV0uUy50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYodG1wW2tleV0uTikge1xuICAgICAgICAgIG9ialtrZXldID0gcGFyc2VGbG9hdCh0bXBba2V5XS5OKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHRtcFtrZXldLkI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRhLnB1c2gob2JqKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb0dldExpc3QgPSAocGFyYW1zOiBRdWVyeUlucHV0LCBpbmRleCk6IFByb21pc2U8R2V0SXRlbU91dHB1dFtdPiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGF3cy5jb25maWcudXBkYXRlKENvbmZpZy5nZXQoJ2F3cycpKTtcbiAgY29uc3QgZHluYW1vZGI6IER5bmFtb0RCID0gbmV3IER5bmFtb0RCKCk7XG4gIGNvbnN0IHtDb25zaXN0ZW50UmVhZDogY29uc2lzdGVudFJlYWR9ID0gcGFyYW1zO1xuICBjb25zdCB1cGRhdGVkUGFyYW1zID0gey4uLnBhcmFtc307XG5cbiAgaWYoaW5kZXgpIHtcbiAgICB1cGRhdGVkUGFyYW1zLkV4Y2x1c2l2ZVN0YXJ0S2V5ID0gaW5kZXg7XG4gIH1cblxuICBpZighY29uc2lzdGVudFJlYWQpIHtcbiAgICB1cGRhdGVkUGFyYW1zLkNvbnNpc3RlbnRSZWFkID0gZmFsc2U7XG4gIH1cblxuICBkeW5hbW9kYi5xdWVyeSh1cGRhdGVkUGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IFF1ZXJ5T3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICAvLyBTYXZlIGxpc3Qgb2YgaXRlbXNcbiAgICBjb25zdCBsaXN0OiBhbnlbXSA9IHBhcnNlRHluYW1vKG91dHB1dCk7XG4gICAgY29uc3Qge0xhc3RFdmFsdWF0ZWRLZXk6IGxhc3RLZXl9ID0gb3V0cHV0O1xuXG4gICAgaWYobGFzdEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTYXZlIGxhc3QgaW5kZXggYmVmb3JlIGxvb3BpbmdcbiAgICAgIHJldHVybiBkeW5hbW9HZXRMaXN0KHBhcmFtcywgbGFzdEtleSk7XG4gICAgfVxuXG4gICAgLy8gUXVlcnkgY29tcGxldGUsIHJldHVybiBmaW5hbCBsaXN0XG4gICAgcmV0dXJuIHJlc29sdmUobGlzdCk7XG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9QdXQgPSAocGFyYW1zOiBQdXRJdGVtSW5wdXQpOiBQcm9taXNlPFB1dEl0ZW1PdXRwdXQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcblxuICBkeW5hbW9kYi5wdXRJdGVtKHBhcmFtcywgKGVycm9yLCBvdXRwdXQ6IFB1dEl0ZW1PdXRwdXQpID0+IHtcbiAgICBpZihlcnJvcikge1xuICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9VcGRhdGUgPSAocGFyYW1zOiBVcGRhdGVJdGVtSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUl0ZW1PdXRwdXQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcblxuICBkeW5hbW9kYi51cGRhdGVJdGVtKHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBVcGRhdGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICB9KTtcbn0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vUHV0TGlzdCA9IChwYXJhbXM6IEJhdGNoV3JpdGVJdGVtSW5wdXQpOiBQcm9taXNlPEJhdGNoV3JpdGVJdGVtT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICAgIGNvbnN0IGR5bmFtb2RiOiBEeW5hbW9EQiA9IG5ldyBEeW5hbW9EQigpO1xuXG4gICAgZHluYW1vZGIuYmF0Y2hXcml0ZUl0ZW0ocGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IEJhdGNoV3JpdGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vRGVsID0gKHBhcmFtczogRGVsZXRlSXRlbUlucHV0KTogUHJvbWlzZTxEZWxldGVJdGVtT3V0cHV0PiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGF3cy5jb25maWcudXBkYXRlKENvbmZpZy5nZXQoJ2F3cycpKTtcbiAgY29uc3QgZHluYW1vZGI6IER5bmFtb0RCID0gbmV3IER5bmFtb0RCKCk7XG5cbiAgZHluYW1vZGIuZGVsZXRlSXRlbShwYXJhbXMsIChlcnJvciwgb3V0cHV0OiBEZWxldGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICB9KTtcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLHFCQUE0QjtBQWdCNUIsb0JBQXFCO0FBSWQsTUFBTSxZQUFZLENBQUMsV0FBaUQsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQzFHLHlCQUFJLE9BQU8sT0FBTyxxQkFBTyxJQUFJO0FBQzdCLFFBQU0sV0FBcUIsSUFBSTtBQUMvQixTQUFPLGlCQUFpQjtBQUV4QixXQUFTLFFBQVEsUUFBUSxDQUFDLE9BQWMsWUFBMkI7QUFDakUsUUFBRyxPQUFPO0FBQ1IsYUFBTyxPQUFPO0FBQUE7QUFHaEIsV0FBTyxRQUFRO0FBQUE7QUFBQTtBQUlaLE1BQU0sY0FBYyxDQUFDLFlBQWdDO0FBQzFELFFBQU0sRUFBQyxPQUFPLFVBQVM7QUFDdkIs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
|