ixc-orm 1.7.0 → 1.7.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,5 @@
1
1
  # 🔄 CHANGELOG
2
+ - [v1.7.1 - 18 de outubro de 2025](#v171)
2
3
  - [v1.7.0 - 10 de outubro de 2025](#v170)
3
4
  - [v1.6.0 - 16 de agosto de 2025](#v150)
4
5
  - [v1.5.0 - 16 de agosto de 2025](#v150)
@@ -8,6 +9,9 @@
8
9
 
9
10
  ## 🚀 Novidades
10
11
 
12
+ ### v1.7.1
13
+ * **Melhoria:** Adicionado o método `fail()` à classe <a href="https://github.com/SousaFelipe/ixc-orm/blob/main/src/IxcResponse.ts">IxcResponse</a>, para verificar se o IXC Provedor retornou uma resposta com erro.
14
+
11
15
  ### v1.7.0
12
16
  * **Atualização:** Novas classes adiconadas, para simplificar a manipulação dos filtros de busca e das respostas da API do **IXC Provedor**.
13
17
  * 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()`.
package/README.md CHANGED
@@ -6,19 +6,23 @@
6
6
  [![npm](https://img.shields.io/npm/dt/ixc-orm.svg?style=for-the-badge)](https://www.npmjs.com/package/ixc-orm)
7
7
  ![Status](https://img.shields.io/badge/Status-Stable-brightgreen?style=for-the-badge)
8
8
  ![NPM Version](https://img.shields.io/npm/v/ixc-orm?style=for-the-badge)
9
-
10
- Esse ORM visa facilitar o consumo de dados da API oficial do [IXC Provedor](https://ixcsoft.com/ixc-provedor).\
9
+
10
+ Esse ORM foi criado com o intuito de facilitar o consumo de dados da API oficial do [IXC Provedor](https://ixcsoft.com/ixc-provedor).\
11
11
  Essa biblioteca não faz parte das bibliotecas oficiais da [IXCsoft](https://ixcsoft.com/) e foi desenvolvida de forma independente e sem fins lucrativos.
12
12
 
13
13
  </div>
14
14
 
15
15
 
16
- ## Instalação
16
+ ## Download
17
17
 
18
18
  ```bash
19
19
  npm install ixc-orm
20
20
  ```
21
- ou
21
+
22
+ ```bash
23
+ pnpm add ixc-orm
24
+ ```
25
+
22
26
  ```bash
23
27
  yarn add ixc-orm
24
28
  ```
@@ -26,10 +30,34 @@ yarn add ixc-orm
26
30
 
27
31
  ## Como utilizar
28
32
 
29
- As classes que representarão as tabelas dentro do banco de dados do seu servidor IXC, deverão herdar da classe `IxcOrm` (nova versão), como no exemplo a seguir:
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
+
35
+ > [!NOTE]\
36
+ > Versão 1.7.1 `stable`
37
+
38
+ - **IXC_ACCESS_TOKEN** Um token de API gerado dentro do IXC Provedor.
39
+ - **IXC_SERVER_DOMAIN** O domínio do seu servidor IXC Provedor.
40
+
41
+ ```ini
42
+ IXC_ACCESS_TOKEN=conteúdo-do-token-gerado-dentro-do-ixc
43
+ IXC_SERVER_DOMAIN=www.dominio-do-seu-servidor-ixc.com.br
44
+ ```
45
+
46
+
47
+ > Versão 1.6.0 ou anterior:
48
+
49
+ - **IXC_HOST** A url do seu servidor IXC Provedor.
50
+ - **IXC_TOKEN** Um token de API gerado dentro do IXC Provedor.
51
+
52
+ ```ini
53
+ IXC_HOST="https://dominiodoservidorixc.com.br/webservice/v1"
54
+ IXC_TOKEN="8:k4n8wk1946j7mimthei869cq1zz2u940f2gqobqg081y2oefl80mzhtq2wud3gqp"
55
+ ```
56
+
57
+ 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:
30
58
 
31
59
  > [!NOTE]\
32
- > Versão 1.7.0 `stable`
60
+ > Versão 1.7.1 `stable`
33
61
 
34
62
  ```typescript
35
63
  import { IxcOrm } from 'ixc-orm';
@@ -56,7 +84,7 @@ class Contrato extends IXCClient {
56
84
  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.
57
85
 
58
86
  > [!NOTE]\
59
- > Versão 1.7.0 `stable`
87
+ > Versão 1.7.1 `stable`
60
88
 
61
89
  ```typescript
62
90
  import { IxcResponse, Sort } from 'ixc-orm';
@@ -101,8 +129,8 @@ const contratos = await contrato.find(id_contrato)
101
129
  ## Recursos da API do IXC Provedor
102
130
 
103
131
  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.\
104
- Você não precisará se preocupar em criar uma classe `Boleto` que herde da classe `IXCClient`, por exemplo,\
105
- nem encadear chamadas `where`. Basta seguir o exemplo abaixo:
132
+ Para isso, você não precisará se preocupar em criar uma classe `Boleto` que herde da classe `IxcOrm`, por exemplo,\
133
+ nem encadear chamadas de filtros. Basta fazer como no exemplo a seguir:
106
134
 
107
135
  ```typescript
108
136
  import { Recurso } from 'ixc-orm';
@@ -112,36 +140,9 @@ const id_contrato = 45852;
112
140
  const response = await Recurso.desbloqueioDeConfianca(id_contrato);
113
141
  ```
114
142
 
115
- > Dos recursos disponibilizados pela API do **IXC Provedor**, esta biblioteca já implementou os seguintes recursos:\
143
+ > Dos recursos disponibilizados pela API do **IXC Provedor**, essa biblioteca já implementou:\
116
144
  > `get_boleto`, `desbloqueio_confianca` e `cliente_contrato_btn_lib_temp_24722`.\
117
- > Obs: Os nomes dos recursos estão de acordo com a API do **IXC Provedor** a fim de facilitar o estudo de sua documentação oficial.
118
-
119
-
120
- ## Variáveis de Ambiente
121
-
122
- Para configurar a comunicação da biblioteca com seu servidor IXC, é necessário adicionar as seguintes variáveis de ambiente a um arquivo `.env`, que esteja localizado no diretório raiz do seu projeto.
123
-
124
- > [!NOTE]\
125
- > Versão 1.7.0 `stable`
126
-
127
- - **IXC_ACCESS_TOKEN** Um token de API gerado dentro do IXC Provedor.
128
- - **IXC_SERVER_DOMAIN** O domínio do seu servidor IXC Provedor.
129
-
130
- ```ini
131
- IXC_ACCESS_TOKEN=conteúdo-do-token-gerado-dentro-do-ixC
132
- IXC_SERVER_DOMAIN=www.dominio-do-seu-servidor-ixc.com.br
133
- ```
134
-
135
-
136
- > Versão 1.6.0 ou anterior:
137
-
138
- - **IXC_HOST** A url do seu servidor **IXC Provedor**.
139
- - **IXC_TOKEN** Um token de API gerado dentro do **IXC Provedor**.
140
-
141
- ```ini
142
- IXC_HOST="https://dominiodoservidorixc.com.br/webservice/v1"
143
- IXC_TOKEN="8:k4n8wk1946j7mimthei869cq1zz2u940f2gqobqg081y2oefl80mzhtq2wud3gqp"
144
- ```
145
+ > 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.
145
146
 
146
147
 
147
148
  # Contribuições
@@ -1,18 +1,26 @@
1
1
  export default class IxcResponse {
2
2
  private data;
3
+ private text;
3
4
  /**
4
5
  * Cria um novo objeto no formato de uma resposta padrão do IXC Provedor.
5
6
  *
6
7
  * @param error Uma exceção capturada por um bloco try-catch.
7
8
  * @returns Um objeto de resposta do IXC Provedor.
8
9
  */
9
- static createPropsWithError(error: any): string;
10
+ static createResponseTextWithError(error: any): string;
10
11
  /**
11
12
  * Método construtor da classe.
12
13
  *
13
14
  * @param text O conteúdo da resposta do IXc Provedor, no formato de texto.
14
15
  */
15
16
  constructor(text: string);
17
+ /**
18
+ * Verifica se o IXC Provedor retornou uma mensagem de erro.
19
+ *
20
+ * @returns **true** se o corpo da mensagem estiver dentro de tags HTML e se a mensagem dentro das tags
21
+ * contiver a palavra "erro". Ou se o objeto da resposta possuir a propriedade { "type": "error", ... }.
22
+ */
23
+ fail(): boolean;
16
24
  /**
17
25
  * Obtém a quantidade total dos registros encontrados no banco de dados, além dos retornados na página atual.
18
26
  *
@@ -39,6 +47,7 @@ export default class IxcResponse {
39
47
  registros(): Array<{
40
48
  [key: string]: any;
41
49
  }>;
42
- private parseDataFromText;
43
- private parseDataFromHTML;
50
+ private responseTextHasHtml;
51
+ private createDataFromText;
52
+ private createDataFromHtml;
44
53
  }
@@ -8,7 +8,7 @@ class IxcResponse {
8
8
  * @param error Uma exceção capturada por um bloco try-catch.
9
9
  * @returns Um objeto de resposta do IXC Provedor.
10
10
  */
11
- static createPropsWithError(error) {
11
+ static createResponseTextWithError(error) {
12
12
  var _a;
13
13
  const response = {
14
14
  type: 'error',
@@ -25,7 +25,25 @@ class IxcResponse {
25
25
  * @param text O conteúdo da resposta do IXc Provedor, no formato de texto.
26
26
  */
27
27
  constructor(text) {
28
- this.data = this.parseDataFromText(text);
28
+ this.text = text;
29
+ this.data = this.createDataFromText();
30
+ }
31
+ /**
32
+ * Verifica se o IXC Provedor retornou uma mensagem de erro.
33
+ *
34
+ * @returns **true** se o corpo da mensagem estiver dentro de tags HTML e se a mensagem dentro das tags
35
+ * contiver a palavra "erro". Ou se o objeto da resposta possuir a propriedade { "type": "error", ... }.
36
+ */
37
+ fail() {
38
+ const hasHtml = this.responseTextHasHtml();
39
+ const hasError = this.message().includes('erro');
40
+ if (hasHtml && hasError) {
41
+ return true;
42
+ }
43
+ if (this.data && Object.keys(this.data).includes('type')) {
44
+ return this.data.type === 'error';
45
+ }
46
+ return false;
29
47
  }
30
48
  /**
31
49
  * Obtém a quantidade total dos registros encontrados no banco de dados, além dos retornados na página atual.
@@ -75,15 +93,18 @@ class IxcResponse {
75
93
  }
76
94
  return this.data.registros;
77
95
  }
78
- parseDataFromText(text) {
79
- const isValidHTML = (text === null || text === void 0 ? void 0 : text.length) && text.includes('<div style=');
80
- if (isValidHTML) {
81
- return this.parseDataFromHTML(text);
96
+ responseTextHasHtml() {
97
+ var _a;
98
+ return !(!((_a = this.text) === null || _a === void 0 ? void 0 : _a.length)) && this.text.startsWith('<div style=');
99
+ }
100
+ createDataFromText() {
101
+ if (this.responseTextHasHtml()) {
102
+ return this.createDataFromHtml();
82
103
  }
83
- return JSON.parse(text);
104
+ return JSON.parse(this.text);
84
105
  }
85
- parseDataFromHTML(html) {
86
- const dom = new jsdom_1.JSDOM(html);
106
+ createDataFromHtml() {
107
+ const dom = new jsdom_1.JSDOM(this.text);
87
108
  return {
88
109
  type: 'error',
89
110
  page: 0,
@@ -174,7 +174,7 @@ class RequestEmitter {
174
174
  return yield response.text();
175
175
  }
176
176
  catch (error) {
177
- return IxcResponse_1.default.createPropsWithError(error);
177
+ return IxcResponse_1.default.createResponseTextWithError(error);
178
178
  }
179
179
  });
180
180
  }
package/jest.config.ts CHANGED
@@ -7,13 +7,14 @@ const config: Config = {
7
7
  collectCoverage: true,
8
8
  coverageDirectory: 'coverage',
9
9
  coverageProvider: 'v8',
10
+ testEnvironment: "node",
10
11
 
11
12
  transform: {
12
13
  '^.+\\.(ts|tsx)$': 'ts-jest'
13
14
  },
14
15
 
15
- coverageReporters: [
16
- 'json'
16
+ collectCoverageFrom: [
17
+ "**/*.(t|j)s"
17
18
  ],
18
19
 
19
20
  setupFiles: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ixc-orm",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",
@@ -9,7 +9,8 @@
9
9
  "declare": "tsc --declaration",
10
10
  "build": "tsc --build",
11
11
  "dev": "nodemon --watch \"src//\" --exec \"ts-node src/index.ts\" -e ts",
12
- "test": "jest"
12
+ "test": "jest",
13
+ "test:cov": "jest --coverage"
13
14
  },
14
15
  "repository": {
15
16
  "type": "git",
@@ -22,7 +23,7 @@
22
23
  "IXC Provedor"
23
24
  ],
24
25
  "author": {
25
- "name": "Felipe Sousa",
26
+ "name": "Felipe S. Carmo",
26
27
  "email": "fscarmo@proton.me",
27
28
  "url": "https://github.com/SousaFelipe"
28
29
  },