exodus-framework 2.0.9151 → 2.0.9792
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 +100 -12
- 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
@@ -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.
|
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.
|
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.
|
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.
|
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,
|
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.
|
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().
|
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;
|
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
|
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().
|
100
|
+
id: envUuid || _app.Core.settings.getDatabase().main.database
|
95
101
|
};
|
96
102
|
socket.requestor = requestor;
|
97
103
|
socket.isApplication = isApplication;
|
package/lib/middlewares/file.js
CHANGED
@@ -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
|
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;
|
package/lib/models/Log.js
CHANGED
package/lib/models/System.js
CHANGED
@@ -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
|
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
|
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
|
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
|
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;
|
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"}
|
package/lib/services/express.js
CHANGED
@@ -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
|
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,
|
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({
|
package/lib/services/file.js
CHANGED
@@ -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
|
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() {
|
package/lib/services/index.d.ts
CHANGED
@@ -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"}
|
package/lib/services/index.js
CHANGED
@@ -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;
|
package/lib/services/log.js
CHANGED
@@ -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
|
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
|
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;
|