@resolveio/server-lib 1.0.0-rc4 → 1.0.0-rc6
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/collections/active-subscription.collection.d.ts +8 -0
- package/collections/active-subscription.collection.js +68 -2
- package/collections/app-status.collection.d.ts +8 -0
- package/collections/app-status.collection.js +43 -2
- package/collections/app-version.collection.d.ts +8 -0
- package/collections/app-version.collection.js +56 -2
- package/collections/counter.collection.d.ts +10 -0
- package/collections/counter.collection.js +73 -2
- package/collections/cron-job-history.collection.d.ts +8 -0
- package/collections/cron-job-history.collection.js +86 -2
- package/collections/cron-job.collection.d.ts +8 -0
- package/collections/cron-job.collection.js +89 -2
- package/collections/file.collection.d.ts +10 -0
- package/collections/file.collection.js +73 -2
- package/collections/flag.collection.d.ts +8 -0
- package/collections/flag.collection.js +47 -2
- package/collections/log.collection.d.ts +8 -0
- package/collections/log.collection.js +64 -2
- package/collections/logged-in-users.collection.d.ts +8 -0
- package/collections/logged-in-users.collection.js +70 -2
- package/collections/method-call.collection.d.ts +7 -0
- package/collections/method-call.collection.js +44 -2
- package/collections/method-response.collection.d.ts +7 -0
- package/collections/method-response.collection.js +48 -2
- package/collections/queue-flag.collection.d.ts +8 -0
- package/collections/queue-flag.collection.js +41 -2
- package/collections/queue-method.collection.d.ts +8 -0
- package/collections/queue-method.collection.js +116 -2
- package/collections/queue-response.collection.d.ts +8 -0
- package/collections/queue-response.collection.js +78 -2
- package/collections/support-ticket.collection.d.ts +8 -0
- package/collections/support-ticket.collection.js +146 -2
- package/collections/user.collection.d.ts +9 -0
- package/collections/user.collection.js +108 -2
- package/cron/cron.d.ts +6 -0
- package/cron/cron.js +160 -2
- package/fixtures/cron-jobs.d.ts +2 -0
- package/fixtures/cron-jobs.js +72 -2
- package/fixtures/init.d.ts +2 -0
- package/fixtures/init.js +73 -2
- package/http/auth.d.ts +3 -0
- package/http/auth.js +472 -2
- package/http/health.d.ts +2 -0
- package/http/health.js +8 -2
- package/index.d.ts +14 -0
- package/index.js +97 -2
- package/managers/cron.manager.d.ts +17 -0
- package/managers/cron.manager.js +193 -2
- package/managers/method.manager.d.ts +27 -0
- package/managers/method.manager.js +513 -2
- package/managers/queue-method.manager.d.ts +14 -0
- package/managers/queue-method.manager.js +239 -2
- package/managers/subscription.manager.d.ts +27 -0
- package/managers/subscription.manager.js +700 -2
- package/managers/support.manager.d.ts +18 -0
- package/managers/support.manager.js +208 -2
- package/methods/accounts.d.ts +3 -0
- package/methods/accounts.js +253 -2
- package/methods/aws.d.ts +3 -0
- package/methods/aws.js +323 -2
- package/methods/cloudconvert.d.ts +3 -0
- package/methods/cloudconvert.js +37 -2
- package/methods/collections.d.ts +3 -0
- package/methods/collections.js +738 -2
- package/methods/counters.d.ts +3 -0
- package/methods/counters.js +404 -2
- package/methods/cron-jobs.d.ts +3 -0
- package/methods/cron-jobs.js +63 -2
- package/methods/flags.d.ts +3 -0
- package/methods/flags.js +6 -2
- package/methods/logs.d.ts +3 -0
- package/methods/logs.js +29 -2
- package/methods/pdf.d.ts +3 -0
- package/methods/pdf.js +303 -2
- package/models/active-subscription.model.d.ts +14 -0
- package/models/active-subscription.model.js +2 -2
- package/models/app-status.model.d.ts +5 -0
- package/models/app-status.model.js +2 -2
- package/models/app-version.model.d.ts +5 -0
- package/models/app-version.model.js +2 -2
- package/models/collection-document.model.d.ts +7 -0
- package/models/collection-document.model.js +2 -2
- package/models/counter.model.d.ts +6 -0
- package/models/counter.model.js +2 -2
- package/models/cron-job-history.model.d.ts +13 -0
- package/models/cron-job-history.model.js +2 -2
- package/models/cron-job.model.d.ts +14 -0
- package/models/cron-job.model.js +2 -2
- package/models/dialog.model.d.ts +24 -0
- package/models/dialog.model.js +2 -2
- package/models/file.model.d.ts +10 -0
- package/models/file.model.js +2 -2
- package/models/flag.model.d.ts +6 -0
- package/models/flag.model.js +2 -2
- package/models/log.model.d.ts +12 -0
- package/models/log.model.js +2 -2
- package/models/logged-in-users.model.d.ts +10 -0
- package/models/logged-in-users.model.js +2 -2
- package/models/method-call.model.d.ts +8 -0
- package/models/method-call.model.js +2 -2
- package/models/method-response.model.d.ts +9 -0
- package/models/method-response.model.js +2 -2
- package/models/method.model.d.ts +11 -0
- package/models/method.model.js +2 -2
- package/models/pagination.model.d.ts +12 -0
- package/models/pagination.model.js +20 -2
- package/models/permission.model.d.ts +13 -0
- package/models/permission.model.js +2 -2
- package/models/queue-method.model.d.ts +10 -0
- package/models/queue-method.model.js +2 -2
- package/models/queue-response.model.d.ts +11 -0
- package/models/queue-response.model.js +2 -2
- package/models/select-data-label.model.d.ts +10 -0
- package/models/select-data-label.model.js +2 -2
- package/models/server-response.model.d.ts +6 -0
- package/models/server-response.model.js +2 -2
- package/models/subscription.model.d.ts +31 -0
- package/models/subscription.model.js +2 -2
- package/models/support-method.model.d.ts +10 -0
- package/models/support-method.model.js +2 -2
- package/models/support-ticket.model.d.ts +40 -0
- package/models/support-ticket.model.js +2 -2
- package/models/user.model.d.ts +15 -0
- package/models/user.model.js +2 -2
- package/package.json +3 -1
- package/publications/app-status.d.ts +3 -0
- package/publications/app-status.js +14 -2
- package/publications/app-version.d.ts +3 -0
- package/publications/app-version.js +14 -2
- package/publications/cron-jobs.d.ts +3 -0
- package/publications/cron-jobs.js +14 -2
- package/publications/files.d.ts +3 -0
- package/publications/files.js +71 -2
- package/publications/flags.d.ts +3 -0
- package/publications/flags.js +23 -2
- package/publications/logs.d.ts +3 -0
- package/publications/logs.js +26 -2
- package/publications/method-calls.d.ts +3 -0
- package/publications/method-calls.js +14 -2
- package/publications/method-responses.d.ts +3 -0
- package/publications/method-responses.js +14 -2
- package/publications/super-admin.d.ts +3 -0
- package/publications/super-admin.js +21 -2
- package/publications/support-tickets.d.ts +2 -0
- package/publications/support-tickets.js +118 -2
- package/server-app.d.ts +33 -0
- package/server-app.js +598 -2
- package/support-methods/aws.d.ts +3 -0
- package/support-methods/aws.js +276 -2
- package/support-methods/collections.d.ts +3 -0
- package/support-methods/collections.js +471 -2
- package/support-methods/counters.d.ts +3 -0
- package/support-methods/counters.js +189 -2
- package/support-methods/support.d.ts +3 -0
- package/support-methods/support.js +19 -2
- package/util/common.d.ts +15 -0
- package/util/common.js +334 -2
|
@@ -1,2 +1,513 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2Vycy9tZXRob2QubWFuYWdlci50cyJdLCJuYW1lcyI6WyJjb2xsZWN0aW9uc18xIiwicmVxdWlyZSIsImxvZ3NfMSIsImNvdW50ZXJzXzEiLCJwZGZfMSIsImF3c18xIiwiY2xvdWRjb252ZXJ0XzEiLCJwYXRoIiwiZnMiLCJub2RlbWFpbGVyIiwiYXdzIiwiYWNjb3VudHNfMSIsImluaXRfMSIsImNyb25fam9ic18xIiwiY3Jvbl9qb2JzXzIiLCJmbGFnc18xIiwibWV0aG9kX3Jlc3BvbnNlX2NvbGxlY3Rpb25fMSIsIm1vbmdvb3NlXzEiLCJjb21tb25fMSIsImxvZ19jb2xsZWN0aW9uXzEiLCJNZXRob2RNYW5hZ2VyIiwibWFpblNlcnZlciIsInNlcnZlckNvbmZpZyIsIl90aGlzIiwidGhpcyIsIl9tZXRob2RzIiwiX3NlbmRRdWV1ZSIsIl9ydW5uaW5nUXVldWUiLCJfbWFpblNlcnZlciIsImxvYWRTZXJ2ZXJJbml0IiwibG9hZFNlcnZlckNyb25Kb2JzIiwibG9hZEFjY291bnRNZXRob2RzIiwibG9hZEFXU01ldGhvZHMiLCJsb2FkQ2xvdWRDb252ZXJ0TWV0aG9kcyIsImxvYWRDb2xsZWN0aW9uTWV0aG9kcyIsImxvYWRDb3VudGVyTWV0aG9kcyIsImxvYWRMb2dNZXRob2RzIiwibG9hZFBERk1ldGhvZHMiLCJsb2FkQ3JvbkpvYk1ldGhvZHMiLCJsb2FkRmxhZ01ldGhvZHMiLCJfbWFpbGVyIiwiY3JlYXRlVHJhbnNwb3J0IiwiU0VTIiwiYXBpVmVyc2lvbiIsImFjY2Vzc0tleUlkIiwiQVdTQUNDRVNTS0VZSUQiLCJzZWNyZXRBY2Nlc3NLZXkiLCJBV1NTRUNSRVRBQ0NFU1NLRVkiLCJyZWdpb24iLCJBV1NTRVNfUkVHSU9OIiwiX2F3cyIsIlMzIiwiQVdTUkVHSU9OIiwic2V0SW50ZXJ2YWwiLCJsZW5ndGgiLCJpIiwid3MiLCJnZXRXUyIsImlkX3dzIiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJidWZmZXJlZEFtb3VudCIsInNlbmRJdGVtIiwicG9wIiwic2VuZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhIiwiZXJyb3IiLCJjb25zb2xlIiwibG9nIiwidW5zdWJzY3JpYmVXUyIsIm1ldGhvZCIsImdldEJpbmFyeVNpemUiLCJtZXRob2REYXRhIiwiTG9ncyIsImNyZWF0ZSIsIl9pZCIsIlR5cGVzIiwiT2JqZWN0SWQiLCJ0b0hleFN0cmluZyIsImRhdGUiLCJEYXRlIiwidHlwZSIsInRpdGxlIiwibWVzc2FnZSIsIm1lc3NhZ2VJZCIsInBheWxvYWQiLCJ1c2VyIiwiTWV0aG9kUmVzcG9uc2VzIiwiX192IiwiaWRfdXNlciIsIm1lc3NhZ2VfaWQiLCJyZXNwb25zZSIsInNwbGljZSIsInByb3RvdHlwZSIsImdldE1haW5TZXJ2ZXIiLCJtZXRob2RzIiwiT2JqZWN0IiwiYXNzaWduIiwiY2FsbE1ldGhvZENyb24iLCJfaSIsImFyZ3VtZW50cyIsInRoYXQiLCJzZW5kRW1haWwiLCJza2lwVmFsaWRhdGlvbiIsImNoZWNrIiwiX3NjaGVtYSIsInZhbE9iaiIsInJvb3RLZXlzIiwia2V5cyIsImZpbHRlciIsImEiLCJpbmNsdWRlcyIsInZhbGlkYXRlIiwiZXJyb3JzIiwiX2EiLCJmdW5jdGlvbiIsImNhbGwiLCJhcHBseSIsImNvbmNhdCIsImNhbGxNZXRob2RRdWV1ZSIsInVwZGF0ZSIsInVwZGF0ZUNvcHkiLCJkZWVwQ29weSIsIm1ldGhvZF9kYXRhIiwic2VydmVyUmVzIiwiaGFzRXJyb3IiLCJnZXRRdWV1ZU1hbmFnZXIiLCJhZGRNZXRob2RSZXNwb25zZSIsInRoZW4iLCJyZXMiLCJlcnIiLCJjYWxsTWV0aG9kIiwic2VuZFdTIiwiY2FsbE1ldGhvZEludGVybmFsIiwicHJvbWlzZSIsInNlbmRUbyIsInN1YmplY3QiLCJ0ZXh0IiwiaHRtbCIsImF0dGFjaG1lbnRzIiwic2VuZE1haWwiLCJyZXBseVRvIiwidW5kZWZpbmVkIiwiZnJvbSIsIk1BSUxfRlJPTSIsInRvIiwiaW5mbyIsImdldEFXUyIsInJlYWRGaWxlIiwiZmlsZU5hbWUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJyZWFkSW1hZ2UiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoib0VBQ0EsSUFBQUEsY0FBQUMsUUFBQSwwQkFFQUMsT0FBQUQsUUFBQSxtQkFDQUUsV0FBQUYsUUFBQSx1QkFDQUcsTUFBQUgsUUFBQSxrQkFDQUksTUFBQUosUUFBQSxrQkFDQUssZUFBQUwsUUFBQSwyQkFDQU0sS0FBQU4sUUFBQSxRQUNBTyxHQUFBUCxRQUFBLE1BQ0FRLFdBQUFSLFFBQUEsY0FFQVMsSUFBQVQsUUFBQSxXQUNBVSxXQUFBVixRQUFBLHVCQUNBVyxPQUFBWCxRQUFBLG9CQUNBWSxZQUFBWixRQUFBLHlCQUNBYSxZQUFBYixRQUFBLHdCQUNBYyxRQUFBZCxRQUFBLG9CQUVBZSw2QkFBQWYsUUFBQSw2Q0FDQWdCLFdBQUFoQixRQUFBLFlBQ0FpQixTQUFBakIsUUFBQSxrQkFDQWtCLGlCQUFBbEIsUUFBQSxpQ0FHQW1CLGNBQUEsV0FZQyxTQUFBQSxFQUFZQyxFQUFZQyxHQUF4QixJQUFBQyxFQUFBQyxLQVRPQSxLQUFBQyxTQUF3QixHQU12QkQsS0FBQUUsV0FBYSxHQUNiRixLQUFBRyxlQUFnQixFQUd2QkgsS0FBS0ksWUFBY1AsRUFFbkJHLEtBQUtGLGFBQWVBLEVBR3BCVixPQUFBaUIsaUJBQ0FoQixZQUFBaUIscUJBR0FuQixXQUFBb0IsbUJBQW1CUCxNQUNuQm5CLE1BQUEyQixlQUFlUixNQUNmbEIsZUFBQTJCLHdCQUF3QlQsTUFDeEJ4QixjQUFBa0Msc0JBQXNCVixNQUN0QnJCLFdBQUFnQyxtQkFBbUJYLE1BQ25CdEIsT0FBQWtDLGVBQWVaLE1BQ2ZwQixNQUFBaUMsZUFBZWIsTUFDZlYsWUFBQXdCLG1CQUFtQmQsTUFDbkJULFFBQUF3QixnQkFBZ0JmLE1BRWhCQSxLQUFLZ0IsUUFBVS9CLFdBQVdnQyxnQkFBZ0IsQ0FDekNDLElBQUssSUFBSWhDLElBQUlnQyxJQUFJLENBQ2hCQyxXQUFZLGFB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QUNIc0IsRUFBT3RCLEdBR1BxQixFQUFRdEIsUUFLYi9HLEVBM2tCQSxHQUFhMEksUUFBQTFJLGNBQUFBIiwiZmlsZSI6Im1hbmFnZXJzL21ldGhvZC5tYW5hZ2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VydmVyUmVzcG9uc2VNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zZXJ2ZXItcmVzcG9uc2UubW9kZWwnO1xuaW1wb3J0IHsgbG9hZENvbGxlY3Rpb25NZXRob2RzIH0gZnJvbSAnLi4vbWV0aG9kcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBNZXRob2RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9tZXRob2QubW9kZWwnO1xuaW1wb3J0IHsgbG9hZExvZ01ldGhvZHMgfSBmcm9tICcuLi9tZXRob2RzL2xvZ3MnO1xuaW1wb3J0IHsgbG9hZENvdW50ZXJNZXRob2RzIH0gZnJvbSAnLi4vbWV0aG9kcy9jb3VudGVycyc7XG5pbXBvcnQgeyBsb2FkUERGTWV0aG9kcyB9IGZyb20gJy4uL21ldGhvZHMvcGRmJztcbmltcG9ydCB7IGxvYWRBV1NNZXRob2RzIH0gZnJvbSAnLi4vbWV0aG9kcy9hd3MnO1xuaW1wb3J0IHsgbG9hZENsb3VkQ29udmVydE1ldGhvZHMgfSBmcm9tICcuLi9tZXRob2RzL2Nsb3VkY29udmVydCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgbm9kZW1haWxlciBmcm9tICdub2RlbWFpbGVyJztcbmltcG9ydCAqIGFzIGltYXAgZnJvbSAnaW1hcCc7XG5pbXBvcnQgKiBhcyBhd3MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgeyBsb2FkQWNjb3VudE1ldGhvZHMgfSBmcm9tICcuLi9tZXRob2RzL2FjY291bnRzJztcbmltcG9ydCB7IGxvYWRTZXJ2ZXJJbml0IH0gZnJvbSAnLi4vZml4dHVyZXMvaW5pdCc7XG5pbXBvcnQgeyBsb2FkU2VydmVyQ3JvbkpvYnMgfSBmcm9tICcuLi9maXh0dXJlcy9jcm9uLWpvYnMnO1xuaW1wb3J0IHsgbG9hZENyb25Kb2JNZXRob2RzIH0gZnJvbSAnLi4vbWV0aG9kcy9jcm9uLWpvYnMnO1xuaW1wb3J0IHsgbG9hZEZsYWdNZXRob2RzIH0gZnJvbSAnLi4vbWV0aG9kcy9mbGFncyc7XG5pbXBvcnQgeyBRdWV1ZU1ldGhvZE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3F1ZXVlLW1ldGhvZC5tb2RlbCc7XG5pbXBvcnQgeyBNZXRob2RSZXNwb25zZXMgfSBmcm9tICcuLi9jb2xsZWN0aW9ucy9tZXRob2QtcmVzcG9uc2UuY29sbGVjdGlvbic7XG5pbXBvcnQgeyBUeXBlcyB9IGZyb20gJ21vbmdvb3NlJztcbmltcG9ydCB7IGRlZXBDb3B5LCBnZXRCaW5hcnlTaXplIH0gZnJvbSAnLi4vdXRpbC9jb21tb24nO1xuaW1wb3J0IHsgTG9ncyB9IGZyb20gJy4uL2NvbGxlY3Rpb25zL2xvZy5jb2xsZWN0aW9uJztcbmltcG9ydCB7IFJlc29sdmVJT01haW5TZXJ2ZXIgfSBmcm9tICcuLi9zZXJ2ZXItYXBwJztcblxuZXhwb3J0IGNsYXNzIE1ldGhvZE1hbmFnZXIge1xuXG5cdHByaXZhdGUgX21haW5TZXJ2ZXI6IFJlc29sdmVJT01haW5TZXJ2ZXI7XG5cdHB1YmxpYyBfbWV0aG9kczogTWV0aG9kTW9kZWwgPSB7fTtcblx0cHJpdmF0ZSBfbWFpbGVyOiBub2RlbWFpbGVyLlRyYW5zcG9ydGVyO1xuXHRwcml2YXRlIF9pbWFwOiBpbWFwO1xuXHRwcml2YXRlIF9hd3M6IGF3cy5TMztcblx0cHJpdmF0ZSBzZXJ2ZXJDb25maWc7XG5cblx0cHJpdmF0ZSBfc2VuZFF1ZXVlID0gW107XG5cdHByaXZhdGUgX3J1bm5pbmdRdWV1ZSA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yKG1haW5TZXJ2ZXIsIHNlcnZlckNvbmZpZykge1xuXHRcdHRoaXMuX21haW5TZXJ2ZXIgPSBtYWluU2VydmVyO1xuXG5cdFx0dGhpcy5zZXJ2ZXJDb25maWcgPSBzZXJ2ZXJDb25maWc7XG5cblx0XHQvLyBGaXh0dXJlc1xuXHRcdGxvYWRTZXJ2ZXJJbml0KCk7XG5cdFx0bG9hZFNlcnZlckNyb25Kb2JzKCk7XG5cblx0XHQvLyBNZXRob2RzXG5cdFx0bG9hZEFjY291bnRNZXRob2RzKHRoaXMpO1xuXHRcdGxvYWRBV1NNZXRob2RzKHRoaXMpO1xuXHRcdGxvYWRDbG91ZENvbnZlcnRNZXRob2RzKHRoaXMpO1xuXHRcdGxvYWRDb2xsZWN0aW9uTWV0aG9kcyh0aGlzKTtcblx0XHRsb2FkQ291bnRlck1ldGhvZHModGhpcyk7XG5cdFx0bG9hZExvZ01ldGhvZHModGhpcyk7XG5cdFx0bG9hZFBERk1ldGhvZHModGhpcyk7XG5cdFx0bG9hZENyb25Kb2JNZXRob2RzKHRoaXMpO1xuXHRcdGxvYWRGbGFnTWV0aG9kcyh0aGlzKTtcblxuXHRcdHRoaXMuX21haWxlciA9IG5vZGVtYWlsZXIuY3JlYXRlVHJhbnNwb3J0KHtcblx0XHRcdFNFUzogbmV3IGF3cy5TRVMoe1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAnMjAxMC0xMi0wMScsXG5cdFx0XHRcdGFjY2Vzc0tleUlkOiBzZXJ2ZXJDb25maWcuQVdTQUNDRVNTS0VZSUQsXG5cdFx0XHRcdHNlY3JldEFjY2Vzc0tleTogc2VydmVyQ29uZmlnLkFXU1NFQ1JFVEFDQ0VTU0tFWSxcblx0XHRcdFx0cmVnaW9uOiBzZXJ2ZXJDb25maWcuQVdTU0VTX1JFR0lPTlxuXHRcdFx0fSlcblx0XHR9KTtcblxuXHRcdC8vIHRoaXMuX2ltYXAgPSBuZXcgaW1hcCh7XG5cdFx0Ly8gXHR1c2VyOiB0aGlzLnNlcnZlckNvbmZpZ1snT1JERVJTX0VNQUlMJ10sXG5cdFx0Ly8gXHRwYXNzd29yZDogdGhpcy5zZXJ2ZXJDb25maWdbJ09SREVSU19QQVNTV09SRCddLFxuXHRcdC8vIFx0aG9zdDogdGhpcy5zZXJ2ZXJDb25maWdbJ09SREVSU19IT1NUJ10sXG5cdFx0Ly8gXHRwb3J0OiB0aGlzLnNlcnZlckNvbmZpZ1snT1JERVJTX1BPUlQnXSxcblx0XHQvLyBcdHRsczogdGhpcy5zZXJ2ZXJDb25maWdbJ09SREVSU19UTFMnXVxuXHRcdC8vIH0pO1xuXG5cdFx0Ly8gbGV0IHRoYXQgPSB0aGlzO1xuXG5cdFx0Ly8gbGV0IGNoZW1pY2FsTmFtZXMgPSBhd2FpdCBDaGVtaWNhbHMuZmluZCh7fSkuc2VsZWN0KCdkZXNjcmlwdGlvbicpLmV4ZWMoKTtcblx0XHQvLyBsZXQgam9iTmFtZXMgPSBhd2FpdCBKb2JzLmZpbmQoe3N0YXR1czogJ0FjdGl2ZSd9KS5zZWxlY3QoJ3dlbGwnKS5leGVjKCk7XG5cblx0XHQvLyBjb25zb2xlLmxvZyhqb2JOYW1lcy5tYXAoYSA9PiBhLndlbGwpKTtcblxuXHRcdC8vIHRoaXMuX2ltYXAub25jZSgncmVhZHknLCAoKSA9PiB7XG5cdFx0Ly8gXHR0aGlzLl9pbWFwLm9wZW5Cb3goJ0lOQk9YJywgdHJ1ZSwgZnVuY3Rpb24oZXJyLCBib3gpIHtcblx0XHQvLyBcdFx0aWYgKGVycikge1xuXHRcdC8vIFx0XHRcdHRocm93IGVycjtcblx0XHQvLyBcdFx0fVxuXG5cdFx0Ly8gXHRcdHRoYXQuX2ltYXAuc2VhcmNoKFsgJ05FVycgXSwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7XG5cblx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZyhlcnIsIHJlc3VsdHMpO1xuXG5cdFx0Ly8gXHRcdFx0aWYgKGVyciB8fCAhcmVzdWx0cy5sZW5ndGgpIHtcblx0XHQvLyBcdFx0XHRcdHJldHVybiB0aGF0Ll9pbWFwLmVuZCgpO1xuXHRcdC8vIFx0XHRcdH1cblxuXHRcdC8vIFx0XHRcdGxldCBmID0gdGhhdC5faW1hcC5mZXRjaChyZXN1bHRzWzBdLCB7IGJvZGllczogWydIRUFERVIuRklFTERTIChGUk9NKScsICdURVhUJ10gfSk7XG5cdFx0Ly8gXHRcdFx0Zi5vbignbWVzc2FnZScsIGZ1bmN0aW9uKG1zZywgc2Vxbm8pIHtcblx0XHQvLyBcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdNZXNzYWdlICMlZCcsIHNlcW5vKTtcblx0XHQvLyBcdFx0XHRcdGxldCBwcmVmaXggPSAnKCMnICsgc2Vxbm8gKyAnKSAnO1xuXHRcdC8vIFx0XHRcdFx0bXNnLm9uKCdib2R5JywgZnVuY3Rpb24oc3RyZWFtLCBpbmZvKSB7XG5cdFx0Ly8gXHRcdFx0XHRcdGxldCBidWZmZXIgPSAnJywgY291bnQgPSAwO1xuXHRcdC8vIFx0XHRcdFx0XHRzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykge1xuXHRcdC8vIFx0XHRcdFx0XHRcdGNvdW50ICs9IGNodW5rLmxlbmd0aDtcblx0XHQvLyBcdFx0XHRcdFx0XHRidWZmZXIgKz0gY2h1bmsudG9TdHJpbmcoJ3V0ZjgnKTtcblx0XHQvLyBcdFx0XHRcdFx0fSk7XG5cdFx0Ly8gXHRcdFx0XHRcdHN0cmVhbS5vbmNlKCdlbmQnLCBmdW5jdGlvbigpIHtcblx0XHQvLyBcdFx0XHRcdFx0XHRpZiAoaW5mby53aGljaCA9PT0gJ1RFWFQnKSB7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhidWZmZXIpO1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2codHlwZW9mKGJ1ZmZlcikpO1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0bGV0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXHJcXG4nKTtcblx0XHQvLyBcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGxpbmVzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBsZXQgaSA9IDA7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xuXG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdGxldCBkYXRlOiBEYXRlO1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRsZXQgZGF0ZVN0cmluZztcblxuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRpZiAobGluZS5pbmNsdWRlcygnRnJvbScpKSB7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0Y29uc29sZS5sb2cobGluZSk7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdH1cblx0XHQvLyBcdFx0XHRcdFx0XHRcdC8vIFx0aWYgKCFsaW5lLmluY2x1ZGVzKCdjbGFzcz0zRCcpICYmICFsaW5lLmluY2x1ZGVzKCdzdHlsZT0zRCcpKSB7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0aWYgKGxpbmUuaW5jbHVkZXMoJ1dlbGwnKSB8fCBsaW5lLmluY2x1ZGVzKCdXZWxsIE5hbWUnKSB8fCBsaW5lLmluY2x1ZGVzKCdKb2InKSB8fCBsaW5lLmluY2x1ZGVzKCdQYWQnKSkge1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRcdFx0bGV0IGJlc3QgPSBzdHJpbmdTaW1pbGFyaXR5LmZpbmRCZXN0TWF0Y2gobGluZSwgam9iTmFtZXMubWFwKGEgPT4gYS53ZWxsKSkuYmVzdE1hdGNoO1xuXHRcblx0XHQvLyBcdFx0XHRcdFx0XHRcdC8vIFx0XHRcdGlmIChiZXN0ICYmIGJlc3QucmF0aW5nID4gMC41KSB7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0XHRcdGNvbnNvbGUubG9nKCdXZWxsJywgbGluZSk7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0XHR9XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0fVxuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRcdGlmIChsaW5lLmluY2x1ZGVzKCdQcm9kdWN0JykgfHwgbGluZS5pbmNsdWRlcygnQ2hlbWljYWwnKSkge1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRcdFx0bGV0IGJlc3QgPSBzdHJpbmdTaW1pbGFyaXR5LmZpbmRCZXN0TWF0Y2gobGluZSwgY2hlbWljYWxOYW1lcy5tYXAoYSA9PiBhLmRlc2NyaXB0aW9uKSkuYmVzdE1hdGNoO1xuXHRcblx0XHQvLyBcdFx0XHRcdFx0XHRcdC8vIFx0XHRcdGlmIChiZXN0ICYmIGJlc3QucmF0aW5nID4gMC41KSB7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0XHRcdGNvbnNvbGUubG9nKCdDaGVtaWNhbCcsIGxpbmUpO1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRcdFx0fVxuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRcdH1cblx0XHQvLyBcdFx0XHRcdFx0XHRcdC8vIFx0XHRpZiAobGluZS5pbmNsdWRlcygnUXVhbnRpdHknKSB8fCBsaW5lLmluY2x1ZGVzKCdRdHknKSB8fCBsaW5lLmluY2x1ZGVzKCdBbW91bnQnKSkge1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJ1F0eScsIGxpbmUpO1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRcdH1cblx0XHQvLyBcdFx0XHRcdFx0XHRcdC8vIFx0XHRpZiAobGluZS5pbmNsdWRlcygnRGF0ZScpKSB7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZygnRGF0ZScsIGxpbmUpO1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2cobW9tZW50KERhdGUucGFyc2UobGluZSkpKTtcblx0XHQvLyBcdFx0XHRcdFx0XHRcdC8vIFx0XHRcdGRhdGUgPSBtb21lbnQoRGF0ZS5wYXJzZShsaW5lKSkudG9EYXRlKCk7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0XHRkYXRlU3RyaW5nID0gbGluZTtcblx0XHQvLyBcdFx0XHRcdFx0XHRcdC8vIFx0XHR9XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0aWYgKGxpbmUuaW5jbHVkZXMoJ1RpbWUnKSkge1xuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJ1RpbWUnLCBsaW5lKTtcblx0XHQvLyBcdFx0XHRcdFx0XHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKG1vbWVudChEYXRlLnBhcnNlKGxpbmUpKSk7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZyhtb21lbnQoZGF0ZS5zZXRUaW1lKERhdGUucGFyc2UobGluZSkpKSk7XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyBcdFx0fVxuXHRcdC8vIFx0XHRcdFx0XHRcdFx0Ly8gXHR9XG5cdFx0Ly8gXHRcdFx0XHRcdFx0XHQvLyB9KTtcblx0XHQvLyBcdFx0XHRcdFx0XHR9XG5cdFx0Ly8gXHRcdFx0XHRcdH0pO1xuXHRcdC8vIFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XG5cdFx0Ly8gXHRcdFx0XHRtc2cub25jZSgnYXR0cmlidXRlcycsIGZ1bmN0aW9uKGF0dHJzKSB7XG5cdFx0Ly8gXHRcdFx0XHRcdGNvbnNvbGUubG9nKHByZWZpeCArICdBdHRyaWJ1dGVzOiAlcycsIGluc3BlY3QoYXR0cnMsIGZhbHNlLCA4KSk7XG5cdFx0Ly8gXHRcdFx0XHR9KTtcblxuXHRcdC8vIFx0XHRcdFx0bXNnLm9uY2UoJ2VuZCcsIGZ1bmN0aW9uKCkge1xuXHRcdC8vIFx0XHRcdFx0XHRjb25zb2xlLmxvZyhwcmVmaXggKyAnRmluaXNoZWQnKTtcblx0XHQvLyBcdFx0XHRcdH0pO1xuXHRcdC8vIFx0XHRcdH0pO1xuXHRcdFx0XHRcdFxuXHRcdC8vIFx0XHRcdGYub25jZSgnZXJyb3InLCBmdW5jdGlvbihlcnJvcikge1xuXHRcdC8vIFx0XHRcdFx0Y29uc29sZS5sb2coJ0ZldGNoIGVycm9yOiAnICsgZXJyb3IpO1xuXHRcdC8vIFx0XHRcdH0pO1xuXG5cdFx0Ly8gXHRcdFx0Zi5vbmNlKCdlbmQnLCBmdW5jdGlvbigpIHtcblx0XHQvLyBcdFx0XHRcdGNvbnNvbGUubG9nKCdEb25lIGZldGNoaW5nIGFsbCBtZXNzYWdlcyEnKTtcblx0XHQvLyBcdFx0XHRcdHRoYXQuX2ltYXAuZW5kKCk7XG5cdFx0Ly8gXHRcdFx0fSk7XG5cdFx0Ly8gXHRcdH0pO1xuXHRcdC8vIFx0fSk7XG5cdFx0Ly8gfSk7XG5cblx0XHQvLyB0aGlzLl9pbWFwLmNvbm5lY3QoKTtcblxuXHRcdHRoaXMuX2F3cyA9IG5ldyBhd3MuUzMoe1xuXHRcdFx0YWNjZXNzS2V5SWQ6IHNlcnZlckNvbmZpZy5BV1NBQ0NFU1NLRVlJRCxcblx0XHRcdHNlY3JldEFjY2Vzc0tleTogc2VydmVyQ29uZmlnLkFXU1NFQ1JFVEFDQ0VTU0tFWSxcblx0XHRcdHJlZ2lvbjogc2VydmVyQ29uZmlnLkFXU1JFR0lPTlxuXHRcdH0pO1xuXG5cdFx0c2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLl9ydW5uaW5nUXVldWUpIHtcblx0XHRcdFx0aWYgKHRoaXMuX3NlbmRRdWV1ZS5sZW5ndGgpIHtcblx0XHRcdFx0XHR0aGlzLl9ydW5uaW5nUXVldWUgPSB0cnVlO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSB0aGlzLl9zZW5kUXVldWUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHRcdGxldCB3cyA9IHRoaXMuX21haW5TZXJ2ZXIuZ2V0V1ModGhpcy5fc2VuZFF1ZXVlW2ldLmlkX3dzKTtcblx0XHRcdFx0XHRcdGlmICh3cyAmJiB3cy5yZWFkeVN0YXRlID09PSB3cy5PUEVOKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh3cy5idWZmZXJlZEFtb3VudCA8IDIwNDgwKSB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHNlbmRJdGVtID0gdGhpcy5fc2VuZFF1ZXVlLnBvcCgpO1xuXHRcdFx0XHRcdFx0XHRcdHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoc2VuZEl0ZW0uZGF0YSksIChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdFcnJvciBvbiBXUzogJywgZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tYWluU2VydmVyLnVuc3Vic2NyaWJlV1Mod3MpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNlbmRJdGVtLm1ldGhvZCAhPT0gJ2NvdW50UXVlcnknICYmIHNlbmRJdGVtLm1ldGhvZCAhPT0gJ2NvdW50Q29sbGVjdGlvbldpdGhRdWVyeScgJiYgc2VuZEl0ZW0ubWV0aG9kICE9PSAnZmluZCcgJiYgc2VuZEl0ZW0ubWV0aG9kICE9PSAnZmluZE9uZScgJiYgc2VuZEl0ZW0ubWV0aG9kICE9PSAnZmluZFdpdGhPcHRpb25zJyAmJiBzZW5kSXRlbS5tZXRob2QgIT09ICdzZXRXU0FwcFZlcnNpb24nICYmIHNlbmRJdGVtLm1ldGhvZCAhPT0gJ3VwbG9hZEZpbGVBbmRTYXZlJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGdldEJpbmFyeVNpemUoSlNPTi5zdHJpbmdpZnkoc2VuZEl0ZW0ubWV0aG9kRGF0YSkpIDwgMjAwMDAwICYmIGdldEJpbmFyeVNpemUoSlNPTi5zdHJpbmdpZnkoc2VuZEl0ZW0uZGF0YSkpIDwgMjAwMDAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZ3MuY3JlYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRfaWQ6IFR5cGVzLk9iamVjdElkKCkudG9IZXhTdHJpbmcoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlOiBuZXcgRGF0ZSgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdjbGllbnQtcmVzcG9uc2UnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiAnQ2xpZW50IFJlc3BvbnNlJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOiAnVXNlcjogJyArIHdzWyd1c2VyJ10gKyAnLCBNZXNzYWdlSWQ6ICcgKyBzZW5kSXRlbS5kYXRhLm1lc3NhZ2VJZCArICcsIE1ldGhvZDogJyArIHNlbmRJdGVtLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXlsb2FkOiBbSlNPTi5zdHJpbmdpZnkoc2VuZEl0ZW0ubWV0aG9kRGF0YSksIHNlbmRJdGVtLmRhdGFdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZDogc2VuZEl0ZW0ubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXI6IHdzWyd1c2VyJ10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUlkOiBzZW5kSXRlbS5kYXRhLm1lc3NhZ2VJZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRMb2dzLmNyZWF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0X2lkOiBUeXBlcy5PYmplY3RJZCgpLnRvSGV4U3RyaW5nKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZTogbmV3IERhdGUoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnY2xpZW50LXJlc3BvbnNlJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogJ0NsaWVudCBSZXNwb25zZScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTogJ1VzZXI6ICcgKyB3c1sndXNlciddICsgJywgTWVzc2FnZUlkOiAnICsgc2VuZEl0ZW0uZGF0YS5tZXNzYWdlSWQgKyAnLCBNZXRob2Q6ICcgKyBzZW5kSXRlbS5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGF5bG9hZDogJ1RvbyBCaWcnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZDogc2VuZEl0ZW0ubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZXI6IHdzWyd1c2VyJ10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUlkOiBzZW5kSXRlbS5kYXRhLm1lc3NhZ2VJZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRNZXRob2RSZXNwb25zZXMuY3JlYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRcdF9pZDogVHlwZXMuT2JqZWN0SWQoKS50b0hleFN0cmluZygpLFxuXHRcdFx0XHRcdFx0XHRcdFx0X192OiAwLFxuXHRcdFx0XHRcdFx0XHRcdFx0aWRfdXNlcjogd3NbJ2lkX3VzZXInXSxcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VfaWQ6IHNlbmRJdGVtLmRhdGEubWVzc2FnZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YTogSlNPTi5zdHJpbmdpZnkoc2VuZEl0ZW0ubWV0aG9kRGF0YSksXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZTogc2VuZEl0ZW0uZGF0YSxcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZDogc2VuZEl0ZW0ubWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9zZW5kUXVldWUuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuX3J1bm5pbmdRdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSwgNTApO1xuXHR9XG5cblx0cHVibGljIGdldE1haW5TZXJ2ZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX21haW5TZXJ2ZXI7XG5cdH1cblxuXHQvLyBBZGQgbWV0aG9kcyB0byBwcml2YXRlIG1ldGhvZHMgb2JqZWN0XG5cdHB1YmxpYyBtZXRob2RzKG1ldGhvZDogTWV0aG9kTW9kZWwpIHtcblx0XHR0aGlzLl9tZXRob2RzID0gT2JqZWN0LmFzc2lnbih0aGlzLl9tZXRob2RzLCBtZXRob2QpO1xuXHR9XG5cblx0cHVibGljIGNhbGxNZXRob2RDcm9uKG1ldGhvZDogc3RyaW5nLCAuLi5tZXRob2REYXRhOiBhbnlbXSkge1xuXHRcdGxldCB0aGF0ID0gdGhpcztcblxuXHRcdGlmICghdGhhdC5fbWV0aG9kc1ttZXRob2RdKSB7XG5cdFx0XHRjb25zb2xlLmxvZygnTm8gTWV0aG9kOiAnICsgbWV0aG9kKTtcblxuXHRcdFx0dGhhdC5zZW5kRW1haWwoJ2RldkByZXNvbHZlaW8uY29tJywgJ1NFUlZFUiAtIEVycm9yIERldGVjdGVkIC0gJyArIHRoYXQuc2VydmVyQ29uZmlnWydDTElFTlRfTkFNRSddLCAnTm8gTWV0aG9kOiAnICsgbWV0aG9kKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRcblx0XHRpZiAoKG1ldGhvZERhdGEubGVuZ3RoID4gMSB8fCBtZXRob2REYXRhWzBdKSAmJiAhdGhhdC5fbWV0aG9kc1ttZXRob2RdLnNraXBWYWxpZGF0aW9uKSB7XG5cdFx0XHRpZiAoIXRoYXQuX21ldGhvZHNbbWV0aG9kXS5jaGVjaykge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdObyBDaGVjayBGdW5jdGlvbiBGb3IgTWV0aG9kICcgKyBtZXRob2QpO1xuXG5cdFx0XHRcdHRoYXQuc2VuZEVtYWlsKCdkZXZAcmVzb2x2ZWlvLmNvbScsICdTRVJWRVIgLSBFcnJvciBEZXRlY3RlZCAtICcgKyB0aGF0LnNlcnZlckNvbmZpZ1snQ0xJRU5UX05BTUUnXSwgJ05vIENoZWNrIEZ1bmN0aW9uIEZvciBNZXRob2QgJyArIG1ldGhvZCk7XG5cdFxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICghdGhhdC5fbWV0aG9kc1ttZXRob2RdLmNoZWNrLl9zY2hlbWEpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignTm8gQ2hlY2sgU2NoZW1hIEZvciBNZXRob2QgJyArIG1ldGhvZCk7XG5cblx0XHRcdFx0dGhhdC5zZW5kRW1haWwoJ2RldkByZXNvbHZlaW8uY29tJywgJ1NFUlZFUiAtIEVycm9yIERldGVjdGVkIC0gJyArIHRoYXQuc2VydmVyQ29uZmlnWydDTElFTlRfTkFNRSddLCAnTm8gQ2hlY2sgRnVuY3Rpb24gRm9yIE1ldGhvZCAnICsgbWV0aG9kKTtcblx0XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRsZXQgdmFsT2JqID0ge307XG5cdFx0XHRcdGxldCB2YWxLZXlzID0gT2JqZWN0LmtleXModGhhdC5fbWV0aG9kc1ttZXRob2RdLmNoZWNrLl9zY2hlbWEpO1xuXG5cdFx0XHRcdGxldCByb290S2V5cyA9IHZhbEtleXMuZmlsdGVyKGEgPT4gIWEuaW5jbHVkZXMoJy4nKSk7XG5cdFx0XHRcdFxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1ldGhvZERhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YWxPYmpbcm9vdEtleXNbaV1dID0gbWV0aG9kRGF0YVtpXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dGhhdC5fbWV0aG9kc1ttZXRob2RdLmNoZWNrLnZhbGlkYXRlKHZhbE9iaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2F0Y2ggKGVycm9ycykge1xuXHRcdFx0XHRcdGlmIChlcnJvcnMpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIE1ldGhvZCBDaGVjayAoJyArIG1ldGhvZCArICcpJywgZXJyb3JzKTtcblxuXHRcdFx0XHRcdFx0dGhhdC5zZW5kRW1haWwoJ2RldkByZXNvbHZlaW8uY29tJywgJ1NFUlZFUiAtIEVycm9yIERldGVjdGVkIC0gJyArIHRoYXQuc2VydmVyQ29uZmlnWydDTElFTlRfTkFNRSddLCAnTWF0Y2ggRXJyb3IgT24gTWV0aG9kICcgKyBtZXRob2QgKyAnXFxuXFxuRGF0YSBCZWluZyBDaGVja2VkXFxuJyArIEpTT04uc3RyaW5naWZ5KHZhbE9iaiwgbnVsbCwgMikgKyAnXFxuXFxuRXJyb3JzXFxuJyArIEpTT04uc3RyaW5naWZ5KGVycm9ycywgbnVsbCwgMikpO1xuXHRcdFx0XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdHRoYXQuX21ldGhvZHNbbWV0aG9kXS5mdW5jdGlvbi5jYWxsKE9iamVjdC5hc3NpZ24oe30sIHRoYXQsIHtpZF91c2VyOiAnJywgdXNlcjogJycsIGlkX3dzOiAnJ30pLCAuLi5tZXRob2REYXRhKTtcblx0fVxuXG5cdHB1YmxpYyBjYWxsTWV0aG9kUXVldWUodXBkYXRlOiBRdWV1ZU1ldGhvZE1vZGVsKSB7XG5cdFx0Ly8gY29uc29sZS5sb2coJ0NhbGwgTWV0aG9kIFF1ZXVlJywgdXBkYXRlKTtcblxuXHRcdGxldCB1cGRhdGVDb3B5ID0gZGVlcENvcHkodXBkYXRlKTtcblx0XHRcblx0XHRsZXQgdGhhdCA9IHRoaXM7XG5cblx0XHRpZiAoIXRoYXQuX21ldGhvZHNbdXBkYXRlLm1ldGhvZF0pIHtcblx0XHRcdGNvbnNvbGUubG9nKCdObyBNZXRob2Q6ICcgKyB1cGRhdGUubWV0aG9kKTtcblxuXHRcdFx0dGhhdC5zZW5kRW1haWwoJ2RldkByZXNvbHZlaW8uY29tJywgJ1NFUlZFUiAtIEVycm9yIERldGVjdGVkIC0gJyArIHRoYXQuc2VydmVyQ29uZmlnWydDTElFTlRfTkFNRSddLCAnTm8gTWV0aG9kOiAnICsgdXBkYXRlLm1ldGhvZCk7XG5cdFx0XHRcblx0XHRcdGxldCBzZXJ2ZXJSZXM6IFNlcnZlclJlc3BvbnNlTW9kZWwgPSB7XG5cdFx0XHRcdG1lc3NhZ2VJZDogdXBkYXRlLm1lc3NhZ2VJZCxcblx0XHRcdFx0aGFzRXJyb3I6IHRydWUsXG5cdFx0XHRcdGRhdGE6ICdJbnRlcm5hbCBFcnJvcidcblx0XHRcdH07XG5cblx0XHRcdHRoaXMuX21haW5TZXJ2ZXIuZ2V0UXVldWVNYW5hZ2VyKCkuYWRkTWV0aG9kUmVzcG9uc2UodXBkYXRlQ29weSwgc2VydmVyUmVzKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgodXBkYXRlLm1ldGhvZF9kYXRhLmxlbmd0aCA+IDEgfHwgdXBkYXRlLm1ldGhvZF9kYXRhWzBdKSAmJiAhdGhhdC5fbWV0aG9kc1t1cGRhdGUubWV0aG9kXS5za2lwVmFsaWRhdGlvbikge1xuXHRcdFx0aWYgKCF0aGF0Ll9tZXRob2RzW3VwZGF0ZS5tZXRob2RdLmNoZWNrKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ05vIENoZWNrIEZ1bmN0aW9uIEZvciBNZXRob2QgJyArIHVwZGF0ZS5tZXRob2QpO1xuXG5cdFx0XHRcdHRoYXQuc2VuZEVtYWlsKCdkZXZAcmVzb2x2ZWlvLmNvbScsICdTRVJWRVIgLSBFcnJvciBEZXRlY3RlZCAtICcgKyB0aGF0LnNlcnZlckNvbmZpZ1snQ0xJRU5UX05BTUUnXSwgJ05vIENoZWNrIEZ1bmN0aW9uIEZvciBNZXRob2QgJyArIHVwZGF0ZS5tZXRob2QpO1xuXHRcdFx0XHRcblx0XHRcdFx0bGV0IHNlcnZlclJlczogU2VydmVyUmVzcG9uc2VNb2RlbCA9IHtcblx0XHRcdFx0XHRtZXNzYWdlSWQ6IHVwZGF0ZS5tZXNzYWdlSWQsXG5cdFx0XHRcdFx0aGFzRXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0ZGF0YTogJ0ludGVybmFsIEVycm9yJ1xuXHRcdFx0XHR9O1xuXHRcblx0XHRcdFx0dGhpcy5fbWFpblNlcnZlci5nZXRRdWV1ZU1hbmFnZXIoKS5hZGRNZXRob2RSZXNwb25zZSh1cGRhdGVDb3B5LCBzZXJ2ZXJSZXMpO1xuXHRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoIXRoYXQuX21ldGhvZHNbdXBkYXRlLm1ldGhvZF0uY2hlY2suX3NjaGVtYSkge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdObyBDaGVjayBTY2hlbWEgRm9yIE1ldGhvZCAnICsgdXBkYXRlLm1ldGhvZCk7XG5cblx0XHRcdFx0dGhhdC5zZW5kRW1haWwoJ2RldkByZXNvbHZlaW8uY29tJywgJ1NFUlZFUiAtIEVycm9yIERldGVjdGVkIC0gJyArIHRoYXQuc2VydmVyQ29uZmlnWydDTElFTlRfTkFNRSddLCAnTm8gQ2hlY2sgRnVuY3Rpb24gRm9yIE1ldGhvZCAnICsgdXBkYXRlLm1ldGhvZCk7XG5cdFx0XHRcdFxuXHRcdFx0XHRsZXQgc2VydmVyUmVzOiBTZXJ2ZXJSZXNwb25zZU1vZGVsID0ge1xuXHRcdFx0XHRcdG1lc3NhZ2VJZDogdXBkYXRlLm1lc3NhZ2VJZCxcblx0XHRcdFx0XHRoYXNFcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRkYXRhOiAnSW50ZXJuYWwgRXJyb3InXG5cdFx0XHRcdH07XG5cdFxuXHRcdFx0XHR0aGlzLl9tYWluU2VydmVyLmdldFF1ZXVlTWFuYWdlcigpLmFkZE1ldGhvZFJlc3BvbnNlKHVwZGF0ZUNvcHksIHNlcnZlclJlcyk7XG5cdFxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0bGV0IHZhbE9iaiA9IHt9O1xuXHRcdFx0XHRsZXQgdmFsS2V5cyA9IE9iamVjdC5rZXlzKHRoYXQuX21ldGhvZHNbdXBkYXRlLm1ldGhvZF0uY2hlY2suX3NjaGVtYSk7XG5cblx0XHRcdFx0bGV0IHJvb3RLZXlzID0gdmFsS2V5cy5maWx0ZXIoYSA9PiAhYS5pbmNsdWRlcygnLicpKTtcblx0XHRcdFx0XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdXBkYXRlLm1ldGhvZF9kYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFsT2JqW3Jvb3RLZXlzW2ldXSA9IHVwZGF0ZS5tZXRob2RfZGF0YVtpXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dGhhdC5fbWV0aG9kc1t1cGRhdGUubWV0aG9kXS5jaGVjay52YWxpZGF0ZSh2YWxPYmopO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhdGNoIChlcnJvcnMpIHtcblx0XHRcdFx0XHRpZiAoZXJyb3JzKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvciBpbiBNZXRob2QgQ2hlY2sgKCcgKyB1cGRhdGUubWV0aG9kICsgJyknLCBlcnJvcnMpO1xuXG5cdFx0XHRcdFx0XHR0aGF0LnNlbmRFbWFpbCgnZGV2QHJlc29sdmVpby5jb20nLCAnU0VSVkVSIC0gRXJyb3IgRGV0ZWN0ZWQgLSAnICsgdGhhdC5zZXJ2ZXJDb25maWdbJ0NMSUVOVF9OQU1FJ10sICdNYXRjaCBFcnJvciBPbiBNZXRob2QgJyArIHVwZGF0ZS5tZXRob2QgKyAnXFxuXFxuRGF0YSBCZWluZyBDaGVja2VkXFxuJyArIEpTT04uc3RyaW5naWZ5KHZhbE9iaiwgbnVsbCwgMikgKyAnXFxuXFxuRXJyb3JzXFxuJyArIEpTT04uc3RyaW5naWZ5KGVycm9ycywgbnVsbCwgMikpO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRsZXQgc2VydmVyUmVzOiBTZXJ2ZXJSZXNwb25zZU1vZGVsID0ge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSWQ6IHVwZGF0ZS5tZXNzYWdlSWQsXG5cdFx0XHRcdFx0XHRcdGhhc0Vycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRkYXRhOiAnSW50ZXJuYWwgRXJyb3InXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XG5cdFx0XHRcdFx0XHR0aGlzLl9tYWluU2VydmVyLmdldFF1ZXVlTWFuYWdlcigpLmFkZE1ldGhvZFJlc3BvbnNlKHVwZGF0ZUNvcHksIHNlcnZlclJlcyk7XG5cdFx0XHRcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjb25zb2xlLmxvZygnUnVuIE1ldGhvZCcsIHVwZGF0ZS5tZXRob2QpO1xuXHRcdFxuXHRcdHRoYXQuX21ldGhvZHNbdXBkYXRlLm1ldGhvZF0uZnVuY3Rpb24uY2FsbChPYmplY3QuYXNzaWduKHt9LCB0aGF0LCB7aWRfdXNlcjogdXBkYXRlLmlkX3VzZXIsIHVzZXI6IHVwZGF0ZS51c2VyLCBpZF93czogdXBkYXRlLmlkX3dzfSksIC4uLnVwZGF0ZS5tZXRob2RfZGF0YSkudGhlbihyZXMgPT4ge1xuXHRcdFx0bGV0IHNlcnZlclJlczogU2VydmVyUmVzcG9uc2VNb2RlbCA9IHtcblx0XHRcdFx0bWVzc2FnZUlkOiB1cGRhdGUubWVzc2FnZUlkLFxuXHRcdFx0XHRoYXNFcnJvcjogZmFsc2UsXG5cdFx0XHRcdGRhdGE6IHJlc1xuXHRcdFx0fTtcblxuXHRcdFx0dGhpcy5fbWFpblNlcnZlci5nZXRRdWV1ZU1hbmFnZXIoKS5hZGRNZXRob2RSZXNwb25zZSh1cGRhdGVDb3B5LCBzZXJ2ZXJSZXMpO1xuXHRcdH0sIGVyciA9PiB7XG5cdFx0XHRsZXQgc2VydmVyUmVzOiBTZXJ2ZXJSZXNwb25zZU1vZGVsID0ge1xuXHRcdFx0XHRtZXNzYWdlSWQ6IHVwZGF0ZS5tZXNzYWdlSWQsXG5cdFx0XHRcdGhhc0Vycm9yOiB0cnVlLFxuXHRcdFx0XHRkYXRhOiBlcnJcblx0XHRcdH07XG5cblx0XHRcdHRoaXMuX21haW5TZXJ2ZXIuZ2V0UXVldWVNYW5hZ2VyKCkuYWRkTWV0aG9kUmVzcG9uc2UodXBkYXRlQ29weSwgc2VydmVyUmVzKTtcblx0XHR9KTtcblx0fVxuXG5cblxuXHQvLyBDYWxsL3J1biBtZXRob2QgKEVtaXQgb24gU29ja2V0KVxuXHRwdWJsaWMgY2FsbE1ldGhvZCh3czogV2ViU29ja2V0LCBtZXNzYWdlSWQsIG1ldGhvZCwgLi4ubWV0aG9kRGF0YTogYW55W10pIHtcblx0XHRsZXQgdGhhdCA9IHRoaXM7XG5cblx0XHRpZiAoIXRoYXQuX21ldGhvZHNbbWV0aG9kXSkge1xuXHRcdFx0Y29uc29sZS5sb2coJ05vIE1ldGhvZDogJyArIG1ldGhvZCk7XG5cblx0XHRcdHRoYXQuc2VuZEVtYWlsKCdkZXZAcmVzb2x2ZWlvLmNvbScsICdTRVJWRVIgLSBFcnJvciBEZXRlY3RlZCAtICcgKyB0aGF0LnNlcnZlckNvbmZpZ1snQ0xJRU5UX05BTUUnXSwgJ05vIE1ldGhvZDogJyArIG1ldGhvZCk7XG5cdFx0XHRcblx0XHRcdGxldCBzZXJ2ZXJSZXM6IFNlcnZlclJlc3BvbnNlTW9kZWwgPSB7XG5cdFx0XHRcdG1lc3NhZ2VJZDogbWVzc2FnZUlkLFxuXHRcdFx0XHRoYXNFcnJvcjogdHJ1ZSxcblx0XHRcdFx0ZGF0YTogJ0ludGVybmFsIEVycm9yJ1xuXHRcdFx0fTtcblxuXHRcdFx0dGhpcy5zZW5kV1Mod3MsIG1ldGhvZCwgbWV0aG9kRGF0YSwgc2VydmVyUmVzKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgobWV0aG9kRGF0YS5sZW5ndGggPiAxIHx8IG1ldGhvZERhdGFbMF0pICYmICF0aGF0Ll9tZXRob2RzW21ldGhvZF0uc2tpcFZhbGlkYXRpb24pIHtcblx0XHRcdGlmICghdGhhdC5fbWV0aG9kc1ttZXRob2RdLmNoZWNrKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ05vIENoZWNrIEZ1bmN0aW9uIEZvciBNZXRob2QgJyArIG1ldGhvZCk7XG5cblx0XHRcdFx0dGhhdC5zZW5kRW1haWwoJ2RldkByZXNvbHZlaW8uY29tJywgJ1NFUlZFUiAtIEVycm9yIERldGVjdGVkIC0gJyArIHRoYXQuc2VydmVyQ29uZmlnWydDTElFTlRfTkFNRSddLCAnTm8gQ2hlY2sgRnVuY3Rpb24gRm9yIE1ldGhvZCAnICsgbWV0aG9kKTtcblx0XHRcdFx0XG5cdFx0XHRcdGxldCBzZXJ2ZXJSZXM6IFNlcnZlclJlc3BvbnNlTW9kZWwgPSB7XG5cdFx0XHRcdFx0bWVzc2FnZUlkOiBtZXNzYWdlSWQsXG5cdFx0XHRcdFx0aGFzRXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0ZGF0YTogJ0ludGVybmFsIEVycm9yJ1xuXHRcdFx0XHR9O1xuXHRcblx0XHRcdFx0dGhpcy5zZW5kV1Mod3MsIG1ldGhvZCwgbWV0aG9kRGF0YSwgc2VydmVyUmVzKTtcblx0XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKCF0aGF0Ll9tZXRob2RzW21ldGhvZF0uY2hlY2suX3NjaGVtYSkge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdObyBDaGVjayBTY2hlbWEgRm9yIE1ldGhvZCAnICsgbWV0aG9kKTtcblxuXHRcdFx0XHR0aGF0LnNlbmRFbWFpbCgnZGV2QHJlc29sdmVpby5jb20nLCAnU0VSVkVSIC0gRXJyb3IgRGV0ZWN0ZWQgLSAnICsgdGhhdC5zZXJ2ZXJDb25maWdbJ0NMSUVOVF9OQU1FJ10sICdObyBDaGVjayBGdW5jdGlvbiBGb3IgTWV0aG9kICcgKyBtZXRob2QpO1xuXHRcdFx0XHRcblx0XHRcdFx0bGV0IHNlcnZlclJlczogU2VydmVyUmVzcG9uc2VNb2RlbCA9IHtcblx0XHRcdFx0XHRtZXNzYWdlSWQ6IG1lc3NhZ2VJZCxcblx0XHRcdFx0XHRoYXNFcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRkYXRhOiAnSW50ZXJuYWwgRXJyb3InXG5cdFx0XHRcdH07XG5cdFxuXHRcdFx0XHR0aGlzLnNlbmRXUyh3cywgbWV0aG9kLCBtZXRob2REYXRhLCBzZXJ2ZXJSZXMpO1xuXHRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGxldCB2YWxPYmogPSB7fTtcblx0XHRcdFx0bGV0IHZhbEtleXMgPSBPYmplY3Qua2V5cyh0aGF0Ll9tZXRob2RzW21ldGhvZF0uY2hlY2suX3NjaGVtYSk7XG5cblx0XHRcdFx0bGV0IHJvb3RLZXlzID0gdmFsS2V5cy5maWx0ZXIoYSA9PiAhYS5pbmNsdWRlcygnLicpKTtcblx0XHRcdFx0XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbWV0aG9kRGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhbE9ialtyb290S2V5c1tpXV0gPSBtZXRob2REYXRhW2ldO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aGF0Ll9tZXRob2RzW21ldGhvZF0uY2hlY2sudmFsaWRhdGUodmFsT2JqKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXRjaCAoZXJyb3JzKSB7XG5cdFx0XHRcdFx0aWYgKGVycm9ycykge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgaW4gTWV0aG9kIENoZWNrICgnICsgbWV0aG9kICsgJyknLCBlcnJvcnMpO1xuXG5cdFx0XHRcdFx0XHR0aGF0LnNlbmRFbWFpbCgnZGV2QHJlc29sdmVpby5jb20nLCAnU0VSVkVSIC0gRXJyb3IgRGV0ZWN0ZWQgLSAnICsgdGhhdC5zZXJ2ZXJDb25maWdbJ0NMSUVOVF9OQU1FJ10sICdNYXRjaCBFcnJvciBPbiBNZXRob2QgJyArIG1ldGhvZCArICdcXG5cXG5EYXRhIEJlaW5nIENoZWNrZWRcXG4nICsgSlNPTi5zdHJpbmdpZnkodmFsT2JqLCBudWxsLCAyKSArICdcXG5cXG5FcnJvcnNcXG4nICsgSlNPTi5zdHJpbmdpZnkoZXJyb3JzLCBudWxsLCAyKSk7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdGxldCBzZXJ2ZXJSZXM6IFNlcnZlclJlc3BvbnNlTW9kZWwgPSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VJZDogbWVzc2FnZUlkLFxuXHRcdFx0XHRcdFx0XHRoYXNFcnJvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0ZGF0YTogJ0ludGVybmFsIEVycm9yJ1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0dGhpcy5zZW5kV1Mod3MsIG1ldGhvZCwgbWV0aG9kRGF0YSwgc2VydmVyUmVzKTtcblx0XHRcdFxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0XHR0aGF0Ll9tZXRob2RzW21ldGhvZF0uZnVuY3Rpb24uY2FsbChPYmplY3QuYXNzaWduKHt9LCB0aGF0LCB7aWRfdXNlcjogd3NbJ2lkX3VzZXInXSwgdXNlcjogd3NbJ3VzZXInXSwgaWRfd3M6IHdzWydpZF9zb2NrZXQnXX0pLCAuLi5tZXRob2REYXRhKS50aGVuKHJlcyA9PiB7XG5cdFx0XHRsZXQgc2VydmVyUmVzOiBTZXJ2ZXJSZXNwb25zZU1vZGVsID0ge1xuXHRcdFx0XHRtZXNzYWdlSWQ6IG1lc3NhZ2VJZCxcblx0XHRcdFx0aGFzRXJyb3I6IGZhbHNlLFxuXHRcdFx0XHRkYXRhOiByZXNcblx0XHRcdH07XG5cblx0XHRcdHRoaXMuc2VuZFdTKHdzLCBtZXRob2QsIG1ldGhvZERhdGEsIHNlcnZlclJlcyk7XG5cdFx0fSwgZXJyID0+IHtcblx0XHRcdGxldCBzZXJ2ZXJSZXM6IFNlcnZlclJlc3BvbnNlTW9kZWwgPSB7XG5cdFx0XHRcdG1lc3NhZ2VJZDogbWVzc2FnZUlkLFxuXHRcdFx0XHRoYXNFcnJvcjogdHJ1ZSxcblx0XHRcdFx0ZGF0YTogZXJyXG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLnNlbmRXUyh3cywgbWV0aG9kLCBtZXRob2REYXRhLCBzZXJ2ZXJSZXMpO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gQ2FsbC9ydW4gbWV0aG9kIGludGVybmFsIChObyBFbWl0IG9uIFNvY2tldClcblx0cHVibGljIGNhbGxNZXRob2RJbnRlcm5hbChtZXRob2QsIC4uLm1ldGhvZERhdGE6IGFueVtdKTogUHJvbWlzZTxhbnk+IHtcblx0XHRsZXQgdGhhdCA9IHRoaXM7XG5cblx0XHRpZiAoIXRoYXQuX21ldGhvZHNbbWV0aG9kXSkge1xuXHRcdFx0Y29uc29sZS5sb2coJ05vIE1ldGhvZDogJyArIG1ldGhvZCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKChtZXRob2REYXRhLmxlbmd0aCA+IDEgfHwgKG1ldGhvZERhdGFbMF0gJiYgdHlwZW9mKG1ldGhvZERhdGFbMF0pICE9PSAnZnVuY3Rpb24nKSkgJiYgIXRoYXQuX21ldGhvZHNbbWV0aG9kXS5za2lwVmFsaWRhdGlvbikge1xuXHRcdFx0aWYgKCF0aGF0Ll9tZXRob2RzW21ldGhvZF0uY2hlY2spIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignTm8gQ2hlY2sgRnVuY3Rpb24gRm9yIE1ldGhvZCAnICsgbWV0aG9kKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoIXRoYXQuX21ldGhvZHNbbWV0aG9kXS5jaGVjay5fc2NoZW1hKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ05vIENoZWNrIFNjaGVtYSBGb3IgTWV0aG9kICcgKyBtZXRob2QpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IHByb21pc2UgPSB0aGF0Ll9tZXRob2RzW21ldGhvZF0uZnVuY3Rpb24uY2FsbCh0aGF0LCAuLi5tZXRob2REYXRhKTtcblxuXHRcdGlmIChtZXRob2REYXRhW21ldGhvZERhdGEubGVuZ3RoIC0gMV0gJiYgdHlwZW9mKG1ldGhvZERhdGFbbWV0aG9kRGF0YS5sZW5ndGggLSAxXSkgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHByb21pc2UudGhlbihyZXMgPT4gbWV0aG9kRGF0YVttZXRob2REYXRhLmxlbmd0aCAtIDFdKG51bGwsIHJlcyksIGVyciA9PiBtZXRob2REYXRhW21ldGhvZERhdGEubGVuZ3RoIC0gMV0oZXJyLCBudWxsKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIHNlbmRXUyh3czogV2ViU29ja2V0LCBtZXRob2Q6IHN0cmluZywgbWV0aG9kRGF0YTogYW55W10sIGRhdGE6IFNlcnZlclJlc3BvbnNlTW9kZWwpIHtcblx0XHR0aGlzLl9zZW5kUXVldWUuc3BsaWNlKDAsIDAsIHtcblx0XHRcdGlkX3dzOiB3c1snaWRfc29ja2V0J10sXG5cdFx0XHRtZXRob2Q6IG1ldGhvZCxcblx0XHRcdG1ldGhvZERhdGE6IG1ldGhvZERhdGEsXG5cdFx0XHRkYXRhOiBkYXRhXG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgc2VuZEVtYWlsKHNlbmRUbzogc3RyaW5nLCBzdWJqZWN0OiBzdHJpbmcsIHRleHQ/OiBzdHJpbmcsIGh0bWw/OiBzdHJpbmcsIGF0dGFjaG1lbnRzPzogYW55W10pIHtcblx0XHR0aGlzLl9tYWlsZXIuc2VuZE1haWwoe1xuXHRcdFx0cmVwbHlUbzogdW5kZWZpbmVkLFxuXHRcdFx0ZnJvbTogdGhpcy5zZXJ2ZXJDb25maWcuTUFJTF9GUk9NLFxuXHRcdFx0dG86IHNlbmRUbyxcblx0XHRcdHN1YmplY3Q6IHN1YmplY3QsXG5cdFx0XHR0ZXh0OiB0ZXh0LFxuXHRcdFx0aHRtbDogaHRtbCxcblx0XHRcdGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c1xuXHRcdH0sIChlcnIsIGluZm8pID0+IHtcblx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coZXJyKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRBV1MoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2F3cztcblx0fVxuXG5cdHB1YmxpYyByZWFkRmlsZShmaWxlTmFtZSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRmcy5yZWFkRmlsZShwYXRoLmpvaW4oX19kaXJuYW1lLCAoJy4uL3ByaXZhdGUvJyArIGZpbGVOYW1lKSksICd1dGYtOCcsIChlcnIsIHJlcykgPT4geyBcblx0XHRcdFx0aWYgKGVycikge1xuXHRcdFx0XHRcdHJlamVjdChlcnIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHJlc29sdmUocmVzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgcmVhZEltYWdlKGZpbGVOYW1lKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGZzLnJlYWRGaWxlKHBhdGguam9pbihfX2Rpcm5hbWUsICgnLi4vcHJpdmF0ZS8nICsgZmlsZU5hbWUpKSwgJ2Jhc2U2NCcsIChlcnIsIHJlcykgPT4geyBcblx0XHRcdFx0aWYgKGVycikge1xuXHRcdFx0XHRcdHJlamVjdChlcnIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHJlc29sdmUocmVzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn0iXX0=
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var collections_1 = require("../methods/collections");
|
|
4
|
+
var logs_1 = require("../methods/logs");
|
|
5
|
+
var counters_1 = require("../methods/counters");
|
|
6
|
+
var pdf_1 = require("../methods/pdf");
|
|
7
|
+
var aws_1 = require("../methods/aws");
|
|
8
|
+
var cloudconvert_1 = require("../methods/cloudconvert");
|
|
9
|
+
var path = require("path");
|
|
10
|
+
var fs = require("fs");
|
|
11
|
+
var nodemailer = require("nodemailer");
|
|
12
|
+
var aws = require("aws-sdk");
|
|
13
|
+
var accounts_1 = require("../methods/accounts");
|
|
14
|
+
var init_1 = require("../fixtures/init");
|
|
15
|
+
var cron_jobs_1 = require("../fixtures/cron-jobs");
|
|
16
|
+
var cron_jobs_2 = require("../methods/cron-jobs");
|
|
17
|
+
var flags_1 = require("../methods/flags");
|
|
18
|
+
var method_response_collection_1 = require("../collections/method-response.collection");
|
|
19
|
+
var mongoose_1 = require("mongoose");
|
|
20
|
+
var common_1 = require("../util/common");
|
|
21
|
+
var log_collection_1 = require("../collections/log.collection");
|
|
22
|
+
var MethodManager = /** @class */ (function () {
|
|
23
|
+
function MethodManager(mainServer, serverConfig) {
|
|
24
|
+
var _this = this;
|
|
25
|
+
this._methods = {};
|
|
26
|
+
this._sendQueue = [];
|
|
27
|
+
this._runningQueue = false;
|
|
28
|
+
this._mainServer = mainServer;
|
|
29
|
+
this.serverConfig = serverConfig;
|
|
30
|
+
// Fixtures
|
|
31
|
+
init_1.loadServerInit();
|
|
32
|
+
cron_jobs_1.loadServerCronJobs();
|
|
33
|
+
// Methods
|
|
34
|
+
accounts_1.loadAccountMethods(this);
|
|
35
|
+
aws_1.loadAWSMethods(this);
|
|
36
|
+
cloudconvert_1.loadCloudConvertMethods(this);
|
|
37
|
+
collections_1.loadCollectionMethods(this);
|
|
38
|
+
counters_1.loadCounterMethods(this);
|
|
39
|
+
logs_1.loadLogMethods(this);
|
|
40
|
+
pdf_1.loadPDFMethods(this);
|
|
41
|
+
cron_jobs_2.loadCronJobMethods(this);
|
|
42
|
+
flags_1.loadFlagMethods(this);
|
|
43
|
+
this._mailer = nodemailer.createTransport({
|
|
44
|
+
SES: new aws.SES({
|
|
45
|
+
apiVersion: '2010-12-01',
|
|
46
|
+
accessKeyId: serverConfig.AWSACCESSKEYID,
|
|
47
|
+
secretAccessKey: serverConfig.AWSSECRETACCESSKEY,
|
|
48
|
+
region: serverConfig.AWSSES_REGION
|
|
49
|
+
})
|
|
50
|
+
});
|
|
51
|
+
// this._imap = new imap({
|
|
52
|
+
// user: this.serverConfig['ORDERS_EMAIL'],
|
|
53
|
+
// password: this.serverConfig['ORDERS_PASSWORD'],
|
|
54
|
+
// host: this.serverConfig['ORDERS_HOST'],
|
|
55
|
+
// port: this.serverConfig['ORDERS_PORT'],
|
|
56
|
+
// tls: this.serverConfig['ORDERS_TLS']
|
|
57
|
+
// });
|
|
58
|
+
// let that = this;
|
|
59
|
+
// let chemicalNames = await Chemicals.find({}).select('description').exec();
|
|
60
|
+
// let jobNames = await Jobs.find({status: 'Active'}).select('well').exec();
|
|
61
|
+
// console.log(jobNames.map(a => a.well));
|
|
62
|
+
// this._imap.once('ready', () => {
|
|
63
|
+
// this._imap.openBox('INBOX', true, function(err, box) {
|
|
64
|
+
// if (err) {
|
|
65
|
+
// throw err;
|
|
66
|
+
// }
|
|
67
|
+
// that._imap.search([ 'NEW' ], function(err, results) {
|
|
68
|
+
// console.log(err, results);
|
|
69
|
+
// if (err || !results.length) {
|
|
70
|
+
// return that._imap.end();
|
|
71
|
+
// }
|
|
72
|
+
// let f = that._imap.fetch(results[0], { bodies: ['HEADER.FIELDS (FROM)', 'TEXT'] });
|
|
73
|
+
// f.on('message', function(msg, seqno) {
|
|
74
|
+
// // console.log('Message #%d', seqno);
|
|
75
|
+
// let prefix = '(#' + seqno + ') ';
|
|
76
|
+
// msg.on('body', function(stream, info) {
|
|
77
|
+
// let buffer = '', count = 0;
|
|
78
|
+
// stream.on('data', function(chunk) {
|
|
79
|
+
// count += chunk.length;
|
|
80
|
+
// buffer += chunk.toString('utf8');
|
|
81
|
+
// });
|
|
82
|
+
// stream.once('end', function() {
|
|
83
|
+
// if (info.which === 'TEXT') {
|
|
84
|
+
// // console.log(buffer);
|
|
85
|
+
// // console.log(typeof(buffer));
|
|
86
|
+
// let lines = buffer.split('\r\n');
|
|
87
|
+
// // console.log(lines);
|
|
88
|
+
// // let i = 0;
|
|
89
|
+
// // lines.forEach(line => {
|
|
90
|
+
// // let date: Date;
|
|
91
|
+
// // let dateString;
|
|
92
|
+
// // if (line.includes('From')) {
|
|
93
|
+
// // console.log(line);
|
|
94
|
+
// // }
|
|
95
|
+
// // if (!line.includes('class=3D') && !line.includes('style=3D')) {
|
|
96
|
+
// // if (line.includes('Well') || line.includes('Well Name') || line.includes('Job') || line.includes('Pad')) {
|
|
97
|
+
// // let best = stringSimilarity.findBestMatch(line, jobNames.map(a => a.well)).bestMatch;
|
|
98
|
+
// // if (best && best.rating > 0.5) {
|
|
99
|
+
// // console.log('Well', line);
|
|
100
|
+
// // }
|
|
101
|
+
// // }
|
|
102
|
+
// // if (line.includes('Product') || line.includes('Chemical')) {
|
|
103
|
+
// // let best = stringSimilarity.findBestMatch(line, chemicalNames.map(a => a.description)).bestMatch;
|
|
104
|
+
// // if (best && best.rating > 0.5) {
|
|
105
|
+
// // console.log('Chemical', line);
|
|
106
|
+
// // }
|
|
107
|
+
// // }
|
|
108
|
+
// // if (line.includes('Quantity') || line.includes('Qty') || line.includes('Amount')) {
|
|
109
|
+
// // console.log('Qty', line);
|
|
110
|
+
// // }
|
|
111
|
+
// // if (line.includes('Date')) {
|
|
112
|
+
// // console.log('Date', line);
|
|
113
|
+
// // console.log(moment(Date.parse(line)));
|
|
114
|
+
// // date = moment(Date.parse(line)).toDate();
|
|
115
|
+
// // dateString = line;
|
|
116
|
+
// // }
|
|
117
|
+
// // if (line.includes('Time')) {
|
|
118
|
+
// // console.log('Time', line);
|
|
119
|
+
// // console.log(moment(Date.parse(line)));
|
|
120
|
+
// // console.log(moment(date.setTime(Date.parse(line))));
|
|
121
|
+
// // }
|
|
122
|
+
// // }
|
|
123
|
+
// // });
|
|
124
|
+
// }
|
|
125
|
+
// });
|
|
126
|
+
// });
|
|
127
|
+
// msg.once('attributes', function(attrs) {
|
|
128
|
+
// console.log(prefix + 'Attributes: %s', inspect(attrs, false, 8));
|
|
129
|
+
// });
|
|
130
|
+
// msg.once('end', function() {
|
|
131
|
+
// console.log(prefix + 'Finished');
|
|
132
|
+
// });
|
|
133
|
+
// });
|
|
134
|
+
// f.once('error', function(error) {
|
|
135
|
+
// console.log('Fetch error: ' + error);
|
|
136
|
+
// });
|
|
137
|
+
// f.once('end', function() {
|
|
138
|
+
// console.log('Done fetching all messages!');
|
|
139
|
+
// that._imap.end();
|
|
140
|
+
// });
|
|
141
|
+
// });
|
|
142
|
+
// });
|
|
143
|
+
// });
|
|
144
|
+
// this._imap.connect();
|
|
145
|
+
this._aws = new aws.S3({
|
|
146
|
+
accessKeyId: serverConfig.AWSACCESSKEYID,
|
|
147
|
+
secretAccessKey: serverConfig.AWSSECRETACCESSKEY,
|
|
148
|
+
region: serverConfig.AWSREGION
|
|
149
|
+
});
|
|
150
|
+
setInterval(function () {
|
|
151
|
+
if (!_this._runningQueue) {
|
|
152
|
+
if (_this._sendQueue.length) {
|
|
153
|
+
_this._runningQueue = true;
|
|
154
|
+
var _loop_1 = function (i) {
|
|
155
|
+
var ws = _this._mainServer.getWS(_this._sendQueue[i].id_ws);
|
|
156
|
+
if (ws && ws.readyState === ws.OPEN) {
|
|
157
|
+
if (ws.bufferedAmount < 20480) {
|
|
158
|
+
var sendItem = _this._sendQueue.pop();
|
|
159
|
+
ws.send(JSON.stringify(sendItem.data), function (error) {
|
|
160
|
+
if (error) {
|
|
161
|
+
console.log('Error on WS: ', error);
|
|
162
|
+
_this._mainServer.unsubscribeWS(ws);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
if (sendItem.method !== 'countQuery' && sendItem.method !== 'countCollectionWithQuery' && sendItem.method !== 'find' && sendItem.method !== 'findOne' && sendItem.method !== 'findWithOptions' && sendItem.method !== 'setWSAppVersion' && sendItem.method !== 'uploadFileAndSave') {
|
|
166
|
+
if (common_1.getBinarySize(JSON.stringify(sendItem.methodData)) < 200000 && common_1.getBinarySize(JSON.stringify(sendItem.data)) < 200000) {
|
|
167
|
+
log_collection_1.Logs.create({
|
|
168
|
+
_id: mongoose_1.Types.ObjectId().toHexString(),
|
|
169
|
+
date: new Date(),
|
|
170
|
+
type: 'client-response',
|
|
171
|
+
title: 'Client Response',
|
|
172
|
+
message: 'User: ' + ws['user'] + ', MessageId: ' + sendItem.data.messageId + ', Method: ' + sendItem.method,
|
|
173
|
+
payload: [JSON.stringify(sendItem.methodData), sendItem.data],
|
|
174
|
+
method: sendItem.method,
|
|
175
|
+
user: ws['user'],
|
|
176
|
+
messageId: sendItem.data.messageId
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
log_collection_1.Logs.create({
|
|
181
|
+
_id: mongoose_1.Types.ObjectId().toHexString(),
|
|
182
|
+
date: new Date(),
|
|
183
|
+
type: 'client-response',
|
|
184
|
+
title: 'Client Response',
|
|
185
|
+
message: 'User: ' + ws['user'] + ', MessageId: ' + sendItem.data.messageId + ', Method: ' + sendItem.method,
|
|
186
|
+
payload: 'Too Big',
|
|
187
|
+
method: sendItem.method,
|
|
188
|
+
user: ws['user'],
|
|
189
|
+
messageId: sendItem.data.messageId
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
method_response_collection_1.MethodResponses.create({
|
|
194
|
+
_id: mongoose_1.Types.ObjectId().toHexString(),
|
|
195
|
+
__v: 0,
|
|
196
|
+
id_user: ws['id_user'],
|
|
197
|
+
message_id: sendItem.data.messageId,
|
|
198
|
+
data: JSON.stringify(sendItem.methodData),
|
|
199
|
+
response: sendItem.data,
|
|
200
|
+
method: sendItem.method
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
_this._sendQueue.splice(i, 1);
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
for (var i = _this._sendQueue.length - 1; i >= 0; i--) {
|
|
209
|
+
_loop_1(i);
|
|
210
|
+
}
|
|
211
|
+
_this._runningQueue = false;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}, 50);
|
|
215
|
+
}
|
|
216
|
+
MethodManager.prototype.getMainServer = function () {
|
|
217
|
+
return this._mainServer;
|
|
218
|
+
};
|
|
219
|
+
// Add methods to private methods object
|
|
220
|
+
MethodManager.prototype.methods = function (method) {
|
|
221
|
+
this._methods = Object.assign(this._methods, method);
|
|
222
|
+
};
|
|
223
|
+
MethodManager.prototype.callMethodCron = function (method) {
|
|
224
|
+
var methodData = [];
|
|
225
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
226
|
+
methodData[_i - 1] = arguments[_i];
|
|
227
|
+
}
|
|
228
|
+
var _a;
|
|
229
|
+
var that = this;
|
|
230
|
+
if (!that._methods[method]) {
|
|
231
|
+
console.log('No Method: ' + method);
|
|
232
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Method: ' + method);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if ((methodData.length > 1 || methodData[0]) && !that._methods[method].skipValidation) {
|
|
236
|
+
if (!that._methods[method].check) {
|
|
237
|
+
console.error('No Check Function For Method ' + method);
|
|
238
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Check Function For Method ' + method);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
else if (!that._methods[method].check._schema) {
|
|
242
|
+
console.error('No Check Schema For Method ' + method);
|
|
243
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Check Function For Method ' + method);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
var valObj = {};
|
|
248
|
+
var valKeys = Object.keys(that._methods[method].check._schema);
|
|
249
|
+
var rootKeys = valKeys.filter(function (a) { return !a.includes('.'); });
|
|
250
|
+
for (var i = 0; i < methodData.length; i++) {
|
|
251
|
+
valObj[rootKeys[i]] = methodData[i];
|
|
252
|
+
}
|
|
253
|
+
try {
|
|
254
|
+
that._methods[method].check.validate(valObj);
|
|
255
|
+
}
|
|
256
|
+
catch (errors) {
|
|
257
|
+
if (errors) {
|
|
258
|
+
console.error('Error in Method Check (' + method + ')', errors);
|
|
259
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'Match Error On Method ' + method + '\n\nData Being Checked\n' + JSON.stringify(valObj, null, 2) + '\n\nErrors\n' + JSON.stringify(errors, null, 2));
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
(_a = that._methods[method].function).call.apply(_a, [Object.assign({}, that, { id_user: '', user: '', id_ws: '' })].concat(methodData));
|
|
266
|
+
};
|
|
267
|
+
MethodManager.prototype.callMethodQueue = function (update) {
|
|
268
|
+
// console.log('Call Method Queue', update);
|
|
269
|
+
var _this = this;
|
|
270
|
+
var _a;
|
|
271
|
+
var updateCopy = common_1.deepCopy(update);
|
|
272
|
+
var that = this;
|
|
273
|
+
if (!that._methods[update.method]) {
|
|
274
|
+
console.log('No Method: ' + update.method);
|
|
275
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Method: ' + update.method);
|
|
276
|
+
var serverRes = {
|
|
277
|
+
messageId: update.messageId,
|
|
278
|
+
hasError: true,
|
|
279
|
+
data: 'Internal Error'
|
|
280
|
+
};
|
|
281
|
+
this._mainServer.getQueueManager().addMethodResponse(updateCopy, serverRes);
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
if ((update.method_data.length > 1 || update.method_data[0]) && !that._methods[update.method].skipValidation) {
|
|
285
|
+
if (!that._methods[update.method].check) {
|
|
286
|
+
console.error('No Check Function For Method ' + update.method);
|
|
287
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Check Function For Method ' + update.method);
|
|
288
|
+
var serverRes = {
|
|
289
|
+
messageId: update.messageId,
|
|
290
|
+
hasError: true,
|
|
291
|
+
data: 'Internal Error'
|
|
292
|
+
};
|
|
293
|
+
this._mainServer.getQueueManager().addMethodResponse(updateCopy, serverRes);
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
else if (!that._methods[update.method].check._schema) {
|
|
297
|
+
console.error('No Check Schema For Method ' + update.method);
|
|
298
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Check Function For Method ' + update.method);
|
|
299
|
+
var serverRes = {
|
|
300
|
+
messageId: update.messageId,
|
|
301
|
+
hasError: true,
|
|
302
|
+
data: 'Internal Error'
|
|
303
|
+
};
|
|
304
|
+
this._mainServer.getQueueManager().addMethodResponse(updateCopy, serverRes);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
var valObj = {};
|
|
309
|
+
var valKeys = Object.keys(that._methods[update.method].check._schema);
|
|
310
|
+
var rootKeys = valKeys.filter(function (a) { return !a.includes('.'); });
|
|
311
|
+
for (var i = 0; i < update.method_data.length; i++) {
|
|
312
|
+
valObj[rootKeys[i]] = update.method_data[i];
|
|
313
|
+
}
|
|
314
|
+
try {
|
|
315
|
+
that._methods[update.method].check.validate(valObj);
|
|
316
|
+
}
|
|
317
|
+
catch (errors) {
|
|
318
|
+
if (errors) {
|
|
319
|
+
console.error('Error in Method Check (' + update.method + ')', errors);
|
|
320
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'Match Error On Method ' + update.method + '\n\nData Being Checked\n' + JSON.stringify(valObj, null, 2) + '\n\nErrors\n' + JSON.stringify(errors, null, 2));
|
|
321
|
+
var serverRes = {
|
|
322
|
+
messageId: update.messageId,
|
|
323
|
+
hasError: true,
|
|
324
|
+
data: 'Internal Error'
|
|
325
|
+
};
|
|
326
|
+
this._mainServer.getQueueManager().addMethodResponse(updateCopy, serverRes);
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// console.log('Run Method', update.method);
|
|
333
|
+
(_a = that._methods[update.method].function).call.apply(_a, [Object.assign({}, that, { id_user: update.id_user, user: update.user, id_ws: update.id_ws })].concat(update.method_data)).then(function (res) {
|
|
334
|
+
var serverRes = {
|
|
335
|
+
messageId: update.messageId,
|
|
336
|
+
hasError: false,
|
|
337
|
+
data: res
|
|
338
|
+
};
|
|
339
|
+
_this._mainServer.getQueueManager().addMethodResponse(updateCopy, serverRes);
|
|
340
|
+
}, function (err) {
|
|
341
|
+
var serverRes = {
|
|
342
|
+
messageId: update.messageId,
|
|
343
|
+
hasError: true,
|
|
344
|
+
data: err
|
|
345
|
+
};
|
|
346
|
+
_this._mainServer.getQueueManager().addMethodResponse(updateCopy, serverRes);
|
|
347
|
+
});
|
|
348
|
+
};
|
|
349
|
+
// Call/run method (Emit on Socket)
|
|
350
|
+
MethodManager.prototype.callMethod = function (ws, messageId, method) {
|
|
351
|
+
var _this = this;
|
|
352
|
+
var methodData = [];
|
|
353
|
+
for (var _i = 3; _i < arguments.length; _i++) {
|
|
354
|
+
methodData[_i - 3] = arguments[_i];
|
|
355
|
+
}
|
|
356
|
+
var _a;
|
|
357
|
+
var that = this;
|
|
358
|
+
if (!that._methods[method]) {
|
|
359
|
+
console.log('No Method: ' + method);
|
|
360
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Method: ' + method);
|
|
361
|
+
var serverRes = {
|
|
362
|
+
messageId: messageId,
|
|
363
|
+
hasError: true,
|
|
364
|
+
data: 'Internal Error'
|
|
365
|
+
};
|
|
366
|
+
this.sendWS(ws, method, methodData, serverRes);
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
if ((methodData.length > 1 || methodData[0]) && !that._methods[method].skipValidation) {
|
|
370
|
+
if (!that._methods[method].check) {
|
|
371
|
+
console.error('No Check Function For Method ' + method);
|
|
372
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Check Function For Method ' + method);
|
|
373
|
+
var serverRes = {
|
|
374
|
+
messageId: messageId,
|
|
375
|
+
hasError: true,
|
|
376
|
+
data: 'Internal Error'
|
|
377
|
+
};
|
|
378
|
+
this.sendWS(ws, method, methodData, serverRes);
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
else if (!that._methods[method].check._schema) {
|
|
382
|
+
console.error('No Check Schema For Method ' + method);
|
|
383
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'No Check Function For Method ' + method);
|
|
384
|
+
var serverRes = {
|
|
385
|
+
messageId: messageId,
|
|
386
|
+
hasError: true,
|
|
387
|
+
data: 'Internal Error'
|
|
388
|
+
};
|
|
389
|
+
this.sendWS(ws, method, methodData, serverRes);
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
var valObj = {};
|
|
394
|
+
var valKeys = Object.keys(that._methods[method].check._schema);
|
|
395
|
+
var rootKeys = valKeys.filter(function (a) { return !a.includes('.'); });
|
|
396
|
+
for (var i = 0; i < methodData.length; i++) {
|
|
397
|
+
valObj[rootKeys[i]] = methodData[i];
|
|
398
|
+
}
|
|
399
|
+
try {
|
|
400
|
+
that._methods[method].check.validate(valObj);
|
|
401
|
+
}
|
|
402
|
+
catch (errors) {
|
|
403
|
+
if (errors) {
|
|
404
|
+
console.error('Error in Method Check (' + method + ')', errors);
|
|
405
|
+
that.sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'Match Error On Method ' + method + '\n\nData Being Checked\n' + JSON.stringify(valObj, null, 2) + '\n\nErrors\n' + JSON.stringify(errors, null, 2));
|
|
406
|
+
var serverRes = {
|
|
407
|
+
messageId: messageId,
|
|
408
|
+
hasError: true,
|
|
409
|
+
data: 'Internal Error'
|
|
410
|
+
};
|
|
411
|
+
this.sendWS(ws, method, methodData, serverRes);
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
(_a = that._methods[method].function).call.apply(_a, [Object.assign({}, that, { id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket'] })].concat(methodData)).then(function (res) {
|
|
418
|
+
var serverRes = {
|
|
419
|
+
messageId: messageId,
|
|
420
|
+
hasError: false,
|
|
421
|
+
data: res
|
|
422
|
+
};
|
|
423
|
+
_this.sendWS(ws, method, methodData, serverRes);
|
|
424
|
+
}, function (err) {
|
|
425
|
+
var serverRes = {
|
|
426
|
+
messageId: messageId,
|
|
427
|
+
hasError: true,
|
|
428
|
+
data: err
|
|
429
|
+
};
|
|
430
|
+
_this.sendWS(ws, method, methodData, serverRes);
|
|
431
|
+
});
|
|
432
|
+
};
|
|
433
|
+
// Call/run method internal (No Emit on Socket)
|
|
434
|
+
MethodManager.prototype.callMethodInternal = function (method) {
|
|
435
|
+
var methodData = [];
|
|
436
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
437
|
+
methodData[_i - 1] = arguments[_i];
|
|
438
|
+
}
|
|
439
|
+
var _a;
|
|
440
|
+
var that = this;
|
|
441
|
+
if (!that._methods[method]) {
|
|
442
|
+
console.log('No Method: ' + method);
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
if ((methodData.length > 1 || (methodData[0] && typeof (methodData[0]) !== 'function')) && !that._methods[method].skipValidation) {
|
|
446
|
+
if (!that._methods[method].check) {
|
|
447
|
+
console.error('No Check Function For Method ' + method);
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
else if (!that._methods[method].check._schema) {
|
|
451
|
+
console.error('No Check Schema For Method ' + method);
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
var promise = (_a = that._methods[method].function).call.apply(_a, [that].concat(methodData));
|
|
456
|
+
if (methodData[methodData.length - 1] && typeof (methodData[methodData.length - 1]) === 'function') {
|
|
457
|
+
promise.then(function (res) { return methodData[methodData.length - 1](null, res); }, function (err) { return methodData[methodData.length - 1](err, null); });
|
|
458
|
+
}
|
|
459
|
+
return promise;
|
|
460
|
+
};
|
|
461
|
+
MethodManager.prototype.sendWS = function (ws, method, methodData, data) {
|
|
462
|
+
this._sendQueue.splice(0, 0, {
|
|
463
|
+
id_ws: ws['id_socket'],
|
|
464
|
+
method: method,
|
|
465
|
+
methodData: methodData,
|
|
466
|
+
data: data
|
|
467
|
+
});
|
|
468
|
+
};
|
|
469
|
+
MethodManager.prototype.sendEmail = function (sendTo, subject, text, html, attachments) {
|
|
470
|
+
this._mailer.sendMail({
|
|
471
|
+
replyTo: undefined,
|
|
472
|
+
from: this.serverConfig.MAIL_FROM,
|
|
473
|
+
to: sendTo,
|
|
474
|
+
subject: subject,
|
|
475
|
+
text: text,
|
|
476
|
+
html: html,
|
|
477
|
+
attachments: attachments
|
|
478
|
+
}, function (err, info) {
|
|
479
|
+
if (err) {
|
|
480
|
+
console.log(err);
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
};
|
|
484
|
+
MethodManager.prototype.getAWS = function () {
|
|
485
|
+
return this._aws;
|
|
486
|
+
};
|
|
487
|
+
MethodManager.prototype.readFile = function (fileName) {
|
|
488
|
+
return new Promise(function (resolve, reject) {
|
|
489
|
+
fs.readFile(path.join(__dirname, ('../private/' + fileName)), 'utf-8', function (err, res) {
|
|
490
|
+
if (err) {
|
|
491
|
+
reject(err);
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
resolve(res);
|
|
495
|
+
}
|
|
496
|
+
});
|
|
497
|
+
});
|
|
498
|
+
};
|
|
499
|
+
MethodManager.prototype.readImage = function (fileName) {
|
|
500
|
+
return new Promise(function (resolve, reject) {
|
|
501
|
+
fs.readFile(path.join(__dirname, ('../private/' + fileName)), 'base64', function (err, res) {
|
|
502
|
+
if (err) {
|
|
503
|
+
reject(err);
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
resolve(res);
|
|
507
|
+
}
|
|
508
|
+
});
|
|
509
|
+
});
|
|
510
|
+
};
|
|
511
|
+
return MethodManager;
|
|
512
|
+
}());
|
|
513
|
+
exports.MethodManager = MethodManager;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { QueueMethodModel } from '../models/queue-method.model';
|
|
2
|
+
import { ServerResponseModel } from '../models/server-response.model';
|
|
3
|
+
export declare class QueueMethodManager {
|
|
4
|
+
private _mainServer;
|
|
5
|
+
private _sendQueue;
|
|
6
|
+
private _runningQueue;
|
|
7
|
+
private _runningMethodResponse;
|
|
8
|
+
constructor(mainServer: any);
|
|
9
|
+
addMethodToQueue(id_ws: string, id_user: string, user: string, messageId: string, method: string, data: any[]): void;
|
|
10
|
+
runMethodQueue(count?: number): Promise<void>;
|
|
11
|
+
addMethodResponse(update: QueueMethodModel, response: ServerResponseModel): void;
|
|
12
|
+
runMethodResponse(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=queue-method.manager.d.ts.map
|