exodus-framework 2.0.9151 → 2.0.9791

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 (64) hide show
  1. package/lib/app/classes/index.js +1 -2
  2. package/lib/app/core.js +1 -2
  3. package/lib/app/error.js +2 -2
  4. package/lib/app/settings.d.ts.map +1 -1
  5. package/lib/app/settings.js +10 -11
  6. package/lib/contracts/communication/communication.d.ts +21 -8
  7. package/lib/contracts/communication/communication.d.ts.map +1 -1
  8. package/lib/contracts/communication/communication.js +9 -1
  9. package/lib/contracts/communication/operation.d.ts +11 -0
  10. package/lib/contracts/communication/operation.d.ts.map +1 -1
  11. package/lib/contracts/contansts.d.ts +9 -0
  12. package/lib/contracts/contansts.d.ts.map +1 -1
  13. package/lib/contracts/contansts.js +11 -1
  14. package/lib/contracts/http.d.ts +1 -0
  15. package/lib/contracts/http.d.ts.map +1 -1
  16. package/lib/contracts/messaging.d.ts +96 -8
  17. package/lib/contracts/messaging.d.ts.map +1 -1
  18. package/lib/contracts/messaging.js +12 -0
  19. package/lib/contracts/settings.d.ts +1 -2
  20. package/lib/contracts/settings.d.ts.map +1 -1
  21. package/lib/controllers/api/log.js +1 -1
  22. package/lib/controllers/api/report.d.ts.map +1 -1
  23. package/lib/controllers/api/report.js +2 -2
  24. package/lib/controllers/messaging/environment.js +4 -4
  25. package/lib/middlewares/access.d.ts.map +1 -1
  26. package/lib/middlewares/access.js +12 -5
  27. package/lib/middlewares/authentication.d.ts.map +1 -1
  28. package/lib/middlewares/authentication.js +9 -3
  29. package/lib/middlewares/file.js +1 -2
  30. package/lib/models/Application.js +1 -1
  31. package/lib/models/DatabaseHost.js +1 -1
  32. package/lib/models/EnvConnection.js +1 -1
  33. package/lib/models/Log.js +1 -1
  34. package/lib/models/System.js +1 -1
  35. package/lib/services/database.d.ts +32 -0
  36. package/lib/services/database.d.ts.map +1 -0
  37. package/lib/services/database.js +231 -0
  38. package/lib/services/ecosystem.js +4 -4
  39. package/lib/services/express.d.ts +1 -0
  40. package/lib/services/express.d.ts.map +1 -1
  41. package/lib/services/express.js +16 -5
  42. package/lib/services/file.js +1 -2
  43. package/lib/services/index.d.ts +1 -0
  44. package/lib/services/index.d.ts.map +1 -1
  45. package/lib/services/index.js +9 -1
  46. package/lib/services/log.js +2 -2
  47. package/lib/services/rabitmq.d.ts +1 -1
  48. package/lib/services/rabitmq.d.ts.map +1 -1
  49. package/lib/services/rabitmq.js +15 -7
  50. package/lib/services/security.js +1 -2
  51. package/lib/services/sequelize.d.ts +0 -1
  52. package/lib/services/sequelize.d.ts.map +1 -1
  53. package/lib/services/sequelize.js +12 -22
  54. package/lib/services/socket.js +1 -1
  55. package/lib/tasks/queue/environment.d.ts.map +1 -1
  56. package/lib/tasks/queue/environment.js +4 -5
  57. package/lib/tasks/schedule/restart.js +1 -1
  58. package/lib/utils/database.d.ts +1 -2
  59. package/lib/utils/database.d.ts.map +1 -1
  60. package/lib/utils/database.js +18 -16
  61. package/lib/utils/logger.d.ts +2 -0
  62. package/lib/utils/logger.d.ts.map +1 -1
  63. package/lib/utils/logger.js +57 -4
  64. package/package.json +7 -3
