@resolveio/server-lib 1.0.0-rc28 → 1.0.0-rc4

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 (159) hide show
  1. package/collections/active-subscription.collection.js +2 -68
  2. package/collections/app-status.collection.js +2 -43
  3. package/collections/app-version.collection.js +2 -56
  4. package/collections/counter.collection.js +2 -73
  5. package/collections/cron-job-history.collection.js +2 -86
  6. package/collections/cron-job.collection.js +2 -89
  7. package/collections/file.collection.js +2 -73
  8. package/collections/flag.collection.js +2 -47
  9. package/collections/log.collection.js +2 -64
  10. package/collections/logged-in-users.collection.js +2 -70
  11. package/collections/method-call.collection.js +2 -44
  12. package/collections/method-response.collection.js +2 -48
  13. package/collections/queue-flag.collection.js +2 -41
  14. package/collections/queue-method.collection.js +2 -116
  15. package/collections/queue-response.collection.js +2 -78
  16. package/collections/support-ticket.collection.js +2 -146
  17. package/collections/user.collection.js +2 -108
  18. package/cron/cron.js +2 -160
  19. package/fixtures/cron-jobs.js +2 -72
  20. package/fixtures/init.js +2 -73
  21. package/http/auth.js +2 -472
  22. package/http/health.js +2 -8
  23. package/index.js +2 -125
  24. package/managers/cron.manager.js +2 -193
  25. package/managers/method.manager.js +2 -544
  26. package/managers/queue-method.manager.js +2 -239
  27. package/managers/subscription.manager.js +2 -700
  28. package/managers/support.manager.js +2 -208
  29. package/methods/accounts.js +2 -253
  30. package/methods/aws.js +2 -345
  31. package/methods/cloudconvert.js +2 -37
  32. package/methods/collections.js +2 -738
  33. package/methods/counters.js +2 -404
  34. package/methods/cron-jobs.js +2 -63
  35. package/methods/flags.js +2 -6
  36. package/methods/logs.js +2 -29
  37. package/methods/pdf.js +2 -303
  38. package/models/active-subscription.model.js +2 -2
  39. package/models/app-status.model.js +2 -2
  40. package/models/app-version.model.js +2 -2
  41. package/models/collection-document.model.js +2 -2
  42. package/models/counter.model.js +2 -2
  43. package/models/cron-job-history.model.js +2 -2
  44. package/models/cron-job.model.js +2 -2
  45. package/models/dialog.model.js +2 -2
  46. package/models/file.model.js +2 -2
  47. package/models/flag.model.js +2 -2
  48. package/models/log.model.js +2 -2
  49. package/models/logged-in-users.model.js +2 -2
  50. package/models/method-call.model.js +2 -2
  51. package/models/method-response.model.js +2 -2
  52. package/models/method.model.js +2 -2
  53. package/models/pagination.model.js +2 -20
  54. package/models/permission.model.js +2 -2
  55. package/models/queue-method.model.js +2 -2
  56. package/models/queue-response.model.js +2 -2
  57. package/models/select-data-label.model.js +2 -2
  58. package/models/server-response.model.js +2 -2
  59. package/models/subscription.model.js +2 -2
  60. package/models/support-method.model.js +2 -2
  61. package/models/support-ticket.model.js +2 -2
  62. package/models/user.model.js +2 -2
  63. package/package.json +2 -4
  64. package/publications/app-status.js +2 -14
  65. package/publications/app-version.js +2 -14
  66. package/publications/cron-jobs.js +2 -14
  67. package/publications/files.js +2 -71
  68. package/publications/flags.js +2 -23
  69. package/publications/logs.js +2 -26
  70. package/publications/method-calls.js +2 -14
  71. package/publications/method-responses.js +2 -14
  72. package/publications/super-admin.js +2 -21
  73. package/publications/support-tickets.js +2 -118
  74. package/server-app.js +2 -641
  75. package/support-methods/aws.js +2 -276
  76. package/support-methods/collections.js +2 -471
  77. package/support-methods/counters.js +2 -189
  78. package/support-methods/support.js +2 -19
  79. package/util/common.js +2 -334
  80. package/collections/active-subscription.collection.d.ts +0 -8
  81. package/collections/app-status.collection.d.ts +0 -8
  82. package/collections/app-version.collection.d.ts +0 -8
  83. package/collections/counter.collection.d.ts +0 -10
  84. package/collections/cron-job-history.collection.d.ts +0 -8
  85. package/collections/cron-job.collection.d.ts +0 -8
  86. package/collections/file.collection.d.ts +0 -10
  87. package/collections/flag.collection.d.ts +0 -8
  88. package/collections/log.collection.d.ts +0 -8
  89. package/collections/logged-in-users.collection.d.ts +0 -8
  90. package/collections/method-call.collection.d.ts +0 -7
  91. package/collections/method-response.collection.d.ts +0 -7
  92. package/collections/queue-flag.collection.d.ts +0 -8
  93. package/collections/queue-method.collection.d.ts +0 -8
  94. package/collections/queue-response.collection.d.ts +0 -8
  95. package/collections/support-ticket.collection.d.ts +0 -8
  96. package/collections/user.collection.d.ts +0 -9
  97. package/cron/cron.d.ts +0 -6
  98. package/fixtures/cron-jobs.d.ts +0 -2
  99. package/fixtures/init.d.ts +0 -2
  100. package/http/auth.d.ts +0 -3
  101. package/http/health.d.ts +0 -2
  102. package/index.d.ts +0 -17
  103. package/managers/cron.manager.d.ts +0 -17
  104. package/managers/method.manager.d.ts +0 -28
  105. package/managers/queue-method.manager.d.ts +0 -14
  106. package/managers/subscription.manager.d.ts +0 -27
  107. package/managers/support.manager.d.ts +0 -18
  108. package/methods/accounts.d.ts +0 -3
  109. package/methods/aws.d.ts +0 -3
  110. package/methods/cloudconvert.d.ts +0 -3
  111. package/methods/collections.d.ts +0 -3
  112. package/methods/counters.d.ts +0 -3
  113. package/methods/cron-jobs.d.ts +0 -3
  114. package/methods/flags.d.ts +0 -3
  115. package/methods/logs.d.ts +0 -3
  116. package/methods/pdf.d.ts +0 -3
  117. package/models/active-subscription.model.d.ts +0 -14
  118. package/models/app-status.model.d.ts +0 -5
  119. package/models/app-version.model.d.ts +0 -5
  120. package/models/collection-document.model.d.ts +0 -7
  121. package/models/counter.model.d.ts +0 -6
  122. package/models/cron-job-history.model.d.ts +0 -13
  123. package/models/cron-job.model.d.ts +0 -14
  124. package/models/dialog.model.d.ts +0 -24
  125. package/models/file.model.d.ts +0 -10
  126. package/models/flag.model.d.ts +0 -6
  127. package/models/log.model.d.ts +0 -12
  128. package/models/logged-in-users.model.d.ts +0 -10
  129. package/models/method-call.model.d.ts +0 -8
  130. package/models/method-response.model.d.ts +0 -9
  131. package/models/method.model.d.ts +0 -11
  132. package/models/notification.model.d.ts +0 -5
  133. package/models/notification.model.js +0 -2
  134. package/models/pagination.model.d.ts +0 -12
  135. package/models/permission.model.d.ts +0 -13
  136. package/models/queue-method.model.d.ts +0 -10
  137. package/models/queue-response.model.d.ts +0 -11
  138. package/models/select-data-label.model.d.ts +0 -10
  139. package/models/server-response.model.d.ts +0 -6
  140. package/models/subscription.model.d.ts +0 -31
  141. package/models/support-method.model.d.ts +0 -10
  142. package/models/support-ticket.model.d.ts +0 -40
  143. package/models/user.model.d.ts +0 -15
  144. package/publications/app-status.d.ts +0 -3
  145. package/publications/app-version.d.ts +0 -3
  146. package/publications/cron-jobs.d.ts +0 -3
  147. package/publications/files.d.ts +0 -3
  148. package/publications/flags.d.ts +0 -3
  149. package/publications/logs.d.ts +0 -3
  150. package/publications/method-calls.d.ts +0 -3
  151. package/publications/method-responses.d.ts +0 -3
  152. package/publications/super-admin.d.ts +0 -3
  153. package/publications/support-tickets.d.ts +0 -2
  154. package/server-app.d.ts +0 -34
  155. package/support-methods/aws.d.ts +0 -3
  156. package/support-methods/collections.d.ts +0 -3
  157. package/support-methods/counters.d.ts +0 -3
  158. package/support-methods/support.d.ts +0 -3
  159. package/util/common.d.ts +0 -15
