@nlabs/reaktor 0.1.12 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/lib/config.js +138 -0
  2. package/lib/data/conversations.js +228 -0
  3. package/lib/data/dynamodb.js +172 -0
  4. package/lib/data/email.js +194 -0
  5. package/lib/data/files.js +463 -0
  6. package/lib/data/groups.js +401 -0
  7. package/lib/data/images.js +841 -0
  8. package/lib/data/index.js +234 -0
  9. package/lib/data/ios.js +327 -0
  10. package/lib/data/locations.js +148 -0
  11. package/lib/data/messages.js +281 -0
  12. package/lib/data/notifications.js +59 -0
  13. package/lib/data/payments.js +798 -0
  14. package/lib/data/posts.js +637 -0
  15. package/lib/data/reactions.js +243 -0
  16. package/lib/data/s3.js +133 -0
  17. package/lib/data/search.js +111 -0
  18. package/lib/data/sms.js +79 -0
  19. package/lib/data/subscription.js +311 -0
  20. package/lib/data/tags.js +343 -0
  21. package/lib/data/users.js +415 -0
  22. package/lib/index.js +42 -0
  23. package/lib/types/apps.js +2 -0
  24. package/lib/types/arangodb.js +2 -0
  25. package/lib/types/auth.js +2 -0
  26. package/lib/types/conversations.js +2 -0
  27. package/lib/types/email.js +2 -0
  28. package/lib/types/files.js +2 -0
  29. package/lib/types/google.js +2 -0
  30. package/lib/types/groups.js +2 -0
  31. package/lib/types/images.js +2 -0
  32. package/lib/types/index.js +210 -0
  33. package/lib/types/locations.js +2 -0
  34. package/lib/types/messages.js +2 -0
  35. package/lib/types/notifications.js +2 -0
  36. package/lib/types/payments.js +2 -0
  37. package/lib/types/posts.js +2 -0
  38. package/lib/types/reactions.js +2 -0
  39. package/lib/types/tags.js +2 -0
  40. package/lib/types/users.js +2 -0
  41. package/lib/utils/analytics.js +59 -0
  42. package/lib/utils/arangodb.d.ts +0 -1
  43. package/lib/utils/arangodb.js +122 -0
  44. package/lib/utils/auth.d.ts +0 -2
  45. package/lib/utils/auth.js +55 -0
  46. package/lib/utils/graphql.js +19 -0
  47. package/lib/utils/index.js +78 -0
  48. package/lib/utils/objects.js +54 -0
  49. package/lib/utils/redis.js +28 -0
  50. package/package.json +7 -7
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.addLocation = void 0;
7
+
8
+ var _ripHunter = require("@nlabs/rip-hunter");
9
+
10
+ var _utils = require("@nlabs/utils");
11
+
12
+ var _arangojs = require("arangojs");
13
+
14
+ var _get = _interopRequireDefault(require("lodash/get"));
15
+
16
+ var _config = require("../config");
17
+
18
+ var _utils2 = require("../utils");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
21
+
22
+ function _templateObject() {
23
+ var data = _taggedTemplateLiteral(["UPSERT {googleId: ", "}\n INSERT ", "\n UPDATE ", "\n IN locations RETURN NEW"]);
24
+
25
+ _templateObject = function _templateObject() {
26
+ return data;
27
+ };
28
+
29
+ return data;
30
+ }
31
+
32
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
33
+
34
+ var eventCategory = 'locations';
35
+
36
+ var addLocation = function addLocation(context, location) {
37
+ var action = 'add';
38
+ var database = context.database,
39
+ sessionId = context.userId;
40
+ var address = location.address,
41
+ itemId = location.itemId,
42
+ itemType = location.itemType;
43
+
44
+ var geocodeUrl = _config.Config.get('google.geocode.url');
45
+
46
+ var params = {
47
+ address: address,
48
+ key: _config.Config.get('google.geocode.key')
49
+ };
50
+ var url = "".concat(geocodeUrl, "?").concat((0, _ripHunter.queryString)(params));
51
+ return (0, _ripHunter.get)(url).then(function (json) {
52
+ var _json$results = json.results,
53
+ results = _json$results === void 0 ? [] : _json$results,
54
+ _json$status = json.status,
55
+ status = _json$status === void 0 ? '' : _json$status;
56
+
57
+ if (status === 'OK' && results.length) {
58
+ var geodata = results[0];
59
+ var addressComponents = (0, _get["default"])(geodata, 'address_components');
60
+
61
+ var getFieldVal = function getFieldVal(name) {
62
+ var _ref = addressComponents.find(function (addressField) {
63
+ var types = addressField.types || [];
64
+ return types.findIndex(function (fieldType) {
65
+ return fieldType === name;
66
+ }) >= 0;
67
+ }) || {},
68
+ _ref$short_name = _ref.short_name,
69
+ shortName = _ref$short_name === void 0 ? '' : _ref$short_name;
70
+
71
+ return shortName;
72
+ }; // Street
73
+
74
+
75
+ var streetNumber = getFieldVal('street_number');
76
+ var route = getFieldVal('route'); // Location
77
+
78
+ var now = Date.now(); // Item
79
+
80
+ var formatItemType = (0, _utils.parseChar)(itemType).toLowerCase();
81
+ var formatItemId = (0, _utils.parseId)(itemId);
82
+ var googleId = (0, _get["default"])(geodata, 'place_id');
83
+ var update = {};
84
+ var insert = {
85
+ _key: (0, _utils.createHash)("post-".concat(sessionId)),
86
+ added: now,
87
+ city: getFieldVal('locality'),
88
+ country: getFieldVal('country'),
89
+ formatted: (0, _get["default"])(geodata, 'formatted_address'),
90
+ googleId: googleId,
91
+ latitude: (0, _get["default"])(geodata, 'geometry.location.lat'),
92
+ longitude: (0, _get["default"])(geodata, 'geometry.location.lng'),
93
+ state: getFieldVal('administrative_area_level_1'),
94
+ street: [streetNumber, route].filter(function (obj) {
95
+ return obj;
96
+ }).join(' '),
97
+ zip: getFieldVal('postal_code')
98
+ };
99
+ var aqlQry = (0, _arangojs.aql)(_templateObject(), googleId, insert, update);
100
+ return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
101
+ return cursor.next();
102
+ }).then(function () {
103
+ var updatedLocation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
104
+ var itemDocId;
105
+ var updatedLocationKey = updatedLocation._key;
106
+
107
+ switch (formatItemType) {
108
+ case 'posts':
109
+ itemDocId = "posts/".concat(formatItemId);
110
+ break;
111
+
112
+ default:
113
+ itemDocId = '';
114
+ } // If there is a valid item doc id, create an edge
115
+
116
+
117
+ if (itemDocId) {
118
+ var edgeCollection = (0, _utils2.useDb)(database).edgeCollection('hasLocation');
119
+ var locationId = updatedLocationKey;
120
+ var locationDocId = "locations/".concat(locationId);
121
+ var edgeId = (0, _utils.createHash)("hasLocation-".concat(locationId, "-").concat(sessionId));
122
+ var edge = {
123
+ _key: edgeId
124
+ };
125
+ return edgeCollection.save(edge, itemDocId, locationDocId).then(function () {
126
+ return updatedLocation;
127
+ });
128
+ } // Otherwise just return the new location
129
+
130
+
131
+ return updatedLocation;
132
+ })["catch"](function (error) {
133
+ return (0, _utils2.logError)({
134
+ action: action,
135
+ category: eventCategory,
136
+ label: 'db_error'
137
+ }, error, context).then(function () {
138
+ return null;
139
+ });
140
+ });
141
+ }
142
+
143
+ return {};
144
+ });
145
+ };
146
+
147
+ exports.addLocation = addLocation;
148
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2xvY2F0aW9ucy50cyJdLCJuYW1lcyI6WyJldmVudENhdGVnb3J5IiwiYWRkTG9jYXRpb24iLCJjb250ZXh0IiwibG9jYXRpb24iLCJhY3Rpb24iLCJkYXRhYmFzZSIsInNlc3Npb25JZCIsInVzZXJJZCIsImFkZHJlc3MiLCJpdGVtSWQiLCJpdGVtVHlwZSIsImdlb2NvZGVVcmwiLCJDb25maWciLCJnZXQiLCJwYXJhbXMiLCJrZXkiLCJ1cmwiLCJ0aGVuIiwianNvbiIsInJlc3VsdHMiLCJzdGF0dXMiLCJsZW5ndGgiLCJnZW9kYXRhIiwiYWRkcmVzc0NvbXBvbmVudHMiLCJnZXRGaWVsZFZhbCIsIm5hbWUiLCJmaW5kIiwiYWRkcmVzc0ZpZWxkIiwidHlwZXMiLCJmaW5kSW5kZXgiLCJmaWVsZFR5cGUiLCJzaG9ydF9uYW1lIiwic2hvcnROYW1lIiwic3RyZWV0TnVtYmVyIiwicm91dGUiLCJub3ciLCJEYXRlIiwiZm9ybWF0SXRlbVR5cGUiLCJ0b0xvd2VyQ2FzZSIsImZvcm1hdEl0ZW1JZCIsImdvb2dsZUlkIiwidXBkYXRlIiwiaW5zZXJ0IiwiX2tleSIsImFkZGVkIiwiY2l0eSIsImNvdW50cnkiLCJmb3JtYXR0ZWQiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInN0YXRlIiwic3RyZWV0IiwiZmlsdGVyIiwib2JqIiwiam9pbiIsInppcCIsImFxbFFyeSIsImFxbCIsInF1ZXJ5IiwiY3Vyc29yIiwibmV4dCIsInVwZGF0ZWRMb2NhdGlvbiIsIml0ZW1Eb2NJZCIsInVwZGF0ZWRMb2NhdGlvbktleSIsImVkZ2VDb2xsZWN0aW9uIiwibG9jYXRpb25JZCIsImxvY2F0aW9uRG9jSWQiLCJlZGdlSWQiLCJlZGdlIiwic2F2ZSIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBOztBQUNBOztBQUNBOztBQUdBOztBQUVBOztBQUlBOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsYUFB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YUFBL0IsQ0FBdkI7QUFDQSxjQUFNQyxVQUFrQixHQUFHRixrQkFBM0I7QUFDQSxjQUFNRyxhQUFxQix1QkFBZ0JELFVBQWhCLENBQTNCO0FBQ0EsY0FBTUUsTUFBTSxHQUFHLDZDQUEwQkYsVUFBMUIsY0FBd0MzRCxTQUF4QyxFQUFmO0FBQ0EsY0FBTThELElBQVMsR0FBRztBQUFDekIsWUFBQUEsSUFBSSxFQUFFd0I7QUFBUCxXQUFsQjtBQUVBLGlCQUFPSCxjQUFjLENBQUNLLElBQWYsQ0FBb0JELElBQXBCLEVBQTBCTixTQUExQixFQUFxQ0ksYUFBckMsRUFBb0RqRCxJQUFwRCxDQUF5RDtBQUFBLG1CQUFNNEMsZUFBTjtBQUFBLFdBQXpELENBQVA7QUFDRCxTQXJCMkMsQ0F1QjVDOzs7QUFDQSxlQUFPQSxlQUFQO0FBQ0QsT0EzQkksV0E0QkUsVUFBQ1MsS0FBRDtBQUFBLGVBQWtCLHNCQUFTO0FBQ2hDbEUsVUFBQUEsTUFBTSxFQUFOQSxNQURnQztBQUVoQ21FLFVBQUFBLFFBQVEsRUFBRXZFLGFBRnNCO0FBR2hDd0UsVUFBQUEsS0FBSyxFQUFFO0FBSHlCLFNBQVQsRUFJdEJGLEtBSnNCLEVBSWZwRSxPQUplLEVBSU5lLElBSk0sQ0FJRDtBQUFBLGlCQUFNLElBQU47QUFBQSxTQUpDLENBQWxCO0FBQUEsT0E1QkYsQ0FBUDtBQWlDRDs7QUFFRCxXQUFPLEVBQVA7QUFDRCxHQWxGSSxDQUFQO0FBbUZELENBOUZNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXQsIHF1ZXJ5U3RyaW5nfSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9saWIvY2pzL2FxbC1xdWVyeSc7XG5pbXBvcnQge0FycmF5Q3Vyc29yfSBmcm9tICdhcmFuZ29qcy9saWIvY2pzL2N1cnNvcic7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aCc7XG5pbXBvcnQge0dvb2dsZU1hcHNBZGRyZXNzVHlwZX0gZnJvbSAnLi4vdHlwZXMvZ29vZ2xlJztcbmltcG9ydCB7TG9jYXRpb25UeXBlfSBmcm9tICcuLi90eXBlcy9sb2NhdGlvbnMnO1xuaW1wb3J0IHtsb2dFcnJvciwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2xvY2F0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBhZGRMb2NhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBsb2NhdGlvbjogTG9jYXRpb25UeXBlKTogUHJvbWlzZTxMb2NhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCB7YWRkcmVzcywgaXRlbUlkLCBpdGVtVHlwZX0gPSBsb2NhdGlvbjtcbiAgY29uc3QgZ2VvY29kZVVybDogc3RyaW5nID0gQ29uZmlnLmdldCgnZ29vZ2xlLmdlb2NvZGUudXJsJyk7XG4gIGNvbnN0IHBhcmFtczogb2JqZWN0ID0ge1xuICAgIGFkZHJlc3MsXG4gICAga2V5OiBDb25maWcuZ2V0KCdnb29nbGUuZ2VvY29kZS5rZXknKVxuICB9O1xuICBjb25zdCB1cmw6IHN0cmluZyA9IGAke2dlb2NvZGVVcmx9PyR7cXVlcnlTdHJpbmcocGFyYW1zKX1gO1xuXG4gIHJldHVybiBodHRwR2V0KHVybClcbiAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgY29uc3Qge3Jlc3VsdHMgPSBbXSwgc3RhdHVzID0gJyd9ID0ganNvbjtcblxuICAgICAgaWYoc3RhdHVzID09PSAnT0snICYmIHJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGdlb2RhdGE6IG9iamVjdCA9IHJlc3VsdHNbMF07XG4gICAgICAgIGNvbnN0IGFkZHJlc3NDb21wb25lbnRzOiBHb29nbGVNYXBzQWRkcmVzc1R5cGVbXSA9IGdldChnZW9kYXRhLCAnYWRkcmVzc19jb21wb25lbnRzJyk7XG4gICAgICAgIGNvbnN0IGdldEZpZWxkVmFsID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICAgICAgY29uc3Qge3Nob3J0X25hbWU6IHNob3J0TmFtZSA9ICcnfSA9IGFkZHJlc3NDb21wb25lbnRzLmZpbmQoKGFkZHJlc3NGaWVsZDogR29vZ2xlTWFwc0FkZHJlc3NUeXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IGFkZHJlc3NGaWVsZC50eXBlcyB8fCBbXTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlcy5maW5kSW5kZXgoKGZpZWxkVHlwZTogc3RyaW5nKSA9PiBmaWVsZFR5cGUgPT09IG5hbWUpID49IDA7XG4gICAgICAgICAgfSkgfHwge307XG5cbiAgICAgICAgICByZXR1cm4gc2hvcnROYW1lO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFN0cmVldFxuICAgICAgICBjb25zdCBzdHJlZXROdW1iZXI6IHN0cmluZyA9IGdldEZpZWxkVmFsKCdzdHJlZXRfbnVtYmVyJyk7XG4gICAgICAgIGNvbnN0IHJvdXRlOiBzdHJpbmcgPSBnZXRGaWVsZFZhbCgncm91dGUnKTtcblxuICAgICAgICAvLyBMb2NhdGlvblxuICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gSXRlbVxuICAgICAgICBjb25zdCBmb3JtYXRJdGVtVHlwZTogc3RyaW5nID0gcGFyc2VDaGFyKGl0ZW1UeXBlKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgICAgICAgY29uc3QgZ29vZ2xlSWQ6IHN0cmluZyA9IGdldChnZW9kYXRhLCAncGxhY2VfaWQnKTtcbiAgICAgICAgY29uc3QgdXBkYXRlOiBMb2NhdGlvblR5cGUgPSB7fTtcbiAgICAgICAgY29uc3QgaW5zZXJ0OiBMb2NhdGlvblR5cGUgPSB7XG4gICAgICAgICAgX2tleTogY3JlYXRlSGFzaChgcG9zdC0ke3Nlc3Npb25JZH1gKSxcbiAgICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICAgIGNpdHk6IGdldEZpZWxkVmFsKCdsb2NhbGl0eScpLFxuICAgICAgICAgIGNvdW50cnk6IGdldEZpZWxkVmFsKCdjb3VudHJ5JyksXG4gICAgICAgICAgZm9ybWF0dGVkOiBnZXQoZ2VvZGF0YSwgJ2Zvcm1hdHRlZF9hZGRyZXNzJyksXG4gICAgICAgICAgZ29vZ2xlSWQsXG4gICAgICAgICAgbGF0aXR1ZGU6IGdldChnZW9kYXRhLCAnZ2VvbWV0cnkubG9jYXRpb24ubGF0JyksXG4gICAgICAgICAgbG9uZ2l0dWRlOiBnZXQoZ2VvZGF0YSwgJ2dlb21ldHJ5LmxvY2F0aW9uLmxuZycpLFxuICAgICAgICAgIHN0YXRlOiBnZXRGaWVsZFZhbCgnYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xJyksXG4gICAgICAgICAgc3RyZWV0OiBbc3RyZWV0TnVtYmVyLCByb3V0ZV0uZmlsdGVyKChvYmopID0+IG9iaikuam9pbignICcpLFxuICAgICAgICAgIHppcDogZ2V0RmllbGRWYWwoJ3Bvc3RhbF9jb2RlJylcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge2dvb2dsZUlkOiAke2dvb2dsZUlkfX1cbiAgICAgICAgICAgIElOU0VSVCAke2luc2VydH1cbiAgICAgICAgICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICAgICAgICAgIElOIGxvY2F0aW9ucyBSRVRVUk4gTkVXYDtcblxuICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAudGhlbigodXBkYXRlZExvY2F0aW9uOiBMb2NhdGlvblR5cGUgPSB7fSkgPT4ge1xuICAgICAgICAgICAgbGV0IGl0ZW1Eb2NJZDogc3RyaW5nO1xuICAgICAgICAgICAgY29uc3Qge19rZXk6IHVwZGF0ZWRMb2NhdGlvbktleX0gPSB1cGRhdGVkTG9jYXRpb247XG5cbiAgICAgICAgICAgIHN3aXRjaChmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICdwb3N0cyc6XG4gICAgICAgICAgICAgICAgaXRlbURvY0lkID0gYHBvc3RzLyR7Zm9ybWF0SXRlbUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaXRlbURvY0lkID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgdmFsaWQgaXRlbSBkb2MgaWQsIGNyZWF0ZSBhbiBlZGdlXG4gICAgICAgICAgICBpZihpdGVtRG9jSWQpIHtcbiAgICAgICAgICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZSkuZWRnZUNvbGxlY3Rpb24oJ2hhc0xvY2F0aW9uJyk7XG4gICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uSWQ6IHN0cmluZyA9IHVwZGF0ZWRMb2NhdGlvbktleTtcbiAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb25Eb2NJZDogc3RyaW5nID0gYGxvY2F0aW9ucy8ke2xvY2F0aW9uSWR9YDtcbiAgICAgICAgICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzTG9jYXRpb24tJHtsb2NhdGlvbklkfS0ke3Nlc3Npb25JZH1gKTtcbiAgICAgICAgICAgICAgY29uc3QgZWRnZTogYW55ID0ge19rZXk6IGVkZ2VJZH07XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwgaXRlbURvY0lkLCBsb2NhdGlvbkRvY0lkKS50aGVuKCgpID0+IHVwZGF0ZWRMb2NhdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgbmV3IGxvY2F0aW9uXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlZExvY2F0aW9uO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7fTtcbiAgICB9KTtcbn07XG4iXX0=
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cleanMessages = exports.getMessage = exports.deleteMessage = exports.unsaveMessage = exports.saveMessage = exports.updateMessage = exports.getMessageList = 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 _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
15
+
16
+ var _utils2 = require("../utils");
17
+
18
+ var _conversations = require("./conversations");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
21
+
22
+ function _templateObject5() {
23
+ 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
+
25
+ _templateObject5 = function _templateObject5() {
26
+ return data;
27
+ };
28
+
29
+ return data;
30
+ }
31
+
32
+ function _templateObject4() {
33
+ var data = _taggedTemplateLiteral(["FOR m IN messages\n FILTER m._key == ", " && m.to == ", " && m.from == ", "\n REMOVE m IN messages\n RETURN OLD"]);
34
+
35
+ _templateObject4 = function _templateObject4() {
36
+ return data;
37
+ };
38
+
39
+ return data;
40
+ }
41
+
42
+ function _templateObject3() {
43
+ 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"]);
44
+
45
+ _templateObject3 = function _templateObject3() {
46
+ return data;
47
+ };
48
+
49
+ return data;
50
+ }
51
+
52
+ function _templateObject2() {
53
+ 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"]);
54
+
55
+ _templateObject2 = function _templateObject2() {
56
+ return data;
57
+ };
58
+
59
+ return data;
60
+ }
61
+
62
+ function _templateObject() {
63
+ var data = _taggedTemplateLiteral(["UPSERT {_key: ", ", convoId: ", "}\n INSERT ", "\n UPDATE ", "\n IN messages RETURN NEW"]);
64
+
65
+ _templateObject = function _templateObject() {
66
+ return data;
67
+ };
68
+
69
+ return data;
70
+ }
71
+
72
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
73
+
74
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
75
+
76
+ 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; }
77
+
78
+ // const eventCategory: string = 'messages';
79
+ var getMessageList = function getMessageList(context, convoId, from, to) {
80
+ var database = context.database;
81
+ var formatConvoId = (0, _utils.parseId)(convoId);
82
+ return (0, _conversations.getConversation)(context, formatConvoId).then(function (conversation) {
83
+ var conversationKey = conversation._key;
84
+ var limit = (0, _utils2.getLimit)(from, to);
85
+ var aqlQry = "FOR m IN messages\n FILTER m.to == \"".concat(conversationKey, "\"\n ").concat(limit.aql, "\n SORT m.added\n RETURN m");
86
+ return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
87
+ return cursor.all();
88
+ })["catch"](function (error) {
89
+ throw error;
90
+ });
91
+ });
92
+ };
93
+
94
+ exports.getMessageList = getMessageList;
95
+
96
+ var updateMessage = function updateMessage(context, message) {
97
+ var database = context.database,
98
+ sessionId = context.userId;
99
+ var convoId = message.convoId,
100
+ files = message.files,
101
+ images = message.images,
102
+ msgId = message.msgId;
103
+ var formatConvoId = (0, _utils.parseId)(convoId);
104
+
105
+ if (formatConvoId === '') {
106
+ throw new Error('required_convoId');
107
+ }
108
+
109
+ return (0, _conversations.getConversation)(context, formatConvoId).then(function (conversation) {
110
+ var conversationKey = conversation._key;
111
+ var now = Date.now();
112
+ var update = {
113
+ content: (0, _utils.parseVarChar)(message.content, 640),
114
+ convoId: formatConvoId,
115
+ files: files || [],
116
+ images: images || [],
117
+ modified: now,
118
+ userId: sessionId
119
+ };
120
+ var formatMsgId = (0, _utils.parseId)(msgId);
121
+ var updatedId = formatMsgId === '' ? (0, _utils.createHash)("message-".concat(sessionId)) : formatMsgId;
122
+
123
+ var insert = _objectSpread({}, (0, _cloneDeep["default"])(update), {
124
+ _key: updatedId,
125
+ added: now
126
+ });
127
+
128
+ var aqlQry = (0, _arangojs.aql)(_templateObject(), updatedId, conversationKey, insert, update);
129
+ return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
130
+ return cursor.next();
131
+ }).then(function () {
132
+ var updatedMessage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
133
+ // const {
134
+ // _key: msgId,
135
+ // added: msgAdded,
136
+ // content: msgContent,
137
+ // files: msgFiles,
138
+ // fromId: msgFromId,
139
+ // read: msgRead,
140
+ // saved: msgSaved,
141
+ // toId: msgToId
142
+ // } = updatedMessage;
143
+ // Broadcast to message box
144
+ // if(io) {
145
+ // const msg: MessageType = {
146
+ // added: msgAdded,
147
+ // content: msgContent,
148
+ // files: msgFiles,
149
+ // fromId: msgFromId,
150
+ // id: msgId,
151
+ // read: msgRead,
152
+ // saved: msgSaved,
153
+ // toId: msgToId
154
+ // };
155
+ // io.to(msgToId).emit('message_update', msg);
156
+ // }
157
+ console.log('updatedMessage', updatedMessage);
158
+ return updatedMessage;
159
+ })["catch"](function (error) {
160
+ throw error;
161
+ });
162
+ });
163
+ };
164
+
165
+ exports.updateMessage = updateMessage;
166
+
167
+ var saveMessage = function saveMessage(context, msgId, convoId) {
168
+ var database = context.database,
169
+ sessionId = context.userId;
170
+ var formatId = (0, _utils.parseId)(msgId);
171
+ return (0, _conversations.getConversation)(context, convoId).then(function (conversation) {
172
+ var conversationKey = conversation._key;
173
+ var aqlQry = (0, _arangojs.aql)(_templateObject2(), formatId, conversationKey, sessionId);
174
+ return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
175
+ return cursor.next();
176
+ }).then(function () {
177
+ var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
178
+
179
+ if (!(0, _isEmpty["default"])(message)) {// Broadcast to message box
180
+ // const msg: MessageType = Messages.getMessageObject(message);
181
+ // io.to(message.toId).emit('message_save', msg);
182
+ }
183
+
184
+ return message;
185
+ })["catch"](function (error) {
186
+ throw error;
187
+ });
188
+ });
189
+ };
190
+
191
+ exports.saveMessage = saveMessage;
192
+
193
+ var unsaveMessage = function unsaveMessage(context, msgId, convoId) {
194
+ var database = context.database,
195
+ sessionId = context.userId;
196
+ var formatId = (0, _utils.parseId)(msgId);
197
+ return (0, _conversations.getConversation)(context, convoId).then(function (conversation) {
198
+ var conversationKey = conversation._key;
199
+ var aqlQry = (0, _arangojs.aql)(_templateObject3(), formatId, conversationKey, sessionId);
200
+ return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
201
+ return cursor.next();
202
+ }).then(function () {
203
+ var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
204
+
205
+ if (!(0, _isEmpty["default"])(message)) {// Broadcast to message box
206
+ // const msg: MessageType = Messages.getMessageObject(message);
207
+ // io.to(message.id).emit('message_unsave', msg);
208
+ }
209
+
210
+ return message;
211
+ })["catch"](function (error) {
212
+ throw error;
213
+ });
214
+ });
215
+ };
216
+
217
+ exports.unsaveMessage = unsaveMessage;
218
+
219
+ var deleteMessage = function deleteMessage(context, msgId, convoId) {
220
+ var database = context.database,
221
+ sessionId = context.userId;
222
+ var formatId = (0, _utils.parseId)(msgId);
223
+ return (0, _conversations.getConversation)(context, convoId).then(function (conversation) {
224
+ var conversationKey = conversation._key;
225
+ var aqlQry = (0, _arangojs.aql)(_templateObject4(), formatId, conversationKey, sessionId);
226
+ return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
227
+ return cursor.next();
228
+ }).then(function () {
229
+ var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
230
+
231
+ if (!(0, _isEmpty["default"])(message)) {// Broadcast to message box
232
+ // const msg: MessageType = Messages.getMessageObject(message);
233
+ // io.to(message.toId).emit('message_delete', msg);
234
+ }
235
+
236
+ return message;
237
+ })["catch"](function (error) {
238
+ throw error;
239
+ });
240
+ });
241
+ };
242
+
243
+ exports.deleteMessage = deleteMessage;
244
+
245
+ var getMessage = function getMessage(data) {
246
+ var added = data.added,
247
+ content = data.content,
248
+ convoId = data.convoId,
249
+ files = data.files,
250
+ msgId = data._key,
251
+ read = data.read,
252
+ saved = data.saved,
253
+ userId = data.userId;
254
+ return {
255
+ added: added,
256
+ content: content,
257
+ convoId: convoId,
258
+ files: files,
259
+ msgId: msgId,
260
+ read: read,
261
+ saved: saved,
262
+ userId: userId
263
+ };
264
+ };
265
+
266
+ exports.getMessage = getMessage;
267
+
268
+ var cleanMessages = function cleanMessages(database) {
269
+ // Remove all messages that are over 60 days and not saved
270
+ var aqlQry = (0, _arangojs.aql)(_templateObject5());
271
+ return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
272
+ return cursor.all();
273
+ }).then(function (list) {
274
+ return list.length;
275
+ })["catch"](function (error) {
276
+ throw error;
277
+ });
278
+ };
279
+
280
+ exports.cleanMessages = cleanMessages;
281
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL21lc3NhZ2VzLnRzIl0sIm5hbWVzIjpbImdldE1lc3NhZ2VMaXN0IiwiY29udGV4dCIsImNvbnZvSWQiLCJmcm9tIiwidG8iLCJkYXRhYmFzZSIsImZvcm1hdENvbnZvSWQiLCJ0aGVuIiwiY29udmVyc2F0aW9uIiwiY29udmVyc2F0aW9uS2V5IiwiX2tleSIsImxpbWl0IiwiYXFsUXJ5IiwiYXFsIiwicXVlcnkiLCJjdXJzb3IiLCJhbGwiLCJlcnJvciIsInVwZGF0ZU1lc3NhZ2UiLCJtZXNzYWdlIiwic2Vzc2lvbklkIiwidXNlcklkIiwiZmlsZXMiLCJpbWFnZXMiLCJtc2dJZCIsIkVycm9yIiwibm93IiwiRGF0ZSIsInVwZGF0ZSIsImNvbnRlbnQiLCJtb2RpZmllZCIsImZvcm1hdE1zZ0lkIiwidXBkYXRlZElkIiwiaW5zZXJ0IiwiYWRkZWQiLCJuZXh0IiwidXBkYXRlZE1lc3NhZ2UiLCJjb25zb2xlIiwibG9nIiwic2F2ZU1lc3NhZ2UiLCJmb3JtYXRJZCIsInVuc2F2ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlIiwiZ2V0TWVzc2FnZSIsImRhdGEiLCJyZWFkIiwic2F2ZWQiLCJjbGVhbk1lc3NhZ2VzIiwibGlzdCIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBOztBQUNBOztBQUdBOztBQUNBOztBQU1BOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUVPLElBQU1BLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsQ0FDNUJDLE9BRDRCLEVBRTVCQyxPQUY0QixFQUc1QkMsSUFINEIsRUFJNUJDLEVBSjRCLEVBS0Q7QUFBQSxNQUNwQkMsUUFEb0IsR0FDUkosT0FEUSxDQUNwQkksUUFEb0I7QUFFM0IsTUFBTUMsYUFBcUIsR0FBRyxvQkFBUUosT0FBUixDQUE5QjtBQUVBLFNBQU8sb0NBQWdCRCxPQUFoQixFQUF5QkssYUFBekIs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VndELENBSzFEdEIsS0FMMEQ7QUFBQSxNQU1wREUsS0FOb0QsR0FVeERvQixJQVZ3RCxDQU0xRGxDLElBTjBEO0FBQUEsTUFPMURtQyxJQVAwRCxHQVV4REQsSUFWd0QsQ0FPMURDLElBUDBEO0FBQUEsTUFRMURDLEtBUjBELEdBVXhERixJQVZ3RCxDQVExREUsS0FSMEQ7QUFBQSxNQVMxRHpCLE1BVDBELEdBVXhEdUIsSUFWd0QsQ0FTMUR2QixNQVQwRDtBQVk1RCxTQUFPO0FBQ0xhLElBQUFBLEtBQUssRUFBTEEsS0FESztBQUVMTCxJQUFBQSxPQUFPLEVBQVBBLE9BRks7QUFHTDNCLElBQUFBLE9BQU8sRUFBUEEsT0FISztBQUlMb0IsSUFBQUEsS0FBSyxFQUFMQSxLQUpLO0FBS0xFLElBQUFBLEtBQUssRUFBTEEsS0FMSztBQU1McUIsSUFBQUEsSUFBSSxFQUFKQSxJQU5LO0FBT0xDLElBQUFBLEtBQUssRUFBTEEsS0FQSztBQVFMekIsSUFBQUEsTUFBTSxFQUFOQTtBQVJLLEdBQVA7QUFVRCxDQXRCTTs7OztBQXdCQSxJQUFNMEIsYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixDQUFDMUMsUUFBRCxFQUF1QztBQUNsRTtBQUNBLE1BQU1PLE1BQU0sT0FBR0MsYUFBSCxxQkFBWjtBQUtBLFNBQU8sbUJBQU1SLFFBQU4sRUFBZ0JTLEtBQWhCLENBQXNCRixNQUF0QixFQUNKTCxJQURJLENBQ0MsVUFBQ1EsTUFBRDtBQUFBLFdBQXlCQSxNQUFNLENBQUNDLEdBQVAsRUFBekI7QUFBQSxHQURELEVBRUpULElBRkksQ0FFQyxVQUFDeUMsSUFBRDtBQUFBLFdBQXlCQSxJQUFJLENBQUNDLE1BQTlCO0FBQUEsR0FGRCxXQUdFLFVBQUNoQyxLQUFELEVBQWtCO0FBQ3ZCLFVBQU1BLEtBQU47QUFDRCxHQUxJLENBQVA7QUFNRCxDQWJNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZCwgcGFyc2VWYXJDaGFyfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvYXFsLXF1ZXJ5JztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvY3Vyc29yJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5cbmltcG9ydCB7QXJhbmdvREJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGInO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoJztcbmltcG9ydCB7Q29udmVyc2F0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvY29udmVyc2F0aW9ucyc7XG5pbXBvcnQge01lc3NhZ2VJbnB1dFR5cGUsIE1lc3NhZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9tZXNzYWdlcyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtnZXRDb252ZXJzYXRpb259IGZyb20gJy4vY29udmVyc2F0aW9ucyc7XG5cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdtZXNzYWdlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRNZXNzYWdlTGlzdCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udm9JZDogc3RyaW5nLFxuICBmcm9tOiBudW1iZXIsXG4gIHRvOiBudW1iZXJcbik6IFByb21pc2U8TWVzc2FnZVR5cGVbXT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udm9JZDogc3RyaW5nID0gcGFyc2VJZChjb252b0lkKTtcblxuICByZXR1cm4gZ2V0Q29udmVyc2F0aW9uKGNvbnRleHQsIGZvcm1hdENvbnZvSWQpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge19rZXk6IGNvbnZlcnNhdGlvbktleX0gPSBjb252ZXJzYXRpb247XG4gICAgICBjb25zdCBsaW1pdDogQXJhbmdvREJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgICAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICAgICAgRklMVEVSIG0udG8gPT0gXCIke2NvbnZlcnNhdGlvbktleX1cIlxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFNPUlQgbS5hZGRlZFxuICAgICAgICAgIFJFVFVSTiBtYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZU1lc3NhZ2UgPSAoY29udGV4dDogQXBpQ29udGV4dCwgbWVzc2FnZTogTWVzc2FnZUlucHV0VHlwZSk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCB7Y29udm9JZCwgZmlsZXMsIGltYWdlcywgbXNnSWR9ID0gbWVzc2FnZTtcbiAgY29uc3QgZm9ybWF0Q29udm9JZDogc3RyaW5nID0gcGFyc2VJZChjb252b0lkKTtcblxuICBpZihmb3JtYXRDb252b0lkID09PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfY29udm9JZCcpO1xuICB9XG5cbiAgcmV0dXJuIGdldENvbnZlcnNhdGlvbihjb250ZXh0LCBmb3JtYXRDb252b0lkKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfa2V5OiBjb252ZXJzYXRpb25LZXl9ID0gY29udmVyc2F0aW9uO1xuICAgICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgdXBkYXRlOiBNZXNzYWdlVHlwZSA9IHtcbiAgICAgICAgY29udGVudDogcGFyc2VWYXJDaGFyKG1lc3NhZ2UuY29udGVudCwgNjQwKSxcbiAgICAgICAgY29udm9JZDogZm9ybWF0Q29udm9JZCxcbiAgICAgICAgZmlsZXM6IGZpbGVzIHx8IFtdLFxuICAgICAgICBpbWFnZXM6IGltYWdlcyB8fCBbXSxcbiAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRNc2dJZDogc3RyaW5nID0gcGFyc2VJZChtc2dJZCk7XG4gICAgICBjb25zdCB1cGRhdGVkSWQ6IHN0cmluZyA9IGZvcm1hdE1zZ0lkID09PSAnJyA/IGNyZWF0ZUhhc2goYG1lc3NhZ2UtJHtzZXNzaW9uSWR9YCkgOiBmb3JtYXRNc2dJZDtcbiAgICAgIGNvbnN0IGluc2VydDogTWVzc2FnZVR5cGUgPSB7XG4gICAgICAgIC4uLmNsb25lRGVlcCh1cGRhdGUpLFxuICAgICAgICBfa2V5OiB1cGRhdGVkSWQsXG4gICAgICAgIGFkZGVkOiBub3dcbiAgICAgIH07XG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHt1cGRhdGVkSWR9LCBjb252b0lkOiAke2NvbnZlcnNhdGlvbktleX19XG4gICAgICAgICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgICAgICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICAgICAgICBJTiBtZXNzYWdlcyBSRVRVUk4gTkVXYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAudGhlbigodXBkYXRlZE1lc3NhZ2U6IE1lc3NhZ2VUeXBlID0ge30pID0+IHtcbiAgICAgICAgICAvLyBjb25zdCB7XG4gICAgICAgICAgLy8gICBfa2V5OiBtc2dJZCxcbiAgICAgICAgICAvLyAgIGFkZGVkOiBtc2dBZGRlZCxcbiAgICAgICAgICAvLyAgIGNvbnRlbnQ6IG1zZ0NvbnRlbnQsXG4gICAgICAgICAgLy8gICBmaWxlczogbXNnRmlsZXMsXG4gICAgICAgICAgLy8gICBmcm9tSWQ6IG1zZ0Zyb21JZCxcbiAgICAgICAgICAvLyAgIHJlYWQ6IG1zZ1JlYWQsXG4gICAgICAgICAgLy8gICBzYXZlZDogbXNnU2F2ZWQsXG4gICAgICAgICAgLy8gICB0b0lkOiBtc2dUb0lkXG4gICAgICAgICAgLy8gfSA9IHVwZGF0ZWRNZXNzYWdlO1xuXG4gICAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG1lc3NhZ2UgYm94XG4gICAgICAgICAgLy8gaWYoaW8pIHtcbiAgICAgICAgICAvLyAgIGNvbnN0IG1zZzogTWVzc2FnZVR5cGUgPSB7XG4gICAgICAgICAgLy8gICAgIGFkZGVkOiBtc2dBZGRlZCxcbiAgICAgICAgICAvLyAgICAgY29udGVudDogbXNnQ29udGVudCxcbiAgICAgICAgICAvLyAgICAgZmlsZXM6IG1zZ0ZpbGVzLFxuICAgICAgICAgIC8vICAgICBmcm9tSWQ6IG1zZ0Zyb21JZCxcbiAgICAgICAgICAvLyAgICAgaWQ6IG1zZ0lkLFxuICAgICAgICAgIC8vICAgICByZWFkOiBtc2dSZWFkLFxuICAgICAgICAgIC8vICAgICBzYXZlZDogbXNnU2F2ZWQsXG4gICAgICAgICAgLy8gICAgIHRvSWQ6IG1zZ1RvSWRcbiAgICAgICAgICAvLyAgIH07XG5cbiAgICAgICAgICAvLyAgIGlvLnRvKG1zZ1RvSWQpLmVtaXQoJ21lc3NhZ2VfdXBkYXRlJywgbXNnKTtcbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZE1lc3NhZ2UnLCB1cGRhdGVkTWVzc2FnZSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRNZXNzYWdlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtc2dJZDogc3RyaW5nLCBjb252b0lkOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQobXNnSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb24oY29udGV4dCwgY29udm9JZClcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogY29udmVyc2F0aW9uS2V5fSA9IGNvbnZlcnNhdGlvbjtcbiAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICBGSUxURVIgbS5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIG0udG8gPT0gJHtjb252ZXJzYXRpb25LZXl9XG4gICAgICAgIFVQREFURSBtIFdJVEgge3NhdmVkOiBBUFBFTkQobS5zYXZlZCwgJHtzZXNzaW9uSWR9LCB0cnVlKX0gSU4gbWVzc2FnZXNcbiAgICAgICAgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG1lc3NhZ2U6IE1lc3NhZ2VUeXBlID0ge30pID0+IHtcbiAgICAgICAgICBpZighaXNFbXB0eShtZXNzYWdlKSkge1xuICAgICAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG1lc3NhZ2UgYm94XG4gICAgICAgICAgICAvLyBjb25zdCBtc2c6IE1lc3NhZ2VUeXBlID0gTWVzc2FnZXMuZ2V0TWVzc2FnZU9iamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIGlvLnRvKG1lc3NhZ2UudG9JZCkuZW1pdCgnbWVzc2FnZV9zYXZlJywgbXNnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdW5zYXZlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtc2dJZDogc3RyaW5nLCBjb252b0lkOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQobXNnSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb24oY29udGV4dCwgY29udm9JZClcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogY29udmVyc2F0aW9uS2V5fSA9IGNvbnZlcnNhdGlvbjtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgICAgICBGSUxURVIgbS5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIG0udG8gPT0gJHtjb252ZXJzYXRpb25LZXl9XG4gICAgICAgICAgVVBEQVRFIG0gV0lUSCB7c2F2ZWQ6IFJFTU9WRV9WQUxVRShtLnNhdmVkLCAke3Nlc3Npb25JZH0pfSBJTiBtZXNzYWdlc1xuICAgICAgICAgIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChtZXNzYWdlOiBNZXNzYWdlVHlwZSA9IHt9KSA9PiB7XG4gICAgICAgICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpIHtcbiAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0byBtZXNzYWdlIGJveFxuICAgICAgICAgICAgLy8gY29uc3QgbXNnOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VzLmdldE1lc3NhZ2VPYmplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBpby50byhtZXNzYWdlLmlkKS5lbWl0KCdtZXNzYWdlX3Vuc2F2ZScsIG1zZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZU1lc3NhZ2UgPSAoY29udGV4dDogQXBpQ29udGV4dCwgbXNnSWQ6IHN0cmluZywgY29udm9JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKG1zZ0lkKTtcblxuICByZXR1cm4gZ2V0Q29udmVyc2F0aW9uKGNvbnRleHQsIGNvbnZvSWQpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge19rZXk6IGNvbnZlcnNhdGlvbktleX0gPSBjb252ZXJzYXRpb247XG4gICAgICBjb25zdCBhcWxRcnkgPSBhcWxgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgICAgRklMVEVSIG0uX2tleSA9PSAke2Zvcm1hdElkfSAmJiBtLnRvID09ICR7Y29udmVyc2F0aW9uS2V5fSAmJiBtLmZyb20gPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIFJFTU9WRSBtIElOIG1lc3NhZ2VzXG4gICAgICAgIFJFVFVSTiBPTERgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChtZXNzYWdlOiBNZXNzYWdlVHlwZSA9IHt9KSA9PiB7XG4gICAgICAgICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpIHtcbiAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0byBtZXNzYWdlIGJveFxuICAgICAgICAgICAgLy8gY29uc3QgbXNnOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VzLmdldE1lc3NhZ2VPYmplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBpby50byhtZXNzYWdlLnRvSWQpLmVtaXQoJ21lc3NhZ2VfZGVsZXRlJywgbXNnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWVzc2FnZSA9IChkYXRhOiBNZXNzYWdlVHlwZSk6IE1lc3NhZ2VUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIGFkZGVkLFxuICAgIGNvbnRlbnQsXG4gICAgY29udm9JZCxcbiAgICBmaWxlcyxcbiAgICBfa2V5OiBtc2dJZCxcbiAgICByZWFkLFxuICAgIHNhdmVkLFxuICAgIHVzZXJJZFxuICB9ID0gZGF0YTtcblxuICByZXR1cm4ge1xuICAgIGFkZGVkLFxuICAgIGNvbnRlbnQsXG4gICAgY29udm9JZCxcbiAgICBmaWxlcyxcbiAgICBtc2dJZCxcbiAgICByZWFkLFxuICAgIHNhdmVkLFxuICAgIHVzZXJJZFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFuTWVzc2FnZXMgPSAoZGF0YWJhc2U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIC8vIFJlbW92ZSBhbGwgbWVzc2FnZXMgdGhhdCBhcmUgb3ZlciA2MCBkYXlzIGFuZCBub3Qgc2F2ZWRcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICBGSUxURVIgbS5hZGRlZCA8IERBVEVfVElNRVNUQU1QKERBVEVfU1VCVFJBQ1QoREFURV9OT1coKSwgNjAsICdkYXknKSkgJiYgTEVOR1RIKG0uc2F2ZWQpID4gMFxuICAgICAgUkVNT1ZFIG0gSU4gbWVzc2FnZXNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3Q6IE1lc3NhZ2VUeXBlW10pID0+IGxpc3QubGVuZ3RoKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG4iXX0=
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.clearBadges = exports.pushNotification = exports.getAPNProvider = void 0;
7
+
8
+ var _apn = require("apn");
9
+
10
+ var _config = require("../config");
11
+
12
+ /**
13
+ * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
14
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
15
+ */
16
+ // const eventCategory: string = 'notifications';
17
+ // Push Notifications
18
+ var getAPNProvider = function getAPNProvider() {
19
+ return new _apn.Provider({
20
+ ca: _config.Config.get('app.apn.ca'),
21
+ cert: _config.Config.get('app.apn.cert'),
22
+ key: _config.Config.get('app.apn.key'),
23
+ production: _config.Config.get('environment') === 'prod'
24
+ });
25
+ };
26
+
27
+ exports.getAPNProvider = getAPNProvider;
28
+
29
+ var pushNotification = function pushNotification(deviceTokens, note) {
30
+ // Push notification to device
31
+ var provider = getAPNProvider();
32
+ var notification = new _apn.Notification();
33
+ notification.topic = _config.Config.get('app.apn.id');
34
+ notification.alert = note.message;
35
+
36
+ if (note.data) {
37
+ notification.mutableContent = true;
38
+ notification.payload = note.data;
39
+ }
40
+
41
+ if (note.badge !== undefined) {
42
+ notification.badge = note.badge;
43
+ }
44
+
45
+ return provider.send(notification, deviceTokens);
46
+ };
47
+
48
+ exports.pushNotification = pushNotification;
49
+
50
+ var clearBadges = function clearBadges(deviceTokens) {
51
+ // Push notification to device
52
+ var provider = getAPNProvider();
53
+ var notification = new _apn.Notification();
54
+ notification.badge = 0;
55
+ return provider.send(notification, deviceTokens);
56
+ };
57
+
58
+ exports.clearBadges = clearBadges;
59
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL25vdGlmaWNhdGlvbnMudHMiXSwibmFtZXMiOlsiZ2V0QVBOUHJvdmlkZXIiLCJQcm92aWRlciIsImNhIiwiQ29uZmlnIiwiZ2V0IiwiY2VydCIsImtleSIsInByb2R1Y3Rpb24iLCJwdXNoTm90aWZpY2F0aW9uIiwiZGV2aWNlVG9rZW5zIiwibm90ZSIsInByb3ZpZGVyIiwibm90aWZpY2F0aW9uIiwiQVBOTm90aWZpY2F0aW9uIiwidG9waWMiLCJhbGVydCIsIm1lc3NhZ2UiLCJkYXRhIiwibXV0YWJsZUNvbnRlbnQiLCJwYXlsb2FkIiwiYmFkZ2UiLCJ1bmRlZmluZWQiLCJzZW5kIiwiY2xlYXJCYWRnZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQTs7QUFFQTs7QUFOQTs7OztBQVNBO0FBRUE7QUFDTyxJQUFNQSxjQUFjLEdBQUcsU0FBakJBLGNBQWlCO0FBQUEsU0FBZ0IsSUFBSUMsYUFBSixDQUFhO0FBQ3pEQyxJQUFBQSxFQUFFLEVBQUVDLGVBQU9DLEdBQVAsQ0FBVyxZQUFYLENBRHFEO0FBRXpEQyxJQUFBQSxJQUFJLEVBQUVGLGVBQU9DLEdBQVAsQ0FBVyxjQUFYLENBRm1EO0FBR3pERSxJQUFBQSxHQUFHLEVBQUVILGVBQU9DLEdBQVAsQ0FBVyxhQUFYLENBSG9EO0FBSXpERyxJQUFBQSxVQUFVLEVBQUVKLGVBQU9DLEdBQVAsQ0FBVyxhQUFYLE1BQThCO0FBSmUsR0FBYixDQUFoQjtBQUFBLENBQXZCOzs7O0FBT0EsSUFBTUksZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDQyxZQUFELEVBQXlCQyxJQUF6QixFQUF3RTtBQUN0RztBQUNBLE1BQU1DLFFBQWtCLEdBQUdYLGNBQWMsRUFBekM7QUFDQSxNQUFNWSxZQUE2QixHQUFHLElBQUlDLGlCQUFKLEVBQXRDO0FBQ0FELEVBQUFBLFlBQVksQ0FBQ0UsS0FBYixHQUFxQlgsZUFBT0MsR0FBUCxDQUFXLFlBQVgsQ0FBckI7QUFDQVEsRUFBQUEsWUFBWSxDQUFDRyxLQUFiLEdBQXFCTCxJQUFJLENBQUNNLE9BQTFCOztBQUVBLE1BQUdOLElBQUksQ0FBQ08sSUFBUixFQUFjO0FBQ1pMLElBQUFBLFlBQVksQ0FBQ00sY0FBYixHQUE4QixJQUE5QjtBQUNBTixJQUFBQSxZQUFZLENBQUNPLE9BQWIsR0FBdUJULElBQUksQ0FBQ08sSUFBNUI7QUFDRDs7QUFFRCxNQUFHUCxJQUFJLENBQUNVLEtBQUwsS0FBZUMsU0FBbEIsRUFBNkI7QUFDM0JULElBQUFBLFlBQVksQ0FBQ1EsS0FBYixHQUFxQlYsSUFBSSxDQUFDVSxLQUExQjtBQUNEOztBQUVELFNBQU9ULFFBQVEsQ0FBQ1csSUFBVCxDQUFjVixZQUFkLEVBQTRCSCxZQUE1QixDQUFQO0FBQ0QsQ0FqQk07Ozs7QUFtQkEsSUFBTWMsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ2QsWUFBRCxFQUFnRDtBQUN6RTtBQUNBLE1BQU1FLFFBQVEsR0FBR1gsY0FBYyxFQUEvQjtBQUNBLE1BQU1ZLFlBQVksR0FBRyxJQUFJQyxpQkFBSixFQUFyQjtBQUNBRCxFQUFBQSxZQUFZLENBQUNRLEtBQWIsR0FBcUIsQ0FBckI7QUFFQSxTQUFPVCxRQUFRLENBQUNXLElBQVQsQ0FBY1YsWUFBZCxFQUE0QkgsWUFBNUIsQ0FBUDtBQUNELENBUE0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtOb3RpZmljYXRpb24gYXMgQVBOTm90aWZpY2F0aW9uLCBQcm92aWRlciwgUmVzcG9uc2VzfSBmcm9tICdhcG4nO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7Tm90aWZpY2F0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvbm90aWZpY2F0aW9ucyc7XG5cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdub3RpZmljYXRpb25zJztcblxuLy8gUHVzaCBOb3RpZmljYXRpb25zXG5leHBvcnQgY29uc3QgZ2V0QVBOUHJvdmlkZXIgPSAoKTogUHJvdmlkZXIgPT4gbmV3IFByb3ZpZGVyKHtcbiAgY2E6IENvbmZpZy5nZXQoJ2FwcC5hcG4uY2EnKSxcbiAgY2VydDogQ29uZmlnLmdldCgnYXBwLmFwbi5jZXJ0JyksXG4gIGtleTogQ29uZmlnLmdldCgnYXBwLmFwbi5rZXknKSxcbiAgcHJvZHVjdGlvbjogQ29uZmlnLmdldCgnZW52aXJvbm1lbnQnKSA9PT0gJ3Byb2QnXG59KTtcblxuZXhwb3J0IGNvbnN0IHB1c2hOb3RpZmljYXRpb24gPSAoZGV2aWNlVG9rZW5zOiBzdHJpbmdbXSwgbm90ZTogTm90aWZpY2F0aW9uVHlwZSk6IFByb21pc2U8UmVzcG9uc2VzPiA9PiB7XG4gIC8vIFB1c2ggbm90aWZpY2F0aW9uIHRvIGRldmljZVxuICBjb25zdCBwcm92aWRlcjogUHJvdmlkZXIgPSBnZXRBUE5Qcm92aWRlcigpO1xuICBjb25zdCBub3RpZmljYXRpb246IEFQTk5vdGlmaWNhdGlvbiA9IG5ldyBBUE5Ob3RpZmljYXRpb24oKTtcbiAgbm90aWZpY2F0aW9uLnRvcGljID0gQ29uZmlnLmdldCgnYXBwLmFwbi5pZCcpO1xuICBub3RpZmljYXRpb24uYWxlcnQgPSBub3RlLm1lc3NhZ2U7XG5cbiAgaWYobm90ZS5kYXRhKSB7XG4gICAgbm90aWZpY2F0aW9uLm11dGFibGVDb250ZW50ID0gdHJ1ZTtcbiAgICBub3RpZmljYXRpb24ucGF5bG9hZCA9IG5vdGUuZGF0YTtcbiAgfVxuXG4gIGlmKG5vdGUuYmFkZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgIG5vdGlmaWNhdGlvbi5iYWRnZSA9IG5vdGUuYmFkZ2U7XG4gIH1cblxuICByZXR1cm4gcHJvdmlkZXIuc2VuZChub3RpZmljYXRpb24sIGRldmljZVRva2Vucyk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJCYWRnZXMgPSAoZGV2aWNlVG9rZW5zOiBzdHJpbmdbXSk6IFByb21pc2U8UmVzcG9uc2VzPiA9PiB7XG4gIC8vIFB1c2ggbm90aWZpY2F0aW9uIHRvIGRldmljZVxuICBjb25zdCBwcm92aWRlciA9IGdldEFQTlByb3ZpZGVyKCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbiA9IG5ldyBBUE5Ob3RpZmljYXRpb24oKTtcbiAgbm90aWZpY2F0aW9uLmJhZGdlID0gMDtcblxuICByZXR1cm4gcHJvdmlkZXIuc2VuZChub3RpZmljYXRpb24sIGRldmljZVRva2Vucyk7XG59O1xuIl19