ixc-orm 1.8.0 → 1.10.1

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,4 +1,6 @@
1
1
  # 🔄 CHANGELOG
2
+ - [v1.10.1 - 20 de novembro de 2025](#v1101)
3
+ - [v1.9.0 - 09 de outubro de 2025](#v190)
2
4
  - [v1.8.0 - 18 de outubro de 2025](#v180)
3
5
  - [v1.7.1 - 18 de outubro de 2025](#v171)
4
6
  - [v1.7.0 - 10 de outubro de 2025](#v170)
@@ -10,6 +12,12 @@
10
12
 
11
13
  ## 🚀 Novidades
12
14
 
15
+ ### v1.10.1
16
+ * **Melhoria:** O recurso que obtém um arquivi PDF de um boleto `Recurso.getArquivoBoleto()`, passou a utilizar o RequestEmitter da API para executar a requisição. Além disso, a resposta desse recurso será uma string decodificada contendo o conteúdo do PDF do boleto, ao invés de um objeto `IXCResponse`.
17
+
18
+ ### v1.9.0
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>.
20
+
13
21
  ### v1.8.0
14
22
  * **Melhoria:** O processo de carregamento do ambiente consegue detectar se as variáveis já foram carregas por um container Docker e interrompe o carregamento através do `.env`, evitando que a aplicação encerre o processo com erro..
15
23
  * **Correção:** Corrigida incompatibilidade com o cache do `pnpm`. Ao tentar carregar as variáveis diretamente do arquivo `.env`, o ambiente buscará o arquivo de forma recursiva, para conseguir encontrá-lo mesmo quando a biblioteca interpretar a pasta `node_modules` como root. (ocorre em alguns cenários muito específicos, apenas com o `pnpm`), evitando que o processo seja encerrado com erro.
@@ -19,21 +27,21 @@
19
27
 
20
28
  ### v1.7.0
21
29
  * **Atualização:** Novas classes adiconadas, para simplificar a manipulação dos filtros de busca e das respostas da API do **IXC Provedor**.
22
- * A nova classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/IxcOrm.ts">IxcOrm</a> pode substituir a classe `IXCCliente` e fornece uma maneira mais dinâmica de construir a query de busca, através dos métodos `where()`, `like()`, `exactly()`, `lessThan()`, `lessThanEquals()`, `greaterThan()` e `greaterThanEquals()`.
23
- * Toda a lógica de manipulação das requisições HTTP foi movida para a nova classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/api/RequestEmitter.ts">RequestEmitter</a>, deixando a classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/IxcOrm.ts">IxcOrm</a> apenas com a lógica de manipulação da query de busca.
24
- * Os dados da resposta recebida da API do IXC Provedor agora estão todos concentrados na classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/IxcResponse.ts">IxcResponse</a>, quando instanciada pelos métodos `GET()`, `POST()`, `PUT()` e `DELETE()`, da classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/api/RequestEmitter.ts">RequestEmitter</a>.
25
- * A classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/IxcOrm.ts">IxcOrm</a> é uma subclasse de <a href="https://github.com/SousaFelipe/ixcorm/blob/builders/src/api/RequestEmitter.ts">RequestEmitter</a>.
30
+ * A nova classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/IxcOrm.ts">IxcOrm</a> pode substituir a classe `IXCCliente` e fornece uma maneira mais dinâmica de construir a query de busca, através dos métodos `where()`, `like()`, `exactly()`, `lessThan()`, `lessThanEquals()`, `greaterThan()` e `greaterThanEquals()`.
31
+ * Toda a lógica de manipulação das requisições HTTP foi movida para a nova classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/api/RequestEmitter.ts">RequestEmitter</a>, deixando a classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/IxcOrm.ts">IxcOrm</a> apenas com a lógica de manipulação da query de busca.
32
+ * Os dados da resposta recebida da API do IXC Provedor agora estão todos concentrados na classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/IxcResponse.ts">IxcResponse</a>, quando instanciada pelos métodos `GET()`, `POST()`, `PUT()` e `DELETE()`, da classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/api/RequestEmitter.ts">RequestEmitter</a>.
33
+ * A classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/builders/src/IxcOrm.ts">IxcOrm</a> é uma subclasse de <a href="https://github.com/SousaFelipe/ixcorm/blob/builders/src/api/RequestEmitter.ts">RequestEmitter</a>.
26
34
 
27
35
  ### v1.6.0
28
36
  * **Melhoria**: Métodos específicos para chamadas de recursos da API do **IXC Provedor**
29
- * `desbloqueioDeConfianca()`: Envia uma requisição para o recurso de desbloqueio de confiança de um contrato.
30
- * `liberacaoTemporaria()`: Envia uma requisição para o recurso de liberação temporária de um contrato.
31
- * `getArquivoBoleto()`: Recupera o arquivo de uma fatura, no formato PDF, codificado em <a href="https://en.wikipedia.org/wiki/Base64">Base64</a>.
37
+ * `desbloqueioDeConfianca()`: Envia uma requisição para o recurso de desbloqueio de confiança de um contrato.
38
+ * `liberacaoTemporaria()`: Envia uma requisição para o recurso de liberação temporária de um contrato.
39
+ * `getArquivoBoleto()`: Recupera o arquivo de uma fatura, no formato PDF, codificado em <a href="https://en.wikipedia.org/wiki/Base64">Base64</a>.
32
40
 
33
41
  ### v1.5.0
34
42
  * **Melhoria:** A chamada de recursos da API agora pode ser feita de forma mais simplificada, através da função `RecursoIXC`:
35
- * Basta importar assim: `import { RecursoIXC } from 'ixc-orm'`;
36
- * E chamar assim: `await RecursoIXC('get_boleto', { id_fatura: 25484 })`.
43
+ * Basta importar assim: `import { RecursoIXC } from 'ixc-orm'`;
44
+ * E chamar assim: `await RecursoIXC('get_boleto', { id_fatura: 25484 })`.
37
45
 
38
46
  ### v1.4.4
39
47
  * **Melhoria:** Foi adicionado um método `find()` a classe `IXCClient`, para encontrar um registro pelo seu `id` de uma forma mais simplificada.
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.1 `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.1 `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.1 `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;
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsdom_1 = require("jsdom");
4
3
  class IxcResponse {
5
4
  /**
6
5
  * Cria um novo objeto no formato de uma resposta padrão do IXC Provedor.
@@ -79,7 +78,7 @@ class IxcResponse {
79
78
  if (!((_a = this.data) === null || _a === void 0 ? void 0 : _a.message)) {
80
79
  return '';
81
80
  }
82
- return this.data.message;
81
+ return this.data.message.replaceAll('<br />', '. ');
83
82
  }
84
83
  /**
85
84
  * Obtém a lista de registros retornados por uma consulta à API do IXC Provedor.
@@ -93,6 +92,17 @@ class IxcResponse {
93
92
  }
94
93
  return this.data.registros;
95
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
+ }
96
106
  responseTextHasHtml() {
97
107
  var _a;
98
108
  return !(!((_a = this.text) === null || _a === void 0 ? void 0 : _a.length)) && this.text.startsWith('<div style=');
@@ -101,15 +111,21 @@ class IxcResponse {
101
111
  if (this.responseTextHasHtml()) {
102
112
  return this.createDataFromHtml();
103
113
  }
104
- return JSON.parse(this.text);
114
+ try {
115
+ return JSON.parse(this.text);
116
+ }
117
+ catch (error) {
118
+ return {};
119
+ }
105
120
  }
106
121
  createDataFromHtml() {
107
- const dom = new jsdom_1.JSDOM(this.text);
122
+ const parser = new DOMParser();
123
+ const document = parser.parseFromString(this.text, 'text/html');
108
124
  return {
109
125
  type: 'error',
110
126
  page: 0,
111
127
  total: 0,
112
- message: dom.window.document.body.textContent
128
+ message: document.body.textContent
113
129
  };
114
130
  }
115
131
  }
@@ -2,10 +2,11 @@ export default class Environment {
2
2
  private static instance;
3
3
  private domain;
4
4
  private token;
5
- static getInstance(): Environment;
5
+ static loadInstance(): Environment;
6
6
  private constructor();
7
7
  private shouldToLoadDotEnvFile;
8
- private loadedEnvVars;
8
+ private envHasBeenLoaded;
9
+ private loadEnvFromEnvFile;
9
10
  private setDomain;
10
11
  private setToken;
11
12
  getDomain(): string;
@@ -7,7 +7,7 @@ const path_1 = __importDefault(require("path"));
7
7
  const dotenv_1 = __importDefault(require("dotenv"));
8
8
  const utils_1 = __importDefault(require("../utils"));
9
9
  class Environment {
10
- static getInstance() {
10
+ static loadInstance() {
11
11
  if (!Environment.instance) {
12
12
  Environment.instance = new Environment();
13
13
  }
@@ -19,9 +19,16 @@ class Environment {
19
19
  this.setDomain(process.env.IXC_SERVER_DOMAIN);
20
20
  }
21
21
  shouldToLoadDotEnvFile() {
22
- if (this.loadedEnvVars()) {
22
+ if (this.envHasBeenLoaded()) {
23
23
  return;
24
24
  }
25
+ this.loadEnvFromEnvFile();
26
+ }
27
+ envHasBeenLoaded() {
28
+ const allEnvVars = Object.keys(process.env);
29
+ return allEnvVars.some(envVar => envVar.startsWith('IXC_'));
30
+ }
31
+ loadEnvFromEnvFile() {
25
32
  const fileUtil = new utils_1.default.File();
26
33
  const envfile = fileUtil.findFile('.env');
27
34
  const env = dotenv_1.default.config({
@@ -33,12 +40,6 @@ class Environment {
33
40
  process.exit(1);
34
41
  }
35
42
  }
36
- loadedEnvVars() {
37
- const allEnvVars = Object.keys(process.env);
38
- return allEnvVars.some(envVar => {
39
- return envVar.startsWith('IXC_');
40
- });
41
- }
42
43
  setDomain(domain) {
43
44
  var _a;
44
45
  const newDomainIsValid = !(!(domain === null || domain === void 0 ? void 0 : domain.length));
@@ -9,7 +9,7 @@ export default class RequestEmitter {
9
9
  *
10
10
  * @param table Representa o endpoint do IXC Provedor para o qual será enviada a requisição.
11
11
  */
12
- protected constructor(table: string);
12
+ constructor(table: string);
13
13
  /**
14
14
  * Envia uma requisição HTTP para a API do IXC Provedor, para listar registros, filtrando-os pela query de busca
15
15
  * definida por **setQuery(String query)**.
@@ -42,12 +42,6 @@ export default class RequestEmitter {
42
42
  * @return Um objeto {@link IxcResponse}.
43
43
  */
44
44
  DELETE(record: any): Promise<IxcResponse>;
45
- /**
46
- * Obtém o valor da tabela, definida no cosntrutor.
47
- *
48
- * @returns string
49
- */
50
- protected getTable(): string;
51
45
  /**
52
46
  * Define a query que será enviada no corpo de uma requisição de busca.
53
47
  *
@@ -71,9 +65,21 @@ export default class RequestEmitter {
71
65
  *
72
66
  * @param query Um objeto no formato de uma query da API do IXC Provedor.
73
67
  */
74
- protected setupQuery(query: {
68
+ setupQuery(query: {
75
69
  [key: string]: any;
76
70
  }): void;
71
+ /**
72
+ * Envia requisições para recursos específicos do IXC Provedor.
73
+ *
74
+ * @returns Uma nova instância de IxcResponse, contendo os dados retornados pelo recurso do IXC Provedor.
75
+ */
76
+ sendRequestToResource(): Promise<IxcResponse>;
77
+ /**
78
+ * Obtém o valor da tabela, definida no cosntrutor.
79
+ *
80
+ * @returns string
81
+ */
82
+ protected getTable(): string;
77
83
  private loadCommonHeaders;
78
84
  private getEncodedTokenFromContext;
79
85
  private setupUri;
@@ -101,14 +101,6 @@ class RequestEmitter {
101
101
  return new IxcResponse_1.default(responseText);
102
102
  });
103
103
  }
104
- /**
105
- * Obtém o valor da tabela, definida no cosntrutor.
106
- *
107
- * @returns string
108
- */
109
- getTable() {
110
- return this.table;
111
- }
112
104
  /**
113
105
  * Define a query que será enviada no corpo de uma requisição de busca.
114
106
  *
@@ -135,6 +127,32 @@ class RequestEmitter {
135
127
  setupQuery(query) {
136
128
  this.query = query;
137
129
  }
130
+ /**
131
+ * Envia requisições para recursos específicos do IXC Provedor.
132
+ *
133
+ * @returns Uma nova instância de IxcResponse, contendo os dados retornados pelo recurso do IXC Provedor.
134
+ */
135
+ sendRequestToResource() {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ try {
138
+ this.setupUri();
139
+ const responseText = yield this.sendRequest('POST', this.query);
140
+ return new IxcResponse_1.default(responseText);
141
+ }
142
+ catch (error) {
143
+ const responseTextError = IxcResponse_1.default.createResponseTextWithError(error);
144
+ return new IxcResponse_1.default(responseTextError);
145
+ }
146
+ });
147
+ }
148
+ /**
149
+ * Obtém o valor da tabela, definida no cosntrutor.
150
+ *
151
+ * @returns string
152
+ */
153
+ getTable() {
154
+ return this.table;
155
+ }
138
156
  loadCommonHeaders() {
139
157
  const encodedToken = this.getEncodedTokenFromContext();
140
158
  this.headers.push({ 'Authorization': `Basic ${encodedToken}` });
@@ -142,11 +160,11 @@ class RequestEmitter {
142
160
  this.headers.push({ 'ixcsoft': '' });
143
161
  }
144
162
  getEncodedTokenFromContext() {
145
- const token = Environment_1.default.getInstance().getToken();
163
+ const token = Environment_1.default.loadInstance().getToken();
146
164
  return Buffer.from(token !== null && token !== void 0 ? token : '').toString('base64');
147
165
  }
148
166
  setupUri(id) {
149
- const host = Environment_1.default.getInstance().getDomain();
167
+ const host = Environment_1.default.loadInstance().getDomain();
150
168
  const pathId = id ? `/${id}` : '';
151
169
  this.uri = `https://${host}/webservice/v1/${this.table}${pathId}`;
152
170
  }
package/dist/index.js CHANGED
@@ -58,4 +58,4 @@ const types_1 = require("./types");
58
58
  Object.defineProperty(exports, "IXCOperator", { enumerable: true, get: function () { return types_1.IXCOperator; } });
59
59
  Object.defineProperty(exports, "IXCRequestMethods", { enumerable: true, get: function () { return types_1.IXCRequestMethods; } });
60
60
  Object.defineProperty(exports, "IXCSortOrder", { enumerable: true, get: function () { return types_1.IXCSortOrder; } });
61
- Environment_1.default.getInstance();
61
+ Environment_1.default.loadInstance();
@@ -0,0 +1,4 @@
1
+ import IxcResponse from '../IxcResponse';
2
+ export default function cliente_contrato_ativar_cliente(args: {
3
+ id_contrato?: string | number;
4
+ }): Promise<IxcResponse>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.default = cliente_contrato_ativar_cliente;
16
+ const RequestEmitter_1 = __importDefault(require("../api/RequestEmitter"));
17
+ const src = 'cliente_contrato_ativar_cliente';
18
+ function cliente_contrato_ativar_cliente(args) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const { id_contrato } = args;
21
+ const requestEmitter = new RequestEmitter_1.default(src);
22
+ requestEmitter.setupQuery({
23
+ qtype: 'cliente_contrato_ativar_cliente.id',
24
+ id_contrato
25
+ });
26
+ return yield requestEmitter.sendRequestToResource();
27
+ });
28
+ }
@@ -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
+ }
@@ -1,6 +1,7 @@
1
1
  import cliente_contrato_btn_lib_temp_24722 from './cliente_contrato_btn_lib_temp_24722';
