exodus-framework 2.1.1031 → 2.1.1032
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/broadcast.d.ts +6 -0
- package/lib/app/classes/broadcast.d.ts.map +1 -1
- package/lib/app/classes/broadcast.js +1 -3
- package/lib/app/classes/communication.d.ts +17 -0
- package/lib/app/classes/communication.d.ts.map +1 -1
- package/lib/app/classes/communication.js +0 -8
- package/lib/app/classes/event.d.ts +6 -0
- package/lib/app/classes/event.d.ts.map +1 -1
- package/lib/app/classes/managed.d.ts +7 -0
- package/lib/app/classes/managed.d.ts.map +1 -1
- package/lib/app/classes/managed.js +0 -20
- package/lib/app/classes/service.d.ts +126 -0
- package/lib/app/classes/service.d.ts.map +1 -1
- package/lib/app/classes/service.js +4 -9
- package/lib/app/classes/servicemodel.d.ts +7 -0
- package/lib/app/classes/servicemodel.d.ts.map +1 -1
- package/lib/app/classes/singleton.d.ts +9 -0
- package/lib/app/classes/singleton.d.ts.map +1 -1
- package/lib/app/classes/singleton.js +0 -1
- package/lib/app/classes/socket/clienthandler.js +0 -6
- package/lib/app/classes/socket/eventhandler.js +0 -6
- package/lib/app/classes/socket/ssehandler.d.ts +1 -1
- package/lib/app/classes/socket/ssehandler.d.ts.map +1 -1
- package/lib/app/classes/socket/ssehandler.js +2 -7
- package/lib/app/classes/system.d.ts +6 -0
- package/lib/app/classes/system.d.ts.map +1 -1
- package/lib/app/controller.d.ts +25 -0
- package/lib/app/controller.d.ts.map +1 -1
- package/lib/app/core.d.ts +9 -0
- package/lib/app/core.d.ts.map +1 -1
- package/lib/app/core.js +0 -6
- package/lib/app/error.js +0 -1
- package/lib/app/exodus.d.ts +7 -0
- package/lib/app/exodus.d.ts.map +1 -1
- package/lib/app/exodus.js +1 -30
- package/lib/app/settings.js +3 -14
- package/lib/contracts/communication/communication.js +4 -4
- package/lib/contracts/contansts.js +2 -2
- package/lib/contracts/core.js +1 -1
- package/lib/contracts/entity.js +2 -4
- package/lib/contracts/http.d.ts +17 -1
- package/lib/contracts/http.d.ts.map +1 -1
- package/lib/contracts/http.js +2 -2
- package/lib/contracts/messaging.d.ts +1 -1
- package/lib/contracts/messaging.d.ts.map +1 -1
- package/lib/contracts/messaging.js +2 -2
- package/lib/contracts/service.js +1 -1
- package/lib/contracts/socket.js +2 -2
- package/lib/controllers/api/file.js +0 -4
- package/lib/controllers/api/log.js +0 -1
- package/lib/controllers/api/report.js +0 -1
- package/lib/controllers/messaging/application.js +0 -10
- package/lib/controllers/messaging/environment.js +0 -11
- package/lib/middlewares/access.d.ts +6 -0
- package/lib/middlewares/access.d.ts.map +1 -1
- package/lib/middlewares/access.js +0 -5
- package/lib/middlewares/authentication.d.ts +7 -0
- package/lib/middlewares/authentication.d.ts.map +1 -1
- package/lib/middlewares/authentication.js +2 -5
- package/lib/middlewares/file.js +0 -1
- package/lib/routes/api/v1/logs.js +0 -7
- package/lib/routes/api/v1/report.js +0 -7
- package/lib/routes/api/v1/sse.js +2 -11
- package/lib/routes/messaging/index.js +0 -6
- package/lib/services/database.d.ts +17 -0
- package/lib/services/database.d.ts.map +1 -1
- package/lib/services/database.js +5 -19
- package/lib/services/express.js +1 -7
- package/lib/services/file/FileLibrary.d.ts +8 -0
- package/lib/services/file/FileLibrary.d.ts.map +1 -1
- package/lib/services/file/FileLibrary.js +0 -2
- package/lib/services/file/classes/Mimetyp.d.ts +12 -0
- package/lib/services/file/classes/Mimetyp.d.ts.map +1 -1
- package/lib/services/file/classes/Mimetyp.js +0 -41
- package/lib/services/file/constants/mimes.js +0 -1
- package/lib/services/logger.js +0 -5
- package/lib/services/rabitmq.d.ts +26 -0
- package/lib/services/rabitmq.d.ts.map +1 -1
- package/lib/services/rabitmq.js +7 -13
- package/lib/services/redis.d.ts +7 -0
- package/lib/services/redis.d.ts.map +1 -1
- package/lib/services/redis.js +2 -5
- package/lib/services/security.d.ts +52 -0
- package/lib/services/security.d.ts.map +1 -1
- package/lib/services/security.js +0 -3
- package/lib/services/sequelize.d.ts +8 -0
- package/lib/services/sequelize.d.ts.map +1 -1
- package/lib/services/sequelize.js +3 -16
- package/lib/services/socket.d.ts +7 -0
- package/lib/services/socket.d.ts.map +1 -1
- package/lib/services/socket.js +1 -4
- package/lib/services/task/queue/QueueService.js +0 -1
- package/lib/services/task/queue/QueueTask.js +0 -16
- package/lib/services/task/scheduler/SchedulerTask.d.ts +16 -0
- package/lib/services/task/scheduler/SchedulerTask.d.ts.map +1 -1
- package/lib/services/task/scheduler/SchedulerTask.js +0 -9
- package/lib/services/test.js +0 -2
- package/lib/tasks/queue/teste.js +0 -20
- package/lib/tasks/schedule/teste.js +0 -16
- package/lib/utils/api.d.ts +157 -0
- package/lib/utils/api.d.ts.map +1 -1
- package/lib/utils/api.js +0 -10
- package/lib/utils/database.js +0 -18
- package/lib/utils/logger-transport.js +0 -7
- package/lib/utils/phone.d.ts +171 -0
- package/lib/utils/phone.d.ts.map +1 -1
- package/lib/utils/phone.js +0 -27
- package/package.json +1 -1
package/lib/services/redis.d.ts
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
import Service from '../app/classes/service';
|
2
2
|
import { RedisCache } from '../app/classes/cache';
|
3
|
+
/**
|
4
|
+
* Serviço de cache
|
5
|
+
*
|
6
|
+
* @class RedisService
|
7
|
+
* @extends {Service}
|
8
|
+
* @implements {IService}
|
9
|
+
*/
|
3
10
|
declare class RedisService extends Service {
|
4
11
|
private client;
|
5
12
|
private isReconnecting;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/services/redis.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/services/redis.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD;;;;;;GAMG;AACH,cAAM,YAAa,SAAQ,OAAO;IAChC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAS;IAEf,aAAa;IAOb,OAAO;IAMP,WAAW;YAMV,OAAO;IA2BrB,OAAO,CAAC,iBAAiB;IAQnB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGnD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI7C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGtC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM;CAGlC;AAED,eAAe,YAAY,CAAC"}
|
package/lib/services/redis.js
CHANGED
@@ -19,9 +19,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
19
19
|
*/
|
20
20
|
class RedisService extends _service.default {
|
21
21
|
client;
|
22
|
-
isReconnecting = false;
|
23
|
-
isConnected = false;
|
24
|
-
|
22
|
+
isReconnecting = false;
|
23
|
+
isConnected = false;
|
25
24
|
async onServiceInit() {
|
26
25
|
await super.onServiceInit();
|
27
26
|
this.startAttemptDelay = 5 * 1000;
|
@@ -65,8 +64,6 @@ class RedisService extends _service.default {
|
|
65
64
|
this.isConnected = false;
|
66
65
|
});
|
67
66
|
}
|
68
|
-
|
69
|
-
//* Common
|
70
67
|
async setValue(key, value) {
|
71
68
|
await this.client.set(key, value);
|
72
69
|
}
|
@@ -15,14 +15,66 @@ declare class SecurityService extends Service {
|
|
15
15
|
}>;
|
16
16
|
loadServicePublicKey(): Promise<void>;
|
17
17
|
loadKeyByStr(data: string): Promise<JWK.Key>;
|
18
|
+
/**
|
19
|
+
* Chave privada emitida por este serviço
|
20
|
+
*
|
21
|
+
* @memberof SecurityService
|
22
|
+
*/
|
18
23
|
getPrivateKey(): JWK.Key;
|
24
|
+
/**
|
25
|
+
* Chave publica emitida por este serviço
|
26
|
+
*
|
27
|
+
* @memberof SecurityService
|
28
|
+
*/
|
19
29
|
getPublicKey(): JWK.Key;
|
30
|
+
/**
|
31
|
+
* Chave publica emitida pelo serviço do hub se sessões
|
32
|
+
*
|
33
|
+
* @memberof SecurityService
|
34
|
+
*/
|
20
35
|
getServicePublicKey(): JWK.Key;
|
36
|
+
/**
|
37
|
+
* Criptografía utilizando chave publica
|
38
|
+
*
|
39
|
+
* @param {TSignData} data
|
40
|
+
* @memberof SecurityService
|
41
|
+
*/
|
21
42
|
encrypt(data: TSignData, publicKey: JWK.Key): Promise<string | false>;
|
43
|
+
/**
|
44
|
+
* Descriptografia utilizando chave privada
|
45
|
+
*
|
46
|
+
* @param {string} encryptedData
|
47
|
+
* @memberof SecurityService
|
48
|
+
*/
|
22
49
|
decrypt<T = any>(encryptedData: string, privateKey: JWK.Key): Promise<T | false>;
|
50
|
+
/**
|
51
|
+
* Realiza uma assinatura usando chave privada
|
52
|
+
*
|
53
|
+
* @param {TSignData} data
|
54
|
+
* @memberof SecurityService
|
55
|
+
*/
|
23
56
|
sign(data: TSignData, privateKey: JWK.Key): Promise<string>;
|
57
|
+
/**
|
58
|
+
* Verifica assinatura utilizando chave publica
|
59
|
+
*
|
60
|
+
* @param {string} signature
|
61
|
+
* @memberof SecurityService
|
62
|
+
*/
|
24
63
|
verifySignature<T = any>(signature: string, publicKey: JWK.Key): Promise<(TSignData<T> & Record<string, any>) | false>;
|
64
|
+
/**
|
65
|
+
* Criptografía de dados utilizando um buffer automático ao invés de chaves
|
66
|
+
*
|
67
|
+
* @param {(string | object)} data
|
68
|
+
* @memberof SecurityService
|
69
|
+
*/
|
25
70
|
simpleEncrypt(data: string | object): [string, Buffer];
|
71
|
+
/**
|
72
|
+
* Utiliza um buffer para descriptografar dados criptografados através de simpleEncrypt()
|
73
|
+
*
|
74
|
+
* @param {string} data
|
75
|
+
* @param {Buffer} key
|
76
|
+
* @memberof SecurityService
|
77
|
+
*/
|
26
78
|
simpleDecrypt(data: string, key: Buffer): Buffer | false;
|
27
79
|
}
|
28
80
|
export default SecurityService;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/services/security.ts"],"names":[],"mappings":"AAEA,OAAO,EAAO,GAAG,EAAO,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAQ,OAAO,EAAgB,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,cAAM,eAAgB,SAAQ,OAAO;IACnC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,gBAAgB,CAAU;IAErB,OAAO;IAWpB,OAAO,CAAC,UAAU;YAMJ,cAAc;YAad,aAAa;IAMd,cAAc;;;;IASd,oBAAoB;IAUpB,YAAY,CAAC,IAAI,EAAE,MAAM;
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/services/security.ts"],"names":[],"mappings":"AAEA,OAAO,EAAO,GAAG,EAAO,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAQ,OAAO,EAAgB,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,cAAM,eAAgB,SAAQ,OAAO;IACnC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,gBAAgB,CAAU;IAErB,OAAO;IAWpB,OAAO,CAAC,UAAU;YAMJ,cAAc;YAad,aAAa;IAMd,cAAc;;;;IASd,oBAAoB;IAUpB,YAAY,CAAC,IAAI,EAAE,MAAM;IAItC;;;;OAIG;IACI,aAAa;IAGpB;;;;OAIG;IACI,YAAY;IAGnB;;;;OAIG;IACI,mBAAmB;IAG1B;;;;;OAKG;IACU,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG;IAmBxD;;;;;OAKG;IACU,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC;IAY7F;;;;;OAKG;IACU,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG;IAmBtD;;;;;OAKG;IACU,eAAe,CAAC,CAAC,GAAG,GAAG,EAClC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,CAAC,GAAG,GACjB,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAWxD;;;;;OAKG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAa7D;;;;;;OAMG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK;CAgBhE;AAED,eAAe,eAAe,CAAC"}
|
package/lib/services/security.js
CHANGED
@@ -28,8 +28,6 @@ class SecurityService extends _app.Service {
|
|
28
28
|
recursive: true
|
29
29
|
});
|
30
30
|
}
|
31
|
-
|
32
|
-
/* Key Pair */
|
33
31
|
async loadPrivateKey() {
|
34
32
|
const privateKeyPath = _path.default.join(_app.Core.settings.getAuthentication().certPath, 'private_key.pem');
|
35
33
|
if (fs.existsSync(privateKeyPath)) {
|
@@ -135,7 +133,6 @@ class SecurityService extends _app.Service {
|
|
135
133
|
const decrypted = await _nodeJose.JWE.createDecrypt(privateKey).decrypt(encryptedData);
|
136
134
|
const result = decrypted.plaintext.toString();
|
137
135
|
const parserd = JSON.parse(result);
|
138
|
-
// Tenta parsear como JSON se for objeto
|
139
136
|
return parserd.payload;
|
140
137
|
} catch (error) {
|
141
138
|
new _app.ErrorHandler('Não foi possível descriptografar os dados', error);
|
@@ -3,6 +3,14 @@ import { ServiceModel } from '../app';
|
|
3
3
|
import Service from '../app/classes/service';
|
4
4
|
import { EnvDBHost } from '../models';
|
5
5
|
import { StaticServiceModel } from '../contracts';
|
6
|
+
/**
|
7
|
+
* Serviço de gerênciamento do banco de dados
|
8
|
+
*
|
9
|
+
* @class SequelizeService
|
10
|
+
* @extends {Service}
|
11
|
+
* @deprecated Use {@link DatabaseService}
|
12
|
+
* @implements {IService}
|
13
|
+
*/
|
6
14
|
declare class SequelizeService extends Service {
|
7
15
|
serviceDB: Sequelize;
|
8
16
|
models: StaticServiceModel<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;AAIpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,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;AAKlD;;;;;;;GAOG;AACH,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;IAkB/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"}
|
@@ -30,11 +30,9 @@ class SequelizeService extends _service.default {
|
|
30
30
|
initializedModels;
|
31
31
|
initializingdModels;
|
32
32
|
relations;
|
33
|
-
isReconnecting = false;
|
34
|
-
isMasterConnected = false;
|
35
|
-
isServiceConnected = false;
|
36
|
-
|
37
|
-
//# Initialization
|
33
|
+
isReconnecting = false;
|
34
|
+
isMasterConnected = false;
|
35
|
+
isServiceConnected = false;
|
38
36
|
async onServiceInit() {
|
39
37
|
await super.onServiceInit();
|
40
38
|
if (!this.models) throw new Error('Models are requireds! Call registerModels(modelsArray)');
|
@@ -81,10 +79,7 @@ class SequelizeService extends _service.default {
|
|
81
79
|
return false;
|
82
80
|
}
|
83
81
|
}
|
84
|
-
|
85
|
-
// #Database
|
86
82
|
async getDB(tenantId) {
|
87
|
-
/* master or service */
|
88
83
|
if (tenantId == _app.Core.settings.getDatabase().main.database) {
|
89
84
|
return _database.mainDb;
|
90
85
|
}
|
@@ -105,7 +100,6 @@ class SequelizeService extends _service.default {
|
|
105
100
|
try {
|
106
101
|
const [results] = await connection.query(`SHOW DATABASES LIKE '${dbQueryName}';`);
|
107
102
|
if (results.length === 0) {
|
108
|
-
// Se o banco de dados não existir, cria-o
|
109
103
|
await connection.query(`CREATE DATABASE ${dbQueryName};`);
|
110
104
|
this.log(`Database "${dbQueryName}" has been created.`);
|
111
105
|
return true;
|
@@ -194,8 +188,6 @@ class SequelizeService extends _service.default {
|
|
194
188
|
getDBName(envToken) {
|
195
189
|
return `${_app.Core.settings.getDatabase().main.database}_${envToken}`;
|
196
190
|
}
|
197
|
-
|
198
|
-
//#Connection
|
199
191
|
reconnect(db, attempts = 2) {
|
200
192
|
db.sync().then(() => {
|
201
193
|
this.log('Database pronto', 'success');
|
@@ -266,11 +258,8 @@ class SequelizeService extends _service.default {
|
|
266
258
|
});
|
267
259
|
});
|
268
260
|
}
|
269
|
-
|
270
|
-
//# Common
|
271
261
|
async getRelation(tenantId) {
|
272
262
|
let relation;
|
273
|
-
/* fetch relation */
|
274
263
|
if (this.relations.get(tenantId)) {
|
275
264
|
relation = this.relations.get(tenantId);
|
276
265
|
} else {
|
@@ -285,8 +274,6 @@ class SequelizeService extends _service.default {
|
|
285
274
|
}
|
286
275
|
return relation;
|
287
276
|
}
|
288
|
-
|
289
|
-
// #Entity
|
290
277
|
async getModel(model, tenantId) {
|
291
278
|
try {
|
292
279
|
const modelKey = `${tenantId}#${model.name}`;
|
package/lib/services/socket.d.ts
CHANGED
@@ -4,6 +4,13 @@ import { Server } from 'socket.io';
|
|
4
4
|
import Service from '../app/classes/service';
|
5
5
|
import SocketEventHandler from '../app/classes/socket/eventhandler';
|
6
6
|
import SocketClientHandler from '../app/classes/socket/clienthandler';
|
7
|
+
/**
|
8
|
+
* Serviço de gerênciamento de comunicação WS/WSS Socket
|
9
|
+
*
|
10
|
+
* @class SocketIOService
|
11
|
+
* @extends {Service}
|
12
|
+
* @implements {IService}
|
13
|
+
*/
|
7
14
|
declare class SocketIOService extends Service {
|
8
15
|
server: Server;
|
9
16
|
private mainRouter;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/services/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,kBAAkB,MAAM,oCAAoC,CAAC;AAMpE,OAAO,mBAAmB,MAAM,qCAAqC,CAAC;
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/services/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,kBAAkB,MAAM,oCAAoC,CAAC;AAMpE,OAAO,mBAAmB,MAAM,qCAAqC,CAAC;AAGtE;;;;;;GAMG;AACH,cAAM,eAAgB,SAAQ,OAAO;IAC5B,MAAM,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,cAAc,CAAsC;IAE/C,oBAAoB;IAOpB,sBAAsB;YAcrB,YAAY;IA4C1B,OAAO,CAAC,UAAU;IAgCX,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,GAAE,WAAW,GAAG,mBAAqC;IAM9F,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE;IAIlD,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,OAAO,mBAAmB,CAAC,EAAE;YAIxD,gBAAgB;CAY/B;AAED,eAAe,eAAe,CAAC"}
|
package/lib/services/socket.js
CHANGED
@@ -26,14 +26,11 @@ class SocketIOService extends _service.default {
|
|
26
26
|
clientHandlers = [];
|
27
27
|
async onServiceClusterInit() {
|
28
28
|
await super.onServiceClusterInit();
|
29
|
-
if (!this.mainRouter) throw new Error('Need router');
|
30
|
-
|
29
|
+
if (!this.mainRouter) throw new Error('Need router');
|
31
30
|
this.eventhandlers = new Map();
|
32
31
|
}
|
33
32
|
async onExodusClusterStarted() {
|
34
33
|
await super.onExodusClusterStarted();
|
35
|
-
//! este depende de ExpressService para iniciar, por isso está aqui
|
36
|
-
|
37
34
|
try {
|
38
35
|
this.createSocket(_express.default.getService().getHttpServer());
|
39
36
|
await this.registerHandlers();
|
@@ -9,7 +9,6 @@ var _app = require("../../../app");
|
|
9
9
|
var _core = require("../../../contracts/core");
|
10
10
|
var _TaskServiceBase = _interopRequireDefault(require("../TaskServiceBase"));
|
11
11
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
12
|
-
//* Queue
|
13
12
|
class QueueTaskService extends _TaskServiceBase.default {
|
14
13
|
connection;
|
15
14
|
async onStart() {
|
@@ -17,8 +17,6 @@ class QueueTask extends _app.Singleton {
|
|
17
17
|
name;
|
18
18
|
active;
|
19
19
|
concurrency;
|
20
|
-
|
21
|
-
//# Init
|
22
20
|
async taskInit() {
|
23
21
|
this.rECom = new _communication.default(this.constructor.name);
|
24
22
|
this.rECom.on(_service.eEventCommunication.RECEIVED_CLUSTER_MESSAGE, this.onTaskMasterReceived.bind(this));
|
@@ -35,8 +33,6 @@ class QueueTask extends _app.Singleton {
|
|
35
33
|
this.onTaskClusterInit();
|
36
34
|
}
|
37
35
|
}
|
38
|
-
|
39
|
-
//# Getters
|
40
36
|
getQueue() {
|
41
37
|
return this.queue;
|
42
38
|
}
|
@@ -55,16 +51,12 @@ class QueueTask extends _app.Singleton {
|
|
55
51
|
getConcurrency() {
|
56
52
|
return this.concurrency;
|
57
53
|
}
|
58
|
-
|
59
|
-
//# Setters
|
60
54
|
setQueue(queue) {
|
61
55
|
this.queue = queue;
|
62
56
|
}
|
63
57
|
setWorker(worker) {
|
64
58
|
this.worker = worker;
|
65
59
|
}
|
66
|
-
|
67
|
-
//# Basic Handlers
|
68
60
|
execute(job, token) {
|
69
61
|
this.onExecute(job, token);
|
70
62
|
if (this.isCluster()) {
|
@@ -85,13 +77,10 @@ class QueueTask extends _app.Singleton {
|
|
85
77
|
}
|
86
78
|
await this.queue.add(this.getName(), data);
|
87
79
|
this.onNewJob(data);
|
88
|
-
// this.log('Nova tarefa disponível.', 'comment');
|
89
80
|
}
|
90
81
|
static async addJob(data) {
|
91
82
|
this.singleton().addJob(data);
|
92
83
|
}
|
93
|
-
|
94
|
-
//# Events
|
95
84
|
onTaskInit() {
|
96
85
|
return;
|
97
86
|
}
|
@@ -101,14 +90,12 @@ class QueueTask extends _app.Singleton {
|
|
101
90
|
onTaskMasterInit() {
|
102
91
|
return;
|
103
92
|
}
|
104
|
-
//----------------------------------------------------------------------------
|
105
93
|
onTaskMasterReceived(_worker, _eventKey, _data) {
|
106
94
|
return;
|
107
95
|
}
|
108
96
|
onTaskClusterReceived(_eventKey, _data) {
|
109
97
|
return;
|
110
98
|
}
|
111
|
-
//----------------------------------------------------------------------------
|
112
99
|
onClusterExecute(_job, _token) {
|
113
100
|
return;
|
114
101
|
}
|
@@ -118,12 +105,9 @@ class QueueTask extends _app.Singleton {
|
|
118
105
|
onExecute(_job, _token) {
|
119
106
|
return;
|
120
107
|
}
|
121
|
-
//----------------------------------------------------------------------------
|
122
108
|
onNewJob(_data) {
|
123
109
|
return;
|
124
110
|
}
|
125
|
-
|
126
|
-
//# Managed
|
127
111
|
sendTaskToCluster(clusterId, event, data) {
|
128
112
|
this.rECom.sendMessageToCluster(clusterId, event, data);
|
129
113
|
}
|
@@ -17,7 +17,23 @@ declare abstract class ScheduleTask extends Singleton {
|
|
17
17
|
protected name: string;
|
18
18
|
protected side: eExecutionSide;
|
19
19
|
protected job: Job;
|
20
|
+
/**
|
21
|
+
* Deve ser executada imediatamente e depois agendada?
|
22
|
+
*
|
23
|
+
* @protected
|
24
|
+
* @type {boolean}
|
25
|
+
* @memberof ScheduleTask
|
26
|
+
*/
|
20
27
|
protected immediate: boolean;
|
28
|
+
/**
|
29
|
+
* Esta task deve ficar ativa ou parada após a execução?
|
30
|
+
* Tenha em mente que se/também immediate = true, esta task será executada apenas na
|
31
|
+
* inicialização do Exodus
|
32
|
+
*
|
33
|
+
* @protected
|
34
|
+
* @type {boolean}
|
35
|
+
* @memberof ScheduleTask
|
36
|
+
*/
|
21
37
|
protected persistent: boolean;
|
22
38
|
execute(): Promise<void>;
|
23
39
|
taskInit(): Promise<void>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SchedulerTask.d.ts","sourceRoot":"","sources":["../../../../src/services/task/scheduler/SchedulerTask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;CACf,CAAC;AAEF,uBAAe,YAAa,SAAQ,SAAS;IAC3C,OAAO,CAAC,KAAK,CAA6B;IAC1C,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAC1D,SAAS,CAAC,uBAAuB,EAAE,MAAM,CAAK;IAC9C,SAAS,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAa;IAC/D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAAC;IAC/C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC;IAC/B,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;
|
1
|
+
{"version":3,"file":"SchedulerTask.d.ts","sourceRoot":"","sources":["../../../../src/services/task/scheduler/SchedulerTask.ts"],"names":[],"mappings":"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"}
|
@@ -73,8 +73,6 @@ class ScheduleTask extends _app.Singleton {
|
|
73
73
|
sendToTaskMaster(event, data) {
|
74
74
|
this.rECom.sendToServiceMaster(event, data);
|
75
75
|
}
|
76
|
-
|
77
|
-
//# Muted methods
|
78
76
|
onTaskInit() {
|
79
77
|
return;
|
80
78
|
}
|
@@ -119,8 +117,6 @@ class ScheduleTask extends _app.Singleton {
|
|
119
117
|
this.sendTaskWorkToCluster(workId, workData);
|
120
118
|
}
|
121
119
|
}
|
122
|
-
|
123
|
-
//# Cluster
|
124
120
|
sendTaskWorkToMaster(workId, workData) {
|
125
121
|
this.sendToTaskMaster('work.add', {
|
126
122
|
workId,
|
@@ -143,8 +139,6 @@ class ScheduleTask extends _app.Singleton {
|
|
143
139
|
onTaskClusterReceivedWork(_eventKey, _data) {
|
144
140
|
return;
|
145
141
|
}
|
146
|
-
|
147
|
-
//# Master
|
148
142
|
taskMasterReceived(worker, eventKey, data) {
|
149
143
|
switch (eventKey) {
|
150
144
|
case 'work.add':
|
@@ -192,14 +186,11 @@ class ScheduleTask extends _app.Singleton {
|
|
192
186
|
}
|
193
187
|
onClusterDown(_, worker) {
|
194
188
|
if (this.registeredClusters.has(worker.id)) {
|
195
|
-
// console.log('removendo cluster da lista de registrados');
|
196
189
|
this.registeredClusters.delete(worker.id);
|
197
190
|
}
|
198
191
|
}
|
199
192
|
taskClusterRegistered(_worker) {
|
200
193
|
if (!this.registeredClusters.has(_worker.id)) {
|
201
|
-
// console.log('registrando novo cluster', _worker.id);
|
202
|
-
|
203
194
|
this.registeredClusters.set(_worker.id, true);
|
204
195
|
}
|
205
196
|
this.onTaskClusterRegistered(_worker);
|
package/lib/services/test.js
CHANGED
@@ -6,8 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
exports.default = void 0;
|
7
7
|
var _service = _interopRequireDefault(require("../app/classes/service"));
|
8
8
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
9
|
-
// import 'express-async-errors';
|
10
|
-
|
11
9
|
class TestService extends _service.default {
|
12
10
|
async onServiceClusterInit() {
|
13
11
|
console.log('iniciado no cluster');
|
package/lib/tasks/queue/teste.js
CHANGED
@@ -1,21 +1 @@
|
|
1
|
-
/* import { Job } from 'bullmq';
|
2
|
-
import { QueueTask } from '../../services';
|
3
|
-
import { eExecutionSide } from '../../contracts/core';
|
4
|
-
|
5
|
-
class TestTaskQueue extends QueueTask<string> {
|
6
|
-
getName(): string {
|
7
|
-
return 'Teste Job Queue';
|
8
|
-
}
|
9
|
-
|
10
|
-
async onTaskInit(): Promise<void> {
|
11
|
-
this.side = eExecutionSide.ANY;
|
12
|
-
}
|
13
|
-
|
14
|
-
async onExecute(_job: Job<string, any, string>, _token?: string): Promise<any> {
|
15
|
-
this.log('this job queue handled');
|
16
|
-
}
|
17
|
-
}
|
18
|
-
|
19
|
-
export default TestTaskQueue;
|
20
|
-
*/
|
21
1
|
"use strict";
|
@@ -15,22 +15,10 @@ class TestTaskSchedule extends _services.ScheduleTask {
|
|
15
15
|
getCronTask() {
|
16
16
|
return _contansts.eScheduleTaskInterval.DEFAULT;
|
17
17
|
}
|
18
|
-
/* async onClusterExecute() {
|
19
|
-
this.log('this job handled');
|
20
|
-
process.exit(0);
|
21
|
-
} */
|
22
18
|
async onMasterExecute() {
|
23
|
-
// console.log('sending...');
|
24
|
-
// this.sendTaskWorkToCluster('idworkd12344', 'testeeeeee');
|
25
19
|
this.log('this job handled');
|
26
20
|
process.exit(0);
|
27
21
|
}
|
28
|
-
/* async onTaskClusterInit() {
|
29
|
-
setTimeout(() => {
|
30
|
-
exit();
|
31
|
-
}, 5000);
|
32
|
-
} */
|
33
|
-
|
34
22
|
addTaskWork(workId, workData) {
|
35
23
|
if (this.isCluster()) {
|
36
24
|
this.sendTaskWorkToMaster(workId, workData);
|
@@ -38,16 +26,12 @@ class TestTaskSchedule extends _services.ScheduleTask {
|
|
38
26
|
this.sendTaskWorkToCluster(workId, workData);
|
39
27
|
}
|
40
28
|
}
|
41
|
-
|
42
|
-
//# Cluster
|
43
29
|
onTaskClusterReceived(eventKey, data) {
|
44
30
|
return;
|
45
31
|
}
|
46
32
|
onTaskClusterReceivedWork(eventKey, data) {
|
47
33
|
console.log('novo trabalho recebido neste cluster', data);
|
48
34
|
}
|
49
|
-
|
50
|
-
//# Master
|
51
35
|
onTaskMasterReceived(worker, eventKey, data) {
|
52
36
|
return;
|
53
37
|
}
|
package/lib/utils/api.d.ts
CHANGED
@@ -1,15 +1,172 @@
|
|
1
1
|
import { AxiosHeaders, AxiosInstance, Method } from 'axios';
|
2
2
|
import { IApiResponse } from '../contracts/http';
|
3
|
+
/**
|
4
|
+
* Classe abstrata base para criação de clientes HTTP usando Axios.
|
5
|
+
*
|
6
|
+
* Esta classe fornece uma estrutura comum para realizar requisições HTTP
|
7
|
+
* com tratamento de erros padronizado, validação de status customizável
|
8
|
+
* e diferentes tipos de requisições (interna, externa, direta).
|
9
|
+
*
|
10
|
+
* @example
|
11
|
+
* ```typescript
|
12
|
+
* class MyApiClient extends Api {
|
13
|
+
* host = 'https://api.example.com';
|
14
|
+
* headers = { 'Authorization': 'Bearer token' };
|
15
|
+
*
|
16
|
+
* validateStatus(status: number): boolean {
|
17
|
+
* return status >= 200 && status < 300;
|
18
|
+
* }
|
19
|
+
* }
|
20
|
+
*
|
21
|
+
* const client = new MyApiClient();
|
22
|
+
* const response = await client.request('/users', 'GET');
|
23
|
+
* ```
|
24
|
+
*
|
25
|
+
* @abstract
|
26
|
+
* @class Api
|
27
|
+
* @version 1.0.0
|
28
|
+
* @author Exodus Framework
|
29
|
+
*/
|
3
30
|
declare abstract class Api {
|
31
|
+
/** Instância do Axios configurada */
|
4
32
|
axios: AxiosInstance;
|
33
|
+
/** URL base para as requisições (deve ser implementado nas classes filhas) */
|
5
34
|
abstract host: string;
|
35
|
+
/** Headers padrão para as requisições (deve ser implementado nas classes filhas) */
|
6
36
|
abstract headers: Record<string, any>;
|
37
|
+
/**
|
38
|
+
* Construtor da classe Api.
|
39
|
+
* Inicializa automaticamente a instância do Axios.
|
40
|
+
*/
|
7
41
|
constructor();
|
42
|
+
/**
|
43
|
+
* Inicializa a instância do Axios com configurações padrão.
|
44
|
+
*
|
45
|
+
* @protected
|
46
|
+
* @async
|
47
|
+
* @returns Promise<void>
|
48
|
+
*
|
49
|
+
* @example
|
50
|
+
* ```typescript
|
51
|
+
* // Chamado automaticamente no constructor
|
52
|
+
* await this.init();
|
53
|
+
* ```
|
54
|
+
*/
|
8
55
|
init(): Promise<void>;
|
56
|
+
/**
|
57
|
+
* Método abstrato para validação de status HTTP.
|
58
|
+
* Deve ser implementado nas classes filhas para definir quais status são considerados válidos.
|
59
|
+
*
|
60
|
+
* @abstract
|
61
|
+
* @param status - Código de status HTTP da resposta
|
62
|
+
* @returns true se o status é válido, false caso contrário
|
63
|
+
*
|
64
|
+
* @example
|
65
|
+
* ```typescript
|
66
|
+
* validateStatus(status: number): boolean {
|
67
|
+
* return status >= 200 && status < 400; // Aceita 2xx e 3xx
|
68
|
+
* }
|
69
|
+
* ```
|
70
|
+
*/
|
9
71
|
abstract validateStatus(status: number): boolean;
|
72
|
+
/**
|
73
|
+
* Realiza uma requisição HTTP e retorna apenas os dados da resposta.
|
74
|
+
*
|
75
|
+
* @template T - Tipo dos dados esperados na resposta
|
76
|
+
* @param endpoint - Endpoint da API (será concatenado com host)
|
77
|
+
* @param method - Método HTTP (GET, POST, PUT, DELETE, etc.)
|
78
|
+
* @param data - Dados para envio no corpo da requisição (opcional)
|
79
|
+
* @param params - Parâmetros de query string (opcional)
|
80
|
+
* @param headers - Headers adicionais para a requisição (opcional)
|
81
|
+
* @returns Promise com os dados da resposta ou undefined em caso de erro
|
82
|
+
*
|
83
|
+
* @example
|
84
|
+
* ```typescript
|
85
|
+
* // GET request
|
86
|
+
* const users = await this.request<User[]>('/users', 'GET');
|
87
|
+
*
|
88
|
+
* // POST request com dados
|
89
|
+
* const newUser = await this.request<User>('/users', 'POST', {
|
90
|
+
* name: 'João',
|
91
|
+
* email: 'joao@example.com'
|
92
|
+
* });
|
93
|
+
*
|
94
|
+
* // GET com parâmetros
|
95
|
+
* const user = await this.request<User>('/users', 'GET', null, { id: 123 });
|
96
|
+
* ```
|
97
|
+
*/
|
10
98
|
request<T>(endpoint: string, method: Method, data?: any, params?: any, headers?: AxiosHeaders): Promise<IApiResponse<T> | import("axios").AxiosResponse<T, any, {}>>;
|
99
|
+
/**
|
100
|
+
* Realiza uma requisição HTTP e retorna a resposta completa do Axios.
|
101
|
+
*
|
102
|
+
* Este método é útil quando você precisa acessar headers, status code,
|
103
|
+
* ou outras propriedades da resposta além dos dados.
|
104
|
+
*
|
105
|
+
* @template T - Tipo dos dados esperados na resposta
|
106
|
+
* @param endpoint - Endpoint da API (será concatenado com host)
|
107
|
+
* @param method - Método HTTP (GET, POST, PUT, DELETE, etc.)
|
108
|
+
* @param data - Dados para envio no corpo da requisição (opcional)
|
109
|
+
* @param params - Parâmetros de query string (opcional)
|
110
|
+
* @param headers - Headers adicionais para a requisição (opcional)
|
111
|
+
* @returns Promise com a resposta completa do Axios ou undefined em caso de erro
|
112
|
+
*
|
113
|
+
* @example
|
114
|
+
* ```typescript
|
115
|
+
* const response = await this.requestDirect<User>('/users/1', 'GET');
|
116
|
+
* console.log(response.status); // 200
|
117
|
+
* console.log(response.headers); // Headers da resposta
|
118
|
+
* console.log(response.data); // Dados do usuário
|
119
|
+
* ```
|
120
|
+
*/
|
11
121
|
requestDirect<T>(endpoint: string, method: Method, data?: any, params?: any, headers?: AxiosHeaders): Promise<import("axios").AxiosResponse<IApiResponse<T>, any, {}> | import("axios").AxiosResponse<T, any, {}>>;
|
122
|
+
/**
|
123
|
+
* Realiza uma requisição HTTP para APIs externas.
|
124
|
+
*
|
125
|
+
* Este método é otimizado para chamadas a APIs de terceiros,
|
126
|
+
* não utilizando a interface IApiResponse padrão do framework.
|
127
|
+
*
|
128
|
+
* @template T - Tipo dos dados esperados na resposta
|
129
|
+
* @param endpoint - Endpoint da API (será concatenado com host)
|
130
|
+
* @param method - Método HTTP (GET, POST, PUT, DELETE, etc.)
|
131
|
+
* @param data - Dados para envio no corpo da requisição (opcional)
|
132
|
+
* @param params - Parâmetros de query string (opcional)
|
133
|
+
* @param headers - Headers adicionais para a requisição (opcional)
|
134
|
+
* @returns Promise com a resposta da API externa ou undefined em caso de erro
|
135
|
+
*
|
136
|
+
* @example
|
137
|
+
* ```typescript
|
138
|
+
* // Chamada para API externa (ex: GitHub)
|
139
|
+
* const githubUser = await this.requestExternal<GitHubUser>(
|
140
|
+
* '/users/octocat',
|
141
|
+
* 'GET'
|
142
|
+
* );
|
143
|
+
*
|
144
|
+
* // API externa com autenticação
|
145
|
+
* const data = await this.requestExternal<ExternalData>(
|
146
|
+
* '/api/data',
|
147
|
+
* 'GET',
|
148
|
+
* null,
|
149
|
+
* null,
|
150
|
+
* { 'X-API-Key': 'external-api-key' }
|
151
|
+
* );
|
152
|
+
* ```
|
153
|
+
*/
|
12
154
|
requestExternal<T>(endpoint: string, method: Method, data?: any, params?: any, headers?: AxiosHeaders): Promise<import("axios").AxiosResponse<T, any, {}>>;
|
155
|
+
/**
|
156
|
+
* Gera um ID de segurança lógica baseado na data atual.
|
157
|
+
*
|
158
|
+
* Este método cria um identificador único baseado na data atual,
|
159
|
+
* útil para implementações de segurança ou cache temporal.
|
160
|
+
*
|
161
|
+
* @protected
|
162
|
+
* @returns String contendo o ID de segurança lógica
|
163
|
+
*
|
164
|
+
* @example
|
165
|
+
* ```typescript
|
166
|
+
* const securityId = this.getLogicalSecurityId();
|
167
|
+
* console.log(securityId); // "1695513600000" (exemplo)
|
168
|
+
* ```
|
169
|
+
*/
|
13
170
|
protected getLogicalSecurityId(): string;
|
14
171
|
}
|
15
172
|
export default Api;
|