badmfck-api-server 2.4.6 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/dist/apiServer/APIService.js +2 -1
  2. package/dist/apiServer/APIService.js.map +1 -0
  3. package/dist/apiServer/BaseEndpoint.js +1 -0
  4. package/dist/apiServer/BaseEndpoint.js.map +1 -0
  5. package/dist/apiServer/BaseService.js +1 -0
  6. package/dist/apiServer/BaseService.js.map +1 -0
  7. package/dist/apiServer/ClusterService.d.ts +18 -5
  8. package/dist/apiServer/ClusterService.js +45 -14
  9. package/dist/apiServer/ClusterService.js.map +1 -0
  10. package/dist/apiServer/DocumentService.js +1 -0
  11. package/dist/apiServer/DocumentService.js.map +1 -0
  12. package/dist/apiServer/HUBService.d.ts +11 -4
  13. package/dist/apiServer/HUBService.js +79 -18
  14. package/dist/apiServer/HUBService.js.map +1 -0
  15. package/dist/apiServer/LocalRequest.js +1 -0
  16. package/dist/apiServer/LocalRequest.js.map +1 -0
  17. package/dist/apiServer/LogService.js +1 -0
  18. package/dist/apiServer/LogService.js.map +1 -0
  19. package/dist/apiServer/MysqlService.js +4 -3
  20. package/dist/apiServer/MysqlService.js.map +1 -0
  21. package/dist/apiServer/WSAPITransport.js +1 -0
  22. package/dist/apiServer/WSAPITransport.js.map +1 -0
  23. package/dist/apiServer/WebSocketHandler.d.ts +0 -0
  24. package/dist/apiServer/WebSocketHandler.js +2 -0
  25. package/dist/apiServer/WebSocketHandler.js.map +1 -0
  26. package/dist/apiServer/WebsocketService.js +1 -0
  27. package/dist/apiServer/WebsocketService.js.map +1 -0
  28. package/dist/apiServer/cluster/HUBConnection.d.ts +25 -25
  29. package/dist/apiServer/cluster/HUBConnection.js +107 -86
  30. package/dist/apiServer/cluster/HUBConnection.js.map +1 -0
  31. package/dist/apiServer/cluster/HUBHandlres.d.ts +0 -0
  32. package/dist/apiServer/cluster/HUBHandlres.js +2 -0
  33. package/dist/apiServer/cluster/HUBHandlres.js.map +1 -0
  34. package/dist/apiServer/deployment/Deployment.js +1 -0
  35. package/dist/apiServer/deployment/Deployment.js.map +1 -0
  36. package/dist/apiServer/helper/DataProvider.js +1 -0
  37. package/dist/apiServer/helper/DataProvider.js.map +1 -0
  38. package/dist/apiServer/helper/Sleep.d.ts +1 -0
  39. package/dist/apiServer/helper/Sleep.js +6 -0
  40. package/dist/apiServer/helper/Sleep.js.map +1 -0
  41. package/dist/apiServer/helper/UID.js +1 -0
  42. package/dist/apiServer/helper/UID.js.map +1 -0
  43. package/dist/apiServer/helper/Validator.js +1 -0
  44. package/dist/apiServer/helper/Validator.js.map +1 -0
  45. package/dist/apiServer/monitor/Monitor.js +1 -0
  46. package/dist/apiServer/monitor/Monitor.js.map +1 -0
  47. package/dist/apiServer/routes/Liveness.js +1 -0
  48. package/dist/apiServer/routes/Liveness.js.map +1 -0
  49. package/dist/apiServer/routes/Readiness.js +1 -0
  50. package/dist/apiServer/routes/Readiness.js.map +1 -0
  51. package/dist/apiServer/structures/DefaultErrors.js +1 -0
  52. package/dist/apiServer/structures/DefaultErrors.js.map +1 -0
  53. package/dist/apiServer/structures/HTTPStatus.js +1 -0
  54. package/dist/apiServer/structures/HTTPStatus.js.map +1 -0
  55. package/dist/apiServer/structures/Interfaces.js +1 -0
  56. package/dist/apiServer/structures/Interfaces.js.map +1 -0
  57. package/dist/index.js +1 -0
  58. package/dist/index.js.map +1 -0
  59. package/package.json +2 -2
