exodus-framework 2.1.1031 → 2.1.1033

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 (108) hide show
  1. package/lib/app/classes/broadcast.d.ts +6 -0
  2. package/lib/app/classes/broadcast.d.ts.map +1 -1
  3. package/lib/app/classes/broadcast.js +1 -3
  4. package/lib/app/classes/communication.d.ts +17 -0
  5. package/lib/app/classes/communication.d.ts.map +1 -1
  6. package/lib/app/classes/communication.js +0 -8
  7. package/lib/app/classes/event.d.ts +6 -0
  8. package/lib/app/classes/event.d.ts.map +1 -1
  9. package/lib/app/classes/managed.d.ts +7 -0
  10. package/lib/app/classes/managed.d.ts.map +1 -1
  11. package/lib/app/classes/managed.js +0 -20
  12. package/lib/app/classes/service.d.ts +126 -0
  13. package/lib/app/classes/service.d.ts.map +1 -1
  14. package/lib/app/classes/service.js +4 -9
  15. package/lib/app/classes/servicemodel.d.ts +7 -0
  16. package/lib/app/classes/servicemodel.d.ts.map +1 -1
  17. package/lib/app/classes/singleton.d.ts +9 -0
  18. package/lib/app/classes/singleton.d.ts.map +1 -1
  19. package/lib/app/classes/singleton.js +0 -1
  20. package/lib/app/classes/socket/clienthandler.js +0 -6
  21. package/lib/app/classes/socket/eventhandler.js +0 -6
  22. package/lib/app/classes/socket/ssehandler.d.ts +1 -1
  23. package/lib/app/classes/socket/ssehandler.d.ts.map +1 -1
  24. package/lib/app/classes/socket/ssehandler.js +19 -22
  25. package/lib/app/classes/system.d.ts +6 -0
  26. package/lib/app/classes/system.d.ts.map +1 -1
  27. package/lib/app/controller.d.ts +25 -0
  28. package/lib/app/controller.d.ts.map +1 -1
  29. package/lib/app/core.d.ts +9 -0
  30. package/lib/app/core.d.ts.map +1 -1
  31. package/lib/app/core.js +0 -6
  32. package/lib/app/error.js +0 -1
  33. package/lib/app/exodus.d.ts +7 -0
  34. package/lib/app/exodus.d.ts.map +1 -1
  35. package/lib/app/exodus.js +1 -30
  36. package/lib/app/settings.js +3 -14
  37. package/lib/contracts/communication/communication.js +4 -4
  38. package/lib/contracts/contansts.js +2 -2
  39. package/lib/contracts/core.js +1 -1
  40. package/lib/contracts/entity.js +2 -4
  41. package/lib/contracts/http.d.ts +17 -1
  42. package/lib/contracts/http.d.ts.map +1 -1
  43. package/lib/contracts/http.js +2 -2
  44. package/lib/contracts/messaging.d.ts +1 -1
  45. package/lib/contracts/messaging.d.ts.map +1 -1
  46. package/lib/contracts/messaging.js +2 -2
  47. package/lib/contracts/service.js +1 -1
  48. package/lib/contracts/socket.js +2 -2
  49. package/lib/controllers/api/file.js +0 -4
  50. package/lib/controllers/api/log.js +0 -1
  51. package/lib/controllers/api/report.js +0 -1
  52. package/lib/controllers/messaging/application.js +0 -10
  53. package/lib/controllers/messaging/environment.js +0 -11
  54. package/lib/middlewares/access.d.ts +6 -0
  55. package/lib/middlewares/access.d.ts.map +1 -1
  56. package/lib/middlewares/access.js +0 -5
  57. package/lib/middlewares/authentication.d.ts +7 -0
  58. package/lib/middlewares/authentication.d.ts.map +1 -1
  59. package/lib/middlewares/authentication.js +2 -5
  60. package/lib/middlewares/file.js +0 -1
  61. package/lib/routes/api/v1/logs.js +0 -7
  62. package/lib/routes/api/v1/report.js +0 -7
  63. package/lib/routes/api/v1/sse.js +2 -11
  64. package/lib/routes/messaging/index.js +0 -6
  65. package/lib/services/database.d.ts +17 -0
  66. package/lib/services/database.d.ts.map +1 -1
  67. package/lib/services/database.js +5 -19
  68. package/lib/services/express.js +1 -7
  69. package/lib/services/file/FileLibrary.d.ts +8 -0
  70. package/lib/services/file/FileLibrary.d.ts.map +1 -1
  71. package/lib/services/file/FileLibrary.js +0 -2
  72. package/lib/services/file/classes/Mimetyp.d.ts +12 -0
  73. package/lib/services/file/classes/Mimetyp.d.ts.map +1 -1
  74. package/lib/services/file/classes/Mimetyp.js +0 -41
  75. package/lib/services/file/constants/mimes.js +0 -1
  76. package/lib/services/logger.js +0 -5
  77. package/lib/services/rabitmq.d.ts +26 -0
  78. package/lib/services/rabitmq.d.ts.map +1 -1
  79. package/lib/services/rabitmq.js +7 -13
  80. package/lib/services/redis.d.ts +7 -0
  81. package/lib/services/redis.d.ts.map +1 -1
  82. package/lib/services/redis.js +2 -5
  83. package/lib/services/security.d.ts +52 -0
  84. package/lib/services/security.d.ts.map +1 -1
  85. package/lib/services/security.js +0 -3
  86. package/lib/services/sequelize.d.ts +8 -0
  87. package/lib/services/sequelize.d.ts.map +1 -1
  88. package/lib/services/sequelize.js +3 -16
  89. package/lib/services/socket.d.ts +7 -0
  90. package/lib/services/socket.d.ts.map +1 -1
  91. package/lib/services/socket.js +1 -4
  92. package/lib/services/task/queue/QueueService.js +0 -1
  93. package/lib/services/task/queue/QueueTask.js +0 -16
  94. package/lib/services/task/scheduler/SchedulerTask.d.ts +16 -0
  95. package/lib/services/task/scheduler/SchedulerTask.d.ts.map +1 -1
  96. package/lib/services/task/scheduler/SchedulerTask.js +0 -9
  97. package/lib/services/test.js +0 -2
  98. package/lib/tasks/queue/teste.js +0 -20
  99. package/lib/tasks/schedule/teste.js +0 -16
  100. package/lib/utils/api.d.ts +157 -0
  101. package/lib/utils/api.d.ts.map +1 -1
  102. package/lib/utils/api.js +0 -10
  103. package/lib/utils/database.js +0 -18
  104. package/lib/utils/logger-transport.js +0 -7
  105. package/lib/utils/phone.d.ts +171 -0
  106. package/lib/utils/phone.d.ts.map +1 -1
  107. package/lib/utils/phone.js +0 -27
  108. package/package.json +1 -1
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAc,MAAM,OAAO,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA6BjD,uBAAe,GAAG;IAEhB,KAAK,EAAE,aAAa,CAAC;IAGrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;;IAuBhC,IAAI;IA0BV,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IA4B1C,OAAO,CAAC,CAAC,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,YAAY;IAwClB,aAAa,CAAC,CAAC,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,YAAY;IAkDlB,eAAe,CAAC,CAAC,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,YAAY;IAiCxB,SAAS,CAAC,oBAAoB;CAI/B;AAED,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAc,MAAM,OAAO,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,uBAAe,GAAG;IAChB,qCAAqC;IACrC,KAAK,EAAE,aAAa,CAAC;IAErB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,oFAAoF;IACpF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEtC;;;OAGG;;IAKH;;;;;;;;;;;;OAYG;IACG,IAAI;IAWV;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,OAAO,CAAC,CAAC,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,YAAY;IAkBxB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,aAAa,CAAC,CAAC,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,YAAY;IAkBxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACG,eAAe,CAAC,CAAC,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,YAAY;IAkBxB;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,oBAAoB;CAI/B;AAED,eAAe,GAAG,CAAC"}
package/lib/utils/api.js CHANGED
@@ -36,17 +36,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
36
36
  * @author Exodus Framework