2
2
  import desbloqueio_confianca from './desbloqueio_confianca';
3
3
  import get_boleto from './get_boleto';
4
+ import radusuarios_25452 from './radusuarios_25452';
4
5
  /**
5
6
  * @deprecated Acesse os recursos através da constante {@link Recurso}
6
7
  */
@@ -36,6 +37,13 @@ export declare const Recurso: {
36
37
  * contendo o conteúdo do boleto, caso a requisição seja bem-sucedida
37
38
  */
38
39
  getArquivoBoleto: typeof get_boleto;
40
+ /**
41
+ * Envia uma requisição à API do IXC Provedor, para que o endereço de MAC seja removido do cadastro de um determinado PPPoE.
42
+ *
43
+ * @param id_login O ID do PPPoE que se deseja remover o endereço de MAC.
44
+ * @returns A instância de um **IxcResponse**.
45
+ */
46
+ limparMAC: typeof radusuarios_25452;
39
47
  /**
40
48
  * Solicita ao IXC que libere, por 72 horas, o contrato de um cliente bloqueado, que não tenha
41
49
  * solicitado outra liberação temporária dentro de um período de 30 dias
@@ -52,5 +60,5 @@ export declare const Recurso: {
52
60
  *
53
61
  * @deprecated Acesse os recursos através da constante {@link Recurso}
54
62
  */
55
- 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>;
56
64
  export {};
@@ -17,6 +17,7 @@ exports.default = RecursoIXC;
17
17
  const cliente_contrato_btn_lib_temp_24722_1 = __importDefault(require("./cliente_contrato_btn_lib_temp_24722"));
18
18
  const desbloqueio_confianca_1 = __importDefault(require("./desbloqueio_confianca"));
19
19
  const get_boleto_1 = __importDefault(require("./get_boleto"));
20
+ const radusuarios_25452_1 = __importDefault(require("./radusuarios_25452"));
20
21
  /**
21
22
  * @deprecated Acesse os recursos através da constante {@link Recurso}
22
23
  */
@@ -51,6 +52,13 @@ exports.Recurso = {
51
52
  * contendo o conteúdo do boleto, caso a requisição seja bem-sucedida
52
53
  */
53
54
  getArquivoBoleto: get_boleto_1.default,
55
+ /**
56
+ * Envia uma requisição à API do IXC Provedor, para que o endereço de MAC seja removido do cadastro de um determinado PPPoE.
57
+ *
58
+ * @param id_login O ID do PPPoE que se deseja remover o endereço de MAC.
59
+ * @returns A instância de um **IxcResponse**.
60
+ */
61
+ limparMAC: radusuarios_25452_1.default,
54
62
  /**
55
63
  * Solicita ao IXC que libere, por 72 horas, o contrato de um cliente bloqueado, que não tenha
56
64
  * solicitado outra liberação temporária dentro de um período de 30 dias
@@ -0,0 +1,4 @@
1
+ import IxcResponse from '../IxcResponse';
2
+ export default function radusuarios_25452(args: {
3
+ id_login?: string | number;
4
+ }): Promise<IxcResponse>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.default = radusuarios_25452;
16
+ const RequestEmitter_1 = __importDefault(require("../api/RequestEmitter"));
17
+ const src = 'radusuarios_25452';
18
+ function radusuarios_25452(args) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const { id_login } = args;
21
+ const requestEmitter = new RequestEmitter_1.default(src);
22
+ requestEmitter.setupQuery({ get_id: id_login });
23
+ return yield requestEmitter.sendRequestToResource();
24
+ });
25
+ }
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "ixc-orm",
3
- "version": "1.8.0",
3
+ "version": "1.10.1",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",
7
7
  "description": "ORM para consumo de dados da API do sistema IXC Provedor",
8
8
  "scripts": {
9
9
  "dev": "nodemon --watch \"src//\" --exec \"ts-node src/index.ts\" -e ts",
10
- "test": "jest --coverage",
10
+ "test": "jest",
11
+ "test:cov": "jest --coverage",
11
12
  "build": "tsc --build"
12
13
  },
13
14
  "repository": {
@@ -30,16 +31,20 @@
30
31
  },
31
32
  "dependencies": {
32
33
  "axios": "^1.12.2",
33
- "dotenv": "^17.2.3",
34
- "jsdom": "^27.0.1"
34
+ "dotenv": "^17.2.3"
35
35
  },
36
36
  "devDependencies": {
37
- "@babel/preset-typescript": "^7.27.1",
37
+ "@babel/core": "^7.28.5",
38
+ "@babel/preset-env": "^7.28.5",
39
+ "@babel/preset-typescript": "^7.28.5",
38
40
  "@jest/globals": "^30.2.0",
41
+ "@testing-library/jest-dom": "^6.9.1",
39
42
  "@types/jest": "^30.0.0",
40
43
  "@types/jsdom": "^27.0.0",
41
44
  "@types/node": "^24.8.1",
45
+ "babel-jest": "^30.2.0",
42
46
  "jest": "^30.2.0",
47
+ "jest-environment-jsdom": "^30.2.0",
43
48
  "nodemon": "^3.1.10",
44
49
  "ts-jest": "^29.4.5",
45
50
  "ts-node": "^10.9.2",
@@ -1 +1 @@
1
- {"root":["./src/ixcclient.ts","./src/ixcorm.ts","./src/ixcresponse.ts","./src/index.ts","./src/request.ts","./src/response.ts","./src/types.ts","./src/api/environment.ts","./src/api/operators.ts","./src/api/ordering.ts","./src/api/pagination.ts","./src/api/parameter.ts","./src/api/requestemitter.ts","./src/recursos/cliente_contrato_btn_lib_temp_24722.ts","./src/recursos/desbloqueio_confianca.ts","./src/recursos/get_boleto.ts","./src/recursos/index.ts","./src/recursos/recurso.ts","./src/utils/fileutils.ts","./src/utils/textutils.ts","./src/utils/index.ts"],"version":"5.9.3"}
1
+ {"root":["./src/ixcclient.ts","./src/ixcorm.ts","./src/ixcresponse.ts","./src/index.ts","./src/request.ts","./src/response.ts","./src/types.ts","./src/api/environment.ts","./src/api/operators.ts","./src/api/ordering.ts","./src/api/pagination.ts","./src/api/parameter.ts","./src/api/requestemitter.ts","./src/recursos/cliente_contrato_ativar_cliente.ts","./src/recursos/cliente_contrato_btn_lib_temp_24722.ts","./src/recursos/desbloqueio_confianca.ts","./src/recursos/get_boleto.ts","./src/recursos/index.ts","./src/recursos/radusuarios_25452.ts","./src/recursos/recurso.ts","./src/utils/fileutils.ts","./src/utils/textutils.ts","./src/utils/index.ts"],"version":"5.9.3"}
package/babel.config.cjs DELETED
@@ -1,6 +0,0 @@
1
- module.exports = {
2
- presets: [
3
- ['@babel/preset-env', {targets: {node: 'current'}}],
4
- '@babel/preset-typescript',
5
- ],
6
- };
package/jest.config.ts DELETED
@@ -1,34 +0,0 @@
1
- import type {Config} from 'jest';
2
-
3
-
4
- const config: Config = {
5
-
6
- clearMocks: true,
7
- collectCoverage: true,
8
- coverageDirectory: 'coverage',
9
- coverageProvider: 'v8',
10
- testEnvironment: "node",
11
-
12
- transform: {
13
- '^.+\\.(ts|tsx)$': 'ts-jest'
14
- },
15
-
16
- collectCoverageFrom: [
17
- "**/src/**/*.(t|j)s"
18
- ],
19
-
20
- setupFiles: [
21
- "dotenv/config"
22
- ],
23
-
24
- setupFilesAfterEnv: [
25
- './tests/jest.setup.ts'
26
- ],
27
-
28
- testMatch: [
29
- '<rootDir>/tests/**/*.test.ts'
30
- ]
31
- };
32
-
33
-
34
- export default config;