exodus-framework 2.1.1049 → 2.1.1051

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.
@@ -6,6 +6,8 @@ declare class SSEHandler extends System {
6
6
  protected response: Response;
7
7
  protected side: eExecutionSide;
8
8
  protected active: boolean;
9
+ protected security: boolean;
10
+ private secretKey;
9
11
  protected ticketInterval: number;
10
12
  private tickInterval;
11
13
  constructor(request: Request, response: Response);
@@ -18,8 +20,14 @@ declare class SSEHandler extends System {
18
20
  getSide(): eExecutionSide;
19
21
  getActive(): boolean;
20
22
  protected getTicketInterval(): number;
23
+ /**
24
+ * Envia dados através do SSE (Server-Sent Events)
25
+ * @param event Nome do evento
26
+ * @param data Dados a serem enviados (serão criptografados se security=true)
27
+ */
21
28
  protected send(event: string, data: any): void;
22
29
  static handle(): (request: Request, res: Response) => Promise<void>;
30
+ private encryptData;
23
31
  }
24
32
  export default SSEHandler;
25
33
  //# sourceMappingURL=ssehandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssehandler.d.ts","sourceRoot":"","sources":["../../../../src/app/classes/socket/ssehandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,cAAM,UAAW,SAAQ,MAAM;IAO3B,SAAS,CAAC,OAAO,EAAE,OAAO;IAC1B,SAAS,CAAC,QAAQ,EAAE,QAAQ;IAP9B,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC;IAC/B,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,YAAY,CAAwB;gBAGhC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ;IAKvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAM9B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAiBjC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAMtC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAUpC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAUjC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAG9B,OAAO;IAGP,SAAS;IAGhB,SAAS,CAAC,iBAAiB;IAI3B,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;WAOzB,MAAM,cACK,OAAO,OAAO,QAAQ;CAQhD;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ssehandler.d.ts","sourceRoot":"","sources":["../../../../src/app/classes/socket/ssehandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,cAAM,UAAW,SAAQ,MAAM;IAS3B,SAAS,CAAC,OAAO,EAAE,OAAO;IAC1B,SAAS,CAAC,QAAQ,EAAE,QAAQ;IAT9B,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC;IAC/B,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,YAAY,CAAwB;gBAGhC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ;IAKvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAO9B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAiBjC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAgBtC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAUpC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAUjC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAG9B,OAAO;IAGP,SAAS;IAGhB,SAAS,CAAC,iBAAiB;IAI3B;;;;OAIG;IACH,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;WAazB,MAAM,cACK,OAAO,OAAO,QAAQ;IAS/C,OAAO,CAAC,WAAW;CAsBpB;AAED,eAAe,UAAU,CAAC"}
@@ -6,10 +6,13 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _core = require("../../../contracts/core");
8
8
  var _system = _interopRequireDefault(require("../system"));
9
+ var _crypto = _interopRequireDefault(require("crypto"));
9
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
11
  class SSEHandler extends _system.default {
11
12
  side;
12
13
  active;
14
+ security;
15
+ secretKey;
13
16
  ticketInterval;
14
17
  tickInterval;
15
18
  constructor(request, response) {
@@ -20,6 +23,7 @@ class SSEHandler extends _system.default {
20
23
  onInit() {
21
24
  this.side = _core.eExecutionSide.ANY;
22
25
  this.active = true;
26
+ this.security = false;
23
27
  this.ticketInterval = 3000;
24
28
  }
25
29
  onConnect() {
@@ -37,6 +41,9 @@ class SSEHandler extends _system.default {
37
41
  });
38
42
  }
39
43
  onAfterConnect() {
44
+ if (this.security) {
45
+ this.secretKey = _crypto.default.pbkdf2Sync(this.request.auth.account.uuid, this.request.tenant.id, 100000, 32, 'sha256');
46
+ }
40
47
  this.tickInterval = setInterval(() => {
41
48
  this.onTick();
42
49
  }, this.ticketInterval);
@@ -69,10 +76,20 @@ class SSEHandler extends _system.default {
69
76
  getTicketInterval() {
70
77
  return this.ticketInterval;
71
78
  }
79
+
80
+ /**
81
+ * Envia dados através do SSE (Server-Sent Events)
82
+ * @param event Nome do evento
83
+ * @param data Dados a serem enviados (serão criptografados se security=true)
84
+ */
72
85
  send(event, data) {
73
86
  if (!this.response.destroyed) {
87
+ let dataToSend = data;
88
+ if (this.security && this.secretKey) {
89
+ dataToSend = this.encryptData(data);
90
+ }
74
91
  this.response.write(`event: ${event}\n`);
75
- this.response.write(`data: ${JSON.stringify(data)}\n\n`);
92
+ this.response.write(`data: ${JSON.stringify(dataToSend)}\n\n`);
76
93
  }
77
94
  }
78
95
  static handle() {
@@ -83,5 +100,25 @@ class SSEHandler extends _system.default {
83
100
  await handler.onAfterConnect();
84
101
  };
85
102
  }
103
+ encryptData(data) {
104
+ if (this.security && this.secretKey) {
105
+ try {
106
+ const key = new Uint8Array(this.secretKey);
107
+ const iv = _crypto.default.randomBytes(16);
108
+ const cipher = _crypto.default.createCipheriv('aes-256-cbc', key, new Uint8Array(iv));
109
+ let encrypted = cipher.update(JSON.stringify(data), 'utf8', 'hex');
110
+ encrypted += cipher.final('hex');
111
+ return {
112
+ encrypted,
113
+ iv: iv.toString('hex')
114
+ };
115
+ } catch (error) {
116
+ console.warn('SSE encryption failed:', error);
117
+ return data;
118
+ }
119
+ } else {
120
+ return data;
121
+ }
122
+ }
86
123
  }
87
124
  var _default = exports.default = SSEHandler;
@@ -17,6 +17,7 @@ declare class RabbitMQService extends Service {
17
17
  private attempts;
18
18
  private exchangeName;
19
19
  private queueName;
20
+ private workersQueueName;
20
21
  private isReconnecting;
21
22
  private isConnected;
22
23
  onServiceInit(): Promise<void>;
@@ -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,EACtB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAItB;;;;;;GAMG;AACH,cAAM,eAAgB,SAAQ,OAAO;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,oBAAoB,CAA0D;IACtF,OAAO,CAAC,QAAQ,CAAsB;IAEtC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAS;IAEf,aAAa;IAeb,OAAO;IAMP,eAAe;IAMf,WAAW;IAKX,OAAO;IA+BP,eAAe;IAkBrB,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,sBAAsB;IAKtF,OAAO,CAAC,iBAAiB;IAYzB;;;;;;;;;OASG;IACG,WAAW,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACpD,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC7B,aAAa,CAAC,EAAE,MAAM;IAKxB;;;;;;;;OAQG;IACG,OAAO,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAChD,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC7B,aAAa,CAAC,EAAE,MAAM;IAqBlB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc;IAoCjD,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc;IAiBhD,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"}
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,EACtB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAKtB;;;;;;GAMG;AACH,cAAM,eAAgB,SAAQ,OAAO;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,oBAAoB,CAA0D;IACtF,OAAO,CAAC,QAAQ,CAAsB;IAEtC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAS;IAEf,aAAa;IAgBb,OAAO;IAMP,eAAe;IAWf,WAAW;IAKX,OAAO;IAgCP,eAAe;IA2BrB,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,sBAAsB;IAKtF,OAAO,CAAC,iBAAiB;IAYzB;;;;;;;;;OASG;IACG,WAAW,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACpD,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC7B,aAAa,CAAC,EAAE,MAAM;IAKxB;;;;;;;;OAQG;IACG,OAAO,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAChD,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC7B,aAAa,CAAC,EAAE,MAAM;IAqBlB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc;IA6CjD,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc;IAiBhD,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"}
@@ -8,6 +8,7 @@ var _amqplib = _interopRequireDefault(require("amqplib"));
8
8
  var _crypto = require("crypto");
9
9
  var _app = require("../app");
10
10
  var _service = _interopRequireDefault(require("../app/classes/service"));
11
+ var _core = require("../contracts/core");
11
12
  var _messaging = _interopRequireDefault(require("../routes/messaging"));
12
13
  var _logger = _interopRequireDefault(require("../services/logger"));
13
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -27,6 +28,7 @@ class RabbitMQService extends _service.default {
27
28
  attempts;
28
29
  exchangeName;
29
30
  queueName;
31
+ workersQueueName;
30
32
  isReconnecting = false;
31
33
  isConnected = false;
32
34
  async onServiceInit() {
@@ -37,6 +39,7 @@ class RabbitMQService extends _service.default {
37
39
  this.attempts = new Map();
38
40
  this.exchangeName = _app.Core.settings.getMessaging().exchanges.main;
39
41
  this.queueName = _app.Core.settings.getAppication().appId;
42
+ this.workersQueueName = `${this.queueName}-workers`;
40
43
  this.eventCustomListeners = new Map();
41
44
  this.mainRouter = {
42
45
  ..._messaging.default,
@@ -49,7 +52,8 @@ class RabbitMQService extends _service.default {
49
52
  }
50
53
  async onExodusStarted() {
51
54
  await super.onExodusStarted();
52
- await this.channel.consume(this.queueName, this.consumeFromQueue.bind(this), {
55
+ const queueToConsume = this.isCluster() ? this.workersQueueName : this.queueName;
56
+ await this.channel.consume(queueToConsume, this.consumeFromQueue.bind(this), {
53
57
  noAck: false
54
58
  });
55
59
  }
@@ -70,7 +74,10 @@ class RabbitMQService extends _service.default {
70
74
  await this.channel.assertExchange(mainExchanges, 'topic', {
71
75
  durable: true
72
76
  });
73
- await this.channel.assertQueue(_app.Core.settings.getAppication().appId, {
77
+ await this.channel.assertQueue(this.queueName, {
78
+ durable: true
79
+ });
80
+ await this.channel.assertQueue(this.workersQueueName, {
74
81
  durable: true
75
82
  });
76
83
  this.isConnected = true;
@@ -90,9 +97,18 @@ class RabbitMQService extends _service.default {
90
97
  if (Array.isArray(handler)) {
91
98
  const [side] = handler;
92
99
  if (this.getExecutionSide() != side) continue;
93
- await this.channel.bindQueue(this.queueName, this.exchangeName, topic);
100
+ const targetQueue = side === _core.eExecutionSide.MASTER ? this.queueName : this.workersQueueName;
101
+ await this.channel.bindQueue(targetQueue, this.exchangeName, topic);
94
102
  } else {
95
- await this.channel.bindQueue(this.queueName, this.exchangeName, topic);
103
+ if (this.isMaster()) {
104
+ await this.channel.bindQueue(this.queueName, this.exchangeName, topic);
105
+ }
106
+ }
107
+ }
108
+ for (const [topic, handler] of Object.entries(this.decoratorRouter)) {
109
+ if (handler) {
110
+ const targetQueue = this.isCluster() ? this.workersQueueName : this.queueName;
111
+ await this.channel.bindQueue(targetQueue, this.exchangeName, topic);
96
112
  }
97
113
  }
98
114
  }
@@ -164,6 +180,7 @@ class RabbitMQService extends _service.default {
164
180
  const topic = msg.fields.routingKey;
165
181
  const content = JSON.parse(msg.content.toString());
166
182
  const callBack = this.mainRouter[topic];
183
+ const decoratorCallback = this.decoratorRouter[topic];
167
184
  if (callBack) {
168
185
  if (Array.isArray(callBack)) {
169
186
  const [side, cb] = callBack;
@@ -174,6 +191,9 @@ class RabbitMQService extends _service.default {
174
191
  await callBack(content.data, () => {}, content.serviceId, content.transactionId);
175
192
  }
176
193
  }
194
+ if (decoratorCallback && typeof decoratorCallback === 'function') {
195
+ await decoratorCallback(content.data, () => {}, content.serviceId, content.transactionId);
196
+ }
177
197
  this.channel.ack(msg);
178
198
  if (this.eventCustomListeners.has(topic)) {
179
199
  const cb = this.eventCustomListeners.get(topic);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exodus-framework",
3
- "version": "2.1.1049",
3
+ "version": "2.1.1051",
4
4
  "description": "Exodus Framework",
5
5
  "author": "jhownpaixao",
6
6
  "license": "ISC",