37
37
  */
38
38
  class Api {
39
- /** Instância do Axios configurada */
40
39
  axios;
41
-
42
- /** URL base para as requisições (deve ser implementado nas classes filhas) */
43
-
44
- /** Headers padrão para as requisições (deve ser implementado nas classes filhas) */
45
-
46
- /**
47
- * Construtor da classe Api.
48
- * Inicializa automaticamente a instância do Axios.
49
- */
50
40
  constructor() {
51
41
  this.init();
52
42
  }
@@ -57,7 +57,6 @@ function processCondition(cond, fieldName) {
57
57
  if (dialect === 'postgres') {
58
58
  simpleWhere[_sequelize.Op.iLike] = value;
59
59
  } else {
60
- // Para MariaDB/MySQL, usamos Sequelize.where com função LOWER
61
60
  return _sequelize.Sequelize.where(_sequelize.Sequelize.fn('LOWER', _sequelize.Sequelize.col(fieldName)), _sequelize.Op.like, `${value}`.toLowerCase());
62
61
  }
63
62
  } else {
@@ -71,7 +70,6 @@ function processCondition(cond, fieldName) {
71
70
  if (dialect === 'postgres') {
72
71
  simpleWhere[_sequelize.Op.notILike] = value;
73
72
  } else {
74
- // Para MariaDB/MySQL, usamos Sequelize.where com função LOWER
75
73
  return _sequelize.Sequelize.where(_sequelize.Sequelize.fn('LOWER', _sequelize.Sequelize.col(fieldName)), _sequelize.Op.notLike, `${value}`.toLowerCase());
76
74
  }
77
75
  } else {
@@ -103,24 +101,17 @@ function processDateCondition(key, cond) {
103
101
  if (cond.between !== undefined) {
104
102
  const start = cond.between[0];
105
103
  const end = cond.between[1];
106
-
107
- // console.log(start, end);
108
-
109
104
  let startDate = (0, _dateFns.parseISO)(start);
110
105
  if ((0, _dateFns.isValid)(startDate) && !hasTime(start)) {
111
- // console.log('Ajustando início do dia');
112
106
  startDate = (0, _dateFns.startOfDay)(startDate);
113
107
  }
114
108
  let endDate = (0, _dateFns.parseISO)(end);
115
109
  if ((0, _dateFns.isValid)(endDate) && !hasTime(end)) {
116
- // console.log('Ajustando fim do dia');
117
110
  endDate = (0, _dateFns.endOfDay)(endDate);
118
111
  }
119
112
  simpleWhere[1] = {
120
113
  [_sequelize.Op.between]: [startDate, endDate]
121
114
  };
122
-
123
- // console.log('Condição entre processada:', simpleWhere[1]);
124
115
  }
125
116
  if (cond.notBetween !== undefined) {
126
117
  simpleWhere[1] = {
@@ -139,8 +130,6 @@ function processDateCondition(key, cond) {
139
130
  }
140
131
  return simpleWhere;
141
132
  }
142
-
143
- // Função Principal para Processar Filtros
144
133
  function processFilters(filters) {
145
134
  if (!filters) return {};
146
135
  const where = {};
@@ -161,22 +150,15 @@ function processFilters(filters) {
161
150
  } else {
162
151
  const field = key;
163
152
  const isDate = condition.type && condition.type === 'DATE';
164
- // const isTime = condition.type && condition.type === 'TIME';
165
- // const isDateTime = condition.type && condition.type === 'DATETIME';
166
-
167
153
  if (isDate) {
168
154
  const [k, c] = processDateCondition(key, condition);
169
155
  where[k] = c;
170
156
  } else {
171
157
  const processedCondition = processCondition(condition, key);
172
-
173
- // Se retornar um Sequelize.where (case insensitive para MariaDB), precisamos tratar diferente
174
158
  if (processedCondition && typeof processedCondition === 'object' && processedCondition.comparator) {
175
- // É um Sequelize.where
176
159
  where[_sequelize.Op.and] = where[_sequelize.Op.and] || [];
177
160
  where[_sequelize.Op.and].push(processedCondition);
178
161
  } else {
179
- // Condição normal
180
162
  if (where[field]) {
181
163
  where[field] = {
182
164
  ...where[field],
@@ -9,18 +9,13 @@ var _path = _interopRequireDefault(require("path"));
9
9
  var _stream = require("stream");
10
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
11
  function _default(opts) {
12
- // garante a pasta existir
13
12
  const dir = _path.default.dirname(opts.destination);
14
13
  (0, _fs.mkdirSync)(dir, {
15
14
  recursive: true
16
15
  });
17
-
18
- // abre o arquivo em modo append
19
16
  const stream = (0, _fs.createWriteStream)(opts.destination, {
20
17
  flags: 'a'
21
18
  });
22
-
23
- // map dos níveis numéricos do pino
24
19
  const levelMap = {
25
20
  trace: 10,
26
21
  debug: 20,
@@ -35,12 +30,10 @@ function _default(opts) {
35
30
  write(chunk, _enc, cb) {
36
31
  chunk = JSON.parse(chunk);
37
32
  try {
38
- // só grava se exatamente o nível desejado
39
33
  if (chunk.level === onlyLevel) {
40
34
  stream.write(JSON.stringify(chunk) + '\n');
41
35
  }
42
36
  } catch (e) {
43
- // não atrapalha o fluxo de log
44
37
  console.error('custom-target write error', e);
45
38
  } finally {
46
39
  cb();
@@ -1,22 +1,193 @@
1
+ /**
2
+ * Classe utilitária para manipulação e validação de números de telefone brasileiros.
3
+ *
4
+ * Esta classe utiliza a biblioteca `libphonenumber-js` para parsing e validação,
5
+ * oferecendo métodos para extrair componentes do telefone (DDI, DDD, nono dígito)
6
+ * e formatação em diferentes padrões.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // Criando uma instância com número brasileiro
11
+ * const phone = new Phone('(11) 99999-8888');
12
+ *
13
+ * // Verificando se é válido
14
+ * console.log(phone.isValidPhone()); // true
15
+ *
16
+ * // Obtendo componentes
17
+ * console.log(phone.getDDD()); // '11'
18
+ * console.log(phone.hasNine()); // true
19
+ *
20
+ * // Formatação
21
+ * console.log(phone.getMaskedPhone()); // '+55 (11) 9 9999-8888'
22
+ * console.log(phone.getPhone(false, true, true)); // '1199999888'
23
+ * ```
24
+ *
25
+ * @class Phone
26
+ * @version 1.0.0
27
+ * @author Exodus Framework
28
+ */
1
29
  declare class Phone {
2
30
  private phone;
31
+ /** Código do país (DDI) */
3
32
  private ddi;
33
+ /** Código de área (DDD) */
4
34
  private ddd;
35
+ /** Nono dígito para celulares */
5
36
  private nine;
37
+ /** Primeira parte do número (4 primeiros dígitos) */
6
38
  private phonePart1;
39
+ /** Segunda parte do número (4 últimos dígitos) */
7
40
  private phonePart2;
41
+ /** Indica se o número é válido */
8
42
  private isValid;
43
+ /** Número limpo (apenas dígitos) */
9
44
  private number;
45
+ /**
46
+ * Cria uma nova instância da classe Phone.
47
+ *
48
+ * @param phone - Número de telefone em qualquer formato (com ou sem máscara)
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const phone1 = new Phone('11999998888');
53
+ * const phone2 = new Phone('(11) 99999-8888');
54
+ * const phone3 = new Phone('+55 11 99999-8888');
55
+ * ```
56
+ */
10
57
  constructor(phone: string);
58
+ /**
59
+ * Retorna o código do país (DDI).
60
+ *
61
+ * @returns O DDI do número (ex: '55' para Brasil)
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * const phone = new Phone('+55 11 99999-8888');
66
+ * console.log(phone.getDDI()); // '55'
67
+ * ```
68
+ */
11
69
  getDDI(): string;
70
+ /**
71
+ * Retorna o código de área (DDD).
72
+ *
73
+ * @returns O DDD do número (ex: '11' para São Paulo)
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * const phone = new Phone('(11) 99999-8888');
78
+ * console.log(phone.getDDD()); // '11'
79
+ * ```
80
+ */
12
81
  getDDD(): string;
82
+ /**
83
+ * Verifica se o número possui o nono dígito (celular).
84
+ *
85
+ * @returns true se possui o nono dígito, false caso contrário
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * const celular = new Phone('11999998888');
90
+ * const fixo = new Phone('1133334444');
91
+ * console.log(celular.hasNine()); // true
92
+ * console.log(fixo.hasNine()); // false
93
+ * ```
94
+ */
13
95
  hasNine(): boolean;
96
+ /**
97
+ * Retorna o número limpo (apenas dígitos).
98
+ *
99
+ * @returns Número sem formatação, apenas dígitos
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * const phone = new Phone('(11) 99999-8888');
104
+ * console.log(phone.getNumber()); // '11999998888'
105
+ * ```
106
+ */
14
107
  getNumber(): string;
108
+ /**
109
+ * Retorna o número formatado com máscara.
110
+ *
111
+ * @param ddi - Incluir DDI na formatação (padrão: true)
112
+ * @param ddd - Incluir DDD na formatação (padrão: true)
113
+ * @param nine - Incluir nono dígito na formatação (padrão: true)
114
+ * @returns Número formatado com máscara
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * const phone = new Phone('5511999998888');
119
+ * console.log(phone.getMaskedPhone()); // '+55 (11) 9 9999-8888'
120
+ * console.log(phone.getMaskedPhone(false)); // '(11) 9 9999-8888'
121
+ * console.log(phone.getMaskedPhone(true, false)); // '+55 9 9999-8888'
122
+ * ```
123
+ */
15
124
  getMaskedPhone(ddi?: boolean, ddd?: boolean, nine?: boolean): string;
125
+ /**
126
+ * Retorna o número sem formatação, incluindo apenas os componentes selecionados.
127
+ *
128
+ * @param ddi - Incluir DDI no resultado (padrão: true)
129
+ * @param ddd - Incluir DDD no resultado (padrão: true)
130
+ * @param nine - Incluir nono dígito no resultado (padrão: true)
131
+ * @returns Número sem formatação
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * const phone = new Phone('5511999998888');
136
+ * console.log(phone.getPhone()); // '5511999998888'
137
+ * console.log(phone.getPhone(false)); // '11999998888'
138
+ * console.log(phone.getPhone(false, true, false)); // '1199998888'
139
+ * ```
140
+ */
16
141
  getPhone(ddi?: boolean, ddd?: boolean, nine?: boolean): string;
142
+ /**
143
+ * Retorna a primeira parte do número (primeiros 4 dígitos após DDD/nono dígito).
144
+ *
145
+ * @returns Primeira parte do número
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * const phone = new Phone('11999998888');
150
+ * console.log(phone.getPhonePart1()); // '9999'
151
+ * ```
152
+ */
17
153
  getPhonePart1(): string;
154
+ /**
155
+ * Retorna a segunda parte do número (últimos 4 dígitos).
156
+ *
157
+ * @returns Segunda parte do número
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * const phone = new Phone('11999998888');
162
+ * console.log(phone.getPhonePart2()); // '8888'
163
+ * ```
164
+ */
18
165
  getPhonePart2(): string;
166
+ /**
167
+ * Retorna o número original fornecido no construtor.
168
+ *
169
+ * @returns Número original sem alterações
170
+ *
171
+ * @example
172
+ * ```typescript
173
+ * const phone = new Phone('(11) 99999-8888');
174
+ * console.log(phone.getOriginalPhone()); // '(11) 99999-8888'
175
+ * ```
176
+ */
19
177
  getOriginalPhone(): string;
178
+ /**
179
+ * Verifica se o número de telefone é válido.
180
+ *
181
+ * @returns true se o número é válido, false caso contrário
182
+ *
183
+ * @example
184
+ * ```typescript
185
+ * const validPhone = new Phone('11999998888');
186
+ * const invalidPhone = new Phone('123');
187
+ * console.log(validPhone.isValidPhone()); // true
188
+ * console.log(invalidPhone.isValidPhone()); // false
189
+ * ```
190
+ */
20
191
  isValidPhone(): boolean;
21
192
  }
22
193
  export default Phone;
@@ -1 +1 @@
1
- {"version":3,"file":"phone.d.ts","sourceRoot":"","sources":["../../src/utils/phone.ts"],"names":[],"mappings":"AA8BA,cAAM,KAAK;IAkCG,OAAO,CAAC,KAAK;IAhCzB,OAAO,CAAC,GAAG,CAAS;IAGpB,OAAO,CAAC,GAAG,CAAS;IAGpB,OAAO,CAAC,IAAI,CAAS;IAGrB,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO,CAAC,OAAO,CAAU;IAGzB,OAAO,CAAC,MAAM,CAAS;gBAcH,KAAK,EAAE,MAAM;IAuD1B,MAAM;IAeN,MAAM;IAiBN,OAAO;IAeP,SAAS;IAoBT,cAAc,CAAC,GAAG,UAAO,EAAE,GAAG,UAAO,EAAE,IAAI,UAAO;IA2BlD,QAAQ,CAAC,GAAG,UAAO,EAAE,GAAG,UAAO,EAAE,IAAI,UAAO;IAqB5C,aAAa;IAeb,aAAa;IAeb,gBAAgB;IAiBhB,YAAY,IAAI,OAAO;CAG/B;AAED,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"phone.d.ts","sourceRoot":"","sources":["../../src/utils/phone.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,cAAM,KAAK;IAkCG,OAAO,CAAC,KAAK;IAjCzB,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CAAS;IAEpB,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CAAS;IAEpB,iCAAiC;IACjC,OAAO,CAAC,IAAI,CAAS;IAErB,qDAAqD;IACrD,OAAO,CAAC,UAAU,CAAS;IAE3B,kDAAkD;IAClD,OAAO,CAAC,UAAU,CAAS;IAE3B,kCAAkC;IAClC,OAAO,CAAC,OAAO,CAAU;IAEzB,oCAAoC;IACpC,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;;;;;;;;OAWG;gBACiB,KAAK,EAAE,MAAM;IA4CjC;;;;;;;;;;OAUG;IACI,MAAM;IAIb;;;;;;;;;;OAUG;IACI,MAAM;IAIb;;;;;;;;;;;;OAYG;IACI,OAAO;IAId;;;;;;;;;;OAUG;IACI,SAAS;IAIhB;;;;;;;;;;;;;;;OAeG;IACI,cAAc,CAAC,GAAG,UAAO,EAAE,GAAG,UAAO,EAAE,IAAI,UAAO;IAWzD;;;;;;;;;;;;;;;OAeG;IACI,QAAQ,CAAC,GAAG,UAAO,EAAE,GAAG,UAAO,EAAE,IAAI,UAAO;IAUnD;;;;;;;;;;OAUG;IACI,aAAa;IAIpB;;;;;;;;;;OAUG;IACI,aAAa;IAIpB;;;;;;;;;;OAUG;IACI,gBAAgB;IAIvB;;;;;;;;;;;;OAYG;IACI,YAAY,IAAI,OAAO;CAG/B;AAED,eAAe,KAAK,CAAC"}
@@ -34,25 +34,12 @@ var _libphonenumberJs = require("libphonenumber-js");
34
34
  * @author Exodus Framework
35
35
  */
36
36
  class Phone {
37
- /** Código do país (DDI) */
38
37
  ddi;
39
-
40
- /** Código de área (DDD) */
41
38
  ddd;
42
-
43
- /** Nono dígito para celulares */
44
39
  nine;
45
-
46
- /** Primeira parte do número (4 primeiros dígitos) */
47
40
  phonePart1;
48
-
49
- /** Segunda parte do número (4 últimos dígitos) */
50
41
  phonePart2;
51
-
52
- /** Indica se o número é válido */
53
42
  isValid;
54
-
55
- /** Número limpo (apenas dígitos) */
56
43
  number;
57
44
 
58
45
  /**
@@ -69,45 +56,31 @@ class Phone {
69
56
  */
70
57
  constructor(phone) {
71
58
  this.phone = phone;
72
- // Remove todos os caracteres não numéricos
73
59
  this.number = phone.replace(/\D/g, '');
74
-
75
- // Utiliza libphonenumber-js para parsing do número brasileiro
76
60
  const parsed = (0, _libphonenumberJs.parsePhoneNumberFromString)(this.number, 'BR');
77
61
  this.isValid = !!parsed;
78
-
79
- // Se não foi possível fazer o parse, marca como inválido
80
62
  if (!parsed) {
81
63
  this.isValid = false;
82
64
  return;
83
65
  }
84
-
85
- // Extrai o DDI (código do país)
86
66
  this.ddi = parsed.countryCallingCode;
87
-
88
- // Processa baseado no tamanho do número nacional
89
67
  if (parsed.nationalNumber.length > 10) {
90
- // Celular com DDD e nono dígito (11 dígitos)
91
68
  this.ddd = parsed.nationalNumber.slice(0, 2);
92
69
  this.nine = parsed.nationalNumber[2];
93
70
  this.phonePart1 = parsed.nationalNumber.slice(3, 7);
94
71
  this.phonePart2 = parsed.nationalNumber.slice(7, parsed.nationalNumber.length);
95
72
  } else if (parsed.nationalNumber.length == 10) {
96
- // Telefone fixo com DDD (10 dígitos)
97
73
  this.ddd = parsed.nationalNumber.slice(0, 2);
98
74
  this.phonePart1 = parsed.nationalNumber.slice(2, 6);
99
75
  this.phonePart2 = parsed.nationalNumber.slice(6, parsed.nationalNumber.length);
100
76
  } else if (parsed.nationalNumber.length >= 9) {
101
- // Celular sem DDD mas com nono dígito (9 dígitos)
102
77
  this.nine = parsed.nationalNumber[0];
103
78
  this.phonePart1 = parsed.nationalNumber.slice(1, 5);
104
79
  this.phonePart2 = parsed.nationalNumber.slice(5, parsed.nationalNumber.length);
105
80
  } else if (parsed.nationalNumber.length == 8) {
106
- // Telefone fixo sem DDD (8 dígitos)
107
81
  this.phonePart1 = parsed.nationalNumber.slice(0, 4);
108
82
  this.phonePart2 = parsed.nationalNumber.slice(4, parsed.nationalNumber.length);
109
83
  } else {
110
- // Número inválido
111
84
  this.isValid = false;
112
85
  }
113
86
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exodus-framework",
3
- "version": "2.1.1031",
3
+ "version": "2.1.1033",
4
4
  "description": "Exodus Framework",
5
5
  "author": "jhownpaixao",
6
6
  "license": "ISC",