@@ -83,7 +83,7 @@ async function Initializer(services) {
83
83
  exports.Initializer = Initializer;
84
84
  class APIService extends BaseService_1.BaseService {
85
85
  static nextLogID = 0;
86
- version = "2.4.4";
86
+ version = "2.5.0";
87
87
  options;
88
88
  monitor;
89
89
  monitorIndexFile;
@@ -451,3 +451,4 @@ class APIService extends BaseService_1.BaseService {
451
451
  }
452
452
  }
453
453
  exports.APIService = APIService;
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQWlDdkIsU0FBZ0IsaUJBQWlCO0lBQ2hDLE9BQU87UUFDTixJQUFJLEVBQUUsSUFBSTtRQUNWLFlBQVksRUFBRSxPQUFPO1FBQ3JCLGlCQUFpQixFQUFFO1lBQ2xCLHVCQUF1QjtTQUN2QjtRQUNELFNBQVMsRUFBRSxFQUFFO1FBQ2IsU0FBUyxFQUFDLE1BQU07UUFDaEIsWUFBWSxFQUFFLFVBQVUsR0FBNkI7WUFDcEQsSUFBQSxvQkFBTyxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEVBQUMsVUFBUyxHQUFPO1lBQ3ZCLElBQUEscUJBQVEsRUFBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsdUJBQXVCLEVBQUMsS0FBSztRQUM3QixTQUFTLEVBQUMsRUFBRSxHQUFDLElBQUksR0FBQyxJQUFJO1FBQ3RCLFdBQVcsRUFBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFlBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxhQUFhLENBQUM7S0FDbkQsQ0FBQTtBQUNGLENBQUM7QUFuQkQsOENBbUJDO0FBRVksUUFBQSxrQkFBa0IsR0FBc0MsSUFBSSxvQkFBRyxDQUFDLFNBQVMsRUFBQyxvQkFB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QUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDakIsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLEVBQUUsQ0FBQztnQkFDVCxJQUFHLE1BQU0sSUFBRSxDQUFDLEVBQUM7b0JBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFDLGFBQWEsR0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDckYsTUFBTTtpQkFDTjthQUNEO1NBQ0Q7UUFDRCxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDdkIsQ0FBQzs7QUF2Y0YsZ0NBeWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MsIHsgQXBwbGljYXRpb24sIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcydcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL0Jhc2VTZXJ2aWNlJ1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycydcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBCYXNlRW5kcG9pbnQsIElCYXNlRW5kcG9pbnQgfSBmcm9tICcuL0Jhc2VFbmRwb2ludCdcbmltcG9ydCBEZWZhdWx0RXJyb3JzLCB7IEVycm9yVXRpbHMgfSBmcm9tICcuL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9ycydcbmltcG9ydCB7IEhUVFBSZXF1ZXN0Vk8sIElFcnJvciwgVHJhbnNmZXJQYWNrZXRWTyB9IGZyb20gJy4vc3RydWN0dXJlcy9JbnRlcmZhY2VzJ1xuaW1wb3J0IHtSZXF9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gJy4vTG9nU2VydmljZSdcbmltcG9ydCB7IE1vbml0b3IgfSBmcm9tICcuL21vbml0b3IvTW9uaXRvcidcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgZmlsZVVwbG9hZCBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgb3MgZnJvbSBcIm9zXCJcbmltcG9ydCB7IExpdmVuZXNzIH0gZnJvbSAnLi9yb3V0ZXMvTGl2ZW5lc3MnXG5pbXBvcnQgeyBSZWFkaW5lc3MgfSBmcm9tICcuL3JvdXRlcy9SZWFkaW5lc3MnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXtcdFxuXHRpZDpudW1iZXIsXG5cdGNyZWF0ZWQ6bnVtYmVyLFxuXHR0aW1lOm51bWJlcixcblx0cmVmZXJlcj86c3RyaW5nLFxuXHRyZXF1ZXN0Ontba2V5OnN0cmluZ106YW55fSxcblx0cmVzcG9uc2U6e1trZXk6c3RyaW5nXTphbnl9XG5cdGVycm9yPzpzdHJpbmd8bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VPcHRpb25ze1xuXHRwb3J0Om51bWJlcixcblx0YmFzZUVuZFBvaW50OnN0cmluZyAvLyBcIi9hcGkvXCJcblx0Y29yc0hvc3RXaGl0ZUxpc3Q6c3RyaW5nW10sXG5cdGVuZHBvaW50czpJQmFzZUVuZHBvaW50W10sXG5cdGpzb25MaW1pdDpzdHJpbmcgLy8gXCIxMG1iXCJcblx0b25OZXR3b3JrTG9nPzooKGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pPT52b2lkKXxudWxsXG5cdG9uRXJyb3I/OigoLi4ucmVzdDphbnlbXSk9PnZvaWQpfG51bGxcblx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6Ym9vbGVhbixcblx0aW50ZXJjZXB0b3I/OklCYXNlRW5kcG9pbnQsXG5cdHBvc3Rwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPlxuXHRwcmVwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsKT0+YW55XG5cdFxuXHRtb25pdG9yPzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31bXVxuXHQvL2RlcGxveW1lbnQ/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVxuXHRhcHBWZXJzaW9uPzpzdHJpbmdcblxuXHRmaWxlVGVtcERpcjpzdHJpbmc7XG5cdGZpbGVMaW1pdDpudW1iZXIgLy8gYlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKTpBUElTZXJ2aWNlT3B0aW9uc3tcblx0cmV0dXJuIHtcblx0XHRwb3J0OiA4MDkxLFxuXHRcdGJhc2VFbmRQb2ludDogJy9hcGkvJyxcblx0XHRjb3JzSG9zdFdoaXRlTGlzdDogW1xuXHRcdFx0J2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG5cdFx0XSxcblx0XHRlbmRwb2ludHM6IFtdLFxuXHRcdGpzb25MaW1pdDpcIjEwbWJcIixcblx0XHRvbk5ldHdvcmtMb2c6IGZ1bmN0aW9uIChsb2c6IEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk6IHZvaWQge1xuXHRcdFx0bG9nSW5mbyhcIiR7QVBJU2VydmljZS5qc31cIixsb2cpXG5cdFx0fSxcblx0XHRvbkVycm9yOmZ1bmN0aW9uKGVycjphbnkpe1xuXHRcdFx0bG9nRXJyb3IoXCIke0FQSVNlcnZpY2UuanN9XCIsZXJyKTtcblx0XHR9LFxuXHRcdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmZhbHNlLFxuXHRcdGZpbGVMaW1pdDo1MCoxMDI0KjEwMjQsXG5cdFx0ZmlsZVRlbXBEaXI6cGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLFwiZmlsZVRlbXBEaXJcIilcblx0fVxufVxuXG5leHBvcnQgY29uc3QgUkVRX0NSRUFURV9ORVRfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9DUkVBVEVfTkVUX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW10+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQ6UmVxPHZvaWQsbnVtYmVyPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlRcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfU0VSVkVSOlJlcTx2b2lkLHtleHByZXNzOkFwcGxpY2F0aW9uLGh0dHA6aHR0cC5TZXJ2ZXJ9PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfU0VSVkVSXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9JTlRFUk5BTF9DQUxMOlJlcTxIVFRQUmVxdWVzdFZPLElFcnJvcnxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSU5URVJOQUxfQ0FMTFwiKTtcblxuXG5jb25zdCBhY3RpdmVTZXJ2aWNlczpTdHJpbmdbXT1bXVxuY29uc3QgZW50cnlQb2ludHM6U3RyaW5nW109W11cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEluaXRpYWxpemVyKHNlcnZpY2VzOklCYXNlU2VydmljZVtdKXtcbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGF3YWl0IGkuaW5pdCgpO2FjdGl2ZVNlcnZpY2VzLnB1c2goaS5nZXROYW1lKCkpIH1cbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGkuYXBwbGljYXRpb25SZWFkeSgpIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFQSVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG5cblx0Ly8gTkVUIExPR1xuXHRwcml2YXRlIHN0YXRpYyBuZXh0TG9nSUQ9MDtcblx0cHJpdmF0ZSB2ZXJzaW9uID0gXCIyLjUuMFwiXG5cdHByaXZhdGUgb3B0aW9uczpBUElTZXJ2aWNlT3B0aW9ucztcblx0cHJpdmF0ZSBtb25pdG9yPzpNb25pdG9yXG5cdHByaXZhdGUgbW9uaXRvckluZGV4RmlsZT86QnVmZmVyXG5cdHByaXZhdGUgc3RhcnRlZDpEYXRlID0gbmV3IERhdGUoKTtcblx0cHJpdmF0ZSByZXF1ZXN0c0NvdW50PTA7XG5cdHByaXZhdGUgc2VydmVyPWh0dHBcblxuXHRuZXRMb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW109W107XG5cblx0Y29uc3RydWN0b3Iob3B0aW9ucz86QVBJU2VydmljZU9wdGlvbnN8bnVsbCkge1xuXHRcdHN1cGVyKCdIVFRQIFNlcnZpY2UnKVxuXHRcdHRoaXMub3B0aW9ucz1vcHRpb25zID8/IGdldERlZmF1bHRPcHRpb25zKCk7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdClcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdD1bXTtcblx0XHRjb25zdCBzZWxmID0gXCJodHRwOi8vbG9jYWxob3N0OlwiK3RoaXMub3B0aW9ucy5wb3J0O1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuZmluZCh2YWw9PnZhbD09PXNlbGYpKVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LnB1c2goKVxuXG5cdFx0aWYodGhpcy5vcHRpb25zLm1vbml0b3IgJiYgdGhpcy5vcHRpb25zLm1vbml0b3IubGVuZ3RoPjApe1xuXHRcdFx0dGhpcy5tb25pdG9yPW5ldyBNb25pdG9yKCk7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZW5kcG9pbnRzLnB1c2godGhpcy5tb25pdG9yKVxuXHRcdFx0Y29uc29sZS53YXJuKFwiU2VydmljZSBNb25pdG9yIGluaXRpYWxpemVkXCIpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJtb25pdG9yIGxpbmtzOlwiKVxuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdGNvbnNvbGUud2FybihpLmxvZ2luK1wiIC0+IC9zbS1cIitoYXNoKVx0XHRcdFx0XHRcdFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNyZWF0ZSBsaXZlbmVzcywgcmVhZGluZXNzXG5cdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKG5ldyBMaXZlbmVzcyh0aGlzLnN0YXJ0ZWQpLG5ldyBSZWFkaW5lc3ModGhpcy5zdGFydGVkKSlcblx0XHRSRVFfSFRUUF9SRVFVRVNUU19DT1VOVC5saXN0ZW5lciA9IGFzeW5jICgpID0+IHRoaXMucmVxdWVzdHNDb3VudDtcblx0fVxuXG5cblx0b3ZlcnJpZGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuXHRcdFJFUV9IVFRQX0xPRy5saXN0ZW5lcj1hc3luYyBpZ25vcmU9PnRoaXMubmV0TG9nO1xuXHRcdFJFUV9DUkVBVEVfTkVUX0xPRy5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e1xuXHRcdFx0Y29uc3QgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSA9IHtcblx0XHRcdFx0Y3JlYXRlZDogK25ldyBEYXRlKCksXG5cdFx0XHRcdHRpbWU6IDAsXG5cdFx0XHRcdHJlcXVlc3Q6IHt9LFxuXHRcdFx0XHRyZXNwb25zZToge30sXG5cdFx0XHRcdGVycm9yOm51bGwsXG5cdFx0XHRcdGlkOiBBUElTZXJ2aWNlLm5leHRMb2dJRCsrXG5cdFx0XHR9XG5cdFx0XHR0aGlzLm5ldExvZy5wdXNoKGxvZylcblx0XHRcdGlmKHRoaXMubmV0TG9nLmxlbmd0aD4xMDAwKVxuXHRcdFx0XHR0aGlzLm5ldExvZy5zaGlmdCgpXG5cdFx0XHRyZXR1cm4gbG9nO1xuXHRcdH1cblxuXHRcdC8vIGludGVybmFsIGNhbGxcblx0XHRSRVFfSU5URVJOQUxfQ0FMTC5saXN0ZW5lciA9IGFzeW5jIChyZXEpPT57XG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRcdGlmKCFpIHx8ICFpLmVuZHBvaW50cylcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XHRpZihlcD09PSByZXEuZW5kcG9pbnQpe1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpLmV4ZWN1dGUocmVxKVxuXHRcdFx0XHRcdFx0aWYocmVzcG9uc2UuZXJyb3IpXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxkYXRhOm51bGwsaHR0cFN0YXR1czo0MDR9XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBleHByZXNzXG5cdFx0Y29uc3QgYXBwID0gZXhwcmVzcygpXG5cdFx0Y29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXBwKTtcblxuXHRcdFJFUV9IVFRQX1NFUlZFUi5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e3JldHVybiB7ZXhwcmVzczphcHAsaHR0cDpzZXJ2ZXJ9fTtcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5pc1Byb2R1Y3Rpb25FbnZpcm9ubWVudClcblx0XHRcdGFwcC5zZXQoXCJlbnZcIiwncHJvZHVjdGlvbicpO1xuXG5cdFx0YXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzEwbWInIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi9qc29uXG5cdFx0YXBwLnVzZShleHByZXNzLnVybGVuY29kZWQoeyBsaW1pdDogJzEwbWInLCBleHRlbmRlZDogdHJ1ZSB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cblx0XHRhcHAudXNlKGZpbGVVcGxvYWQoe1xuXHRcdFx0bGltaXRIYW5kbGVyOiAocmVxLCByZXMsIG5leHQpPT57XG5cdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5GSUxFX1RPT19MQVJHRSxcblx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0aHR0cFN0YXR1czo0MTMsXG5cdFx0XHRcdH0sK25ldyBEYXRlKCkscmVxLnBhdGgpO1xuXHRcdFx0fSxcblx0XHRcdGxpbWl0czogeyBmaWxlU2l6ZTogdGhpcy5vcHRpb25zLmZpbGVMaW1pdCB9LFxuXHRcdFx0dXNlVGVtcEZpbGVzOiB0cnVlLFxuXHRcdFx0dXJpRGVjb2RlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0dGVtcEZpbGVEaXI6IHRoaXMub3B0aW9ucy5maWxlVGVtcERpcixcblx0XHRcdC8vc2FmZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdGFib3J0T25MaW1pdDp0cnVlXG5cdFx0fSkpXG5cblx0XHRhcHAudXNlKGFzeW5jIChlcnI6YW55LHJlcTphbnkscmVzcDphbnksbmV4dDphbnkpPT57XG5cdFx0XHRcblx0XHRcdGlmKCFlcnIpe1xuXHRcdFx0XHRuZXh0KCk7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0XHQvL3JlcXVlc3Qgc3RhcnQgdGltZVxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRjb25zdCBsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0ZGF0YTpcIlwiLFxuXHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtc1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcmVzcG9uc2VFcnJvcj1EZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVDtcblx0XHRcdGlmICh0eXBlb2YgZXJyID09PSBcIm9iamVjdFwiICYmIGVyci5zdGF0dXMgPT09IDQwMCAmJiAnYm9keScgaW4gZXJyICYmIGVyci50eXBlID09PSAnZW50aXR5LnBhcnNlLmZhaWxlZCcpIHtcblx0XHRcdFx0cmVzcG9uc2VFcnJvciA9IERlZmF1bHRFcnJvcnMuSlNPTl9NQUxGT1JNRURcblx0XHRcdH1cbiAgICAgIFxuXG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXNwLHtcblx0XHRcdFx0ZXJyb3I6cmVzcG9uc2VFcnJvcixcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwMFxuXHRcdFx0fSx0bWUsXCJcIixsb2cpXG5cblx0XHR9KVxuXG5cdFx0Y29uc3QgY29yc09wdGlvbnMgPSB7XG5cdFx0XHRvcmlnaW46IChvcmlnaW46IGFueSwgY2FsbGJhY2s6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5Jc1doaXRlbGlzdGVkID0gdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmluY2x1ZGVzKG9yaWdpbilcblx0XHRcdFx0Y2FsbGJhY2sobnVsbCwgb3JpZ2luSXNXaGl0ZWxpc3RlZClcblx0XHRcdH0sXG5cdFx0XHRjcmVkZW50aWFsczogdHJ1ZVxuXHRcdH1cblx0XHRhcHAudXNlKGNvcnMoY29yc09wdGlvbnMpKVxuXG5cdFx0Ly8gcmVnaXN0cmF0ZSBlbmRwb2ludHNcblx0XHRCYXNlRW5kcG9pbnQuc2V0RW50cnlQb2ludCh0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50KVxuXHRcdFxuXHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdGF3YWl0IGkuaW5pdCgpO1xuXHRcdFx0aWYoIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XG5cblx0XHRcdFx0Ly8gaW5jb21pbmcgcmVxdWVzdFxuXHRcdFx0XHRhcHAuYWxsKGVwLGFzeW5jIChyZXEscmVzKT0+e1xuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHNDb3VudCsrO1xuXHRcdFx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdGxldCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwgPSBudWxsO1xuXHRcdFx0XHRcdGlmKCFpLmlnbm9yZUh0dHBMb2dnaW5nKXtcblx0XHRcdFx0XHRcdGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRcdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdFx0XHRcdHVybDpyZXEudXJsLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEuYm9keSksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEucGFyYW1zKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAoKT0+e1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib2R5ID0gcmVxLmJvZHk7XG5cdFx0XHRcdFx0XHRpZihyZXEucXVlcnkgJiYgdHlwZW9mIHJlcS5xdWVyeSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiByZXEucXVlcnkpe1xuXHRcdFx0XHRcdFx0XHRcdGJvZHlbaV09cmVxLnF1ZXJ5W2ldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGh0dHBSZXF1ZXN0OkhUVFBSZXF1ZXN0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdHJhdzpyZXEgYXMgSW5jb21pbmdNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTpyZXEuYm9keSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXMsXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnM6cmVxLmhlYWRlcnMgYXMgYW55LFxuXHRcdFx0XHRcdFx0XHRlbmRwb2ludDplcCxcblx0XHRcdFx0XHRcdFx0ZmlsZXM6cmVxLmZpbGVzID8/IG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlZmVyZXI6cmVxLmdldChcIlJlZmVyZXJcIiksXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcil7XG5cdFx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlcHJvZHVjZXJSZXN1bHQgPSBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRpZihwcmVwcm9kdWNlclJlc3VsdClcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVwcm9kdWNlclJlc3VsdCA9IHByZXByb2R1Y2VyUmVzdWx0O1xuXHRcdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtlcnJvcjp7Y29kZToxMDAwMixtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsZGV0YWlsczpgJHtlfWB9LGRhdGE6bnVsbCxodHRwU3RhdHVzOjUwMH0sdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxldCByZXN1bHRcblx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSBpbnRlcmNlcHRvciBpZiBleGlzdHNcblx0XHRcdFx0XHRcdFx0aWYoIWouaWdub3JlSW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBpbnRlcmNlcHRvclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW50ZXJjZXB0b3JSZXN1bHQ9YXdhaXQgdGhpcy5vcHRpb25zLmludGVyY2VwdG9yLmV4ZWN1dGUoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW50ZXJjZXB0b3JSZXN1bHQuZXJyb3IgJiYgIWouYWxsb3dJbnRlcmNlcHRvckVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGludGVyY2VwdG9yUmVzdWx0LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5pbnRlcmNlcHRvclJlc3VsdCA9IGludGVyY2VwdG9yUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJlY2hlY2tcblx0XHRcdFx0XHRcdFx0aWYoaSA9PT0gdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXtkYXRhOnRoaXMub3B0aW9ucy5tb25pdG9yfVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZWNoZWNrPWF3YWl0IGkucHJlY2hlY2soaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdGlmKHByZWNoZWNrICYmIHByZWNoZWNrLmVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscHJlY2hlY2ssdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9cHJlY2hlY2s7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBJZiBpbnRlcmNlcHRvciBoYXMgbm8gZXJyb3JzLCBleGVjdXRlIG1haW4gaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBpLmV4ZWN1dGUoaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdCBcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoZSlcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRmF0YWxFcnJvcihlcCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDAsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29kZToxMDAwMixcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscmVzdWx0LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGV4ZWN1dGUoKVxuXHRcdFx0XHR9KTsvLyBoYW5kbGUgaW5jb21pbmcgcmVxdWVzdFxuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFxuXG5cdFx0Ly8gZmluYWwgaGFuZGxlclxuXHRcdGFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG5cdFx0XHRcblx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpXG5cblx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHQvL2NoZWNrIGlmIHJlcXVlc3RpbmcgbW9uaXRvclxuXHRcdFx0XHRpZihyZXEubWV0aG9kPT09XCJHRVRcIil7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0bGV0IG1vbml0b3JSZXF1ZXN0PWZhbHNlO1xuXHRcdFx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdFx0XHRjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGkubG9naW4raS5wYXNzd29yZCkuZGlnZXN0KCkudG9TdHJpbmcoXCJoZXhcIilcblx0XHRcdFx0XHRcdGlmKHJlcS5vcmlnaW5hbFVybC5lbmRzV2l0aChcIi9zbS1cIitoYXNoKSl7XG5cdFx0XHRcdFx0XHRcdG1vbml0b3JSZXF1ZXN0PXRydWU7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKG1vbml0b3JSZXF1ZXN0KXtcblx0XHRcdFx0XHRcdC8vIHNlbmQgaW5kZXggVGh1LCAxNiBOb3YgMjAyMyAyMzozMzozNSBHTVRcblx0XHRcdFx0XHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdFx0dHJ5e1xuXHRcdFx0XHRcdFx0XHRpZighdGhpcy5tb25pdG9ySW5kZXhGaWxlKVxuXHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3JJbmRleEZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKF9fZGlybmFtZSxcIm1vbml0b3JcIixcImluZGV4Lmh0bWxcIikpO1xuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsXCJ0ZXh0L2h0bWxcIilcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihcIkNvbnRlbnQtTGVuZ3RoXCIsdGhpcy5tb25pdG9ySW5kZXhGaWxlLmJ5dGVMZW5ndGgpXG5cdFx0XHRcdFx0XHRcdHJlcy5zdGF0dXMoMjAwKS5zZW5kKHRoaXMubW9uaXRvckluZGV4RmlsZSk7XG5cdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29kZToxMDAwMixcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSx0bWUscmVxLnBhdGgpO1x0XHRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0XG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse1xuXHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwNFxuXHRcdFx0fSx0bWUscmVxLnBhdGgpO1xuXHRcdH0pXG5cblx0XHRzZXJ2ZXIubGlzdGVuKHRoaXMub3B0aW9ucy5wb3J0LCAoKSA9PiB7XG5cdFx0XHRsb2dDcml0KCcke0FQSVNlcnZpY2UuanN9JywnQVBJIFNlcnZpY2Ugc3RhcnRlZCBhdDogJyt0aGlzLm9wdGlvbnMucG9ydCtcIiwgd2l0aCBiYXNlIGVuZHBvaW50OlwiK3RoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQrXCIsIHZlci46IFwiK3RoaXMudmVyc2lvbilcblx0XHR9KVxuXG5cdFx0LyphcHAubGlzdGVuKHRoaXMub3B0aW9ucy5wb3J0LCAoKSA9PiB7XG5cdFx0XHRsb2dDcml0KCcke0FQSVNlcnZpY2UuanN9JywnQVBJIFNlcnZpY2Ugc3RhcnRlZCBhdDogJyt0aGlzLm9wdGlvbnMucG9ydCtcIiwgd2l0aCBiYXNlIGVuZHBvaW50OlwiK3RoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQrXCIsIHZlci46IFwiK3RoaXMudmVyc2lvbilcblx0XHR9KSovXG5cdH1cblxuXHRhc3luYyBzZW5kUmVzcG9uc2UocmVmOnN0cmluZyxyZXM6UmVzcG9uc2UsZGF0YTpUcmFuc2ZlclBhY2tldFZPPGFueT4scmVxdWVzdFRpbWU6bnVtYmVyLGVuZHBvaW50PzpzdHJpbmcsbG9nPzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCxyZXE/OkhUVFBSZXF1ZXN0Vk8pe1xuXG5cdFx0aWYodGhpcy5vcHRpb25zLnBvc3Rwcm9kdWNlcil7XG5cdFx0XHR0cnl7XG5cdFx0XHRcdGRhdGEgPSBhd2FpdCB0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKHJlcSxyZXMsZGF0YSxyZXF1ZXN0VGltZSxlbmRwb2ludCxsb2cpO1xuXHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRsb2dFcnJvcihcIlBvc3Rwcm9kdWNlciBlcnJvclwiLGUpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGRhdGEpKVxuXHRcdFx0ZGF0YSA9IHtlcnJvcjpkYXRhIGFzIElFcnJvcixkYXRhOm51bGx9XG5cdFx0XG4gICAgICAgIGRhdGEucmVzcG9uc2VUaW1lID0gKCtuZXcgRGF0ZSgpKSAtIHJlcXVlc3RUaW1lO1xuICAgICAgICBkYXRhLmNvcmUgPSB0aGlzLnZlcnNpb25cbiAgICAgICAgZGF0YS5lbmRwb2ludCA9IGVuZHBvaW50ID8/IFwibm9fZW5kcG9pbnRcIlxuXHRcdFxuXHRcdGlmKHRoaXMub3B0aW9ucy5hcHBWZXJzaW9uKVxuXHRcdFx0ZGF0YS52ZXJzaW9uPXRoaXMub3B0aW9ucy5hcHBWZXJzaW9uXG5cblx0XHRcblx0XHRpZihsb2cpe1xuXHRcdFx0bG9nLnRpbWUgPSBkYXRhLnJlc3BvbnNlVGltZVxuXHRcdFx0bG9nLnJlZmVyZXI9cmVmO1xuXHRcdH1cblxuXHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlUmVzcG9uc2UoZGF0YS5lbmRwb2ludCxkYXRhLnJlc3BvbnNlVGltZSlcblxuICAgICAgICBpZihyZXMuZGVzdHJveWVkIHx8IHJlcy5jbG9zZWQpe1xuXG5cdFx0XHRpZihsb2cpXG5cdFx0XHRcdGxvZy5lcnJvciA9IFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZSBmb3I6IFwiK2RhdGEuZW5kcG9pbnRcblx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuICAgICAgICAgICAgXHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNvbm5lY3Rpb24gYWxyZWFkeSBjbG9zZWQsIGNhbid0IHNlbmQgcmVzcG9uc2U6IFwiK2RhdGEuZW5kcG9pbnQsZGF0YSlcbiAgICAgICAgICAgIFxuXHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXG4gICAgICAgIH1lbHNle1xuXHRcdFx0dHJ5e1xuXG5cdFx0XHRcdGlmKGRhdGEuZmlsZSl7XG5cblx0XHRcdFx0XHRyZXMuc2VuZEZpbGUoZGF0YS5maWxlLGVycj0+e1xuXHRcdFx0XHRcdFx0aWYoZXJyKXtcblx0XHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRcdGxvZy5lcnJvciA9IFwiQ2FuJ3Qgc2VuZCBmaWxlOiBcIitkYXRhLmZpbGVcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZSxlcnIpXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiBkYXRhLmVuZHBvaW50KVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVmLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5DQU5UX1NFTkRfRklMRSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSxyZXF1ZXN0VGltZSxkYXRhLmVuZHBvaW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0pXG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKGRhdGEucmVkaXJlY3Qpe1xuXHRcdFx0XHRcdHJlcy5yZWRpcmVjdChkYXRhLnJlZGlyZWN0KTtcblx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB7cmVkaXJlY3Q6ZGF0YS5yZWRpcmVjdH1cblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly8gc2V0dXAgaGVhZGVyc1xuXHRcdFx0XHRcdGlmKGRhdGEuaGVhZGVycyl7XG5cdFx0XHRcdFx0XHRmb3IobGV0IGkgaW4gZGF0YS5oZWFkZXJzKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKGksZGF0YS5oZWFkZXJzW2ldKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cyAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXM+OTkpXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZSA9IGRhdGEuZXJyb3IuaHR0cFN0YXR1c1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlPWRhdGEuaHR0cFN0YXR1cyA/PyAyMDBcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihkYXRhLnJhd1Jlc3BvbnNlKXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEuZGF0YSlcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEpO1xuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXG5cdFx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVBUElFcnJvcihkYXRhLmVuZHBvaW50KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNhbid0IHNlbmQgcmVzcG9uc2VcIixlKTtcblx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdGxvZy5lcnJvcj1cIkNhbid0IHNlbmQgcmVzcG9uc2VcIlxuXHRcdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVFcnJvcihkYXRhLmVuZHBvaW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBzaG93IGxvZ1xuXHRcdGlmKHRoaXMub3B0aW9ucy5vbk5ldHdvcmtMb2cgJiYgbG9nKVxuXHRcdFx0dGhpcy5vcHRpb25zLm9uTmV0d29ya0xvZyhsb2cpXG4gICAgfVxuXG5cblx0Y2hlY2tEYXRhTGVuZ3RoKGRhdGE6YW55LHJlc3VsdD86YW55LGx2bD86bnVtYmVyKTphbnl7XG5cdFx0XG5cdFx0aWYoIWx2bClcblx0XHRcdGx2bD0wO1xuXG5cdFx0aWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYodHlwZW9mIGRhdGE9PT1cInN0cmluZ1wiICYmIGRhdGEubGVuZ3RoPjEwMjQpXG5cdFx0XHRcdHJldHVybiBkYXRhLnN1YnN0cmluZygwLDEwMDApK1wiLi4uICh0b3RhbDpcIiArIGRhdGEubGVuZ3RoICsgXCIpXCJcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdGlmKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKCFyZXN1bHQpXG5cdFx0XHRcdHJlc3VsdD17fTtcblx0XHRcdGxldCBhcnJjbnQgPSAxMDA7XG5cdFx0XHRmb3IobGV0IGkgaW4gZGF0YSl7XG5cdFx0XHRcdHJlc3VsdFtpXT10aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhW2ldLHJlc3VsdFtpXSxsdmwrMSk7XG5cdFx0XHRcdGFycmNudC0tO1xuXHRcdFx0XHRpZihhcnJjbnQ8PTApe1xuXHRcdFx0XHRcdHJlc3VsdFtcIi4uLlwiXT1cIi4uLiB0b3RhbDogXCIrQXJyYXkuaXNBcnJheShkYXRhKT9kYXRhLmxlbmd0aDpPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdCA/PyBudWxsO1xuXHR9XG5cbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"APIService.js","sourceRoot":"","sources":["../../src/apiServer/APIService.ts"],"names":[],"mappings":"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","sourcesContent":["import express, { Application, Response } from 'express'\nimport { BaseService, IBaseService } from './BaseService'\nimport cors from 'cors'\nimport { IncomingMessage } from 'http'\nimport { BaseEndpoint, IBaseEndpoint } from './BaseEndpoint'\nimport DefaultErrors, { ErrorUtils } from './structures/DefaultErrors'\nimport { HTTPRequestVO, IError, TransferPacketVO } from './structures/Interfaces'\nimport {Req} from \"badmfck-signal\"\nimport { logCrit, logError, logInfo } from './LogService'\nimport { Monitor } from './monitor/Monitor'\nimport path from \"path\"\nimport crypto from \"crypto\";\nimport fs from \"fs\"\nimport fileUpload from 'express-fileupload'\nimport os from \"os\"\nimport { Liveness } from './routes/Liveness'\nimport { Readiness } from './routes/Readiness'\nimport http from 'http'\n\nexport interface APIServiceNetworkLogItem{\t\n\tid:number,\n\tcreated:number,\n\ttime:number,\n\treferer?:string,\n\trequest:{[key:string]:any},\n\tresponse:{[key:string]:any}\n\terror?:string|null\n}\n\nexport interface APIServiceOptions{\n\tport:number,\n\tbaseEndPoint:string // \"/api/\"\n\tcorsHostWhiteList:string[],\n\tendpoints:IBaseEndpoint[],\n\tjsonLimit:string // \"10mb\"\n\tonNetworkLog?:((log:APIServiceNetworkLogItem)=>void)|null\n\tonError?:((...rest:any[])=>void)|null\n\tisProductionEnvironment:boolean,\n\tinterceptor?:IBaseEndpoint,\n\tpostproducer?:(req:HTTPRequestVO|undefined|null,res:Response,data:TransferPacketVO<any>,requestTime:number,endpoint?:string,log?:APIServiceNetworkLogItem|null)=>Promise<TransferPacketVO>\n\tpreproducer?:(req:HTTPRequestVO|undefined|null)=>any\n\t\n\tmonitor?:{login:string,password:string}[]\n\t//deployment?:{login:string,password:string}\n\tappVersion?:string\n\n\tfileTempDir:string;\n\tfileLimit:number // b\n}\n\nexport function getDefaultOptions():APIServiceOptions{\n\treturn {\n\t\tport: 8091,\n\t\tbaseEndPoint: '/api/',\n\t\tcorsHostWhiteList: [\n\t\t\t'http://localhost:3000',\n\t\t],\n\t\tendpoints: [],\n\t\tjsonLimit:\"10mb\",\n\t\tonNetworkLog: function (log: APIServiceNetworkLogItem): void {\n\t\t\tlogInfo(\"${APIService.js}\",log)\n\t\t},\n\t\tonError:function(err:any){\n\t\t\tlogError(\"${APIService.js}\",err);\n\t\t},\n\t\tisProductionEnvironment:false,\n\t\tfileLimit:50*1024*1024,\n\t\tfileTempDir:path.resolve(os.tmpdir(),\"fileTempDir\")\n\t}\n}\n\nexport const REQ_CREATE_NET_LOG:Req<void,APIServiceNetworkLogItem> = new Req(undefined,\"REQ_CREATE_NET_LOG\");\nexport const REQ_HTTP_LOG:Req<void,APIServiceNetworkLogItem[]> = new Req(undefined,\"REQ_HTTP_LOG\");\nexport const REQ_HTTP_REQUESTS_COUNT:Req<void,number> = new Req(undefined,\"REQ_HTTP_REQUESTS_COUNT\");\nexport const REQ_HTTP_SERVER:Req<void,{express:Application,http:http.Server}> = new Req(undefined,\"REQ_HTTP_SERVER\");\nexport const REQ_INTERNAL_CALL:Req<HTTPRequestVO,IError|any> = new Req(undefined,\"REQ_INTERNAL_CALL\");\n\n\nconst activeServices:String[]=[]\nconst entryPoints:String[]=[]\n\nexport async function Initializer(services:IBaseService[]){\n for (let i of services) { await i.init();activeServices.push(i.getName()) }\n for (let i of services) { i.applicationReady() }\n}\n\nexport class APIService extends BaseService {\n\n\t// NET LOG\n\tprivate static nextLogID=0;\n\tprivate version = \"2.4.9\"\n\tprivate options:APIServiceOptions;\n\tprivate monitor?:Monitor\n\tprivate monitorIndexFile?:Buffer\n\tprivate started:Date = new Date();\n\tprivate requestsCount=0;\n\tprivate server=http\n\n\tnetLog:APIServiceNetworkLogItem[]=[];\n\n\tconstructor(options?:APIServiceOptions|null) {\n\t\tsuper('HTTP Service')\n\t\tthis.options=options ?? getDefaultOptions();\n\t\tif(!this.options.corsHostWhiteList)\n\t\t\tthis.options.corsHostWhiteList=[];\n\t\tconst self = \"http://localhost:\"+this.options.port;\n\t\tif(!this.options.corsHostWhiteList.find(val=>val===self))\n\t\t\tthis.options.corsHostWhiteList.push()\n\n\t\tif(this.options.monitor && this.options.monitor.length>0){\n\t\t\tthis.monitor=new Monitor();\n\t\t\tthis.options.endpoints.push(this.monitor)\n\t\t\tconsole.warn(\"Service Monitor initialized\")\n\t\t\tconsole.warn(\"monitor links:\")\n\t\t\tfor(let i of this.options.monitor){\n\t\t\t\tconst hash = crypto.createHash(\"sha256\").update(i.login+i.password).digest().toString(\"hex\")\n\t\t\t\tconsole.warn(i.login+\" -> /sm-\"+hash)\t\t\t\t\t\t\n\t\t\t}\n\t\t}\n\n\t\t// create liveness, readiness\n\t\tthis.options.endpoints.push(new Liveness(this.started),new Readiness(this.started))\n\t\tREQ_HTTP_REQUESTS_COUNT.listener = async () => this.requestsCount;\n\t}\n\n\n\toverride async init(): Promise<void> {\n\n\t\tREQ_HTTP_LOG.listener=async ignore=>this.netLog;\n\t\tREQ_CREATE_NET_LOG.listener = async ignore=>{\n\t\t\tconst log:APIServiceNetworkLogItem = {\n\t\t\t\tcreated: +new Date(),\n\t\t\t\ttime: 0,\n\t\t\t\trequest: {},\n\t\t\t\tresponse: {},\n\t\t\t\terror:null,\n\t\t\t\tid: APIService.nextLogID++\n\t\t\t}\n\t\t\tthis.netLog.push(log)\n\t\t\tif(this.netLog.length>1000)\n\t\t\t\tthis.netLog.shift()\n\t\t\treturn log;\n\t\t}\n\n\t\t// internal call\n\t\tREQ_INTERNAL_CALL.listener = async (req)=>{\n\t\t\tfor(let i of this.options.endpoints){\n\t\t\t\tif(!i || !i.endpoints)\n\t\t\t\t\tcontinue;\n\t\t\t\tfor(let j of i.endpoints){\n\t\t\t\t\tlet ep = BaseEndpoint.getEntryPoint()+j.endpoint;\n\t\t\t\t\tep = ep.replaceAll(\"//\",\"/\")\n\t\t\t\t\tif(ep=== req.endpoint){\n\t\t\t\t\t\tconst response = await i.execute(req)\n\t\t\t\t\t\tif(response.error)\n\t\t\t\t\t\t\treturn response.error;\n\t\t\t\t\t\treturn response.data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {error:DefaultErrors.UNKNOWN_REQUEST,data:null,httpStatus:404}\n\t\t}\n\n\t\t// initialize express\n\t\tconst app = express()\n\t\tconst server = http.createServer(app);\n\n\t\tREQ_HTTP_SERVER.listener = async ignore=>{return {express:app,http:server}};\n\n\t\tif(this.options.isProductionEnvironment)\n\t\t\tapp.set(\"env\",'production');\n\n\t\tapp.use(express.json({ limit: '10mb' })) // for parsing application/json\n\t\tapp.use(express.urlencoded({ limit: '10mb', extended: true })) // for parsing application/x-www-form-urlencoded\n\n\t\tapp.use(fileUpload({\n\t\t\tlimitHandler: (req, res, next)=>{\n\t\t\t\tthis.sendResponse(req.get(\"Referer\")??\"\",res,{\n\t\t\t\t\terror:DefaultErrors.FILE_TOO_LARGE,\n\t\t\t\t\tdata:null,\n\t\t\t\t\thttpStatus:413,\n\t\t\t\t},+new Date(),req.path);\n\t\t\t},\n\t\t\tlimits: { fileSize: this.options.fileLimit },\n\t\t\tuseTempFiles: true,\n\t\t\turiDecodeFileNames: true,\n\t\t\ttempFileDir: this.options.fileTempDir,\n\t\t\t//safeFileNames: true,\n\t\t\tabortOnLimit:true\n\t\t}))\n\n\t\tapp.use(async (err:any,req:any,resp:any,next:any)=>{\n\t\t\t\n\t\t\tif(!err){\n\t\t\t\tnext();\n\t\t\t\treturn\n\t\t\t}\n\t\t\t\t//request start time\n\t\t\tconst tme = +new Date();\n\t\t\tconst log = await REQ_CREATE_NET_LOG.request();\n\t\t\tlog.request={\n\t\t\t\tmethod:req.method,\n\t\t\t\tdata:\"\",\n\t\t\t\tparams:req.params\n\t\t\t}\n\n\t\t\tlet responseError=DefaultErrors.UNKNOWN_REQUEST;\n\t\t\tif (typeof err === \"object\" && err.status === 400 && 'body' in err && err.type === 'entity.parse.failed') {\n\t\t\t\tresponseError = DefaultErrors.JSON_MALFORMED\n\t\t\t}\n \n\n\t\t\tthis.sendResponse(req.get(\"Referer\")??\"\",resp,{\n\t\t\t\terror:responseError,\n\t\t\t\tdata:null,\n\t\t\t\thttpStatus:400\n\t\t\t},tme,\"\",log)\n\n\t\t})\n\n\t\tconst corsOptions = {\n\t\t\torigin: (origin: any, callback: any) => {\n\t\t\t\tconst originIsWhitelisted = this.options.corsHostWhiteList.includes(origin)\n\t\t\t\tcallback(null, originIsWhitelisted)\n\t\t\t},\n\t\t\tcredentials: true\n\t\t}\n\t\tapp.use(cors(corsOptions))\n\n\t\t// registrate endpoints\n\t\tBaseEndpoint.setEntryPoint(this.options.baseEndPoint)\n\t\t\n\t\tfor(let i of this.options.endpoints){\n\t\t\tawait i.init();\n\t\t\tif(!i.endpoints)\n\t\t\t\tcontinue;\n\t\t\tfor(let j of i.endpoints){\n\t\t\t\tlet ep = BaseEndpoint.getEntryPoint()+j.endpoint;\n\t\t\t\tep = ep.replaceAll(\"//\",\"/\")\n\t\t\t\t\n\n\t\t\t\t// incoming request\n\t\t\t\tapp.all(ep,async (req,res)=>{\n\t\t\t\t\tthis.requestsCount++;\n\t\t\t\t\tconst tme = +new Date();\n\t\t\t\t\tlet log:APIServiceNetworkLogItem|null = null;\n\t\t\t\t\tif(!i.ignoreHttpLogging){\n\t\t\t\t\t\tlog = await REQ_CREATE_NET_LOG.request();\n\t\t\t\t\t\tlog.request={\n\t\t\t\t\t\t\turl:req.url,\n\t\t\t\t\t\t\tmethod:req.method,\n\t\t\t\t\t\t\tdata:this.checkDataLength(req.body),\n\t\t\t\t\t\t\tparams:this.checkDataLength(req.params)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst execute = async ()=>{\n\n\t\t\t\t\t\tconst body = req.body;\n\t\t\t\t\t\tif(req.query && typeof req.query === \"object\"){\n\t\t\t\t\t\t\tfor(let i in req.query){\n\t\t\t\t\t\t\t\tbody[i]=req.query[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst httpRequest:HTTPRequestVO = {\n\t\t\t\t\t\t\traw:req as IncomingMessage,\n\t\t\t\t\t\t\tmethod:req.method,\n\t\t\t\t\t\t\tdata:req.body,\n\t\t\t\t\t\t\tparams:req.params,\n\t\t\t\t\t\t\theaders:req.headers as any,\n\t\t\t\t\t\t\tendpoint:ep,\n\t\t\t\t\t\t\tfiles:req.files ?? null,\n\t\t\t\t\t\t\treferer:req.get(\"Referer\"),\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(this.options.preproducer){\n\t\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\tconst preproducerResult = await this.options.preproducer(httpRequest);\n\t\t\t\t\t\t\tif(preproducerResult)\n\t\t\t\t\t\t\t\thttpRequest.preproducerResult = preproducerResult;\n\t\t\t\t\t\t\t}catch(e){\n\t\t\t\t\t\t\t\tthis.sendResponse(req.get(\"Referer\")??\"\",res,{error:{code:10002,message:\"Internal server error\",details:`${e}`},data:null,httpStatus:500},tme,ep,log,httpRequest);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet result\n\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\t// Execute interceptor if exists\n\t\t\t\t\t\t\tif(!j.ignoreInterceptor){\n\t\t\t\t\t\t\t\tlet interceptorResult;\n\t\t\t\t\t\t\t\tif(this.options.interceptor){\n\t\t\t\t\t\t\t\t\tinterceptorResult=await this.options.interceptor.execute(httpRequest);\n\t\t\t\t\t\t\t\t\tif(interceptorResult.error && !j.allowInterceptorError){\n\t\t\t\t\t\t\t\t\t\tthis.sendResponse(req.get(\"Referer\")??\"\",res,interceptorResult,tme,ep,log,httpRequest);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\thttpRequest.interceptorResult = interceptorResult\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Precheck\n\t\t\t\t\t\t\tif(i === this.monitor)\n\t\t\t\t\t\t\t\thttpRequest.precheck={data:this.options.monitor}\n\n\t\t\t\t\t\t\tconst precheck=await i.precheck(httpRequest)\n\t\t\t\t\t\t\tif(precheck && precheck.error){\n\t\t\t\t\t\t\t\tthis.sendResponse(req.get(\"Referer\")??\"\",res,precheck,tme,ep,log,httpRequest);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\thttpRequest.precheck=precheck;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// If interceptor has no errors, execute main handler\n\t\t\t\t\t\t\tresult = await i.execute(httpRequest)\n\t\t\t\t\t\t\t \n\t\t\t\t\t\t}catch(e){\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t\tif(this.options.onError)\n\t\t\t\t\t\t\t\tthis.options.onError(e)\n\t\t\t\t\t\t\tif(this.monitor)\n\t\t\t\t\t\t\t\tthis.monitor.registrateFatalError(ep);\n\t\t\t\t\t\t\tthis.sendResponse(req.get(\"Referer\")??\"\",res,{\n\t\t\t\t\t\t\t\thttpStatus:500,\n\t\t\t\t\t\t\t\terror:{\n\t\t\t\t\t\t\t\t\tcode:10002,\n\t\t\t\t\t\t\t\t\tmessage:\"Internal server error\",\n\t\t\t\t\t\t\t\t\tdetails:`${e}`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},tme,ep,log,httpRequest);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.sendResponse(req.get(\"Referer\")??\"\",res,result,tme,ep,log,httpRequest);\n\t\t\t\t\t}\n\n\t\t\t\t\texecute()\n\t\t\t\t});// handle incoming request\n\n\t\t\t}\n\t\t}\n\n\t\n\n\t\t// final handler\n\t\tapp.use((req, res, next) => {\n\t\t\t\n\t\t\tconst tme = +new Date()\n\n\t\t\tif(this.monitor && this.options && this.options.monitor){\n\t\t\t\t//check if requesting monitor\n\t\t\t\tif(req.method===\"GET\"){\n\t\t\t\t\t\n\t\t\t\t\tlet monitorRequest=false;\n\t\t\t\t\tfor(let i of this.options.monitor){\n\t\t\t\t\t\tconst hash = crypto.createHash(\"sha256\").update(i.login+i.password).digest().toString(\"hex\")\n\t\t\t\t\t\tif(req.originalUrl.endsWith(\"/sm-\"+hash)){\n\t\t\t\t\t\t\tmonitorRequest=true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(monitorRequest){\n\t\t\t\t\t\t// send index Thu, 16 Nov 2023 23:33:35 GMT\n\t\t\t\t\t\tconst date = new Date();\n\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\tif(!this.monitorIndexFile)\n\t\t\t\t\t\t\tthis.monitorIndexFile = fs.readFileSync(path.resolve(__dirname,\"monitor\",\"index.html\"));\n\t\t\t\t\t\t\tres.setHeader(\"Content-Type\",\"text/html\")\n\t\t\t\t\t\t\tres.setHeader(\"Content-Length\",this.monitorIndexFile.byteLength)\n\t\t\t\t\t\t\tres.status(200).send(this.monitorIndexFile);\n\t\t\t\t\t\t}catch(e){\n\t\t\t\t\t\t\tthis.sendResponse(req.get(\"Referer\")??\"\",res,{\n\t\t\t\t\t\t\t\terror:{\n\t\t\t\t\t\t\t\t\tcode:10002,\n\t\t\t\t\t\t\t\t\tmessage:\"Internal server error\",\n\t\t\t\t\t\t\t\t\tdetails:`${e}`\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdata:null,\n\t\t\t\t\t\t\t\thttpStatus:500\n\t\t\t\t\t\t\t},tme,req.path);\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\t\t\tthis.sendResponse(req.get(\"Referer\")??\"\",res,{\n\t\t\t\terror:DefaultErrors.UNKNOWN_REQUEST,\n\t\t\t\tdata:null,\n\t\t\t\thttpStatus:404\n\t\t\t},tme,req.path);\n\t\t})\n\n\t\tserver.listen(this.options.port, () => {\n\t\t\tlogCrit('${APIService.js}','API Service started at: '+this.options.port+\", with base endpoint:\"+this.options.baseEndPoint+\", ver.: \"+this.version)\n\t\t})\n\n\t\t/*app.listen(this.options.port, () => {\n\t\t\tlogCrit('${APIService.js}','API Service started at: '+this.options.port+\", with base endpoint:\"+this.options.baseEndPoint+\", ver.: \"+this.version)\n\t\t})*/\n\t}\n\n\tasync sendResponse(ref:string,res:Response,data:TransferPacketVO<any>,requestTime:number,endpoint?:string,log?:APIServiceNetworkLogItem|null,req?:HTTPRequestVO){\n\n\t\tif(this.options.postproducer){\n\t\t\ttry{\n\t\t\t\tdata = await this.options.postproducer(req,res,data,requestTime,endpoint,log);\n\t\t\t}catch(e){\n\t\t\t\tlogError(\"Postproducer error\",e)\n\t\t\t}\n\t\t}\n\n\t\tif(ErrorUtils.isError(data))\n\t\t\tdata = {error:data as IError,data:null}\n\t\t\n data.responseTime = (+new Date()) - requestTime;\n data.core = this.version\n data.endpoint = endpoint ?? \"no_endpoint\"\n\t\t\n\t\tif(this.options.appVersion)\n\t\t\tdata.version=this.options.appVersion\n\n\t\t\n\t\tif(log){\n\t\t\tlog.time = data.responseTime\n\t\t\tlog.referer=ref;\n\t\t}\n\n\t\tif(this.monitor)\n\t\t\tthis.monitor.registrateResponse(data.endpoint,data.responseTime)\n\n if(res.destroyed || res.closed){\n\n\t\t\tif(log)\n\t\t\t\tlog.error = \"Connection already closed, can't send response for: \"+data.endpoint\n\t\t\tif(this.options.onError)\n \tthis.options.onError(\"Connection already closed, can't send response: \"+data.endpoint,data)\n \n\t\t\tif(this.monitor)\n\t\t\t\tthis.monitor.registrateError(data.endpoint);\n\n }else{\n\t\t\ttry{\n\n\t\t\t\tif(data.file){\n\n\t\t\t\t\tres.sendFile(data.file,err=>{\n\t\t\t\t\t\tif(err){\n\t\t\t\t\t\t\tif(log)\n\t\t\t\t\t\t\t\tlog.error = \"Can't send file: \"+data.file\n\t\t\t\t\t\t\tif(this.options.onError)\n\t\t\t\t\t\t\t\tthis.options.onError(\"Can't send file: \"+data.file,err)\n\t\t\t\t\t\t\tif(this.monitor && data.endpoint)\n\t\t\t\t\t\t\t\tthis.monitor.registrateAPIError(data.endpoint);\n\n\t\t\t\t\t\t\tthis.sendResponse(ref,res,{\n\t\t\t\t\t\t\t\terror:DefaultErrors.CANT_SEND_FILE,\n\t\t\t\t\t\t\t\tdata:null,\n\t\t\t\t\t\t\t\thttpStatus:500\n\t\t\t\t\t\t\t},requestTime,data.endpoint);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t})\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(data.redirect){\n\t\t\t\t\tres.redirect(data.redirect);\n\t\t\t\t\tif(log)\n\t\t\t\t\t\tlog.response = {redirect:data.redirect}\n\t\t\t\t}else{\n\t\t\t\t\t// setup headers\n\t\t\t\t\tif(data.headers){\n\t\t\t\t\t\tfor(let i in data.headers)\n\t\t\t\t\t\t\tres.setHeader(i,data.headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif(data.error && data.error.httpStatus && data.error.httpStatus>99)\n\t\t\t\t\t\tres.statusCode = data.error.httpStatus\n\t\t\t\t\telse\n\t\t\t\t\t\tres.statusCode=data.httpStatus ?? 200\n\t\t\t\t\t\n\t\t\t\t\tif(data.rawResponse){\n\t\t\t\t\t\tres.send(data.data)\n\t\t\t\t\t\tif(log)\n\t\t\t\t\t\t\tlog.response = this.checkDataLength(data)\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tres.send(data);\n\t\t\t\t\t\tif(log)\n\t\t\t\t\t\t\tlog.response = this.checkDataLength(data)\n\n\t\t\t\t\t\tif(data.error && this.monitor)\n\t\t\t\t\t\t\tthis.monitor.registrateAPIError(data.endpoint)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}catch(e){\n\t\t\t\tif(this.options.onError)\n\t\t\t\t\tthis.options.onError(\"Can't send response\",e);\n\t\t\t\tif(log)\n\t\t\t\t\tlog.error=\"Can't send response\"\n\t\t\t\tif(this.monitor)\n\t\t\t\t\tthis.monitor.registrateError(data.endpoint);\n\t\t\t}\n\t\t}\n\n\t\t// show log\n\t\tif(this.options.onNetworkLog && log)\n\t\t\tthis.options.onNetworkLog(log)\n }\n\n\n\tcheckDataLength(data:any,result?:any,lvl?:number):any{\n\t\t\n\t\tif(!lvl)\n\t\t\tlvl=0;\n\n\t\tif(typeof data !== \"object\"){\n\t\t\tif(typeof data===\"string\" && data.length>1024)\n\t\t\t\treturn data.substring(0,1000)+\"... (total:\" + data.length + \")\"\n\t\t\treturn data;\n\t\t}\n\n\t\tif(typeof data === \"object\"){\n\t\t\tif(!result)\n\t\t\t\tresult={};\n\t\t\tlet arrcnt = 100;\n\t\t\tfor(let i in data){\n\t\t\t\tresult[i]=this.checkDataLength(data[i],result[i],lvl+1);\n\t\t\t\tarrcnt--;\n\t\t\t\tif(arrcnt<=0){\n\t\t\t\t\tresult[\"...\"]=\"... total: \"+Array.isArray(data)?data.length:Object.keys(data).length;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result ?? null;\n\t}\n\n}\n"]}
@@ -80,3 +80,4 @@ class BaseEndpoint {
80
80
  }
