@bitize/bitmde 0.18.0 → 0.19.0

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
@@ -2,6 +2,45 @@
2
2
 
3
3
  ## [Não publicado]
4
4
 
5
+ ## [0.19.0] / 2026-10-03
6
+
7
+ > Muda o comportamento padrão de transporte e deixa de suportar o Node 20; leia [Compatibilidade](#compatibilidade) antes de atualizar.
8
+
9
+ ### Modificado
10
+
11
+ - **O certificado do servidor da SEFAZ passa a ser validado por padrão** (`rejectUnauthorized: true`). Até a 0.18.0 o padrão era `false`: a biblioteca aceitava qualquer servidor, inclusive um intermediário malicioso, e apresentava a ele o certificado A1 no mTLS
12
+ - **A cadeia padrão passa a somar as raízes do Node à ICP-Brasil, em vez de substituí-las.** A cadeia embarcada (AC Raiz Brasileira v10 e AC SERPRO SSLv1) não valida mais o Ambiente Nacional, que hoje serve `AC SERPRO AR46 OV TLS CA 2025 ← GlobalSign Root R46`, e a opção `ca` do Node descarta as raízes padrão. Quem ligava `rejectUnauthorized: true`, como esta documentação recomendava, recebia sempre `UNABLE_TO_GET_ISSUER_CERT_LOCALLY`. As raízes respeitam `NODE_EXTRA_CA_CERTS` e `--use-system-ca` quando o Node oferece `tls.getCACertificates`
13
+ - **Erro de transporte deixa de se disfarçar de status HTTP.** Sem resposta da SEFAZ, o retorno vinha com `status` 500, 502 ou 504 sintético e `resXml: '<error>mensagem</error>'`, e o código do erro se perdia. Agora vem com `status: 0`, `resXml: ''`, `transportError: { code, message }` e `error: 'Falha de transporte (<code>): <message>'`. Resposta HTTP real da SEFAZ, inclusive 5xx, não muda. Ver [ADR 0014](https://github.com/bitize/bitmde/blob/main/.docs/arquitetura/decisoes/0014-tls-validado-por-padrao-e-erro-de-transporte-explicito.md)
14
+
15
+ ### Adicionado
16
+
17
+ - `CA_PADRAO` e `CA_ICP_BRASIL` exportados na raiz do pacote, nas três formas (`module.exports`, `.default`, `.mde`): a cadeia que a biblioteca usa por padrão e só a ICP-Brasil embarcada. São arrays de PEM congelados, para compor como `httpsOptions: { ca: [...CA_PADRAO, minhaCa] }`
18
+ - Campo `transportError?: { code, message }` no retorno dos três métodos de consulta e do `enviarEvento`
19
+ - `engines: { node: ">=22" }` no `package.json`
20
+ - Workflow `cadeia-tls.yml`, que confere toda semana o handshake TLS com `www1` e `hom1` usando `CA_PADRAO`, para a próxima troca de cadeia do Ambiente Nacional aparecer antes de chegar a quem consome
21
+
22
+ ### Removido
23
+
24
+ - **Node 20 deixa de ser suportado**: sem suporte do projeto Node.js desde abril de 2026, sai da matriz de testes da CI. A biblioteca passa a exigir Node 22 ou posterior
25
+
26
+ ### Compatibilidade
27
+
28
+ Nenhuma assinatura muda, mas dois comportamentos padrão mudam, daí o bump de minor (`^0.18.0` não resolve para a 0.19.0):
29
+
30
+ 1. **Servidor cuja cadeia não fecha em `CA_PADRAO` passa a ser recusado.** Para os endpoints do Ambiente Nacional, que são os únicos que a biblioteca chama, nada muda. Atrás de um proxy que reassina TLS, acrescente a CA dele com `NODE_EXTRA_CA_CERTS` ou com `httpsOptions: { ca: [...CA_PADRAO, caDoProxy] }`. Quem já passava `ca` próprio continua no controle, porque `httpsOptions` sobrescreve o padrão.
31
+ 2. **Erro de transporte muda de forma.** Quem testa só `if (retorno.error)` não precisa mudar nada. Quem lia `status` 500/502/504 ou procurava `<error>` em `resXml` passa a usar `transportError`:
32
+
33
+ ```diff
34
+ -if (retorno.status === 502 && /^<error>/.test(retorno.resXml)) {
35
+ +if (retorno.transportError) {
36
+ + log(retorno.transportError.code, retorno.transportError.message)
37
+ }
38
+ ```
39
+
40
+ Voltar ao comportamento antigo de TLS ainda é possível com `httpsOptions: { rejectUnauthorized: false }`, e não é recomendado.
41
+
42
+ Quem ainda roda Node 20 recebe um aviso de `engines` na instalação e deve atualizar para o Node 22 ou o 24, ambos LTS.
43
+
5
44
  ## [0.18.0] / 2026-10-01
6
45
 
7
46
  ### Corrigido
package/README.md CHANGED
@@ -25,6 +25,7 @@ npm i @bitize/bitmde
25
25
 
26
26
  - Possuir um **Certificado A1** válido emitido por uma Autoridade Certificadora credenciada pela Infraestrutura de Chaves Públicas Brasileira – **ICP-Brasil**.
27
27
  - O certificado pode ser usando no formato **PFX** e **Senha** _OU_ **cert.pem** e **key.pem**
28
+ - **Node.js 22 ou posterior.** O Node 20, sem suporte desde abril de 2026, deixou de ser testado na 0.19.0.
28
29
 
29
30
  ## Funcionalidades
30
31
 
@@ -56,7 +57,7 @@ new DistribuicaoDFe(config)
56
57
  - `tpAmb` `<String>` - [OBRIGATÓRIO] - Identificação de Ambiente. Informar `'1'` para **Produção** ou `'2'` para **Homologação**.
57
58
  - `options` `<Object>` - [OPCIONAL]
58
59
  - `requestOptions` `<AxiosRequestConfig>` - [OPCIONAL]
59
- - `httpsOptions` `<AgentOptions>` - [OPCIONAL]
60
+ - `httpsOptions` `<AgentOptions>` - [OPCIONAL] - Opções do `https.Agent`, mescladas por cima do padrão `{ ca: CA_PADRAO, rejectUnauthorized: true }`. Ver [Conexão com a SEFAZ](#conexão-com-a-sefaz).
60
61
 
61
62
  ### Consulta por ultNSU
62
63
 
@@ -255,7 +256,7 @@ new RecepcaoEvento(config)
255
256
  - `timezone` `<String>` - [OPCIONAL] - Fuso horário do autor. É utilizado `'America/Sao_Paulo'` como valor padrão. Consulte a tabela [lista de timezones](#lista-de-timezones) válidos para o Brasil.
256
257
  - `options` `<Object>` - [OPCIONAL]
257
258
  - `requestOptions` `<AxiosRequestConfig>` - [OPCIONAL]
258
- - `httpsOptions` `<AgentOptions>` - [OPCIONAL]
259
+ - `httpsOptions` `<AgentOptions>` - [OPCIONAL] - Opções do `https.Agent`, mescladas por cima do padrão `{ ca: CA_PADRAO, rejectUnauthorized: true }`. Ver [Conexão com a SEFAZ](#conexão-com-a-sefaz).
259
260
 
260
261
  ### Enviar Lote de Eventos
261
262
 
@@ -347,6 +348,60 @@ console.log(manifestacao)
347
348
  // }
348
349
  ```
349
350
 
351
+ ## Conexão com a SEFAZ
352
+
353
+ ### Validação do certificado do servidor
354
+
355
+ O certificado do servidor da SEFAZ é **validado por padrão**. Sem `httpsOptions`, o agente HTTPS usa:
356
+
357
+ ```js
358
+ { ca: CA_PADRAO, rejectUnauthorized: true }
359
+ ```
360
+
361
+ A biblioteca exporta as duas cadeias que usa:
362
+
363
+ - `CA_PADRAO` — as raízes que o Node usaria por padrão, somadas à cadeia ICP-Brasil. Inclui `NODE_EXTRA_CA_CERTS` e `--use-system-ca` quando o Node oferece `tls.getCACertificates` (22.15 ou posterior); nas versões do Node 22 anteriores a ela, usa o bundle da Mozilla (`tls.rootCertificates`). É montada uma vez, quando o pacote é carregado.
364
+ - `CA_ICP_BRASIL` — só a cadeia ICP-Brasil embarcada (AC Raiz Brasileira v10 e AC SERPRO SSLv1).
365
+
366
+ As duas são arrays de PEM congelados. Informar `ca` em `httpsOptions` **substitui** a cadeia inteira. Para acrescentar uma AC, por exemplo a de um proxy corporativo, some à cadeia padrão:
367
+
368
+ ```js
369
+ const { CA_PADRAO, DistribuicaoDFe } = require('@bitize/bitmde')
370
+
371
+ const distribuicao = new DistribuicaoDFe({
372
+ // ...
373
+ options: {
374
+ httpsOptions: {
375
+ ca: [...CA_PADRAO, fs.readFileSync('./minha-ca.pem', 'utf8')],
376
+ },
377
+ },
378
+ })
379
+ ```
380
+
381
+ Desligar a validação ainda é possível com `httpsOptions: { rejectUnauthorized: false }`, mas **não é recomendado**: assim a biblioteca aceita qualquer servidor e apresenta a ele o certificado A1 no mTLS.
382
+
383
+ ### Erro de transporte
384
+
385
+ Quando não há resposta HTTP (falha na cadeia TLS, DNS, conexão recusada, timeout), a biblioteca não lança. O retorno vem com `status: 0` e o motivo em `transportError`:
386
+
387
+ ```js
388
+ // {
389
+ // data: {},
390
+ // reqXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap12:Body></soap12:Envelope>',
391
+ // resXml: '',
392
+ // status: 0,
393
+ // error: 'Falha de transporte (UNABLE_TO_GET_ISSUER_CERT_LOCALLY): unable to get local issuer certificate',
394
+ // transportError: {
395
+ // code: 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY',
396
+ // message: 'unable to get local issuer certificate',
397
+ // },
398
+ // }
399
+ ```
400
+
401
+ `transportError.code` é o código do Node ou do axios, sem tradução: `ECONNREFUSED`, `ENOTFOUND`, `ECONNRESET`, `ECONNABORTED` (timeout), `UNABLE_TO_GET_ISSUER_CERT_LOCALLY` (cadeia), entre outros. Sem código, vem `ERR_DESCONHECIDO`. `error` continua preenchido, então `if (retorno.error)` cobre esse caso como antes.
402
+
403
+ Uma resposta HTTP de erro da SEFAZ, como um `502` ou um `503`, chega com o status real, o corpo em `resXml` e **sem** `transportError`. Então `status: 0` significa sempre "a SEFAZ não respondeu".
404
+
350
405
  ## Sobre o BitERP
351
406
 
352
407
  O `@bitize/bitmde` é mantido pela equipe do **[BitERP](https://www.biterp.ai)**, um ERP online que automatiza a rotina fiscal, financeira e comercial de empresas brasileiras.
@@ -12,7 +12,7 @@ declare class DistribuicaoDFe {
12
12
  * @param {'1' | '2'} config.tpAmb
13
13
  * @param {Object} [config.options]
14
14
  * @param {import('axios').AxiosRequestConfig} [config.options.requestOptions]
15
- * @param {import('https').AgentOptions} [config.options.httpsOptions]
15
+ * @param {import('https').AgentOptions} [config.options.httpsOptions] Mesclado por cima do padrão `{ ca: CA_PADRAO, rejectUnauthorized: true }`. Informar `ca` substitui a cadeia inteira; para somar uma AC, use `[...CA_PADRAO, minhaCa]`.
16
16
  */
17
17
  constructor(config: {
18
18
  pfx?: Buffer;
@@ -63,6 +63,10 @@ declare class DistribuicaoDFe {
63
63
  }];
64
64
  };
65
65
  error: string;
66
+ transportError?: {
67
+ code: string;
68
+ message: string;
69
+ };
66
70
  reqXml: string;
67
71
  resXml: string;
68
72
  status: number;
@@ -92,6 +96,10 @@ declare class DistribuicaoDFe {
92
96
  }];
93
97
  };
94
98
  error: string;
99
+ transportError?: {
100
+ code: string;
101
+ message: string;
102
+ };
95
103
  reqXml: string;
96
104
  resXml: string;
97
105
  status: number;
@@ -121,6 +129,10 @@ declare class DistribuicaoDFe {
121
129
  }];
122
130
  };
123
131
  error: string;
132
+ transportError?: {
133
+ code: string;
134
+ message: string;
135
+ };
124
136
  reqXml: string;
125
137
  resXml: string;
126
138
  status: number;
@@ -12,7 +12,7 @@ declare class RecepcaoEvento {
12
12
  * @param {'America/Araguaina' | 'America/Bahia' | 'America/Belem' | 'America/Boa_Vista' | 'America/Campo_Grande' | 'America/Cuiaba' | 'America/Fortaleza' | 'America/Maceio' | 'America/Manaus' | 'America/Noronha' | 'America/Porto_Velho' | 'America/Recife' | 'America/Rio_Branco' | 'America/Sao_Paulo'} [config.timezone = 'America/Sao_Paulo']
13
13
  * @param {Object} [config.options]
14
14
  * @param {import('axios').AxiosRequestConfig} [config.options.requestOptions]
15
- * @param {import('https').AgentOptions} [config.options.httpsOptions]
15
+ * @param {import('https').AgentOptions} [config.options.httpsOptions] Mesclado por cima do padrão `{ ca: CA_PADRAO, rejectUnauthorized: true }`. Informar `ca` substitui a cadeia inteira; para somar uma AC, use `[...CA_PADRAO, minhaCa]`.
16
16
  */
17
17
  constructor(config: {
18
18
  pfx?: Buffer;
@@ -74,6 +74,10 @@ declare class RecepcaoEvento {
74
74
  }];
75
75
  };
76
76
  error: string;
77
+ transportError?: {
78
+ code: string;
79
+ message: string;
80
+ };
77
81
  reqXml: string;
78
82
  resXml: string;
79
83
  status: number;
@@ -4,7 +4,7 @@ declare class DistribuicaoController {
4
4
  /**
5
5
  *
6
6
  * @param {Object} opts
7
- * @returns {Promise<{data:{tpAmb: string,verAplic: string,cStat: string,xMotivo: string,dhResp: string,ultNSU: string,maxNSU: string, docZip:[{xml: string,json: Object,nsu: string,schema: string}], docZipErrors:[{nsu: string,schema: string,error: string}]}, error: string, reqXml: string, resXml: string, status: number}>}
7
+ * @returns {Promise<{data:{tpAmb: string,verAplic: string,cStat: string,xMotivo: string,dhResp: string,ultNSU: string,maxNSU: string, docZip:[{xml: string,json: Object,nsu: string,schema: string}], docZipErrors:[{nsu: string,schema: string,error: string}]}, error: string, transportError?: {code: string, message: string}, reqXml: string, resXml: string, status: number}>}
8
8
  */
9
9
  static enviar(opts: any): Promise<{
10
10
  data: {
@@ -28,6 +28,10 @@ declare class DistribuicaoController {
28
28
  }];
29
29
  };
30
30
  error: string;
31
+ transportError?: {
32
+ code: string;
33
+ message: string;
34
+ };
31
35
  reqXml: string;
32
36
  resXml: string;
33
37
  status: number;
@@ -24,6 +24,10 @@ declare const controller: Readonly<{
24
24
  }];
25
25
  };
26
26
  error: string;
27
+ transportError?: {
28
+ code: string;
29
+ message: string;
30
+ };
27
31
  reqXml: string;
28
32
  resXml: string;
29
33
  status: number;
@@ -55,6 +59,10 @@ declare const controller: Readonly<{
55
59
  }];
56
60
  };
57
61
  error: string;
62
+ transportError?: {
63
+ code: string;
64
+ message: string;
65
+ };
58
66
  reqXml: string;
59
67
  resXml: string;
60
68
  status: number;
@@ -4,7 +4,7 @@ declare class RecepcaoController {
4
4
  /**
5
5
  *
6
6
  * @param {Object} opts
7
- * @returns {Promise<{data:{idLote: string,tpAmb: string,verAplic: string,cOrgao: string,cStat: string,xMotivo: string, infEvento:[{tpAmb: string,verAplic: string,cOrgao: string,cStat: string,xMotivo: string,chNFe: string,tpEvento: string,xEvento: string,nSeqEvento: string,CNPJDest: string,dhRegEvento: string,nProt: string}]}, error: string, reqXml: string, resXml: string, status: number}>}
7
+ * @returns {Promise<{data:{idLote: string,tpAmb: string,verAplic: string,cOrgao: string,cStat: string,xMotivo: string, infEvento:[{tpAmb: string,verAplic: string,cOrgao: string,cStat: string,xMotivo: string,chNFe: string,tpEvento: string,xEvento: string,nSeqEvento: string,CNPJDest: string,dhRegEvento: string,nProt: string}]}, error: string, transportError?: {code: string, message: string}, reqXml: string, resXml: string, status: number}>}
8
8
  */
9
9
  static enviar(opts: any): Promise<{
10
10
  data: {
@@ -30,6 +30,10 @@ declare class RecepcaoController {
30
30
  }];
31
31
  };
32
32
  error: string;
33
+ transportError?: {
34
+ code: string;
35
+ message: string;
36
+ };
33
37
  reqXml: string;
34
38
  resXml: string;
35
39
  status: number;
package/dist/env/ca.d.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  /**
2
- * Cadeia de Certificados da NF-e (www1.nfe.fazenda.gov.br)
3
- * Página Principal > Documentos > Diversos > Cadeia de Certificados do www1 (atualizada em 04/08/2021)
2
+ * Cadeia ICP-Brasil: AC Raiz Brasileira v10 e AC SERPRO SSLv1.
3
+ *
4
+ * Veio do portal da NF-e como "Cadeia de Certificados do www1 (atualizada em
5
+ * 04/08/2021)", mas deixou de ser a cadeia do www1/hom1: desde então o
6
+ * Ambiente Nacional serve AC SERPRO AR46 OV TLS CA 2025 ← GlobalSign Root R46,
7
+ * que só fecha com as raízes padrão do Node. Continua embarcada para quem
8
+ * fala com endpoint ICP-Brasil.
4
9
  * https://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=JuhROOiTOPA=
5
10
  */
6
11
  export const CA: string[];
12
+ export const CA_PADRAO: string[];
@@ -1,8 +1,9 @@
1
1
  import { CA } from "./ca";
2
+ import { CA_PADRAO } from "./ca";
2
3
  import { CODIGOS_UF } from "./uf";
3
4
  import { DISTRIBUICAO } from "./distribuicao";
4
5
  import { EVENTOS } from "./evento";
5
6
  import { RECEPCAO } from "./recepcao";
6
7
  import { VERSION } from "./version";
7
8
  import { ZONES } from "./zone";
8
- export { CA, CODIGOS_UF, DISTRIBUICAO, EVENTOS, RECEPCAO, VERSION, ZONES };
9
+ export { CA, CA_PADRAO, CODIGOS_UF, DISTRIBUICAO, EVENTOS, RECEPCAO, VERSION, ZONES };
@@ -10,6 +10,10 @@ declare class DistribuicaoHelper {
10
10
  static enviarConsulta(data: string, opts: any): Promise<{
11
11
  status: number;
12
12
  data: string;
13
+ transportError?: {
14
+ code: string;
15
+ message: string;
16
+ };
13
17
  }>;
14
18
  /**
15
19
  *
@@ -5,6 +5,10 @@ declare const helper: Readonly<{
5
5
  enviarConsulta(data: string, opts: any): Promise<{
6
6
  status: number;
7
7
  data: string;
8
+ transportError?: {
9
+ code: string;
10
+ message: string;
11
+ };
8
12
  }>;
9
13
  montarRequest(opts: any): string;
10
14
  montarResponse(data: string): Promise<{
@@ -44,6 +48,10 @@ declare const helper: Readonly<{
44
48
  enviarEvento(data: string, opts: any): Promise<{
45
49
  status: number;
46
50
  data: string;
51
+ transportError?: {
52
+ code: string;
53
+ message: string;
54
+ };
47
55
  }>;
48
56
  montarRequest(opts: any): string;
49
57
  montarResponse(data: string): {
@@ -78,6 +86,10 @@ declare const helper: Readonly<{
78
86
  retornoSefaz: {
79
87
  data: string;
80
88
  status: number;
89
+ transportError?: {
90
+ code: string;
91
+ message: string;
92
+ };
81
93
  };
82
94
  }): {
83
95
  data: any;
@@ -10,6 +10,10 @@ declare class RecepcaoHelper {
10
10
  static enviarEvento(data: string, opts: any): Promise<{
11
11
  status: number;
12
12
  data: string;
13
+ transportError?: {
14
+ code: string;
15
+ message: string;
16
+ };
13
17
  }>;
14
18
  /**
15
19
  *
@@ -9,6 +9,7 @@ declare class RetornoHelper {
9
9
  * @param {Object} options.retornoSefaz
10
10
  * @param {string} options.retornoSefaz.data
11
11
  * @param {number} options.retornoSefaz.status
12
+ * @param {{code: string, message: string}} [options.retornoSefaz.transportError]
12
13
  * @returns
13
14
  */
14
15
  static montarRetorno(options: {
@@ -17,6 +18,10 @@ declare class RetornoHelper {
17
18
  retornoSefaz: {
18
19
  data: string;
19
20
  status: number;
21
+ transportError?: {
22
+ code: string;
23
+ message: string;
24
+ };
20
25
  };
21
26
  }): {
22
27
  data: any;
package/dist/index.d.ts CHANGED
@@ -1,10 +1,16 @@
1
+ export const CA_ICP_BRASIL: readonly string[];
2
+ export const CA_PADRAO: readonly string[];
1
3
  import DistribuicaoDFe = require("./apis/distribuicaoDFe-api");
2
4
  import RecepcaoEvento = require("./apis/recepcaoEvento-api");
3
5
  declare namespace _default {
6
+ export { CA_ICP_BRASIL };
7
+ export { CA_PADRAO };
4
8
  export { DistribuicaoDFe };
5
9
  export { RecepcaoEvento };
6
10
  }
7
11
  export declare namespace mde {
12
+ export { CA_ICP_BRASIL };
13
+ export { CA_PADRAO };
8
14
  export { DistribuicaoDFe };
9
15
  export { RecepcaoEvento };
10
16
  }
@@ -3,10 +3,17 @@ declare class Instance {
3
3
  constructor(opts: any);
4
4
  instance: import("axios").AxiosInstance;
5
5
  /**
6
- * @returns {Promise<{status: number, data: string}>}
6
+ * Sem resposta HTTP (cadeia TLS, DNS, conexão recusada, timeout, erro
7
+ * antes do envio), devolve `status: 0` e o motivo em `transportError`.
8
+ *
9
+ * @returns {Promise<{status: number, data: string, transportError?: {code: string, message: string}}>}
7
10
  */
8
11
  request(config: any): Promise<{
9
12
  status: number;
10
13
  data: string;
14
+ transportError?: {
15
+ code: string;
16
+ message: string;
17
+ };
11
18
  }>;
12
19
  }
package/lib/env/ca.js CHANGED
@@ -1,5 +1,6 @@
1
- let CA = [ "-----BEGIN CERTIFICATE-----\r\nMIIHAjCCBOqgAwIBAgIJAJVIeKgiEmNTMA0GCSqGSIb3DQEBDQUAMIGYMQswCQYD\r\nVQQGEwJCUjETMBEGA1UECgwKSUNQLUJyYXNpbDE9MDsGA1UECww0SW5zdGl0dXRv\r\nIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3JtYWNhbyAtIElUSTE1MDMG\r\nA1UEAwwsQXV0b3JpZGFkZSBDZXJ0aWZpY2Fkb3JhIFJhaXogQnJhc2lsZWlyYSB2\r\nMTAwHhcNMjAwMzEyMTkzMTQyWhcNMzIwNzAxMTIwMDU5WjCBjDELMAkGA1UEBhMC\r\nQlIxEzARBgNVBAoMCklDUC1CcmFzaWwxNTAzBgNVBAsMLEF1dG9yaWRhZGUgQ2Vy\r\ndGlmaWNhZG9yYSBSYWl6IEJyYXNpbGVpcmEgdjEwMTEwLwYDVQQDDChBdXRvcmlk\r\nYWRlIENlcnRpZmljYWRvcmEgZG8gU0VSUFJPIFNTTHYxMIICIjANBgkqhkiG9w0B\r\nAQEFAAOCAg8AMIICCgKCAgEA61jQVBX27GVzyZkJuyrEezqjBGdLSJDFRyGdwxbm\r\n8Ntr0AA8blhDaN5ASDOjqDESMA7xF38znfkZWBMLxJ3Ob0271W6G9bqgTwp/svhZ\r\ns91UcbZW6sB7gyxzMTGWLxcFMeBrurM0QpMVsp8hDH5Suv5rfP0YB9brz60k104u\r\nHG625rAcbRKHn7XsWJ1ZUQcwRzx1g0L1NlUKpsk0+eOAxTcVSVRTO33k+n6Gve83\r\n4MXMiG6Orved4isnEvQnl4AecCXOuUuM3vXZ+kdJGTpNy1HOy0coFdKCJSSCxU/y\r\nTbTiAiRJTc8rbvor3I7k7wR4ZDR8alDbW/Sbw1JEMtbQqMOXEOV7iEUIub0/uNT2\r\ng0oM4pu8DAxhIwy2YQCpjfCbzYu2bf1nabuOEQ2B4mFt/zgoxa5FLsM+0IjpCi8u\r\nz9RqLvYFo9pIy5BTi7JMkVfbgqcOv7vkQf3xF7sODdInCVRIbB0R6xpHm+bpitx9\r\nt5ip+Sf24QFlKbjy0gwVAnaEyf/iQF+t8qgcFBO65kyfH/2vs6iYg5TNhFKtjpqQ\r\niTyI7YkRkfTbLFdcgZbiRUUs5TFi0BkS4PAWupO1GgV9sJdk9gm3Z+KNZDgoAnu7\r\nCvhq1JXt6t7qO96WzBx9q9hi7T6eld1VFrV5Ya5kxM9Lgh+XcBDwfnDLI1Yoozbd\r\nMbkCAwEAAaOCAVcwggFTMIGtBgNVHSAEgaUwgaIwTwYGYEwBAYEJMEUwQwYIKwYB\r\nBQUHAgEWN2h0dHBzOi8vcmVwb3NpdG9yaW8uc2VycHJvLmdvdi5ici9kb2NzL2Rw\r\nY3NlcnByb3NzbC5wZGYwTwYGYEwBAgFpMEUwQwYIKwYBBQUHAgEWN2h0dHBzOi8v\r\ncmVwb3NpdG9yaW8uc2VycHJvLmdvdi5ici9kb2NzL2RwY3NlcnByb3NzbC5wZGYw\r\nQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJy\r\nL0xDUmFjcmFpenYxMC5jcmwwHwYDVR0jBBgwFoAUdPN+//yfU3rxfOurPqSm2hi6\r\nRWMwHQYDVR0OBBYEFK0WT0vxDL7CiqKFGNcNRiWTIuPNMA8GA1UdEwEB/wQFMAMB\r\nAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBDQUAA4ICAQCDvWkOYakalAHB\r\n3ZcifI9yLyuTtjR8eYXlfDesYr7zMFVlmduVghCgueBMZxmht9BpLq9/ceBWu1q8\r\nsKge5oNNyySPmBJFe+CLjtB7Z1Ljk0Q/7A59lMCDZajojJlSEnH6pdhxA1JD58E0\r\ndGsom3SufuBWxdNfgsvpQNXDoKp48VlkyL4DKFCdJExtzuR5IlcQbB1FrmB5m2zo\r\nGG6j7UdoevmikIv01la+8kyn7CF5aNubRE0cfwxulik5LNM1uLIwfUVwYbbQiB8z\r\nbaLUOS2lU/pYr+seLQ7VBPHps/guGB9hKei/Df49KWjDVplu3+AuZhBHqiK533VJ\r\nf9Uwv3Rvx8FCobT54OCrAVfnFs8F6sM3dPh1u7AbW3Ddpeo4oBH5kBA0feLvLk7v\r\nmOnOq64oPMMoj+g6x0B0v7tGqOrNBZK486MaU/uaJi+omx+Le9EfyIz39BbRYGdV\r\nJvO/9P8vn5XnNXsmqziw08ENLjHcrro48tRm3YX0/BUgoitjMUqyzlKTgQ8UOpfi\r\nXeJzqvxvUMO/HgZK9aknN3WQXWXxIFG01OHsEOTd2Nddqbrth5qmZE+1IxwEH+ys\r\nQQzlV0pnPL5K0bRuPCqvH4Jr0CmwV2PqD6dkjI/Sy77XDkTP8adAuYjIEynBoQ0b\r\ntqY/0rJPT3dztepWAwRHhKbvO1yYkA==\r\n-----END CERTIFICATE-----\r\n", "-----BEGIN CERTIFICATE-----\r\nMIIGrDCCBJSgAwIBAgIJANLVi0S/gZNCMA0GCSqGSIb3DQEBDQUAMIGYMQswCQYD\r\nVQQGEwJCUjETMBEGA1UECgwKSUNQLUJyYXNpbDE9MDsGA1UECww0SW5zdGl0dXRv\r\nIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3JtYWNhbyAtIElUSTE1MDMG\r\nA1UEAwwsQXV0b3JpZGFkZSBDZXJ0aWZpY2Fkb3JhIFJhaXogQnJhc2lsZWlyYSB2\r\nMTAwHhcNMTkwNzAxMTkxNTU5WhcNMzIwNzAxMTIwMDU5WjCBmDELMAkGA1UEBhMC\r\nQlIxEzARBgNVBAoMCklDUC1CcmFzaWwxPTA7BgNVBAsMNEluc3RpdHV0byBOYWNp\r\nb25hbCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxNTAzBgNVBAMM\r\nLEF1dG9yaWRhZGUgQ2VydGlmaWNhZG9yYSBSYWl6IEJyYXNpbGVpcmEgdjEwMIIC\r\nIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAk3AxKl1ZtP0pNyjChqO7qNkn\r\n+/sClZeqiV/Kd7KnnbkDbI2y3VWcUG7feCE/deIxot6GH6JXncRG794UZl+4doD0\r\nD0/cEwBd4DvrDSZm0RT40xhmYYOTxZDJxv+coTHdmsT5aNmSkktfjzYX4HQHh/7M\r\nem+kTOpT/3E4K6B7KVs9HkOT7nXx5yU1qYbVWqI0qpJM9mOTSFx8C9HiKcHvLCvt\r\n1ioXKPAmFuHPkayOcXP2MXeb+VRNjWKU4E+L2t5uZPKVx1M/9i1DztlLb4K8OfYg\r\nGaPDUSF1sxnoGk5qZHLleO6KjCpmuQepmgsBvxi2YNO7X2YUwQQx1AXNSolgtkAR\r\n5gt+1WzxhbFUhItQqlhqxgWHefLmiT5T/Ctz/P2v+zSO4efkkIzsi1iwD+ypZvM2\r\nlnIvB24RcSN6jzmCahLPX4CwjwIK6JsSoMVxIhpZHCguUP4LXqP8IWUZ6WgS/4zB\r\n7B9E0EICl2rM1PRy+6ulv+ZOW256e8a0pijUB+hXM1msUq9L92476FAAX8va3sP7\r\n+Uut94+bGHmubcTLImWUPrxNT7QyrvE3FyHicfiHioeFL2oV4cXTLZrEq2wS8R4P\r\nKPdSzNn5Z9e2uMEGYQaSNO+OwvVycpIhOBOqrm12wJ9ZhWKtM5UOo34/o37r5ZBI\r\nTYXAGbhqQDB9mWXwH+0CAwEAAaOB9jCB8zBOBgNVHSAERzBFMEMGBWBMAQEAMDow\r\nOAYIKwYBBQUHAgEWLGh0dHA6Ly9hY3JhaXouaWNwYnJhc2lsLmdvdi5ici9EUENh\r\nY3JhaXoucGRmMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9hY3JhaXouaWNwYnJh\r\nc2lsLmdvdi5ici9MQ1JhY3JhaXp2MTAuY3JsMB8GA1UdIwQYMBaAFHTzfv/8n1N6\r\n8Xzrqz6kptoYukVjMB0GA1UdDgQWBBR0837//J9TevF866s+pKbaGLpFYzAPBgNV\r\nHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQ0FAAOCAgEA\r\neCNhBSuy/Ih/T+1VOtAJju85SrtoE3vET1qXASpmjQllDHG/ph7VFNRAkC+gha+B\r\nCbjoA5oJ/8wwl+Qdp1KGz6nXXFTLx3osU+kjm0srmBf9nyXHPqvFyvBeB0A7sYb7\r\nTmII9GKD20oCxsdkccR/oE/JuTaNnGq0GYZ2aDb5v62uLi21Y6P9UBiTxZqQ4ojW\r\nET6kXNjlK238jpXv17FR8Sg3VusCvX7Q8eJkavvHHZDeWck2fSA+ycAc2JeL2Z0B\r\nMSxGWpH32WM9J8+6XqCJUXHiWEV0zCE8wDYiYC+047pTxQI/gB/FcU7jvylh98DJ\r\nkQPHd/Tp6Og3ynlDA9n9uBbxYHVRZs9vsZ/7xTFaxRe+zk8dhgKgZ/3RrcMFB570\r\n2t8LFbyuUE/kQVY6rZ0QJ9qMWQ7VPLRwRhiMeU3k8WDJb/tBbOXHBqldTbWyQ+mp\r\nMEDWhbrzE/IED82wAuO23Tb05cYk2xC7+Izef8fSc3XdJDuPSbcDpWukzyCDtSEH\r\nisLiGEtIbYRiPsF3czlQPsnIEVoTTCWxHCH1zYR6zScSv18Qh69qVe2J40K5jZoP\r\nGEOhq/oKhVJQAdvAFW5Odp7mF3Tk9nivjjsctJSxY26LFiV5GRV+07SSse4ti0aO\r\njO5PLg5SWjfcOtBG2rz02EIvQAmLcb0kGBtfdj0lW/w=\r\n-----END CERTIFICATE-----\r\n" ];
1
+ let tls = require("tls"), CA = [ "-----BEGIN CERTIFICATE-----\r\nMIIHAjCCBOqgAwIBAgIJAJVIeKgiEmNTMA0GCSqGSIb3DQEBDQUAMIGYMQswCQYD\r\nVQQGEwJCUjETMBEGA1UECgwKSUNQLUJyYXNpbDE9MDsGA1UECww0SW5zdGl0dXRv\r\nIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3JtYWNhbyAtIElUSTE1MDMG\r\nA1UEAwwsQXV0b3JpZGFkZSBDZXJ0aWZpY2Fkb3JhIFJhaXogQnJhc2lsZWlyYSB2\r\nMTAwHhcNMjAwMzEyMTkzMTQyWhcNMzIwNzAxMTIwMDU5WjCBjDELMAkGA1UEBhMC\r\nQlIxEzARBgNVBAoMCklDUC1CcmFzaWwxNTAzBgNVBAsMLEF1dG9yaWRhZGUgQ2Vy\r\ndGlmaWNhZG9yYSBSYWl6IEJyYXNpbGVpcmEgdjEwMTEwLwYDVQQDDChBdXRvcmlk\r\nYWRlIENlcnRpZmljYWRvcmEgZG8gU0VSUFJPIFNTTHYxMIICIjANBgkqhkiG9w0B\r\nAQEFAAOCAg8AMIICCgKCAgEA61jQVBX27GVzyZkJuyrEezqjBGdLSJDFRyGdwxbm\r\n8Ntr0AA8blhDaN5ASDOjqDESMA7xF38znfkZWBMLxJ3Ob0271W6G9bqgTwp/svhZ\r\ns91UcbZW6sB7gyxzMTGWLxcFMeBrurM0QpMVsp8hDH5Suv5rfP0YB9brz60k104u\r\nHG625rAcbRKHn7XsWJ1ZUQcwRzx1g0L1NlUKpsk0+eOAxTcVSVRTO33k+n6Gve83\r\n4MXMiG6Orved4isnEvQnl4AecCXOuUuM3vXZ+kdJGTpNy1HOy0coFdKCJSSCxU/y\r\nTbTiAiRJTc8rbvor3I7k7wR4ZDR8alDbW/Sbw1JEMtbQqMOXEOV7iEUIub0/uNT2\r\ng0oM4pu8DAxhIwy2YQCpjfCbzYu2bf1nabuOEQ2B4mFt/zgoxa5FLsM+0IjpCi8u\r\nz9RqLvYFo9pIy5BTi7JMkVfbgqcOv7vkQf3xF7sODdInCVRIbB0R6xpHm+bpitx9\r\nt5ip+Sf24QFlKbjy0gwVAnaEyf/iQF+t8qgcFBO65kyfH/2vs6iYg5TNhFKtjpqQ\r\niTyI7YkRkfTbLFdcgZbiRUUs5TFi0BkS4PAWupO1GgV9sJdk9gm3Z+KNZDgoAnu7\r\nCvhq1JXt6t7qO96WzBx9q9hi7T6eld1VFrV5Ya5kxM9Lgh+XcBDwfnDLI1Yoozbd\r\nMbkCAwEAAaOCAVcwggFTMIGtBgNVHSAEgaUwgaIwTwYGYEwBAYEJMEUwQwYIKwYB\r\nBQUHAgEWN2h0dHBzOi8vcmVwb3NpdG9yaW8uc2VycHJvLmdvdi5ici9kb2NzL2Rw\r\nY3NlcnByb3NzbC5wZGYwTwYGYEwBAgFpMEUwQwYIKwYBBQUHAgEWN2h0dHBzOi8v\r\ncmVwb3NpdG9yaW8uc2VycHJvLmdvdi5ici9kb2NzL2RwY3NlcnByb3NzbC5wZGYw\r\nQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJy\r\nL0xDUmFjcmFpenYxMC5jcmwwHwYDVR0jBBgwFoAUdPN+//yfU3rxfOurPqSm2hi6\r\nRWMwHQYDVR0OBBYEFK0WT0vxDL7CiqKFGNcNRiWTIuPNMA8GA1UdEwEB/wQFMAMB\r\nAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBDQUAA4ICAQCDvWkOYakalAHB\r\n3ZcifI9yLyuTtjR8eYXlfDesYr7zMFVlmduVghCgueBMZxmht9BpLq9/ceBWu1q8\r\nsKge5oNNyySPmBJFe+CLjtB7Z1Ljk0Q/7A59lMCDZajojJlSEnH6pdhxA1JD58E0\r\ndGsom3SufuBWxdNfgsvpQNXDoKp48VlkyL4DKFCdJExtzuR5IlcQbB1FrmB5m2zo\r\nGG6j7UdoevmikIv01la+8kyn7CF5aNubRE0cfwxulik5LNM1uLIwfUVwYbbQiB8z\r\nbaLUOS2lU/pYr+seLQ7VBPHps/guGB9hKei/Df49KWjDVplu3+AuZhBHqiK533VJ\r\nf9Uwv3Rvx8FCobT54OCrAVfnFs8F6sM3dPh1u7AbW3Ddpeo4oBH5kBA0feLvLk7v\r\nmOnOq64oPMMoj+g6x0B0v7tGqOrNBZK486MaU/uaJi+omx+Le9EfyIz39BbRYGdV\r\nJvO/9P8vn5XnNXsmqziw08ENLjHcrro48tRm3YX0/BUgoitjMUqyzlKTgQ8UOpfi\r\nXeJzqvxvUMO/HgZK9aknN3WQXWXxIFG01OHsEOTd2Nddqbrth5qmZE+1IxwEH+ys\r\nQQzlV0pnPL5K0bRuPCqvH4Jr0CmwV2PqD6dkjI/Sy77XDkTP8adAuYjIEynBoQ0b\r\ntqY/0rJPT3dztepWAwRHhKbvO1yYkA==\r\n-----END CERTIFICATE-----\r\n", "-----BEGIN CERTIFICATE-----\r\nMIIGrDCCBJSgAwIBAgIJANLVi0S/gZNCMA0GCSqGSIb3DQEBDQUAMIGYMQswCQYD\r\nVQQGEwJCUjETMBEGA1UECgwKSUNQLUJyYXNpbDE9MDsGA1UECww0SW5zdGl0dXRv\r\nIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3JtYWNhbyAtIElUSTE1MDMG\r\nA1UEAwwsQXV0b3JpZGFkZSBDZXJ0aWZpY2Fkb3JhIFJhaXogQnJhc2lsZWlyYSB2\r\nMTAwHhcNMTkwNzAxMTkxNTU5WhcNMzIwNzAxMTIwMDU5WjCBmDELMAkGA1UEBhMC\r\nQlIxEzARBgNVBAoMCklDUC1CcmFzaWwxPTA7BgNVBAsMNEluc3RpdHV0byBOYWNp\r\nb25hbCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxNTAzBgNVBAMM\r\nLEF1dG9yaWRhZGUgQ2VydGlmaWNhZG9yYSBSYWl6IEJyYXNpbGVpcmEgdjEwMIIC\r\nIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAk3AxKl1ZtP0pNyjChqO7qNkn\r\n+/sClZeqiV/Kd7KnnbkDbI2y3VWcUG7feCE/deIxot6GH6JXncRG794UZl+4doD0\r\nD0/cEwBd4DvrDSZm0RT40xhmYYOTxZDJxv+coTHdmsT5aNmSkktfjzYX4HQHh/7M\r\nem+kTOpT/3E4K6B7KVs9HkOT7nXx5yU1qYbVWqI0qpJM9mOTSFx8C9HiKcHvLCvt\r\n1ioXKPAmFuHPkayOcXP2MXeb+VRNjWKU4E+L2t5uZPKVx1M/9i1DztlLb4K8OfYg\r\nGaPDUSF1sxnoGk5qZHLleO6KjCpmuQepmgsBvxi2YNO7X2YUwQQx1AXNSolgtkAR\r\n5gt+1WzxhbFUhItQqlhqxgWHefLmiT5T/Ctz/P2v+zSO4efkkIzsi1iwD+ypZvM2\r\nlnIvB24RcSN6jzmCahLPX4CwjwIK6JsSoMVxIhpZHCguUP4LXqP8IWUZ6WgS/4zB\r\n7B9E0EICl2rM1PRy+6ulv+ZOW256e8a0pijUB+hXM1msUq9L92476FAAX8va3sP7\r\n+Uut94+bGHmubcTLImWUPrxNT7QyrvE3FyHicfiHioeFL2oV4cXTLZrEq2wS8R4P\r\nKPdSzNn5Z9e2uMEGYQaSNO+OwvVycpIhOBOqrm12wJ9ZhWKtM5UOo34/o37r5ZBI\r\nTYXAGbhqQDB9mWXwH+0CAwEAAaOB9jCB8zBOBgNVHSAERzBFMEMGBWBMAQEAMDow\r\nOAYIKwYBBQUHAgEWLGh0dHA6Ly9hY3JhaXouaWNwYnJhc2lsLmdvdi5ici9EUENh\r\nY3JhaXoucGRmMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9hY3JhaXouaWNwYnJh\r\nc2lsLmdvdi5ici9MQ1JhY3JhaXp2MTAuY3JsMB8GA1UdIwQYMBaAFHTzfv/8n1N6\r\n8Xzrqz6kptoYukVjMB0GA1UdDgQWBBR0837//J9TevF866s+pKbaGLpFYzAPBgNV\r\nHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQ0FAAOCAgEA\r\neCNhBSuy/Ih/T+1VOtAJju85SrtoE3vET1qXASpmjQllDHG/ph7VFNRAkC+gha+B\r\nCbjoA5oJ/8wwl+Qdp1KGz6nXXFTLx3osU+kjm0srmBf9nyXHPqvFyvBeB0A7sYb7\r\nTmII9GKD20oCxsdkccR/oE/JuTaNnGq0GYZ2aDb5v62uLi21Y6P9UBiTxZqQ4ojW\r\nET6kXNjlK238jpXv17FR8Sg3VusCvX7Q8eJkavvHHZDeWck2fSA+ycAc2JeL2Z0B\r\nMSxGWpH32WM9J8+6XqCJUXHiWEV0zCE8wDYiYC+047pTxQI/gB/FcU7jvylh98DJ\r\nkQPHd/Tp6Og3ynlDA9n9uBbxYHVRZs9vsZ/7xTFaxRe+zk8dhgKgZ/3RrcMFB570\r\n2t8LFbyuUE/kQVY6rZ0QJ9qMWQ7VPLRwRhiMeU3k8WDJb/tBbOXHBqldTbWyQ+mp\r\nMEDWhbrzE/IED82wAuO23Tb05cYk2xC7+Izef8fSc3XdJDuPSbcDpWukzyCDtSEH\r\nisLiGEtIbYRiPsF3czlQPsnIEVoTTCWxHCH1zYR6zScSv18Qh69qVe2J40K5jZoP\r\nGEOhq/oKhVJQAdvAFW5Odp7mF3Tk9nivjjsctJSxY26LFiV5GRV+07SSse4ti0aO\r\njO5PLg5SWjfcOtBG2rz02EIvQAmLcb0kGBtfdj0lW/w=\r\n-----END CERTIFICATE-----\r\n" ], RAIZES_PADRAO = "function" == typeof tls.getCACertificates ? tls.getCACertificates("default") : tls.rootCertificates, CA_PADRAO = [ ...RAIZES_PADRAO, ...CA ];
2
2
 
3
3
  module.exports = {
4
- CA: CA
4
+ CA: CA,
5
+ CA_PADRAO: CA_PADRAO
5
6
  };
package/lib/env/index.js CHANGED
@@ -1,7 +1,11 @@
1
- let CA = require("./ca").CA, DISTRIBUICAO = require("./distribuicao").DISTRIBUICAO, EVENTOS = require("./evento").EVENTOS, RECEPCAO = require("./recepcao").RECEPCAO, CODIGOS_UF = require("./uf").CODIGOS_UF, VERSION = require("./version").VERSION, ZONES = require("./zone").ZONES;
1
+ let {
2
+ CA,
3
+ CA_PADRAO
4
+ } = require("./ca"), DISTRIBUICAO = require("./distribuicao").DISTRIBUICAO, EVENTOS = require("./evento").EVENTOS, RECEPCAO = require("./recepcao").RECEPCAO, CODIGOS_UF = require("./uf").CODIGOS_UF, VERSION = require("./version").VERSION, ZONES = require("./zone").ZONES;
2
5
 
3
6
  module.exports = {
4
7
  CA: CA,
8
+ CA_PADRAO: CA_PADRAO,
5
9
  CODIGOS_UF: CODIGOS_UF,
6
10
  DISTRIBUICAO: DISTRIBUICAO,
7
11
  EVENTOS: EVENTOS,
@@ -1,3 +1,3 @@
1
1
  module.exports = {
2
- VERSION: "0.18.0"
2
+ VERSION: "0.19.0"
3
3
  };
@@ -1,5 +1,5 @@
1
1
  let {
2
- CA,
2
+ CA_PADRAO,
3
3
  DISTRIBUICAO
4
4
  } = require("../env"), DistribuicaoSchema = require("../schemas").DistribuicaoSchema, SefazService = require("../services/sefaz-service"), {
5
5
  Gzip,
@@ -14,7 +14,7 @@ class DistribuicaoHelper {
14
14
  };
15
15
  return await new SefazService({
16
16
  baseURL: t,
17
- ca: CA,
17
+ ca: CA_PADRAO,
18
18
  cert: r.cert,
19
19
  key: r.key,
20
20
  tpAmb: r.tpAmb,
@@ -1,5 +1,5 @@
1
1
  let {
2
- CA,
2
+ CA_PADRAO,
3
3
  RECEPCAO
4
4
  } = require("../env"), RecepcaoSchema = require("../schemas").RecepcaoSchema, SefazService = require("../services/sefaz-service"), {
5
5
  Assinatura,
@@ -14,7 +14,7 @@ class RecepcaoHelper {
14
14
  };
15
15
  return await new SefazService({
16
16
  baseURL: o,
17
- ca: CA,
17
+ ca: CA_PADRAO,
18
18
  cert: t.cert,
19
19
  key: t.key,
20
20
  tpAmb: t.tpAmb,
@@ -1,17 +1,24 @@
1
1
  class RetornoHelper {
2
2
  static montarRetorno(r) {
3
- var {
3
+ var e, t, {
4
4
  json: r,
5
- data: e,
6
- retornoSefaz: t
7
- } = r, e = {
5
+ data: a,
6
+ retornoSefaz: o
7
+ } = r, a = {
8
8
  data: r,
9
- reqXml: e,
10
- resXml: t.data,
11
- status: t.status
9
+ reqXml: a,
10
+ resXml: o.data,
11
+ status: o.status
12
12
  };
13
- return r.error && (e.data = {}, e.error = r.error), 2 < Math.floor(t.status / 100) && !r.error && (e.data = {},
14
- e.error = t.data), e;
13
+ return o.transportError ? ({
14
+ code: e,
15
+ message: t
16
+ } = o.transportError, a.data = {}, a.error = `Falha de transporte (${e}): ` + t,
17
+ a.transportError = {
18
+ code: e,
19
+ message: t
20
+ }) : (r.error && (a.data = {}, a.error = r.error), 2 < Math.floor(o.status / 100) && !r.error && (a.data = {},
21
+ a.error = o.data)), a;
15
22
  }
16
23
  }
17
24
 
package/lib/index.js CHANGED
@@ -1,12 +1,18 @@
1
- let DistribuicaoDFe = require("./apis/distribuicaoDFe-api"), RecepcaoEvento = require("./apis/recepcaoEvento-api");
1
+ let DistribuicaoDFe = require("./apis/distribuicaoDFe-api"), RecepcaoEvento = require("./apis/recepcaoEvento-api"), env = require("./env"), CA_ICP_BRASIL = Object.freeze(env.CA), CA_PADRAO = Object.freeze(env.CA_PADRAO);
2
2
 
3
3
  module.exports = {
4
+ CA_ICP_BRASIL: CA_ICP_BRASIL,
5
+ CA_PADRAO: CA_PADRAO,
4
6
  DistribuicaoDFe: DistribuicaoDFe,
5
7
  RecepcaoEvento: RecepcaoEvento
6
8
  }, module.exports.default = {
9
+ CA_ICP_BRASIL: CA_ICP_BRASIL,
10
+ CA_PADRAO: CA_PADRAO,
7
11
  DistribuicaoDFe: DistribuicaoDFe,
8
12
  RecepcaoEvento: RecepcaoEvento
9
13
  }, module.exports.mde = {
14
+ CA_ICP_BRASIL: CA_ICP_BRASIL,
15
+ CA_PADRAO: CA_PADRAO,
10
16
  DistribuicaoDFe: DistribuicaoDFe,
11
17
  RecepcaoEvento: RecepcaoEvento
12
18
  };
@@ -11,7 +11,7 @@ class Instance {
11
11
  cert: a,
12
12
  key: r,
13
13
  ca: s,
14
- rejectUnauthorized: !1
14
+ rejectUnauthorized: !0
15
15
  }, {
16
16
  ...t.httpsOptions
17
17
  }), r = new https.Agent(a), s = Object.assign({
@@ -33,29 +33,30 @@ class Instance {
33
33
  try {
34
34
  var {
35
35
  status: s,
36
- data: t
36
+ data: a
37
37
  } = await this.instance(e);
38
38
  return {
39
39
  status: s,
40
- data: t
40
+ data: a
41
41
  };
42
42
  } catch (t) {
43
- return t.response ? ({
43
+ return t && t.response ? ({
44
44
  status: e,
45
45
  data: s
46
46
  } = t.response, {
47
47
  status: e,
48
48
  data: s
49
- }) : t.request ? "ECONNABORTED" === t.code ? {
50
- status: 504,
51
- data: `<error>${t.message || t}</error>`
52
- } : {
53
- status: 502,
54
- data: `<error>${t.message || t}</error>`
55
- } : {
56
- status: 500,
57
- data: `<error>${t.message || t}</error>`
58
- };
49
+ }) : ({
50
+ code: a,
51
+ message: e
52
+ } = t || {}, {
53
+ status: 0,
54
+ data: "",
55
+ transportError: {
56
+ code: a ? String(a) : "ERR_DESCONHECIDO",
57
+ message: e ? String(e) : String(t)
58
+ }
59
+ });
59
60
  }
60
61
  }
61
62
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitize/bitmde",
3
- "version": "0.18.0",
3
+ "version": "0.19.0",
4
4
  "description": "Biblioteca para consultar notas destinadas e enviar evento de manifestação do destinatário",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -22,7 +22,7 @@
22
22
  "script": "node ./scripts/index.js",
23
23
  "release": "git pull && npm run build && npm publish",
24
24
  "test": "mocha",
25
- "test:ci": "mocha --ignore test/sefaz.test.js",
25
+ "test:ci": "mocha --ignore test/sefaz.test.js --ignore test/tls-sefaz.test.js",
26
26
  "format": "prettier --write .",
27
27
  "format:check": "prettier --check .",
28
28
  "certs:teste": "sh ./scripts/gerar-certificado-teste.sh",
@@ -56,6 +56,9 @@
56
56
  "Carlos Tirabassi Jr. <carlos@bitize.com.br>"
57
57
  ],
58
58
  "license": "MIT",
59
+ "engines": {
60
+ "node": ">=22"
61
+ },
59
62
  "bugs": {
60
63
  "url": "https://github.com/bitize/bitmde/issues"
61
64
  },