package/http/auth.js CHANGED
@@ -1,472 +1,2 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (_) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- var user_collection_1 = require("../collections/user.collection");
39
- var jwt = require("jsonwebtoken");
40
- var handlebars = require("handlebars");
41
- var __1 = require("..");
42
- function setupAuthRoutes(mainServer, app, serverConfig) {
43
- var _this = this;
44
- // Login via HTTP, return refresh token if authenticated
45
- app.post('/login', function (request, response) { return __awaiter(_this, void 0, void 0, function () {
46
- var user_1, username;
47
- return __generator(this, function (_a) {
48
- switch (_a.label) {
49
- case 0:
50
- if (!(request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'])) return [3 /*break*/, 1];
51
- response.send(JSON.stringify({
52
- error: true,
53
- result: 'Invalid header'
54
- }));
55
- return [3 /*break*/, 5];
56
- case 1: return [4 /*yield*/, user_collection_1.Users.findOne({ username: request.body.username }).exec()];
57
- case 2:
58
- user_1 = _a.sent();
59
- if (!!user_1) return [3 /*break*/, 4];
60
- return [4 /*yield*/, user_collection_1.Users.findOne({ email: request.body.username }).exec()];
61
- case 3:
62
- user_1 = _a.sent();
63
- _a.label = 4;
64
- case 4:
65
- username = user_1 ? user_1.username : request.body.username;
66
- user_collection_1.Users.authenticate()(username, request.body.password, function (err, res, error) {
67
- if (error) {
68
- if (error.name === 'TooManyAttemptsError') {
69
- response.send(JSON.stringify({
70
- error: true,
71
- result: error.message + '. A password reset link has been sent to your email, please reset your password.'
72
- }));
73
- user_1.services.forgot_password = jwt.sign({ id_user: user_1._id }, serverConfig['JWT_SECRET']);
74
- var emailData_1 = {
75
- userToChangePassword: user_1.fullname,
76
- userWhoResetPassword: __1.ResolveIOServer.getClientName() + ' System',
77
- url: serverConfig['ROOT_URL'] + '/forgot-password?' + encodeURIComponent(serverConfig['SERVER_URL']) + '&' + user_1.services.forgot_password
78
- };
79
- user_collection_1.Users.updateOne({ _id: user_1._id }, { $set: { services: user_1.services } }).exec(function (errUp, resUp) {
80
- mainServer.getMethodManager().readFile('email-templates/forgot-password.html').then(function (html) {
81
- var template = handlebars.compile(html);
82
- handlebars.registerHelper('equals', function (a, b) {
83
- return a === b;
84
- });
85
- mainServer.getMethodManager().sendEmail(user_1.email, 'ResolveIO (' + __1.ResolveIOServer.getClientName() + ') - Forgot Password', '', template(emailData_1));
86
- }, function (errEmail) { return console.log(errEmail); });
87
- });
88
- }
89
- else {
90
- response.send(JSON.stringify({
91
- error: true,
92
- result: error.message
93
- }));
94
- }
95
- }
96
- else {
97
- if (res && res.active) {
98
- res.resetAttempts(function (errAt, resAt, errorAt) {
99
- response.send(JSON.stringify({
100
- error: false,
101
- result: {
102
- token: jwt.sign({ id_user: res._id }, serverConfig['JWT_SECRET'], {
103
- expiresIn: 90 * 24 * 60 * 60 * 1000 // 90 days
104
- })
105
- }
106
- }));
107
- });
108
- }
109
- }
110
- });
111
- _a.label = 5;
112
- case 5: return [2 /*return*/];
113
- }
114
- });
115
- }); });
116
- app.post('/accessToken', function (request, response) {
117
- return __awaiter(this, void 0, void 0, function () {
118
- return __generator(this, function (_a) {
119
- if (request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_SECONDARY_URL']) {
120
- response.send(JSON.stringify({
121
- error: true,
122
- result: 'Invalid header'
123
- }));
124
- }
125
- else {
126
- if (serverConfig['ROOT_URL'] !== 'http://localhost:4200') {
127
- jwt.verify(request.body.refreshToken, serverConfig['JWT_SECRET'], function (err, decoded) {
128
- if (err) {
129
- response.send(JSON.stringify({
130
- error: true,
131
- result: 'Invalid Token'
132
- }));
133
- }
134
- else {
135
- user_collection_1.Users.findById(decoded['id_user']).exec().then(function (user) {
136
- if (user) {
137
- if (user.active) {
138
- user.resetAttempts(function (errAt, resAt, errorAt) {
139
- user.save();
140
- response.send(JSON.stringify({
141
- error: false,
142
- result: {
143
- token: jwt.sign({ id_user: user._id }, serverConfig['JWT_SECRET'], {
144
- expiresIn: 3 * 24 * 60 * 60 * 1000 // 3 days
145
- }),
146
- user: user
147
- }
148
- }));
149
- });
150
- }
151
- else {
152
- response.send(JSON.stringify({
153
- error: true,
154
- result: 'Account is Disabled'
155
- }));
156
- }
157
- }
158
- else {
159
- response.send(JSON.stringify({
160
- error: true,
161
- result: 'Invalid User'
162
- }));
163
- }
164
- }, function (error) {
165
- response.send(JSON.stringify({
166
- error: true,
167
- result: 'Invalid Mongoose Get User'
168
- }));
169
- });
170
- }
171
- });
172
- }
173
- else {
174
- jwt.verify(request.body.refreshToken, serverConfig['JWT_SECRET'], function (err, decoded) {
175
- if (err) {
176
- response.send(JSON.stringify({
177
- error: true,
178
- result: 'Invalid Token'
179
- }));
180
- }
181
- else {
182
- user_collection_1.Users.findById(decoded['id_user']).exec().then(function (user) {
183
- if (user) {
184
- if (user.active) {
185
- user.resetAttempts(function (errAt, resAt, errorAt) {
186
- user.save();
187
- response.send(JSON.stringify({
188
- error: false,
189
- result: {
190
- token: jwt.sign({ id_user: user._id }, serverConfig['JWT_SECRET'], {
191
- expiresIn: 3 * 24 * 60 * 60 * 1000 // 3 days
192
- }),
193
- user: user
194
- }
195
- }));
196
- });
197
- }
198
- else {
199
- response.send(JSON.stringify({
200
- error: true,
201
- result: 'Account is Disabled'
202
- }));
203
- }
204
- }
205
- else {
206
- response.send(JSON.stringify({
207
- error: true,
208
- result: 'Invalid User'
209
- }));
210
- }
211
- }, function (error) {
212
- response.send(JSON.stringify({
213
- error: true,
214
- result: 'Invalid Mongoose Get User'
215
- }));
216
- });
217
- }
218
- });
219
- }
220
- }
221
- return [2 /*return*/];
222
- });
223
- });
224
- });
225
- app.post('/userWithEnrollmentToken', function (request, response) {
226
- if (request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_SECONDARY_URL']) {
227
- response.send(JSON.stringify({
228
- error: true,
229
- result: 'Invalid header'
230
- }));
231
- }
232
- else {
233
- jwt.verify(request.body.enrollmentToken, serverConfig['JWT_SECRET'], function (err, decoded) {
234
- if (err) {
235
- response.send(JSON.stringify({
236
- error: true,
237
- result: 'Invalid Token'
238
- }));
239
- }
240
- else {
241
- user_collection_1.Users.findOne({
242
- $and: [
243
- { _id: decoded['id_user'] },
244
- { 'services.enrollment': request.body.enrollmentToken }
245
- ]
246
- }).select('_id __v username active').exec().then(function (user) {
247
- if (user) {
248
- if (user.active) {
249
- response.send(JSON.stringify({
250
- error: false,
251
- result: {
252
- user: user
253
- }
254
- }));
255
- }
256
- else {
257
- response.send(JSON.stringify({
258
- error: true,
259
- result: 'Account is Disabled'
260
- }));
261
- }
262
- }
263
- else {
264
- response.send(JSON.stringify({
265
- error: true,
266
- result: 'Invalid User'
267
- }));
268
- }
269
- }, function (error) {
270
- response.send(JSON.stringify({
271
- error: true,
272
- result: 'Invalid Mongoose Get User'
273
- }));
274
- });
275
- }
276
- });
277
- }
278
- });
279
- app.post('/setUserWithEnrollmentToken', function (request, response) {
280
- var _this = this;
281
- if (request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_SECONDARY_URL']) {
282
- response.send(JSON.stringify({
283
- error: true,
284
- result: 'Invalid header'
285
- }));
286
- }
287
- else {
288
- jwt.verify(request.body.enrollmentToken, serverConfig['JWT_SECRET'], function (err, decoded) { return __awaiter(_this, void 0, void 0, function () {
289
- return __generator(this, function (_a) {
290
- if (err) {
291
- response.send(JSON.stringify({
292
- error: true,
293
- result: 'Invalid Token'
294
- }));
295
- }
296
- else {
297
- user_collection_1.Users.findOne({
298
- $and: [
299
- { _id: decoded['id_user'] },
300
- { 'services.enrollment': request.body.enrollmentToken }
301
- ]
302
- }).exec().then(function (user) {
303
- if (user) {
304
- if (user.active) {
305
- user.setPassword(request.body.password, function (errSet, resSet) {
306
- if (resSet) {
307
- user.services.enrollment = '';
308
- user.save();
309
- response.send(JSON.stringify({
310
- error: false,
311
- result: true
312
- }));
313
- }
314
- else {
315
- response.send(JSON.stringify({
316
- error: true,
317
- result: errSet
318
- }));
319
- }
320
- });
321
- }
322
- else {
323
- response.send(JSON.stringify({
324
- error: true,
325
- result: 'Account is Disabled'
326
- }));
327
- }
328
- }
329
- else {
330
- response.send(JSON.stringify({
331
- error: true,
332
- result: 'Invalid User'
333
- }));
334
- }
335
- }, function (error) {
336
- response.send(JSON.stringify({
337
- error: true,
338
- result: 'Invalid Mongoose Get User'
339
- }));
340
- });
341
- }
342
- return [2 /*return*/];
343
- });
344
- }); });
345
- }
346
- });
347
- app.post('/userWithForgotPasswordToken', function (request, response) {
348
- if (request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_SECONDARY_URL']) {
349
- response.send(JSON.stringify({
350
- error: true,
351
- result: 'Invalid header'
352
- }));
353
- }
354
- else {
355
- jwt.verify(request.body.forgotPasswordToken, serverConfig['JWT_SECRET'], function (err, decoded) {
356
- if (err) {
357
- response.send(JSON.stringify({
358
- error: true,
359
- result: 'Invalid Token'
360
- }));
361
- }
362
- else {
363
- user_collection_1.Users.findOne({
364
- $and: [
365
- { _id: decoded['id_user'] },
366
- { 'services.forgot_password': request.body.forgotPasswordToken }
367
- ]
368
- }).select('_id __v username active').exec().then(function (user) {
369
- if (user) {
370
- if (user.active) {
371
- response.send(JSON.stringify({
372
- error: false,
373
- result: {
374
- user: user
375
- }
376
- }));
377
- }
378
- else {
379
- response.send(JSON.stringify({
380
- error: true,
381
- result: 'Account is Disabled'
382
- }));
383
- }
384
- }
385
- else {
386
- response.send(JSON.stringify({
387
- error: true,
388
- result: 'Invalid User'
389
- }));
390
- }
391
- }, function (error) {
392
- response.send(JSON.stringify({
393
- error: true,
394
- result: 'Invalid Mongoose Get User'
395
- }));
396
- });
397
- }
398
- });
399
- }
400
- });
401
- app.post('/setUserWithForgotPasswordToken', function (request, response) {
402
- var _this = this;
403
- if (request.headers.origin !== serverConfig['ROOT_URL'] && request.headers.origin !== serverConfig['SEC_ROOT_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_URL'] && request.headers.origin !== serverConfig['RESOLVEIO_SECONDARY_URL']) {
404
- response.send(JSON.stringify({
405
- error: true,
406
- result: 'Invalid header'
407
- }));
408
- }
409
- else {
410
- jwt.verify(request.body.forgotPasswordToken, serverConfig['JWT_SECRET'], function (err, decoded) { return __awaiter(_this, void 0, void 0, function () {
411
- return __generator(this, function (_a) {
412
- if (err) {
413
- response.send(JSON.stringify({
414
- error: true,
415
- result: 'Invalid Token'
416
- }));
417
- }
418
- else {
419
- user_collection_1.Users.findOne({
420
- $and: [
421
- { _id: decoded['id_user'] },
422
- { 'services.forgot_password': request.body.forgotPasswordToken }
423
- ]
424
- }).exec().then(function (user) {
425
- if (user) {
426
- if (user.active) {
427
- user.setPassword(request.body.password, function (errSet, resSet) {
428
- if (resSet) {
429
- user.services.forgot_password = '';
430
- user.resetAttempts(function (errAt, resAtt, errorAtt) {
431
- user.save();
432
- });
433
- response.send(JSON.stringify({
434
- error: false,
435
- result: true
436
- }));
437
- }
438
- else {
439
- response.send(JSON.stringify({
440
- error: true,
441
- result: errSet
442
- }));
443
- }
444
- });
445
- }
446
- else {
447
- response.send(JSON.stringify({
448
- error: true,
449
- result: 'Account is Disabled'
450
- }));
451
- }
452
- }
453
- else {
454
- response.send(JSON.stringify({
455
- error: true,
456
- result: 'Invalid User'
457
- }));
458
- }
459
- }, function (error) {
460
- response.send(JSON.stringify({
461
- error: true,
462
- result: 'Invalid Mongoose Get User'
463
- }));
464
- });
465
- }
466
- return [2 /*return*/];
467
- });
468
- }); });
469
- }
470
- });
471
- }
472
- exports.setupAuthRoutes = setupAuthRoutes;
1
+ "use strict";var __awaiter=this&&this.__awaiter||function(i,o,a,u){return new(a||(a=Promise))(function(e,r){function n(e){try{t(u.next(e))}catch(e){r(e)}}function s(e){try{t(u.throw(e))}catch(e){r(e)}}function t(r){r.done?e(r.value):new a(function(e){e(r.value)}).then(n,s)}t((u=u.apply(i,o||[])).next())})},__generator=this&&this.__generator||function(n,s){var t,i,o,e,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return e={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(e[Symbol.iterator]=function(){return this}),e;function r(r){return function(e){return function(r){if(t)throw new TypeError("Generator is already executing.");for(;a;)try{if(t=1,i&&(o=2&r[0]?i.return:r[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,r[1])).done)return o;switch(i=0,o&&(r=[2&r[0],o.value]),r[0]){case 0:case 1:o=r;break;case 4:return a.label++,{value:r[1],done:!1};case 5:a.label++,i=r[1],r=[0];continue;case 7:r=a.ops.pop(),a.trys.pop();continue;default:if(!(o=0<(o=a.trys).length&&o[o.length-1])&&(6===r[0]||2===r[0])){a=0;continue}if(3===r[0]&&(!o||r[1]>o[0]&&r[1]<o[3])){a.label=r[1];break}if(6===r[0]&&a.label<o[1]){a.label=o[1],o=r;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(r);break}o[2]&&a.ops.pop(),a.trys.pop();continue}r=s.call(n,a)}catch(e){r=[6,e],i=0}finally{t=o=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,e])}}};Object.defineProperty(exports,"__esModule",{value:!0});var user_collection_1=require("../collections/user.collection"),jwt=require("jsonwebtoken"),handlebars=require("handlebars"),__1=require("..");function setupAuthRoutes(o,e,a){var r=this;e.post("/login",function(n,i){return __awaiter(r,void 0,void 0,function(){var t,r;return __generator(this,function(e){switch(e.label){case 0:return n.headers.origin===a.ROOT_URL||n.headers.origin===a.SEC_ROOT_URL?[3,1]:(i.send(JSON.stringify({error:!0,result:"Invalid header"})),[3,5]);case 1:return[4,user_collection_1.Users.findOne({username:n.body.username}).exec()];case 2:return(t=e.sent())?[3,4]:[4,user_collection_1.Users.findOne({email:n.body.username}).exec()];case 3:t=e.sent(),e.label=4;case 4:r=t?t.username:n.body.username,user_collection_1.Users.authenticate()(r,n.body.password,function(e,s,r){if(r)if("TooManyAttemptsError"===r.name){i.send(JSON.stringify({error:!0,result:r.message+". A password reset link has been sent to your email, please reset your password."})),t.services.forgot_password=jwt.sign({id_user:t._id},a.JWT_SECRET);var n={userToChangePassword:t.fullname,userWhoResetPassword:__1.default.getClientName()+" System",url:a.ROOT_URL+"/forgot-password/"+t.services.forgot_password+"/"};user_collection_1.Users.updateOne({_id:t._id},{$set:{services:t.services}}).exec(function(e,r){o.getMethodManager().readFile("email-templates/forgot-password.html").then(function(e){var r=handlebars.compile(e);handlebars.registerHelper("equals",function(e,r){return e===r}),o.getMethodManager().sendEmail(t.email,"ResolveIO ("+__1.default.getClientName()+") - Forgot Password","",r(n))},function(e){return console.log(e)})})}else i.send(JSON.stringify({error:!0,result:r.message}));else s&&s.active&&s.resetAttempts(function(e,r,n){i.send(JSON.stringify({error:!1,result:{token:jwt.sign({id_user:s._id},a.JWT_SECRET,{expiresIn:7776e6})}}))})}),e.label=5;case 5:return[2]}})})}),e.post("/accessToken",function(r,t){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(e){return r.headers.origin!==a.ROOT_URL&&r.headers.origin!==a.SEC_ROOT_URL&&r.headers.origin!==a.RESOLVEIO_URL&&r.headers.origin!==a.RESOLVEIO_SECONDARY_URL?t.send(JSON.stringify({error:!0,result:"Invalid header"})):"http://localhost:4200"!==a.ROOT_URL?jwt.verify(r.body.refreshToken,a.JWT_SECRET,function(e,r){e?t.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findById(r.id_user).exec().then(function(s){s?s.active?s.resetAttempts(function(e,r,n){s.save(),t.send(JSON.stringify({error:!1,result:{token:jwt.sign({id_user:s._id},a.JWT_SECRET,{expiresIn:2592e5}),user:s}}))}):t.send(JSON.stringify({error:!0,result:"Account is Disabled"})):t.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){t.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))})}):jwt.verify(r.body.refreshToken,a.JWT_SECRET,function(e,r){e?t.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findById(r.id_user).exec().then(function(s){s?s.active?s.resetAttempts(function(e,r,n){s.save(),t.send(JSON.stringify({error:!1,result:{token:jwt.sign({id_user:s._id},a.JWT_SECRET,{expiresIn:2592e5}),user:s}}))}):t.send(JSON.stringify({error:!0,result:"Account is Disabled"})):t.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){t.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))})}),[2]})})}),e.post("/userWithEnrollmentToken",function(n,s){n.headers.origin!==a.ROOT_URL&&n.headers.origin!==a.SEC_ROOT_URL&&n.headers.origin!==a.RESOLVEIO_URL&&n.headers.origin!==a.RESOLVEIO_SECONDARY_URL?s.send(JSON.stringify({error:!0,result:"Invalid header"})):jwt.verify(n.body.enrollmentToken,a.JWT_SECRET,function(e,r){e?s.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findOne({$and:[{_id:r.id_user},{"services.enrollment":n.body.enrollmentToken}]}).select("_id __v username active").exec().then(function(e){e?e.active?s.send(JSON.stringify({error:!1,result:{user:e}})):s.send(JSON.stringify({error:!0,result:"Account is Disabled"})):s.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){s.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))})})}),e.post("/setUserWithEnrollmentToken",function(s,t){var e=this;s.headers.origin!==a.ROOT_URL&&s.headers.origin!==a.SEC_ROOT_URL&&s.headers.origin!==a.RESOLVEIO_URL&&s.headers.origin!==a.RESOLVEIO_SECONDARY_URL?t.send(JSON.stringify({error:!0,result:"Invalid header"})):jwt.verify(s.body.enrollmentToken,a.JWT_SECRET,function(r,n){return __awaiter(e,void 0,void 0,function(){return __generator(this,function(e){return r?t.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findOne({$and:[{_id:n.id_user},{"services.enrollment":s.body.enrollmentToken}]}).exec().then(function(n){n?n.active?n.setPassword(s.body.password,function(e,r){r?(n.services.enrollment="",n.save(),t.send(JSON.stringify({error:!1,result:!0}))):t.send(JSON.stringify({error:!0,result:e}))}):t.send(JSON.stringify({error:!0,result:"Account is Disabled"})):t.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){t.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))}),[2]})})})}),e.post("/userWithForgotPasswordToken",function(n,s){n.headers.origin!==a.ROOT_URL&&n.headers.origin!==a.SEC_ROOT_URL&&n.headers.origin!==a.RESOLVEIO_URL&&n.headers.origin!==a.RESOLVEIO_SECONDARY_URL?s.send(JSON.stringify({error:!0,result:"Invalid header"})):jwt.verify(n.body.forgotPasswordToken,a.JWT_SECRET,function(e,r){e?s.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findOne({$and:[{_id:r.id_user},{"services.forgot_password":n.body.forgotPasswordToken}]}).select("_id __v username active").exec().then(function(e){e?e.active?s.send(JSON.stringify({error:!1,result:{user:e}})):s.send(JSON.stringify({error:!0,result:"Account is Disabled"})):s.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){s.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))})})}),e.post("/setUserWithForgotPasswordToken",function(t,i){var e=this;t.headers.origin!==a.ROOT_URL&&t.headers.origin!==a.SEC_ROOT_URL&&t.headers.origin!==a.RESOLVEIO_URL&&t.headers.origin!==a.RESOLVEIO_SECONDARY_URL?i.send(JSON.stringify({error:!0,result:"Invalid header"})):jwt.verify(t.body.forgotPasswordToken,a.JWT_SECRET,function(r,n){return __awaiter(e,void 0,void 0,function(){return __generator(this,function(e){return r?i.send(JSON.stringify({error:!0,result:"Invalid Token"})):user_collection_1.Users.findOne({$and:[{_id:n.id_user},{"services.forgot_password":t.body.forgotPasswordToken}]}).exec().then(function(s){s?s.active?s.setPassword(t.body.password,function(e,r){r?(s.services.forgot_password="",s.resetAttempts(function(e,r,n){s.save()}),i.send(JSON.stringify({error:!1,result:!0}))):i.send(JSON.stringify({error:!0,result:e}))}):i.send(JSON.stringify({error:!0,result:"Account is Disabled"})):i.send(JSON.stringify({error:!0,result:"Invalid User"}))},function(e){i.send(JSON.stringify({error:!0,result:"Invalid Mongoose Get User"}))}),[2]})})})})}exports.setupAuthRoutes=setupAuthRoutes;
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL2F1dGgudHMiXSwibmFtZXMiOlsidXNlcl9jb2xsZWN0aW9uXzEiLCJyZXF1aXJlIiwiand0IiwiaGFuZGxlYmFycyIsIl9fMSIsInNldHVwQXV0aFJvdXRlcyIsIm1haW5TZXJ2ZXIiLCJhcHAiLCJzZXJ2ZXJDb25maWciLCJfdGhpcyIsInRoaXMiLCJwb3N0IiwicmVxdWVzdCIsInJlc3BvbnNlIiwiX19hd2FpdGVyIiwiaGVhZGVycyIsIm9yaWdpbiIsInNlbmQiLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJyZXN1bHQiLCJVc2VycyIsImZpbmRPbmUiLCJ1c2VybmFtZSIsImJvZHkiLCJleGVjIiwidXNlcl8xIiwiX2EiLCJzZW50IiwiZW1haWwiLCJhdXRoZW50aWNhdGUiLCJwYXNzd29yZCIsImVyciIsInJlcyIsIm5hbWUiLCJtZXNzYWdlIiwic2VydmljZXMiLCJmb3Jnb3RfcGFzc3dvcmQiLCJzaWduIiwiaWRfdXNlciIsIl9pZCIsImVtYWlsRGF0YV8xIiwidXNlclRvQ2hhbmdlUGFzc3dvcmQiLCJmdWxsbmFtZSIsInVzZXJXaG9SZXNldFBhc3N3b3JkIiwiZGVmYXVsdCIsImdldENsaWVudE5hbWUiLCJ1cmwiLCJ1cGRhdGVPbmUiLCIkc2V0IiwiZXJyVXAiLCJyZXNVcCIsImdldE1ldGhvZE1hbmFnZXIiLCJyZWFkRmlsZSIsInRoZW4iLCJodG1sIiwidGVtcGxhdGUiLCJjb21waWxlIiwicmVnaXN0ZXJIZWxwZXIiLCJhIiwiYiIsInNlbmRFbWFpbCIsImVyckVtYWlsIiwiY29uc29sZSIsImxvZyIsImFjdGl2ZSIsInJlc2V0QXR0ZW1wdHMiLCJlcnJBdCIsInJlc0F0IiwiZXJyb3JBdCIsInRva2VuIiwiZXhwaXJlc0luIiwidmVyaWZ5IiwicmVmcmVzaFRva2VuIiwiZGVjb2RlZCIsImZpbmRCeUlkIiwidXNlciIsInNhdmUiLCJlbnJvbGxtZW50VG9rZW4iLCIkYW5kIiwic2VydmljZXMuZW5yb2xsbWVudCIsInNlbGVjdCIsInNldFBhc3N3b3JkIiwiZXJyU2V0IiwicmVzU2V0IiwiZW5yb2xsbWVudCIsImZvcmdvdFBhc3N3b3JkVG9rZW4iLCJzZXJ2aWNlcy5mb3Jnb3RfcGFzc3dvcmQiLCJyZXNBdHQiLCJlcnJvckF0dCIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJvN0NBQUEsSUFBQUEsa0JBQUFDLFFBQUEsa0NBQ0FDLElBQUFELFFBQUEsZ0JBQ0FFLFdBQUFGLFFBQUEsY0FHQUcsSUFBQUgsUUFBQSxNQUVBLFNBQWdCSSxnQkFBZ0JDLEVBQWlDQyxFQUFLQyxHQUF0RSxJQUFBQyxFQUFBQyxLQUVDSCxFQUFJSSxLQUFLLFNBQVUsU0FBT0MsRUFBU0MsR0FBUSxPQUFBQyxVQUFBTCxPQUFBLE9BQUEsRUFBQSxxRkFDdENHLEVBQVFHLFFBQVFDLFNBQVdSLEVBQXVCLFVBQUtJLEVBQVFHLFFBQVFDLFNBQVdSLEVBQTJCLGFBQTdHLENBQUEsRUFBQSxJQUNISyxFQUFTSSxLQUFLQyxLQUFLQyxVQUFVLENBQzVCQyxPQUFPLEVBQ1BDLE9BQVEsa0NBS0UsTUFBQSxDQUFBLEVBQU1yQixrQkFBQXNCLE1BQU1DLFFBQVEsQ0FBQ0MsU0FBVVosRUFBUWEsS0FBS0QsV0FBV0Usc0JBQTlEQyxFQUFPQyxFQUFBQyxRQUVQLENBQUEsRUFBQSxHQUNJLENBQUEsRUFBTTdCLGtCQUFBc0IsTUFBTUMsUUFBUSxDQUFDTyxNQUFPbEIsRUFBUWEsS0FBS0QsV0FBV0UsZUFBM0RDLEVBQU9DLEVBQUFDLHdCQUdKTCxFQUFXRyxFQUFPQSxFQUFLSCxTQUFXWixFQUFRYSxLQUFLRCxTQUVuRHhCLGtCQUFBc0IsTUFBTVMsY0FBTi9CLENBQXFCd0IsRUFBVVosRUFBUWEsS0FBS08sU0FBVSxTQUFDQyxFQUFLQyxFQUFLZCxHQUNoRSxHQUFJQSxFQUNILEdBQW1CLHlCQUFmQSxFQUFNZSxLQUFpQyxDQUMxQ3RCLEVBQVNJLEtBQUtDLEtBQUtDLFVBQVUsQ0FDNUJDLE9BQU8sRUFDUEMsT0FBUUQsRUFBTWdCLFFBQVUs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UixFQUFTSSxLQUFLQyxLQUFLQyxVQUFVLENBQzVCQyxPQUFPLEVBQ1BDLE9BQVEsbUJBR1IsU0FBQUQsR0FDRlAsRUFBU0ksS0FBS0MsS0FBS0MsVUFBVSxDQUM1QkMsT0FBTyxFQUNQQyxPQUFRLDZDQXRhZnNFLFFBQUF0RixnQkFBQUEiLCJmaWxlIjoiaHR0cC9hdXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlcnMgfSBmcm9tICcuLi9jb2xsZWN0aW9ucy91c2VyLmNvbGxlY3Rpb24nO1xuaW1wb3J0ICogYXMgand0IGZyb20gJ2pzb253ZWJ0b2tlbic7XG5pbXBvcnQgKiBhcyBoYW5kbGViYXJzIGZyb20gJ2hhbmRsZWJhcnMnO1xuaW1wb3J0IHsgTWV0aG9kTWFuYWdlciB9IGZyb20gJy4uL21hbmFnZXJzL21ldGhvZC5tYW5hZ2VyJztcbmltcG9ydCB7IFJlc29sdmVJT01haW5TZXJ2ZXIgfSBmcm9tICcuLi9zZXJ2ZXItYXBwJztcbmltcG9ydCBSZXNvbHZlSU9TZXJ2ZXIgZnJvbSAnLi4nO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBBdXRoUm91dGVzKG1haW5TZXJ2ZXI6IFJlc29sdmVJT01haW5TZXJ2ZXIsIGFwcCwgc2VydmVyQ29uZmlnKSB7XG5cdC8vIExvZ2luIHZpYSBIVFRQLCByZXR1cm4gcmVmcmVzaCB0b2tlbiBpZiBhdXRoZW50aWNhdGVkXG5cdGFwcC5wb3N0KCcvbG9naW4nLCBhc3luYyAocmVxdWVzdCwgcmVzcG9uc2UpID0+IHtcblx0XHRpZiAocmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydST09UX1VSTCddICYmIHJlcXVlc3QuaGVhZGVycy5vcmlnaW4gIT09IHNlcnZlckNvbmZpZ1snU0VDX1JPT1RfVVJMJ10pIHtcblx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBoZWFkZXInXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXG5cdFx0XHRsZXQgdXNlciA9IGF3YWl0IFVzZXJzLmZpbmRPbmUoe3VzZXJuYW1lOiByZXF1ZXN0LmJvZHkudXNlcm5hbWV9KS5leGVjKCk7XG5cblx0XHRcdGlmICghdXNlcikge1xuXHRcdFx0XHR1c2VyID0gYXdhaXQgVXNlcnMuZmluZE9uZSh7ZW1haWw6IHJlcXVlc3QuYm9keS51c2VybmFtZX0pLmV4ZWMoKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0bGV0IHVzZXJuYW1lID0gdXNlciA/IHVzZXIudXNlcm5hbWUgOiByZXF1ZXN0LmJvZHkudXNlcm5hbWU7XG5cblx0XHRcdFVzZXJzLmF1dGhlbnRpY2F0ZSgpKHVzZXJuYW1lLCByZXF1ZXN0LmJvZHkucGFzc3dvcmQsIChlcnIsIHJlcywgZXJyb3IpID0+IHtcblx0XHRcdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRcdFx0aWYgKGVycm9yLm5hbWUgPT09ICdUb29NYW55QXR0ZW1wdHNFcnJvcicpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiBlcnJvci5tZXNzYWdlICsgJy4gIEEgcGFzc3dvcmQgcmVzZXQgbGluayBoYXMgYmVlbiBzZW50IHRvIHlvdXIgZW1haWwsIHBsZWFzZSByZXNldCB5b3VyIHBhc3N3b3JkLidcblx0XHRcdFx0XHRcdH0pKTtcblxuXHRcdFx0XHRcdFx0dXNlci5zZXJ2aWNlcy5mb3Jnb3RfcGFzc3dvcmQgPSBqd3Quc2lnbih7aWRfdXNlcjogdXNlci5faWR9LCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSk7XG5cblx0XHRcdFx0XHRcdGxldCBlbWFpbERhdGEgPSB7XG5cdFx0XHRcdFx0XHRcdHVzZXJUb0NoYW5nZVBhc3N3b3JkOiB1c2VyLmZ1bGxuYW1lLFxuXHRcdFx0XHRcdFx0XHR1c2VyV2hvUmVzZXRQYXNzd29yZDogUmVzb2x2ZUlPU2VydmVyLmdldENsaWVudE5hbWUoKSArICcgU3lzdGVtJyxcblx0XHRcdFx0XHRcdFx0dXJsOiBzZXJ2ZXJDb25maWdbJ1JPT1RfVVJMJ10gKyAnL2ZvcmdvdC1wYXNzd29yZC8nICsgdXNlci5zZXJ2aWNlcy5mb3Jnb3RfcGFzc3dvcmQgKyAnLydcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFVzZXJzLnVwZGF0ZU9uZSh7X2lkOiB1c2VyLl9pZH0sIHskc2V0OiB7c2VydmljZXM6IHVzZXIuc2VydmljZXN9fSkuZXhlYygoZXJyVXAsIHJlc1VwKSA9PiB7XG5cdFx0XHRcdFx0XHRcdG1haW5TZXJ2ZXIuZ2V0TWV0aG9kTWFuYWdlcigpLnJlYWRGaWxlKCdlbWFpbC10ZW1wbGF0ZXMvZm9yZ290LXBhc3N3b3JkLmh0bWwnKS50aGVuKGh0bWwgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGxldCB0ZW1wbGF0ZSA9IGhhbmRsZWJhcnMuY29tcGlsZShodG1sKTtcblx0XHRcdFx0XHRcdFx0XHRoYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdlcXVhbHMnLCAoYSwgYikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGEgPT09IGI7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRtYWluU2VydmVyLmdldE1ldGhvZE1hbmFnZXIoKS5zZW5kRW1haWwodXNlci5lbWFpbCwgJ1Jlc29sdmVJTyAoJyArIFJlc29sdmVJT1NlcnZlci5nZXRDbGllbnROYW1lKCkgKyAnKSAtIEZvcmdvdCBQYXNzd29yZCcsICcnLCB0ZW1wbGF0ZShlbWFpbERhdGEpKTtcblx0XHRcdFx0XHRcdFx0fSwgZXJyRW1haWwgPT4gY29uc29sZS5sb2coZXJyRW1haWwpKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiBlcnJvci5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGlmIChyZXMgJiYgcmVzLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0cmVzLnJlc2V0QXR0ZW1wdHMoKGVyckF0LCByZXNBdCwgZXJyb3JBdCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0b2tlbjogand0LnNpZ24oe2lkX3VzZXI6IHJlcy5faWR9LCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRleHBpcmVzSW4gOiA5MCAqIDI0ICogNjAgKiA2MCAqIDEwMDAgLy8gOTAgZGF5c1xuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cblx0YXBwLnBvc3QoJy9hY2Nlc3NUb2tlbicsIGFzeW5jIGZ1bmN0aW9uIChyZXF1ZXN0LCByZXNwb25zZSkge1xuXHRcdGlmIChyZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JPT1RfVVJMJ10gJiYgcmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydTRUNfUk9PVF9VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19TRUNPTkRBUllfVVJMJ10pIHtcblx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBoZWFkZXInXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYgKHNlcnZlckNvbmZpZ1snUk9PVF9VUkwnXSAhPT0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMCcpIHtcblx0XHRcdFx0and0LnZlcmlmeShyZXF1ZXN0LmJvZHkucmVmcmVzaFRva2VuLCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwgKGVyciwgZGVjb2RlZCkgPT4ge1xuXHRcdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBUb2tlbidcblx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRVc2Vycy5maW5kQnlJZChkZWNvZGVkWydpZF91c2VyJ10pLmV4ZWMoKS50aGVuKCh1c2VyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHVzZXIuYWN0aXZlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnJlc2V0QXR0ZW1wdHMoKGVyckF0LCByZXNBdCwgZXJyb3JBdCkgPT4ge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXIuc2F2ZSgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRva2VuOiBqd3Quc2lnbih7aWRfdXNlcjogdXNlci5faWR9LCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRleHBpcmVzSW4gOiAzICogMjQgKiA2MCAqIDYwICogMTAwMCAvLyAzIGRheXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcjogdXNlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdBY2NvdW50IGlzIERpc2FibGVkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBVc2VyJ1xuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdJbnZhbGlkIE1vbmdvb3NlIEdldCBVc2VyJ1xuXHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVx0XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0and0LnZlcmlmeShyZXF1ZXN0LmJvZHkucmVmcmVzaFRva2VuLCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwgKGVyciwgZGVjb2RlZCkgPT4ge1xuXHRcdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBUb2tlbidcblx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRVc2Vycy5maW5kQnlJZChkZWNvZGVkWydpZF91c2VyJ10pLmV4ZWMoKS50aGVuKCh1c2VyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHVzZXIuYWN0aXZlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnJlc2V0QXR0ZW1wdHMoKGVyckF0LCByZXNBdCwgZXJyb3JBdCkgPT4ge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXIuc2F2ZSgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRva2VuOiBqd3Quc2lnbih7aWRfdXNlcjogdXNlci5faWR9LCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRleHBpcmVzSW4gOiAzICogMjQgKiA2MCAqIDYwICogMTAwMCAvLyAzIGRheXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcjogdXNlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdBY2NvdW50IGlzIERpc2FibGVkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBVc2VyJ1xuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdJbnZhbGlkIE1vbmdvb3NlIEdldCBVc2VyJ1xuXHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0YXBwLnBvc3QoJy91c2VyV2l0aEVucm9sbG1lbnRUb2tlbicsIGZ1bmN0aW9uIChyZXF1ZXN0LCByZXNwb25zZSkge1xuXHRcdGlmIChyZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JPT1RfVVJMJ10gJiYgcmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydTRUNfUk9PVF9VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19TRUNPTkRBUllfVVJMJ10pIHtcblx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBoZWFkZXInXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0and0LnZlcmlmeShyZXF1ZXN0LmJvZHkuZW5yb2xsbWVudFRva2VuLCBzZXJ2ZXJDb25maWdbJ0pXVF9TRUNSRVQnXSwgKGVyciwgZGVjb2RlZCkgPT4ge1xuXHRcdFx0XHRpZiAoZXJyKSB7XG5cdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgVG9rZW4nXG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFVzZXJzLmZpbmRPbmUoe1xuXHRcdFx0XHRcdFx0JGFuZDogW1xuXHRcdFx0XHRcdFx0XHR7X2lkOiBkZWNvZGVkWydpZF91c2VyJ119LFxuXHRcdFx0XHRcdFx0XHR7J3NlcnZpY2VzLmVucm9sbG1lbnQnOiByZXF1ZXN0LmJvZHkuZW5yb2xsbWVudFRva2VufVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH0pLnNlbGVjdCgnX2lkIF9fdiB1c2VybmFtZSBhY3RpdmUnKS5leGVjKCkudGhlbigodXNlcikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHVzZXIpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHVzZXIuYWN0aXZlKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyOiB1c2VyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdBY2NvdW50IGlzIERpc2FibGVkJ1xuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgVXNlcidcblx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBNb25nb29zZSBHZXQgVXNlcidcblx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRhcHAucG9zdCgnL3NldFVzZXJXaXRoRW5yb2xsbWVudFRva2VuJywgZnVuY3Rpb24gKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG5cdFx0aWYgKHJlcXVlc3QuaGVhZGVycy5vcmlnaW4gIT09IHNlcnZlckNvbmZpZ1snUk9PVF9VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1NFQ19ST09UX1VSTCddICYmIHJlcXVlc3QuaGVhZGVycy5vcmlnaW4gIT09IHNlcnZlckNvbmZpZ1snUkVTT0xWRUlPX1VSTCddICYmIHJlcXVlc3QuaGVhZGVycy5vcmlnaW4gIT09IHNlcnZlckNvbmZpZ1snUkVTT0xWRUlPX1NFQ09OREFSWV9VUkwnXSkge1xuXHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRyZXN1bHQ6ICdJbnZhbGlkIGhlYWRlcidcblx0XHRcdH0pKTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRqd3QudmVyaWZ5KHJlcXVlc3QuYm9keS5lbnJvbGxtZW50VG9rZW4sIHNlcnZlckNvbmZpZ1snSldUX1NFQ1JFVCddLCBhc3luYyAoZXJyLCBkZWNvZGVkKSA9PiB7XG5cdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBUb2tlbidcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0VXNlcnMuZmluZE9uZSh7XG5cdFx0XHRcdFx0XHQkYW5kOiBbXG5cdFx0XHRcdFx0XHRcdHtfaWQ6IGRlY29kZWRbJ2lkX3VzZXInXX0sXG5cdFx0XHRcdFx0XHRcdHsnc2VydmljZXMuZW5yb2xsbWVudCc6IHJlcXVlc3QuYm9keS5lbnJvbGxtZW50VG9rZW59XG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSkuZXhlYygpLnRoZW4oKHVzZXIpID0+IHtcblx0XHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHVzZXIuc2V0UGFzc3dvcmQocmVxdWVzdC5ib2R5LnBhc3N3b3JkLCAoZXJyU2V0LCByZXNTZXQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXNTZXQpIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnNlcnZpY2VzLmVucm9sbG1lbnQgID0gJyc7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlci5zYXZlKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiBlcnJTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdBY2NvdW50IGlzIERpc2FibGVkJ1xuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgVXNlcidcblx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBNb25nb29zZSBHZXQgVXNlcidcblx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRhcHAucG9zdCgnL3VzZXJXaXRoRm9yZ290UGFzc3dvcmRUb2tlbicsIGZ1bmN0aW9uIChyZXF1ZXN0LCByZXNwb25zZSkge1xuXHRcdGlmIChyZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JPT1RfVVJMJ10gJiYgcmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydTRUNfUk9PVF9VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19VUkwnXSAmJiByZXF1ZXN0LmhlYWRlcnMub3JpZ2luICE9PSBzZXJ2ZXJDb25maWdbJ1JFU09MVkVJT19TRUNPTkRBUllfVVJMJ10pIHtcblx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBoZWFkZXInXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0and0LnZlcmlmeShyZXF1ZXN0LmJvZHkuZm9yZ290UGFzc3dvcmRUb2tlbiwgc2VydmVyQ29uZmlnWydKV1RfU0VDUkVUJ10sIChlcnIsIGRlY29kZWQpID0+IHtcblx0XHRcdFx0aWYgKGVycikge1xuXHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRyZXN1bHQ6ICdJbnZhbGlkIFRva2VuJ1xuXHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRVc2Vycy5maW5kT25lKHtcblx0XHRcdFx0XHRcdCRhbmQ6IFtcblx0XHRcdFx0XHRcdFx0e19pZDogZGVjb2RlZFsnaWRfdXNlciddfSxcblx0XHRcdFx0XHRcdFx0eydzZXJ2aWNlcy5mb3Jnb3RfcGFzc3dvcmQnOiByZXF1ZXN0LmJvZHkuZm9yZ290UGFzc3dvcmRUb2tlbn1cblx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHR9KS5zZWxlY3QoJ19pZCBfX3YgdXNlcm5hbWUgYWN0aXZlJykuZXhlYygpLnRoZW4oKHVzZXIpID0+IHtcblx0XHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyLmFjdGl2ZSkge1xuXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcjogdXNlclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnQWNjb3VudCBpcyBEaXNhYmxlZCdcblx0XHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdJbnZhbGlkIFVzZXInXG5cdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCBlcnJvciA9PiB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgTW9uZ29vc2UgR2V0IFVzZXInXG5cdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cblx0YXBwLnBvc3QoJy9zZXRVc2VyV2l0aEZvcmdvdFBhc3N3b3JkVG9rZW4nLCBmdW5jdGlvbiAocmVxdWVzdCwgcmVzcG9uc2UpIHtcblx0XHRpZiAocmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydST09UX1VSTCddICYmIHJlcXVlc3QuaGVhZGVycy5vcmlnaW4gIT09IHNlcnZlckNvbmZpZ1snU0VDX1JPT1RfVVJMJ10gJiYgcmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydSRVNPTFZFSU9fVVJMJ10gJiYgcmVxdWVzdC5oZWFkZXJzLm9yaWdpbiAhPT0gc2VydmVyQ29uZmlnWydSRVNPTFZFSU9fU0VDT05EQVJZX1VSTCddKSB7XG5cdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgaGVhZGVyJ1xuXHRcdFx0fSkpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGp3dC52ZXJpZnkocmVxdWVzdC5ib2R5LmZvcmdvdFBhc3N3b3JkVG9rZW4sIHNlcnZlckNvbmZpZ1snSldUX1NFQ1JFVCddLCBhc3luYyAoZXJyLCBkZWNvZGVkKSA9PiB7XG5cdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRyZXNwb25zZS5zZW5kKEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBUb2tlbidcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0VXNlcnMuZmluZE9uZSh7XG5cdFx0XHRcdFx0XHQkYW5kOiBbXG5cdFx0XHRcdFx0XHRcdHtfaWQ6IGRlY29kZWRbJ2lkX3VzZXInXX0sXG5cdFx0XHRcdFx0XHRcdHsnc2VydmljZXMuZm9yZ290X3Bhc3N3b3JkJzogcmVxdWVzdC5ib2R5LmZvcmdvdFBhc3N3b3JkVG9rZW59XG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSkuZXhlYygpLnRoZW4oKHVzZXIpID0+IHtcblx0XHRcdFx0XHRcdGlmICh1c2VyKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh1c2VyLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHVzZXIuc2V0UGFzc3dvcmQocmVxdWVzdC5ib2R5LnBhc3N3b3JkLCAoZXJyU2V0LCByZXNTZXQpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXNTZXQpIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnNlcnZpY2VzLmZvcmdvdF9wYXNzd29yZCAgPSAnJztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VyLnJlc2V0QXR0ZW1wdHMoKGVyckF0LCByZXNBdHQsIGVycm9yQXR0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlci5zYXZlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2VuZChKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiBlcnJTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6ICdBY2NvdW50IGlzIERpc2FibGVkJ1xuXHRcdFx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogJ0ludmFsaWQgVXNlcidcblx0XHRcdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdFx0XHRlcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0cmVzdWx0OiAnSW52YWxpZCBNb25nb29zZSBHZXQgVXNlcidcblx0XHRcdFx0XHRcdH0pKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn0iXX0=
package/http/health.js CHANGED
@@ -1,8 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function setupHealthRoutes(app, serverConfig) {
4
- app.get('/health', function (request, response) {
5
- response.sendStatus(200);
6
- });
7
- }
8
- exports.setupHealthRoutes = setupHealthRoutes;
1
+ "use strict";function setupHealthRoutes(e,t){e.get("/health",function(e,t){t.sendStatus(200)})}Object.defineProperty(exports,"__esModule",{value:!0}),exports.setupHealthRoutes=setupHealthRoutes;
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL2hlYWx0aC50cyJdLCJuYW1lcyI6WyJzZXR1cEhlYWx0aFJvdXRlcyIsImFwcCIsInNlcnZlckNvbmZpZyIsImdldCIsInJlcXVlc3QiLCJyZXNwb25zZSIsInNlbmRTdGF0dXMiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiYUFBQSxTQUFnQkEsa0JBQWtCQyxFQUFLQyxHQUN0Q0QsRUFBSUUsSUFBSSxVQUFXLFNBQVVDLEVBQVNDLEdBQ3JDQSxFQUFTQyxXQUFXLDhEQUZ0QkMsUUFBQVAsa0JBQUFBIiwiZmlsZSI6Imh0dHAvaGVhbHRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNldHVwSGVhbHRoUm91dGVzKGFwcCwgc2VydmVyQ29uZmlnKSB7XG5cdGFwcC5nZXQoJy9oZWFsdGgnLCBmdW5jdGlvbiAocmVxdWVzdCwgcmVzcG9uc2UpIHtcblx0XHRyZXNwb25zZS5zZW5kU3RhdHVzKDIwMCk7XG5cdH0pO1xufSJdfQ==