@@ -1 +1 @@
1
- {"version":3,"file":"rabitmq.d.ts","sourceRoot":"","sources":["../../src/services/rabitmq.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGtD,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,cAAc,CAAC;AAUtB,cAAM,eAAgB,SAAQ,OAAO;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,oBAAoB,CAA0D;IAEtF,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAS;IAEf,oBAAoB;IAcpB,cAAc;IAMd,sBAAsB;IAMtB,WAAW;IAKX,OAAO;IA+BP,eAAe;IAM5B,OAAO,CAAC,iBAAiB;IAYnB,WAAW,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAoBzF,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc;IA4BjD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,wBAAwB;IAI/C,aAAa,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACvD,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAY9B,cAAc,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC;IAW7D,YAAY,CACjB,CAAC,SAAS,MAAM,oBAAoB,EACpC,CAAC,SAAS,MAAM,oBAAoB,EACpC,IAAI,EAAE;QACN,IAAI,EAAE;YAAE,KAAK,EAAE,CAAC,CAAC;YAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAA;SAAE,CAAC;QAClD,MAAM,EAAE;YACN,KAAK,EAAE,CAAC,CAAC;YACT,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACpC,SAAS,EAAE,MAAM,IAAI,CAAC;YACtB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH;CAkBF;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"rabitmq.d.ts","sourceRoot":"","sources":["../../src/services/rabitmq.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGtD,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,cAAc,CAAC;AAUtB,cAAM,eAAgB,SAAQ,OAAO;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,oBAAoB,CAA0D;IAEtF,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAS;IAEf,oBAAoB;IAcpB,cAAc;IAMd,sBAAsB;IAMtB,WAAW;IAKX,OAAO;IA+BP,eAAe;IAM5B,OAAO,CAAC,iBAAiB;IAYnB,WAAW,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACpD,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC7B,aAAa,CAAC,EAAE,MAAM;IAqBlB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc;IA+BjD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,wBAAwB;IAI/C,aAAa,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACvD,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAY9B,cAAc,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC;IAW7D,YAAY,CACjB,CAAC,SAAS,MAAM,oBAAoB,EACpC,CAAC,SAAS,MAAM,oBAAoB,EACpC,IAAI,EAAE;QACN,IAAI,EAAE;YAAE,KAAK,EAAE,CAAC,CAAC;YAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAA;SAAE,CAAC;QAClD,MAAM,EAAE;YACN,KAAK,EAAE,CAAC,CAAC;YACT,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACpC,SAAS,EAAE,MAAM,IAAI,CAAC;YACtB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH;CAwBF;AAED,eAAe,eAAe,CAAC"}
@@ -102,7 +102,7 @@ class RabbitMQService extends _service.default {
102
102
  }
103
103
 
104
104
  //# Common
105
- async sendToQueue(topic, data) {
105
+ async sendToQueue(topic, data, transactionId) {
106
106
  try {
107
107
  if (!this.isConnected) {
108
108
  this.log('RabbitMQ is not connected. Message not sent.');
@@ -111,7 +111,8 @@ class RabbitMQService extends _service.default {
111
111
  const messageId = (0, _crypto.randomUUID)();
112
112
  const packeg = Buffer.from(JSON.stringify({
113
113
  data,
114
- serviceId: _app.Core.settings.getAppication().appId
114
+ serviceId: _app.Core.settings.getAppication().appId,
115
+ transactionId
115
116
  }));
116
117
  this.channel.publish(this.exchangeName, topic, packeg, {
117
118
  messageId,
@@ -132,15 +133,18 @@ class RabbitMQService extends _service.default {
132
133
  const topic = msg.fields.routingKey;
133
134
  const content = JSON.parse(msg.content.toString());
134
135
  const callBack = this.mainRouter[topic];
135
- if (callBack) await callBack(content.data, () => {}, content.serviceId, msg.properties.messageId);
136
+ if (callBack) await callBack(content.data, () => {}, content.serviceId, content.transactionId);
136
137
  this.channel.ack(msg); //# the next function is temporary and not confirm ack
137
138
 
138
139
  if (this.eventCustomListeners.has(topic)) {
139
140
  const cb = this.eventCustomListeners.get(topic);
140
- cb(content.data, () => {}, content.serviceId, msg.properties.messageId);
141
+ cb(content.data, () => {}, content.serviceId, content.transactionId);
141
142
  }
142
143
  } catch (error) {
143
- this.channel.nack(msg, false, true); // Reenfileira para nova tentativa
144
+ setTimeout(() => {
145
+ this.channel.nack(msg, false, true); // Reenfileira para nova tentativa
146
+ this.log(`Message requeue: ${msg.fields.routingKey}`, 'info');
147
+ }, 3000);
144
148
  new _app.ErrorHandler('Error on parsing message from queue', error);
145
149
  }
146
150
  }
@@ -163,17 +167,21 @@ class RabbitMQService extends _service.default {
163
167
  const timeout = data.listen.timeout || 5000;
164
168
  const send = data.send;
165
169
  const listen = data.listen;
170
+ const sendtransactionId = (0, _crypto.randomUUID)();
166
171
  this.onTransaction(listen.topic, (data, ack, serviceId, transactionId) => {
172
+ ack(); // !auto ack because rabbit app crash
173
+ if (sendtransactionId != transactionId) {
174
+ return;
175
+ }
167
176
  this.offTransaction(listen.topic);
168
177
  clearTimeout(fnTimeout);
169
- ack(); // !auto ack because rabbit app crash
170
178
  listen.callback(data, ack, serviceId, transactionId);
171
179
  });
172
180
  const fnTimeout = setTimeout(() => {
173
181
  this.offTransaction(listen.topic);
174
182
  listen.onTimeout();
175
183
  }, timeout);
176
- this.sendToQueue(send.topic, send.data);
184
+ this.sendToQueue(send.topic, send.data, sendtransactionId);
177
185
  }
178
186
  }
179
187
  var _default = exports.default = RabbitMQService;
@@ -10,8 +10,7 @@ var _nodeJose = require("node-jose");
10
10
  var _path = _interopRequireDefault(require("path"));
11
11
  var _app = require("../app");
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
- 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); }
14
- 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; }
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
14
  class SecurityService extends _app.Service {
16
15
  privateKey;
17
16
  publicKey;
@@ -5,7 +5,6 @@ import { EnvDBHost } from '../models';
5
5
  import { StaticServiceModel } from '../contracts';
6
6
  declare class SequelizeService extends Service {
7
7
  serviceDB: Sequelize;
8
- masterDB: Sequelize;
9
8
  models: StaticServiceModel<any>[];
10
9
  connections: Map<string, Sequelize>;
11
10
  initializedModels: Map<string, ModelStatic<any>>;
@@ -1 +1 @@
1
- {"version":3,"file":"sequelize.d.ts","sourceRoot":"","sources":["../../src/services/sequelize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAsB,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAgB,MAAM,WAAW,CAAC;AAKpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAUlD,cAAM,gBAAiB,SAAQ,OAAO;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,kBAAkB,CAAS;IAGtB,aAAa;IAkBb,OAAO;IAaP,WAAW;IAMX,gBAAgB;IA+BhB,KAAK,CAAC,QAAQ,EAAE,MAAM;IAe7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IA8BhC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAsBpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAiBvC,MAAM,CAAC,QAAQ,EAAE,MAAM;IA6BvB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS;IAkBpE,SAAS,CAAC,QAAQ,EAAE,MAAM;IAK1B,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,SAAI;IAe/B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IA2CpD,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,WAAW,CAAC,QAAQ,EAAE,MAAM;IAe5B,QAAQ,CAAC,CAAC,SAAS,YAAY,CAAC,KAAK,CAAC,EACjD,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAWZ,cAAc,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE;IAGjD,UAAU;CAOxB;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"sequelize.d.ts","sourceRoot":"","sources":["../../src/services/sequelize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAsB,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAgB,MAAM,WAAW,CAAC;AAIpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAalD,cAAM,gBAAiB,SAAQ,OAAO;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,kBAAkB,CAAS;IAGtB,aAAa;IAiBb,OAAO;IAaP,WAAW;IAMX,gBAAgB;IAyBhB,KAAK,CAAC,QAAQ,EAAE,MAAM;IAa7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IA8BhC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAsBpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAiBvC,MAAM,CAAC,QAAQ,EAAE,MAAM;IA2BvB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS;IAkBpE,SAAS,CAAC,QAAQ,EAAE,MAAM;IAK1B,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,SAAI;IAe/B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IA2CpD,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,WAAW,CAAC,QAAQ,EAAE,MAAM;IAe5B,QAAQ,CAAC,CAAC,SAAS,YAAY,CAAC,KAAK,CAAC,EACjD,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;WAWZ,cAAc,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE;IAGjD,UAAU;CAOxB;AAED,eAAe,gBAAgB,CAAC"}
@@ -13,16 +13,18 @@ var _database = require("../utils/database");
13
13
  var _logger = _interopRequireDefault(require("../utils/logger"));
14
14
  var _security = _interopRequireDefault(require("./security"));
15
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
17
+
16
18
  /**
17
19
  * Serviço de gerênciamento do banco de dados
18
20
  *
19
21
  * @class SequelizeService
20
22
  * @extends {Service}
23
+ * @deprecated Use {@link DatabaseService}
21
24
  * @implements {IService}
22
25
  */
23
26
  class SequelizeService extends _service.default {
24
27
  serviceDB;
25
- masterDB;
26
28
  models;
27
29
  connections;
28
30
  initializedModels;
@@ -36,8 +38,7 @@ class SequelizeService extends _service.default {
36
38
  async onServiceInit() {
37
39
  await super.onServiceInit();
38
40
  if (!this.models) throw new Error('Models are requireds! Call registerModels(modelsArray)');
39
- this.serviceDB = _database.serviceDB;
40
- this.masterDB = _database.masterDB;
41
+ this.serviceDB = _database.mainDb;
41
42
  this.connections = new Map();
42
43
  this.initializedModels = new Map();
43
44
  this.initializingdModels = new Map();
@@ -65,13 +66,6 @@ class SequelizeService extends _service.default {
65
66
  if (this.isReconnecting) return false;
66
67
  this.log(`⌛️ Connecting Sequelize to database: ${this.currentStartAttempts}/${this.maxStartAttempts}`);
67
68
  try {
68
- if (!this.isMasterConnected) {
69
- await this.masterDB.sync({
70
- force: false
71
- });
72
- this.isMasterConnected = true;
73
- this.log('✅ Connected master database sucessfully', 'success');
74
- }
75
69
  if (!this.isServiceConnected) {
76
70
  await this.serviceDB.sync({
77
71
  force: false
@@ -91,10 +85,8 @@ class SequelizeService extends _service.default {
91
85
  // #Database
92
86
  async getDB(tenantId) {
93
87
  /* master or service */
94
- if (tenantId == _app.Core.settings.getDatabase().service.database) {
95
- return _database.serviceDB;
96
- } else if (tenantId == _app.Core.settings.getDatabase().master.database) {
97
- return _database.masterDB;
88
+ if (tenantId == _app.Core.settings.getDatabase().main.database) {
89
+ return _database.mainDb;
98
90
  }
99
91
  const relation = await this.getRelation(tenantId);
100
92
  if (!relation) return false;
@@ -107,7 +99,7 @@ class SequelizeService extends _service.default {
107
99
  this.log('Database host information not found: ' + hostUuid);
108
100
  return false;
109
101
  }
110
- const dbQueryName = `${_app.Core.settings.getDatabase().service.database}_${name}`;
102
+ const dbQueryName = `${_app.Core.settings.getDatabase().main.database}_${name}`;
111
103
  const connection = await this.createConnection(hostUuid);
112
104
  if (connection) {
113
105
  try {
@@ -135,7 +127,7 @@ class SequelizeService extends _service.default {
135
127
  this.log('Database host information not found: ' + hostUuid);
136
128
  return false;
137
129
  }
138
- const dbQueryName = `${_app.Core.settings.getDatabase().service.database}_${name}`;
130
+ const dbQueryName = `${_app.Core.settings.getDatabase().main.database}_${name}`;
139
131
  const connection = await this.createConnection(hostUuid);
140
132
  if (connection) {
141
133
  try {
@@ -150,7 +142,7 @@ class SequelizeService extends _service.default {
150
142
  return false;
151
143
  }
152
144
  async deleteDB(hostUuid, name) {
153
- const dbQueryName = `${_app.Core.settings.getDatabase().service.database}_${name}`;
145
+ const dbQueryName = `${_app.Core.settings.getDatabase().main.database}_${name}`;
154
146
  const connection = await this.createConnection(hostUuid);
155
147
  if (connection) {
156
148
  try {
@@ -167,10 +159,8 @@ class SequelizeService extends _service.default {
167
159
  }
168
160
  async initDB(tenantId) {
169
161
  let connection = false;
170
- if (tenantId == _app.Core.settings.getDatabase().service.database) {
171
- connection = _database.serviceDB;
172
- } else if (tenantId == _app.Core.settings.getDatabase().master.database) {
173
- connection = _database.masterDB;
162
+ if (tenantId == _app.Core.settings.getDatabase().main.database) {
163
+ connection = _database.mainDb;
174
164
  } else {
175
165
  const relation = await this.getRelation(tenantId);
176
166
  if (!relation) return false;
@@ -202,7 +192,7 @@ class SequelizeService extends _service.default {
202
192
  }));
203
193
  }
204
194
  getDBName(envToken) {
205
- return `${_app.Core.settings.getDatabase().service.database}_${envToken}`;
195
+ return `${_app.Core.settings.getDatabase().main.database}_${envToken}`;
206
196
  }
207
197
 
208
198
  //#Connection
@@ -53,7 +53,7 @@ class SocketIOService extends _service.default {
53
53
  return handler;
54
54
  }));
55
55
  clientsH.forEach(handler => handler.onConnect());
56
- const onAny = (event, ...args) => clientsH.forEach(handler => handler.onEvent(event, ...args));
56
+ const onAny = (event, ...args) => clientsH.forEach(handler => handler.onEvent(event, args));
57
57
  socket.onAny(onAny);
58
58
  eventsH.forEach(handlers => {
59
59
  handlers.forEach(handler => handler.onConnect(request));
@@ -1 +1 @@
1
- {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/tasks/queue/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAGxE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAItD,KAAK,CAAC,GAAG;IACP,MAAM,CAAC,EAAE,oBAAoB,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;IAClE,MAAM,CAAC,EAAE,oBAAoB,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC;IAC1E,IAAI,CAAC,EAAE,oBAAoB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;CAC9D,CAAC;AAEF,cAAM,oBAAqB,SAAQ,SAAS,CAAC,CAAC,CAAC;IAC7C,OAAO,IAAI,MAAM;IAIX,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAcrD,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,eAAe,CAAC,kBAAkB,CAAC;IAiBvE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,eAAe,CAAC,0BAA0B,CAAC;IAgB/E,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,eAAe,CAAC,eAAe,CAAC;CA4BzE;AAED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/tasks/queue/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAIxE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtD,KAAK,CAAC,GAAG;IACP,MAAM,CAAC,EAAE,oBAAoB,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;IAClE,MAAM,CAAC,EAAE,oBAAoB,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC;IAC1E,IAAI,CAAC,EAAE,oBAAoB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;CAC9D,CAAC;AAEF,cAAM,oBAAqB,SAAQ,SAAS,CAAC,CAAC,CAAC;IAC7C,OAAO,IAAI,MAAM;IAIX,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAcrD,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,eAAe,CAAC,kBAAkB,CAAC;IAiBvE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,eAAe,CAAC,0BAA0B,CAAC;IAgB/E,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,eAAe,CAAC,eAAe,CAAC;CA4BzE;AAED,eAAe,oBAAoB,CAAC"}
@@ -7,10 +7,9 @@ exports.default = void 0;
7
7
  var _app = require("../../app");
8
8
  var _core = require("../../contracts/core");
9
9
  var _models = require("../../models");
10
+ var _services = require("../../services");
10
11
  var _queue = require("../../services/task/queue");
11
12
  var _utils = require("../../utils");
12
- var _sequelize = _interopRequireDefault(require("../../services/sequelize"));
13
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
13
  class EnvironmentSyncQueue extends _queue.QueueTask {
15
14
  getName() {
16
15
  return 'Environment Sync Queue';
@@ -34,7 +33,7 @@ class EnvironmentSyncQueue extends _queue.QueueTask {
34
33
  try {
35
34
  const db = data.database;
36
35
  const token = data.envToken;
37
- await _sequelize.default.singleton().createDB(db, token);
36
+ await _services.DatabaseService.getService().createDB(db, token);
38
37
  await _models.EnvDBHost.create({
39
38
  envUuid: data.uuid,
40
39
  hostUuid: data.database,
@@ -78,10 +77,10 @@ class EnvironmentSyncQueue extends _queue.QueueTask {
78
77
  envToken: env.envToken
79
78
  });
80
79
  }
81
- if (!(await _sequelize.default.singleton().hasDB(env.database, env.envToken))) {
80
+ if (!(await _services.DatabaseService.getService().hasDB(env.database, env.envToken))) {
82
81
  (0, _utils.logger)().info(env, `Sincronizando novo banco de dados ${env.uuid}`);
83
82
  this.log(`Sincronizando novo banco de dados ${env.uuid}`, 'info');
84
- await _sequelize.default.singleton().createDB(env.database, env.envToken);
83
+ await _services.DatabaseService.getService().createDB(env.database, env.envToken);
85
84
  }
86
85
  } catch (error) {
87
86
  new _app.ErrorHandler('Houve um erro ao tentar sincronizar um novo ambiente/relação ou banco de dados', error);
@@ -9,7 +9,7 @@ class ServiceRestartTaskSchedule extends _services.ScheduleTask {
9
9
  async onTaskInit() {
10
10
  await super.onTaskInit();
11
11
  this.name = 'Tarefa de Agendamento do Restart';
12
- this.cron = '0 0 0 * * * ';
12
+ this.cron = '0 1 0 * * *';
13
13
  }
14
14
  async onMasterExecute() {
15
15
  this.log('Executando reinício agendado...', 'danger');
@@ -1,6 +1,5 @@
1
1
  import { Sequelize, WhereOptions } from 'sequelize';
2
2
  import { IRequestFilterCondition, LogicalCondition } from '../contracts';
3
- export declare const serviceDB: Sequelize;
4
- export declare const masterDB: Sequelize;
3
+ export declare const mainDb: Sequelize;
5
4
  export declare function processFilters<D>(filters?: Partial<Record<keyof D, IRequestFilterCondition<D>> | LogicalCondition<D>>): WhereOptions<D>;
6
5
  //# sourceMappingURL=database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/utils/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEzE,eAAO,MAAM,SAAS,WAWpB,CAAC;AAEH,eAAO,MAAM,QAAQ,WAWnB,CAAC;AAgFH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,GACnF,YAAY,CAAC,CAAC,CAAC,CAwCjB"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/utils/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEzE,eAAO,MAAM,MAAM,WASjB,CAAC;AA8FH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,GACnF,YAAY,CAAC,CAAC,CAAC,CAwCjB"}
@@ -3,36 +3,38 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.masterDB = void 0;
6
+ exports.mainDb = void 0;
7
7
  exports.processFilters = processFilters;
8
- exports.serviceDB = void 0;
9
8
  var _sequelize = require("sequelize");
10
9
  var _core = _interopRequireDefault(require("../app/core"));
11
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
- const serviceDB = exports.serviceDB = new _sequelize.Sequelize({
13
- database: _core.default.settings.getDatabase().service.database,
14
- dialect: _core.default.settings.getDatabase().master.dialect,
15
- username: _core.default.settings.getDatabase().master.username,
16
- password: _core.default.settings.getDatabase().master.password,
17
- pool: _core.default.settings.getDatabase().service.pool,
11
+ const mainDb = exports.mainDb = new _sequelize.Sequelize({
12
+ database: _core.default.settings.getDatabase().main.database,
13
+ dialect: _core.default.settings.getDatabase().main.dialect,
14
+ username: _core.default.settings.getDatabase().main.username,
15
+ password: _core.default.settings.getDatabase().main.password,
16
+ pool: _core.default.settings.getDatabase().main.pool,
18
17
  define: {
19
18
  timestamps: true
20
19
  },
21
20
  timezone: '-03:00',
22
21
  logging: _core.default.settings.getDatabase().service.log
23
22
  });
24
- const masterDB = exports.masterDB = new _sequelize.Sequelize({
25
- database: _core.default.settings.getDatabase().master.database,
26
- dialect: _core.default.settings.getDatabase().master.dialect,
27
- username: _core.default.settings.getDatabase().master.username,
28
- password: _core.default.settings.getDatabase().master.password,
29
- pool: _core.default.settings.getDatabase().master.pool,
23
+
24
+ //!nunca foi usado
25
+ /* export const masterDB = new Sequelize({
26
+ database: Core.settings.getDatabase().master.database,
27
+ dialect: Core.settings.getDatabase().master.dialect,
28
+ username: Core.settings.getDatabase().master.username,
29
+ password: Core.settings.getDatabase().master.password,
30
+ pool: Core.settings.getDatabase().master.pool,
30
31
  define: {
31
32
  timestamps: true
32
33
  },
33
34
  timezone: '-03:00',
34
- logging: _core.default.settings.getDatabase().service.log
35
- });
35
+ logging: Core.settings.getDatabase().service.log
36
+ }); */
37
+
36
38
  function processCondition(cond) {
37
39
  if ('or' in cond) {
38
40
  return {
@@ -1,4 +1,6 @@
1
1
  import { Logger } from 'pino';
2
2
  declare const logger: () => Logger<never>;
3
+ export declare function zipFolder(sourceDir: string, zipFilePath: string): Promise<void>;
4
+ export declare function compressOldLogs(): void;
3
5
  export default logger;
4
6
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AA4C9B,QAAA,MAAM,MAAM,qBAMX,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,OAAa,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAyDpC,QAAA,MAAM,MAAM,qBAMX,CAAC;AAOF,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCrF;AAED,wBAAgB,eAAe,SAW9B;AAED,eAAe,MAAM,CAAC"}
@@ -3,12 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.compressOldLogs = compressOldLogs;
6
7
  exports.default = void 0;
8
+ exports.zipFolder = zipFolder;
7
9
  var _dateFns = require("date-fns");
8
10
  var _fs = require("fs");
9
11
  var _path = _interopRequireDefault(require("path"));
10
- var _pinoMultiStream = _interopRequireDefault(require("pino-multi-stream"));
12
+ var _pino = _interopRequireDefault(require("pino"));
11
13
  var _core = _interopRequireDefault(require("../app/core"));
14
+ var _archiver = _interopRequireDefault(require("archiver"));
12
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
16
  let loggerInstance = null;
14
17
  const createLogger = () => {
@@ -34,13 +37,18 @@ const createLogger = () => {
34
37
  }, {
35
38
  level: 'trace',
36
39
  stream: (0, _fs.createWriteStream)(basePath + '/trace' + _core.default.settings.getLogger().fileformat)
40
+ }, {
41
+ level: 'debug',
42
+ stream: (0, _fs.createWriteStream)(basePath + '/debug' + _core.default.settings.getLogger().fileformat)
37
43
  }];
38
44
  _core.default.settings.getLogger().console ?? streams.push({
39
45
  stream: process.stdout
40
46
  });
41
- return (0, _pinoMultiStream.default)({
42
- streams
43
- });
47
+ return (0, _pino.default)({
48
+ level: _core.default.settings.getLogger().level,
49
+ // Define o nível de log
50
+ timestamp: _pino.default.stdTimeFunctions.isoTime
51
+ }, _pino.default.multistream(streams));
44
52
  };
45
53
  const logger = () => {
46
54
  if (!loggerInstance) {
@@ -48,4 +56,49 @@ const logger = () => {
48
56
  }
49
57
  return loggerInstance;
50
58
  };
59
+
60
+ /**
61
+ * Compacta uma pasta em um arquivo zip.
62
+ * @param sourceDir Caminho da pasta a ser compactada.
63
+ * @param zipFilePath Caminho de saída do arquivo zip.
64
+ */
65
+ async function zipFolder(sourceDir, zipFilePath) {
66
+ return new Promise((resolve, reject) => {
67
+ const output = (0, _fs.createWriteStream)(zipFilePath);
68
+ const archive = (0, _archiver.default)('zip', {
69
+ zlib: {
70
+ level: 9
71
+ } // nível de compressão
72
+ });
73
+ output.on('close', () => {
74
+ console.log(`✔ Arquivo zip criado com sucesso: ${zipFilePath} (${archive.pointer()} bytes)`);
75
+ resolve();
76
+ });
77
+ output.on('end', () => {
78
+ console.log('🟡 Arquivo de saída foi fechado.');
79
+ });
80
+ archive.on('warning', err => {
81
+ if (err.code === 'ENOENT') {
82
+ console.warn('Aviso:', err);
83
+ } else {
84
+ reject(err);
85
+ }
86
+ });
87
+ archive.on('error', err => {
88
+ reject(err);
89
+ });
90
+ archive.pipe(output);
91
+ archive.directory(sourceDir, false); // false = não inclui o caminho completo
92
+ archive.finalize();
93
+ });
94
+ }
95
+ function compressOldLogs() {
96
+ const logDir = _core.default.settings.getLogger().path;
97
+ const zipFilePath = _path.default.join(logDir, `logs-${(0, _dateFns.format)(new Date(), 'dd-MM-yyyy')}.zip`);
98
+ zipFolder(logDir, zipFilePath).then(() => {
99
+ logger().info(`✔ Logs antigos compactados em: ${zipFilePath}`);
100
+ }).catch(err => {
101
+ logger().error('❌ Erro ao compactar logs antigos:', err);
102
+ });
103
+ }
51
104
  var _default = exports.default = logger;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exodus-framework",
3
- "version": "2.0.9151",
3
+ "version": "2.0.9791",
4
4
  "description": "Exodus Framework",
5
5
  "author": "jhownpaixao",
6
6
  "license": "ISC",
@@ -27,6 +27,7 @@
27
27
  "@sequelize/core": "^7.0.0-alpha.37",
28
28
  "@types/node-jose": "^1.1.13",
29
29
  "amqplib": "^0.10.4",
30
+ "archiver": "^7.0.1",
30
31
  "axios": "^1.7.5",
31
32
  "bullmq": "^5.12.11",
32
33
  "cors": "^2.8.5",
@@ -37,6 +38,7 @@
37
38
  "express-jwt": "^8.4.1",
38
39
  "express-requests-logger": "^4.0.1",
39
40
  "fs": "^0.0.1-security",
41
+ "install": "^0.13.0",
40
42
  "lodash": "^4.17.21",
41
43
  "mariadb": "^3.3.1",
42
44
  "multer": "^1.4.5-lts.1",
@@ -44,6 +46,7 @@
44
46
  "node-cache": "^5.1.2",
45
47
  "node-jose": "^2.2.0",
46
48
  "node-schedule": "^2.1.1",
49
+ "npm": "^11.3.0",
47
50
  "pino": "^9.3.2",
48
51
  "pino-http": "^10.2.0",
49
52
  "pino-multi-stream": "^6.0.0",
@@ -61,6 +64,7 @@
61
64
  "@babel/preset-typescript": "^7.24.7",
62
65
  "@babel/register": "^7.24.6",
63
66
  "@types/amqplib": "^0.10.5",
67
+ "@types/archiver": "^6.0.3",
64
68
  "@types/cors": "^2.8.17",
65
69
  "@types/express": "^4.17.21",
66
70
  "@types/express-requests-logger": "^4.0.0",
@@ -85,6 +89,6 @@
85
89
  "ts-node-dev": "^2.0.0",
86
90
  "tsconfig-paths": "^4.2.0",
87
91
  "typescript": "^5.5.4",
88
- "vitest": "^2.0.5"
92
+ "vitest": "^3.1.3"
89
93
  }
90
- }
94
+ }