exodus-framework 2.0.955 → 2.0.958

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/lib/app/classes/broadcast.js +79 -0
  2. package/lib/app/classes/cache.js +94 -0
  3. package/lib/app/classes/communication.js +99 -0
  4. package/lib/app/classes/communicationcontext.js +1 -0
  5. package/lib/app/classes/event.js +94 -0
  6. package/lib/app/classes/index.js +105 -0
  7. package/lib/app/classes/managed.js +145 -0
  8. package/lib/app/classes/service.js +232 -0
  9. package/lib/app/classes/servicemodel.js +22 -0
  10. package/lib/app/classes/singleton.js +26 -0
  11. package/lib/app/classes/socket/clienthandler.js +54 -0
  12. package/lib/app/classes/socket/eventhandler.js +51 -0
  13. package/lib/app/classes/socket/index.js +20 -0
  14. package/lib/app/classes/system.js +49 -0
  15. package/lib/app/controller.js +97 -0
  16. package/lib/app/core.js +47 -0
  17. package/lib/app/error.js +66 -0
  18. package/lib/app/exodus.js +97 -0
  19. package/lib/app/index.js +68 -0
  20. package/lib/app/settings.js +161 -0
  21. package/lib/certificates/private_key.pem +27 -0
  22. package/lib/certificates/public_key.pem +9 -0
  23. package/lib/contracts/communication/communication.js +39 -0
  24. package/lib/contracts/communication/index.js +27 -0
  25. package/lib/contracts/communication/operation.js +5 -0
  26. package/lib/contracts/console.js +5 -0
  27. package/lib/contracts/contansts.js +13 -0
  28. package/lib/contracts/core.js +12 -0
  29. package/lib/contracts/entity.js +5 -0
  30. package/lib/contracts/http.js +52 -0
  31. package/lib/contracts/index.js +104 -0
  32. package/lib/contracts/messaging.js +50 -0
  33. package/lib/contracts/security.js +5 -0
  34. package/lib/contracts/service.js +11 -0
  35. package/lib/contracts/session.js +5 -0
  36. package/lib/contracts/settings.js +5 -0
  37. package/lib/contracts/singleton.js +5 -0
  38. package/lib/contracts/socket.js +11 -0
  39. package/lib/contracts/tasks.js +1 -0
  40. package/lib/controllers/api/file.js +24 -0
  41. package/lib/controllers/api/index.js +13 -0
  42. package/lib/controllers/api/log.js +55 -0
  43. package/lib/controllers/api/report.js +55 -0
  44. package/lib/controllers/index.js +16 -0
  45. package/lib/controllers/messaging/application.js +75 -0
  46. package/lib/controllers/messaging/database.js +64 -0
  47. package/lib/controllers/messaging/environment.js +111 -0
  48. package/lib/express.d.js +5 -0
  49. package/lib/index.js +104 -0
  50. package/lib/middlewares/access.js +114 -0
  51. package/lib/middlewares/authentication.js +104 -0
  52. package/lib/middlewares/file.js +41 -0
  53. package/lib/middlewares/index.js +36 -0
  54. package/lib/models/Application.js +65 -0
  55. package/lib/models/DatabaseHost.js +62 -0
  56. package/lib/models/EnvConnection.js +41 -0
  57. package/lib/models/Log.js +67 -0
  58. package/lib/models/Report.js +65 -0
  59. package/lib/models/System.js +54 -0
  60. package/lib/models/index.js +82 -0
  61. package/lib/routes/api/index.js +16 -0
  62. package/lib/routes/api/v1/index.js +38 -0
  63. package/lib/routes/api/v1/logs.js +19 -0
  64. package/lib/routes/api/v1/report.js +19 -0
  65. package/lib/routes/api/v1/sse.js +36 -0
  66. package/lib/routes/index.js +27 -0
  67. package/lib/routes/messaging/index.js +34 -0
  68. package/lib/services/database.d.ts +7 -0
  69. package/lib/services/database.d.ts.map +1 -1
  70. package/lib/services/database.js +158 -0
  71. package/lib/services/ecosystem.js +46 -0
  72. package/lib/services/express.js +162 -0
  73. package/lib/services/file.js +65 -0
  74. package/lib/services/file_new.js +136 -0
  75. package/lib/services/index.js +108 -0
  76. package/lib/services/log.js +26 -0
  77. package/lib/services/rabitmq.js +187 -0
  78. package/lib/services/redis.js +84 -0
  79. package/lib/services/security.js +231 -0
  80. package/lib/services/sequelize.js +313 -0
  81. package/lib/services/socket.js +123 -0
  82. package/lib/services/task/TaskServiceBase.js +17 -0
  83. package/lib/services/task/index.js +40 -0
  84. package/lib/services/task/queue/QueueService.js +48 -0
  85. package/lib/services/task/queue/QueueTask.js +134 -0
  86. package/lib/services/task/queue/SingleQueue.js +68 -0
  87. package/lib/services/task/queue/index.js +27 -0
  88. package/lib/services/task/scheduler/SchedulerService.js +31 -0
  89. package/lib/services/task/scheduler/SchedulerTask.js +211 -0
  90. package/lib/services/task/scheduler/index.js +20 -0
  91. package/lib/services/test.js +27 -0
  92. package/lib/socket.d.js +3 -0
  93. package/lib/tasks/index.js +27 -0
  94. package/lib/tasks/queue/application.js +44 -0
  95. package/lib/tasks/queue/environment.js +92 -0
  96. package/lib/tasks/queue/index.js +20 -0
  97. package/lib/tasks/queue/teste.js +21 -0
  98. package/lib/tasks/schedule/index.js +13 -0
  99. package/lib/tasks/schedule/restart.js +19 -0
  100. package/lib/tasks/schedule/teste.js +61 -0
  101. package/lib/utils/api.js +65 -0
  102. package/lib/utils/database.js +157 -0
  103. package/lib/utils/date.js +28 -0
  104. package/lib/utils/index.js +60 -0
  105. package/lib/utils/logger.js +51 -0
  106. package/lib/utils/session.js +23 -0
  107. package/package.json +1 -1
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ NativeModels: true
8
+ };
9
+ exports.NativeModels = void 0;
10
+ var _Log = require("./Log");
11
+ Object.keys(_Log).forEach(function (key) {
12
+ if (key === "default" || key === "__esModule") return;
13
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
14
+ if (key in exports && exports[key] === _Log[key]) return;
15
+ Object.defineProperty(exports, key, {
16
+ enumerable: true,
17
+ get: function () {
18
+ return _Log[key];
19
+ }
20
+ });
21
+ });
22
+ var _System = require("./System");
23
+ Object.keys(_System).forEach(function (key) {
24
+ if (key === "default" || key === "__esModule") return;
25
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
26
+ if (key in exports && exports[key] === _System[key]) return;
27
+ Object.defineProperty(exports, key, {
28
+ enumerable: true,
29
+ get: function () {
30
+ return _System[key];
31
+ }
32
+ });
33
+ });
34
+ var _Report = require("./Report");
35
+ Object.keys(_Report).forEach(function (key) {
36
+ if (key === "default" || key === "__esModule") return;
37
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
38
+ if (key in exports && exports[key] === _Report[key]) return;
39
+ Object.defineProperty(exports, key, {
40
+ enumerable: true,
41
+ get: function () {
42
+ return _Report[key];
43
+ }
44
+ });
45
+ });
46
+ var _Application = require("./Application");
47
+ Object.keys(_Application).forEach(function (key) {
48
+ if (key === "default" || key === "__esModule") return;
49
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
50
+ if (key in exports && exports[key] === _Application[key]) return;
51
+ Object.defineProperty(exports, key, {
52
+ enumerable: true,
53
+ get: function () {
54
+ return _Application[key];
55
+ }
56
+ });
57
+ });
58
+ var _DatabaseHost = require("./DatabaseHost");
59
+ Object.keys(_DatabaseHost).forEach(function (key) {
60
+ if (key === "default" || key === "__esModule") return;
61
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
62
+ if (key in exports && exports[key] === _DatabaseHost[key]) return;
63
+ Object.defineProperty(exports, key, {
64
+ enumerable: true,
65
+ get: function () {
66
+ return _DatabaseHost[key];
67
+ }
68
+ });
69
+ });
70
+ var _EnvConnection = require("./EnvConnection");
71
+ Object.keys(_EnvConnection).forEach(function (key) {
72
+ if (key === "default" || key === "__esModule") return;
73
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
74
+ if (key in exports && exports[key] === _EnvConnection[key]) return;
75
+ Object.defineProperty(exports, key, {
76
+ enumerable: true,
77
+ get: function () {
78
+ return _EnvConnection[key];
79
+ }
80
+ });
81
+ });
82
+ const NativeModels = exports.NativeModels = [_Log.Log, _System.System, _Report.Report];
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _v = require("./v1");
7
+ Object.keys(_v).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _v[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _v[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _logs = require("./logs");
7
+ Object.keys(_logs).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _logs[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _logs[key];
14
+ }
15
+ });
16
+ });
17
+ var _report = require("./report");
18
+ Object.keys(_report).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _report[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _report[key];
25
+ }
26
+ });
27
+ });
28
+ var _sse = require("./sse");
29
+ Object.keys(_sse).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _sse[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _sse[key];
36
+ }
37
+ });
38
+ });
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.logRouter = void 0;
7
+ var _express = require("express");
8
+ var _log = _interopRequireDefault(require("../../../controllers/api/log"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ //* Router
11
+ const logRouter = exports.logRouter = (0, _express.Router)();
12
+
13
+ //* Middlewares
14
+
15
+ //* Controllers
16
+ const logController = new _log.default();
17
+
18
+ //* Definitions
19
+ logRouter.route('/list').post(logController.list);
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.reportRouter = void 0;
7
+ var _express = require("express");
8
+ var _report = _interopRequireDefault(require("../../../controllers/api/report"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ //* Router
11
+ const reportRouter = exports.reportRouter = (0, _express.Router)();
12
+
13
+ //* Middlewares
14
+
15
+ //* Controllers
16
+ const reportController = new _report.default();
17
+
18
+ //* Definitions
19
+ reportRouter.route('/list').post(reportController.list);
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.sseRouter = void 0;
7
+ var _express = require("express");
8
+ const sseRouter = exports.sseRouter = (0, _express.Router)();
9
+ sseRouter.route('/sse').post((req, res) => {
10
+ // Definir cabeçalhos SSE
11
+ res.setHeader('Content-Type', 'text/event-stream');
12
+ res.setHeader('Cache-Control', 'no-cache');
13
+ res.setHeader('Connection', 'keep-alive');
14
+ res.flushHeaders(); // Enviar headers imediatamente
15
+
16
+ // Função para enviar eventos
17
+ const sendEvent = data => {
18
+ res.write(`data: ${data}\n\n`); // Formatação para SSE
19
+ };
20
+
21
+ // Enviar um evento inicial
22
+ sendEvent('Conexão SSE estabelecida!');
23
+
24
+ // Exemplo: enviar eventos periodicamente
25
+ const intervalId = setInterval(() => {
26
+ const message = `Mensagem do servidor: ${new Date().toLocaleTimeString()}`;
27
+ sendEvent(message);
28
+ }, 5000);
29
+
30
+ // Limpar intervalo e encerrar conexão quando o cliente fechar a conexão
31
+ req.on('close', () => {
32
+ clearInterval(intervalId);
33
+ res.end();
34
+ console.log('Conexão SSE fechada.');
35
+ });
36
+ });
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _messaging = require("./messaging");
7
+ Object.keys(_messaging).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _messaging[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _messaging[key];
14
+ }
15
+ });
16
+ });
17
+ var _api = require("./api");
18
+ Object.keys(_api).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _api[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _api[key];
25
+ }
26
+ });
27
+ });
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _application = _interopRequireDefault(require("../../controllers/messaging/application"));
8
+ var _database = _interopRequireDefault(require("../../controllers/messaging/database"));
9
+ var _environment = _interopRequireDefault(require("../../controllers/messaging/environment"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ //* Controllers
12
+ const databaseController = new _database.default();
13
+ const envController = new _environment.default();
14
+ const appController = new _application.default();
15
+
16
+ //* Definitions
17
+ const NativeMessagingRoutes = {
18
+ /* Connections Library */
19
+ 'exodus.database.created': databaseController.created,
20
+ 'exodus.database.updated': databaseController.update,
21
+ 'exodus.database.deleted': databaseController.delete,
22
+ 'exodus.database.sync': databaseController.sync,
23
+ /* Application Integrations */
24
+ 'exodus.application.created': appController.created,
25
+ 'exodus.application.updated': appController.update,
26
+ 'exodus.application.deleted': appController.delete,
27
+ 'exodus.application.sync': appController.sync,
28
+ /* Environment Sync Database Relations */
29
+ 'exodus.environment.created': envController.created,
30
+ 'exodus.environment.deleted': envController.deleted,
31
+ 'exodus.environment.sync': envController.sync,
32
+ 'exodus.environment.updated.database': envController.updatedDatabase
33
+ };
34
+ var _default = exports.default = NativeMessagingRoutes;
@@ -11,6 +11,13 @@ declare class DatabaseService extends Service {
11
11
  private initConnection;
12
12
  createConnection(host: string, port: number, database: string, username: string, password: string, dialect: Dialect): Promise<Sequelize>;
13
13
  getConnection(tenantId: string): Promise<Sequelize>;
14
+ testConnection(data: {
15
+ host: string;
16
+ port: number;
17
+ username: string;
18
+ password: string;
19
+ dialect: Dialect;
20
+ }): Promise<boolean>;
14
21
  getTenantIds(): Promise<string[]>;
15
22
  getTenantInformation(tenantId: string): Promise<EnvDBHost>;
16
23
  private loadEntity;
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/services/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAsB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAgB,SAAS,EAAE,MAAM,WAAW,CAAC;AAIpD,cAAM,eAAgB,SAAQ,OAAO;IACnC,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,WAAW,CAAyB;IAE/B,aAAa;IAWb,OAAO;IAgBP,WAAW;YAMV,cAAc;IA0Cf,gBAAgB,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO;IAwBL,aAAa,CAAC,QAAQ,EAAE,MAAM;IAQ9B,YAAY;IAKZ,oBAAoB,CAAC,QAAQ,EAAE,MAAM;YAMpC,UAAU;IASX,SAAS,CAAC,CAAC,SAAS,YAAY,CAAC,KAAK,CAAC,EAClD,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAU1B,OAAO,CAAC,qBAAqB;CAG9B;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/services/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAsB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAgB,SAAS,EAAE,MAAM,WAAW,CAAC;AAIpD,cAAM,eAAgB,SAAQ,OAAO;IACnC,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,WAAW,CAAyB;IAE/B,aAAa;IAWb,OAAO;IAgBP,WAAW;YAMV,cAAc;IA0Cf,gBAAgB,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO;IAwBL,aAAa,CAAC,QAAQ,EAAE,MAAM;IAO9B,cAAc,CAAC,IAAI,EAAE;QAChC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB;IA4BY,YAAY;IAKZ,oBAAoB,CAAC,QAAQ,EAAE,MAAM;YAMpC,UAAU;IASX,SAAS,CAAC,CAAC,SAAS,YAAY,CAAC,KAAK,CAAC,EAClD,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAU1B,OAAO,CAAC,qBAAqB;CAG9B;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _sequelize = require("sequelize");
8
+ var _app = require("../app");
9
+ var _models = require("../models");
10
+ var _utils = require("../utils");
11
+ var _security = _interopRequireDefault(require("./security"));
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ class DatabaseService extends _app.Service {
14
+ entities;
15
+ connections;
16
+ async onServiceInit() {
17
+ this.entities = new Map();
18
+ this.connections = new Map();
19
+
20
+ // para busca rápidas
21
+ this.connections.set(_app.Core.settings.getDatabase().main.database, _utils.mainDb);
22
+ this.startAttemptDelay = 5 * 1000;
23
+ this.maxStartAttempts = 3;
24
+ }
25
+ async onStart() {
26
+ this.log(`⌛️ Connecting Sequelize to database: ${this.currentStartAttempts}/${this.maxStartAttempts}`);
27
+ try {
28
+ await _utils.mainDb.authenticate();
29
+ await _utils.mainDb.sync({
30
+ alter: true
31
+ });
32
+ this.log('✅ Connected service database sucessfully', 'success');
33
+ return true;
34
+ } catch (error) {
35
+ (0, _utils.logger)().error(error, `Not connected Sequelize to database`);
36
+ return false;
37
+ }
38
+ }
39
+ async onStartFail() {
40
+ await super.onStartFail();
41
+ this.log(`Not possible to connect database`, 'danger');
42
+ }
43
+
44
+ //* Connection
45
+ async initConnection(tenantId) {
46
+ const tenantInfo = await this.getTenantInformation(tenantId);
47
+ if (!tenantInfo) {
48
+ throw new Error(`Não é possível inicia a conexão para o tenant ${tenantId}, a relação EnvDB não foi localizada`);
49
+ }
50
+ const dbHost = await _models.DatabaseHost.findByPk(tenantInfo.hostUuid);
51
+ if (!tenantInfo) {
52
+ throw new Error(`Não é possível inicia a conexão para o tenant ${tenantId}, não foi possível localizar a informação de host`);
53
+ }
54
+ const splitedInfo = dbHost.host.split(':');
55
+ const address = splitedInfo[0];
56
+ const port = Number(splitedInfo[1]);
57
+ const database = this.normalizeDatabaseName(tenantInfo.envToken);
58
+ const key = await _security.default.getService().loadKeyByStr(dbHost.credential);
59
+ const data = await _security.default.getService().verifySignature(dbHost.password, key);
60
+ if (!data) {
61
+ throw new Error(`Não foi possível descriptografar as credenciais de conexão para hostUuid: ${tenantInfo.hostUuid}`);
62
+ }
63
+ const password = data.payload;
64
+ const connection = await this.createConnection(address, port, database, dbHost.username, password, dbHost.dialect);
65
+ this.connections.set(tenantId, connection);
66
+ }
67
+ async createConnection(host, port, database, username, password, dialect) {
68
+ const sequelize = new _sequelize.Sequelize({
69
+ host,
70
+ port,
71
+ dialect,
72
+ database,
73
+ username,
74
+ password,
75
+ define: {
76
+ timestamps: true
77
+ },
78
+ timezone: '-03:00',
79
+ logging: _app.Core.settings.getDatabase().service.log,
80
+ pool: _app.Core.settings.getDatabase().service.pool
81
+ });
82
+ try {
83
+ await sequelize.authenticate();
84
+ return sequelize;
85
+ } catch (error) {
86
+ new _app.ErrorHandler('Não foi possível realizar uma conexão', error);
87
+ return null;
88
+ }
89
+ }
90
+ async getConnection(tenantId) {
91
+ if (!this.connections.has(tenantId)) {
92
+ await this.initConnection(tenantId);
93
+ }
94
+ return this.connections.get(tenantId);
95
+ }
96
+ async testConnection(data) {
97
+ const sequelize = new _sequelize.Sequelize({
98
+ host: data.host,
99
+ port: data.port,
100
+ username: data.username,
101
+ password: data.password,
102
+ dialect: data.dialect,
103
+ timezone: '-03:00',
104
+ pool: _app.Core.settings.getDatabase().service.pool,
105
+ logging: _app.Core.settings.getDatabase().service.log
106
+ });
107
+ return new Promise(resolve => {
108
+ sequelize.authenticate().then(async () => {
109
+ resolve(true);
110
+ }).catch(reason => {
111
+ new _app.ErrorHandler('teste de conexão falhou', reason);
112
+ resolve(false);
113
+ }).finally(() => {
114
+ sequelize.close();
115
+ });
116
+ });
117
+ }
118
+
119
+ //* Environment
120
+ async getTenantIds() {
121
+ const tenants = await _models.EnvDBHost.findAll({
122
+ attributes: ['envUuid']
123
+ });
124
+ return tenants.map(t => t.envUuid);
125
+ }
126
+ async getTenantInformation(tenantId) {
127
+ const relation = await _models.EnvDBHost.findOne({
128
+ where: {
129
+ envUuid: tenantId
130
+ }
131
+ });
132
+ return relation;
133
+ }
134
+
135
+ //* Entity
136
+ async loadEntity(entity, tenantId) {
137
+ const k = `${tenantId}#${entity.name}`;
138
+ const connection = await this.getConnection(tenantId);
139
+ const loadedEntity = entity.initialize(connection);
140
+ await loadedEntity.sync({
141
+ alter: true
142
+ });
143
+ this.entities.set(k, loadedEntity);
144
+ }
145
+ async getEntity(model, tenantId) {
146
+ const k = `${tenantId}#${model.name}`;
147
+ if (!this.entities.has(k)) {
148
+ await this.loadEntity(model, tenantId);
149
+ }
150
+ return this.entities.get(k);
151
+ }
152
+
153
+ //* Utils
154
+ normalizeDatabaseName(envToken) {
155
+ return `${_app.Core.settings.getDatabase().main.database}_${envToken}`;
156
+ }
157
+ }
158
+ var _default = exports.default = DatabaseService;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _app = require("../app");
8
+ var _System = require("../models/System");
9
+ var _sequelize = _interopRequireDefault(require("./sequelize"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ class EcosystemService extends _app.Service {
12
+ async getSystemVariable(tenantId, key) {
13
+ const Entity = await _sequelize.default.singleton().getModel(_System.System, tenantId);
14
+ return Entity.findOne({
15
+ where: {
16
+ key
17
+ }
18
+ });
19
+ }
20
+ async setSystemVariable(tenantId, key, value) {
21
+ const Entity = await _sequelize.default.singleton().getModel(_System.System, tenantId);
22
+ const variable = await Entity.findOne({
23
+ where: {
24
+ key
25
+ }
26
+ });
27
+ if (!variable) throw new Error('System variable not found: ' + key);
28
+ variable.value = value;
29
+ variable.changed('value', true);
30
+ await variable.save();
31
+ }
32
+ async createSystemVariable(tenantId, key, value) {
33
+ const Entity = await _sequelize.default.singleton().getModel(_System.System, tenantId);
34
+ const variable = await Entity.findOne({
35
+ where: {
36
+ key
37
+ }
38
+ });
39
+ if (variable) throw new Error('System variable has exists: ' + key);
40
+ return await Entity.create({
41
+ key,
42
+ value
43
+ });
44
+ }
45
+ }
46
+ var _default = exports.default = EcosystemService;
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _cors = _interopRequireDefault(require("cors"));
8
+ var _express = _interopRequireDefault(require("express"));
9
+ var _expressRequestsLogger = _interopRequireDefault(require("express-requests-logger"));
10
+ var http = _interopRequireWildcard(require("http"));
11
+ var _qs = _interopRequireDefault(require("qs"));
12
+ var _core = _interopRequireDefault(require("../app/core"));
13
+ var _error = require("../app/error");
14
+ var _service = _interopRequireDefault(require("../app/classes/service"));
15
+ var _http2 = require("../contracts/http");
16
+ var _logger = _interopRequireDefault(require("../utils/logger"));
17
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
+ // import 'express-async-errors';
21
+
22
+ class ExpressService extends _service.default {
23
+ server;
24
+ mainRouter;
25
+
26
+ //!Deve ser iniciado no cluster, pois no master causa erro de port bind
27
+ async onServiceClusterInit() {
28
+ await super.onServiceClusterInit();
29
+ if (!this.mainRouter) throw new Error('Need router'); //!sem router
30
+ }
31
+ async onStartCluster() {
32
+ await super.onStartCluster();
33
+ const expss = (0, _express.default)();
34
+ this.server = http.createServer(expss);
35
+ expss.use('/public', _express.default.static(_core.default.settings.getHttp().publicPath));
36
+ expss.use((0, _expressRequestsLogger.default)({
37
+ logger: (0, _logger.default)()
38
+ }));
39
+ expss.set('query parser', str => _qs.default.parse(str));
40
+ expss.use(this.responseTypeMiddleware.bind(this));
41
+ expss.use(_express.default.json({
42
+ limit: '10mb'
43
+ }));
44
+ expss.use(_express.default.urlencoded({
45
+ extended: true,
46
+ limit: '10mb'
47
+ }));
48
+ expss.use((0, _cors.default)({
49
+ origin: '*'
50
+ }));
51
+ expss.use(this.mainRouter);
52
+ expss.use(this.handleAuthorizationFailure.bind(this));
53
+ expss.use(this.handleNotFoud.bind(this));
54
+ expss.use(this.handleRequestProcessFailure.bind(this));
55
+ return true;
56
+ }
57
+ async onExodusClusterStarted() {
58
+ await super.onExodusClusterStarted();
59
+ this.server.listen(_core.default.settings.getAppication().port, () => {
60
+ (0, _logger.default)().info(`servidor iniciado na porta: ${_core.default.settings.getAppication().port}`);
61
+ this.log(`🌍 Http Server Listering On: ${_core.default.settings.getAppication().port}`, 'success');
62
+ });
63
+ }
64
+ getHttpServer() {
65
+ return this.server;
66
+ }
67
+ sendResponse(objResponse, res, next) {
68
+ objResponse.timestamp = Date.now();
69
+ if (!objResponse.code) objResponse.code = _http2.EHttpResponseCode.successfullyProcessedInformation;
70
+ res.status(objResponse.code);
71
+ if (objResponse.location) {
72
+ res.location(objResponse.location);
73
+ delete objResponse.location;
74
+ }
75
+ let FormulatedResponse;
76
+ switch (_core.default.settings.getHttp().formulation) {
77
+ case 'direct':
78
+ if (objResponse['data']) {
79
+ FormulatedResponse = objResponse.data;
80
+ } else {
81
+ FormulatedResponse = objResponse;
82
+ }
83
+ break;
84
+ case 'standart':
85
+ FormulatedResponse = objResponse;
86
+ break;
87
+ default:
88
+ FormulatedResponse = objResponse;
89
+ break;
90
+ }
91
+ if (next) {
92
+ res.write(JSON.stringify(FormulatedResponse));
93
+ next();
94
+ } else {
95
+ res.send(JSON.stringify(FormulatedResponse));
96
+ }
97
+ }
98
+ responseTypeMiddleware(req, res, next) {
99
+ res.contentType('application/json');
100
+ next();
101
+ }
102
+
103
+ //* Handler errors
104
+ handleNotFoud(req, res) {
105
+ this.sendResponse({
106
+ message: 'Endereço não encontrado',
107
+ type: 'warning',
108
+ status: false,
109
+ code: _http2.EHttpResponseCode.informationNotFound
110
+ }, res);
111
+ }
112
+ handleAuthorizationFailure(err, req, res, next) {
113
+ if (err.name === 'UnauthorizedError') {
114
+ throw new _error.HttpError({
115
+ message: 'Falha na autorização',
116
+ statusCode: _http2.EHttpResponseCode.informationUnauthorized
117
+ });
118
+ } else {
119
+ next(err);
120
+ }
121
+ }
122
+ handleRequestProcessFailure = async (err, req, res, _) => {
123
+ if (err instanceof _error.HttpError) {
124
+ return this.sendResponse({
125
+ message: err.message,
126
+ type: err.level,
127
+ status: false,
128
+ code: err.statusCode,
129
+ data: err.data
130
+ }, res);
131
+ }
132
+ this.sendResponse({
133
+ message: 'Houve um erro ao acessar este recurso',
134
+ type: 'error',
135
+ status: false,
136
+ code: 500
137
+ }, res);
138
+ new _error.ErrorHandler('Erro não tratado em uma rota.', err);
139
+ };
140
+ async checkRequest(params) {
141
+ let pass = true;
142
+ const need = [];
143
+ for (const [key, param] of Object.entries(params)) {
144
+ if (!param || param === null || param.length < 1 || typeof param === 'string' && param === '' || typeof param === 'object' && Object.values(param).length < 1) {
145
+ pass = false;
146
+ need.push(key);
147
+ }
148
+ }
149
+ if (!pass) throw new _error.HttpError({
150
+ message: 'Requisição incompleta',
151
+ statusCode: _http2.EHttpResponseCode.incompleteRequest,
152
+ level: 'error',
153
+ data: {
154
+ need
155
+ }
156
+ });
157
+ }
158
+ static registerRouter(router) {
159
+ this.getService().mainRouter = router;
160
+ }
161
+ }
162
+ var _default = exports.default = ExpressService;