@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.
- package/lib/config.js +138 -0
- package/lib/data/conversations.js +228 -0
- package/lib/data/dynamodb.js +172 -0
- package/lib/data/email.js +194 -0
- package/lib/data/files.js +463 -0
- package/lib/data/groups.js +401 -0
- package/lib/data/images.js +841 -0
- package/lib/data/index.js +234 -0
- package/lib/data/ios.js +327 -0
- package/lib/data/locations.js +148 -0
- package/lib/data/messages.js +281 -0
- package/lib/data/notifications.js +59 -0
- package/lib/data/payments.js +798 -0
- package/lib/data/posts.js +637 -0
- package/lib/data/reactions.js +243 -0
- package/lib/data/s3.js +133 -0
- package/lib/data/search.js +111 -0
- package/lib/data/sms.js +79 -0
- package/lib/data/subscription.js +311 -0
- package/lib/data/tags.js +343 -0
- package/lib/data/users.js +415 -0
- package/lib/index.js +42 -0
- package/lib/types/apps.js +2 -0
- package/lib/types/arangodb.js +2 -0
- package/lib/types/auth.js +2 -0
- package/lib/types/conversations.js +2 -0
- package/lib/types/email.js +2 -0
- package/lib/types/files.js +2 -0
- package/lib/types/google.js +2 -0
- package/lib/types/groups.js +2 -0
- package/lib/types/images.js +2 -0
- package/lib/types/index.js +210 -0
- package/lib/types/locations.js +2 -0
- package/lib/types/messages.js +2 -0
- package/lib/types/notifications.js +2 -0
- package/lib/types/payments.js +2 -0
- package/lib/types/posts.js +2 -0
- package/lib/types/reactions.js +2 -0
- package/lib/types/tags.js +2 -0
- package/lib/types/users.js +2 -0
- package/lib/utils/analytics.js +59 -0
- package/lib/utils/arangodb.d.ts +0 -1
- package/lib/utils/arangodb.js +122 -0
- package/lib/utils/auth.d.ts +0 -2
- package/lib/utils/auth.js +55 -0
- package/lib/utils/graphql.js +19 -0
- package/lib/utils/index.js +78 -0
- package/lib/utils/objects.js +54 -0
- package/lib/utils/redis.js +28 -0
- 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2VtYWlsLnRzIl0sIm5hbWVzIjpbImFwcFRlbXBsYXRlIiwiYXBwIiwibWVzc2FnZSIsInZhcnMiLCJ1cGRhdGVkTWVzc2FnZSIsInJlcGxhY2UiLCJuYW1lIiwidXJsIiwiZW1haWwiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIlJlZ0V4cCIsInNlbmRFbWFpbCIsInBhcmFtcyIsImh0bWwiLCJzdWJqZWN0Iiwic3ViVGl0bGUiLCJ0ZXh0IiwidGl0bGUiLCJ1c2VyIiwidG8iLCJwcm9taXNlIiwiZm9ybWF0U3ViamVjdCIsImZvcm1hdFN1YlRpdGxlIiwiZm9ybWF0VGl0bGUiLCJmb3JtYXRUZXh0IiwiZm9ybWF0SHRtbCIsImhhc0N1c3RvbUVtYWlsIiwiX2tleSIsInVybEZhY2Vib29rIiwidXJsVHdpdHRlciIsInBhcnNlVGVtcGxhdGUiLCJib2R5IiwidGVtcGxhdGVCb2R5IiwibGlua3MiLCJzcGFjZXIiLCJsZW5ndGgiLCJzM1BhcmFtcyIsIkJ1Y2tldCIsIktleSIsInRoZW4iLCJyZXN1bHRzIiwiQm9keSIsInRvU3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmcyIsInJlYWRGaWxlIiwiZXJyIiwiZGF0YSIsInBhcnNlZEh0bWwiLCJlbWFpbFBhcmFtcyIsIkRlc3RpbmF0aW9uIiwiVG9BZGRyZXNzZXMiLCJNZXNzYWdlIiwiSHRtbCIsIkRhdGEiLCJUZXh0IiwiU3ViamVjdCIsIlNvdXJjZSIsInN1cHBvcnROYW1lIiwiQ29uZmlnIiwiZ2V0Iiwic2VzU2VuZCIsInNlbmRUZW1wbGF0ZSIsInRlbXBsYXRlTmFtZSIsInJlYWRGaWxlU3luYyIsInRlbXBsYXRlSHRtbCIsInRlbXBsYXRlVGV4dCIsImVycm9yIiwiYXdzIiwiY29uZmlnIiwidXBkYXRlIiwic2VzIiwiU0VTIiwicmVzcG9uc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQTs7QUFHQTs7QUFDQTs7QUFFQTs7QUFHQTs7Ozs7O0FBYkE7Ozs7QUFlQTtBQUVPLElBQU1BLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUNDLEdBQUQsRUFBMkQ7QUFBQSxNQUE1Q0MsT0FBNEMsdUVBQTFCLEVBQTBCO0FBQUEsTUFBdEJDLElBQXNCLHVFQUFmLEVBQWU7QUFDcEYsTUFBSUMsY0FBc0IsR0FBRyxFQUE3Qjs7QUFFQSxNQUFHLENBQUMseUJBQVFILEdBQVIsQ0FBSixFQUFrQjtBQUNoQkcsSUFBQUEsY0FBYyxHQUFHRixPQUFPLENBQUNHLE9BQVIsQ0FBZ0IsY0FBaEIsRUFBZ0NKLEdBQUcsQ0FBQ0ssSUFBcEMsRUFDZEQsT0FEYyxDQUNOLGFBRE0sRUFDU0osR0FBRyxDQUFDTSxHQURiLEVBRWRGLE9BRmMsQ0FFTixlQUZNLEVBRVdKLEdBQUcsQ0FBQ08sS0FGZixDQUFqQjtBQUdEOztBQUVEQyxFQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWVAsSUFBWixFQUFrQlEsT0FBbEIsQ0FBMEIsVUFBQ0MsR0FBRCxFQUFpQjtBQUN6QyxRQUFHVCxJQUFJLENBQUNTLEdBQUQsQ0FBUCxFQUFjO0FBQ1pSLE1BQUFBLGNBQWMsR0FBR0YsT0FBTyxDQUFDRyxPQUFSLENBQWdCLElBQUlRLE1BQUosY0FBaUJELEdBQWpCLFVBQTJCLEdBQTNCLENBQWhCLEVBQWlEVCxJQUFJLENBQUNTLEdBQUQsQ0FBckQsQ0FBakI7QUFDRDtBQUNGLEdBSkQ7QUFNQSxTQUFPUixjQUFQO0FBQ0QsQ0FoQk07Ozs7QUFrQkEsSUFBTVUsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBQ0MsTUFBRCxFQUF5QztBQUFBLG9CQVM1REEsTUFUNEQsQ0FFOURkLEdBRjhEO0FBQUEsTUFFOURBLEdBRjhELDRCQUV4RCxFQUZ3RDtBQUFBLE1BRzlEZSxJQUg4RCxHQVM1REQsTUFUNEQsQ0FHOURDLElBSDhEO0FBQUEsTUFJOURDLE9BSjhELEdBUzVERixNQVQ0RCxDQUk5REUsT0FKOEQ7QUFBQSx5QkFTNURGLE1BVDRELENBSzlERyxRQUw4RDtBQUFBLE1BSzlEQSxRQUw4RCxpQ0FLbkQsRUFMbUQ7QUFBQSxNQU05REMsSUFOOEQsR0FTNURKLE1BVDRELENBTTlESSxJQU44RDtBQUFBLHNCQVM1REosTUFUNEQsQ0FPOURLLEtBUDhEO0FBQUEsTUFPOURBLEtBUDhELDhCQU90RCxFQVBzRDtBQUFBLHFCQVM1REwsTUFUNEQsQ0FROURNLElBUjhEO0FBQUEsTUFROURBLElBUjhELDZCQVF2RCxFQVJ1RDtBQVdoRSxNQUFNQyxFQUFFLEdBQUcsQ0FBQ0QsSUFBSSxDQUFDYixLQUFOLENBQVg7QUFDQSxNQUFJZSxPQUFKO0FBRUEsTUFBTUMsYUFBcUIsR0FBR3hCLFdBQVcsQ0FBQ0MsR0FBRCxFQUFNZ0IsT0FBTixDQUF6QztBQUNBLE1BQU1RLGNBQXNCLEdBQUd6QixXQUFXLENBQUNDLEdBQUQsRUFBTWlCLFFBQU4sQ0FBMUM7QUFDQSxNQUFNUSxXQUFtQixHQUFHMUIsV0FBVyxDQUFDQyxHQUFELEVBQU1tQixLQUFOLENBQXZDO0FBQ0EsTUFBTU8sVUFBa0IsR0FBRzNCLFdBQVcsQ0FBQ0MsR0FBRCxFQUFNa0IsSUFBTixDQUF0QztBQUNBLE1BQU1TLFVBQWtCLEdBQUc1QixXQUFXLENBQUNDLEdBQUQsRUFBTWUsSUFBTixDQUF0QztBQWxCZ0UsTUFtQm5EYSxjQW5CbUQsR0FtQlI1QixHQW5CUSxDQW1CekQ2QixJQW5CeUQ7QUFBQSxNQW1CbkNDLFdBbkJtQyxHQW1CUjlCLEdBbkJRLENBbUJuQzhCLFdBbkJtQztBQUFBLE1BbUJ0QkMsVUFuQnNCLEdBbUJSL0IsR0FuQlEsQ0FtQnRCK0IsVUFuQnNCOztBQXFCaEUsTUFBTUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixDQUFDQyxJQUFELEVBQWtCO0FBQ3RDLFFBQU1DLFlBQW9CLEdBQUduQyxXQUFXLENBQUNDLEdBQUQsRUFBTWlDLElBQUksSUFBSSxFQUFkLENBQXhDLENBRHNDLENBR3RDOztBQUNBLFFBQUlFLEtBQWEsR0FBRyxFQUFwQjtBQUNBLFFBQU1DLE1BQU0sR0FBRyx3RUFDYiw2REFERjs7QUFHQSxRQUFHTixXQUFILEVBQWdCO0FBQ2RLLE1BQUFBLEtBQUssR0FBRyxxQ0FBMkJMLFdBQTNCLHdEQUNOLHdHQURGO0FBRUQ7O0FBRUQsUUFBR0MsVUFBSCxFQUFlO0FBQ2IsVUFBR0QsV0FBSCxFQUFnQjtBQUNkSyxRQUFBQSxLQUFLLElBQUlDLE1BQVQ7QUFDRDs7QUFFREQsTUFBQUEsS0FBSyxJQUFJLHFDQUEyQkosVUFBM0Isd0RBQ1AscUdBREY7QUFFRDs7QUFFRCxRQUFHLENBQUNJLEtBQUssQ0FBQ0UsTUFBVixFQUFrQjtBQUNoQkYsTUFBQUEsS0FBSyxJQUFJQyxNQUFUO0FBQ0Q7O0FBRUQsV0FBT0YsWUFBWSxDQUFDOUIsT0FBYixDQUFxQixZQUFyQixFQUFtQ3FCLFdBQW5DLEVBQ0pyQixPQURJLENBQ0ksZUFESixFQUNxQm9CLGNBRHJCLEVBRUpwQixPQUZJLENBRUksY0FGSixFQUVvQm1CLGFBRnBCLEVBR0puQixPQUhJLENBR0ksY0FISixFQUdvQnVCLFVBSHBCLEVBSUp2QixPQUpJLENBSUksWUFKSixFQUlrQitCLEtBSmxCLENBQVA7QUFLRCxHQS9CRDs7QUFpQ0EsTUFBR1AsY0FBSCxFQUFtQjtBQUNqQixRQUFNVSxRQUEwQixHQUFHO0FBQUNDLE1BQUFBLE1BQU0sRUFBRSxJQUFUO0FBQWVDLE1BQUFBLEdBQUc7QUFBbEIsS0FBbkM7QUFDQWxCLElBQUFBLE9BQU8sR0FBRyxjQUFNZ0IsUUFBTixFQUFnQkcsSUFBaEIsQ0FBcUIsVUFBQ0MsT0FBRDtBQUFBLGFBQWFWLGFBQWEsQ0FBQ1UsT0FBTyxDQUFDQyxJQUFSLENBQWFDLFFBQWIsRUFBRCxDQUExQjtBQUFBLEtBQXJCLENBQVY7QUFDRCxHQUhELE1BR087QUFDTHRCLElBQUFBLE9BQU8sR0FBRyxJQUFJdUIsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUN6Q0MscUJBQUdDLFFBQUgsQ0FBWSwrQkFBWixFQUE2QyxNQUE3QyxFQUFxRCxVQUFDQyxHQUFELEVBQU1DLElBQU4sRUFBZTtBQUNsRSxZQUFHRCxHQUFILEVBQVE7QUFDTixpQkFBT0gsTUFBTSxDQUFDRyxHQUFELENBQWI7QUFDRDs7QUFFRCxlQUFPSixPQUFPLENBQUNkLGFBQWEsQ0FBQ21CLElBQUQsQ0FBZCxDQUFkO0FBQ0QsT0FORDtBQU9ELEtBUlMsQ0FBVjtBQVNEOztBQUVELFNBQU83QixPQUFPLENBQUNtQixJQUFSLENBQWEsVUFBQ1csVUFBRCxFQUF3QjtBQUMxQyxRQUFNQyxXQUE2QixHQUFHO0FBQ3BDQyxNQUFBQSxXQUFXLEVBQUU7QUFBQ0MsUUFBQUEsV0FBVyxFQUFFbEM7QUFBZCxPQUR1QjtBQUVwQ21DLE1BQUFBLE9BQU8sRUFBRTtBQUNQYixRQUFBQSxJQUFJLEVBQUU7QUFDSmMsVUFBQUEsSUFBSSxFQUFFO0FBQUNDLFlBQUFBLElBQUksRUFBRU47QUFBUCxXQURGO0FBRUpPLFVBQUFBLElBQUksRUFBRTtBQUFDRCxZQUFBQSxJQUFJLEVBQUVoQztBQUFQO0FBRkYsU0FEQztBQUtQa0MsUUFBQUEsT0FBTyxFQUFFO0FBQUNGLFVBQUFBLElBQUksRUFBRW5DO0FBQVA7QUFMRixPQUYyQjtBQVNwQ3NDLE1BQUFBLE1BQU0sY0FBTTdELEdBQUcsQ0FBQzhELFdBQVYseUJBQW1DQyxlQUFPQyxHQUFQLENBQVcsU0FBWCxDQUFuQztBQVQ4QixLQUF0QztBQVlBLFdBQU9DLE9BQU8sQ0FBQ1osV0FBRCxDQUFkO0FBQ0QsR0FkTSxDQUFQO0FBZUQsQ0FwRk07Ozs7QUFzRkEsSUFBTWEsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0MsWUFBRCxFQUF1QmQsV0FBdkIsRUFBb0U7QUFBQSxNQUN2RnJELEdBRHVGLEdBQy9CcUQsV0FEK0IsQ0FDdkZyRCxHQUR1RjtBQUFBLE1BQ2xGb0IsSUFEa0YsR0FDL0JpQyxXQUQrQixDQUNsRmpDLElBRGtGO0FBQUEsTUFDNUVKLE9BRDRFLEdBQy9CcUMsV0FEK0IsQ0FDNUVyQyxPQUQ0RTtBQUFBLE1BQ25FQyxRQURtRSxHQUMvQm9DLFdBRCtCLENBQ25FcEMsUUFEbUU7QUFBQSxNQUN6REUsS0FEeUQsR0FDL0JrQyxXQUQrQixDQUN6RGxDLEtBRHlEO0FBQUEsTUFDbERqQixJQURrRCxHQUMvQm1ELFdBRCtCLENBQ2xEbkQsSUFEa0Q7O0FBRzlGLE1BQUk7QUFDRixRQUFNYSxJQUFZLEdBQUdpQyxlQUFHb0IsWUFBSCw2QkFBcUNELFlBQXJDLFlBQTBELE1BQTFELENBQXJCOztBQUNBLFFBQU1FLFlBQW9CLEdBQUd0RSxXQUFXLENBQUNDLEdBQUQsRUFBTWUsSUFBTixFQUFZYixJQUFaLENBQXhDOztBQUNBLFFBQU1nQixJQUFZLEdBQUc4QixlQUFHb0IsWUFBSCwyQkFBbUNELFlBQW5DLFdBQXVELE1BQXZELENBQXJCOztBQUNBLFFBQU1HLFlBQW9CLEdBQUd2RSxXQUFXLENBQUNDLEdBQUQsRUFBTWtCLElBQU4sRUFBWWhCLElBQVosQ0FBeEM7QUFFQSxRQUFNWSxNQUFNLEdBQUc7QUFDYmQsTUFBQUEsR0FBRyxFQUFIQSxHQURhO0FBRWJlLE1BQUFBLElBQUksRUFBRXNELFlBRk87QUFHYnBELE1BQUFBLFFBQVEsRUFBUkEsUUFIYTtBQUliRCxNQUFBQSxPQUFPLEVBQVBBLE9BSmE7QUFLYkUsTUFBQUEsSUFBSSxFQUFFb0QsWUFMTztBQU1ibkQsTUFBQUEsS0FBSyxFQUFMQSxLQU5hO0FBT2JDLE1BQUFBLElBQUksRUFBSkE7QUFQYSxLQUFmO0FBVUEsV0FBT1AsU0FBUyxDQUFDQyxNQUFELENBQVQsQ0FDSjJCLElBREksQ0FDQztBQUFBLGFBQU0sSUFBTjtBQUFBLEtBREQsV0FFRTtBQUFBLGFBQU0sS0FBTjtBQUFBLEtBRkYsQ0FBUDtBQUdELEdBbkJELENBbUJFLE9BQU04QixLQUFOLEVBQWE7QUFDYixXQUFPMUIsT0FBTyxDQUFDRSxNQUFSLENBQWV3QixLQUFmLENBQVA7QUFDRDtBQUNGLENBekJNLEMsQ0EyQlA7Ozs7O0FBQ08sSUFBTU4sT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBQ25ELE1BQUQsRUFBMEQ7QUFDL0UsU0FBTyxJQUFJK0IsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFxQjtBQUN0Q3lCLHVCQUFJQyxNQUFKLENBQVdDLE1BQVgsQ0FBa0JYLGVBQU9DLEdBQVAsQ0FBVyxLQUFYLENBQWxCOztBQUNBLFFBQU1XLEdBQVEsR0FBRyxJQUFJQyxXQUFKLEVBQWpCO0FBRUFELElBQUFBLEdBQUcsQ0FBQzlELFNBQUosQ0FBY0MsTUFBZCxFQUFzQixVQUFDeUQsS0FBRCxFQUFlTSxRQUFmLEVBQStDO0FBQ25FLFVBQUdOLEtBQUgsRUFBVTtBQUNSLGVBQU94QixNQUFNLENBQUN3QixLQUFELENBQWI7QUFDRDs7QUFFRCxhQUFPekIsT0FBTyxDQUFDK0IsUUFBRCxDQUFkO0FBQ0QsS0FORDtBQU9ELEdBWE0sQ0FBUDtBQVlELENBYk0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGF3cywge1NFU30gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQge0dldE9iamVjdFJlcXVlc3R9IGZyb20gJ2F3cy1zZGsvY2xpZW50cy9zMyc7XG5pbXBvcnQge1NlbmRFbWFpbFJlcXVlc3QsIFNlbmRFbWFpbFJlc3BvbnNlfSBmcm9tICdhd3Mtc2RrL2NsaWVudHMvc2VzJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtBcHBUeXBlfSBmcm9tICcuLi90eXBlcy9hcHBzJztcbmltcG9ydCB7RW1haWxUeXBlfSBmcm9tICcuLi90eXBlcy9lbWFpbCc7XG5pbXBvcnQge3MzR2V0fSBmcm9tICcuL3MzJztcblxuLy8gY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2VtYWlsJztcblxuZXhwb3J0IGNvbnN0IGFwcFRlbXBsYXRlID0gKGFwcDogQXBwVHlwZSwgbWVzc2FnZTogc3RyaW5nID0gJycsIHZhcnMgPSB7fSk6IHN0cmluZyA9PiB7XG4gIGxldCB1cGRhdGVkTWVzc2FnZTogc3RyaW5nID0gJyc7XG5cbiAgaWYoIWlzRW1wdHkoYXBwKSkge1xuICAgIHVwZGF0ZWRNZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9cXFthcHBOYW1lXFxdL2csIGFwcC5uYW1lKVxuICAgICAgLnJlcGxhY2UoL1xcW2FwcFVybFxcXS9nLCBhcHAudXJsKVxuICAgICAgLnJlcGxhY2UoL1xcW2FwcEVtYWlsXFxdL2csIGFwcC5lbWFpbCk7XG4gIH1cblxuICBPYmplY3Qua2V5cyh2YXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgIGlmKHZhcnNba2V5XSkge1xuICAgICAgdXBkYXRlZE1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXFske2tleX1cXFxcXWAsICdnJyksIHZhcnNba2V5XSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdXBkYXRlZE1lc3NhZ2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZEVtYWlsID0gKHBhcmFtczogRW1haWxUeXBlKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBhcHAgPSB7fSxcbiAgICBodG1sLFxuICAgIHN1YmplY3QsXG4gICAgc3ViVGl0bGUgPSAnJyxcbiAgICB0ZXh0LFxuICAgIHRpdGxlID0gJycsXG4gICAgdXNlciA9IHt9XG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgdG8gPSBbdXNlci5lbWFpbF07XG4gIGxldCBwcm9taXNlO1xuXG4gIGNvbnN0IGZvcm1hdFN1YmplY3Q6IHN0cmluZyA9IGFwcFRlbXBsYXRlKGFwcCwgc3ViamVjdCk7XG4gIGNvbnN0IGZvcm1hdFN1YlRpdGxlOiBzdHJpbmcgPSBhcHBUZW1wbGF0ZShhcHAsIHN1YlRpdGxlKTtcbiAgY29uc3QgZm9ybWF0VGl0bGU6IHN0cmluZyA9IGFwcFRlbXBsYXRlKGFwcCwgdGl0bGUpO1xuICBjb25zdCBmb3JtYXRUZXh0OiBzdHJpbmcgPSBhcHBUZW1wbGF0ZShhcHAsIHRleHQpO1xuICBjb25zdCBmb3JtYXRIdG1sOiBzdHJpbmcgPSBhcHBUZW1wbGF0ZShhcHAsIGh0bWwpO1xuICBjb25zdCB7X2tleTogaGFzQ3VzdG9tRW1haWwsIHVybEZhY2Vib29rLCB1cmxUd2l0dGVyfSA9IGFwcDtcblxuICBjb25zdCBwYXJzZVRlbXBsYXRlID0gKGJvZHk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlQm9keTogc3RyaW5nID0gYXBwVGVtcGxhdGUoYXBwLCBib2R5IHx8ICcnKTtcblxuICAgIC8vIExpbmtzXG4gICAgbGV0IGxpbmtzOiBzdHJpbmcgPSAnJztcbiAgICBjb25zdCBzcGFjZXIgPSAnPHRkIHdpZHRoPVwiNVwiPjxpbWcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMVwiIGJvcmRlcj1cIjBcIiB0aXRsZT1cIlwiIGFsdD1cIlwiICcgK1xuICAgICAgJ3NyYz1cImh0dHBzOi8vYm94LnJlYWt0b3IuaW8vaW1hZ2VzL2VtYWlsL3NwYWNlci5naWZcIi8+PC90ZD4nO1xuXG4gICAgaWYodXJsRmFjZWJvb2spIHtcbiAgICAgIGxpbmtzID0gYDx0ZCB3aWR0aD1cIjMwXCI+PGEgaHJlZj1cIiR7dXJsRmFjZWJvb2t9XCI+PGltZyB3aWR0aD1cIjMwXCIgaGVpZ2h0PVwiMzBcIiBib3JkZXI9XCIwXCIgYCArXG4gICAgICAgICd0aXRsZT1cIkZhY2Vib29rXCIgYWx0PVwiRmFjZWJvb2tcIiBzcmM9XCJodHRwczovL2JveC5yZWFrdG9yLmlvL2ltYWdlcy9lbWFpbC9pY29uLWZhY2Vib29rLnBuZ1wiLz48L2E+PC90ZD4nO1xuICAgIH1cblxuICAgIGlmKHVybFR3aXR0ZXIpIHtcbiAgICAgIGlmKHVybEZhY2Vib29rKSB7XG4gICAgICAgIGxpbmtzICs9IHNwYWNlcjtcbiAgICAgIH1cblxuICAgICAgbGlua3MgKz0gYDx0ZCB3aWR0aD1cIjMwXCI+PGEgaHJlZj1cIiR7dXJsVHdpdHRlcn1cIj48aW1nIHdpZHRoPVwiMzBcIiBoZWlnaHQ9XCIzMFwiIGJvcmRlcj1cIjBcIiBgICtcbiAgICAgICAgJ3RpdGxlPVwiVHdpdHRlclwiIGFsdD1cIlR3aXR0ZXJcIiBzcmM9XCJodHRwczovL2JveC5yZWFrdG9yLmlvL2ltYWdlcy9lbWFpbC9pY29uLXR3aXR0ZXIucG5nXCIvPjwvYT48L3RkPic7XG4gICAgfVxuXG4gICAgaWYoIWxpbmtzLmxlbmd0aCkge1xuICAgICAgbGlua3MgKz0gc3BhY2VyO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZUJvZHkucmVwbGFjZSgvXFxbdGl0bGVcXF0vZywgZm9ybWF0VGl0bGUpXG4gICAgICAucmVwbGFjZSgvXFxbc3ViVGl0bGVcXF0vZywgZm9ybWF0U3ViVGl0bGUpXG4gICAgICAucmVwbGFjZSgvXFxbc3ViamVjdFxcXS9nLCBmb3JtYXRTdWJqZWN0KVxuICAgICAgLnJlcGxhY2UoL1xcW21lc3NhZ2VcXF0vZywgZm9ybWF0SHRtbClcbiAgICAgIC5yZXBsYWNlKC9cXFtsaW5rc1xcXS9nLCBsaW5rcyk7XG4gIH07XG5cbiAgaWYoaGFzQ3VzdG9tRW1haWwpIHtcbiAgICBjb25zdCBzM1BhcmFtczogR2V0T2JqZWN0UmVxdWVzdCA9IHtCdWNrZXQ6IG51bGwsIEtleTogYGFwcHMvdGVtcGxhdGVzL2VtYWlsLmh0bWxgfTtcbiAgICBwcm9taXNlID0gczNHZXQoczNQYXJhbXMpLnRoZW4oKHJlc3VsdHMpID0+IHBhcnNlVGVtcGxhdGUocmVzdWx0cy5Cb2R5LnRvU3RyaW5nKCkpKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZnMucmVhZEZpbGUoJy4vdGVtcGxhdGVzL2VtYWlsL2xheW91dC5odG1sJywgJ3V0ZjgnLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIGlmKGVycikge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNvbHZlKHBhcnNlVGVtcGxhdGUoZGF0YSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZS50aGVuKChwYXJzZWRIdG1sOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBlbWFpbFBhcmFtczogU2VuZEVtYWlsUmVxdWVzdCA9IHtcbiAgICAgIERlc3RpbmF0aW9uOiB7VG9BZGRyZXNzZXM6IHRvfSxcbiAgICAgIE1lc3NhZ2U6IHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIEh0bWw6IHtEYXRhOiBwYXJzZWRIdG1sfSxcbiAgICAgICAgICBUZXh0OiB7RGF0YTogZm9ybWF0VGV4dH1cbiAgICAgICAgfSxcbiAgICAgICAgU3ViamVjdDoge0RhdGE6IGZvcm1hdFN1YmplY3R9XG4gICAgICB9LFxuICAgICAgU291cmNlOiBgXCIke2FwcC5zdXBwb3J0TmFtZX1cIiA8bm9yZXBseUAke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0+YFxuICAgIH07XG5cbiAgICByZXR1cm4gc2VzU2VuZChlbWFpbFBhcmFtcyk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbmRUZW1wbGF0ZSA9ICh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgZW1haWxQYXJhbXM6IEVtYWlsVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7YXBwLCB1c2VyLCBzdWJqZWN0LCBzdWJUaXRsZSwgdGl0bGUsIHZhcnN9OiBFbWFpbFR5cGUgPSBlbWFpbFBhcmFtcztcblxuICB0cnkge1xuICAgIGNvbnN0IGh0bWw6IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhgLi90ZW1wbGF0ZXMvZW1haWwvJHt0ZW1wbGF0ZU5hbWV9Lmh0bWxgLCAndXRmOCcpO1xuICAgIGNvbnN0IHRlbXBsYXRlSHRtbDogc3RyaW5nID0gYXBwVGVtcGxhdGUoYXBwLCBodG1sLCB2YXJzKTtcbiAgICBjb25zdCB0ZXh0OiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYC4vdGVtcGxhdGVzL3Ntcy8ke3RlbXBsYXRlTmFtZX0udHh0YCwgJ3V0ZjgnKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVRleHQ6IHN0cmluZyA9IGFwcFRlbXBsYXRlKGFwcCwgdGV4dCwgdmFycyk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBhcHAsXG4gICAgICBodG1sOiB0ZW1wbGF0ZUh0bWwsXG4gICAgICBzdWJUaXRsZSxcbiAgICAgIHN1YmplY3QsXG4gICAgICB0ZXh0OiB0ZW1wbGF0ZVRleHQsXG4gICAgICB0aXRsZSxcbiAgICAgIHVzZXJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNlbmRFbWFpbChwYXJhbXMpXG4gICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH1cbn07XG5cbi8vIEFXUzo6U0VTXG5leHBvcnQgY29uc3Qgc2VzU2VuZCA9IChwYXJhbXM6IFNlbmRFbWFpbFJlcXVlc3QpOiBQcm9taXNlPFNlbmRFbWFpbFJlc3BvbnNlPiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXdzLmNvbmZpZy51cGRhdGUoQ29uZmlnLmdldCgnYXdzJykpO1xuICAgIGNvbnN0IHNlczogU0VTID0gbmV3IFNFUygpO1xuXG4gICAgc2VzLnNlbmRFbWFpbChwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3BvbnNlOiBTZW5kRW1haWxSZXNwb25zZSkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuIl19
|