81
81
  }
82
82
  exports.BaseEndpoint = BaseEndpoint;
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUVuZHBvaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9CYXNlRW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkNBQXlEO0FBQ3pELCtFQUF1RDtBQXFCdkQsTUFBYSxZQUFZO0lBRWIsc0JBQXNCLEdBQVUsRUFBRSxDQUFDO0lBRTNDLFNBQVMsQ0FBb0I7SUFDdEIsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO0lBQ3hCLE1BQU0sQ0FBQyxVQUFVLEdBQVEsR0FBRyxDQUFDO0lBQzdCLFFBQVEsR0FBQyxFQUFFLENBQUE7SUFJbkIsTUFBTSxDQUFDLGFBQWEsR0FBQyxDQUFDLEVBQVMsRUFBQyxFQUFFO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQztZQUM5QixJQUFJLENBQUMsVUFBVSxJQUFFLEdBQUcsQ0FBQTtTQUN2QjtRQUNELElBQUcsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUNsQixJQUFJLENBQUMsVUFBVSxHQUFDLEdBQUcsR0FBQyxFQUFFLENBQUM7SUFDL0IsQ0FBQyxDQUFBO0lBQ0QsTUFBTSxDQUFDLGFBQWEsR0FBQyxHQUFTLEVBQUU7UUFDNUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUMsQ0FBQTtJQUVELFlBQVksUUFBZTtRQUN2QixJQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLFFBQVEsR0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xDLElBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUN0QixRQUFRLEdBQUMsUUFBUSxHQUFDLEdBQUcsQ0FBQTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFDLFFB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QUksVUFBVTtvQkFDeEUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsR0FBRyxDQUFDLENBQUE7YUFDdEM7U0FDSjtRQUVELElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyx3QkFBd0IsR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFcEUsT0FBTztZQUNILEtBQUssRUFBQyx1QkFBYSxDQUFDLGVBQWU7WUFDbkMsSUFBSSxFQUFDLElBQUk7U0FDWixDQUFBO0lBQ0wsQ0FBQzs7QUF6Rkwsb0NBMEZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nQ3JpdCwgbG9nSW5mbywgbG9nV2FybiB9IGZyb20gXCIuL0xvZ1NlcnZpY2VcIjtcbmltcG9ydCBEZWZhdWx0RXJyb3JzIGZyb20gXCIuL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9yc1wiO1xuaW1wb3J0IHsgSFRUUFJlcXVlc3RWTywgVHJhbnNmZXJQYWNrZXRWTyB9IGZyb20gXCIuL3N0cnVjdHVyZXMvSW50ZXJmYWNlc1wiO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VFbmRwb2ludHtcbiAgICBlbmRwb2ludHM/OklFbmRwb2ludEhhbmRsZXJbXVxuICAgIGV4ZWN1dGU6KHJlcTpIVFRQUmVxdWVzdFZPKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPGFueT4+XG4gICAgcHJlY2hlY2s6KHJlcTpIVFRQUmVxdWVzdFZPKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPGFueT58bnVsbD5cbiAgICBpbml0OigpID0+IFByb21pc2U8dm9pZD5cbiAgICBpZ25vcmVIdHRwTG9nZ2luZzpib29sZWFuLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbmRwb2ludEhhbmRsZXJ7XG4gICAgZW5kcG9pbnQ6c3RyaW5nLFxuICAgIGhhbmRsZXI/OihyZXE6SFRUUFJlcXVlc3RWTyk9PlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTzxhbnk+PlxuICAgIGlnbm9yZUludGVyY2VwdG9yPzpib29sZWFuXG4gICAgaW5kZXBlbmRlZD86Ym9vbGVhblxuICAgIGFsbG93SW50ZXJjZXB0b3JFcnJvcj86Ym9vbGVhblxuICAgIGh0dHBNZXRob2Q/OlwiR0VUXCJ8XCJQT1NUXCJ8XCJQVVRcInxcIkRFTEVURVwiXG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlRW5kcG9pbnQgaW1wbGVtZW50cyBJQmFzZUVuZHBvaW50e1xuXG4gICAgcHJpdmF0ZSBpbmlhbGl6ZWRFbmRwb2ludE5hbWVzOlN0cmluZ1tdPVtdO1xuXG4gICAgZW5kcG9pbnRzPzpJRW5kcG9pbnRIYW5kbGVyW11cbiAgICBwdWJsaWMgaWdub3JlSHR0cExvZ2dpbmcgPSBmYWxzZVxuICAgIHByaXZhdGUgc3RhdGljIGVudHJ5cG9pbnQ6c3RyaW5nPVwiL1wiO1xuICAgIHByaXZhdGUgZW5kcG9pbnQ9XCJcIlxuICAgIFxuXG4gICAgLy8gZ2xvYmFsIGVudHJ5cG9pbnRcbiAgICBzdGF0aWMgc2V0RW50cnlQb2ludD0oZXA6c3RyaW5nKT0+e1xuICAgICAgICB0aGlzLmVudHJ5cG9pbnQgPSBlcDtcbiAgICAgICAgaWYoIXRoaXMuZW50cnlwb2ludC5lbmRzV2l0aChcIi9cIikpe1xuICAgICAgICAgICAgdGhpcy5lbnRyeXBvaW50Kz1cIi9cIlxuICAgICAgICB9XG4gICAgICAgIGlmKCFlcC5zdGFydHNXaXRoKFwiL1wiKSlcbiAgICAgICAgICAgIHRoaXMuZW50cnlwb2ludD1cIi9cIitlcDtcbiAgICB9XG4gICAgc3RhdGljIGdldEVudHJ5UG9pbnQ9KCk6c3RyaW5nPT57XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJ5cG9pbnQ7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0cnVjdG9yKGVuZHBvaW50OnN0cmluZyl7XG4gICAgICAgIGlmKGVuZHBvaW50LnN0YXJ0c1dpdGgoXCIvXCIpKVxuICAgICAgICAgICAgZW5kcG9pbnQ9ZW5kcG9pbnQuc3Vic3RyaW5nKDEpXG4gICAgICAgIGlmKCFlbmRwb2ludC5lbmRzV2l0aChcIi9cIikpXG4gICAgICAgICAgICBlbmRwb2ludD1lbmRwb2ludCtcIi9cIlxuICAgICAgICB0aGlzLmVuZHBvaW50PWVuZHBvaW50O1xuICAgIH1cbiAgICBcblxuICAgIHJlZ2lzdGVyRW5kcG9pbnRzKGVuZHBvaW50czpJRW5kcG9pbnRIYW5kbGVyW10pe1xuICAgICAgICBmb3IobGV0IGkgb2YgZW5kcG9pbnRzKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gYmFzZSBwb2ludFxuICAgICAgICAgICAgaWYoaS5lbmRwb2ludD09PVwiXCIgfHwgaS5lbmRwb2ludD09PVwiL1wiKXtcbiAgICAgICAgICAgICAgICBsZXQgZW1wdHk9aS5lbmRwb2ludCA9PT0gXCJcIjtcbiAgICAgICAgICAgICAgICBpLmVuZHBvaW50PXRoaXMuZW5kcG9pbnRcbiAgICAgICAgICAgICAgICBpZihpLmVuZHBvaW50LmVuZHNXaXRoKFwiL1wiKSAmJiBlbXB0eSlcbiAgICAgICAgICAgICAgICAgICAgaS5lbmRwb2ludD1pLmVuZHBvaW50LnN1YnN0cmluZygwLGkuZW5kcG9pbnQubGVuZ3RoLTEpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGkuZW5kcG9pbnQuc3RhcnRzV2l0aChcIi9cIikpXG4gICAgICAgICAgICAgICAgaS5lbmRwb2ludCA9IGkuZW5kcG9pbnQuc3Vic3RyaW5nKDEpXG4gICAgICAgICAgICBpZihpLmVuZHBvaW50LmVuZHNXaXRoKFwiL1wiKSlcbiAgICAgICAgICAgICAgICBpLmVuZHBvaW50PWkuZW5kcG9pbnQuc3Vic3RyaW5nKDAsaS5lbmRwb2ludC5sZW5ndGgtMSlcblxuICAgICAgICAgICAgaWYoIWkuaW5kZXBlbmRlZClcbiAgICAgICAgICAgICAgICBpLmVuZHBvaW50ID0gdGhpcy5lbmRwb2ludCtpLmVuZHBvaW50XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRwb2ludHMgPWVuZHBvaW50cztcbiAgICB9XG5cbiAgICBcbiAgICBhc3luYyBpbml0KCl7XG4gICAgICAgIGlmKCF0aGlzLmVuZHBvaW50cyl7XG4gICAgICAgICAgICBsb2dDcml0KFwiJHtCYXNlRW5kcG9pbnQuanN9XCIsXCJObyBlbmRwb2ludHMgcmVnaXN0ZXJlZCBmb3IgXCIrdGhpcy5lbmRwb2ludClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy5lbmRwb2ludHMpe1xuICAgICAgICAgICAgbG9nSW5mbyhcIiR7QmFzZUVuZHBvaW50LmpzfVwiLFwiZW5kcG9pbnQ6IFwiK2kuZW5kcG9pbnQrXCIgaW5pdGFsaXplZCwgaWdub3JlSW50ZXJjZXB0b3I6IFwiKyhpLmlnbm9yZUludGVyY2VwdG9yID8/IFwiZmFsc2VcIikpO1xuICAgICAgICAgICAgdGhpcy5pbmlhbGl6ZWRFbmRwb2ludE5hbWVzLnB1c2goaS5lbmRwb2ludCtcIiBpZ25vcmUgaW50ZXJjZXB0b3I6IFwiKyhpLmlnbm9yZUludGVyY2VwdG9yID8/IFwiZmFsc2VcIikpXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0SW5pdGFsaXplZEVuZHBvaW50TmFtZXMoKTpTdHJpbmdbXXtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pYWxpemVkRW5kcG9pbnROYW1lcztcbiAgICB9XG5cbiAgICBhc3luYyBwcmVjaGVjayhyZXE6SFRUUFJlcXVlc3RWTyk6UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPGFueT58bnVsbD57cmV0dXJuIG51bGx9XG5cbiAgICBhc3luYyBleGVjdXRlKHJlcTpIVFRQUmVxdWVzdFZPKTpQcm9taXNlPFRyYW5zZmVyUGFja2V0Vk88YW55Pj57XG4gICAgICAgIGlmKHRoaXMuZW5kcG9pbnRzICYmIHRoaXMuZW5kcG9pbnRzLmxlbmd0aD4wKXtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLmVuZHBvaW50cyl7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldEVQID0gQmFzZUVuZHBvaW50LmVudHJ5cG9pbnQraS5lbmRwb2ludFxuICAgICAgICAgICAgICAgIHRhcmdldEVQID0gdGFyZ2V0RVAucmVwbGFjZUFsbChcIi8vXCIsXCIvXCIpXG4gICAgICAgICAgICAgICAgaWYoIHRhcmdldEVQID09PSByZXEuZW5kcG9pbnQgJiYgaS5oYW5kbGVyICYmIHR5cGVvZiBpLmhhbmRsZXIgPT09XCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaS5oYW5kbGVyLmNhbGwodGhpcyxyZXEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2dXYXJuKFwiJHtCYXNlRW5kcG9pbnQuanN9XCIsXCJVbmhhbmRsZWQgZW50cnlwb2ludDogXCIrdGhpcy5lbmRwb2ludClcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcjpEZWZhdWx0RXJyb3JzLk5PVF9JTVBMRU1FTlRFRCxcbiAgICAgICAgICAgIGRhdGE6bnVsbFxuICAgICAgICB9XG4gICAgfVxufSJdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseEndpoint.js","sourceRoot":"","sources":["../../src/apiServer/BaseEndpoint.ts"],"names":[],"mappings":"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","sourcesContent":["import { logCrit, logInfo, logWarn } from \"./LogService\";\nimport DefaultErrors from \"./structures/DefaultErrors\";\nimport { HTTPRequestVO, TransferPacketVO } from \"./structures/Interfaces\";\n\n\nexport interface IBaseEndpoint{\n endpoints?:IEndpointHandler[]\n execute:(req:HTTPRequestVO)=>Promise<TransferPacketVO<any>>\n precheck:(req:HTTPRequestVO)=>Promise<TransferPacketVO<any>|null>\n init:() => Promise<void>\n ignoreHttpLogging:boolean,\n}\n\nexport interface IEndpointHandler{\n endpoint:string,\n handler?:(req:HTTPRequestVO)=>Promise<TransferPacketVO<any>>\n ignoreInterceptor?:boolean\n independed?:boolean\n allowInterceptorError?:boolean\n httpMethod?:\"GET\"|\"POST\"|\"PUT\"|\"DELETE\"\n}\n\nexport class BaseEndpoint implements IBaseEndpoint{\n\n private inializedEndpointNames:String[]=[];\n\n endpoints?:IEndpointHandler[]\n public ignoreHttpLogging = false\n private static entrypoint:string=\"/\";\n private endpoint=\"\"\n \n\n // global entrypoint\n static setEntryPoint=(ep:string)=>{\n this.entrypoint = ep;\n if(!this.entrypoint.endsWith(\"/\")){\n this.entrypoint+=\"/\"\n }\n if(!ep.startsWith(\"/\"))\n this.entrypoint=\"/\"+ep;\n }\n static getEntryPoint=():string=>{\n return this.entrypoint;\n }\n \n constructor(endpoint:string){\n if(endpoint.startsWith(\"/\"))\n endpoint=endpoint.substring(1)\n if(!endpoint.endsWith(\"/\"))\n endpoint=endpoint+\"/\"\n this.endpoint=endpoint;\n }\n \n\n registerEndpoints(endpoints:IEndpointHandler[]){\n for(let i of endpoints){\n \n // base point\n if(i.endpoint===\"\" || i.endpoint===\"/\"){\n let empty=i.endpoint === \"\";\n i.endpoint=this.endpoint\n if(i.endpoint.endsWith(\"/\") && empty)\n i.endpoint=i.endpoint.substring(0,i.endpoint.length-1)\n continue;\n }\n\n if(i.endpoint.startsWith(\"/\"))\n i.endpoint = i.endpoint.substring(1)\n if(i.endpoint.endsWith(\"/\"))\n i.endpoint=i.endpoint.substring(0,i.endpoint.length-1)\n\n if(!i.independed)\n i.endpoint = this.endpoint+i.endpoint\n }\n this.endpoints =endpoints;\n }\n\n \n async init(){\n if(!this.endpoints){\n logCrit(\"${BaseEndpoint.js}\",\"No endpoints registered for \"+this.endpoint)\n return;\n }\n for(let i of this.endpoints){\n logInfo(\"${BaseEndpoint.js}\",\"endpoint: \"+i.endpoint+\" initalized, ignoreInterceptor: \"+(i.ignoreInterceptor ?? \"false\"));\n this.inializedEndpointNames.push(i.endpoint+\" ignore interceptor: \"+(i.ignoreInterceptor ?? \"false\"))\n }\n };\n\n getInitalizedEndpointNames():String[]{\n return this.inializedEndpointNames;\n }\n\n async precheck(req:HTTPRequestVO):Promise<TransferPacketVO<any>|null>{return null}\n\n async execute(req:HTTPRequestVO):Promise<TransferPacketVO<any>>{\n if(this.endpoints && this.endpoints.length>0){\n for(let i of this.endpoints){\n let targetEP = BaseEndpoint.entrypoint+i.endpoint\n targetEP = targetEP.replaceAll(\"//\",\"/\")\n if( targetEP === req.endpoint && i.handler && typeof i.handler ===\"function\")\n return i.handler.call(this,req)\n }\n }\n\n logWarn(\"${BaseEndpoint.js}\",\"Unhandled entrypoint: \"+this.endpoint)\n \n return {\n error:DefaultErrors.NOT_IMPLEMENTED,\n data:null\n }\n }\n}"]}
@@ -15,3 +15,4 @@ class BaseService {
15
15
  applicationReady() { }
16
16
  }
