@nlabs/reaktor 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/actions/conversations.d.ts +14 -0
- package/lib/actions/conversations.js +333 -0
- package/lib/actions/dynamodb.js +155 -0
- package/lib/actions/email.js +177 -0
- package/lib/actions/files.js +319 -0
- package/lib/{data → actions}/groups.d.ts +4 -3
- package/lib/actions/groups.js +282 -0
- package/lib/actions/images.d.ts +22 -0
- package/lib/actions/images.js +682 -0
- package/lib/actions/index.js +40 -0
- package/lib/{data → actions}/ios.d.ts +2 -1
- package/lib/actions/ios.js +179 -0
- package/lib/actions/locations.js +112 -0
- package/lib/actions/messages.d.ts +13 -0
- package/lib/actions/messages.js +216 -0
- package/lib/{data → actions}/notifications.d.ts +2 -2
- package/lib/actions/notifications.js +63 -0
- package/lib/{data → actions}/payments.d.ts +2 -2
- package/lib/actions/payments.js +491 -0
- package/lib/actions/posts.d.ts +19 -0
- package/lib/actions/posts.js +538 -0
- package/lib/actions/reactions.d.ts +30 -0
- package/lib/actions/reactions.js +340 -0
- package/lib/{data → actions}/s3.d.ts +1 -1
- package/lib/actions/s3.js +122 -0
- package/lib/{data → actions}/search.d.ts +2 -2
- package/lib/actions/search.js +99 -0
- package/lib/actions/sms.js +76 -0
- package/lib/actions/statistics.d.ts +2 -0
- package/lib/actions/statistics.js +63 -0
- package/lib/actions/subscription.js +209 -0
- package/lib/actions/tags.d.ts +26 -0
- package/lib/actions/tags.js +340 -0
- package/lib/actions/users.d.ts +44 -0
- package/lib/actions/users.js +571 -0
- package/lib/{data → actions}/websockets.d.ts +1 -1
- package/lib/actions/websockets.js +156 -0
- package/lib/config.d.ts +2 -3
- package/lib/config.js +116 -149
- package/lib/index.d.ts +1 -1
- package/lib/index.js +23 -45
- package/lib/templates/email/layout.d.ts +2 -0
- package/lib/templates/email/layout.js +292 -0
- package/lib/templates/email/passwordForgot.d.ts +2 -0
- package/lib/templates/email/passwordForgot.js +28 -0
- package/lib/templates/email/passwordRecovery.d.ts +2 -0
- package/lib/templates/email/passwordRecovery.js +25 -0
- package/lib/templates/email/verifyEmail.d.ts +2 -0
- package/lib/templates/email/verifyEmail.js +28 -0
- package/lib/templates/email/welcome.d.ts +2 -0
- package/lib/templates/email/welcome.js +28 -0
- package/lib/templates/sms/passwordForgot.d.ts +2 -0
- package/lib/templates/sms/passwordForgot.js +14 -0
- package/lib/templates/sms/passwordRecovery.d.ts +2 -0
- package/lib/templates/sms/passwordRecovery.js +14 -0
- package/lib/templates/sms/verifyEmail.d.ts +2 -0
- package/lib/templates/sms/verifyEmail.js +14 -0
- package/lib/templates/sms/verifyPhone.d.ts +2 -0
- package/lib/templates/sms/verifyPhone.js +14 -0
- package/lib/templates/sms/welcome.d.ts +2 -0
- package/lib/templates/sms/welcome.js +14 -0
- package/lib/types/apps.d.ts +2 -2
- package/lib/types/apps.js +4 -2
- package/lib/types/arangodb.js +4 -2
- package/lib/types/auth.d.ts +4 -8
- package/lib/types/auth.js +4 -2
- package/lib/types/conversations.d.ts +3 -3
- package/lib/types/conversations.js +4 -2
- package/lib/types/email.d.ts +2 -2
- package/lib/types/email.js +4 -2
- package/lib/types/files.js +4 -2
- package/lib/types/google.js +4 -2
- package/lib/types/groups.d.ts +2 -1
- package/lib/types/groups.js +4 -2
- package/lib/types/images.d.ts +8 -5
- package/lib/types/images.js +4 -2
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.js +37 -227
- package/lib/types/locations.js +4 -2
- package/lib/types/messages.d.ts +12 -2
- package/lib/types/messages.js +4 -2
- package/lib/types/notifications.d.ts +2 -2
- package/lib/types/notifications.js +4 -2
- package/lib/types/payments.js +4 -2
- package/lib/types/posts.d.ts +18 -1
- package/lib/types/posts.js +4 -2
- package/lib/types/statistics.d.ts +3 -0
- package/lib/types/statistics.js +4 -0
- package/lib/types/tags.d.ts +6 -0
- package/lib/types/tags.js +4 -2
- package/lib/types/users.d.ts +15 -11
- package/lib/types/users.js +4 -2
- package/lib/utils/analytics.d.ts +7 -0
- package/lib/utils/analytics.js +101 -77
- package/lib/utils/arangodb.d.ts +1 -1
- package/lib/utils/arangodb.js +93 -114
- package/lib/utils/auth.js +58 -55
- package/lib/utils/graphql.js +38 -19
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +26 -84
- package/lib/utils/objects.js +44 -53
- package/lib/utils/session.d.ts +18 -0
- package/lib/utils/session.js +42 -0
- package/package.json +32 -30
- package/lib/data/conversations.d.ts +0 -8
- package/lib/data/conversations.js +0 -311
- package/lib/data/dynamodb.js +0 -206
- package/lib/data/email.js +0 -222
- package/lib/data/files.js +0 -525
- package/lib/data/groups.js +0 -435
- package/lib/data/images.d.ts +0 -22
- package/lib/data/images.js +0 -1051
- package/lib/data/index.js +0 -266
- package/lib/data/ios.js +0 -355
- package/lib/data/locations.js +0 -172
- package/lib/data/messages.d.ts +0 -9
- package/lib/data/messages.js +0 -299
- package/lib/data/notifications.js +0 -59
- package/lib/data/payments.js +0 -771
- package/lib/data/posts.d.ts +0 -23
- package/lib/data/posts.js +0 -766
- package/lib/data/reactions.d.ts +0 -14
- package/lib/data/reactions.js +0 -529
- package/lib/data/s3.js +0 -155
- package/lib/data/search.js +0 -155
- package/lib/data/sms.js +0 -83
- package/lib/data/subscription.js +0 -337
- package/lib/data/tags.d.ts +0 -14
- package/lib/data/tags.js +0 -397
- package/lib/data/users.d.ts +0 -20
- package/lib/data/users.js +0 -470
- package/lib/data/websockets.js +0 -250
- package/lib/types/reactions.d.ts +0 -17
- package/lib/types/reactions.js +0 -2
- package/lib/utils/redis.d.ts +0 -1
- package/lib/utils/redis.js +0 -36
- package/templates/email/layout.html +0 -279
- package/templates/email/passwordForgot.html +0 -15
- package/templates/email/passwordRecovery.html +0 -12
- package/templates/email/verifyEmail.html +0 -15
- package/templates/sms/passwordForgot.txt +0 -1
- package/templates/sms/passwordRecovery.txt +0 -1
- package/templates/sms/verifyEmail.txt +0 -1
- package/templates/sms/verifyPhone.txt +0 -1
- /package/lib/{data → actions}/dynamodb.d.ts +0 -0
- /package/lib/{data → actions}/email.d.ts +0 -0
- /package/lib/{data → actions}/files.d.ts +0 -0
- /package/lib/{data → actions}/index.d.ts +0 -0
- /package/lib/{data → actions}/locations.d.ts +0 -0
- /package/lib/{data → actions}/sms.d.ts +0 -0
- /package/lib/{data → actions}/subscription.d.ts +0 -0
|
@@ -0,0 +1,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 getConnectionUsers: (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
|
+
getConnectionUsers: () => getConnectionUsers,
|
|
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 getConnectionUsers = (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
|
+
getConnectionUsers,
|
|
326
|
+
getConversation,
|
|
327
|
+
getConversationUsers,
|
|
328
|
+
getConversations,
|
|
329
|
+
getDirectConversation,
|
|
330
|
+
getDirectConversationOld,
|
|
331
|
+
updateConversation
|
|
332
|
+
});
|
|
333
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbic7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9jdXJzb3InO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAndHlwZXMvYXV0aCc7XG5cbmltcG9ydCB7QXJhbmdvREJMaW1pdCwgQ29udmVyc2F0aW9uVHlwZSwgSW1hZ2VVcmxEYXRhLCBVc2VyfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2dldExpbWl0fSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3MnO1xuaW1wb3J0IHtnZXRVc2VySW1hZ2VVcmx9IGZyb20gJy4vaW1hZ2VzJztcbmltcG9ydCB7Z2V0RGlzcGxheU5hbWUsIGdldFVzZXJ9IGZyb20gJy4vdXNlcnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnY29udmVyc2F0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25zID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHtmcm9tLCB0b30pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb252ZXJzYXRpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EIFwiJHtzZXNzaW9uRG9jSWR9XCIgaGFzQ29udmVyc2F0aW9uc1xuICAgICR7bGltaXQuYXFsfVxuICAgIExFVCB1c2VycyA9IChcbiAgICAgIEZPUiB1LCB1YyBJTiAxLi4xIElOQk9VTkQgYy5faWQgaGFzQ29udmVyc2F0aW9uc1xuICAgICAgRklMVEVSIHUuX2lkICE9IFwiJHtzZXNzaW9uRG9jSWR9XCJcbiAgICAgIFJFVFVSTiB1XG4gICAgKVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHVzZXJzfSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXJlY3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZyb21JZDogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmdcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdEZyb21JZDogc3RyaW5nID0gcGFyc2VJZChmcm9tSWQpO1xuICAgIGNvbnN0IGZvcm1hdFRvSWQ6IHN0cmluZyA9IHBhcnNlSWQodG9JZCk7XG4gICAgY29uc3QgdXNlcklkczogc3RyaW5nW10gPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzOiBzdHJpbmdbXSA9IHVzZXJJZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYoYSA8IGIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYoYSA+IGIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25JZDogc3RyaW5nID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuICAgIGNvbnN0IHVzZXI6IFVzZXIgPSBhd2FpdCBnZXRVc2VyKGNvbnRleHQsIHt1c2VySWQ6IGZvcm1hdFRvSWR9KTtcblxuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIGMgPSBET0NVTUVOVCgke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0pIFJFVFVSTiBjYDtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG5cbiAgICBpZihjb252ZXJzYXRpb24pIHtcbiAgICAgIHJldHVybiB7Li4uY29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgICB9XG5cbiAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgX2tleTogY29udmVyc2F0aW9uSWQsXG4gICAgICBhZGRlZDogbm93LFxuICAgICAgaXNEaXJlY3Q6IHRydWUsXG4gICAgICBtb2RpZmllZDogbm93XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgO1xuICAgIGNvbnN0IHVwZGF0ZWRDb252ZXJzYXRpb24gPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShpbnNlcnRRdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHVzZXJJZHMubWFwKCh1c2VySWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgaGFzQ29udmVyc2F0aW9ucy0ke3VzZXJJZH0tJHtjb252ZXJzYXRpb25JZH1gKTtcbiAgICAgIGNvbnN0IGVkZ2U6IGFueSA9IHtcbiAgICAgICAgX2Zyb206IGB1c2Vycy8ke3VzZXJJZH1gLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogYGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEVkZ2VRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7ZWRnZX0gSU4gaGFzQ29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcbiAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShpbnNlcnRFZGdlUXVlcnkpO1xuICAgIH0pKTtcblxuICAgIHJldHVybiB7Li4udXBkYXRlZENvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gIH0gY2F0Y2godXBkYXRlRXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIHVwZGF0ZUVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICBpbmNsdWRlQWxsOiBib29sZWFuID0gZmFsc2UsXG4gIGlzRGlyZWN0PzogYm9vbGVhblxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29udmVyc2F0aW9uVXNlcnMnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uc1xuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRk9SIGMgSU4gY29ubmVjdGlvbnNcbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gY2A7XG5cbiAgY29uc29sZS5sb2coe2FxbFFyeX0pO1xuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uVXNlcnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gIGluY2x1ZGVBbGw6IGJvb2xlYW4gPSBmYWxzZSxcbiAgaXNEaXJlY3Q/OiBib29sZWFuXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb252ZXJzYXRpb25Vc2Vycyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25zXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gdWA7XG5cbiAgY29uc29sZS5sb2coe2FxbFFyeX0pO1xuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uT2xkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQodXNlcklkKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBmcm9tID0gKFxuICAgICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3Nlc3Npb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uc1xuICAgICAgRklMVEVSIGMuZGlyZWN0ID09IHRydWVcbiAgICAgIFJFVFVSTiBjXG4gICAgKVxuICAgIExFVCB0byA9IChcbiAgICAgIEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtmb3JtYXRVc2VySWR9IGhhc0NvbnZlcnNhdGlvbnNcbiAgICAgIEZJTFRFUiBjLmRpcmVjdCA9PSB0cnVlXG4gICAgICBSRVRVUk4gY1xuICAgIClcbiAgICBMRVQgY29udmVyc2F0aW9uID0gRklSU1QoSU5URVJTRUNUSU9OKGZyb20sIHRvKSlcbiAgICBMRVQgdXNlcnMgPSAhSVNfTlVMTChjb252ZXJzYXRpb24pICYmIChcbiAgICAgIEZPUiBnIElOWyR7c2Vzc2lvbkRvY0lkfSwgJHtmb3JtYXRVc2VySWR9XVxuICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiBnID09IHUuX2lkXG4gICAgICBSRVRVUk4gdVxuICAgIClcbiAgICBSRVRVUk4gSVNfTlVMTChjb252ZXJzYXRpb24pID8gbnVsbCA6IE1FUkdFKGNvbnZlcnNhdGlvbiwge3VzZXJzOiB1c2Vyc30pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252b0lkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252b0RvY0lkOiBzdHJpbmcgPSBgY29udmVyc2F0aW9ucy8ke3BhcnNlSWQoY29udm9JZCl9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvbnNcbiAgICBGSUxURVIgYy5faWQgPT0gJHtjb252b0RvY0lkfVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGluVXNlciwgaW5FZGdlIElOIDEuLjEgSU5CT1VORCAke2NvbnZvRG9jSWR9IGhhc0NvbnZlcnNhdGlvbnNcbiAgICAgIFJFVFVSTiBpblVzZXJcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHV9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlID0ge30pID0+IHtcbiAgICAgIGlmKCFpc0VtcHR5KGNvbnZlcnNhdGlvbikpIHtcbiAgICAgICAgY29udmVyc2F0aW9uLnVzZXJzID0gY29udmVyc2F0aW9uLnVzZXJzLm1hcCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qge2ltYWdlSWQsIHVzZXJJZH0gPSB1c2VyO1xuICAgICAgICAgIGNvbnN0IHRodW1iVXJsRGF0YTogSW1hZ2VVcmxEYXRhID0ge1xuICAgICAgICAgICAgaW1hZ2VJZCxcbiAgICAgICAgICAgIGlzVGh1bWI6IHRydWUsXG4gICAgICAgICAgICB1c2VySWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi51c2VyLFxuICAgICAgICAgICAgbmFtZTogZ2V0RGlzcGxheU5hbWUodXNlciksXG4gICAgICAgICAgICB0aHVtYjogZ2V0VXNlckltYWdlVXJsKHRodW1iVXJsRGF0YSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBkaXJlY3QgPSBmYWxzZSxcbiAgICBuYW1lXG4gIH0gPSBjb252ZXJzYXRpb247XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICAvLyBEaXJlY3QgbWVzc2FnZVxuICAgIGRpcmVjdCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICAuLi5jbG9uZURlZXAodXBkYXRlKSxcbiAgICBfa2V5OiBmb3JtYXRDb252ZXJzYXRpb25JZCxcbiAgICBhZGRlZDogbm93XG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9IH1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlID0ge30pID0+IGNvbnZlcnNhdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyVG9Db252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udm9JZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRVc2VyVG9Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udm9JZDogc3RyaW5nID0gcGFyc2VJZChjb252b0lkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZvRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udm9JZH0gYDtcbiAgY29uc3QgdXNlckRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9IGA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYyBJTiBoYXNDb252ZXJzYXRpb25zXG4gICAgRklMVEVSIGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGMuX3RvID09ICR7Y29udm9Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbkVkZ2UpID0+IHtcbiAgICAgIGlmKCEhY29udmVyc2F0aW9uRWRnZSkge1xuICAgICAgICByZXR1cm4gY29udmVyc2F0aW9uRWRnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaGFzQ29udmVyc2F0aW9ucycpO1xuICAgICAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBjb252byAtICR7Zm9ybWF0Q29udm9JZH0gLSR7Zm9ybWF0VXNlcklkfSBgKTtcblxuICAgICAgY29uc3QgZWRnZTogQ29udmVyc2F0aW9uVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IHVzZXJEb2NJZCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGNvbnZvRG9jSWQsXG4gICAgICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBlZGdlKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZvSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udm9JZDogc3RyaW5nID0gcGFyc2VJZChjb252b0lkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZvRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zIC8gJHtmb3JtYXRDb252b0lkfSBgO1xuICBjb25zdCB1c2VyRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH0gYDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjIElOIGhhc0NvbnZlcnNhdGlvbnNcbiAgICBGSUxURVIgYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgYy5fdG8gPT0gJHtjb252b0RvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgYyBJTiBoYXNDb252ZXJzYXRpb25zXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLG1CQUFpRDtBQUNqRCxzQkFBa0I7QUFJbEIsdUJBQXNCO0FBQ3RCLHFCQUFvQjtBQUlwQixvQkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLG9CQUE4QjtBQUM5QixtQkFBc0M7QUFFdEMsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSxtQkFBbUIsQ0FBQyxTQUFxQixFQUFDLE1BQU0sU0FBcUM7QUFDaEcsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsVUFBVSxTQUFTLEVBQUMsUUFBUSxnQkFBYztBQUNqRCxRQUFNLFFBQXVCLDRCQUFTLE1BQU07QUFDNUMsUUFBTSxlQUF1QixTQUFTO0FBQ3RDLFFBQU0sU0FBaUIsOEJBQThCO0FBQUEsTUFDakQsTUFBTTtBQUFBO0FBQUE7QUFBQSx5QkFHYTtBQUFBO0FBQUE7QUFBQTtBQUt2QixTQUFPLFNBQVMsTUFBTSxRQUNuQixLQUFLLENBQUMsV0FBd0IsT0FBTyxPQUNyQyxNQUFNLENBQUMsVUFBaUIsK0JBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLEtBQ04sT0FBTyxTQUFTLEtBQUssTUFBTTtBQUFBO0FBRzNCLE1BQU0sd0JBQXdCLE9BQ25DLFNBQ0EsUUFDQSxTQUM4QjtBQUM5QixRQUFNLFNBQWlC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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+IHtcbiAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcblxuICBkeW5hbW9kYi51cGRhdGVJdGVtKHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBVcGRhdGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICB9KTtcbn0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vUHV0TGlzdCA9IChwYXJhbXM6IEJhdGNoV3JpdGVJdGVtSW5wdXQpOiBQcm9taXNlPEJhdGNoV3JpdGVJdGVtT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICAgIGNvbnN0IGR5bmFtb2RiOiBEeW5hbW9EQiA9IG5ldyBEeW5hbW9EQigpO1xuXG4gICAgZHluYW1vZGIuYmF0Y2hXcml0ZUl0ZW0ocGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IEJhdGNoV3JpdGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vRGVsID0gKHBhcmFtczogRGVsZXRlSXRlbUlucHV0KTogUHJvbWlzZTxEZWxldGVJdGVtT3V0cHV0PiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGF3cy5jb25maWcudXBkYXRlKENvbmZpZy5nZXQoJ2F3cycpKTtcbiAgY29uc3QgZHluYW1vZGI6IER5bmFtb0RCID0gbmV3IER5bmFtb0RCKCk7XG5cbiAgZHluYW1vZGIuZGVsZXRlSXRlbShwYXJhbXMsIChlcnJvciwgb3V0cHV0OiBEZWxldGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICB9KTtcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLHFCQUE0QjtBQWdCNUIsb0JBQXFCO0FBSWQsTUFBTSxZQUFZLENBQUMsV0FBaUQsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQzFHLHlCQUFJLE9BQU8sT0FBTyxxQkFBTyxJQUFJO0FBQzdCLFFBQU0sV0FBcUIsSUFBSTtBQUMvQixTQUFPLGlCQUFpQjtBQUV4QixXQUFTLFFBQVEsUUFBUSxDQUFDLE9BQWMsWUFBMkI7QUFDakUsUUFBRyxPQUFPO0FBQ1IsYUFBTyxPQUFPO0FBQUE7QUFHaEIsV0FBTyxRQUFRO0FBQUE7QUFBQTtBQUlaLE1BQU0sY0FBYyxDQUFDLFlBQWdDO0FBQzFELFFBQU0sRUFBQyxPQUFPLFVBQVM7QUFDdkIsUUFBTSxPQUFjO0FBRXBCLFdBQVEsTUFBYyxHQUFHLE1BQU0sTUFBTSxRQUFRLE1BQU0sS0FBSyxPQUFPO0FBQzdELFVBQU0sTUFBTSxNQUFNO0FBQ2xCLFVBQU0sTUFBTTtBQUNaLFFBQUk7QUFFSixTQUFJLE9BQU8sS0FBSztBQUNkLFVBQUcsSUFBSSxlQUFlLE1BQU07QUFDMUIsWUFBRyxJQUFJLEtBQUssR0FBRztBQUNiLGNBQUksT0FBTyxJQUFJLEtBQUssRUFBRTtBQUFBLG1CQUNkLElBQUksS0FBSyxHQUFHO0FBQ3BCLGNBQUksT0FBTyxXQUFXLElBQUksS0FBSztBQUFBLGVBQzFCO0FBQ0wsY0FBSSxPQUFPLElBQUksS0FBSztBQUFBO0FBQUE7QUFBQTtBQUsxQixTQUFLLEtBQUs7QUFBQTtBQUdaLFNBQU87QUFBQTtBQUdGLE1BQU0sZ0JBQWdCLENBQUMsUUFBb0IsVUFBb0MsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3JILHlCQUFJLE9BQU8sT0FBTyxxQkFBTyxJQUFJO0FBQzdCLFFBQU0sV0FBcUIsSUFBSTtBQUMvQixRQUFNLEVBQUMsZ0JBQWdCLG1CQUFrQjtBQUN6QyxRQUFNLGdCQUFnQixtQkFBSTtBQUUxQixNQUFHLE9BQU87QUFDUixrQkFBYyxvQkFBb0I7QUFBQTtBQUdwQyxNQUFHLENBQUMsZ0JBQWdCO0FBQ2xCLGtCQUFjLGlCQUFpQjtBQUFBO0FBR2pDLFdBQVMsTUFBTSxlQUFlLENBQUMsT0FBYyxXQUF3QjtBQUNuRSxRQUFHLE9BQU87QUFDUixhQUFPLE9BQU87QUFBQTtBQUdoQixVQUFNLE9BQWMsWUFBWTtBQUNoQyxVQUFNLEVBQUMsa0JBQWtCLFlBQVc7QUFFcEMsUUFBRyxZQUFZLFFBQVc7QUFFeEIsYUFBTyxjQUFjLFFBQVE7QUFBQTtBQUkvQixXQUFPLFFBQVE7QUFBQTtBQUFBO0FBSVosTUFBTSxZQUFZLENBQUMsV0FBaUQsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQzFHLHlCQUFJLE9BQU8sT0FBTyxxQkFBTyxJQUFJO0FBQzdCLFFBQU0sV0FBcUIsSUFBSTtBQUUvQixXQUFTLFFBQVEsUUFBUSxDQUFDLE9BQU8sV0FBMEI7QUFDekQsUUFBRyxPQUFPO0FBQ1IsYUFBTyxPQUFPO0FBQUE7QUFFaEIsV0FBTyxRQUFRO0FBQUE7QUFBQTtBQUlaLE1BQU0sZUFBZSxDQUFDLFdBQXVELElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUNuSCx5QkFBSSxPQUFPLE9BQU8scUJBQU8sSUFBSTtBQUM3QixRQUFNLFdBQXFCLElBQUk7QUFFL0IsV0FBUyxXQUFXLFFBQVEsQ0FBQyxPQUFjLFdBQTZCO0FBQ3RFLFFBQUcsT0FBTztBQUNSLGFBQU8sT0FBTztBQUFBO0FBRWhCLFdBQU8sUUFBUTtBQUFBO0FBQUE7QUFJWixNQUFNLGdCQUFnQixDQUFDLFdBQzVCLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUMvQix5QkFBSSxPQUFPLE9BQU8scUJBQU8sSUFBSTtBQUM3QixRQUFNLFdBQXFCLElBQUk7QUFFL0IsV0FBUyxlQUFlLFFBQVEsQ0FBQyxPQUFjLFdBQWlDO0FBQzlFLFFBQUcsT0FBTztBQUNSLGFBQU8sT0FBTztBQUFBO0FBRWhCLFdBQU8sUUFBUTtBQUFBO0FBQUE7QUFJZCxNQUFNLFlBQVksQ0FBQyxXQUF1RCxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDaEgseUJBQUksT0FBTyxPQUFPLHFCQUFPLElBQUk7QUFDN0IsUUFBTSxXQUFxQixJQUFJO0FBRS9CLFdBQVMsV0FBVyxRQUFRLENBQUMsT0FBTyxXQUE2QjtBQUMvRCxRQUFHLE9BQU87QUFDUixhQUFPLE9BQU87QUFBQTtBQUVoQixXQUFPLFFBQVE7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
|