@nlabs/reaktor 0.2.3 → 0.4.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/config.js +12 -4
- package/lib/data/conversations.d.ts +3 -1
- package/lib/data/conversations.js +150 -65
- package/lib/data/dynamodb.d.ts +8 -8
- package/lib/data/dynamodb.js +65 -33
- package/lib/data/email.d.ts +2 -2
- package/lib/data/email.js +52 -24
- package/lib/data/files.js +71 -11
- package/lib/data/groups.js +37 -3
- package/lib/data/images.d.ts +3 -2
- package/lib/data/images.js +425 -273
- package/lib/data/index.d.ts +1 -0
- package/lib/data/index.js +33 -1
- package/lib/data/ios.d.ts +5 -5
- package/lib/data/ios.js +47 -21
- package/lib/data/locations.js +28 -4
- package/lib/data/messages.js +89 -73
- package/lib/data/notifications.d.ts +2 -2
- package/lib/data/notifications.js +6 -6
- package/lib/data/payments.d.ts +3 -4
- package/lib/data/payments.js +228 -257
- package/lib/data/posts.d.ts +1 -1
- package/lib/data/posts.js +88 -12
- package/lib/data/reactions.d.ts +1 -1
- package/lib/data/reactions.js +56 -14
- package/lib/data/s3.d.ts +6 -6
- package/lib/data/s3.js +10 -2
- package/lib/data/search.js +46 -4
- package/lib/data/sms.js +5 -1
- package/lib/data/subscription.d.ts +1 -1
- package/lib/data/subscription.js +46 -20
- package/lib/data/tags.js +60 -8
- package/lib/data/users.d.ts +7 -4
- package/lib/data/users.js +83 -32
- package/lib/data/websockets.d.ts +6 -0
- package/lib/data/websockets.js +250 -0
- package/lib/index.js +4 -1
- package/lib/types/conversations.d.ts +2 -0
- package/lib/types/index.js +18 -1
- package/lib/types/payments.d.ts +1 -0
- package/lib/types/posts.d.ts +2 -0
- package/lib/types/reactions.d.ts +2 -0
- package/lib/types/users.d.ts +1 -0
- package/lib/utils/analytics.js +28 -6
- package/lib/utils/arangodb.d.ts +2 -1
- package/lib/utils/arangodb.js +31 -10
- package/lib/utils/auth.js +21 -3
- package/lib/utils/graphql.js +3 -1
- package/lib/utils/index.js +7 -1
- package/lib/utils/objects.js +9 -1
- package/lib/utils/redis.js +6 -2
- package/package.json +33 -31
package/lib/data/messages.js
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
require("core-js/modules/es.symbol");
|
|
4
|
+
|
|
5
|
+
require("core-js/modules/es.array.concat");
|
|
6
|
+
|
|
7
|
+
require("core-js/modules/es.array.filter");
|
|
8
|
+
|
|
9
|
+
require("core-js/modules/es.array.for-each");
|
|
10
|
+
|
|
11
|
+
require("core-js/modules/es.array.slice");
|
|
12
|
+
|
|
13
|
+
require("core-js/modules/es.date.now");
|
|
14
|
+
|
|
15
|
+
require("core-js/modules/es.date.to-string");
|
|
16
|
+
|
|
17
|
+
require("core-js/modules/es.object.define-properties");
|
|
18
|
+
|
|
19
|
+
require("core-js/modules/es.object.define-property");
|
|
20
|
+
|
|
21
|
+
require("core-js/modules/es.object.freeze");
|
|
22
|
+
|
|
23
|
+
require("core-js/modules/es.object.get-own-property-descriptor");
|
|
24
|
+
|
|
25
|
+
require("core-js/modules/es.object.get-own-property-descriptors");
|
|
26
|
+
|
|
27
|
+
require("core-js/modules/es.object.keys");
|
|
28
|
+
|
|
29
|
+
require("core-js/modules/web.dom-collections.for-each");
|
|
30
|
+
|
|
3
31
|
Object.defineProperty(exports, "__esModule", {
|
|
4
32
|
value: true
|
|
5
33
|
});
|
|
@@ -19,9 +47,19 @@ var _conversations = require("./conversations");
|
|
|
19
47
|
|
|
20
48
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
21
49
|
|
|
22
|
-
function
|
|
50
|
+
function _templateObject6() {
|
|
23
51
|
var data = _taggedTemplateLiteral(["FOR m IN messages\n FILTER m.added < DATE_TIMESTAMP(DATE_SUBTRACT(DATE_NOW(), 60, 'day')) && LENGTH(m.saved) > 0\n REMOVE m IN messages\n RETURN OLD"]);
|
|
24
52
|
|
|
53
|
+
_templateObject6 = function _templateObject6() {
|
|
54
|
+
return data;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
return data;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function _templateObject5() {
|
|
61
|
+
var data = _taggedTemplateLiteral(["FOR m IN messages\n FILTER m._key == ", " && m.to == ", " && m.from == ", "\n REMOVE m IN messages\n RETURN OLD"]);
|
|
62
|
+
|
|
25
63
|
_templateObject5 = function _templateObject5() {
|
|
26
64
|
return data;
|
|
27
65
|
};
|
|
@@ -30,7 +68,7 @@ function _templateObject5() {
|
|
|
30
68
|
}
|
|
31
69
|
|
|
32
70
|
function _templateObject4() {
|
|
33
|
-
var data = _taggedTemplateLiteral(["FOR m IN messages\n
|
|
71
|
+
var data = _taggedTemplateLiteral(["FOR m IN messages\n FILTER m._key == ", " && m.to == ", "\n UPDATE m WITH {saved: REMOVE_VALUE(m.saved, ", ")} IN messages\n RETURN NEW"]);
|
|
34
72
|
|
|
35
73
|
_templateObject4 = function _templateObject4() {
|
|
36
74
|
return data;
|
|
@@ -40,7 +78,7 @@ function _templateObject4() {
|
|
|
40
78
|
}
|
|
41
79
|
|
|
42
80
|
function _templateObject3() {
|
|
43
|
-
var data = _taggedTemplateLiteral(["FOR m IN messages\n
|
|
81
|
+
var data = _taggedTemplateLiteral(["FOR m IN messages\n FILTER m._key == ", " && m.to == ", "\n UPDATE m WITH {saved: APPEND(m.saved, ", ", true)} IN messages\n RETURN NEW"]);
|
|
44
82
|
|
|
45
83
|
_templateObject3 = function _templateObject3() {
|
|
46
84
|
return data;
|
|
@@ -50,7 +88,7 @@ function _templateObject3() {
|
|
|
50
88
|
}
|
|
51
89
|
|
|
52
90
|
function _templateObject2() {
|
|
53
|
-
var data = _taggedTemplateLiteral(["
|
|
91
|
+
var data = _taggedTemplateLiteral(["UPSERT {_key: ", ", convoId: ", ", userId: ", "}\n INSERT ", "\n UPDATE ", " IN messages\n RETURN NEW"]);
|
|
54
92
|
|
|
55
93
|
_templateObject2 = function _templateObject2() {
|
|
56
94
|
return data;
|
|
@@ -59,8 +97,14 @@ function _templateObject2() {
|
|
|
59
97
|
return data;
|
|
60
98
|
}
|
|
61
99
|
|
|
100
|
+
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; }
|
|
101
|
+
|
|
102
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
103
|
+
|
|
104
|
+
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; }
|
|
105
|
+
|
|
62
106
|
function _templateObject() {
|
|
63
|
-
var data = _taggedTemplateLiteral(["
|
|
107
|
+
var data = _taggedTemplateLiteral(["FOR e IN hasConversations\n FILTER e._from == ", " && e._to == ", "\n LIMIT 1\n RETURN e"]);
|
|
64
108
|
|
|
65
109
|
_templateObject = function _templateObject() {
|
|
66
110
|
return data;
|
|
@@ -71,20 +115,23 @@ function _templateObject() {
|
|
|
71
115
|
|
|
72
116
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
73
117
|
|
|
74
|
-
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; }
|
|
75
|
-
|
|
76
|
-
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; }
|
|
77
|
-
|
|
78
|
-
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; }
|
|
79
|
-
|
|
80
118
|
// const eventCategory: string = 'messages';
|
|
81
119
|
var getMessageList = function getMessageList(context, convoId, from, to) {
|
|
82
|
-
var database = context.database
|
|
120
|
+
var database = context.database,
|
|
121
|
+
sessionId = context.userId;
|
|
83
122
|
var formatConvoId = (0, _utils.parseId)(convoId);
|
|
84
|
-
|
|
85
|
-
|
|
123
|
+
var sessionDocId = "users/".concat(sessionId);
|
|
124
|
+
var convoDocId = "conversations/".concat(formatConvoId);
|
|
125
|
+
var convoQry = (0, _arangojs.aql)(_templateObject(), sessionDocId, convoDocId);
|
|
126
|
+
return (0, _utils2.useDb)(database).query(convoQry).then(function (cursor) {
|
|
127
|
+
return cursor.all();
|
|
128
|
+
}).then(function (conversations) {
|
|
129
|
+
if (!conversations.length) {
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
|
|
86
133
|
var limit = (0, _utils2.getLimit)(from, to);
|
|
87
|
-
var aqlQry = "FOR m IN messages\n FILTER m.
|
|
134
|
+
var aqlQry = "FOR m IN messages\n FILTER m.convoId == \"".concat(formatConvoId, "\"\n SORT m.added DESC\n ").concat(limit.aql, "\n SORT m.added ASC\n LET user = FIRST(\n FOR u IN users\n FILTER u._key == m.userId\n LIMIT 1\n RETURN u\n )\n RETURN MERGE(m, {user: user})");
|
|
88
135
|
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
89
136
|
return cursor.all();
|
|
90
137
|
})["catch"](function (error) {
|
|
@@ -101,66 +148,35 @@ var updateMessage = function updateMessage(context, message) {
|
|
|
101
148
|
var convoId = message.convoId,
|
|
102
149
|
files = message.files,
|
|
103
150
|
images = message.images,
|
|
104
|
-
msgId = message.msgId
|
|
151
|
+
_message$msgId = message.msgId,
|
|
152
|
+
msgId = _message$msgId === void 0 ? (0, _utils.createHash)("message-".concat(sessionId)) : _message$msgId;
|
|
105
153
|
var formatConvoId = (0, _utils.parseId)(convoId);
|
|
106
154
|
|
|
107
155
|
if (formatConvoId === '') {
|
|
108
156
|
throw new Error('required_convoId');
|
|
109
157
|
}
|
|
110
158
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
modified: now,
|
|
120
|
-
userId: sessionId
|
|
121
|
-
};
|
|
122
|
-
var formatMsgId = (0, _utils.parseId)(msgId);
|
|
123
|
-
var updatedId = formatMsgId === '' ? (0, _utils.createHash)("message-".concat(sessionId)) : formatMsgId;
|
|
124
|
-
|
|
125
|
-
var insert = _objectSpread({}, (0, _cloneDeep["default"])(update), {
|
|
126
|
-
_key: updatedId,
|
|
127
|
-
added: now
|
|
128
|
-
});
|
|
159
|
+
var now = Date.now();
|
|
160
|
+
var update = {
|
|
161
|
+
content: (0, _utils.parseVarChar)(message.content, 640),
|
|
162
|
+
files: files || [],
|
|
163
|
+
images: images || [],
|
|
164
|
+
modified: now
|
|
165
|
+
};
|
|
166
|
+
var formatMsgId = (0, _utils.parseId)(msgId);
|
|
129
167
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
// saved: msgSaved,
|
|
143
|
-
// toId: msgToId
|
|
144
|
-
// } = updatedMessage;
|
|
145
|
-
// Broadcast to message box
|
|
146
|
-
// if(io) {
|
|
147
|
-
// const msg: MessageType = {
|
|
148
|
-
// added: msgAdded,
|
|
149
|
-
// content: msgContent,
|
|
150
|
-
// files: msgFiles,
|
|
151
|
-
// fromId: msgFromId,
|
|
152
|
-
// id: msgId,
|
|
153
|
-
// read: msgRead,
|
|
154
|
-
// saved: msgSaved,
|
|
155
|
-
// toId: msgToId
|
|
156
|
-
// };
|
|
157
|
-
// io.to(msgToId).emit('message_update', msg);
|
|
158
|
-
// }
|
|
159
|
-
console.log('updatedMessage', updatedMessage);
|
|
160
|
-
return updatedMessage;
|
|
161
|
-
})["catch"](function (error) {
|
|
162
|
-
throw error;
|
|
163
|
-
});
|
|
168
|
+
var insert = _objectSpread(_objectSpread({}, (0, _cloneDeep["default"])(update)), {}, {
|
|
169
|
+
_key: formatMsgId,
|
|
170
|
+
added: now,
|
|
171
|
+
convoId: formatConvoId,
|
|
172
|
+
userId: sessionId
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject2(), formatMsgId, formatConvoId, sessionId, insert, update);
|
|
176
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
177
|
+
return cursor.next();
|
|
178
|
+
})["catch"](function (error) {
|
|
179
|
+
throw error;
|
|
164
180
|
});
|
|
165
181
|
};
|
|
166
182
|
|
|
@@ -172,7 +188,7 @@ var saveMessage = function saveMessage(context, msgId, convoId) {
|
|
|
172
188
|
var formatId = (0, _utils.parseId)(msgId);
|
|
173
189
|
return (0, _conversations.getConversation)(context, convoId).then(function (conversation) {
|
|
174
190
|
var conversationKey = conversation._key;
|
|
175
|
-
var aqlQry = (0, _arangojs.aql)(
|
|
191
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject3(), formatId, conversationKey, sessionId);
|
|
176
192
|
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
177
193
|
return cursor.next();
|
|
178
194
|
}).then(function () {
|
|
@@ -198,7 +214,7 @@ var unsaveMessage = function unsaveMessage(context, msgId, convoId) {
|
|
|
198
214
|
var formatId = (0, _utils.parseId)(msgId);
|
|
199
215
|
return (0, _conversations.getConversation)(context, convoId).then(function (conversation) {
|
|
200
216
|
var conversationKey = conversation._key;
|
|
201
|
-
var aqlQry = (0, _arangojs.aql)(
|
|
217
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject4(), formatId, conversationKey, sessionId);
|
|
202
218
|
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
203
219
|
return cursor.next();
|
|
204
220
|
}).then(function () {
|
|
@@ -224,7 +240,7 @@ var deleteMessage = function deleteMessage(context, msgId, convoId) {
|
|
|
224
240
|
var formatId = (0, _utils.parseId)(msgId);
|
|
225
241
|
return (0, _conversations.getConversation)(context, convoId).then(function (conversation) {
|
|
226
242
|
var conversationKey = conversation._key;
|
|
227
|
-
var aqlQry = (0, _arangojs.aql)(
|
|
243
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject5(), formatId, conversationKey, sessionId);
|
|
228
244
|
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
229
245
|
return cursor.next();
|
|
230
246
|
}).then(function () {
|
|
@@ -269,7 +285,7 @@ exports.getMessage = getMessage;
|
|
|
269
285
|
|
|
270
286
|
var cleanMessages = function cleanMessages(database) {
|
|
271
287
|
// Remove all messages that are over 60 days and not saved
|
|
272
|
-
var aqlQry = (0, _arangojs.aql)(
|
|
288
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject6());
|
|
273
289
|
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
274
290
|
return cursor.all();
|
|
275
291
|
}).then(function (list) {
|
|
@@ -280,4 +296,4 @@ var cleanMessages = function cleanMessages(database) {
|
|
|
280
296
|
};
|
|
281
297
|
|
|
282
298
|
exports.cleanMessages = cleanMessages;
|
|
283
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL21lc3NhZ2VzLnRzIl0sIm5hbWVzIjpbImdldE1lc3NhZ2VMaXN0IiwiY29udGV4dCIsImNvbnZvSWQiLCJmcm9tIiwidG8iLCJkYXRhYmFzZSIsImZvcm1hdENvbnZvSWQiLCJ0aGVuIiwiY29udmVyc2F0aW9uIiwiY29udmVyc2F0aW9uS2V5IiwiX2tleSIsImxpbWl0IiwiYXFsUXJ5IiwiYXFsIiwicXVlcnkiLCJjdXJzb3IiLCJhbGwiLCJlcnJvciIsInVwZGF0ZU1lc3NhZ2UiLCJtZXNzYWdlIiwic2Vzc2lvbklkIiwidXNlcklkIiwiZmlsZXMiLCJpbWFnZXMiLCJtc2dJZCIsIkVycm9yIiwibm93IiwiRGF0ZSIsInVwZGF0ZSIsImNvbnRlbnQiLCJtb2RpZmllZCIsImZvcm1hdE1zZ0lkIiwidXBkYXRlZElkIiwiaW5zZXJ0IiwiYWRkZWQiLCJuZXh0IiwidXBkYXRlZE1lc3NhZ2UiLCJjb25zb2xlIiwibG9nIiwic2F2ZU1lc3NhZ2UiLCJmb3JtYXRJZCIsInVuc2F2ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlIiwiZ2V0TWVzc2FnZSIsImRhdGEiLCJyZWFkIiwic2F2ZWQiLCJjbGVhbk1lc3NhZ2VzIiwibGlzdCIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBOztBQUNBOztBQUdBOztBQUNBOztBQU1BOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBRU8sSUFBTUEsY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixDQUM1QkMsT0FENEIsRUFFNUJDLE9BRjRCLEVBRzVCQyxJQUg0QixFQUk1QkMsRUFKNEIsRUFLRDtBQUFBLE1BQ3BCQyxRQURvQixHQUNSSixPQURRLENBQ3BCSSxRQURvQjtBQUUzQixNQUFNQyxhQUFxQixHQUFHLG9CQUFRSixPQUFSLENBQTlCO0FBRUEsU0FBTyxvQ0FBZ0JELE9BQWhCLEVBQXlCSyxhQUF6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SUFWd0QsQ0FLMUR0QixLQUwwRDtBQUFBLE1BTXBERSxLQU5vRCxHQVV4RG9CLElBVndELENBTTFEbEMsSUFOMEQ7QUFBQSxNQU8xRG1DLElBUDBELEdBVXhERCxJQVZ3RCxDQU8xREMsSUFQMEQ7QUFBQSxNQVExREMsS0FSMEQsR0FVeERGLElBVndELENBUTFERSxLQVIwRDtBQUFBLE1BUzFEekIsTUFUMEQsR0FVeER1QixJQVZ3RCxDQVMxRHZCLE1BVDBEO0FBWTVELFNBQU87QUFDTGEsSUFBQUEsS0FBSyxFQUFMQSxLQURLO0FBRUxMLElBQUFBLE9BQU8sRUFBUEEsT0FGSztBQUdMM0IsSUFBQUEsT0FBTyxFQUFQQSxPQUhLO0FBSUxvQixJQUFBQSxLQUFLLEVBQUxBLEtBSks7QUFLTEUsSUFBQUEsS0FBSyxFQUFMQSxLQUxLO0FBTUxxQixJQUFBQSxJQUFJLEVBQUpBLElBTks7QUFPTEMsSUFBQUEsS0FBSyxFQUFMQSxLQVBLO0FBUUx6QixJQUFBQSxNQUFNLEVBQU5BO0FBUkssR0FBUDtBQVVELENBdEJNOzs7O0FBd0JBLElBQU0wQixhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLENBQUMxQyxRQUFELEVBQXVDO0FBQ2xFO0FBQ0EsTUFBTU8sTUFBTSxPQUFHQyxhQUFILHFCQUFaO0FBS0EsU0FBTyxtQkFBTVIsUUFBTixFQUFnQlMsS0FBaEIsQ0FBc0JGLE1BQXRCLEVBQ0pMLElBREksQ0FDQyxVQUFDUSxNQUFEO0FBQUEsV0FBeUJBLE1BQU0sQ0FBQ0MsR0FBUCxFQUF6QjtBQUFBLEdBREQsRUFFSlQsSUFGSSxDQUVDLFVBQUN5QyxJQUFEO0FBQUEsV0FBeUJBLElBQUksQ0FBQ0MsTUFBOUI7QUFBQSxHQUZELFdBR0UsVUFBQ2hDLEtBQUQsRUFBa0I7QUFDdkIsVUFBTUEsS0FBTjtBQUNELEdBTEksQ0FBUDtBQU1ELENBYk0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUlkLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvbGliL2Nqcy9hcWwtcXVlcnknO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvbGliL2Nqcy9jdXJzb3InO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcblxuaW1wb3J0IHtBcmFuZ29EQkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYic7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgnO1xuaW1wb3J0IHtDb252ZXJzYXRpb25UeXBlfSBmcm9tICcuLi90eXBlcy9jb252ZXJzYXRpb25zJztcbmltcG9ydCB7TWVzc2FnZUlucHV0VHlwZSwgTWVzc2FnZVR5cGV9IGZyb20gJy4uL3R5cGVzL21lc3NhZ2VzJztcbmltcG9ydCB7Z2V0TGltaXQsIHVzZURifSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge2dldENvbnZlcnNhdGlvbn0gZnJvbSAnLi9jb252ZXJzYXRpb25zJztcblxuLy8gY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ21lc3NhZ2VzJztcblxuZXhwb3J0IGNvbnN0IGdldE1lc3NhZ2VMaXN0ID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252b0lkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlcixcbiAgdG86IG51bWJlclxuKTogUHJvbWlzZTxNZXNzYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252b0lkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZvSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb24oY29udGV4dCwgZm9ybWF0Q29udm9JZClcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogY29udmVyc2F0aW9uS2V5fSA9IGNvbnZlcnNhdGlvbjtcbiAgICAgIGNvbnN0IGxpbWl0OiBBcmFuZ29EQkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICAgICAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgICAgICBGSUxURVIgbS50byA9PSBcIiR7Y29udmVyc2F0aW9uS2V5fVwiXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgU09SVCBtLmFkZGVkXG4gICAgICAgICAgUkVUVVJOIG1gO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlOiBNZXNzYWdlSW5wdXRUeXBlKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtjb252b0lkLCBmaWxlcywgaW1hZ2VzLCBtc2dJZH0gPSBtZXNzYWdlO1xuICBjb25zdCBmb3JtYXRDb252b0lkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZvSWQpO1xuXG4gIGlmKGZvcm1hdENvbnZvSWQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9jb252b0lkJyk7XG4gIH1cblxuICByZXR1cm4gZ2V0Q29udmVyc2F0aW9uKGNvbnRleHQsIGZvcm1hdENvbnZvSWQpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge19rZXk6IGNvbnZlcnNhdGlvbktleX0gPSBjb252ZXJzYXRpb247XG4gICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCB1cGRhdGU6IE1lc3NhZ2VUeXBlID0ge1xuICAgICAgICBjb250ZW50OiBwYXJzZVZhckNoYXIobWVzc2FnZS5jb250ZW50LCA2NDApLFxuICAgICAgICBjb252b0lkOiBmb3JtYXRDb252b0lkLFxuICAgICAgICBmaWxlczogZmlsZXMgfHwgW10sXG4gICAgICAgIGltYWdlczogaW1hZ2VzIHx8IFtdLFxuICAgICAgICBtb2RpZmllZDogbm93LFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdE1zZ0lkOiBzdHJpbmcgPSBwYXJzZUlkKG1zZ0lkKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRJZDogc3RyaW5nID0gZm9ybWF0TXNnSWQgPT09ICcnID8gY3JlYXRlSGFzaChgbWVzc2FnZS0ke3Nlc3Npb25JZH1gKSA6IGZvcm1hdE1zZ0lkO1xuICAgICAgY29uc3QgaW5zZXJ0OiBNZXNzYWdlVHlwZSA9IHtcbiAgICAgICAgLi4uY2xvbmVEZWVwKHVwZGF0ZSksXG4gICAgICAgIF9rZXk6IHVwZGF0ZWRJZCxcbiAgICAgICAgYWRkZWQ6IG5vd1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke3VwZGF0ZWRJZH0sIGNvbnZvSWQ6ICR7Y29udmVyc2F0aW9uS2V5fX1cbiAgICAgICAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgICAgICAgVVBEQVRFICR7dXBkYXRlfVxuICAgICAgICAgIElOIG1lc3NhZ2VzIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKCh1cGRhdGVkTWVzc2FnZTogTWVzc2FnZVR5cGUgPSB7fSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnN0IHtcbiAgICAgICAgICAvLyAgIF9rZXk6IG1zZ0lkLFxuICAgICAgICAgIC8vICAgYWRkZWQ6IG1zZ0FkZGVkLFxuICAgICAgICAgIC8vICAgY29udGVudDogbXNnQ29udGVudCxcbiAgICAgICAgICAvLyAgIGZpbGVzOiBtc2dGaWxlcyxcbiAgICAgICAgICAvLyAgIGZyb21JZDogbXNnRnJvbUlkLFxuICAgICAgICAgIC8vICAgcmVhZDogbXNnUmVhZCxcbiAgICAgICAgICAvLyAgIHNhdmVkOiBtc2dTYXZlZCxcbiAgICAgICAgICAvLyAgIHRvSWQ6IG1zZ1RvSWRcbiAgICAgICAgICAvLyB9ID0gdXBkYXRlZE1lc3NhZ2U7XG5cbiAgICAgICAgICAvLyBCcm9hZGNhc3QgdG8gbWVzc2FnZSBib3hcbiAgICAgICAgICAvLyBpZihpbykge1xuICAgICAgICAgIC8vICAgY29uc3QgbXNnOiBNZXNzYWdlVHlwZSA9IHtcbiAgICAgICAgICAvLyAgICAgYWRkZWQ6IG1zZ0FkZGVkLFxuICAgICAgICAgIC8vICAgICBjb250ZW50OiBtc2dDb250ZW50LFxuICAgICAgICAgIC8vICAgICBmaWxlczogbXNnRmlsZXMsXG4gICAgICAgICAgLy8gICAgIGZyb21JZDogbXNnRnJvbUlkLFxuICAgICAgICAgIC8vICAgICBpZDogbXNnSWQsXG4gICAgICAgICAgLy8gICAgIHJlYWQ6IG1zZ1JlYWQsXG4gICAgICAgICAgLy8gICAgIHNhdmVkOiBtc2dTYXZlZCxcbiAgICAgICAgICAvLyAgICAgdG9JZDogbXNnVG9JZFxuICAgICAgICAgIC8vICAgfTtcblxuICAgICAgICAgIC8vICAgaW8udG8obXNnVG9JZCkuZW1pdCgnbWVzc2FnZV91cGRhdGUnLCBtc2cpO1xuICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkTWVzc2FnZScsIHVwZGF0ZWRNZXNzYWdlKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZE1lc3NhZ2U7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNhdmVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1zZ0lkOiBzdHJpbmcsIGNvbnZvSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChtc2dJZCk7XG5cbiAgcmV0dXJuIGdldENvbnZlcnNhdGlvbihjb250ZXh0LCBjb252b0lkKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfa2V5OiBjb252ZXJzYXRpb25LZXl9ID0gY29udmVyc2F0aW9uO1xuICAgICAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICAgIEZJTFRFUiBtLl9rZXkgPT0gJHtmb3JtYXRJZH0gJiYgbS50byA9PSAke2NvbnZlcnNhdGlvbktleX1cbiAgICAgICAgVVBEQVRFIG0gV0lUSCB7c2F2ZWQ6IEFQUEVORChtLnNhdmVkLCAke3Nlc3Npb25JZH0sIHRydWUpfSBJTiBtZXNzYWdlc1xuICAgICAgICBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigobWVzc2FnZTogTWVzc2FnZVR5cGUgPSB7fSkgPT4ge1xuICAgICAgICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAvLyBCcm9hZGNhc3QgdG8gbWVzc2FnZSBib3hcbiAgICAgICAgICAgIC8vIGNvbnN0IG1zZzogTWVzc2FnZVR5cGUgPSBNZXNzYWdlcy5nZXRNZXNzYWdlT2JqZWN0KG1lc3NhZ2UpO1xuICAgICAgICAgICAgLy8gaW8udG8obWVzc2FnZS50b0lkKS5lbWl0KCdtZXNzYWdlX3NhdmUnLCBtc2cpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1bnNhdmVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1zZ0lkOiBzdHJpbmcsIGNvbnZvSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChtc2dJZCk7XG5cbiAgcmV0dXJuIGdldENvbnZlcnNhdGlvbihjb250ZXh0LCBjb252b0lkKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfa2V5OiBjb252ZXJzYXRpb25LZXl9ID0gY29udmVyc2F0aW9uO1xuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICAgIEZJTFRFUiBtLl9rZXkgPT0gJHtmb3JtYXRJZH0gJiYgbS50byA9PSAke2NvbnZlcnNhdGlvbktleX1cbiAgICAgICAgICBVUERBVEUgbSBXSVRIIHtzYXZlZDogUkVNT1ZFX1ZBTFVFKG0uc2F2ZWQsICR7c2Vzc2lvbklkfSl9IElOIG1lc3NhZ2VzXG4gICAgICAgICAgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG1lc3NhZ2U6IE1lc3NhZ2VUeXBlID0ge30pID0+IHtcbiAgICAgICAgICBpZighaXNFbXB0eShtZXNzYWdlKSkge1xuICAgICAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG1lc3NhZ2UgYm94XG4gICAgICAgICAgICAvLyBjb25zdCBtc2c6IE1lc3NhZ2VUeXBlID0gTWVzc2FnZXMuZ2V0TWVzc2FnZU9iamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIGlvLnRvKG1lc3NhZ2UuaWQpLmVtaXQoJ21lc3NhZ2VfdW5zYXZlJywgbXNnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtc2dJZDogc3RyaW5nLCBjb252b0lkOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQobXNnSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb24oY29udGV4dCwgY29udm9JZClcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogY29udmVyc2F0aW9uS2V5fSA9IGNvbnZlcnNhdGlvbjtcbiAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICBGSUxURVIgbS5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIG0udG8gPT0gJHtjb252ZXJzYXRpb25LZXl9ICYmIG0uZnJvbSA9PSAke3Nlc3Npb25JZH1cbiAgICAgICAgUkVNT1ZFIG0gSU4gbWVzc2FnZXNcbiAgICAgICAgUkVUVVJOIE9MRGA7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG1lc3NhZ2U6IE1lc3NhZ2VUeXBlID0ge30pID0+IHtcbiAgICAgICAgICBpZighaXNFbXB0eShtZXNzYWdlKSkge1xuICAgICAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG1lc3NhZ2UgYm94XG4gICAgICAgICAgICAvLyBjb25zdCBtc2c6IE1lc3NhZ2VUeXBlID0gTWVzc2FnZXMuZ2V0TWVzc2FnZU9iamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIGlvLnRvKG1lc3NhZ2UudG9JZCkuZW1pdCgnbWVzc2FnZV9kZWxldGUnLCBtc2cpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNZXNzYWdlID0gKGRhdGE6IE1lc3NhZ2VUeXBlKTogTWVzc2FnZVR5cGUgPT4ge1xuICBjb25zdCB7XG4gICAgYWRkZWQsXG4gICAgY29udGVudCxcbiAgICBjb252b0lkLFxuICAgIGZpbGVzLFxuICAgIF9rZXk6IG1zZ0lkLFxuICAgIHJlYWQsXG4gICAgc2F2ZWQsXG4gICAgdXNlcklkXG4gIH0gPSBkYXRhO1xuXG4gIHJldHVybiB7XG4gICAgYWRkZWQsXG4gICAgY29udGVudCxcbiAgICBjb252b0lkLFxuICAgIGZpbGVzLFxuICAgIG1zZ0lkLFxuICAgIHJlYWQsXG4gICAgc2F2ZWQsXG4gICAgdXNlcklkXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYW5NZXNzYWdlcyA9IChkYXRhYmFzZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgLy8gUmVtb3ZlIGFsbCBtZXNzYWdlcyB0aGF0IGFyZSBvdmVyIDYwIGRheXMgYW5kIG5vdCBzYXZlZFxuICBjb25zdCBhcWxRcnkgPSBhcWxgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgIEZJTFRFUiBtLmFkZGVkIDwgREFURV9USU1FU1RBTVAoREFURV9TVUJUUkFDVChEQVRFX05PVygpLCA2MCwgJ2RheScpKSAmJiBMRU5HVEgobS5zYXZlZCkgPiAwXG4gICAgICBSRU1PVkUgbSBJTiBtZXNzYWdlc1xuICAgICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigobGlzdDogTWVzc2FnZVR5cGVbXSkgPT4gbGlzdC5sZW5ndGgpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcbiJdfQ==
|
|
299
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL21lc3NhZ2VzLnRzIl0sIm5hbWVzIjpbImdldE1lc3NhZ2VMaXN0IiwiY29udGV4dCIsImNvbnZvSWQiLCJmcm9tIiwidG8iLCJkYXRhYmFzZSIsInNlc3Npb25JZCIsInVzZXJJZCIsImZvcm1hdENvbnZvSWQiLCJzZXNzaW9uRG9jSWQiLCJjb252b0RvY0lkIiwiY29udm9RcnkiLCJhcWwiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJhbGwiLCJjb252ZXJzYXRpb25zIiwibGVuZ3RoIiwibGltaXQiLCJhcWxRcnkiLCJlcnJvciIsInVwZGF0ZU1lc3NhZ2UiLCJtZXNzYWdlIiwiZmlsZXMiLCJpbWFnZXMiLCJtc2dJZCIsIkVycm9yIiwibm93IiwiRGF0ZSIsInVwZGF0ZSIsImNvbnRlbnQiLCJtb2RpZmllZCIsImZvcm1hdE1zZ0lkIiwiaW5zZXJ0IiwiX2tleSIsImFkZGVkIiwibmV4dCIsInNhdmVNZXNzYWdlIiwiZm9ybWF0SWQiLCJjb252ZXJzYXRpb24iLCJjb252ZXJzYXRpb25LZXkiLCJ1bnNhdmVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZSIsImdldE1lc3NhZ2UiLCJkYXRhIiwicmVhZCIsInNhdmVkIiwiY2xlYW5NZXNzYWdlcyIsImxpc3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUE7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBTUE7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBRU8sSUFBTUEsY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixDQUM1QkMsT0FENEIsRUFFNUJDLE9BRjRCLEVBRzVCQyxJQUg0QixFQUk1QkMsRUFKNEIsRUFLRDtBQUFBLE1BQ3BCQyxRQURvQixHQUNXSixPQURYLENBQ3BCSSxRQURvQjtBQUFBLE1BQ0ZDLFNBREUsR0FDV0wsT0FEWCxD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TUFRMURDLEtBUjBELEdBVXhERixJQVZ3RCxDQVExREUsS0FSMEQ7QUFBQSxNQVMxRHhDLE1BVDBELEdBVXhEc0MsSUFWd0QsQ0FTMUR0QyxNQVQwRDtBQVk1RCxTQUFPO0FBQ0w2QixJQUFBQSxLQUFLLEVBQUxBLEtBREs7QUFFTEwsSUFBQUEsT0FBTyxFQUFQQSxPQUZLO0FBR0w3QixJQUFBQSxPQUFPLEVBQVBBLE9BSEs7QUFJTHNCLElBQUFBLEtBQUssRUFBTEEsS0FKSztBQUtMRSxJQUFBQSxLQUFLLEVBQUxBLEtBTEs7QUFNTG9CLElBQUFBLElBQUksRUFBSkEsSUFOSztBQU9MQyxJQUFBQSxLQUFLLEVBQUxBLEtBUEs7QUFRTHhDLElBQUFBLE1BQU0sRUFBTkE7QUFSSyxHQUFQO0FBVUQsQ0F0Qk07Ozs7QUF3QkEsSUFBTXlDLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBQzNDLFFBQUQsRUFBdUM7QUFDbEU7QUFDQSxNQUFNZSxNQUFNLE9BQUdSLGFBQUgscUJBQVo7QUFLQSxTQUFPLG1CQUFNUCxRQUFOLEVBQWdCUSxLQUFoQixDQUFzQk8sTUFBdEIsRUFDSk4sSUFESSxDQUNDLFVBQUNDLE1BQUQ7QUFBQSxXQUF5QkEsTUFBTSxDQUFDQyxHQUFQLEVBQXpCO0FBQUEsR0FERCxFQUVKRixJQUZJLENBRUMsVUFBQ21DLElBQUQ7QUFBQSxXQUF5QkEsSUFBSSxDQUFDL0IsTUFBOUI7QUFBQSxHQUZELFdBR0UsVUFBQ0csS0FBRCxFQUFrQjtBQUN2QixVQUFNQSxLQUFOO0FBQ0QsR0FMSSxDQUFQO0FBTUQsQ0FiTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWQsIHBhcnNlVmFyQ2hhcn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtBcnJheUN1cnNvcn0gZnJvbSAnYXJhbmdvanMvY3Vyc29yJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5cbmltcG9ydCB7QXJhbmdvREJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGInO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoJztcbmltcG9ydCB7Q29udmVyc2F0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvY29udmVyc2F0aW9ucyc7XG5pbXBvcnQge01lc3NhZ2VJbnB1dFR5cGUsIE1lc3NhZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9tZXNzYWdlcyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtnZXRDb252ZXJzYXRpb259IGZyb20gJy4vY29udmVyc2F0aW9ucyc7XG5cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdtZXNzYWdlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRNZXNzYWdlTGlzdCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udm9JZDogc3RyaW5nLFxuICBmcm9tOiBudW1iZXIsXG4gIHRvOiBudW1iZXJcbik6IFByb21pc2U8TWVzc2FnZVR5cGVbXT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZvSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udm9JZCk7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGNvbnZvRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udm9JZH1gO1xuXG4gIGNvbnN0IGNvbnZvUXJ5ID0gYXFsYEZPUiBlIElOIGhhc0NvbnZlcnNhdGlvbnNcbiAgICBGSUxURVIgZS5fZnJvbSA9PSAke3Nlc3Npb25Eb2NJZH0gJiYgZS5fdG8gPT0gJHtjb252b0RvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gZWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShjb252b1FyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb25zKSA9PiB7XG4gICAgICBpZighY29udmVyc2F0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgICAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICAgICAgRklMVEVSIG0uY29udm9JZCA9PSBcIiR7Zm9ybWF0Q29udm9JZH1cIlxuICAgICAgICAgIFNPUlQgbS5hZGRlZCBERVNDXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgU09SVCBtLmFkZGVkIEFTQ1xuICAgICAgICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICAgICAgRklMVEVSIHUuX2tleSA9PSBtLnVzZXJJZFxuICAgICAgICAgICAgTElNSVQgMVxuICAgICAgICAgICAgUkVUVVJOIHVcbiAgICAgICAgICApXG4gICAgICAgICAgUkVUVVJOIE1FUkdFKG0sIHt1c2VyOiB1c2VyfSlgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlOiBNZXNzYWdlSW5wdXRUeXBlKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBjb252b0lkLFxuICAgIGZpbGVzLFxuICAgIGltYWdlcyxcbiAgICBtc2dJZCA9IGNyZWF0ZUhhc2goYG1lc3NhZ2UtJHtzZXNzaW9uSWR9YClcbiAgfSA9IG1lc3NhZ2U7XG4gIGNvbnN0IGZvcm1hdENvbnZvSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udm9JZCk7XG5cbiAgaWYoZm9ybWF0Q29udm9JZCA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX2NvbnZvSWQnKTtcbiAgfVxuXG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgdXBkYXRlOiBNZXNzYWdlVHlwZSA9IHtcbiAgICBjb250ZW50OiBwYXJzZVZhckNoYXIobWVzc2FnZS5jb250ZW50LCA2NDApLFxuICAgIGZpbGVzOiBmaWxlcyB8fCBbXSxcbiAgICBpbWFnZXM6IGltYWdlcyB8fCBbXSxcbiAgICBtb2RpZmllZDogbm93XG4gIH07XG4gIGNvbnN0IGZvcm1hdE1zZ0lkOiBzdHJpbmcgPSBwYXJzZUlkKG1zZ0lkKTtcbiAgY29uc3QgaW5zZXJ0OiBNZXNzYWdlVHlwZSA9IHtcbiAgICAuLi5jbG9uZURlZXAodXBkYXRlKSxcbiAgICBfa2V5OiBmb3JtYXRNc2dJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGNvbnZvSWQ6IGZvcm1hdENvbnZvSWQsXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7Zm9ybWF0TXNnSWR9LCBjb252b0lkOiAke2Zvcm1hdENvbnZvSWR9LCB1c2VySWQ6ICR7c2Vzc2lvbklkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfSBJTiBtZXNzYWdlc1xuICAgIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtc2dJZDogc3RyaW5nLCBjb252b0lkOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQobXNnSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb24oY29udGV4dCwgY29udm9JZClcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogY29udmVyc2F0aW9uS2V5fSA9IGNvbnZlcnNhdGlvbjtcbiAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICBGSUxURVIgbS5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIG0udG8gPT0gJHtjb252ZXJzYXRpb25LZXl9XG4gICAgICAgIFVQREFURSBtIFdJVEgge3NhdmVkOiBBUFBFTkQobS5zYXZlZCwgJHtzZXNzaW9uSWR9LCB0cnVlKX0gSU4gbWVzc2FnZXNcbiAgICAgICAgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG1lc3NhZ2U6IE1lc3NhZ2VUeXBlID0ge30pID0+IHtcbiAgICAgICAgICBpZighaXNFbXB0eShtZXNzYWdlKSkge1xuICAgICAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG1lc3NhZ2UgYm94XG4gICAgICAgICAgICAvLyBjb25zdCBtc2c6IE1lc3NhZ2VUeXBlID0gTWVzc2FnZXMuZ2V0TWVzc2FnZU9iamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIGlvLnRvKG1lc3NhZ2UudG9JZCkuZW1pdCgnbWVzc2FnZV9zYXZlJywgbXNnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdW5zYXZlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtc2dJZDogc3RyaW5nLCBjb252b0lkOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQobXNnSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb24oY29udGV4dCwgY29udm9JZClcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogY29udmVyc2F0aW9uS2V5fSA9IGNvbnZlcnNhdGlvbjtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgICAgICBGSUxURVIgbS5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIG0udG8gPT0gJHtjb252ZXJzYXRpb25LZXl9XG4gICAgICAgICAgVVBEQVRFIG0gV0lUSCB7c2F2ZWQ6IFJFTU9WRV9WQUxVRShtLnNhdmVkLCAke3Nlc3Npb25JZH0pfSBJTiBtZXNzYWdlc1xuICAgICAgICAgIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChtZXNzYWdlOiBNZXNzYWdlVHlwZSA9IHt9KSA9PiB7XG4gICAgICAgICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpIHtcbiAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0byBtZXNzYWdlIGJveFxuICAgICAgICAgICAgLy8gY29uc3QgbXNnOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VzLmdldE1lc3NhZ2VPYmplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBpby50byhtZXNzYWdlLmlkKS5lbWl0KCdtZXNzYWdlX3Vuc2F2ZScsIG1zZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZU1lc3NhZ2UgPSAoY29udGV4dDogQXBpQ29udGV4dCwgbXNnSWQ6IHN0cmluZywgY29udm9JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKG1zZ0lkKTtcblxuICByZXR1cm4gZ2V0Q29udmVyc2F0aW9uKGNvbnRleHQsIGNvbnZvSWQpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge19rZXk6IGNvbnZlcnNhdGlvbktleX0gPSBjb252ZXJzYXRpb247XG4gICAgICBjb25zdCBhcWxRcnkgPSBhcWxgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgICAgRklMVEVSIG0uX2tleSA9PSAke2Zvcm1hdElkfSAmJiBtLnRvID09ICR7Y29udmVyc2F0aW9uS2V5fSAmJiBtLmZyb20gPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIFJFTU9WRSBtIElOIG1lc3NhZ2VzXG4gICAgICAgIFJFVFVSTiBPTERgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChtZXNzYWdlOiBNZXNzYWdlVHlwZSA9IHt9KSA9PiB7XG4gICAgICAgICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpIHtcbiAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0byBtZXNzYWdlIGJveFxuICAgICAgICAgICAgLy8gY29uc3QgbXNnOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VzLmdldE1lc3NhZ2VPYmplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBpby50byhtZXNzYWdlLnRvSWQpLmVtaXQoJ21lc3NhZ2VfZGVsZXRlJywgbXNnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWVzc2FnZSA9IChkYXRhOiBNZXNzYWdlVHlwZSk6IE1lc3NhZ2VUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIGFkZGVkLFxuICAgIGNvbnRlbnQsXG4gICAgY29udm9JZCxcbiAgICBmaWxlcyxcbiAgICBfa2V5OiBtc2dJZCxcbiAgICByZWFkLFxuICAgIHNhdmVkLFxuICAgIHVzZXJJZFxuICB9ID0gZGF0YTtcblxuICByZXR1cm4ge1xuICAgIGFkZGVkLFxuICAgIGNvbnRlbnQsXG4gICAgY29udm9JZCxcbiAgICBmaWxlcyxcbiAgICBtc2dJZCxcbiAgICByZWFkLFxuICAgIHNhdmVkLFxuICAgIHVzZXJJZFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFuTWVzc2FnZXMgPSAoZGF0YWJhc2U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIC8vIFJlbW92ZSBhbGwgbWVzc2FnZXMgdGhhdCBhcmUgb3ZlciA2MCBkYXlzIGFuZCBub3Qgc2F2ZWRcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICBGSUxURVIgbS5hZGRlZCA8IERBVEVfVElNRVNUQU1QKERBVEVfU1VCVFJBQ1QoREFURV9OT1coKSwgNjAsICdkYXknKSkgJiYgTEVOR1RIKG0uc2F2ZWQpID4gMFxuICAgICAgUkVNT1ZFIG0gSU4gbWVzc2FnZXNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3Q6IE1lc3NhZ2VUeXBlW10pID0+IGxpc3QubGVuZ3RoKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Responses } from 'apn';
|
|
2
2
|
import { NotificationType } from '../types/notifications';
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const getApnProvider: () => any;
|
|
4
4
|
export declare const pushNotification: (deviceTokens: string[], note: NotificationType) => Promise<Responses>;
|
|
5
5
|
export declare const clearBadges: (deviceTokens: string[]) => Promise<Responses>;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.clearBadges = exports.pushNotification = exports.
|
|
6
|
+
exports.clearBadges = exports.pushNotification = exports.getApnProvider = void 0;
|
|
7
7
|
|
|
8
8
|
var _apn = require("apn");
|
|
9
9
|
|
|
@@ -15,7 +15,7 @@ var _config = require("../config");
|
|
|
15
15
|
*/
|
|
16
16
|
// const eventCategory: string = 'notifications';
|
|
17
17
|
// Push Notifications
|
|
18
|
-
var
|
|
18
|
+
var getApnProvider = function getApnProvider() {
|
|
19
19
|
return new _apn.Provider({
|
|
20
20
|
ca: _config.Config.get('app.apn.ca'),
|
|
21
21
|
cert: _config.Config.get('app.apn.cert'),
|
|
@@ -24,11 +24,11 @@ var getAPNProvider = function getAPNProvider() {
|
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
exports.
|
|
27
|
+
exports.getApnProvider = getApnProvider;
|
|
28
28
|
|
|
29
29
|
var pushNotification = function pushNotification(deviceTokens, note) {
|
|
30
30
|
// Push notification to device
|
|
31
|
-
var provider =
|
|
31
|
+
var provider = getApnProvider();
|
|
32
32
|
var notification = new _apn.Notification();
|
|
33
33
|
notification.topic = _config.Config.get('app.apn.id');
|
|
34
34
|
notification.alert = note.message;
|
|
@@ -49,11 +49,11 @@ exports.pushNotification = pushNotification;
|
|
|
49
49
|
|
|
50
50
|
var clearBadges = function clearBadges(deviceTokens) {
|
|
51
51
|
// Push notification to device
|
|
52
|
-
var provider =
|
|
52
|
+
var provider = getApnProvider();
|
|
53
53
|
var notification = new _apn.Notification();
|
|
54
54
|
notification.badge = 0;
|
|
55
55
|
return provider.send(notification, deviceTokens);
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
exports.clearBadges = clearBadges;
|
|
59
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL25vdGlmaWNhdGlvbnMudHMiXSwibmFtZXMiOlsiZ2V0QXBuUHJvdmlkZXIiLCJQcm92aWRlciIsImNhIiwiQ29uZmlnIiwiZ2V0IiwiY2VydCIsImtleSIsInByb2R1Y3Rpb24iLCJwdXNoTm90aWZpY2F0aW9uIiwiZGV2aWNlVG9rZW5zIiwibm90ZSIsInByb3ZpZGVyIiwibm90aWZpY2F0aW9uIiwiQVBOTm90aWZpY2F0aW9uIiwidG9waWMiLCJhbGVydCIsIm1lc3NhZ2UiLCJkYXRhIiwibXV0YWJsZUNvbnRlbnQiLCJwYXlsb2FkIiwiYmFkZ2UiLCJ1bmRlZmluZWQiLCJzZW5kIiwiY2xlYXJCYWRnZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQTs7QUFFQTs7QUFOQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBRUE7QUFDTyxJQUFNQSxjQUFjLEdBQUcsU0FBakJBLGNBQWlCO0FBQUEsU0FBZ0IsSUFBSUMsYUFBSixDQUFhO0FBQ3pEQyxJQUFBQSxFQUFFLEVBQUVDLGVBQU9DLEdBQVAsQ0FBVyxZQUFYLENBRHFEO0FBRXpEQyxJQUFBQSxJQUFJLEVBQUVGLGVBQU9DLEdBQVAsQ0FBVyxjQUFYLENBRm1EO0FBR3pERSxJQUFBQSxHQUFHLEVBQUVILGVBQU9DLEdBQVAsQ0FBVyxhQUFYLENBSG9EO0FBSXpERyxJQUFBQSxVQUFVLEVBQUVKLGVBQU9DLEdBQVAsQ0FBVyxhQUFYLE1BQThCO0FBSmUsR0FBYixDQUFoQjtBQUFBLENBQXZCOzs7O0FBT0EsSUFBTUksZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDQyxZQUFELEVBQXlCQyxJQUF6QixFQUF3RTtBQUN0RztBQUNBLE1BQU1DLFFBQWtCLEdBQUdYLGNBQWMsRUFBekM7QUFDQSxNQUFNWSxZQUE2QixHQUFHLElBQUlDLGlCQUFKLEVBQXRDO0FBQ0FELEVBQUFBLFlBQVksQ0FBQ0UsS0FBYixHQUFxQlgsZUFBT0MsR0FBUCxDQUFXLFlBQVgsQ0FBckI7QUFDQVEsRUFBQUEsWUFBWSxDQUFDRyxLQUFiLEdBQXFCTCxJQUFJLENBQUNNLE9BQTFCOztBQUVBLE1BQUdOLElBQUksQ0FBQ08sSUFBUixFQUFjO0FBQ1pMLElBQUFBLFlBQVksQ0FBQ00sY0FBYixHQUE4QixJQUE5QjtBQUNBTixJQUFBQSxZQUFZLENBQUNPLE9BQWIsR0FBdUJULElBQUksQ0FBQ08sSUFBNUI7QUFDRDs7QUFFRCxNQUFHUCxJQUFJLENBQUNVLEtBQUwsS0FBZUMsU0FBbEIsRUFBNkI7QUFDM0JULElBQUFBLFlBQVksQ0FBQ1EsS0FBYixHQUFxQlYsSUFBSSxDQUFDVSxLQUExQjtBQUNEOztBQUVELFNBQU9ULFFBQVEsQ0FBQ1csSUFBVCxDQUFjVixZQUFkLEVBQTRCSCxZQUE1QixDQUFQO0FBQ0QsQ0FqQk07Ozs7QUFtQkEsSUFBTWMsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ2QsWUFBRCxFQUFnRDtBQUN6RTtBQUNBLE1BQU1FLFFBQVEsR0FBR1gsY0FBYyxFQUEvQjtBQUNBLE1BQU1ZLFlBQVksR0FBRyxJQUFJQyxpQkFBSixFQUFyQjtBQUNBRCxFQUFBQSxZQUFZLENBQUNRLEtBQWIsR0FBcUIsQ0FBckI7QUFFQSxTQUFPVCxRQUFRLENBQUNXLElBQVQsQ0FBY1YsWUFBZCxFQUE0QkgsWUFBNUIsQ0FBUDtBQUNELENBUE0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtOb3RpZmljYXRpb24gYXMgQVBOTm90aWZpY2F0aW9uLCBQcm92aWRlciwgUmVzcG9uc2VzfSBmcm9tICdhcG4nO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7Tm90aWZpY2F0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvbm90aWZpY2F0aW9ucyc7XG5cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdub3RpZmljYXRpb25zJztcblxuLy8gUHVzaCBOb3RpZmljYXRpb25zXG5leHBvcnQgY29uc3QgZ2V0QXBuUHJvdmlkZXIgPSAoKTogUHJvdmlkZXIgPT4gbmV3IFByb3ZpZGVyKHtcbiAgY2E6IENvbmZpZy5nZXQoJ2FwcC5hcG4uY2EnKSxcbiAgY2VydDogQ29uZmlnLmdldCgnYXBwLmFwbi5jZXJ0JyksXG4gIGtleTogQ29uZmlnLmdldCgnYXBwLmFwbi5rZXknKSxcbiAgcHJvZHVjdGlvbjogQ29uZmlnLmdldCgnZW52aXJvbm1lbnQnKSA9PT0gJ3Byb2QnXG59KTtcblxuZXhwb3J0IGNvbnN0IHB1c2hOb3RpZmljYXRpb24gPSAoZGV2aWNlVG9rZW5zOiBzdHJpbmdbXSwgbm90ZTogTm90aWZpY2F0aW9uVHlwZSk6IFByb21pc2U8UmVzcG9uc2VzPiA9PiB7XG4gIC8vIFB1c2ggbm90aWZpY2F0aW9uIHRvIGRldmljZVxuICBjb25zdCBwcm92aWRlcjogUHJvdmlkZXIgPSBnZXRBcG5Qcm92aWRlcigpO1xuICBjb25zdCBub3RpZmljYXRpb246IEFQTk5vdGlmaWNhdGlvbiA9IG5ldyBBUE5Ob3RpZmljYXRpb24oKTtcbiAgbm90aWZpY2F0aW9uLnRvcGljID0gQ29uZmlnLmdldCgnYXBwLmFwbi5pZCcpO1xuICBub3RpZmljYXRpb24uYWxlcnQgPSBub3RlLm1lc3NhZ2U7XG5cbiAgaWYobm90ZS5kYXRhKSB7XG4gICAgbm90aWZpY2F0aW9uLm11dGFibGVDb250ZW50ID0gdHJ1ZTtcbiAgICBub3RpZmljYXRpb24ucGF5bG9hZCA9IG5vdGUuZGF0YTtcbiAgfVxuXG4gIGlmKG5vdGUuYmFkZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgIG5vdGlmaWNhdGlvbi5iYWRnZSA9IG5vdGUuYmFkZ2U7XG4gIH1cblxuICByZXR1cm4gcHJvdmlkZXIuc2VuZChub3RpZmljYXRpb24sIGRldmljZVRva2Vucyk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJCYWRnZXMgPSAoZGV2aWNlVG9rZW5zOiBzdHJpbmdbXSk6IFByb21pc2U8UmVzcG9uc2VzPiA9PiB7XG4gIC8vIFB1c2ggbm90aWZpY2F0aW9uIHRvIGRldmljZVxuICBjb25zdCBwcm92aWRlciA9IGdldEFwblByb3ZpZGVyKCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbiA9IG5ldyBBUE5Ob3RpZmljYXRpb24oKTtcbiAgbm90aWZpY2F0aW9uLmJhZGdlID0gMDtcblxuICByZXR1cm4gcHJvdmlkZXIuc2VuZChub3RpZmljYXRpb24sIGRldmljZVRva2Vucyk7XG59O1xuIl19
|
package/lib/data/payments.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { ApiContext, PaymentBankAccount, PaymentCardType, PaymentCharge, PaymentTransfer, UserType } from '../types';
|
|
2
2
|
export declare const addCustomerAccount: (context: ApiContext) => Promise<boolean>;
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const addCreditCard: (context: ApiContext, card: PaymentCardType) => Promise<PaymentCardType>;
|
|
3
|
+
export declare const addBankAccount: (context: ApiContext, bankAccount: PaymentBankAccount) => Promise<boolean>;
|
|
4
|
+
export declare const addCreditCard: (context: ApiContext, card: PaymentCardType) => Promise<UserType>;
|
|
6
5
|
export declare const updateCreditCard: (context: ApiContext, card: PaymentCardType) => Promise<PaymentCardType>;
|
|
7
6
|
export declare const getCreditCards: (context: ApiContext) => Promise<PaymentCardType[]>;
|
|
8
7
|
export declare const deleteCreditCard: (context: ApiContext, cardId: string) => Promise<boolean>;
|
|
9
|
-
export declare const
|
|
8
|
+
export declare const deleteBankAccount: (context: ApiContext, bankId: string) => Promise<boolean>;
|
|
10
9
|
export declare const createPaymentTransfer: (context: ApiContext, transfer: PaymentTransfer) => Promise<PaymentTransfer>;
|
|
11
10
|
export declare const createPaymentHold: (context: ApiContext, payment: PaymentCharge) => Promise<PaymentCharge>;
|