ixc-orm 1.9.0 → 1.10.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # 🔄 CHANGELOG
2
- - [v1.9.0 - 90 de outubro de 2025](#v190)
2
+ - [v1.10.2 - 20 de novembro de 2025](#v1102)
3
+ - [v1.9.0 - 09 de outubro de 2025](#v190)
3
4
  - [v1.8.0 - 18 de outubro de 2025](#v180)
4
5
  - [v1.7.1 - 18 de outubro de 2025](#v171)
5
6
  - [v1.7.0 - 10 de outubro de 2025](#v170)
@@ -11,6 +12,9 @@
11
12
 
12
13
  ## 🚀 Novidades
13
14
 
15
+ ### v1.10.2
16
+ * **Melhoria:** O recurso `Recurso.getArquivoBoleto()`, que obtém um arquivo PDF de um boleto, passou a utilizar o 'RequestEmitter' da API para executar a requisição. A resposta desse recurso será uma Promise contendo a instância de um objeto do tipo `IxcResponse`.
17
+
14
18
  ### v1.9.0
15
19
  * **Melhoria:** Novo recurso para remoção de MAC de um PPPoE, através do recurso `radusuarios_25452`, que é disponibilizado pela própria API do IXC Provedor. Para utilizar o recurso, invocar o método assícrono `Recurso.limparMAC({ id_login: number });`. O método irá retornar a instãncia de um <a href="https://github.com/SousaFelipe/ixc-orm/blob/main/src/IxcResponse.ts">IxcResponse</a>.
16
20
 
package/README.md CHANGED
@@ -33,7 +33,7 @@ yarn add ixc-orm
33
33
  Para configurar a comunicação da biblioteca com seu servidor IXC Provedor, é necessário adicionar as seguintes variáveis de ambiente a um arquivo `.env`, que esteja localizado no diretório raiz do seu projeto.
34
34
 
35
35
  > [!NOTE]\
36
- > Versão 1.8.0 `stable`
36
+ > Versão 1.10.2 `stable`
37
37
 
38
38
  - **IXC_ACCESS_TOKEN** Um token de API gerado dentro do IXC Provedor.
39
39
  - **IXC_SERVER_DOMAIN** O domínio do seu servidor IXC Provedor.
@@ -57,20 +57,10 @@ services:
57
57
  ```
58
58
 
59
59
 
60
- > Versão 1.6.0 ou anterior:
61
-
62
- - **IXC_HOST** A url do seu servidor IXC Provedor.
63
- - **IXC_TOKEN** Um token de API gerado dentro do IXC Provedor.
64
-
65
- ```ini
66
- IXC_HOST="https://dominiodoservidorixc.com.br/webservice/v1"
67
- IXC_TOKEN="8:k4n8wk1946j7mimthei869cq1zz2u940f2gqobqg081y2oefl80mzhtq2wud3gqp"
68
- ```
69
-
70
60
  As classes que representarão os diferentes tipos de registros no seu **IXC Provedor**, deverão herdar da classe `IxcOrm` (nova versão), como no exemplo a seguir:
71
61
 
72
62
  > [!NOTE]\
73
- > Versão 1.8.0 `stable`
63
+ > Versão 1.10.2 `stable`
74
64
 
75
65
  ```typescript
76
66
  import { IxcOrm } from 'ixc-orm';
@@ -82,22 +72,11 @@ class Contrato extends IxcOrm {
82
72
  }
83
73
  ```
84
74
 
85
- > Versão 1.6.0 ou anterior
86
-
87
- ```typescript
88
- import { IXCClient } 'ixc-orm';
89
-
90
- class Contrato extends IXCClient {
91
- constructor() {
92
- super('cliente_contrato');
93
- }
94
- }
95
- ```
96
75
 
97
76
  Após instanciar um objeto com o tipo que você criou (`Contrato, como no exemplo a cima`), você poderá acessar os métodos de construção da query de busca.
98
77
 
99
78
  > [!NOTE]\
100
- > Versão 1.8.0 `stable`
79
+ > Versão 1.10.2 `stable`
101
80
 
102
81
  ```typescript
103
82
  import { IxcResponse, Sort } from 'ixc-orm';
@@ -113,49 +92,21 @@ IxcResponse response = await contrato
113
92
  const contratos = response.registros();
114
93
  ```
115
94
 
116
- > Versão 1.6.0 ou anterior
117
-
118
- ```typescript
119
- const contrato = new Contrato();
120
-
121
- const contratos = await contrato
122
- .where(['id_cliente', 240])
123
- .where(['data_ativacao', '>=', '2024-09-24 00:45:00'])
124
- .orderBy('data_ativacao', 'desc')
125
- .get()
126
- ```
127
-
128
- Ou quando você já possui o ID do registro que procura, a opção mais simples será utilizar o método `find()`. Este método também está implementado na classe `IXCClient`
129
-
130
- > [!NOTE]
131
- > Método disponível apenas para as subclasses de `IXCClient`.
132
-
133
- ```typescript
134
- const contrato = new Contrato();
135
-
136
- const id_contrato = 4574;
137
-
138
- const contratos = await contrato.find(id_contrato)
139
- ```
140
-
141
95
 
142
96
  ## Recursos da API do IXC Provedor
143
97
 
144
- Existem alguns `endpoints` que a API do IXC disponibiliza, a fim de "encurtar o caminho" para chegar até algumas informações. Como por exemplo, obter o arquivo PDF de uma fatura.\
145
- Para isso, você não precisará se preocupar em criar uma classe `Boleto` que herde da classe `IxcOrm`, por exemplo,\
146
- nem encadear chamadas de filtros. Basta fazer como no exemplo a seguir:
98
+ Existem alguns `endpoints` que a API do IXC Provedor disponibiliza, a fim de "encurtar o caminho" para chegar até algumas informações. Como por exemplo, obter o arquivo PDF de uma fatura. Para isso, você não precisará se preocupar em criar uma classe `Boleto` que herde da classe `IxcOrm`, por exemplo, nem encadear chamadas de filtros. Basta fazer como no exemplo a seguir:
147
99
 
148
100
  ```typescript
149
101
  import { Recurso } from 'ixc-orm';
150
102
 
151
103
  const id_contrato = 45852;
152
-
153
- const response = await Recurso.desbloqueioDeConfianca(id_contrato);
104
+ const response = await Recurso.desbloqueioDeConfianca({ id_contrato });
154
105
  ```
155
106
 
156
- > Dos recursos disponibilizados pela API do **IXC Provedor**, essa biblioteca já implementou:\
157
- > `get_boleto`, `desbloqueio_confianca` e `cliente_contrato_btn_lib_temp_24722`.\
158
- > Obs: Os nomes dos recursos estão de acordo com a API do **IXC Provedor** a fim de facilitar o estudo através da sua documentação oficial.
107
+ > Dos recursos disponibilizados pela API do **IXC Provedor**, essa biblioteca já possui as implementações de:\
108
+ > `cliente_contrato_ativar_cliente`, `cliente_contrato_btn_lib_temp_24722`, `desbloqueio_confianca`, `get_boleto` e `radusuarios_25452`.\
109
+ > Obs: Os nomes dos recursos estão de acordo com a API do **IXC Provedor** a fim de facilitar o estudo através da sua própria documentação oficial.
159
110
 
160
111
 
161
112
  # Contribuições
@@ -47,6 +47,15 @@ export default class IxcResponse {
47
47
  registros(): Array<{
48
48
  [key: string]: any;
49
49
  }>;
50
+ /**
51
+ * Obtém o conteúdo bruto de uma resposta da API do IXC Provedor.
52
+ * Este método substitui o método `registros()`, quando a requisição é feita para um endpoint
53
+ * específico de recursos do IXC Provedor, mas apenas quando a API devolve uma resposta bruta ao
54
+ * invés de uma lista de registros, ou uma mensagem.
55
+ *
56
+ * @returns Uma string contendo o conteúdo da resposta da API do IXC Provedor.
57
+ */
58
+ content(): string;
50
59
  private responseTextHasHtml;
51
60
  private createDataFromText;
52
61
  private createDataFromHtml;
@@ -92,6 +92,17 @@ class IxcResponse {
92
92
  }
93
93
  return this.data.registros;
94
94
  }
95
+ /**
96
+ * Obtém o conteúdo bruto de uma resposta da API do IXC Provedor.
97
+ * Este método substitui o método `registros()`, quando a requisição é feita para um endpoint
98
+ * específico de recursos do IXC Provedor, mas apenas quando a API devolve uma resposta bruta ao
99
+ * invés de uma lista de registros, ou uma mensagem.
100
+ *
101
+ * @returns Uma string contendo o conteúdo da resposta da API do IXC Provedor.
102
+ */
103
+ content() {
104
+ return this.text;
105
+ }
95
106
  responseTextHasHtml() {
96
107
  var _a;
97
108
  return !(!((_a = this.text) === null || _a === void 0 ? void 0 : _a.length)) && this.text.startsWith('<div style=');
@@ -100,7 +111,12 @@ class IxcResponse {
100
111
  if (this.responseTextHasHtml()) {
101
112
  return this.createDataFromHtml();
102
113
  }
103
- return JSON.parse(this.text);
114
+ try {
115
+ return JSON.parse(this.text);
116
+ }
117
+ catch (error) {
118
+ return {};
119
+ }
104
120
  }
105
121
  createDataFromHtml() {
106
122
  const parser = new DOMParser();
@@ -1,4 +1,3 @@
1
- import { IXCRecursoResponse, IXCResponse } from '../types';
2
1
  export default function get_boleto(args: {
3
2
  id_fatura?: string | number;
4
- }): Promise<IXCResponse | IXCRecursoResponse>;
3
+ }): Promise<string>;
@@ -8,35 +8,39 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.default = get_boleto;
13
- const request_1 = require("../request");
14
- const response_1 = require("../response");
15
- const SRC = 'get_boleto';
16
+ const RequestEmitter_1 = __importDefault(require("../api/RequestEmitter"));
17
+ const src = 'get_boleto';
16
18
  function get_boleto(args) {
17
19
  return __awaiter(this, void 0, void 0, function* () {
18
- const axios = (0, request_1.createAxiosInstance)('PUT');
19
- try {
20
- const { id_fatura } = args;
21
- const response = yield axios.get(SRC, {
22
- data: {
23
- boletos: id_fatura,
24
- juro: 'S',
25
- multa: 'S',
26
- atualiza_boleto: 'S',
27
- tipo_boleto: 'arquivo',
28
- base64: 'S'
29
- }
30
- });
31
- if (response.status === 200) {
32
- return {
33
- data: response.data
34
- };
35
- }
36
- }
37
- catch (error) {
38
- console.error(`Erro ao executar recurso: ${SRC}\n`, error);
39
- }
40
- return (0, response_1.createResponse)({ error: true });
20
+ const { id_fatura } = args;
21
+ const requestEmitter = new RequestEmitter_1.default(src);
22
+ requestEmitter.setupQuery({
23
+ boletos: id_fatura,
24
+ juro: 'S',
25
+ multa: 'S',
26
+ atualiza_boleto: 'S',
27
+ tipo_boleto: 'arquivo',
28
+ base64: 'S'
29
+ });
30
+ const response = yield requestEmitter.sendRequestToResource();
31
+ const content = response.content();
32
+ return contentConvertedToPDF(content);
41
33
  });
42
34
  }
35
+ function contentConvertedToPDF(content) {
36
+ const bits = atob(content);
37
+ if (!bits.length) {
38
+ return '';
39
+ }
40
+ const bytes = new Uint8Array(bits.length);
41
+ for (let i = 0; i < bits.length; i++) {
42
+ bytes[i] = bits.charCodeAt(i);
43
+ }
44
+ const decoder = new TextDecoder('utf-8');
45
+ return decoder.decode(bytes);
46
+ }
@@ -60,5 +60,5 @@ export declare const Recurso: {
60
60
  *
61
61
  * @deprecated Acesse os recursos através da constante {@link Recurso}
62
62
  */
63
- export default function RecursoIXC<T extends keyof Recursos>(recurso: T, args: Parameters<Recursos[T]>[0]): Promise<import("..").IXCResponse | import("../types").IXCRecursoResponse>;
63
+ export default function RecursoIXC<T extends keyof Recursos>(recurso: T, args: Parameters<Recursos[T]>[0]): Promise<string | import("..").IXCResponse>;
64
64
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ixc-orm",
3
- "version": "1.9.0",
3
+ "version": "1.10.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",
@@ -30,7 +30,7 @@
30
30
  "url": "https://github.com/SousaFelipe/ixc-orm/issues"
31
31
  },
32
32
  "dependencies": {
33
- "axios": "^1.12.2",
33
+ "axios": "^1.13.2",
34
34
  "dotenv": "^17.2.3"
35
35
  },
36
36
  "devDependencies": {
@@ -41,11 +41,11 @@
41
41
  "@testing-library/jest-dom": "^6.9.1",
42
42
  "@types/jest": "^30.0.0",
43
43
  "@types/jsdom": "^27.0.0",
44
- "@types/node": "^24.8.1",
44
+ "@types/node": "^24.10.1",
45
45
  "babel-jest": "^30.2.0",
46
46
  "jest": "^30.2.0",
47
47
  "jest-environment-jsdom": "^30.2.0",
48
- "nodemon": "^3.1.10",
48
+ "nodemon": "^3.1.11",
49
49
  "ts-jest": "^29.4.5",
50
50
  "ts-node": "^10.9.2",
51
51
  "typescript": "^5.9.3"