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.
- package/lib/app/classes/index.js +1 -2
- package/lib/app/core.js +1 -2
- package/lib/app/error.js +2 -2
- package/lib/app/settings.d.ts.map +1 -1
- package/lib/app/settings.js +10 -11
- package/lib/contracts/communication/communication.d.ts +21 -8
- package/lib/contracts/communication/communication.d.ts.map +1 -1
- package/lib/contracts/communication/communication.js +9 -1
- package/lib/contracts/communication/operation.d.ts +11 -0
- package/lib/contracts/communication/operation.d.ts.map +1 -1
- package/lib/contracts/contansts.d.ts +9 -0
- package/lib/contracts/contansts.d.ts.map +1 -1
- package/lib/contracts/contansts.js +11 -1
- package/lib/contracts/http.d.ts +1 -0
- package/lib/contracts/http.d.ts.map +1 -1
- package/lib/contracts/messaging.d.ts +96 -8
- package/lib/contracts/messaging.d.ts.map +1 -1
- package/lib/contracts/messaging.js +12 -0
- package/lib/contracts/settings.d.ts +1 -2
- package/lib/contracts/settings.d.ts.map +1 -1
- package/lib/controllers/api/log.js +1 -1
- package/lib/controllers/api/report.d.ts.map +1 -1
- package/lib/controllers/api/report.js +2 -2
- package/lib/controllers/messaging/environment.js +4 -4
- package/lib/middlewares/access.d.ts.map +1 -1
- package/lib/middlewares/access.js +12 -5
- package/lib/middlewares/authentication.d.ts.map +1 -1
- package/lib/middlewares/authentication.js +9 -3
- package/lib/middlewares/file.js +1 -2
- package/lib/models/Application.js +1 -1
- package/lib/models/DatabaseHost.js +1 -1
- package/lib/models/EnvConnection.js +1 -1
- package/lib/models/Log.js +1 -1
- package/lib/models/System.js +1 -1
- package/lib/services/database.d.ts +32 -0
- package/lib/services/database.d.ts.map +1 -0
- package/lib/services/database.js +231 -0
- package/lib/services/ecosystem.js +4 -4
- package/lib/services/express.d.ts +1 -0
- package/lib/services/express.d.ts.map +1 -1
- package/lib/services/express.js +16 -5
- package/lib/services/file.js +1 -2
- package/lib/services/index.d.ts +1 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/index.js +9 -1
- package/lib/services/log.js +2 -2
- package/lib/services/rabitmq.d.ts +1 -1
- package/lib/services/rabitmq.d.ts.map +1 -1
- package/lib/services/rabitmq.js +15 -7
- package/lib/services/security.js +1 -2
- package/lib/services/sequelize.d.ts +0 -1
- package/lib/services/sequelize.d.ts.map +1 -1
- package/lib/services/sequelize.js +12 -22
- package/lib/services/socket.js +1 -1
- package/lib/tasks/queue/environment.d.ts.map +1 -1
- package/lib/tasks/queue/environment.js +4 -5
- package/lib/tasks/schedule/restart.js +1 -1
- package/lib/utils/database.d.ts +1 -2
- package/lib/utils/database.d.ts.map +1 -1
- package/lib/utils/database.js +18 -16
- package/lib/utils/logger.d.ts +2 -0
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +57 -4
- 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,
|
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"}
|
package/lib/services/rabitmq.js
CHANGED
@@ -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,
|
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,
|
141
|
+
cb(content.data, () => {}, content.serviceId, content.transactionId);
|
141
142
|
}
|
142
143
|
} catch (error) {
|
143
|
-
|
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;
|
package/lib/services/security.js
CHANGED
@@ -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
|
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;
|
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.
|
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().
|
95
|
-
return _database.
|
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().
|
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().
|
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().
|
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().
|
171
|
-
connection = _database.
|
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().
|
195
|
+
return `${_app.Core.settings.getDatabase().main.database}_${envToken}`;
|
206
196
|
}
|
207
197
|
|
208
198
|
//#Connection
|
package/lib/services/socket.js
CHANGED
@@ -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,
|
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;
|
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
|
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
|
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
|
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
|
12
|
+
this.cron = '0 1 0 * * *';
|
13
13
|
}
|
14
14
|
async onMasterExecute() {
|
15
15
|
this.log('Executando reinício agendado...', 'danger');
|
package/lib/utils/database.d.ts
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
import { Sequelize, WhereOptions } from 'sequelize';
|
2
2
|
import { IRequestFilterCondition, LogicalCondition } from '../contracts';
|
3
|
-
export declare const
|
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,
|
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"}
|
package/lib/utils/database.js
CHANGED
@@ -3,36 +3,38 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.
|
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
|
13
|
-
database: _core.default.settings.getDatabase().
|
14
|
-
dialect: _core.default.settings.getDatabase().
|
15
|
-
username: _core.default.settings.getDatabase().
|
16
|
-
password: _core.default.settings.getDatabase().
|
17
|
-
pool: _core.default.settings.getDatabase().
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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:
|
35
|
-
});
|
35
|
+
logging: Core.settings.getDatabase().service.log
|
36
|
+
}); */
|
37
|
+
|
36
38
|
function processCondition(cond) {
|
37
39
|
if ('or' in cond) {
|
38
40
|
return {
|
package/lib/utils/logger.d.ts
CHANGED
@@ -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,
|
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"}
|
package/lib/utils/logger.js
CHANGED
@@ -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
|
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,
|
42
|
-
|
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.
|
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": "^
|
92
|
+
"vitest": "^3.1.3"
|
89
93
|
}
|
90
|
-
}
|
94
|
+
}
|