@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,194 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.sesSend = exports.sendTemplate = exports.sendEmail = exports.appTemplate = void 0;
7
+
8
+ var _awsSdk = _interopRequireWildcard(require("aws-sdk"));
9
+
10
+ var _fs = _interopRequireDefault(require("fs"));
11
+
12
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
13
+
14
+ var _config = require("../config");
15
+
16
+ var _s = require("./s3");
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
19
+
20
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } }
21
+
22
+ /**
23
+ * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
24
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
25
+ */
26
+ // const eventCategory: string = 'email';
27
+ var appTemplate = function appTemplate(app) {
28
+ var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
29
+ var vars = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
30
+ var updatedMessage = '';
31
+
32
+ if (!(0, _isEmpty["default"])(app)) {
33
+ updatedMessage = message.replace(/\[appName\]/g, app.name).replace(/\[appUrl\]/g, app.url).replace(/\[appEmail\]/g, app.email);
34
+ }
35
+
36
+ Object.keys(vars).forEach(function (key) {
37
+ if (vars[key]) {
38
+ updatedMessage = message.replace(new RegExp("\\[".concat(key, "\\]"), 'g'), vars[key]);
39
+ }
40
+ });
41
+ return updatedMessage;
42
+ };
43
+
44
+ exports.appTemplate = appTemplate;
45
+
46
+ var sendEmail = function sendEmail(params) {
47
+ var _params$app = params.app,
48
+ app = _params$app === void 0 ? {} : _params$app,
49
+ html = params.html,
50
+ subject = params.subject,
51
+ _params$subTitle = params.subTitle,
52
+ subTitle = _params$subTitle === void 0 ? '' : _params$subTitle,
53
+ text = params.text,
54
+ _params$title = params.title,
55
+ title = _params$title === void 0 ? '' : _params$title,
56
+ _params$user = params.user,
57
+ user = _params$user === void 0 ? {} : _params$user;
58
+ var to = [user.email];
59
+ var promise;
60
+ var formatSubject = appTemplate(app, subject);
61
+ var formatSubTitle = appTemplate(app, subTitle);
62
+ var formatTitle = appTemplate(app, title);
63
+ var formatText = appTemplate(app, text);
64
+ var formatHtml = appTemplate(app, html);
65
+ var hasCustomEmail = app._key,
66
+ urlFacebook = app.urlFacebook,
67
+ urlTwitter = app.urlTwitter;
68
+
69
+ var parseTemplate = function parseTemplate(body) {
70
+ var templateBody = appTemplate(app, body || ''); // Links
71
+
72
+ var links = '';
73
+ var spacer = '<td width="5"><img width="1" height="1" border="0" title="" alt="" ' + 'src="https://box.reaktor.io/images/email/spacer.gif"/></td>';
74
+
75
+ if (urlFacebook) {
76
+ links = "<td width=\"30\"><a href=\"".concat(urlFacebook, "\"><img width=\"30\" height=\"30\" border=\"0\" ") + 'title="Facebook" alt="Facebook" src="https://box.reaktor.io/images/email/icon-facebook.png"/></a></td>';
77
+ }
78
+
79
+ if (urlTwitter) {
80
+ if (urlFacebook) {
81
+ links += spacer;
82
+ }
83
+
84
+ links += "<td width=\"30\"><a href=\"".concat(urlTwitter, "\"><img width=\"30\" height=\"30\" border=\"0\" ") + 'title="Twitter" alt="Twitter" src="https://box.reaktor.io/images/email/icon-twitter.png"/></a></td>';
85
+ }
86
+
87
+ if (!links.length) {
88
+ links += spacer;
89
+ }
90
+
91
+ return templateBody.replace(/\[title\]/g, formatTitle).replace(/\[subTitle\]/g, formatSubTitle).replace(/\[subject\]/g, formatSubject).replace(/\[message\]/g, formatHtml).replace(/\[links\]/g, links);
92
+ };
93
+
94
+ if (hasCustomEmail) {
95
+ var s3Params = {
96
+ Bucket: null,
97
+ Key: "apps/templates/email.html"
98
+ };
99
+ promise = (0, _s.s3Get)(s3Params).then(function (results) {
100
+ return parseTemplate(results.Body.toString());
101
+ });
102
+ } else {
103
+ promise = new Promise(function (resolve, reject) {
104
+ _fs["default"].readFile('./templates/email/layout.html', 'utf8', function (err, data) {
105
+ if (err) {
106
+ return reject(err);
107
+ }
108
+
109
+ return resolve(parseTemplate(data));
110
+ });
111
+ });
112
+ }
113
+
114
+ return promise.then(function (parsedHtml) {
115
+ var emailParams = {
116
+ Destination: {
117
+ ToAddresses: to
118
+ },
119
+ Message: {
120
+ Body: {
121
+ Html: {
122
+ Data: parsedHtml
123
+ },
124
+ Text: {
125
+ Data: formatText
126
+ }
127
+ },
128
+ Subject: {
129
+ Data: formatSubject
130
+ }
131
+ },
132
+ Source: "\"".concat(app.supportName, "\" <noreply@").concat(_config.Config.get('app.url'), ">")
133
+ };
134
+ return sesSend(emailParams);
135
+ });
136
+ };
137
+
138
+ exports.sendEmail = sendEmail;
139
+
140
+ var sendTemplate = function sendTemplate(templateName, emailParams) {
141
+ var app = emailParams.app,
142
+ user = emailParams.user,
143
+ subject = emailParams.subject,
144
+ subTitle = emailParams.subTitle,
145
+ title = emailParams.title,
146
+ vars = emailParams.vars;
147
+
148
+ try {
149
+ var html = _fs["default"].readFileSync("./templates/email/".concat(templateName, ".html"), 'utf8');
150
+
151
+ var templateHtml = appTemplate(app, html, vars);
152
+
153
+ var text = _fs["default"].readFileSync("./templates/sms/".concat(templateName, ".txt"), 'utf8');
154
+
155
+ var templateText = appTemplate(app, text, vars);
156
+ var params = {
157
+ app: app,
158
+ html: templateHtml,
159
+ subTitle: subTitle,
160
+ subject: subject,
161
+ text: templateText,
162
+ title: title,
163
+ user: user
164
+ };
165
+ return sendEmail(params).then(function () {
166
+ return true;
167
+ })["catch"](function () {
168
+ return false;
169
+ });
170
+ } catch (error) {
171
+ return Promise.reject(error);
172
+ }
173
+ }; // AWS::SES
174
+
175
+
176
+ exports.sendTemplate = sendTemplate;
177
+
178
+ var sesSend = function sesSend(params) {
179
+ return new Promise(function (resolve, reject) {
180
+ _awsSdk["default"].config.update(_config.Config.get('aws'));
181
+
182
+ var ses = new _awsSdk.SES();
183
+ ses.sendEmail(params, function (error, response) {
184
+ if (error) {
185
+ return reject(error);
186
+ }
187
+
188
+ return resolve(response);
189
+ });
190
+ });
191
+ };
192
+
193
+ exports.sesSend = sesSend;
194
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2VtYWlsLnRzIl0sIm5hbWVzIjpbImFwcFRlbXBsYXRlIiwiYXBwIiwibWVzc2FnZSIsInZhcnMiLCJ1cGRhdGVkTWVzc2FnZSIsInJlcGxhY2UiLCJuYW1lIiwidXJsIiwiZW1haWwiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIlJlZ0V4cCIsInNlbmRFbWFpbCIsInBhcmFtcyIsImh0bWwiLCJzdWJqZWN0Iiwic3ViVGl0bGUiLCJ0ZXh0IiwidGl0bGUiLCJ1c2VyIiwidG8iLCJwcm9taXNlIiwiZm9ybWF0U3ViamVjdCIsImZvcm1hdFN1YlRpdGxlIiwiZm9ybWF0VGl0bGUiLCJmb3JtYXRUZXh0IiwiZm9ybWF0SHRtbCIsImhhc0N1c3RvbUVtYWlsIiwiX2tleSIsInVybEZhY2Vib29rIiwidXJsVHdpdHRlciIsInBhcnNlVGVtcGxhdGUiLCJib2R5IiwidGVtcGxhdGVCb2R5IiwibGlua3MiLCJzcGFjZXIiLCJsZW5ndGgiLCJzM1BhcmFtcyIsIkJ1Y2tldCIsIktleSIsInRoZW4iLCJyZXN1bHRzIiwiQm9keSIsInRvU3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmcyIsInJlYWRGaWxlIiwiZXJyIiwiZGF0YSIsInBhcnNlZEh0bWwiLCJlbWFpbFBhcmFtcyIsIkRlc3RpbmF0aW9uIiwiVG9BZGRyZXNzZXMiLCJNZXNzYWdlIiwiSHRtbCIsIkRhdGEiLCJUZXh0IiwiU3ViamVjdCIsIlNvdXJjZSIsInN1cHBvcnROYW1lIiwiQ29uZmlnIiwiZ2V0Iiwic2VzU2VuZCIsInNlbmRUZW1wbGF0ZSIsInRlbXBsYXRlTmFtZSIsInJlYWRGaWxlU3luYyIsInRlbXBsYXRlSHRtbCIsInRlbXBsYXRlVGV4dCIsImVycm9yIiwiYXdzIiwiY29uZmlnIiwidXBkYXRlIiwic2VzIiwiU0VTIiwicmVzcG9uc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQTs7QUFHQTs7QUFDQTs7QUFFQTs7QUFH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TUFBVixFQUFxQjtBQUN0Q3lCLHVCQUFJQyxNQUFKLENBQVdDLE1BQVgsQ0FBa0JYLGVBQU9DLEdBQVAsQ0FBVyxLQUFYLENBQWxCOztBQUNBLFFBQU1XLEdBQVEsR0FBRyxJQUFJQyxXQUFKLEVBQWpCO0FBRUFELElBQUFBLEdBQUcsQ0FBQzlELFNBQUosQ0FBY0MsTUFBZCxFQUFzQixVQUFDeUQsS0FBRCxFQUFlTSxRQUFmLEVBQStDO0FBQ25FLFVBQUdOLEtBQUgsRUFBVTtBQUNSLGVBQU94QixNQUFNLENBQUN3QixLQUFELENBQWI7QUFDRDs7QUFFRCxhQUFPekIsT0FBTyxDQUFDK0IsUUFBRCxDQUFkO0FBQ0QsS0FORDtBQU9ELEdBWE0sQ0FBUDtBQVlELENBYk0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGF3cywge1NFU30gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQge0dldE9iamVjdFJlcXVlc3R9IGZyb20gJ2F3cy1zZGsvY2xpZW50cy9zMyc7XG5pbXBvcnQge1NlbmRFbWFpbFJlcXVlc3QsIFNlbmRFbWFpbFJlc3BvbnNlfSBmcm9tICdhd3Mtc2RrL2NsaWVudHMvc2VzJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtBcHBUeXBlfSBmcm9tICcuLi90eXBlcy9hcHBzJztcbmltcG9ydCB7RW1haWxUeXBlfSBmcm9tICcuLi90eXBlcy9lbWFpbCc7XG5pbXBvcnQge3MzR2V0fSBmcm9tICcuL3MzJztcblxuLy8gY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2VtYWlsJztcblxuZXhwb3J0IGNvbnN0IGFwcFRlbXBsYXRlID0gKGFwcDogQXBwVHlwZSwgbWVzc2FnZTogc3RyaW5nID0gJycsIHZhcnMgPSB7fSk6IHN0cmluZyA9PiB7XG4gIGxldCB1cGRhdGVkTWVzc2FnZTogc3RyaW5nID0gJyc7XG5cbiAgaWYoIWlzRW1wdHkoYXBwKSkge1xuICAgIHVwZGF0ZWRNZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9cXFthcHBOYW1lXFxdL2csIGFwcC5uYW1lKVxuICAgICAgLnJlcGxhY2UoL1xcW2FwcFVybFxcXS9nLCBhcHAudXJsKVxuICAgICAgLnJlcGxhY2UoL1xcW2FwcEVtYWlsXFxdL2csIGFwcC5lbWFpbCk7XG4gIH1cblxuICBPYmplY3Qua2V5cyh2YXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgIGlmKHZhcnNba2V5XSkge1xuICAgICAgdXBkYXRlZE1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXFske2tleX1cXFxcXWAsICdnJyksIHZhcnNba2V5XSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdXBkYXRlZE1lc3NhZ2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZEVtYWlsID0gKHBhcmFtczogRW1haWxUeXBlKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBhcHAgPSB7fSxcbiAgICBodG1sLFxuICAgIHN1YmplY3QsXG4gICAgc3ViVGl0bGUgPSAnJyxcbiAgICB0ZXh0LFxuICAgIHRpdGxlID0gJycsXG4gICAgdXNlciA9IHt9XG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgdG8gPSBbdXNlci5lbWFpbF07XG4gIGxldCBwcm9taXNlO1xuXG4gIGNvbnN0IGZvcm1hdFN1YmplY3Q6IHN0cmluZyA9IGFwcFRlbXBsYXRlKGFwcCwgc3ViamVjdCk7XG4gIGNvbnN0IGZvcm1hdFN1YlRpdGxlOiBzdHJpbmcgPSBhcHBUZW1wbGF0ZShhcHAsIHN1YlRpdGxlKTtcbiAgY29uc3QgZm9ybWF0VGl0bGU6IHN0cmluZyA9IGFwcFRlbXBsYXRlKGFwcCwgdGl0bGUpO1xuICBjb25zdCBmb3JtYXRUZXh0OiBzdHJpbmcgPSBhcHBUZW1wbGF0ZShhcHAsIHRleHQpO1xuICBjb25zdCBmb3JtYXRIdG1sOiBzdHJpbmcgPSBhcHBUZW1wbGF0ZShhcHAsIGh0bWwpO1xuICBjb25zdCB7X2tleTogaGFzQ3VzdG9tRW1haWwsIHVybEZhY2Vib29rLCB1cmxUd2l0dGVyfSA9IGFwcDtcblxuICBjb25zdCBwYXJzZVRlbXBsYXRlID0gKGJvZHk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlQm9keTogc3RyaW5nID0gYXBwVGVtcGxhdGUoYXBwLCBib2R5IHx8ICcnKTtcblxuICAgIC8vIExpbmtzXG4gICAgbGV0IGxpbmtzOiBzdHJpbmcgPSAnJztcbiAgICBjb25zdCBzcGFjZXIgPSAnPHRkIHdpZHRoPVwiNVwiPjxpbWcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMVwiIGJvcmRlcj1cIjBcIiB0aXRsZT1cIlwiIGFsdD1cIlwiICcgK1xuICAgICAgJ3NyYz1cImh0dHBzOi8vYm94LnJlYWt0b3IuaW8vaW1hZ2VzL2VtYWlsL3NwYWNlci5naWZcIi8+PC90ZD4nO1xuXG4gICAgaWYodXJsRmFjZWJvb2spIHtcbiAgICAgIGxpbmtzID0gYDx0ZCB3aWR0aD1cIjMwXCI+PGEgaHJlZj1cIiR7dXJsRmFjZWJvb2t9XCI+PGltZyB3aWR0aD1cIjMwXCIgaGVpZ2h0PVwiMzBcIiBib3JkZXI9XCIwXCIgYCArXG4gICAgICAgICd0aXRsZT1cIkZhY2Vib29rXCIgYWx0PVwiRmFjZWJvb2tcIiBzcmM9XCJodHRwczovL2JveC5yZWFrdG9yLmlvL2ltYWdlcy9lbWFpbC9pY29uLWZhY2Vib29rLnBuZ1wiLz48L2E+PC90ZD4nO1xuICAgIH1cblxuICAgIGlmKHVybFR3aXR0ZXIpIHtcbiAgICAgIGlmKHVybEZhY2Vib29rKSB7XG4gICAgICAgIGxpbmtzICs9IHNwYWNlcjtcbiAgICAgIH1cblxuICAgICAgbGlua3MgKz0gYDx0ZCB3aWR0aD1cIjMwXCI+PGEgaHJlZj1cIiR7dXJsVHdpdHRlcn1cIj48aW1nIHdpZHRoPVwiMzBcIiBoZWlnaHQ9XCIzMFwiIGJvcmRlcj1cIjBcIiBgICtcbiAgICAgICAgJ3RpdGxlPVwiVHdpdHRlclwiIGFsdD1cIlR3aXR0ZXJcIiBzcmM9XCJodHRwczovL2JveC5yZWFrdG9yLmlvL2ltYWdlcy9lbWFpbC9pY29uLXR3aXR0ZXIucG5nXCIvPjwvYT48L3RkPic7XG4gICAgfVxuXG4gICAgaWYoIWxpbmtzLmxlbmd0aCkge1xuICAgICAgbGlua3MgKz0gc3BhY2VyO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZUJvZHkucmVwbGFjZSgvXFxbdGl0bGVcXF0vZywgZm9ybWF0VGl0bGUpXG4gICAgICAucmVwbGFjZSgvXFxbc3ViVGl0bGVcXF0vZywgZm9ybWF0U3ViVGl0bGUpXG4gICAgICAucmVwbGFjZSgvXFxbc3ViamVjdFxcXS9nLCBmb3JtYXRTdWJqZWN0KVxuICAgICAgLnJlcGxhY2UoL1xcW21lc3NhZ2VcXF0vZywgZm9ybWF0SHRtbClcbiAgICAgIC5yZXBsYWNlKC9cXFtsaW5rc1xcXS9nLCBsaW5rcyk7XG4gIH07XG5cbiAgaWYoaGFzQ3VzdG9tRW1haWwpIHtcbiAgICBjb25zdCBzM1BhcmFtczogR2V0T2JqZWN0UmVxdWVzdCA9IHtCdWNrZXQ6IG51bGwsIEtleTogYGFwcHMvdGVtcGxhdGVzL2VtYWlsLmh0bWxgfTtcbiAgICBwcm9taXNlID0gczNHZXQoczNQYXJhbXMpLnRoZW4oKHJlc3VsdHMpID0+IHBhcnNlVGVtcGxhdGUocmVzdWx0cy5Cb2R5LnRvU3RyaW5nKCkpKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZnMucmVhZEZpbGUoJy4vdGVtcGxhdGVzL2VtYWlsL2xheW91dC5odG1sJywgJ3V0ZjgnLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIGlmKGVycikge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNvbHZlKHBhcnNlVGVtcGxhdGUoZGF0YSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZS50aGVuKChwYXJzZWRIdG1sOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBlbWFpbFBhcmFtczogU2VuZEVtYWlsUmVxdWVzdCA9IHtcbiAgICAgIERlc3RpbmF0aW9uOiB7VG9BZGRyZXNzZXM6IHRvfSxcbiAgICAgIE1lc3NhZ2U6IHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIEh0bWw6IHtEYXRhOiBwYXJzZWRIdG1sfSxcbiAgICAgICAgICBUZXh0OiB7RGF0YTogZm9ybWF0VGV4dH1cbiAgICAgICAgfSxcbiAgICAgICAgU3ViamVjdDoge0RhdGE6IGZvcm1hdFN1YmplY3R9XG4gICAgICB9LFxuICAgICAgU291cmNlOiBgXCIke2FwcC5zdXBwb3J0TmFtZX1cIiA8bm9yZXBseUAke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0+YFxuICAgIH07XG5cbiAgICByZXR1cm4gc2VzU2VuZChlbWFpbFBhcmFtcyk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbmRUZW1wbGF0ZSA9ICh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgZW1haWxQYXJhbXM6IEVtYWlsVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7YXBwLCB1c2VyLCBzdWJqZWN0LCBzdWJUaXRsZSwgdGl0bGUsIHZhcnN9OiBFbWFpbFR5cGUgPSBlbWFpbFBhcmFtcztcblxuICB0cnkge1xuICAgIGNvbnN0IGh0bWw6IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhgLi90ZW1wbGF0ZXMvZW1haWwvJHt0ZW1wbGF0ZU5hbWV9Lmh0bWxgLCAndXRmOCcpO1xuICAgIGNvbnN0IHRlbXBsYXRlSHRtbDogc3RyaW5nID0gYXBwVGVtcGxhdGUoYXBwLCBodG1sLCB2YXJzKTtcbiAgICBjb25zdCB0ZXh0OiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYC4vdGVtcGxhdGVzL3Ntcy8ke3RlbXBsYXRlTmFtZX0udHh0YCwgJ3V0ZjgnKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVRleHQ6IHN0cmluZyA9IGFwcFRlbXBsYXRlKGFwcCwgdGV4dCwgdmFycyk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBhcHAsXG4gICAgICBodG1sOiB0ZW1wbGF0ZUh0bWwsXG4gICAgICBzdWJUaXRsZSxcbiAgICAgIHN1YmplY3QsXG4gICAgICB0ZXh0OiB0ZW1wbGF0ZVRleHQsXG4gICAgICB0aXRsZSxcbiAgICAgIHVzZXJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNlbmRFbWFpbChwYXJhbXMpXG4gICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH1cbn07XG5cbi8vIEFXUzo6U0VTXG5leHBvcnQgY29uc3Qgc2VzU2VuZCA9IChwYXJhbXM6IFNlbmRFbWFpbFJlcXVlc3QpOiBQcm9taXNlPFNlbmRFbWFpbFJlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICAgIGNvbnN0IHNlczogU0VTID0gbmV3IFNFUygpO1xuXG4gICAgc2VzLnNlbmRFbWFpbChwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3BvbnNlOiBTZW5kRW1haWxSZXNwb25zZSkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuIl19