@nlabs/reaktor 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/data/conversations.d.ts +3 -1
- package/lib/data/dynamodb.d.ts +8 -8
- package/lib/data/email.d.ts +2 -2
- package/lib/data/images.d.ts +1 -1
- package/lib/data/index.d.ts +1 -0
- package/lib/data/ios.d.ts +5 -5
- package/lib/data/notifications.d.ts +1 -1
- package/lib/data/payments.d.ts +3 -4
- package/lib/data/reactions.d.ts +1 -1
- package/lib/data/s3.d.ts +6 -6
- package/lib/data/subscription.d.ts +1 -1
- package/lib/data/websockets.d.ts +6 -0
- package/lib/types/payments.d.ts +1 -0
- package/lib/types/posts.d.ts +2 -0
- package/lib/utils/arangodb.d.ts +2 -1
- package/package.json +26 -24
- package/lib/config.js +0 -145
- package/lib/data/conversations.js +0 -226
- package/lib/data/dynamodb.js +0 -174
- package/lib/data/email.js +0 -194
- package/lib/data/files.js +0 -465
- package/lib/data/groups.js +0 -401
- package/lib/data/images.js +0 -899
- package/lib/data/index.js +0 -234
- package/lib/data/ios.js +0 -329
- package/lib/data/locations.js +0 -148
- package/lib/data/messages.js +0 -283
- package/lib/data/notifications.js +0 -59
- package/lib/data/payments.js +0 -800
- package/lib/data/posts.js +0 -690
- package/lib/data/reactions.js +0 -487
- package/lib/data/s3.js +0 -147
- package/lib/data/search.js +0 -113
- package/lib/data/sms.js +0 -79
- package/lib/data/subscription.js +0 -311
- package/lib/data/tags.js +0 -345
- package/lib/data/users.js +0 -419
- package/lib/index.js +0 -42
- package/lib/types/apps.js +0 -2
- package/lib/types/arangodb.js +0 -2
- package/lib/types/auth.js +0 -2
- package/lib/types/conversations.js +0 -2
- package/lib/types/email.js +0 -2
- package/lib/types/files.js +0 -2
- package/lib/types/google.js +0 -2
- package/lib/types/groups.js +0 -2
- package/lib/types/images.js +0 -2
- package/lib/types/index.js +0 -210
- package/lib/types/locations.js +0 -2
- package/lib/types/messages.js +0 -2
- package/lib/types/notifications.js +0 -2
- package/lib/types/payments.js +0 -2
- package/lib/types/posts.js +0 -2
- package/lib/types/reactions.js +0 -2
- package/lib/types/tags.js +0 -2
- package/lib/types/users.js +0 -2
- package/lib/utils/analytics.js +0 -61
- package/lib/utils/arangodb.js +0 -122
- package/lib/utils/auth.js +0 -57
- package/lib/utils/graphql.js +0 -19
- package/lib/utils/index.js +0 -78
- package/lib/utils/objects.js +0 -54
- package/lib/utils/redis.js +0 -32
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.updateConversation = exports.getConversation = exports.getDirectConversation = exports.getConversationList = void 0;
|
|
7
|
-
|
|
8
|
-
var _utils = require("@nlabs/utils");
|
|
9
|
-
|
|
10
|
-
var _arangojs = require("arangojs");
|
|
11
|
-
|
|
12
|
-
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
13
|
-
|
|
14
|
-
var _identity = _interopRequireDefault(require("lodash/identity"));
|
|
15
|
-
|
|
16
|
-
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
17
|
-
|
|
18
|
-
var _pick2 = _interopRequireDefault(require("lodash/pick"));
|
|
19
|
-
|
|
20
|
-
var _utils2 = require("../utils");
|
|
21
|
-
|
|
22
|
-
var _analytics = require("../utils/analytics");
|
|
23
|
-
|
|
24
|
-
var _images = require("./images");
|
|
25
|
-
|
|
26
|
-
var _users = require("./users");
|
|
27
|
-
|
|
28
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
29
|
-
|
|
30
|
-
function _templateObject3() {
|
|
31
|
-
var data = _taggedTemplateLiteral(["UPSERT {_key: ", "}\n INSERT ", "\n UPDATE ", "\n IN conversations RETURN NEW"]);
|
|
32
|
-
|
|
33
|
-
_templateObject3 = function _templateObject3() {
|
|
34
|
-
return data;
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
return data;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function _templateObject2() {
|
|
41
|
-
var data = _taggedTemplateLiteral(["FOR c IN conversations\n FILTER c._key == ", " && IS_LIST(c.users) && POSITION(c.users, ", ", false)\n LET u = (\n FOR g IN c.users\n FOR u IN users\n FILTER g == u._key\n RETURN {_key:u._key, first:u.first, last:u.last, name:u.name, email:u.email, username:u.username, photo:u.photo }\n )\n FILTER LENGTH(u) > 1\n LIMIT 1\n RETURN MERGE(c, {users: u})"]);
|
|
42
|
-
|
|
43
|
-
_templateObject2 = function _templateObject2() {
|
|
44
|
-
return data;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
return data;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
51
|
-
|
|
52
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
53
|
-
|
|
54
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
55
|
-
|
|
56
|
-
function _templateObject() {
|
|
57
|
-
var data = _taggedTemplateLiteral(["FOR c IN conversations\n FILTER LENGTH(c.users) == 2 &&\n POSITION(c.users, ", ", true) &&\n POSITION(c.users, ", ", true)\n LET u = (\n FOR g IN c.users\n FOR user IN users\n FILTER user._key == g\n RETURN user\n )\n LIMIT 1\n RETURN MERGE(c, {users: u})"]);
|
|
58
|
-
|
|
59
|
-
_templateObject = function _templateObject() {
|
|
60
|
-
return data;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
return data;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
70
|
-
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
71
|
-
*/
|
|
72
|
-
var eventCategory = 'conversations';
|
|
73
|
-
|
|
74
|
-
var getConversationList = function getConversationList(context, from, to) {
|
|
75
|
-
var action = 'getList';
|
|
76
|
-
var database = context.database,
|
|
77
|
-
sessionId = context.userId;
|
|
78
|
-
var limit = (0, _utils2.getLimit)(from, to);
|
|
79
|
-
var aqlQry = "FOR c IN conversations\n FILTER POSITION(c.users, \"".concat(sessionId, "\", false)\n LET u = (\n FOR g IN c.users\n FOR u IN users\n FILTER g == u._key\n RETURN {_key:u._key, first:u.first, last:u.last, name:u.name, email:u.email, username:u.username, photo:u.photo }\n )\n FILTER LENGTH(u) > 1\n ").concat(limit.aql, "\n RETURN {_key:c._key, name: c.name, direct: c.direct, users: u}");
|
|
80
|
-
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
81
|
-
return cursor.all();
|
|
82
|
-
})["catch"](function (error) {
|
|
83
|
-
return (0, _analytics.logError)({
|
|
84
|
-
action: action,
|
|
85
|
-
category: eventCategory,
|
|
86
|
-
label: 'db_error'
|
|
87
|
-
}, error, context).then(function () {
|
|
88
|
-
return null;
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
exports.getConversationList = getConversationList;
|
|
94
|
-
|
|
95
|
-
var getDirectConversation = function getDirectConversation(context, userId) {
|
|
96
|
-
var action = 'getDirect';
|
|
97
|
-
var database = context.database,
|
|
98
|
-
sessionId = context.userId;
|
|
99
|
-
var formatUserId = (0, _utils.parseId)(userId);
|
|
100
|
-
var aqlQry = (0, _arangojs.aql)(_templateObject(), sessionId, formatUserId);
|
|
101
|
-
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
102
|
-
return cursor.next();
|
|
103
|
-
}).then(function () {
|
|
104
|
-
var conversation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
105
|
-
var _conversation$users = conversation.users,
|
|
106
|
-
users = _conversation$users === void 0 ? [] : _conversation$users;
|
|
107
|
-
|
|
108
|
-
if (users.length) {
|
|
109
|
-
conversation.users = users.map(function (user) {
|
|
110
|
-
var imgId = user.imgId,
|
|
111
|
-
sub = user.sub;
|
|
112
|
-
var thumbUrlData = {
|
|
113
|
-
imgId: imgId,
|
|
114
|
-
isThumb: true,
|
|
115
|
-
sub: sub
|
|
116
|
-
};
|
|
117
|
-
return _objectSpread({}, user, {
|
|
118
|
-
name: (0, _users.getDisplayName)(user),
|
|
119
|
-
thumb: (0, _images.getUserImageUrl)(thumbUrlData)
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return conversation;
|
|
125
|
-
})["catch"](function (error) {
|
|
126
|
-
return (0, _analytics.logError)({
|
|
127
|
-
action: action,
|
|
128
|
-
category: eventCategory,
|
|
129
|
-
label: 'db_error'
|
|
130
|
-
}, error, context).then(function () {
|
|
131
|
-
return null;
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
exports.getDirectConversation = getDirectConversation;
|
|
137
|
-
|
|
138
|
-
var getConversation = function getConversation(context, convoId) {
|
|
139
|
-
var action = 'getItem';
|
|
140
|
-
var database = context.database,
|
|
141
|
-
sessionId = context.userId;
|
|
142
|
-
var formatConvoId = (0, _utils.parseId)(convoId);
|
|
143
|
-
var aqlQry = (0, _arangojs.aql)(_templateObject2(), formatConvoId, sessionId);
|
|
144
|
-
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
145
|
-
return cursor.next();
|
|
146
|
-
}).then(function () {
|
|
147
|
-
var conversation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
148
|
-
|
|
149
|
-
if (!(0, _isEmpty["default"])(conversation)) {
|
|
150
|
-
conversation.users = conversation.users.map(function (user) {
|
|
151
|
-
var imgId = user.imgId,
|
|
152
|
-
sub = user.sub;
|
|
153
|
-
var thumbUrlData = {
|
|
154
|
-
imgId: imgId,
|
|
155
|
-
isThumb: true,
|
|
156
|
-
sub: sub
|
|
157
|
-
};
|
|
158
|
-
return _objectSpread({}, user, {
|
|
159
|
-
name: (0, _users.getDisplayName)(user),
|
|
160
|
-
thumb: (0, _images.getUserImageUrl)(thumbUrlData)
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
return conversation;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return {};
|
|
167
|
-
})["catch"](function (error) {
|
|
168
|
-
return (0, _analytics.logError)({
|
|
169
|
-
action: action,
|
|
170
|
-
category: eventCategory,
|
|
171
|
-
label: 'db_error'
|
|
172
|
-
}, error, context).then(function () {
|
|
173
|
-
return null;
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
exports.getConversation = getConversation;
|
|
179
|
-
|
|
180
|
-
var updateConversation = function updateConversation(context, item) {
|
|
181
|
-
var action = 'update';
|
|
182
|
-
var database = context.database,
|
|
183
|
-
sessionId = context.userId;
|
|
184
|
-
|
|
185
|
-
var _pick = (0, _pick2["default"])(item, _identity["default"]),
|
|
186
|
-
direct = _pick.direct,
|
|
187
|
-
id = _pick.id,
|
|
188
|
-
name = _pick.name,
|
|
189
|
-
users = _pick.users;
|
|
190
|
-
|
|
191
|
-
var rcpt = users || [];
|
|
192
|
-
var formatId = item.id || (0, _utils.createHash)("convo-".concat(sessionId, "-").concat(rcpt.join('')));
|
|
193
|
-
var now = Date.now();
|
|
194
|
-
var update = {
|
|
195
|
-
// Direct message
|
|
196
|
-
direct: !!direct ? direct : undefined,
|
|
197
|
-
modified: now,
|
|
198
|
-
name: !!name ? name : undefined,
|
|
199
|
-
// Users
|
|
200
|
-
users: !!users ? users : undefined
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
var insert = _objectSpread({}, (0, _cloneDeep["default"])(update), {
|
|
204
|
-
_key: formatId,
|
|
205
|
-
added: now
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
var aqlQry = (0, _arangojs.aql)(_templateObject3(), id, insert, update);
|
|
209
|
-
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
210
|
-
return cursor.next();
|
|
211
|
-
}).then(function () {
|
|
212
|
-
var conversation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
213
|
-
return conversation;
|
|
214
|
-
})["catch"](function (error) {
|
|
215
|
-
return (0, _analytics.logError)({
|
|
216
|
-
action: action,
|
|
217
|
-
category: eventCategory,
|
|
218
|
-
label: 'db_error'
|
|
219
|
-
}, error, context).then(function () {
|
|
220
|
-
return null;
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
};
|
|
224
|
-
|
|
225
|
-
exports.updateConversation = updateConversation;
|
|
226
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2NvbnZlcnNhdGlvbnMudHMiXSwibmFtZXMiOlsiZXZlbnRDYXRlZ29yeSIsImdldENvbnZlcnNhdGlvbkxpc3QiLCJjb250ZXh0IiwiZnJvbSIsInRvIiwiYWN0aW9uIiwiZGF0YWJhc2UiLCJzZXNzaW9uSWQiLCJ1c2VySWQiLCJsaW1pdCIsImFxbFFyeSIsImFxbCIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImFsbCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsImdldERpcmVjdENvbnZlcnNhdGlvbiIsImZvcm1hdFVzZXJJZCIsIm5leHQiLCJjb252ZXJzYXRpb24iLCJ1c2VycyIsImxlbmd0aCIsIm1hcCIsInVzZXIiLCJpbWdJZCIsInN1YiIsInRodW1iVXJsRGF0YSIsImlzVGh1bWIiLCJuYW1lIiwidGh1bWIiLCJnZXRDb252ZXJzYXRpb24iLCJjb252b0lkIiwiZm9ybWF0Q29udm9JZCIsInVwZGF0ZUNvbnZlcnNhdGlvbiIsIml0ZW0iLCJpZGVudGl0eSIsImRpcmVjdCIsImlkIiwicmNwdCIsImZvcm1hdElkIiwiam9pbiIsIm5vdyIsIkRhdGUiLCJ1cGRhdGUiLCJ1bmRlZmluZWQiLCJtb2RpZmllZCIsImluc2VydCIsIl9rZXkiLCJhZGRlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7OztBQUlBLElBQU1BLGFBQXFCLEdBQUcsZUFBOUI7O0FBRU8sSUFBTUMsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQixDQUFDQyxPQUFELEVBQXNCQyxJQUF0QixFQUFvQ0MsRUFBcEMsRUFBZ0Y7QUFDakgsTUFBTUMsTUFBYyxHQUFHLFNBQXZCO0FBRGlILE1BRTFHQyxRQUYwRyxHQUUzRUosT0FGMkUsQ0FFMUdJLFFBRjBHO0FBQUEs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LEdBQVNBLElBQVQsR0FBZ0JnQixTQUpKO0FBS2xCO0FBQ0F4QixJQUFBQSxLQUFLLEVBQUUsQ0FBQyxDQUFDQSxLQUFGLEdBQVVBLEtBQVYsR0FBa0J3QjtBQU5QLEdBQXBCOztBQVNBLE1BQU1FLE1BQVcscUJBQ1osMkJBQVVILE1BQVYsQ0FEWTtBQUVmSSxJQUFBQSxJQUFJLEVBQUVSLFFBRlM7QUFHZlMsSUFBQUEsS0FBSyxFQUFFUDtBQUhRLElBQWpCOztBQU1BLE1BQU1sQyxNQUFnQixPQUFHQyxhQUFILHNCQUF1QjZCLEVBQXZCLEVBQ1hTLE1BRFcsRUFFWEgsTUFGVyxDQUF0QjtBQUtBLFNBQU8sbUJBQU14QyxRQUFOLEVBQWdCTSxLQUFoQixDQUFzQkYsTUFBdEIsRUFDSkcsSUFESSxDQUNDLFVBQUNDLE1BQUQ7QUFBQSxXQUF5QkEsTUFBTSxDQUFDTyxJQUFQLEVBQXpCO0FBQUEsR0FERCxFQUVKUixJQUZJLENBRUM7QUFBQSxRQUFDUyxZQUFELHVFQUFrQyxFQUFsQztBQUFBLFdBQXlDQSxZQUF6QztBQUFBLEdBRkQsV0FHRSxVQUFDTixLQUFEO0FBQUEsV0FBa0IseUJBQVM7QUFDaENYLE1BQUFBLE1BQU0sRUFBTkEsTUFEZ0M7QUFFaENZLE1BQUFBLFFBQVEsRUFBRWpCLGFBRnNCO0FBR2hDa0IsTUFBQUEsS0FBSyxFQUFFO0FBSHlCLEtBQVQsRUFJdEJGLEtBSnNCLEVBSWZkLE9BSmUsRUFJTlcsSUFKTSxDQUlEO0FBQUEsYUFBTSxJQUFOO0FBQUEsS0FKQyxDQUFsQjtBQUFBLEdBSEYsQ0FBUDtBQVFELENBbkNNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvYXFsLXF1ZXJ5JztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvY3Vyc29yJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnbG9kYXNoL2lkZW50aXR5JztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC9waWNrJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAndHlwZXMvYXV0aCc7XG5cbmltcG9ydCB7QXJhbmdvREJMaW1pdCwgQ29udmVyc2F0aW9uVHlwZSwgSW1hZ2VVcmxEYXRhLCBVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljcyc7XG5pbXBvcnQge2dldFVzZXJJbWFnZVVybH0gZnJvbSAnLi9pbWFnZXMnO1xuaW1wb3J0IHtnZXREaXNwbGF5TmFtZX0gZnJvbSAnLi91c2Vycyc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnY29udmVyc2F0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25MaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgYyBJTiBjb252ZXJzYXRpb25zXG4gICAgRklMVEVSIFBPU0lUSU9OKGMudXNlcnMsIFwiJHtzZXNzaW9uSWR9XCIsIGZhbHNlKVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGcgSU4gYy51c2Vyc1xuICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiBnID09IHUuX2tleVxuICAgICAgUkVUVVJOIHtfa2V5OnUuX2tleSwgZmlyc3Q6dS5maXJzdCwgbGFzdDp1Lmxhc3QsIG5hbWU6dS5uYW1lLCBlbWFpbDp1LmVtYWlsLCB1c2VybmFtZTp1LnVzZXJuYW1lLCBwaG90bzp1LnBob3RvIH1cbiAgICApXG4gICAgRklMVEVSIExFTkdUSCh1KSA+IDFcbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4ge19rZXk6Yy5fa2V5LCBuYW1lOiBjLm5hbWUsIGRpcmVjdDogYy5kaXJlY3QsIHVzZXJzOiB1fWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXJlY3RDb252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0RGlyZWN0JztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlSWQodXNlcklkKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjIElOIGNvbnZlcnNhdGlvbnNcbiAgICBGSUxURVIgTEVOR1RIKGMudXNlcnMpID09IDIgJiZcbiAgICBQT1NJVElPTihjLnVzZXJzLCAke3Nlc3Npb25JZH0sIHRydWUpICYmXG4gICAgUE9TSVRJT04oYy51c2VycywgJHtmb3JtYXRVc2VySWR9LCB0cnVlKVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGcgSU4gYy51c2Vyc1xuICAgICAgRk9SIHVzZXIgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiB1c2VyLl9rZXkgPT0gZ1xuICAgICAgUkVUVVJOIHVzZXJcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHV9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7dXNlcnMgPSBbXX0gPSBjb252ZXJzYXRpb247XG5cbiAgICAgIGlmKHVzZXJzLmxlbmd0aCkge1xuICAgICAgICBjb252ZXJzYXRpb24udXNlcnMgPSB1c2Vycy5tYXAoKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3Qge2ltZ0lkLCBzdWJ9ID0gdXNlcjtcbiAgICAgICAgICBjb25zdCB0aHVtYlVybERhdGE6IEltYWdlVXJsRGF0YSA9IHtcbiAgICAgICAgICAgIGltZ0lkLFxuICAgICAgICAgICAgaXNUaHVtYjogdHJ1ZSxcbiAgICAgICAgICAgIHN1YlxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnVzZXIsXG4gICAgICAgICAgICBuYW1lOiBnZXREaXNwbGF5TmFtZSh1c2VyKSxcbiAgICAgICAgICAgIHRodW1iOiBnZXRVc2VySW1hZ2VVcmwodGh1bWJVcmxEYXRhKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZvSWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252b0lkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZvSWQpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMgSU4gY29udmVyc2F0aW9uc1xuICAgIEZJTFRFUiBjLl9rZXkgPT0gJHtmb3JtYXRDb252b0lkfSAmJiBJU19MSVNUKGMudXNlcnMpICYmIFBPU0lUSU9OKGMudXNlcnMsICR7c2Vzc2lvbklkfSwgZmFsc2UpXG4gICAgTEVUIHUgPSAoXG4gICAgICBGT1IgZyBJTiBjLnVzZXJzXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIGcgPT0gdS5fa2V5XG4gICAgICBSRVRVUk4ge19rZXk6dS5fa2V5LCBmaXJzdDp1LmZpcnN0LCBsYXN0OnUubGFzdCwgbmFtZTp1Lm5hbWUsIGVtYWlsOnUuZW1haWwsIHVzZXJuYW1lOnUudXNlcm5hbWUsIHBob3RvOnUucGhvdG8gfVxuICAgIClcbiAgICBGSUxURVIgTEVOR1RIKHUpID4gMVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1fSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUgPSB7fSkgPT4ge1xuICAgICAgaWYoIWlzRW1wdHkoY29udmVyc2F0aW9uKSkge1xuICAgICAgICBjb252ZXJzYXRpb24udXNlcnMgPSBjb252ZXJzYXRpb24udXNlcnMubWFwKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtpbWdJZCwgc3VifSA9IHVzZXI7XG4gICAgICAgICAgY29uc3QgdGh1bWJVcmxEYXRhOiBJbWFnZVVybERhdGEgPSB7XG4gICAgICAgICAgICBpbWdJZCxcbiAgICAgICAgICAgIGlzVGh1bWI6IHRydWUsXG4gICAgICAgICAgICBzdWJcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi51c2VyLFxuICAgICAgICAgICAgbmFtZTogZ2V0RGlzcGxheU5hbWUodXNlciksXG4gICAgICAgICAgICB0aHVtYjogZ2V0VXNlckltYWdlVXJsKHRodW1iVXJsRGF0YSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW0pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCB7ZGlyZWN0LCBpZCwgbmFtZSwgdXNlcnN9ID0gcGljayhpdGVtLCBpZGVudGl0eSk7XG4gIGNvbnN0IHJjcHQ6IFVzZXJUeXBlW10gPSB1c2VycyB8fCBbXTtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IGl0ZW0uaWQgfHwgY3JlYXRlSGFzaChgY29udm8tJHtzZXNzaW9uSWR9LSR7cmNwdC5qb2luKCcnKX1gKTtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1cGRhdGU6IGFueSA9IHtcbiAgICAvLyBEaXJlY3QgbWVzc2FnZVxuICAgIGRpcmVjdDogISFkaXJlY3QgPyBkaXJlY3QgOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiAhIW5hbWUgPyBuYW1lIDogdW5kZWZpbmVkLFxuICAgIC8vIFVzZXJzXG4gICAgdXNlcnM6ICEhdXNlcnMgPyB1c2VycyA6IHVuZGVmaW5lZFxuICB9O1xuXG4gIGNvbnN0IGluc2VydDogYW55ID0ge1xuICAgIC4uLmNsb25lRGVlcCh1cGRhdGUpLFxuICAgIF9rZXk6IGZvcm1hdElkLFxuICAgIGFkZGVkOiBub3dcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtpZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUgPSB7fSkgPT4gY29udmVyc2F0aW9uKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcbiJdfQ==
|
package/lib/data/dynamodb.js
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.parseDynamo = exports.dynamoDel = exports.dynamoPutList = exports.dynamoUpdate = exports.dynamoPut = exports.dynamoGetList = exports.dynamoGet = void 0;
|
|
7
|
-
|
|
8
|
-
var _awsSdk = _interopRequireWildcard(require("aws-sdk"));
|
|
9
|
-
|
|
10
|
-
var _config = require("../config");
|
|
11
|
-
|
|
12
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } }
|
|
13
|
-
|
|
14
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
15
|
-
|
|
16
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
17
|
-
|
|
18
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
19
|
-
|
|
20
|
-
// const eventCategory: string = 'dynamodb';
|
|
21
|
-
var dynamoGet = function dynamoGet(params) {
|
|
22
|
-
return new Promise(function (resolve, reject) {
|
|
23
|
-
_awsSdk["default"].config.update(_config.Config.get('aws'));
|
|
24
|
-
|
|
25
|
-
var dynamodb = new _awsSdk.DynamoDB();
|
|
26
|
-
params.ConsistentRead = false;
|
|
27
|
-
dynamodb.getItem(params, function (error, results) {
|
|
28
|
-
if (error) {
|
|
29
|
-
return reject(error);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return resolve(results);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
exports.dynamoGet = dynamoGet;
|
|
38
|
-
|
|
39
|
-
var dynamoGetList = function dynamoGetList(params, index) {
|
|
40
|
-
return new Promise(function (resolve, reject) {
|
|
41
|
-
_awsSdk["default"].config.update(_config.Config.get('aws'));
|
|
42
|
-
|
|
43
|
-
var dynamodb = new _awsSdk.DynamoDB();
|
|
44
|
-
var consistentRead = params.ConsistentRead;
|
|
45
|
-
|
|
46
|
-
var updatedParams = _objectSpread({}, params);
|
|
47
|
-
|
|
48
|
-
if (index) {
|
|
49
|
-
updatedParams.ExclusiveStartKey = index;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
if (!consistentRead) {
|
|
53
|
-
updatedParams.ConsistentRead = false;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
dynamodb.query(updatedParams, function (error, output) {
|
|
57
|
-
if (error) {
|
|
58
|
-
return reject(error);
|
|
59
|
-
} // Save list of items
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
var list = parseDynamo(output);
|
|
63
|
-
var lastKey = output.LastEvaluatedKey;
|
|
64
|
-
|
|
65
|
-
if (lastKey !== undefined) {
|
|
66
|
-
// Save last index before looping
|
|
67
|
-
return dynamoGetList(params, lastKey);
|
|
68
|
-
} // Query complete, return final list
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return resolve(list);
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
exports.dynamoGetList = dynamoGetList;
|
|
77
|
-
|
|
78
|
-
var dynamoPut = function dynamoPut(params) {
|
|
79
|
-
return new Promise(function (resolve, reject) {
|
|
80
|
-
_awsSdk["default"].config.update(_config.Config.get('aws'));
|
|
81
|
-
|
|
82
|
-
var dynamodb = new _awsSdk.DynamoDB();
|
|
83
|
-
dynamodb.putItem(params, function (error, output) {
|
|
84
|
-
if (error) {
|
|
85
|
-
return reject(error);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return resolve(output);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
exports.dynamoPut = dynamoPut;
|
|
94
|
-
|
|
95
|
-
var dynamoUpdate = function dynamoUpdate(params) {
|
|
96
|
-
return new Promise(function (resolve, reject) {
|
|
97
|
-
_awsSdk["default"].config.update(_config.Config.get('aws'));
|
|
98
|
-
|
|
99
|
-
var dynamodb = new _awsSdk.DynamoDB();
|
|
100
|
-
dynamodb.updateItem(params, function (error, output) {
|
|
101
|
-
if (error) {
|
|
102
|
-
return reject(error);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return resolve(output);
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
exports.dynamoUpdate = dynamoUpdate;
|
|
111
|
-
|
|
112
|
-
var dynamoPutList = function dynamoPutList(params) {
|
|
113
|
-
return new Promise(function (resolve, reject) {
|
|
114
|
-
_awsSdk["default"].config.update(_config.Config.get('aws'));
|
|
115
|
-
|
|
116
|
-
var dynamodb = new _awsSdk.DynamoDB();
|
|
117
|
-
dynamodb.batchWriteItem(params, function (error, output) {
|
|
118
|
-
if (error) {
|
|
119
|
-
return reject(error);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return resolve(output);
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
exports.dynamoPutList = dynamoPutList;
|
|
128
|
-
|
|
129
|
-
var dynamoDel = function dynamoDel(params) {
|
|
130
|
-
return new Promise(function (resolve, reject) {
|
|
131
|
-
_awsSdk["default"].config.update(_config.Config.get('aws'));
|
|
132
|
-
|
|
133
|
-
var dynamodb = new _awsSdk.DynamoDB();
|
|
134
|
-
dynamodb.deleteItem(params, function (error, output) {
|
|
135
|
-
if (error) {
|
|
136
|
-
return reject(error);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
return resolve(output);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
exports.dynamoDel = dynamoDel;
|
|
145
|
-
|
|
146
|
-
var parseDynamo = function parseDynamo(results) {
|
|
147
|
-
var items = results.Items;
|
|
148
|
-
var data = [];
|
|
149
|
-
|
|
150
|
-
for (var idx = 0, len = items.length; idx < len; idx++) {
|
|
151
|
-
var tmp = items[idx];
|
|
152
|
-
var obj = {};
|
|
153
|
-
var key = void 0;
|
|
154
|
-
|
|
155
|
-
for (key in tmp) {
|
|
156
|
-
if (tmp.hasOwnProperty(key)) {
|
|
157
|
-
if (tmp[key].S) {
|
|
158
|
-
obj[key] = tmp[key].S.toString();
|
|
159
|
-
} else if (tmp[key].N) {
|
|
160
|
-
obj[key] = parseFloat(tmp[key].N);
|
|
161
|
-
} else {
|
|
162
|
-
obj[key] = tmp[key].B;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
data.push(obj);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
return data;
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
exports.parseDynamo = parseDynamo;
|
|
174
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2R5bmFtb2RiLnRzIl0sIm5hbWVzIjpbImR5bmFtb0dldCIsInBhcmFtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiYXdzIiwiY29uZmlnIiwidXBkYXRlIiwiQ29uZmlnIiwiZ2V0IiwiZHluYW1vZGIiLCJEeW5hbW9EQiIsIkNvbnNpc3RlbnRSZWFkIiwiZ2V0SXRlbSIsImVycm9yIiwicmVzdWx0cyIsImR5bmFtb0dldExpc3QiLCJpbmRleCIsImNvbnNpc3RlbnRSZWFkIiwidXBkYXRlZFBhcmFtcyIsIkV4Y2x1c2l2ZVN0YXJ0S2V5IiwicXVlcnkiLCJvdXRwdXQiLCJsaXN0IiwicGFyc2VEeW5hbW8iLCJsYXN0S2V5IiwiTGFzdEV2YWx1YXRlZEtleSIsInVuZGVmaW5lZCIsImR5bmFtb1B1dCIsInB1dEl0ZW0iLCJkeW5hbW9VcGRhdGUiLCJ1cGRhdGVJdGVtIiwiZHluYW1vUHV0TGlzdCIsImJhdGNoV3JpdGVJdGVtIiwiZHluYW1vRGVsIiwiZGVsZXRlSXRlbSIsIml0ZW1zIiwiSXRlbXMiLCJkYXRhIiwiaWR4IiwibGVuIiwibGVuZ3RoIiwidG1wIiwib2JqIiwia2V5IiwiaGFzT3duUHJvcGVydHkiLCJTIiwidG9TdHJpbmciLCJOIiwicGFyc2VGbG9hdCIsIkIiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUE7O0FBZ0JBOzs7Ozs7Ozs7O0FBRUE7QUFFTyxJQUFNQSxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFDQyxNQUFELEVBQWtEO0FBQ3pFLFNBQU8sSUFBSUMsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUN0Q0MsdUJBQUlDLE1BQUosQ0FBV0MsTUFBWCxDQUFrQkMsZUFBT0MsR0FBUCxDQUFXLEtBQVgsQ0FBbEI7O0FBQ0EsUUFBTUMsUUFBa0IsR0FBRyxJQUFJQyxnQkFBSixFQUEzQjtBQUNBVixJQUFBQSxNQUFNLENBQUNXLGNBQVAsR0FBd0IsS0FBeEI7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U0FBT0wsSUFBUDtBQUNELENBekJNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBhd3MsIHtEeW5hbW9EQn0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQge1xuICBCYXRjaFdyaXRlSXRlbUlucHV0LFxuICBCYXRjaFdyaXRlSXRlbU91dHB1dCxcbiAgRGVsZXRlSXRlbUlucHV0LFxuICBEZWxldGVJdGVtT3V0cHV0LFxuICBHZXRJdGVtSW5wdXQsXG4gIEdldEl0ZW1PdXRwdXQsXG4gIFB1dEl0ZW1JbnB1dCxcbiAgUHV0SXRlbU91dHB1dCxcbiAgUXVlcnlJbnB1dCxcbiAgUXVlcnlPdXRwdXQsXG4gIFVwZGF0ZUl0ZW1JbnB1dCxcbiAgVXBkYXRlSXRlbU91dHB1dFxufSBmcm9tICdhd3Mtc2RrL2NsaWVudHMvZHluYW1vZGInO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnJztcblxuLy8gY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2R5bmFtb2RiJztcblxuZXhwb3J0IGNvbnN0IGR5bmFtb0dldCA9IChwYXJhbXM6IEdldEl0ZW1JbnB1dCk6IFByb21pc2U8R2V0SXRlbU91dHB1dD4gPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGF3cy5jb25maWcudXBkYXRlKENvbmZpZy5nZXQoJ2F3cycpKTtcbiAgICBjb25zdCBkeW5hbW9kYjogRHluYW1vREIgPSBuZXcgRHluYW1vREIoKTtcbiAgICBwYXJhbXMuQ29uc2lzdGVudFJlYWQgPSBmYWxzZTtcblxuICAgIGR5bmFtb2RiLmdldEl0ZW0ocGFyYW1zLCAoZXJyb3I6IEVycm9yLCByZXN1bHRzOiBHZXRJdGVtT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb0dldExpc3QgPSAocGFyYW1zOiBRdWVyeUlucHV0LCBpbmRleCk6IFByb21pc2U8R2V0SXRlbU91dHB1dFtdPiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICAgIGNvbnN0IGR5bmFtb2RiOiBEeW5hbW9EQiA9IG5ldyBEeW5hbW9EQigpO1xuICAgIGNvbnN0IHtDb25zaXN0ZW50UmVhZDogY29uc2lzdGVudFJlYWR9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHVwZGF0ZWRQYXJhbXMgPSB7Li4ucGFyYW1zfTtcblxuICAgIGlmKGluZGV4KSB7XG4gICAgICB1cGRhdGVkUGFyYW1zLkV4Y2x1c2l2ZVN0YXJ0S2V5ID0gaW5kZXg7XG4gICAgfVxuXG4gICAgaWYoIWNvbnNpc3RlbnRSZWFkKSB7XG4gICAgICB1cGRhdGVkUGFyYW1zLkNvbnNpc3RlbnRSZWFkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZHluYW1vZGIucXVlcnkodXBkYXRlZFBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBRdWVyeU91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICAvLyBTYXZlIGxpc3Qgb2YgaXRlbXNcbiAgICAgIGNvbnN0IGxpc3Q6IGFueVtdID0gcGFyc2VEeW5hbW8ob3V0cHV0KTtcbiAgICAgIGNvbnN0IHtMYXN0RXZhbHVhdGVkS2V5OiBsYXN0S2V5fSA9IG91dHB1dDtcblxuICAgICAgaWYobGFzdEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFNhdmUgbGFzdCBpbmRleCBiZWZvcmUgbG9vcGluZ1xuICAgICAgICByZXR1cm4gZHluYW1vR2V0TGlzdChwYXJhbXMsIGxhc3RLZXkpO1xuICAgICAgfVxuXG4gICAgICAvLyBRdWVyeSBjb21wbGV0ZSwgcmV0dXJuIGZpbmFsIGxpc3RcbiAgICAgIHJldHVybiByZXNvbHZlKGxpc3QpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9QdXQgPSAocGFyYW1zOiBQdXRJdGVtSW5wdXQpOiBQcm9taXNlPFB1dEl0ZW1PdXRwdXQ+ID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhd3MuY29uZmlnLnVwZGF0ZShDb25maWcuZ2V0KCdhd3MnKSk7XG4gICAgY29uc3QgZHluYW1vZGI6IER5bmFtb0RCID0gbmV3IER5bmFtb0RCKCk7XG5cbiAgICBkeW5hbW9kYi5wdXRJdGVtKHBhcmFtcywgKGVycm9yLCBvdXRwdXQ6IFB1dEl0ZW1PdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZHluYW1vVXBkYXRlID0gKHBhcmFtczogVXBkYXRlSXRlbUlucHV0KTogUHJvbWlzZTxVcGRhdGVJdGVtT3V0cHV0PiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICAgIGNvbnN0IGR5bmFtb2RiOiBEeW5hbW9EQiA9IG5ldyBEeW5hbW9EQigpO1xuXG4gICAgZHluYW1vZGIudXBkYXRlSXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIG91dHB1dDogVXBkYXRlSXRlbU91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9QdXRMaXN0ID0gKHBhcmFtczogQmF0Y2hXcml0ZUl0ZW1JbnB1dCk6IFByb21pc2U8QmF0Y2hXcml0ZUl0ZW1PdXRwdXQ+ID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhd3MuY29uZmlnLnVwZGF0ZShDb25maWcuZ2V0KCdhd3MnKSk7XG4gICAgY29uc3QgZHluYW1vZGI6IER5bmFtb0RCID0gbmV3IER5bmFtb0RCKCk7XG5cbiAgICBkeW5hbW9kYi5iYXRjaFdyaXRlSXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIG91dHB1dDogQmF0Y2hXcml0ZUl0ZW1PdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZHluYW1vRGVsID0gKHBhcmFtczogRGVsZXRlSXRlbUlucHV0KTogUHJvbWlzZTxEZWxldGVJdGVtT3V0cHV0PiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICAgIGNvbnN0IGR5bmFtb2RiOiBEeW5hbW9EQiA9IG5ldyBEeW5hbW9EQigpO1xuXG4gICAgZHluYW1vZGIuZGVsZXRlSXRlbShwYXJhbXMsIChlcnJvciwgb3V0cHV0OiBEZWxldGVJdGVtT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlRHluYW1vID0gKHJlc3VsdHM6IFF1ZXJ5T3V0cHV0KTogYW55W10gPT4ge1xuICBjb25zdCB7SXRlbXM6IGl0ZW1zfSA9IHJlc3VsdHM7XG4gIGNvbnN0IGRhdGE6IGFueVtdID0gW107XG5cbiAgZm9yKGxldCBpZHg6IG51bWJlciA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaWR4IDwgbGVuOyBpZHgrKykge1xuICAgIGNvbnN0IHRtcCA9IGl0ZW1zW2lkeF07XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgbGV0IGtleTtcblxuICAgIGZvcihrZXkgaW4gdG1wKSB7XG4gICAgICBpZih0bXAuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBpZih0bXBba2V5XS5TKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSB0bXBba2V5XS5TLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZih0bXBba2V5XS5OKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSBwYXJzZUZsb2F0KHRtcFtrZXldLk4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ialtrZXldID0gdG1wW2tleV0uQjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGEucHVzaChvYmopO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG4iXX0=
|
package/lib/data/email.js
DELETED
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.sesSend = exports.sendTemplate = exports.sendEmail = exports.appTemplate = void 0;
|
|
7
|
-
|
|
8
|
-
var _awsSdk = _interopRequireWildcard(require("aws-sdk"));
|
|
9
|
-
|
|
10
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
11
|
-
|
|
12
|
-
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
13
|
-
|
|
14
|
-
var _config = require("../config");
|
|
15
|
-
|
|
16
|
-
var _s = require("./s3");
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
19
|
-
|
|
20
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } }
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
24
|
-
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
25
|
-
*/
|
|
26
|
-
// const eventCategory: string = 'email';
|
|
27
|
-
var appTemplate = function appTemplate(app) {
|
|
28
|
-
var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
29
|
-
var vars = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
30
|
-
var updatedMessage = '';
|
|
31
|
-
|
|
32
|
-
if (!(0, _isEmpty["default"])(app)) {
|
|
33
|
-
updatedMessage = message.replace(/\[appName\]/g, app.name).replace(/\[appUrl\]/g, app.url).replace(/\[appEmail\]/g, app.email);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
Object.keys(vars).forEach(function (key) {
|
|
37
|
-
if (vars[key]) {
|
|
38
|
-
updatedMessage = message.replace(new RegExp("\\[".concat(key, "\\]"), 'g'), vars[key]);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
return updatedMessage;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
exports.appTemplate = appTemplate;
|
|
45
|
-
|
|
46
|
-
var sendEmail = function sendEmail(params) {
|
|
47
|
-
var _params$app = params.app,
|
|
48
|
-
app = _params$app === void 0 ? {} : _params$app,
|
|
49
|
-
html = params.html,
|
|
50
|
-
subject = params.subject,
|
|
51
|
-
_params$subTitle = params.subTitle,
|
|
52
|
-
subTitle = _params$subTitle === void 0 ? '' : _params$subTitle,
|
|
53
|
-
text = params.text,
|
|
54
|
-
_params$title = params.title,
|
|
55
|
-
title = _params$title === void 0 ? '' : _params$title,
|
|
56
|
-
_params$user = params.user,
|
|
57
|
-
user = _params$user === void 0 ? {} : _params$user;
|
|
58
|
-
var to = [user.email];
|
|
59
|
-
var promise;
|
|
60
|
-
var formatSubject = appTemplate(app, subject);
|
|
61
|
-
var formatSubTitle = appTemplate(app, subTitle);
|
|
62
|
-
var formatTitle = appTemplate(app, title);
|
|
63
|
-
var formatText = appTemplate(app, text);
|
|
64
|
-
var formatHtml = appTemplate(app, html);
|
|
65
|
-
var hasCustomEmail = app._key,
|
|
66
|
-
urlFacebook = app.urlFacebook,
|
|
67
|
-
urlTwitter = app.urlTwitter;
|
|
68
|
-
|
|
69
|
-
var parseTemplate = function parseTemplate(body) {
|
|
70
|
-
var templateBody = appTemplate(app, body || ''); // Links
|
|
71
|
-
|
|
72
|
-
var links = '';
|
|
73
|
-
var spacer = '<td width="5"><img width="1" height="1" border="0" title="" alt="" ' + 'src="https://box.reaktor.io/images/email/spacer.gif"/></td>';
|
|
74
|
-
|
|
75
|
-
if (urlFacebook) {
|
|
76
|
-
links = "<td width=\"30\"><a href=\"".concat(urlFacebook, "\"><img width=\"30\" height=\"30\" border=\"0\" ") + 'title="Facebook" alt="Facebook" src="https://box.reaktor.io/images/email/icon-facebook.png"/></a></td>';
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (urlTwitter) {
|
|
80
|
-
if (urlFacebook) {
|
|
81
|
-
links += spacer;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
links += "<td width=\"30\"><a href=\"".concat(urlTwitter, "\"><img width=\"30\" height=\"30\" border=\"0\" ") + 'title="Twitter" alt="Twitter" src="https://box.reaktor.io/images/email/icon-twitter.png"/></a></td>';
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (!links.length) {
|
|
88
|
-
links += spacer;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return templateBody.replace(/\[title\]/g, formatTitle).replace(/\[subTitle\]/g, formatSubTitle).replace(/\[subject\]/g, formatSubject).replace(/\[message\]/g, formatHtml).replace(/\[links\]/g, links);
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
if (hasCustomEmail) {
|
|
95
|
-
var s3Params = {
|
|
96
|
-
Bucket: null,
|
|
97
|
-
Key: "apps/templates/email.html"
|
|
98
|
-
};
|
|
99
|
-
promise = (0, _s.s3Get)(s3Params).then(function (results) {
|
|
100
|
-
return parseTemplate(results.Body.toString());
|
|
101
|
-
});
|
|
102
|
-
} else {
|
|
103
|
-
promise = new Promise(function (resolve, reject) {
|
|
104
|
-
_fs["default"].readFile('./templates/email/layout.html', 'utf8', function (err, data) {
|
|
105
|
-
if (err) {
|
|
106
|
-
return reject(err);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return resolve(parseTemplate(data));
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
return promise.then(function (parsedHtml) {
|
|
115
|
-
var emailParams = {
|
|
116
|
-
Destination: {
|
|
117
|
-
ToAddresses: to
|
|
118
|
-
},
|
|
119
|
-
Message: {
|
|
120
|
-
Body: {
|
|
121
|
-
Html: {
|
|
122
|
-
Data: parsedHtml
|
|
123
|
-
},
|
|
124
|
-
Text: {
|
|
125
|
-
Data: formatText
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
Subject: {
|
|
129
|
-
Data: formatSubject
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
Source: "\"".concat(app.supportName, "\" <noreply@").concat(_config.Config.get('app.url'), ">")
|
|
133
|
-
};
|
|
134
|
-
return sesSend(emailParams);
|
|
135
|
-
});
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
exports.sendEmail = sendEmail;
|
|
139
|
-
|
|
140
|
-
var sendTemplate = function sendTemplate(templateName, emailParams) {
|
|
141
|
-
var app = emailParams.app,
|
|
142
|
-
user = emailParams.user,
|
|
143
|
-
subject = emailParams.subject,
|
|
144
|
-
subTitle = emailParams.subTitle,
|
|
145
|
-
title = emailParams.title,
|
|
146
|
-
vars = emailParams.vars;
|
|
147
|
-
|
|
148
|
-
try {
|
|
149
|
-
var html = _fs["default"].readFileSync("./templates/email/".concat(templateName, ".html"), 'utf8');
|
|
150
|
-
|
|
151
|
-
var templateHtml = appTemplate(app, html, vars);
|
|
152
|
-
|
|
153
|
-
var text = _fs["default"].readFileSync("./templates/sms/".concat(templateName, ".txt"), 'utf8');
|
|
154
|
-
|
|
155
|
-
var templateText = appTemplate(app, text, vars);
|
|
156
|
-
var params = {
|
|
157
|
-
app: app,
|
|
158
|
-
html: templateHtml,
|
|
159
|
-
subTitle: subTitle,
|
|
160
|
-
subject: subject,
|
|
161
|
-
text: templateText,
|
|
162
|
-
title: title,
|
|
163
|
-
user: user
|
|
164
|
-
};
|
|
165
|
-
return sendEmail(params).then(function () {
|
|
166
|
-
return true;
|
|
167
|
-
})["catch"](function () {
|
|
168
|
-
return false;
|
|
169
|
-
});
|
|
170
|
-
} catch (error) {
|
|
171
|
-
return Promise.reject(error);
|
|
172
|
-
}
|
|
173
|
-
}; // AWS::SES
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
exports.sendTemplate = sendTemplate;
|
|
177
|
-
|
|
178
|
-
var sesSend = function sesSend(params) {
|
|
179
|
-
return new Promise(function (resolve, reject) {
|
|
180
|
-
_awsSdk["default"].config.update(_config.Config.get('aws'));
|
|
181
|
-
|
|
182
|
-
var ses = new _awsSdk.SES();
|
|
183
|
-
ses.sendEmail(params, function (error, response) {
|
|
184
|
-
if (error) {
|
|
185
|
-
return reject(error);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
return resolve(response);
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
exports.sesSend = sesSend;
|
|
194
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2VtYWlsLnRzIl0sIm5hbWVzIjpbImFwcFRlbXBsYXRlIiwiYXBwIiwibWVzc2FnZSIsInZhcnMiLCJ1cGRhdGVkTWVzc2FnZSIsInJlcGxhY2UiLCJuYW1lIiwidXJsIiwiZW1haWwiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIlJlZ0V4cCIsInNlbmRFbWFpbCIsInBhcmFtcyIsImh0bWwiLCJzdWJqZWN0Iiwic3ViVGl0bGUiLCJ0ZXh0IiwidGl0bGUiLCJ1c2VyIiwidG8iLCJwcm9taXNlIiwiZm9ybWF0U3ViamVjdCIsImZvcm1hdFN1YlRpdGxlIiwiZm9ybWF0VGl0bGUiLCJmb3JtYXRUZXh0IiwiZm9ybWF0SHRtbCIsImhhc0N1c3RvbUVtYWlsIiwiX2tleSIsInVybEZhY2Vib29rIiwidXJsVHdpdHRlciIsInBhcnNlVGVtcGxhdGUiLCJib2R5IiwidGVtcGxhdGVCb2R5IiwibGlua3MiLCJzcGFjZXIiLCJsZW5ndGgiLCJzM1BhcmFtcyIsIkJ1Y2tldCIsIktleSIsInRoZW4iLCJyZXN1bHRzIiwiQm9keSIsInRvU3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmcyIsInJlYWRGaWxlIiwiZXJyIiwiZGF0YSIsInBhcnNlZEh0bWwiLCJlbWFpbFBhcmFtcyIsIkRlc3RpbmF0aW9uIiwiVG9BZGRyZXNzZXMiLCJNZXNzYWdlIiwiSHRtbCIsIkRhdGEiLCJUZXh0IiwiU3ViamVjdCIsIlNvdXJjZSIsInN1cHBvcnROYW1lIiwiQ29uZmlnIiwiZ2V0Iiwic2VzU2VuZCIsInNlbmRUZW1wbGF0ZSIsInRlbXBsYXRlTmFtZSIsInJlYWRGaWxlU3luYyIsInRlbXBsYXRlSHRtbCIsInRlbXBsYXRlVGV4dCIsImVycm9yIiwiYXdzIiwiY29uZmlnIiwidXBkYXRlIiwic2VzIiwiU0VTIiwicmVzcG9uc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQTs7QUFHQTs7QUFDQTs7QUFFQTs7QUFH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TUFBVixFQUFxQjtBQUN0Q3lCLHVCQUFJQyxNQUFKLENBQVdDLE1BQVgsQ0FBa0JYLGVBQU9DLEdBQVAsQ0FBVyxLQUFYLENBQWxCOztBQUNBLFFBQU1XLEdBQVEsR0FBRyxJQUFJQyxXQUFKLEVBQWpCO0FBRUFELElBQUFBLEdBQUcsQ0FBQzlELFNBQUosQ0FBY0MsTUFBZCxFQUFzQixVQUFDeUQsS0FBRCxFQUFlTSxRQUFmLEVBQStDO0FBQ25FLFVBQUdOLEtBQUgsRUFBVTtBQUNSLGVBQU94QixNQUFNLENBQUN3QixLQUFELENBQWI7QUFDRDs7QUFFRCxhQUFPekIsT0FBTyxDQUFDK0IsUUFBRCxDQUFkO0FBQ0QsS0FORDtBQU9ELEdBWE0sQ0FBUDtBQVlELENBYk0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGF3cywge1NFU30gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQge0dldE9iamVjdFJlcXVlc3R9IGZyb20gJ2F3cy1zZGsvY2xpZW50cy9zMyc7XG5pbXBvcnQge1NlbmRFbWFpbFJlcXVlc3QsIFNlbmRFbWFpbFJlc3BvbnNlfSBmcm9tICdhd3Mtc2RrL2NsaWVudHMvc2VzJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtBcHBUeXBlfSBmcm9tICcuLi90eXBlcy9hcHBzJztcbmltcG9ydCB7RW1haWxUeXBlfSBmcm9tICcuLi90eXBlcy9lbWFpbCc7XG5pbXBvcnQge3MzR2V0fSBmcm9tICcuL3MzJztcblxuLy8gY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2VtYWlsJztcblxuZXhwb3J0IGNvbnN0IGFwcFRlbXBsYXRlID0gKGFwcDogQXBwVHlwZSwgbWVzc2FnZTogc3RyaW5nID0gJycsIHZhcnMgPSB7fSk6IHN0cmluZyA9PiB7XG4gIGxldCB1cGRhdGVkTWVzc2FnZTogc3RyaW5nID0gJyc7XG5cbiAgaWYoIWlzRW1wdHkoYXBwKSkge1xuICAgIHVwZGF0ZWRNZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9cXFthcHBOYW1lXFxdL2csIGFwcC5uYW1lKVxuICAgICAgLnJlcGxhY2UoL1xcW2FwcFVybFxcXS9nLCBhcHAudXJsKVxuICAgICAgLnJlcGxhY2UoL1xcW2FwcEVtYWlsXFxdL2csIGFwcC5lbWFpbCk7XG4gIH1cblxuICBPYmplY3Qua2V5cyh2YXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgIGlmKHZhcnNba2V5XSkge1xuICAgICAgdXBkYXRlZE1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXFske2tleX1cXFxcXWAsICdnJyksIHZhcnNba2V5XSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdXBkYXRlZE1lc3NhZ2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZEVtYWlsID0gKHBhcmFtczogRW1haWxUeXBlKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBhcHAgPSB7fSxcbiAgICBodG1sLFxuICAgIHN1YmplY3QsXG4gICAgc3ViVGl0bGUgPSAnJyxcbiAgICB0ZXh0LFxuICAgIHRpdGxlID0gJycsXG4gICAgdXNlciA9IHt9XG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgdG8gPSBbdXNlci5lbWFpbF07XG4gIGxldCBwcm9taXNlO1xuXG4gIGNvbnN0IGZvcm1hdFN1YmplY3Q6IHN0cmluZyA9IGFwcFRlbXBsYXRlKGFwcCwgc3ViamVjdCk7XG4gIGNvbnN0IGZvcm1hdFN1YlRpdGxlOiBzdHJpbmcgPSBhcHBUZW1wbGF0ZShhcHAsIHN1YlRpdGxlKTtcbiAgY29uc3QgZm9ybWF0VGl0bGU6IHN0cmluZyA9IGFwcFRlbXBsYXRlKGFwcCwgdGl0bGUpO1xuICBjb25zdCBmb3JtYXRUZXh0OiBzdHJpbmcgPSBhcHBUZW1wbGF0ZShhcHAsIHRleHQpO1xuICBjb25zdCBmb3JtYXRIdG1sOiBzdHJpbmcgPSBhcHBUZW1wbGF0ZShhcHAsIGh0bWwpO1xuICBjb25zdCB7X2tleTogaGFzQ3VzdG9tRW1haWwsIHVybEZhY2Vib29rLCB1cmxUd2l0dGVyfSA9IGFwcDtcblxuICBjb25zdCBwYXJzZVRlbXBsYXRlID0gKGJvZHk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlQm9keTogc3RyaW5nID0gYXBwVGVtcGxhdGUoYXBwLCBib2R5IHx8ICcnKTtcblxuICAgIC8vIExpbmtzXG4gICAgbGV0IGxpbmtzOiBzdHJpbmcgPSAnJztcbiAgICBjb25zdCBzcGFjZXIgPSAnPHRkIHdpZHRoPVwiNVwiPjxpbWcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMVwiIGJvcmRlcj1cIjBcIiB0aXRsZT1cIlwiIGFsdD1cIlwiICcgK1xuICAgICAgJ3NyYz1cImh0dHBzOi8vYm94LnJlYWt0b3IuaW8vaW1hZ2VzL2VtYWlsL3NwYWNlci5naWZcIi8+PC90ZD4nO1xuXG4gICAgaWYodXJsRmFjZWJvb2spIHtcbiAgICAgIGxpbmtzID0gYDx0ZCB3aWR0aD1cIjMwXCI+PGEgaHJlZj1cIiR7dXJsRmFjZWJvb2t9XCI+PGltZyB3aWR0aD1cIjMwXCIgaGVpZ2h0PVwiMzBcIiBib3JkZXI9XCIwXCIgYCArXG4gICAgICAgICd0aXRsZT1cIkZhY2Vib29rXCIgYWx0PVwiRmFjZWJvb2tcIiBzcmM9XCJodHRwczovL2JveC5yZWFrdG9yLmlvL2ltYWdlcy9lbWFpbC9pY29uLWZhY2Vib29rLnBuZ1wiLz48L2E+PC90ZD4nO1xuICAgIH1cblxuICAgIGlmKHVybFR3aXR0ZXIpIHtcbiAgICAgIGlmKHVybEZhY2Vib29rKSB7XG4gICAgICAgIGxpbmtzICs9IHNwYWNlcjtcbiAgICAgIH1cblxuICAgICAgbGlua3MgKz0gYDx0ZCB3aWR0aD1cIjMwXCI+PGEgaHJlZj1cIiR7dXJsVHdpdHRlcn1cIj48aW1nIHdpZHRoPVwiMzBcIiBoZWlnaHQ9XCIzMFwiIGJvcmRlcj1cIjBcIiBgICtcbiAgICAgICAgJ3RpdGxlPVwiVHdpdHRlclwiIGFsdD1cIlR3aXR0ZXJcIiBzcmM9XCJodHRwczovL2JveC5yZWFrdG9yLmlvL2ltYWdlcy9lbWFpbC9pY29uLXR3aXR0ZXIucG5nXCIvPjwvYT48L3RkPic7XG4gICAgfVxuXG4gICAgaWYoIWxpbmtzLmxlbmd0aCkge1xuICAgICAgbGlua3MgKz0gc3BhY2VyO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZUJvZHkucmVwbGFjZSgvXFxbdGl0bGVcXF0vZywgZm9ybWF0VGl0bGUpXG4gICAgICAucmVwbGFjZSgvXFxbc3ViVGl0bGVcXF0vZywgZm9ybWF0U3ViVGl0bGUpXG4gICAgICAucmVwbGFjZSgvXFxbc3ViamVjdFxcXS9nLCBmb3JtYXRTdWJqZWN0KVxuICAgICAgLnJlcGxhY2UoL1xcW21lc3NhZ2VcXF0vZywgZm9ybWF0SHRtbClcbiAgICAgIC5yZXBsYWNlKC9cXFtsaW5rc1xcXS9nLCBsaW5rcyk7XG4gIH07XG5cbiAgaWYoaGFzQ3VzdG9tRW1haWwpIHtcbiAgICBjb25zdCBzM1BhcmFtczogR2V0T2JqZWN0UmVxdWVzdCA9IHtCdWNrZXQ6IG51bGwsIEtleTogYGFwcHMvdGVtcGxhdGVzL2VtYWlsLmh0bWxgfTtcbiAgICBwcm9taXNlID0gczNHZXQoczNQYXJhbXMpLnRoZW4oKHJlc3VsdHMpID0+IHBhcnNlVGVtcGxhdGUocmVzdWx0cy5Cb2R5LnRvU3RyaW5nKCkpKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZnMucmVhZEZpbGUoJy4vdGVtcGxhdGVzL2VtYWlsL2xheW91dC5odG1sJywgJ3V0ZjgnLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIGlmKGVycikge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNvbHZlKHBhcnNlVGVtcGxhdGUoZGF0YSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZS50aGVuKChwYXJzZWRIdG1sOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBlbWFpbFBhcmFtczogU2VuZEVtYWlsUmVxdWVzdCA9IHtcbiAgICAgIERlc3RpbmF0aW9uOiB7VG9BZGRyZXNzZXM6IHRvfSxcbiAgICAgIE1lc3NhZ2U6IHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIEh0bWw6IHtEYXRhOiBwYXJzZWRIdG1sfSxcbiAgICAgICAgICBUZXh0OiB7RGF0YTogZm9ybWF0VGV4dH1cbiAgICAgICAgfSxcbiAgICAgICAgU3ViamVjdDoge0RhdGE6IGZvcm1hdFN1YmplY3R9XG4gICAgICB9LFxuICAgICAgU291cmNlOiBgXCIke2FwcC5zdXBwb3J0TmFtZX1cIiA8bm9yZXBseUAke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0+YFxuICAgIH07XG5cbiAgICByZXR1cm4gc2VzU2VuZChlbWFpbFBhcmFtcyk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbmRUZW1wbGF0ZSA9ICh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgZW1haWxQYXJhbXM6IEVtYWlsVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7YXBwLCB1c2VyLCBzdWJqZWN0LCBzdWJUaXRsZSwgdGl0bGUsIHZhcnN9OiBFbWFpbFR5cGUgPSBlbWFpbFBhcmFtcztcblxuICB0cnkge1xuICAgIGNvbnN0IGh0bWw6IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhgLi90ZW1wbGF0ZXMvZW1haWwvJHt0ZW1wbGF0ZU5hbWV9Lmh0bWxgLCAndXRmOCcpO1xuICAgIGNvbnN0IHRlbXBsYXRlSHRtbDogc3RyaW5nID0gYXBwVGVtcGxhdGUoYXBwLCBodG1sLCB2YXJzKTtcbiAgICBjb25zdCB0ZXh0OiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYC4vdGVtcGxhdGVzL3Ntcy8ke3RlbXBsYXRlTmFtZX0udHh0YCwgJ3V0ZjgnKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVRleHQ6IHN0cmluZyA9IGFwcFRlbXBsYXRlKGFwcCwgdGV4dCwgdmFycyk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBhcHAsXG4gICAgICBodG1sOiB0ZW1wbGF0ZUh0bWwsXG4gICAgICBzdWJUaXRsZSxcbiAgICAgIHN1YmplY3QsXG4gICAgICB0ZXh0OiB0ZW1wbGF0ZVRleHQsXG4gICAgICB0aXRsZSxcbiAgICAgIHVzZXJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNlbmRFbWFpbChwYXJhbXMpXG4gICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH1cbn07XG5cbi8vIEFXUzo6U0VTXG5leHBvcnQgY29uc3Qgc2VzU2VuZCA9IChwYXJhbXM6IFNlbmRFbWFpbFJlcXVlc3QpOiBQcm9taXNlPFNlbmRFbWFpbFJlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICAgIGNvbnN0IHNlczogU0VTID0gbmV3IFNFUygpO1xuXG4gICAgc2VzLnNlbmRFbWFpbChwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3BvbnNlOiBTZW5kRW1haWxSZXNwb25zZSkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuIl19
|