17
17
  exports.BaseService = BaseService;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpU2VydmVyL0Jhc2VTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLE1BQWEsV0FBVztJQUVaLElBQUksQ0FBUTtJQUN0QixZQUFhLElBQVk7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7SUFDbEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDLElBQUksR0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsZ0JBQWdCLEtBQVksQ0FBQztDQUM5QjtBQWhCRCxrQ0FnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElCYXNlU2VydmljZSB7XG4gIGluaXQ6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgYXBwbGljYXRpb25SZWFkeTogKCkgPT4gdm9pZFxuICBnZXROYW1lOiAoKSA9PiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIEJhc2VTZXJ2aWNlIGltcGxlbWVudHMgSUJhc2VTZXJ2aWNlIHtcblxuICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nXG4gIGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gIH1cblxuICBhc3luYyBpbml0ICgpOiBQcm9taXNlPHZvaWQ+IHsgXG4gICAgY29uc29sZS5sb2coXCJTZXJ2aWNlOiBcIit0aGlzLm5hbWUrXCIgaW5pdGlhbGl6ZWRcIik7XG4gIH1cbiAgXG4gIGdldE5hbWUoKTpzdHJpbmd7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGFwcGxpY2F0aW9uUmVhZHkgKCk6IHZvaWQgeyB9XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseService.js","sourceRoot":"","sources":["../../src/apiServer/BaseService.ts"],"names":[],"mappings":";;;AAMA,MAAa,WAAW;IAEZ,IAAI,CAAQ;IACtB,YAAa,IAAY;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,GAAG,CAAC,WAAW,GAAC,IAAI,CAAC,IAAI,GAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,gBAAgB,KAAY,CAAC;CAC9B;AAhBD,kCAgBC","sourcesContent":["export interface IBaseService {\n init: () => Promise<void>\n applicationReady: () => void\n getName: () => string\n}\n\nexport class BaseService implements IBaseService {\n\n protected name: string\n constructor (name: string) {\n this.name = name\n }\n\n async init (): Promise<void> { \n console.log(\"Service: \"+this.name+\" initialized\");\n }\n \n getName():string{\n return this.name;\n }\n\n applicationReady (): void { }\n}\n"]}
@@ -1,17 +1,30 @@
1
1
  import { BaseService } from "./BaseService";
2
2
  import { HUBConnection } from "./cluster/HUBConnection";
3
3
  import Signal, { Req } from "badmfck-signal";
4
- export interface ClusterServiceOptions {
4
+ import { HUBServiceOptions, IWebsocketPacket } from "./HUBService";
5
+ export interface IParty {
6
+ name: string;
7
+ handlers: (Signal<IWebsocketPacket> | Req<IWebsocketPacket, any>)[];
8
+ }
9
+ export interface IPartyHost {
10
+ url: string;
11
+ publicKey: string;
5
12
  id: string;
6
- privateKey: string;
7
- hubURL: string;
8
- hubPublicKey: string;
9
- nodes: (Signal<any> | Req<any, any>)[];
13
+ }
14
+ export interface ClusterServiceOptions extends HUBServiceOptions {
15
+ targetID: string;
16
+ targetPublicKey: string;
17
+ targetURL: string;
18
+ party: IParty[];
10
19
  }
11
20
  export declare class ClusterService extends BaseService {
12
21
  options: ClusterServiceOptions;
13
22
  ws: HUBConnection | null;
23
+ handlers: (Signal<IWebsocketPacket> | Req<IWebsocketPacket, any>)[];
24
+ parites: Map<string, IPartyHost>;
14
25
  constructor(opt: ClusterServiceOptions);
15
26
  init(): Promise<void>;
27
+ close(): Promise<void>;
16
28
  connectToHUB(): Promise<void>;
29
+ addPartyHost(party: IPartyHost): void;
17
30
  }
@@ -8,37 +8,63 @@ const ws_1 = __importDefault(require("ws"));
8
8
  const BaseService_1 = require("./BaseService");
9
9
  const LogService_1 = require("./LogService");
10
10
  const HUBConnection_1 = require("./cluster/HUBConnection");
11
+ const badmfck_signal_1 = __importDefault(require("badmfck-signal"));
12
+ const DefaultErrors_1 = require("./structures/DefaultErrors");
13
+ const Sleep_1 = require("./helper/Sleep");
11
14
  class ClusterService extends BaseService_1.BaseService {
12
15
  options;
13
16
  ws = null;
17
+ handlers = [];
18
+ parites = new Map();
14
19
  constructor(opt) {
15
20
  super("ClusterService");
16
21
  this.options = opt;
17
- if (!opt.nodes.length)
18
- throw new Error("ClusterService: No nodes provided");
22
+ this.handlers = [
23
+ new badmfck_signal_1.default("S_PARTY_AVAILABLE", undefined, async (req) => {
24
+ this.addPartyHost(req.data);
25
+ })
26
+ ];
19
27
  }
20
28
  async init() {
21
29
  (0, LogService_1.logInfo)("ClusterService: initialized");
22
30
  this.connectToHUB();
23
31
  }
32
+ async close() {
33
+ (0, LogService_1.logInfo)("ClusterService: closing");
34
+ if (this.ws)
35
+ this.ws.close();
36
+ this.parites.clear();
37
+ }
24
38
  async connectToHUB() {
25
39
  (0, LogService_1.logInfo)("ClusterService: connecting to HUB");
26
40
  if (this.ws)
27
41
  this.ws.close();
28
42
  this.ws = new HUBConnection_1.HUBConnection({
29
- ws: new ws_1.default(this.options.hubURL),
30
- privateKey: this.options.privateKey,
31
- hubID: this.options.id,
32
- handlers: this.options.nodes,
33
- onAuthorized: () => {
34
- this.ws?.send({
35
- method: "auth",
36
- data: {
37
- id: this.options.id,
38
- publicKey: this.options.hubPublicKey
39
- },
40
- callbackID: 0
43
+ direction: "outgoing",
44
+ ws: new ws_1.default(this.options.targetURL),
45
+ hostID: this.options.hostID,
46
+ hostPrivateKey: this.options.hostPrivateKey,
47
+ hostPublicKey: this.options.hostPublicKey,
48
+ hostURL: this.options.hostURL,
49
+ targetID: this.options.targetID,
50
+ targetPublicKey: this.options.targetPublicKey,
51
+ targetURL: this.options.targetURL,
52
+ handlers: this.handlers,
53
+ onAuthorized: async () => {
54
+ (0, LogService_1.logInfo)("ClusterService: connected to HUB");
55
+ await (0, Sleep_1.Sleep)(1000);
56
+ const parites = this.options.party.map((party) => party.name);
57
+ const response = await this.ws?.send({
58
+ method: "REQ_PARTY",
59
+ data: parites,
60
+ callbackID: 1
41
61
  });
62
+ if (DefaultErrors_1.ErrorUtils.isError(response)) {
63
+ (0, LogService_1.logError)("ClusterService: error while registrating parties", response);
64
+ return;
65
+ }
66
+ for (let i of response)
67
+ this.addPartyHost(i);
42
68
  },
43
69
  onClose: () => {
44
70
  console.log("ClusterService: connection to HUB closed");
@@ -46,5 +72,10 @@ class ClusterService extends BaseService_1.BaseService {
46
72
  },
47
73
  });
48
74
  }
75
+ addPartyHost(party) {
76
+ (0, LogService_1.logInfo)("ClusterService: add party host", party);
77
+ this.parites.set(party.id, party);
78
+ }
49
79
  }
50
80
  exports.ClusterService = ClusterService;
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2x1c3RlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpU2VydmVyL0NsdXN0ZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUF3QztBQUN4QywrQ0FBNEM7QUFDNUMsNkNBQWlEO0FBQ2pELDJEQUF3RTtBQUV4RSxvRUFBNkM7QUFFN0MsOERBQXdEO0FBQ3hELDBDQUF1QztBQTJCdkMsTUFBYSxjQUFlLFNBQVEseUJBQVc7SUFHM0MsT0FBTyxDQUF1QjtJQUM5QixFQUFFLEdBQW9CLElBQUksQ0FBQztJQUMzQixRQUFRLEdBQThELEVBQUUsQ0FBQztJQUN6RSxPQUFPLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFM0MsWUFBWSxHQUF5QjtRQUNqQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUVuQixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osSUFBSSx3QkFBTSxDQUFtQixtQkFBbUIsRUFBQyxTQUFTLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxFQUFFO2dCQUVwRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUM7U0FDTCxDQUFBO0lBRUwsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ04sSUFBQSxvQkFBTyxFQUFDLDZCQUE2QixDQUFDLENBQUE7UUFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNQLElBQUEsb0JBQU8sRUFBQyx5QkFBeUIsQ0FBQyxDQUFBO1FBQ2xDLElBQUcsSUFBSSxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBRWQsSUFBQSxvQkFBTyxFQUFDLG1DQUFtQyxDQUFDLENBQUE7UUFFNUMsSUFBRyxJQUFJLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLDZCQUFhLENBQUM7WUFDeEIsU0FBUyxFQUFDLFVBQVU7WUFDcEIsRUFBRSxFQUFDLElBQUksWUFBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBRXhDLE1BQU0sRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDMUIsY0FBYyxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYztZQUMxQyxhQUFhLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhO1lBQ3hDLE9BQU8sRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87WUFFNUIsUUFBUSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtZQUM5QixlQUFlLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlO1lBQzVDLFNBQVMsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFFaEMsUUFBUSxFQUFDLElBQUksQ0FBQyxRQUFRO1lBRXRCLFlBQVksRUFBQyxLQUFLLElBQUcsRUFBRTtnQkFDbkIsSUFBQSxvQkFBTyxFQUFDLGtDQUFrQyxDQUFDLENBQUE7Z0JBRTNDLE1BQU0sSUFBQSxhQUFLLEVBQUMsSUFBSSxDQUFDLENBQUE7Z0JBR2pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBQyxFQUFFLENBQUEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO29CQUNqQyxNQUFNLEVBQUUsV0FBVztvQkFDbkIsSUFBSSxFQUFFLE9BQU87b0JBQ2IsVUFBVSxFQUFDLENBQUM7aUJBQ2YsQ0FBaUIsQ0FBQTtnQkFFbEIsSUFBRywwQkFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBQztvQkFDNUIsSUFBQSxxQkFBUSxFQUFDLGtEQUFrRCxFQUFDLFFBQVEsQ0FBQyxDQUFBO29CQUVyRSxPQUFPO2lCQUNWO2dCQUVELEtBQUksSUFBSSxDQUFDLElBQUksUUFBUTtvQkFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBR0QsT0FBTyxFQUFDLEdBQUUsRUFBRTtnQkFDUixPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxDQUFDLENBQUE7Z0JBQ3ZELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixDQUFDO1NBQ0osQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUdELFlBQVksQ0FBQyxLQUFnQjtRQUN6QixJQUFBLG9CQUFPLEVBQUMsZ0NBQWdDLEVBQUMsS0FBSyxDQUFDLENBQUE7UUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBRUo7QUE1RkQsd0NBNEZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFdlYlNvY2tldCwgeyBSYXdEYXRhIH0gZnJvbSBcIndzXCI7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gXCIuL0Jhc2VTZXJ2aWNlXCI7XG5pbXBvcnQgeyBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gXCIuL0xvZ1NlcnZpY2VcIjtcbmltcG9ydCB7IEhVQkNvbm5lY3Rpb24sIElDbHVzdGVyUGFja2V0IH0gZnJvbSBcIi4vY2x1c3Rlci9IVUJDb25uZWN0aW9uXCI7XG5pbXBvcnQgeyBwcml2YXRlRGVjcnlwdCwgU2lnbiB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBTaWduYWwsIHsgUmVxIH0gZnJvbSBcImJhZG1mY2stc2lnbmFsXCI7XG5pbXBvcnQgeyBIVUJTZXJ2aWNlT3B0aW9ucywgSVdlYnNvY2tldFBhY2tldCB9IGZyb20gXCIuL0hVQlNlcnZpY2VcIjtcbmltcG9ydCB7IEVycm9yVXRpbHMgfSBmcm9tIFwiLi9zdHJ1Y3R1cmVzL0RlZmF1bHRFcnJvcnNcIjtcbmltcG9ydCB7IFNsZWVwIH0gZnJvbSBcIi4vaGVscGVyL1NsZWVwXCI7XG5cblxuZXhwb3J0IGludGVyZmFjZSBJUGFydHl7XG4gICAgbmFtZTpzdHJpbmcsXG4gICAgaGFuZGxlcnM6KFNpZ25hbDxJV2Vic29ja2V0UGFja2V0PnxSZXE8SVdlYnNvY2tldFBhY2tldCxhbnk+KVtdLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQYXJ0eUhvc3R7XG4gICAgdXJsOnN0cmluZyxcblx0cHVibGljS2V5OnN0cmluZyxcblx0aWQ6c3RyaW5nXHRcbn1cblxuLyoqXG4gKiBDbHVzdGVyU2VydmljZU9wdGlvbnNcbiAqIGlkOiBzdHJpbmcgLSBpZCBvZiB0aGUgc2VydmljZSwgbXVzdCBiZSBzaGEyNTYgaGFzaCBvciBzdHJvbmdlclxuICogXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlclNlcnZpY2VPcHRpb25zIGV4dGVuZHMgSFVCU2VydmljZU9wdGlvbnN7XG4gICAgXG4gICAgdGFyZ2V0SUQ6c3RyaW5nLFxuICAgIHRhcmdldFB1YmxpY0tleTpzdHJpbmcsXG4gICAgdGFyZ2V0VVJMOnN0cmluZyxcbiAgICBwYXJ0eTpJUGFydHlbXSwgLy8gbGlzdCBvZiBpZHMgb2YgcGFydGllcyB0aGF0IEkgY2FuIGNvbm5lY3QgdG9cbn1cblxuZXhwb3J0IGNsYXNzIENsdXN0ZXJTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2V7XG4gICAgXG4gICBcbiAgICBvcHRpb25zOkNsdXN0ZXJTZXJ2aWNlT3B0aW9ucztcbiAgICB3czpIVUJDb25uZWN0aW9ufG51bGw9bnVsbDtcbiAgICBoYW5kbGVyczogKFNpZ25hbDxJV2Vic29ja2V0UGFja2V0PiB8IFJlcTxJV2Vic29ja2V0UGFja2V0LCBhbnk+KVtdID0gW107XG4gICAgcGFyaXRlczpNYXA8c3RyaW5nLElQYXJ0eUhvc3Q+ID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3RydWN0b3Iob3B0OkNsdXN0ZXJTZXJ2aWNlT3B0aW9ucyl7XG4gICAgICAgIHN1cGVyKFwiQ2x1c3RlclNlcnZpY2VcIilcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXG4gICAgICAgICAgICBuZXcgU2lnbmFsPElXZWJzb2NrZXRQYWNrZXQ+KFwiU19QQVJUWV9BVkFJTEFCTEVcIix1bmRlZmluZWQsYXN5bmMgKHJlcSk9PntcbiAgICAgICAgICAgICAgICAvLyBnb3QgaW5mbyBhYm91dCBwYXJ0eVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkUGFydHlIb3N0KHJlcS5kYXRhKTtcbiAgICAgICAgICAgIH0pICAgICAgICAgICAgXG4gICAgICAgIF1cbiAgICBcbiAgICB9XG5cbiAgICBhc3luYyBpbml0KCl7XG4gICAgICAgIGxvZ0luZm8oXCJDbHVzdGVyU2VydmljZTogaW5pdGlhbGl6ZWRcIilcbiAgICAgICAgdGhpcy5jb25uZWN0VG9IVUIoKTtcbiAgICB9XG5cbiAgICBhc3luYyBjbG9zZSgpe1xuICAgICAgICBsb2dJbmZvKFwiQ2x1c3RlclNlcnZpY2U6IGNsb3NpbmdcIilcbiAgICAgICAgaWYodGhpcy53cylcbiAgICAgICAgICAgIHRoaXMud3MuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5wYXJpdGVzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgY29ubmVjdFRvSFVCKCl7XG5cbiAgICAgICAgbG9nSW5mbyhcIkNsdXN0ZXJTZXJ2aWNlOiBjb25uZWN0aW5nIHRvIEhVQlwiKVxuXG4gICAgICAgIGlmKHRoaXMud3MpXG4gICAgICAgICAgICB0aGlzLndzLmNsb3NlKCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLndzID0gbmV3IEhVQkNvbm5lY3Rpb24oe1xuICAgICAgICAgICAgZGlyZWN0aW9uOlwib3V0Z29pbmdcIixcbiAgICAgICAgICAgIHdzOm5ldyBXZWJTb2NrZXQodGhpcy5vcHRpb25zLnRhcmdldFVSTCksXG5cbiAgICAgICAgICAgIGhvc3RJRDp0aGlzLm9wdGlvbnMuaG9zdElELFxuICAgICAgICAgICAgaG9zdFByaXZhdGVLZXk6dGhpcy5vcHRpb25zLmhvc3RQcml2YXRlS2V5LFxuICAgICAgICAgICAgaG9zdFB1YmxpY0tleTp0aGlzLm9wdGlvbnMuaG9zdFB1YmxpY0tleSxcbiAgICAgICAgICAgIGhvc3RVUkw6dGhpcy5vcHRpb25zLmhvc3RVUkwsXG5cbiAgICAgICAgICAgIHRhcmdldElEOnRoaXMub3B0aW9ucy50YXJnZXRJRCxcbiAgICAgICAgICAgIHRhcmdldFB1YmxpY0tleTp0aGlzLm9wdGlvbnMudGFyZ2V0UHVibGljS2V5LFxuICAgICAgICAgICAgdGFyZ2V0VVJMOnRoaXMub3B0aW9ucy50YXJnZXRVUkwsXG5cbiAgICAgICAgICAgIGhhbmRsZXJzOnRoaXMuaGFuZGxlcnMsXG5cbiAgICAgICAgICAgIG9uQXV0aG9yaXplZDphc3luYyAoKT0+e1xuICAgICAgICAgICAgICAgIGxvZ0luZm8oXCJDbHVzdGVyU2VydmljZTogY29ubmVjdGVkIHRvIEhVQlwiKVxuXG4gICAgICAgICAgICAgICAgYXdhaXQgU2xlZXAoMTAwMClcblxuICAgICAgICAgICAgICAgIC8vIHJlZ2lzdHJhdGUgcGFydGllc1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcml0ZXMgPSB0aGlzLm9wdGlvbnMucGFydHkubWFwKChwYXJ0eSk9PnBhcnR5Lm5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53cz8uc2VuZCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJSRVFfUEFSVFlcIixcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFyaXRlcyxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJRDoxXG4gICAgICAgICAgICAgICAgfSkgYXMgSVBhcnR5SG9zdFtdXG5cbiAgICAgICAgICAgICAgICBpZihFcnJvclV0aWxzLmlzRXJyb3IocmVzcG9uc2UpKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJDbHVzdGVyU2VydmljZTogZXJyb3Igd2hpbGUgcmVnaXN0cmF0aW5nIHBhcnRpZXNcIixyZXNwb25zZSlcbiAgICAgICAgICAgICAgICAgICAgLy90b2RvIHJldGFrZSBwYXJpdGVzXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpIG9mIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFBhcnR5SG9zdChpKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgb25DbG9zZTooKT0+e1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2x1c3RlclNlcnZpY2U6IGNvbm5lY3Rpb24gdG8gSFVCIGNsb3NlZFwiKVxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdFRvSFVCKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgYWRkUGFydHlIb3N0KHBhcnR5OklQYXJ0eUhvc3Qpe1xuICAgICAgICBsb2dJbmZvKFwiQ2x1c3RlclNlcnZpY2U6IGFkZCBwYXJ0eSBob3N0XCIscGFydHkpXG4gICAgICAgIHRoaXMucGFyaXRlcy5zZXQocGFydHkuaWQscGFydHkpO1xuICAgIH1cblxufSJdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClusterService.js","sourceRoot":"","sources":["../../src/apiServer/ClusterService.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAwC;AACxC,+CAA4C;AAC5C,6CAAiD;AACjD,2DAAwE;AAIxE,8DAAwD;AACxD,0CAAuC;AA2BvC,MAAa,cAAe,SAAQ,yBAAW;IAG3C,OAAO,CAAuB;IAC9B,EAAE,GAAoB,IAAI,CAAC;IAE3B,OAAO,GAAsB,IAAI,GAAG,EAAE,CAAC;IAEvC,YAAY,GAAyB;QACjC,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI;QACN,IAAA,oBAAO,EAAC,6BAA6B,CAAC,CAAA;QACtC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,YAAY;QAEd,IAAA,oBAAO,EAAC,mCAAmC,CAAC,CAAA;QAE5C,IAAG,IAAI,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,CAAC,EAAE,GAAG,IAAI,6BAAa,CAAC;YACxB,SAAS,EAAC,UAAU;YACpB,EAAE,EAAC,IAAI,YAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAExC,MAAM,EAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YAC1B,cAAc,EAAC,IAAI,CAAC,OAAO,CAAC,cAAc;YAC1C,aAAa,EAAC,IAAI,CAAC,OAAO,CAAC,aAAa;YACxC,OAAO,EAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YAE5B,QAAQ,EAAC,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC9B,eAAe,EAAC,IAAI,CAAC,OAAO,CAAC,eAAe;YAC5C,SAAS,EAAC,IAAI,CAAC,OAAO,CAAC,SAAS;YAEhC,QAAQ,EAAC,EAAE;YAEX,YAAY,EAAC,KAAK,IAAG,EAAE;gBACnB,IAAA,oBAAO,EAAC,kCAAkC,CAAC,CAAA;gBAE3C,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAA;gBAGjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAC,EAAE,CAAA,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;oBACjC,MAAM,EAAE,WAAW;oBACnB,IAAI,EAAE,OAAO;oBACb,UAAU,EAAC,CAAC;iBACf,CAAiB,CAAA;gBAElB,IAAG,0BAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAC;oBAC5B,IAAA,qBAAQ,EAAC,kDAAkD,EAAC,QAAQ,CAAC,CAAA;oBAErE,OAAO;iBACV;gBAED,KAAI,IAAI,CAAC,IAAI,QAAQ;oBACjB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YAGD,OAAO,EAAC,GAAE,EAAE;gBACR,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;gBACvD,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC;SACJ,CAAC,CAAA;IACN,CAAC;IAGD,YAAY,CAAC,IAAe;QACxB,IAAA,oBAAO,EAAC,gCAAgC,EAAC,IAAI,CAAC,CAAA;IAClD,CAAC;CAEJ;AA5ED,wCA4EC","sourcesContent":["import WebSocket, { RawData } from \"ws\";\nimport { BaseService } from \"./BaseService\";\nimport { logError, logInfo } from \"./LogService\";\nimport { HUBConnection, IClusterPacket } from \"./cluster/HUBConnection\";\nimport { privateDecrypt } from \"crypto\";\nimport Signal, { Req } from \"badmfck-signal\";\nimport { HUBServiceOptions, IWebsocketPacket } from \"./HUBService\";\nimport { ErrorUtils } from \"./structures/DefaultErrors\";\nimport { Sleep } from \"./helper/Sleep\";\n\n\nexport interface IParty{\n name:string,\n handlers:(Signal<IWebsocketPacket>|Req<IWebsocketPacket,any>)[],\n}\n\nexport interface IPartyHost{\n url:string,\n\tpublicKey:string,\n\tid:string\t\n}\n\n/**\n * ClusterServiceOptions\n * id: string - id of the service, must be sha256 hash or stronger\n * \n */\nexport interface ClusterServiceOptions extends HUBServiceOptions{\n \n targetID:string,\n targetPublicKey:string,\n targetURL:string,\n party:IParty[], // list of ids of parties that I can connect to\n}\n\nexport class ClusterService extends BaseService{\n \n \n options:ClusterServiceOptions;\n ws:HUBConnection|null=null;\n\n parites:Map<string,IParty> = new Map();\n\n constructor(opt:ClusterServiceOptions){\n super(\"ClusterService\")\n this.options = opt;\n }\n\n async init(){\n logInfo(\"ClusterService: initialized\")\n this.connectToHUB();\n }\n\n async connectToHUB(){\n\n logInfo(\"ClusterService: connecting to HUB\")\n\n if(this.ws)\n this.ws.close();\n \n this.ws = new HUBConnection({\n direction:\"outgoing\",\n ws:new WebSocket(this.options.targetURL),\n\n hostID:this.options.hostID,\n hostPrivateKey:this.options.hostPrivateKey,\n hostPublicKey:this.options.hostPublicKey,\n hostURL:this.options.hostURL,\n\n targetID:this.options.targetID,\n targetPublicKey:this.options.targetPublicKey,\n targetURL:this.options.targetURL,\n\n handlers:[],\n\n onAuthorized:async ()=>{\n logInfo(\"ClusterService: connected to HUB\")\n\n await Sleep(1000)\n\n // registrate parties\n const parites = this.options.party.map((party)=>party.name);\n const response = await this.ws?.send({\n method: \"REQ_PARTY\",\n data: parites,\n callbackID:1\n }) as IPartyHost[]\n\n if(ErrorUtils.isError(response)){\n logError(\"ClusterService: error while registrating parties\",response)\n //todo retake parites\n return;\n }\n \n for(let i of response)\n this.addPartyHost(i);\n },\n\n \n onClose:()=>{\n console.log(\"ClusterService: connection to HUB closed\")\n this.connectToHUB();\n },\n })\n }\n\n\n addPartyHost(host:IPartyHost){\n logInfo(\"ClusterService: add party host\",host)\n }\n\n}"]}
@@ -180,3 +180,4 @@ new DocumentGenerator({
180
180
  savePath: "./bin/",
181
181
  savePathFileName: "doc.json",
182
182
  });
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9jdW1lbnRTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9Eb2N1bWVudFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLG1EQUE2QztBQW9DN0MsTUFBYSxpQkFBaUI7SUFDckIsYUFBYSxHQUFtQyxFQUFFLENBQUM7SUFDbkQsTUFBTSxDQUEwQjtJQUV4QyxZQUFZLE1BQStCO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXJCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxRQUFRO1FBQ2YsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLGNBQWMsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTyxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7UUFDcEMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUc5QyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDbkQsU0FBUzthQUNUO1lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxD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QVEsRUFBRSxFQUFFLENBQUM7cUJBQ3JCLElBQUksRUFBRSxDQUFDO2dCQUVULE1BQU07WUFFUCxLQUFLLE1BQU07Z0JBQ1YsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUNqQixJQUFJLEdBQUcsRUFBRSxDQUFDO2lCQUNWO2dCQUVELE1BQU07U0FDUDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVPLGlCQUFpQjtRQUV4QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFFckUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVNLGdCQUFnQjtRQUN0QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDM0IsQ0FBQztDQTBERDtBQWhTRCw4Q0FnU0M7QUFHRCxJQUFJLGlCQUFpQixDQUFDO0lBQ3JCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLFFBQVEsRUFBRSxRQUFRO0lBQ2xCLGdCQUFnQixFQUFFLFVBQVU7Q0FDNUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwYXJzZSwgU3BlYyB9IGZyb20gXCJjb21tZW50LXBhcnNlclwiO1xuXG4vL1RPRE86IGFwaSBlbmRwb2ludCwgc291cmNlcGF0aCwgLmRvYyBmaWxlIC0gZnJvbSBjb25maWdcblxuZGVjbGFyZSB0eXBlIERvY3VtZW50R2VuZXJhdG9yQ29uZmlnID0ge1xuXHRzb3VyY2VQYXRoOiBzdHJpbmc7XG5cdGFwaUVuZHBvaW50OiBzdHJpbmc7XG5cdHNhdmVQYXRoOiBzdHJpbmc7XG5cdHNhdmVQYXRoRmlsZU5hbWU6IHN0cmluZztcbn07XG5cbmRlY2xhcmUgdHlwZSBEb2N1bWVudEdlbmVyYXRvckRvY3VtZW50YXRpb24gPSB7XG5cdFtiYXNlRW5kcG9pbnROYW1lOiBzdHJpbmddOiB7XG5cdFx0W2VuZFBvaW50TmFtZTogc3RyaW5nXTogRG9jdW1lbnRHZW5lcmF0b3JEb2N1bWVudGF0aW9uRW5kcG9pbnQ7XG5cdH07XG59O1xuXG5kZWNsYXJlIHR5cGUgRG9jdW1lbnRHZW5lcmF0b3JEb2N1bWVudGF0aW9uRW5kcG9pbnQgPSB7XG5cdGhhbmRsZXI6IHN0cmluZztcblx0ZnVsbFBhdGg6IHN0cmluZztcblx0aWdub3JlSW50ZXJjZXB0b3I/OiBzdHJpbmc7XG5cblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdHBhcmFtZXRlcnM6IERvY3VtZW50R2VuZXJhdG9yRG9jdW1lbnRhdGlvbkVuZHBvaW50UGFyYW1ldGVyW107XG5cdHJldHVybnM/OiBPbWl0PERvY3VtZW50R2VuZXJhdG9yRG9jdW1lbnRhdGlvbkVuZHBvaW50UGFyYW1ldGVyLCBcIm9wdGlvbmFsXCI+O1xuXHRleGFtcGxlPzogc3RyaW5nW107XG5cdHRocm93cz86IE9taXQ8RG9jdW1lbnRHZW5lcmF0b3JEb2N1bWVudGF0aW9uRW5kcG9pbnRQYXJhbWV0ZXIsIFwib3B0aW9uYWxcIj5bXTtcbn07XG5cbmRlY2xhcmUgdHlwZSBEb2N1bWVudEdlbmVyYXRvckRvY3VtZW50YXRpb25FbmRwb2ludFBhcmFtZXRlciA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cdG9wdGlvbmFsPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEdlbmVyYXRvciB7XG5cdHByaXZhdGUgZG9jdW1lbnRhdGlvbjogRG9jdW1lbnRHZW5lcmF0b3JEb2N1bWVudGF0aW9uID0ge307XG5cdHByaXZhdGUgY29uZmlnOiBEb2N1bWVudEdlbmVyYXRvckNvbmZpZztcblxuXHRjb25zdHJ1Y3Rvcihjb25maWc6IERvY3VtZW50R2VuZXJhdG9yQ29uZmlnKSB7XG5cdFx0dGhpcy5jb25maWcgPSBjb25maWc7XG5cblx0XHR0aGlzLmdlbmVyYXRlRG9jdW1lbnRhdGlvbigpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRGaWxlcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIGZzLnJlYWRkaXJTeW5jKHRoaXMuY29uZmlnLnNvdXJjZVBhdGgpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRGaWxlQ29udGVudChmaWxlOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvbmZpZy5zb3VyY2VQYXRoLCBmaWxlKSwgXCJ1dGYtOFwiKTtcblx0fVxuXG5cdHByaXZhdGUgZ2VuZXJhdGVEb2N1bWVudGF0aW9uID0gKCkgPT4ge1xuXHRcdGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLmdldEZpbGVzKCkpIHtcblx0XHRcdGNvbnN0IGZpbGVDb250ZW50ID0gdGhpcy5nZXRGaWxlQ29udGVudChmaWxlKTtcblxuXHRcdFx0Ly8gZ2V0IGJhc2UgZW5kcG9pbnRcblx0XHRcdGNvbnN0IGJhc2VFbmRwb2ludCA9IGZpbGVDb250ZW50Lm1hdGNoKC9zdXBlclxcKFsnXCJdKC4qPylbJ1wiXVxcKS8pO1xuXHRcdFx0aWYgKCFiYXNlRW5kcG9pbnQpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihgTm8gYmFzZSBlbmRwb2ludCBmb3VuZCBpbiAke2ZpbGV9YCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBub2RlRW5kcG9pbnQgPSB0aGlzLmNvbmZpZy5hcGlFbmRwb2ludCArIFwiL1wiICsgYmFzZUVuZHBvaW50WzFdO1xuXG5cdFx0XHQvLyBnZXQgYWxsIGVuZHBvaW50c1xuXHRcdFx0Y29uc3QgcmVnZXggPSAve1xccyplbmRwb2ludDpcXHMqXCIoLio/KVwiLFxccypoYW5kbGVyOlxccyp0aGlzXFwuKC4qPykoPzosXFxzKmlnbm9yZUludGVyY2VwdG9yOlxccyoodHJ1ZXxmYWxzZSkpP1xccyp9L2c7XG5cblx0XHRcdGNvbnN0IGVuZHBvaW50cyA9IGZpbGVDb250ZW50Lm1hdGNoQWxsKHJlZ2V4KTtcblxuXHRcdFx0Zm9yIChjb25zdCBtYXRjaCBvZiBlbmRwb2ludHMpIHtcblx0XHRcdFx0Y29uc3QgZW5kcG9pbnROYW1lOiBzdHJpbmcgPSBtYXRjaFsxXTtcblx0XHRcdFx0Y29uc3QgaGFuZGxlciA9IG1hdGNoWzJdO1xuXHRcdFx0XHRjb25zdCBpZ25vcmVJbnRlcmNlcHRvciA9IG1hdGNoWzNdO1xuXG5cdFx0XHRcdGlmICghdGhpcy5kb2N1bWVudGF0aW9uLmhhc093blByb3BlcnR5KG5vZGVFbmRwb2ludCkpIHtcblx0XHRcdFx0XHR0aGlzLmRvY3VtZW50YXRpb25bbm9kZUVuZHBvaW50XSA9IHt9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZW5kcG9pbnQ6IERvY3VtZW50R2VuZXJhdG9yRG9jdW1lbnRhdGlvbkVuZHBvaW50ID0ge1xuXHRcdFx0XHRcdGhhbmRsZXIsXG5cdFx0XHRcdFx0aWdub3JlSW50ZXJjZXB0b3IsXG5cdFx0XHRcdFx0ZnVsbFBhdGg6IG5vZGVFbmRwb2ludCArIFwiL1wiICsgZW5kcG9pbnROYW1lLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBcIlwiLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM6IFtdLFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHRoaXMuZG9jdW1lbnRhdGlvbltub2RlRW5kcG9pbnRdW2VuZHBvaW50TmFtZV0gPSB0aGlzLnBhcnNlRW5kUG9pbnRDb21tZW50cyhcblx0XHRcdFx0XHR0aGlzLmdldENvbW1lbnRzQnlFbmRwb2ludChmaWxlQ29udGVudCwgaGFuZGxlciksXG5cdFx0XHRcdFx0ZW5kcG9pbnQsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5zYXZlRG9jdW1lbnRhdGlvbigpO1xuXG5cdFx0Y29uc29sZS5sb2coXCJEb2N1bWVudGF0aW9uIGdlbmVyYXRlZCBhbmQgc2F2ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuXHR9O1xuXG5cdHByaXZhdGUgZ2V0Q29tbWVudHNCeUVuZHBvaW50KGZpbGVDb250ZW50OiBzdHJpbmcsIGhhbmRsZXI6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IGNvbW1lbnRzOiBzdHJpbmcgPSBcIlwiO1xuXG5cdFx0Ly9UT0RPOiBjaGFuZ2UgdG8gcmVnZXhcblx0XHQvL2NvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgL1xcXFwqXFxcXCooW1xcXFxzXFxcXFNdKj8pXFxcXCovXFxcXHMqYXN5bmNcXFxccyske2hhbmRsZXJ9XFxcXHMqXFxcXChgLCBcImdcIik7XG5cdFx0Ly9jb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYC9cXFxcKlxcXFwqKFtcXFxcc1xcXFxTXSo/KVxcXFwqXFxcXC9cXFxccyphc3luY1xcXFxzKyR7aGFuZGxlcn1cXFxccypcXFxcKGAsIFwiZ1wiKTtcblx0XHQvL2NvbnN0IG1hdGNoMiA9IGZpbGVDb250ZW50Lm1hdGNoKHJlZ2V4KTtcblxuXHRcdC8vaWYgKG1hdGNoMikge1xuXHRcdC8vIFx0Y29tbWVudHMgPSBtYXRjaDJbMF07XG5cdFx0Ly8gXHQvLyBmb3JtYXRKYXZhRG9jKG1hdGNoMlswXSwgZGVzY3JpcHRpb24pO1xuXHRcdC8vfVxuXG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoYXN5bmMgKSoke2hhbmRsZXJ9KFxcXFxzKilcXFxcKGAsIFwiZ1wiKTtcblx0XHRjb25zdCBtYXRjaCA9IGZpbGVDb250ZW50Lm1hdGNoKHJlZ2V4KTtcblxuXHRcdGlmIChtYXRjaCkge1xuXHRcdFx0Ly8gY29uc3QgaW5kZXhIYW5kbGVyID0gZmlsZUNvbnRlbnQuaW5kZXhPZihgYXN5bmMgJHtoYW5kbGVyfShgKTtcblx0XHRcdGNvbnN0IGluZGV4SGFuZGxlciA9IGZpbGVDb250ZW50LmluZGV4T2YoYCR7bWF0Y2hbMF19YCk7XG5cblx0XHRcdC8vIGlmIChpbmRleEhhbmRsZXIgPT09IC0xKSB7XG5cdFx0XHQvLyBcdGluZGV4SGFuZGxlciA9IGZpbGVDb250ZW50LmluZGV4T2YoYCR7aGFuZGxlcn0oYCk7XG5cdFx0XHQvLyB9XG5cblx0XHRcdGlmIChpbmRleEhhbmRsZXIgIT0gLTEpIHtcblx0XHRcdFx0Y29uc3QgaW5kZXhDb21tZW50U3RhcnQgPSBmaWxlQ29udGVudC5sYXN0SW5kZXhPZihcIi8qKlwiLCBpbmRleEhhbmRsZXIpO1xuXHRcdFx0XHRpZiAoaW5kZXhDb21tZW50U3RhcnQgIT0gLTEpIHtcblx0XHRcdFx0XHRjb25zdCBpbmRleENvbW1lbnRFbmQgPSBmaWxlQ29udGVudC5pbmRleE9mKFwiKi9cIiwgaW5kZXhDb21tZW50U3RhcnQpO1xuXG5cdFx0XHRcdFx0aWYgKGluZGV4Q29tbWVudEVuZCAhPSAtMSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY29tbWVudHNTdWJzdHJpbmcgPSBmaWxlQ29udGVudC5zdWJzdHJpbmcoaW5kZXhDb21tZW50U3RhcnQsIGluZGV4Q29tbWVudEVuZCArIDIpO1xuXG5cdFx0XHRcdFx0XHRpZiAoY29tbWVudHNTdWJzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVnZXhUb0NoZWNrQ29tbWVudFdpdGhNZXRob2QgPSBuZXcgUmVnRXhwKFxuXHRcdFx0XHRcdFx0XHRcdGAke2NvbW1lbnRzU3Vic3RyaW5nLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKX0oW1xcXFxzXSo/KShhc3luYyApKiR7aGFuZGxlcn0oXFxcXHMqKVxcXFwoYCxcblx0XHRcdFx0XHRcdFx0XHRcImdcIixcblx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBtYXRjaFRvQ2hlY2tDb21tZW50V2l0aE1ldGhvZCA9IGZpbGVDb250ZW50Lm1hdGNoKHJlZ2V4VG9DaGVja0NvbW1lbnRXaXRoTWV0aG9kKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAobWF0Y2hUb0NoZWNrQ29tbWVudFdpdGhNZXRob2QpIHtcblx0XHRcdFx0XHRcdFx0XHRjb21tZW50cyA9IGNvbW1lbnRzU3Vic3RyaW5nO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbW1lbnRzO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUVuZFBvaW50Q29tbWVudHMoXG5cdFx0Y29tbWVudHM6IHN0cmluZyxcblx0XHRlbmRwb2ludDogRG9jdW1lbnRHZW5lcmF0b3JEb2N1bWVudGF0aW9uRW5kcG9pbnQsXG5cdCk6IERvY3VtZW50R2VuZXJhdG9yRG9jdW1lbnRhdGlvbkVuZHBvaW50IHtcblx0XHRpZiAoY29tbWVudHMpIHtcblx0XHRcdGNvbnN0IHBhcnNlZCA9IHBhcnNlKGNvbW1lbnRzLCB7IHNwYWNpbmc6IFwicHJlc2VydmVcIiB9KTtcblx0XHRcdGlmIChwYXJzZWRbMF0pIHtcblx0XHRcdFx0Y29uc3QgZmlyc3RQYXJzZWQgPSBwYXJzZWRbMF07XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGZpcnN0UGFyc2VkLnRhZ3MpO1xuXG5cdFx0XHRcdGVuZHBvaW50LmRlc2NyaXB0aW9uID0gdGhpcy50YWdNb2RpZmljYXRpb25zKGZpcnN0UGFyc2VkLmRlc2NyaXB0aW9uKTtcblxuXHRcdFx0XHRmaXJzdFBhcnNlZC50YWdzLmZvckVhY2goKHRhZykgPT4ge1xuXHRcdFx0XHRcdGVuZHBvaW50ID0gdGhpcy50YWdUb0VuZHBvaW50KHRhZywgZW5kcG9pbnQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZW5kcG9pbnQ7XG5cdH1cblxuXHQvKipcblx0ICogRnJvbSBjb21tZW50LXBhcnNlciBsaWJyYXJ5IHRvIGpzb25cblx0ICpcblx0ICogQHBhcmFtIHRhZ1xuXHQgKiBAcGFyYW0gZW5kcG9pbnRcblx0ICogQHJldHVybnNcblx0ICovXG5cdHByaXZhdGUgdGFnVG9FbmRwb2ludChcblx0XHR0YWc6IFNwZWMsXG5cdFx0ZW5kcG9pbnQ6IERvY3VtZW50R2VuZXJhdG9yRG9jdW1lbnRhdGlvbkVuZHBvaW50LFxuXHQpOiBEb2N1bWVudEdlbmVyYXRvckRvY3VtZW50YXRpb25FbmRwb2ludCB7XG5cdFx0c3dpdGNoICh0YWcudGFnKSB7XG5cdFx0XHRjYXNlIFwicGFyYW1cIjpcblx0XHRcdFx0ZW5kcG9pbnQucGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRuYW1lOiB0aGlzLnRhZ01vZGlmaWNhdGlvbnModGFnLm5hbWUsIFwibmFtZVwiKSxcblx0XHRcdFx0XHR0eXBlOiB0YWcudHlwZSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogdGhpcy50YWdNb2RpZmljYXRpb25zKHRhZy5kZXNjcmlwdGlvbiksXG5cdFx0XHRcdFx0b3B0aW9uYWw6IHRhZy5vcHRpb25hbCxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdGVuZHBvaW50LmRlc2NyaXB0aW9uID0gdGhpcy50YWdNb2RpZmljYXRpb25zKHRhZy5kZXNjcmlwdGlvbik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImV4YW1wbGVcIjpcblx0XHRcdFx0aWYgKCFlbmRwb2ludC5leGFtcGxlKSB7XG5cdFx0XHRcdFx0ZW5kcG9pbnQuZXhhbXBsZSA9IFtdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZW5kcG9pbnQuZXhhbXBsZS5wdXNoKHRoaXMudGFnTW9kaWZpY2F0aW9ucyh0YWcuZGVzY3JpcHRpb24pKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwicmV0dXJuc1wiOlxuXHRcdFx0XHRlbmRwb2ludC5yZXR1cm5zID0ge1xuXHRcdFx0XHRcdG5hbWU6IHRoaXMudGFnTW9kaWZpY2F0aW9ucyh0YWcubmFtZSwgXCJuYW1lXCIpLFxuXHRcdFx0XHRcdHR5cGU6IHRhZy50eXBlLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB0aGlzLnRhZ01vZGlmaWNhdGlvbnModGFnLmRlc2NyaXB0aW9uKSxcblx0XHRcdFx0fTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwidGhyb3dzXCI6XG5cdFx0XHRcdGlmICghZW5kcG9pbnQudGhyb3dzKSB7XG5cdFx0XHRcdFx0ZW5kcG9pbnQudGhyb3dzID0gW107XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlbmRwb2ludC50aHJvd3MucHVzaCh7XG5cdFx0XHRcdFx0bmFtZTogdGhpcy50YWdNb2RpZmljYXRpb25zKHRhZy5uYW1lLCBcIm5hbWVcIiksXG5cdFx0XHRcdFx0dHlwZTogdGFnLnR5cGUsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHRoaXMudGFnTW9kaWZpY2F0aW9ucyh0YWcuZGVzY3JpcHRpb24pLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVuZHBvaW50O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIG1vZGlmaWNhdGlvbiBhZnRlciBjb21tZW50LXBhcnNlciBsaWJyYXJ5IHBhcnNpbmdzIHdpdGggXCItXCIgaW4gZGVzY3JpcHRpb25cblx0ICpcblx0ICogQHBhcmFtIHRleHRcblx0ICogQHBhcmFtIGZpZWxkXG5cdCAqIEByZXR1cm5zXG5cdCAqL1xuXHRwcml2YXRlIHRhZ01vZGlmaWNhdGlvbnModGV4dDogc3RyaW5nLCBmaWVsZDogc3RyaW5nID0gXCJkZXNjcmlwdGlvblwiKTogc3RyaW5nIHtcblx0XHRzd2l0Y2ggKGZpZWxkKSB7XG5cdFx0XHRjYXNlIFwiZGVzY3JpcHRpb25cIjpcblx0XHRcdFx0dGV4dCA9IHRleHRcblx0XHRcdFx0XHQudHJpbSgpXG5cdFx0XHRcdFx0LnJlcGxhY2UoL14oXFwtLikvLCBcIlwiKVxuXHRcdFx0XHRcdC50cmltKCk7XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJuYW1lXCI6XG5cdFx0XHRcdGlmICh0ZXh0ID09PSBcIi1cIikge1xuXHRcdFx0XHRcdHRleHQgPSBcIlwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHQ7XG5cdH1cblxuXHRwcml2YXRlIHNhdmVEb2N1bWVudGF0aW9uKCk6IHZvaWQge1xuXHRcdC8vIGNvbnN0IGZvcm1hdEZvclNhdmUgPSB7IGRhdGE6IHRoaXMuZG9jdW1lbnRhdGlvbiB9O1xuXHRcdGNvbnN0IGZvcm1hdEZvclNhdmUgPSB0aGlzLmRvY3VtZW50YXRpb247XG5cdFx0Y29uc3QgZmlsZVBhdGggPSB0aGlzLmNvbmZpZy5zYXZlUGF0aCArIHRoaXMuY29uZmlnLnNhdmVQYXRoRmlsZU5hbWU7XG5cblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShmb3JtYXRGb3JTYXZlLCBudWxsLCAyKSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RG9jdW1lbnRhdGlvbigpOiBEb2N1bWVudEdlbmVyYXRvckRvY3VtZW50YXRpb24ge1xuXHRcdHJldHVybiB0aGlzLmRvY3VtZW50YXRpb247XG5cdH1cblxuXHQvLyBjb25zdCBmb3JtYXRKYXZhRG9jID0gKGNvbW1lbnQsIGZpbmFsRGVzY3JpcHRpb24pID0+IHtcblx0Ly8gXHQvLyDQoNC10LPRg9C70Y/RgNC90YvQtSDQstGL0YDQsNC20LXQvdC40Y8g0LTQu9GPINGA0LDQt9C70LjRh9C90YvRhSDRh9Cw0YHRgtC10Lkg0LrQvtC80LzQtdC90YLQsNGA0LjRj1xuXHQvLyBcdGNvbnN0IGRlc2NyaXB0aW9uUmVnZXggPSAvXFwvXFwqXFwqKFtcXHNcXFNdKj8pKD89XFxzKlxcKlxccypAfFxccypcXCpcXC8pL2c7XG5cdC8vIFx0Y29uc3QgcGFyYW1SZWdleCA9IC9AcGFyYW1cXHMrKFxcdyspXFxzKyhbXlxcc10rKVxccyotXFxzKiguKz8pKD89XFxzK1xcKnwkKS9nO1xuXHQvLyBcdGNvbnN0IHJldHVyblJlZ2V4ID0gL0ByZXR1cm5zP1xccysoW15cXHNdKylcXHMqLVxccyooLis/KSg/PVxccytcXCp8JCkvZztcblx0Ly8gXHRjb25zdCB0aHJvd3NSZWdleCA9IC9AdGhyb3dzXFxzKyhbXlxcc10rKVxccyotXFxzKiguKz8pKD89XFxzK1xcKnwkKS9nO1xuXHQvLyBcdGNvbnN0IHNlZVJlZ2V4ID0gL0BzZWVcXHMrKFteXFxzXSspKD89XFxzK1xcKnwkKS9nO1xuXG5cdC8vIFx0Ly8g0JjQt9Cy0LvQtdC60LDQtdC8INC+0L/QuNGB0LDQvdC40LVcblx0Ly8gXHRjb25zdCBkZXNjcmlwdGlvbk1hdGNoID0gZGVzY3JpcHRpb25SZWdleC5leGVjKGNvbW1lbnQpO1xuXHQvLyBcdGNvbnN0IGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb25NYXRjaCA/IGRlc2NyaXB0aW9uTWF0Y2hbMV0udHJpbSgpLnJlcGxhY2UoL1xcKlxccysvZywgXCJcIikucmVwbGFjZSgvXFxuL2csIFwiIFwiKSA6IFwiXCI7XG5cblx0Ly8gXHRmaW5hbERlc2NyaXB0aW9uLmluZm8gPSBkZXNjcmlwdGlvbjtcblxuXHQvLyBcdC8vINCY0LfQstC70LXQutCw0LXQvCDQv9Cw0YDQsNC80LXRgtGA0Ytcblx0Ly8gXHRjb25zdCBwYXJhbXMgPSBbXTtcblx0Ly8gXHRsZXQgcGFyYW1NYXRjaDtcblx0Ly8gXHR3aGlsZSAoKHBhcmFtTWF0Y2ggPSBwYXJhbVJlZ2V4LmV4ZWMoY29tbWVudCkpICE9PSBudWxsKSB7XG5cdC8vIFx0XHRwYXJhbXMucHVzaCh7XG5cdC8vIFx0XHRcdG5hbWU6IHBhcmFtTWF0Y2hbMV0sXG5cdC8vIFx0XHRcdHR5cGU6IHBhcmFtTWF0Y2hbMl0sXG5cdC8vIFx0XHRcdGRlc2NyaXB0aW9uOiBwYXJhbU1hdGNoWzNdLnRyaW0oKSxcblx0Ly8gXHRcdH0pO1xuXHQvLyBcdH1cblx0Ly8gXHRkZXNjcmlwdGlvbi5wYXJhbXMgPSBwYXJhbXM7XG5cblx0Ly8gXHQvLyDQmNC30LLQu9C10LrQsNC10Lwg0LLQvtC30LLRgNCw0YnQsNC10LzQvtC1INC30L3QsNGH0LXQvdC40LVcblx0Ly8gXHRjb25zdCByZXR1cm5NYXRjaCA9IHJldHVyblJlZ2V4LmV4ZWMoY29tbWVudCk7XG5cdC8vIFx0Y29uc3QgcmV0dXJuVHlwZSA9IHJldHVybk1hdGNoID8gcmV0dXJuTWF0Y2hbMV0gOiBcIlwiO1xuXHQvLyBcdGNvbnN0IHJldHVybkRlc2NyaXB0aW9uID0gcmV0dXJuTWF0Y2ggPyByZXR1cm5NYXRjaFsyXS50cmltKCkgOiBcIlwiO1xuXG5cdC8vIFx0ZmluYWxEZXNjcmlwdGlvbi5yZXR1cm4gPSB7XG5cdC8vIFx0XHR0eXBlOiByZXR1cm5UeXBlLFxuXHQvLyBcdFx0ZGVzY3JpcHRpb246IHJldHVybkRlc2NyaXB0aW9uLFxuXHQvLyBcdH07XG5cblx0Ly8gXHQvLyDQmNC30LLQu9C10LrQsNC10Lwg0LjRgdC60LvRjtGH0LXQvdC40Y9cblx0Ly8gXHRjb25zdCB0aHJvd3MgPSBbXTtcblx0Ly8gXHRsZXQgdGhyb3dzTWF0Y2g7XG5cdC8vIFx0d2hpbGUgKCh0aHJvd3NNYXRjaCA9IHRocm93c1JlZ2V4LmV4ZWMoY29tbWVudCkpICE9PSBudWxsKSB7XG5cdC8vIFx0XHR0aHJvd3MucHVzaCh7XG5cdC8vIFx0XHRcdGV4Y2VwdGlvbjogdGhyb3dzTWF0Y2hbMV0sXG5cdC8vIFx0XHRcdGRlc2NyaXB0aW9uOiB0aHJvd3NNYXRjaFsyXS50cmltKCksXG5cdC8vIFx0XHR9KTtcblx0Ly8gXHR9XG5cdC8vIFx0ZGVzY3JpcHRpb24udGhyb3dzID0gdGhyb3dzO1xuXG5cdC8vIFx0Ly8g0JjQt9Cy0LvQtdC60LDQtdC8INGC0LXQs9C4IEBzZWVcblx0Ly8gXHRjb25zdCBzZWVSZWZlcmVuY2VzID0gW107XG5cdC8vIFx0bGV0IHNlZU1hdGNoO1xuXHQvLyBcdHdoaWxlICgoc2VlTWF0Y2ggPSBzZWVSZWdleC5leGVjKGNvbW1lbnQpKSAhPT0gbnVsbCkge1xuXHQvLyBcdFx0c2VlUmVmZXJlbmNlcy5wdXNoKHNlZU1hdGNoWzFdKTtcblx0Ly8gXHR9XG5cblx0Ly8gXHRkZXNjcmlwdGlvbi5zZWUgPSBzZWVSZWZlcmVuY2VzO1xuXHQvLyB9O1xufVxuXG4vLyBjb25zdCBkb2N1bWVudEdlbmVyYXRvciA9XG5uZXcgRG9jdW1lbnRHZW5lcmF0b3Ioe1xuXHRzb3VyY2VQYXRoOiBcIi4vc3JjL2FwaVwiLFxuXHRhcGlFbmRwb2ludDogXCJhcGkvdjFcIixcblx0c2F2ZVBhdGg6IFwiLi9iaW4vXCIsXG5cdHNhdmVQYXRoRmlsZU5hbWU6IFwiZG9jLmpzb25cIixcbn0pO1xuXG4vLyBjb25zb2xlLmxvZyhkb2N1bWVudEdlbmVyYXRvci5nZXREb2N1bWVudGF0aW9uKCkpOyJdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentService.js","sourceRoot":"","sources":["../../src/apiServer/DocumentService.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { parse, Spec } from \"comment-parser\";\n\n//TODO: api endpoint, sourcepath, .doc file - from config\n\ndeclare type DocumentGeneratorConfig = {\n\tsourcePath: string;\n\tapiEndpoint: string;\n\tsavePath: string;\n\tsavePathFileName: string;\n};\n\ndeclare type DocumentGeneratorDocumentation = {\n\t[baseEndpointName: string]: {\n\t\t[endPointName: string]: DocumentGeneratorDocumentationEndpoint;\n\t};\n};\n\ndeclare type DocumentGeneratorDocumentationEndpoint = {\n\thandler: string;\n\tfullPath: string;\n\tignoreInterceptor?: string;\n\n\tdescription?: string;\n\tparameters: DocumentGeneratorDocumentationEndpointParameter[];\n\treturns?: Omit<DocumentGeneratorDocumentationEndpointParameter, \"optional\">;\n\texample?: string[];\n\tthrows?: Omit<DocumentGeneratorDocumentationEndpointParameter, \"optional\">[];\n};\n\ndeclare type DocumentGeneratorDocumentationEndpointParameter = {\n\tname: string;\n\ttype: string;\n\tdescription: string;\n\toptional?: boolean;\n};\n\nexport class DocumentGenerator {\n\tprivate documentation: DocumentGeneratorDocumentation = {};\n\tprivate config: DocumentGeneratorConfig;\n\n\tconstructor(config: DocumentGeneratorConfig) {\n\t\tthis.config = config;\n\n\t\tthis.generateDocumentation();\n\t}\n\n\tprivate getFiles(): string[] {\n\t\treturn fs.readdirSync(this.config.sourcePath);\n\t}\n\n\tprivate getFileContent(file: string) {\n\t\treturn fs.readFileSync(path.resolve(this.config.sourcePath, file), \"utf-8\");\n\t}\n\n\tprivate generateDocumentation = () => {\n\t\tfor (const file of this.getFiles()) {\n\t\t\tconst fileContent = this.getFileContent(file);\n\n\t\t\t// get base endpoint\n\t\t\tconst baseEndpoint = fileContent.match(/super\\(['\"](.*?)['\"]\\)/);\n\t\t\tif (!baseEndpoint) {\n\t\t\t\tconsole.error(`No base endpoint found in ${file}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst nodeEndpoint = this.config.apiEndpoint + \"/\" + baseEndpoint[1];\n\n\t\t\t// get all endpoints\n\t\t\tconst regex = /{\\s*endpoint:\\s*\"(.*?)\",\\s*handler:\\s*this\\.(.*?)(?:,\\s*ignoreInterceptor:\\s*(true|false))?\\s*}/g;\n\n\t\t\tconst endpoints = fileContent.matchAll(regex);\n\n\t\t\tfor (const match of endpoints) {\n\t\t\t\tconst endpointName: string = match[1];\n\t\t\t\tconst handler = match[2];\n\t\t\t\tconst ignoreInterceptor = match[3];\n\n\t\t\t\tif (!this.documentation.hasOwnProperty(nodeEndpoint)) {\n\t\t\t\t\tthis.documentation[nodeEndpoint] = {};\n\t\t\t\t}\n\n\t\t\t\tconst endpoint: DocumentGeneratorDocumentationEndpoint = {\n\t\t\t\t\thandler,\n\t\t\t\t\tignoreInterceptor,\n\t\t\t\t\tfullPath: nodeEndpoint + \"/\" + endpointName,\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t\tparameters: [],\n\t\t\t\t};\n\n\t\t\t\tthis.documentation[nodeEndpoint][endpointName] = this.parseEndPointComments(\n\t\t\t\t\tthis.getCommentsByEndpoint(fileContent, handler),\n\t\t\t\t\tendpoint,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.saveDocumentation();\n\n\t\tconsole.log(\"Documentation generated and saved successfully\");\n\t};\n\n\tprivate getCommentsByEndpoint(fileContent: string, handler: string): string {\n\t\tlet comments: string = \"\";\n\n\t\t//TODO: change to regex\n\t\t//const regex = new RegExp(`/\\\\*\\\\*([\\\\s\\\\S]*?)\\\\*/\\\\s*async\\\\s+${handler}\\\\s*\\\\(`, \"g\");\n\t\t//const regex = new RegExp(`/\\\\*\\\\*([\\\\s\\\\S]*?)\\\\*\\\\/\\\\s*async\\\\s+${handler}\\\\s*\\\\(`, \"g\");\n\t\t//const match2 = fileContent.match(regex);\n\n\t\t//if (match2) {\n\t\t// \tcomments = match2[0];\n\t\t// \t// formatJavaDoc(match2[0], description);\n\t\t//}\n\n\t\tconst regex = new RegExp(`(async )*${handler}(\\\\s*)\\\\(`, \"g\");\n\t\tconst match = fileContent.match(regex);\n\n\t\tif (match) {\n\t\t\t// const indexHandler = fileContent.indexOf(`async ${handler}(`);\n\t\t\tconst indexHandler = fileContent.indexOf(`${match[0]}`);\n\n\t\t\t// if (indexHandler === -1) {\n\t\t\t// \tindexHandler = fileContent.indexOf(`${handler}(`);\n\t\t\t// }\n\n\t\t\tif (indexHandler != -1) {\n\t\t\t\tconst indexCommentStart = fileContent.lastIndexOf(\"/**\", indexHandler);\n\t\t\t\tif (indexCommentStart != -1) {\n\t\t\t\t\tconst indexCommentEnd = fileContent.indexOf(\"*/\", indexCommentStart);\n\n\t\t\t\t\tif (indexCommentEnd != -1) {\n\t\t\t\t\t\tconst commentsSubstring = fileContent.substring(indexCommentStart, indexCommentEnd + 2);\n\n\t\t\t\t\t\tif (commentsSubstring) {\n\t\t\t\t\t\t\tconst regexToCheckCommentWithMethod = new RegExp(\n\t\t\t\t\t\t\t\t`${commentsSubstring.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}([\\\\s]*?)(async )*${handler}(\\\\s*)\\\\(`,\n\t\t\t\t\t\t\t\t\"g\",\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst matchToCheckCommentWithMethod = fileContent.match(regexToCheckCommentWithMethod);\n\n\t\t\t\t\t\t\tif (matchToCheckCommentWithMethod) {\n\t\t\t\t\t\t\t\tcomments = commentsSubstring;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn comments;\n\t}\n\n\tprivate parseEndPointComments(\n\t\tcomments: string,\n\t\tendpoint: DocumentGeneratorDocumentationEndpoint,\n\t): DocumentGeneratorDocumentationEndpoint {\n\t\tif (comments) {\n\t\t\tconst parsed = parse(comments, { spacing: \"preserve\" });\n\t\t\tif (parsed[0]) {\n\t\t\t\tconst firstParsed = parsed[0];\n\t\t\t\t// console.log(firstParsed.tags);\n\n\t\t\t\tendpoint.description = this.tagModifications(firstParsed.description);\n\n\t\t\t\tfirstParsed.tags.forEach((tag) => {\n\t\t\t\t\tendpoint = this.tagToEndpoint(tag, endpoint);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn endpoint;\n\t}\n\n\t/**\n\t * From comment-parser library to json\n\t *\n\t * @param tag\n\t * @param endpoint\n\t * @returns\n\t */\n\tprivate tagToEndpoint(\n\t\ttag: Spec,\n\t\tendpoint: DocumentGeneratorDocumentationEndpoint,\n\t): DocumentGeneratorDocumentationEndpoint {\n\t\tswitch (tag.tag) {\n\t\t\tcase \"param\":\n\t\t\t\tendpoint.parameters.push({\n\t\t\t\t\tname: this.tagModifications(tag.name, \"name\"),\n\t\t\t\t\ttype: tag.type,\n\t\t\t\t\tdescription: this.tagModifications(tag.description),\n\t\t\t\t\toptional: tag.optional,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"description\":\n\t\t\t\tendpoint.description = this.tagModifications(tag.description);\n\t\t\t\tbreak;\n\t\t\tcase \"example\":\n\t\t\t\tif (!endpoint.example) {\n\t\t\t\t\tendpoint.example = [];\n\t\t\t\t}\n\n\t\t\t\tendpoint.example.push(this.tagModifications(tag.description));\n\t\t\t\tbreak;\n\t\t\tcase \"returns\":\n\t\t\t\tendpoint.returns = {\n\t\t\t\t\tname: this.tagModifications(tag.name, \"name\"),\n\t\t\t\t\ttype: tag.type,\n\t\t\t\t\tdescription: this.tagModifications(tag.description),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase \"throws\":\n\t\t\t\tif (!endpoint.throws) {\n\t\t\t\t\tendpoint.throws = [];\n\t\t\t\t}\n\n\t\t\t\tendpoint.throws.push({\n\t\t\t\t\tname: this.tagModifications(tag.name, \"name\"),\n\t\t\t\t\ttype: tag.type,\n\t\t\t\t\tdescription: this.tagModifications(tag.description),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn endpoint;\n\t}\n\n\t/**\n\t *\n\t * modification after comment-parser library parsings with \"-\" in description\n\t *\n\t * @param text\n\t * @param field\n\t * @returns\n\t */\n\tprivate tagModifications(text: string, field: string = \"description\"): string {\n\t\tswitch (field) {\n\t\t\tcase \"description\":\n\t\t\t\ttext = text\n\t\t\t\t\t.trim()\n\t\t\t\t\t.replace(/^(\\-.)/, \"\")\n\t\t\t\t\t.trim();\n\n\t\t\t\tbreak;\n\n\t\t\tcase \"name\":\n\t\t\t\tif (text === \"-\") {\n\t\t\t\t\ttext = \"\";\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn text;\n\t}\n\n\tprivate saveDocumentation(): void {\n\t\t// const formatForSave = { data: this.documentation };\n\t\tconst formatForSave = this.documentation;\n\t\tconst filePath = this.config.savePath + this.config.savePathFileName;\n\n\t\tfs.writeFileSync(filePath, JSON.stringify(formatForSave, null, 2));\n\t}\n\n\tpublic getDocumentation(): DocumentGeneratorDocumentation {\n\t\treturn this.documentation;\n\t}\n\n\t// const formatJavaDoc = (comment, finalDescription) => {\n\t// \t// Регулярные выражения для различных частей комментария\n\t// \tconst descriptionRegex = /\\/\\*\\*([\\s\\S]*?)(?=\\s*\\*\\s*@|\\s*\\*\\/)/g;\n\t// \tconst paramRegex = /@param\\s+(\\w+)\\s+([^\\s]+)\\s*-\\s*(.+?)(?=\\s+\\*|$)/g;\n\t// \tconst returnRegex = /@returns?\\s+([^\\s]+)\\s*-\\s*(.+?)(?=\\s+\\*|$)/g;\n\t// \tconst throwsRegex = /@throws\\s+([^\\s]+)\\s*-\\s*(.+?)(?=\\s+\\*|$)/g;\n\t// \tconst seeRegex = /@see\\s+([^\\s]+)(?=\\s+\\*|$)/g;\n\n\t// \t// Извлекаем описание\n\t// \tconst descriptionMatch = descriptionRegex.exec(comment);\n\t// \tconst description = descriptionMatch ? descriptionMatch[1].trim().replace(/\\*\\s+/g, \"\").replace(/\\n/g, \" \") : \"\";\n\n\t// \tfinalDescription.info = description;\n\n\t// \t// Извлекаем параметры\n\t// \tconst params = [];\n\t// \tlet paramMatch;\n\t// \twhile ((paramMatch = paramRegex.exec(comment)) !== null) {\n\t// \t\tparams.push({\n\t// \t\t\tname: paramMatch[1],\n\t// \t\t\ttype: paramMatch[2],\n\t// \t\t\tdescription: paramMatch[3].trim(),\n\t// \t\t});\n\t// \t}\n\t// \tdescription.params = params;\n\n\t// \t// Извлекаем возвращаемое значение\n\t// \tconst returnMatch = returnRegex.exec(comment);\n\t// \tconst returnType = returnMatch ? returnMatch[1] : \"\";\n\t// \tconst returnDescription = returnMatch ? returnMatch[2].trim() : \"\";\n\n\t// \tfinalDescription.return = {\n\t// \t\ttype: returnType,\n\t// \t\tdescription: returnDescription,\n\t// \t};\n\n\t// \t// Извлекаем исключения\n\t// \tconst throws = [];\n\t// \tlet throwsMatch;\n\t// \twhile ((throwsMatch = throwsRegex.exec(comment)) !== null) {\n\t// \t\tthrows.push({\n\t// \t\t\texception: throwsMatch[1],\n\t// \t\t\tdescription: throwsMatch[2].trim(),\n\t// \t\t});\n\t// \t}\n\t// \tdescription.throws = throws;\n\n\t// \t// Извлекаем теги @see\n\t// \tconst seeReferences = [];\n\t// \tlet seeMatch;\n\t// \twhile ((seeMatch = seeRegex.exec(comment)) !== null) {\n\t// \t\tseeReferences.push(seeMatch[1]);\n\t// \t}\n\n\t// \tdescription.see = seeReferences;\n\t// };\n}\n\n// const documentGenerator =\nnew DocumentGenerator({\n\tsourcePath: \"./src/api\",\n\tapiEndpoint: \"api/v1\",\n\tsavePath: \"./bin/\",\n\tsavePathFileName: \"doc.json\",\n});\n\n// console.log(documentGenerator.getDocumentation());"]}
@@ -3,9 +3,10 @@ import { HUBConnection } from "./cluster/HUBConnection";
3
3
  import Signal, { Req } from "badmfck-signal";
4
4
  import { IError } from "./structures/Interfaces";
5
5
  export interface HUBServiceOptions {
6
- url: string;
7
- hubPrivateKey: string;
8
- hubID: string;
6
+ hostID: string;
7
+ hostPublicKey: string;
8
+ hostPrivateKey: string;
9
+ hostURL: string;
9
10
  }
10
11
  export interface IClusterNode {
11
12
  clusterID: string;
@@ -13,6 +14,12 @@ export interface IClusterNode {
13
14
  publicKey: string;
14
15
  privateKey: string;
15
16
  ws: HUBConnection[];
17
+ watchlist: string[];
18
+ }
19
+ export interface IWebsocketPacket<T = any> {
20
+ data: T;
21
+ authorized: boolean;
22
+ connection: HUBConnection;
16
23
  }
17
24
  export declare const REQ_CLUSTER_NODE: Req<string, IError | {
18
25
  url: string;
@@ -21,7 +28,7 @@ export declare const REQ_CLUSTER_NODE: Req<string, IError | {
21
28
  export declare class HUBService extends BaseService {
22
29
  options: HUBServiceOptions;
23
30
  nodes: Map<string, IClusterNode>;
24
- handlers: (Signal<any> | Req<any, any>)[];
31
+ handlers: (Signal<IWebsocketPacket> | Req<IWebsocketPacket, any>)[];
25
32
  constructor(options: HUBServiceOptions);
26
33
  init(): Promise<void>;
27
34
  applicationReady(): Promise<void>;