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
@@ -18,7 +18,7 @@ class EnvironmentController extends _app.MessagingController {
18
18
  try {
19
19
  const db = data.database;
20
20
  const token = data.envToken;
21
- await _services.SequelizeService.singleton().createDB(db, token);
21
+ await _services.DatabaseService.getService().createDB(db, token);
22
22
  await _models.EnvDBHost.create({
23
23
  envUuid: data.uuid,
24
24
  hostUuid: data.database,
@@ -35,7 +35,7 @@ class EnvironmentController extends _app.MessagingController {
35
35
  try {
36
36
  const token = data.token;
37
37
  const db = data.database;
38
- await _services.SequelizeService.singleton().deleteDB(db, token);
38
+ await _services.DatabaseService.getService().deleteDB(db, token);
39
39
  const relation = await _models.EnvDBHost.findOne({
40
40
  where: {
41
41
  envUuid: data.uuid
@@ -92,10 +92,10 @@ class EnvironmentController extends _app.MessagingController {
92
92
  envToken: env.envToken
93
93
  });
94
94
  }
95
- if (!(await _services.SequelizeService.singleton().hasDB(env.database, env.envToken))) {
95
+ if (!(await _services.DatabaseService.getService().hasDB(env.database, env.envToken))) {
96
96
  (0, _utils.logger)().info(env, `Sincronizando novo banco de dados ${env.uuid}`);
97
97
  this.log(`Sincronizando novo banco de dados ${env.uuid}`, 'info');
98
- await _services.SequelizeService.singleton().createDB(env.database, env.envToken);
98
+ await _services.DatabaseService.getService().createDB(env.database, env.envToken);
99
99
  }
100
100
  } catch (error) {
101
101
  new _app.ErrorHandler('Houve um erro ao tentar sincronizar um novo ambiente/relação ou banco de dados', error);
@@ -1 +1 @@
1
- {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/middlewares/access.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAM5C,cAAM,gBAAiB,SAAQ,cAAc;IAO3C,WAAW,UAAW,YAAY,EAAE,KAAG,cAAc,CAWnD;IAEF,SAAS,EAAE,cAAc,CAsFvB;CACH;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/middlewares/access.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAM5C,cAAM,gBAAiB,SAAQ,cAAc;IAO3C,WAAW,UAAW,YAAY,EAAE,KAAG,cAAc,CAWnD;IAEF,SAAS,EAAE,cAAc,CA+FvB;CACH;AAED,eAAe,gBAAgB,CAAC"}
@@ -33,10 +33,11 @@ class AccessMiddleware extends _controller.default {
33
33
  const account = req.auth?.account;
34
34
  const tenantId = req.header('X-Exodus-Tenant-ID');
35
35
  const applicationId = req.header('X-Exodus-Application-ID');
36
+ const exodusServiceId = req.header('X-Exodus-Service-ID');
36
37
  let isApplication = false;
37
38
 
38
39
  //! Negar caso não haja um ou outro;
39
- if (!account && !applicationId && !tenantId) {
40
+ if (!account && !applicationId && !tenantId && !exodusServiceId) {
40
41
  throw new _app.HttpError({
41
42
  message: 'Credênciais de autênticação não informadas',
42
43
  statusCode: _http.EHttpResponseCode.informationUnauthorized
@@ -76,7 +77,7 @@ class AccessMiddleware extends _controller.default {
76
77
  });
77
78
  } else {
78
79
  //valido
79
- const data = await _security.default.singleton().verifySignature(applicationId, _security.default.singleton().getServicePublicKey());
80
+ const data = await _security.default.getService().verifySignature(applicationId, _security.default.getService().getServicePublicKey());
80
81
  if (!data) {
81
82
  throw new _app.HttpError({
82
83
  message: 'Token sem autênticidade.',
@@ -91,20 +92,26 @@ class AccessMiddleware extends _controller.default {
91
92
  envUuid = data.payload.envUuid;
92
93
  }
93
94
  } else if (tenantId) {
94
- if (!account) {
95
+ if (!account && !exodusServiceId) {
95
96
  throw new _app.HttpError({
96
97
  message: 'Não é permitido o uso do tenantId sem uma sessão ativa',
97
98
  statusCode: _http.EHttpResponseCode.informationBlocked
98
99
  });
99
100
  }
101
+ if (exodusServiceId && exodusServiceId != process.env.SECURITY_JWT_ISSUER) {
102
+ throw new _app.HttpError({
103
+ message: 'O token de serviço é inválido',
104
+ statusCode: _http.EHttpResponseCode.informationBlocked
105
+ });
106
+ }
100
107
  envUuid = tenantId;
101
- if (account.type != 'ADMINISTRATOR') {
108
+ if (account && account.type != 'ADMINISTRATOR') {
102
109
  requestor.environmentId = account.envUuid;
103
110
  envUuid = account.envUuid;
104
111
  }
105
112
  }
106
113
  req.tenant = {
107
- id: envUuid || _app.Core.settings.getDatabase().service.database
114
+ id: envUuid || _app.Core.settings.getDatabase().main.database
108
115
  };
109
116
  req.requestor = requestor;
110
117
  req.isApplication = isApplication;
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../src/middlewares/authentication.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,cAAc,EAAE,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAMrE,qBAAa,wBAAyB,SAAQ,cAAc;IAC1D,YAAY,CAAC,QAAQ,GAAE,OAAc,GAAG,cAAc;CAUvD;AAED,qBAAa,8BAA+B,SAAQ,gBAAgB;IAClE,YAAY,WAAkB,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,KAAK,IAAI,mBAoFvE;CACH"}
1
+ {"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../src/middlewares/authentication.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,cAAc,EAAE,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAMrE,qBAAa,wBAAyB,SAAQ,cAAc;IAQ1D,YAAY,CAAC,QAAQ,GAAE,OAAc,GAAG,cAAc;CAUvD;AAED,qBAAa,8BAA+B,SAAQ,gBAAgB;IAClE,YAAY,WAAkB,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,KAAK,IAAI,mBAoFvE;CACH"}
@@ -11,9 +11,15 @@ var _controller = _interopRequireWildcard(require("../app/controller"));
11
11
  var _models = require("../models");
12
12
  var _security = _interopRequireDefault(require("../services/security"));
13
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
- 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); }
15
- 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; }
14
+ 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); }
16
15
  class AuthenticationMiddleware extends _controller.default {
16
+ /**
17
+ * Recupera a sessão ativa baseada no token
18
+ *
19
+ * @param {boolean} [required=true] Controla se o token de sessão é obrigatório (Em caso de rota API usar como false)
20
+ * @return {*} {RequestHandler}
21
+ * @memberof AuthenticationMiddleware
22
+ */
17
23
  decryptToken(required = true) {
18
24
  return (0, _expressJwt.expressjwt)({
19
25
  secret: async () => {
@@ -91,7 +97,7 @@ class SocketAuthenticationMiddleware extends _controller.SocketController {
91
97
  envUuid = account.envUuid;
92
98
  }
93
99
  socket.tenant = {
94
- id: envUuid || _app.Core.settings.getDatabase().service.database
100
+ id: envUuid || _app.Core.settings.getDatabase().main.database
95
101
  };
96
102
  socket.requestor = requestor;
97
103
  socket.isApplication = isApplication;
@@ -9,8 +9,7 @@ var _multer = _interopRequireDefault(require("multer"));
9
9
  var fs = _interopRequireWildcard(require("fs"));
10
10
  var _path = _interopRequireDefault(require("path"));
11
11
  var _app = require("../app");
12
- 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); }
13
- 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; }
12
+ 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); }
14
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
14
  class FileMiddleware extends _controller.default {
16
15
  storage;
@@ -55,7 +55,7 @@ Application.init({
55
55
  }
56
56
  }, {
57
57
  tableName: 'applications',
58
- sequelize: _database.serviceDB,
58
+ sequelize: _database.mainDb,
59
59
  indexes: [{
60
60
  fields: ['name']
61
61
  }, {
@@ -51,7 +51,7 @@ DatabaseHost.init({
51
51
  }
52
52
  }, {
53
53
  tableName: 'database_hosts',
54
- sequelize: _database.serviceDB,
54
+ sequelize: _database.mainDb,
55
55
  indexes: [{
56
56
  fields: ['name'],
57
57
  unique: true
@@ -30,7 +30,7 @@ EnvDBHost.init({
30
30
  }
31
31
  }, {
32
32
  tableName: 'env_dbhost',
33
- sequelize: _database.serviceDB,
33
+ sequelize: _database.mainDb,
34
34
  indexes: [{
35
35
  fields: ['envUuid'],
36
36
  unique: true
package/lib/models/Log.js CHANGED
@@ -12,7 +12,7 @@ class Log extends _servicemodel.default {
12
12
  static getConnParams() {
13
13
  return {
14
14
  tableName: 'logs',
15
- sequelize: _database.serviceDB,
15
+ sequelize: _database.mainDb,
16
16
  indexes: [{
17
17
  fields: ['category']
18
18
  }, {
@@ -12,7 +12,7 @@ class System extends _servicemodel.default {
12
12
  static getConnParams() {
13
13
  return {
14
14
  tableName: 'system',
15
- sequelize: _database.serviceDB,
15
+ sequelize: _database.mainDb,
16
16
  indexes: [{
17
17
  fields: ['key']
18
18
  }, {
@@ -0,0 +1,32 @@
1
+ import { Dialect, Model, ModelStatic, Sequelize } from 'sequelize';
2
+ import { Service, ServiceModel } from '../app';
3
+ import { StaticServiceModel } from '../contracts';
4
+ import { EnvDBHost } from '../models';
5
+ declare class DatabaseService extends Service {
6
+ private entities;
7
+ private connections;
8
+ onServiceInit(): Promise<void>;
9
+ onStart(): Promise<boolean>;
10
+ onStartFail(): Promise<void>;
11
+ private initConnection;
12
+ createConnection(host: string, port: number, database: string, username: string, password: string, dialect: Dialect): Promise<Sequelize>;
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>;
21
+ private createConnectionByHost;
22
+ getTenantIds(): Promise<string[]>;
23
+ getTenantInformation(tenantId: string): Promise<EnvDBHost>;
24
+ private loadEntity;
25
+ getEntity<M extends ServiceModel<Model>>(model: StaticServiceModel<M>, tenantId: string): Promise<ModelStatic<M>>;
26
+ private normalizeDatabaseName;
27
+ createDB(hostId: string, name: string): Promise<boolean>;
28
+ deleteDB(hostId: string, name: string): Promise<boolean>;
29
+ hasDB(hostId: string, name: string): Promise<boolean>;
30
+ }
31
+ export default DatabaseService;
32
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +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;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;YA2Ba,sBAAsB;IA6BvB,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;IAIhB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IA0BrC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAmBrC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAiBhD;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,231 @@
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
+ async createConnectionByHost(hostId) {
119
+ const host = await _models.DatabaseHost.findByPk(hostId);
120
+ if (!host) throw new Error(`Host não encontado: ${hostId}`);
121
+ const splitedInfo = host.host.split(':');
122
+ const address = splitedInfo[0];
123
+ const port = Number(splitedInfo[1]);
124
+ const key = await _security.default.getService().loadKeyByStr(host.credential);
125
+ const data = await _security.default.getService().verifySignature(host.password, key);
126
+ if (!data) {
127
+ throw new Error(`Não foi possível descriptografar as credenciais de conexão para host: ${hostId}`);
128
+ }
129
+ const password = data.payload;
130
+ return this.createConnection(address, port, undefined,
131
+ //! apenas retornar a conexão
132
+ host.username, password, host.dialect);
133
+ }
134
+
135
+ //* Environment
136
+ async getTenantIds() {
137
+ const tenants = await _models.EnvDBHost.findAll({
138
+ attributes: ['envUuid']
139
+ });
140
+ return tenants.map(t => t.envUuid);
141
+ }
142
+ async getTenantInformation(tenantId) {
143
+ const relation = await _models.EnvDBHost.findOne({
144
+ where: {
145
+ envUuid: tenantId
146
+ }
147
+ });
148
+ return relation;
149
+ }
150
+
151
+ //* Entity
152
+ async loadEntity(entity, tenantId) {
153
+ const k = `${tenantId}#${entity.name}`;
154
+ const connection = await this.getConnection(tenantId);
155
+ const loadedEntity = entity.initialize(connection);
156
+ await loadedEntity.sync({
157
+ force: false
158
+ });
159
+ this.entities.set(k, loadedEntity);
160
+ }
161
+ async getEntity(model, tenantId) {
162
+ const k = `${tenantId}#${model.name}`;
163
+ if (!this.entities.has(k)) {
164
+ await this.loadEntity(model, tenantId);
165
+ }
166
+ return this.entities.get(k);
167
+ }
168
+
169
+ //* Utils
170
+ normalizeDatabaseName(envToken) {
171
+ return `${_app.Core.settings.getDatabase().main.database}_${envToken}`;
172
+ }
173
+ async createDB(hostId, name) {
174
+ try {
175
+ const connection = await this.createConnectionByHost(hostId);
176
+ try {
177
+ const dbQueryName = `${_app.Core.settings.getDatabase().main.database}_${name}`;
178
+ const [results] = await connection.query(`SHOW DATABASES LIKE '${dbQueryName}';`);
179
+ if (results.length === 0) {
180
+ // Se o banco de dados não existir, cria-o
181
+ await connection.query(`CREATE DATABASE ${dbQueryName};`);
182
+ this.log(`Database "${dbQueryName}" has been created.`);
183
+ return true;
184
+ } else {
185
+ this.log(`Database "${dbQueryName}" already exists.`);
186
+ return false;
187
+ }
188
+ } catch (error) {
189
+ new _app.ErrorHandler('Erro on creating database', error);
190
+ } finally {
191
+ connection.close();
192
+ }
193
+ } catch (error) {
194
+ return false;
195
+ }
196
+ }
197
+ async deleteDB(hostId, name) {
198
+ try {
199
+ const connection = await this.createConnectionByHost(hostId);
200
+ try {
201
+ const dbQueryName = `${_app.Core.settings.getDatabase().main.database}_${name}`;
202
+ await connection.query(`DROP DATABASE IF EXISTS ${dbQueryName};`);
203
+ this.log(`Database "${dbQueryName}" has been deleted.`);
204
+ return true;
205
+ } catch (error) {
206
+ return false;
207
+ } finally {
208
+ connection.close();
209
+ }
210
+ } catch (error) {
211
+ return false;
212
+ }
213
+ }
214
+ async hasDB(hostId, name) {
215
+ try {
216
+ const connection = await this.createConnectionByHost(hostId);
217
+ try {
218
+ const dbQueryName = `${_app.Core.settings.getDatabase().main.database}_${name}`;
219
+ const [results] = await connection.query(`SHOW DATABASES LIKE '${dbQueryName}';`);
220
+ return results.length > 0;
221
+ } catch (error) {
222
+ return false;
223
+ } finally {
224
+ connection.close();
225
+ }
226
+ } catch (error) {
227
+ return false;
228
+ }
229
+ }
230
+ }
231
+ var _default = exports.default = DatabaseService;
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _app = require("../app");
8
8
  var _System = require("../models/System");
9
- var _sequelize = _interopRequireDefault(require("./sequelize"));
9
+ var _database = _interopRequireDefault(require("./database"));
10
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
11
  class EcosystemService extends _app.Service {
12
12
  async getSystemVariable(tenantId, key) {
13
- const Entity = await _sequelize.default.singleton().getModel(_System.System, tenantId);
13
+ const Entity = await _database.default.getService().getEntity(_System.System, tenantId);
14
14
  return Entity.findOne({
15
15
  where: {
16
16
  key
@@ -18,7 +18,7 @@ class EcosystemService extends _app.Service {
18
18
  });
19
19
  }
20
20
  async setSystemVariable(tenantId, key, value) {
21
- const Entity = await _sequelize.default.singleton().getModel(_System.System, tenantId);
21
+ const Entity = await _database.default.getService().getEntity(_System.System, tenantId);
22
22
  const variable = await Entity.findOne({
23
23
  where: {
24
24
  key
@@ -30,7 +30,7 @@ class EcosystemService extends _app.Service {
30
30
  await variable.save();
31
31
  }
32
32
  async createSystemVariable(tenantId, key, value) {
33
- const Entity = await _sequelize.default.singleton().getModel(_System.System, tenantId);
33
+ const Entity = await _database.default.getService().getEntity(_System.System, tenantId);
34
34
  const variable = await Entity.findOne({
35
35
  where: {
36
36
  key
@@ -13,6 +13,7 @@ declare class ExpressService extends Service {
13
13
  responseTypeMiddleware(req: Request, res: Response, next: NextFunction): void;
14
14
  handleNotFoud(req: Request, res: Response): void;
15
15
  handleAuthorizationFailure(err: Error, req: Request, res: Response, next: NextFunction): void;
16
+ handleJSONParseFailure(err: Error, req: Request, res: Response, next: NextFunction): void;
16
17
  handleRequestProcessFailure: (err: any, req: Request, res: Response, _: NextFunction) => Promise<void>;
17
18
  checkRequest(params: object): Promise<void>;
18
19
  static registerRouter(router: Router): void;
@@ -1 +1 @@
1
- {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/services/express.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGlE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAI7B,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGrE,cAAM,cAAe,SAAQ,OAAO;IAClC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAS;IAGd,oBAAoB;IAIpB,cAAc;IAoBd,sBAAsB;IAS5B,aAAa;IAIb,YAAY,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,YAAY;IAiC3E,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY;IAMtE,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IAWzC,0BAA0B,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY;IAUtF,2BAA2B,QAC3B,GAAG,OACH,OAAO,OACP,QAAQ,KAEV,YAAY,mBAoBf;IAEW,YAAY,CAAC,MAAM,EAAE,MAAM;IAyBxC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM;CAGrC;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/services/express.ts"],"names":[],"mappings":"AACA,OAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAElE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAG7C,OAAO,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGrE,cAAM,cAAe,SAAQ,OAAO;IAClC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAS;IAGd,oBAAoB;IAIpB,cAAc;IAqBd,sBAAsB;IAS5B,aAAa;IAIb,YAAY,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,YAAY;IAkC3E,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY;IAMtE,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;IAWzC,0BAA0B,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY;IAUtF,sBAAsB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY;IAWlF,2BAA2B,QAC3B,GAAG,OACH,OAAO,OACP,QAAQ,KAEV,YAAY,mBAoBf;IAEW,YAAY,CAAC,MAAM,EAAE,MAAM;IAyBxC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM;CAGrC;AAED,eAAe,cAAc,CAAC"}
@@ -6,16 +6,15 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _cors = _interopRequireDefault(require("cors"));
8
8
  var _express = _interopRequireDefault(require("express"));
9
- var _expressRequestsLogger = _interopRequireDefault(require("express-requests-logger"));
10
9
  var http = _interopRequireWildcard(require("http"));
10
+ var _pinoHttp = require("pino-http");
11
11
  var _qs = _interopRequireDefault(require("qs"));
12
+ var _service = _interopRequireDefault(require("../app/classes/service"));
12
13
  var _core = _interopRequireDefault(require("../app/core"));
13
14
  var _error = require("../app/error");
14
- var _service = _interopRequireDefault(require("../app/classes/service"));
15
15
  var _http2 = require("../contracts/http");
16
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; }
17
+ 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); }
19
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
19
  // import 'express-async-errors';
21
20
 
@@ -33,7 +32,7 @@ class ExpressService extends _service.default {
33
32
  const expss = (0, _express.default)();
34
33
  this.server = http.createServer(expss);
35
34
  expss.use('/public', _express.default.static(_core.default.settings.getHttp().publicPath));
36
- expss.use((0, _expressRequestsLogger.default)({
35
+ expss.use((0, _pinoHttp.pinoHttp)({
37
36
  logger: (0, _logger.default)()
38
37
  }));
39
38
  expss.set('query parser', str => _qs.default.parse(str));
@@ -51,6 +50,7 @@ class ExpressService extends _service.default {
51
50
  expss.use(this.mainRouter);
52
51
  expss.use(this.handleAuthorizationFailure.bind(this));
53
52
  expss.use(this.handleNotFoud.bind(this));
53
+ expss.use(this.handleJSONParseFailure.bind(this));
54
54
  expss.use(this.handleRequestProcessFailure.bind(this));
55
55
  return true;
56
56
  }
@@ -119,6 +119,17 @@ class ExpressService extends _service.default {
119
119
  next(err);
120
120
  }
121
121
  }
122
+ handleJSONParseFailure(err, req, res, next) {
123
+ if (err instanceof SyntaxError && 'body' in err) {
124
+ throw new _error.HttpError({
125
+ message: `Falha na análise JSON`,
126
+ data: err.message,
127
+ statusCode: _http2.EHttpResponseCode.incompleteRequest
128
+ });
129
+ } else {
130
+ next(err);
131
+ }
132
+ }
122
133
  handleRequestProcessFailure = async (err, req, res, _) => {
123
134
  if (err instanceof _error.HttpError) {
124
135
  return this.sendResponse({
@@ -9,8 +9,7 @@ var _logger = _interopRequireDefault(require("../utils/logger"));
9
9
  var fs = _interopRequireWildcard(require("fs"));
10
10
  var fsPromisses = _interopRequireWildcard(require("fs/promises"));
11
11
  var _app = require("../app");
12
- 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); }
13
- 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; }
12
+ 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); }
14
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
14
  class FileService extends _service.default {
16
15
  async onStart() {
@@ -8,5 +8,6 @@ export { default as SecurityService } from './security';
8
8
  export { default as LogService } from './log';
9
9
  export { default as EcosystemService } from './ecosystem';
10
10
  export { default as TestService } from './test';
11
+ export { default as DatabaseService } from './database';
11
12
  export * from './task';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,YAAY,CAAC;AACxD,cAAc,QAAQ,CAAC"}
@@ -13,8 +13,15 @@ var _exportNames = {
13
13
  SecurityService: true,
14
14
  LogService: true,
15
15
  EcosystemService: true,
16
- TestService: true
16
+ TestService: true,
17
+ DatabaseService: true
17
18
  };
19
+ Object.defineProperty(exports, "DatabaseService", {
20
+ enumerable: true,
21
+ get: function () {
22
+ return _database.default;
23
+ }
24
+ });
18
25
  Object.defineProperty(exports, "EcosystemService", {
19
26
  enumerable: true,
20
27
  get: function () {
@@ -85,6 +92,7 @@ var _security = _interopRequireDefault(require("./security"));
85
92
  var _log = _interopRequireDefault(require("./log"));
86
93
  var _ecosystem = _interopRequireDefault(require("./ecosystem"));
87
94
  var _test = _interopRequireDefault(require("./test"));
95
+ var _database = _interopRequireDefault(require("./database"));
88
96
  var _task = require("./task");
89
97
  Object.keys(_task).forEach(function (key) {
90
98
  if (key === "default" || key === "__esModule") return;
@@ -7,12 +7,12 @@ exports.default = void 0;
7
7
  var _dateFns = require("date-fns");
8
8
  var _app = require("../app");
9
9
  var _Log = require("../models/Log");
10
- var _sequelize = _interopRequireDefault(require("./sequelize"));
10
+ var _database = _interopRequireDefault(require("./database"));
11
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
12
  class LogService extends _app.Service {
13
13
  async register(tenantId, data) {
14
14
  try {
15
- const Entity = await _sequelize.default.singleton().getModel(_Log.Log, tenantId);
15
+ const Entity = await _database.default.getService().getEntity(_Log.Log, tenantId);
16
16
  await Entity.create({
17
17
  ...data,
18
18
  happenedAt: (0, _dateFns.format)(new Date(), 'yyyy-MM-dd HH:mm:ss')
@@ -17,7 +17,7 @@ declare class RabbitMQService extends Service {
17
17
  connect(): Promise<boolean>;
18
18
  registerHandles(): Promise<void>;
19
19
  private setupErrorHandles;
20
- sendToQueue<K extends keyof TMessageQueueDataMap>(topic: K, data: TMessageQueueDataMap[K]): Promise<false | `${string}-${string}-${string}-${string}-${string}`>;
20
+ sendToQueue<K extends keyof TMessageQueueDataMap>(topic: K, data: TMessageQueueDataMap[K], transactionId?: string): Promise<false | `${string}-${string}-${string}-${string}-${string}`>;
21
21
  consumeFromQueue(msg: client.ConsumeMessage): Promise<void>;
22
22
  static registerRouter(router: TMessagingQueueEventList): void;
23
23
  onTransaction<K extends keyof TMessageQueueDataMap>(topic: K, callBack: TMessagingQueueHandler<K>): void;