@bitize/bitmde 0.17.1 → 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 +57 -0
- package/README.md +74 -2
- package/dist/apis/distribuicaoDFe-api.d.ts +28 -1
- package/dist/apis/recepcaoEvento-api.d.ts +5 -1
- package/dist/controllers/distribuicaoDFe-controller.d.ts +10 -1
- package/dist/controllers/index.d.ts +13 -0
- package/dist/controllers/recepcaoEvento-controller.d.ts +5 -1
- package/dist/env/ca.d.ts +8 -2
- package/dist/env/index.d.ts +2 -1
- package/dist/helpers/distribuicaoDFe-helper.d.ts +27 -1
- package/dist/helpers/index.d.ts +27 -0
- package/dist/helpers/recepcaoEvento-helper.d.ts +4 -0
- package/dist/helpers/retorno-helper.d.ts +5 -0
- package/dist/index.d.ts +6 -0
- package/dist/services/sefaz-service.d.ts +8 -1
- package/lib/env/ca.js +3 -2
- package/lib/env/index.js +5 -1
- package/lib/env/version.js +1 -1
- package/lib/helpers/distribuicaoDFe-helper.js +54 -24
- package/lib/helpers/recepcaoEvento-helper.js +2 -2
- package/lib/helpers/retorno-helper.js +16 -9
- package/lib/index.js +7 -1
- package/lib/services/sefaz-service.js +15 -14
- package/lib/util/gzip.js +3 -3
- package/package.json +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,62 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [Não publicado]
|
|
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
|
+
|
|
44
|
+
## [0.18.0] / 2026-10-01
|
|
45
|
+
|
|
46
|
+
### Corrigido
|
|
47
|
+
|
|
48
|
+
- **Um `docZip` corrompido na distribuição DF-e encerrava o processo de quem consome a biblioteca.** `Gzip.unzip` rejeitava a Promise mas seguia executando e lançava um `TypeError` fora dela, como `uncaughtException`, antes de qualquer `.catch` do chamador
|
|
49
|
+
- Um documento ilegível no lote deixa de derrubar a consulta inteira. Antes, `consultaUltNSU`, `consultaNSU` e `consultaChNFe` perderiam os documentos válidos e o `ultNSU`/`maxNSU`, e a varredura ficaria presa no mesmo NSU. Ver [ADR 0013](https://github.com/bitize/bitmde/blob/main/.docs/arquitetura/decisoes/0013-falha-de-doczip-vira-item-de-doczip-errors.md)
|
|
50
|
+
- `<loteDistDFeInt/>` vazio na resposta deixa de lançar `TypeError` e vira lote sem documentos. Um `loteDistDFeInt` em qualquer outra forma que não seja um lote — texto no lugar dos `docZip`, elemento repetido — passa a devolver `error: 'loteDistDFeInt inválido.'` em vez de lançar
|
|
51
|
+
|
|
52
|
+
### Adicionado
|
|
53
|
+
|
|
54
|
+
- Campo `data.docZipErrors: [{ nsu, schema, error }]` no retorno da distribuição DF-e, com os documentos do lote que não puderam ser descompactados ou interpretados. Sempre presente; `[]` quando todos abrem. `docZip` mantém o formato de sempre e passa a trazer só os documentos válidos. Falha de documento não preenche o `error` de topo
|
|
55
|
+
|
|
56
|
+
### Modificado
|
|
57
|
+
|
|
58
|
+
- `actions/checkout` e `actions/setup-node` atualizadas da v4 para a v7 nos três workflows. A v4 roda em Node 20, deprecado nos runners do GitHub e já forçado a executar em Node 24 — o aviso aparecia em todo run. Nenhuma quebra das v5/v6/v7 se aplica a este repositório: o cache automático da v5 do `setup-node` depende do campo `packageManager` no `package.json`, que não existe aqui, e a remoção do `NODE_AUTH_TOKEN` fictício na v7 não afeta quem publica por OIDC
|
|
59
|
+
|
|
3
60
|
## [0.17.1] / 2026-09-10
|
|
4
61
|
|
|
5
62
|
### Adicionado
|
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
|
|
|
@@ -108,6 +109,7 @@ console.log(consulta)
|
|
|
108
109
|
// schema: 'procNFe_v4.00.xsd',
|
|
109
110
|
// },
|
|
110
111
|
// ],
|
|
112
|
+
// docZipErrors: [],
|
|
111
113
|
// },
|
|
112
114
|
// reqXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap12:Body></soap12:Envelope>',
|
|
113
115
|
// resXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap:Body></soap:Envelope>',
|
|
@@ -115,6 +117,20 @@ console.log(consulta)
|
|
|
115
117
|
// }
|
|
116
118
|
```
|
|
117
119
|
|
|
120
|
+
`docZip` traz só os documentos que puderam ser abertos. Um documento do lote que não descompacta ou não é XML válido não derruba a consulta: ele vai para `docZipErrors`, com o motivo, e `ultNSU`/`maxNSU` continuam preenchidos para a varredura avançar. O formato é o mesmo nas três consultas:
|
|
121
|
+
|
|
122
|
+
```js
|
|
123
|
+
// docZipErrors: [
|
|
124
|
+
// {
|
|
125
|
+
// nsu: '000000000000051',
|
|
126
|
+
// schema: 'procNFe_v4.00.xsd',
|
|
127
|
+
// error: 'Falha ao descompactar o docZip: incorrect header check',
|
|
128
|
+
// },
|
|
129
|
+
// ]
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
As mensagens possíveis em `error` são `docZip sem conteúdo.`, `Falha ao descompactar o docZip: <motivo>` e `Falha ao interpretar o XML do docZip: <motivo>`.
|
|
133
|
+
|
|
118
134
|
### Consulta por chNFe
|
|
119
135
|
|
|
120
136
|
| Campo | Tipo | Tamanho | Descrição |
|
|
@@ -161,6 +177,7 @@ console.log(consulta)
|
|
|
161
177
|
// schema: 'procNFe_v4.00.xsd',
|
|
162
178
|
// },
|
|
163
179
|
// ],
|
|
180
|
+
// docZipErrors: [],
|
|
164
181
|
// },
|
|
165
182
|
// reqXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap12:Body></soap12:Envelope>',
|
|
166
183
|
// resXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap:Body></soap:Envelope>',
|
|
@@ -212,6 +229,7 @@ console.log(consulta)
|
|
|
212
229
|
// schema: 'resNFe_v1.01.xsd',
|
|
213
230
|
// },
|
|
214
231
|
// ],
|
|
232
|
+
// docZipErrors: [],
|
|
215
233
|
// },
|
|
216
234
|
// reqXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap12:Body></soap12:Envelope>',
|
|
217
235
|
// resXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap:Body></soap:Envelope>',
|
|
@@ -238,7 +256,7 @@ new RecepcaoEvento(config)
|
|
|
238
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.
|
|
239
257
|
- `options` `<Object>` - [OPCIONAL]
|
|
240
258
|
- `requestOptions` `<AxiosRequestConfig>` - [OPCIONAL]
|
|
241
|
-
- `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).
|
|
242
260
|
|
|
243
261
|
### Enviar Lote de Eventos
|
|
244
262
|
|
|
@@ -330,6 +348,60 @@ console.log(manifestacao)
|
|
|
330
348
|
// }
|
|
331
349
|
```
|
|
332
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
|
+
|
|
333
405
|
## Sobre o BitERP
|
|
334
406
|
|
|
335
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;
|
|
@@ -56,8 +56,17 @@ declare class DistribuicaoDFe {
|
|
|
56
56
|
nsu: string;
|
|
57
57
|
schema: string;
|
|
58
58
|
}];
|
|
59
|
+
docZipErrors: [{
|
|
60
|
+
nsu: string;
|
|
61
|
+
schema: string;
|
|
62
|
+
error: string;
|
|
63
|
+
}];
|
|
59
64
|
};
|
|
60
65
|
error: string;
|
|
66
|
+
transportError?: {
|
|
67
|
+
code: string;
|
|
68
|
+
message: string;
|
|
69
|
+
};
|
|
61
70
|
reqXml: string;
|
|
62
71
|
resXml: string;
|
|
63
72
|
status: number;
|
|
@@ -80,8 +89,17 @@ declare class DistribuicaoDFe {
|
|
|
80
89
|
nsu: string;
|
|
81
90
|
schema: string;
|
|
82
91
|
}];
|
|
92
|
+
docZipErrors: [{
|
|
93
|
+
nsu: string;
|
|
94
|
+
schema: string;
|
|
95
|
+
error: string;
|
|
96
|
+
}];
|
|
83
97
|
};
|
|
84
98
|
error: string;
|
|
99
|
+
transportError?: {
|
|
100
|
+
code: string;
|
|
101
|
+
message: string;
|
|
102
|
+
};
|
|
85
103
|
reqXml: string;
|
|
86
104
|
resXml: string;
|
|
87
105
|
status: number;
|
|
@@ -104,8 +122,17 @@ declare class DistribuicaoDFe {
|
|
|
104
122
|
nsu: string;
|
|
105
123
|
schema: string;
|
|
106
124
|
}];
|
|
125
|
+
docZipErrors: [{
|
|
126
|
+
nsu: string;
|
|
127
|
+
schema: string;
|
|
128
|
+
error: string;
|
|
129
|
+
}];
|
|
107
130
|
};
|
|
108
131
|
error: string;
|
|
132
|
+
transportError?: {
|
|
133
|
+
code: string;
|
|
134
|
+
message: string;
|
|
135
|
+
};
|
|
109
136
|
reqXml: string;
|
|
110
137
|
resXml: string;
|
|
111
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}]}, 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: {
|
|
@@ -21,8 +21,17 @@ declare class DistribuicaoController {
|
|
|
21
21
|
nsu: string;
|
|
22
22
|
schema: string;
|
|
23
23
|
}];
|
|
24
|
+
docZipErrors: [{
|
|
25
|
+
nsu: string;
|
|
26
|
+
schema: string;
|
|
27
|
+
error: string;
|
|
28
|
+
}];
|
|
24
29
|
};
|
|
25
30
|
error: string;
|
|
31
|
+
transportError?: {
|
|
32
|
+
code: string;
|
|
33
|
+
message: string;
|
|
34
|
+
};
|
|
26
35
|
reqXml: string;
|
|
27
36
|
resXml: string;
|
|
28
37
|
status: number;
|
|
@@ -17,8 +17,17 @@ declare const controller: Readonly<{
|
|
|
17
17
|
nsu: string;
|
|
18
18
|
schema: string;
|
|
19
19
|
}];
|
|
20
|
+
docZipErrors: [{
|
|
21
|
+
nsu: string;
|
|
22
|
+
schema: string;
|
|
23
|
+
error: string;
|
|
24
|
+
}];
|
|
20
25
|
};
|
|
21
26
|
error: string;
|
|
27
|
+
transportError?: {
|
|
28
|
+
code: string;
|
|
29
|
+
message: string;
|
|
30
|
+
};
|
|
22
31
|
reqXml: string;
|
|
23
32
|
resXml: string;
|
|
24
33
|
status: number;
|
|
@@ -50,6 +59,10 @@ declare const controller: Readonly<{
|
|
|
50
59
|
}];
|
|
51
60
|
};
|
|
52
61
|
error: string;
|
|
62
|
+
transportError?: {
|
|
63
|
+
code: string;
|
|
64
|
+
message: string;
|
|
65
|
+
};
|
|
53
66
|
reqXml: string;
|
|
54
67
|
resXml: string;
|
|
55
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
|
|
3
|
-
*
|
|
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[];
|
package/dist/env/index.d.ts
CHANGED
|
@@ -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
|
*
|
|
@@ -20,7 +24,7 @@ declare class DistribuicaoHelper {
|
|
|
20
24
|
/**
|
|
21
25
|
*
|
|
22
26
|
* @param {string} data
|
|
23
|
-
* @returns {Promise<{tpAmb: string,verAplic: string,cStat: string,xMotivo: string,dhResp: string,ultNSU: string,maxNSU: string, docZip:[{xml: string,json: Object,nsu: string,schema: string}], error: string}>}
|
|
27
|
+
* @returns {Promise<{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}>}
|
|
24
28
|
*/
|
|
25
29
|
static montarResponse(data: string): Promise<{
|
|
26
30
|
tpAmb: string;
|
|
@@ -36,6 +40,28 @@ declare class DistribuicaoHelper {
|
|
|
36
40
|
nsu: string;
|
|
37
41
|
schema: string;
|
|
38
42
|
}];
|
|
43
|
+
docZipErrors: [{
|
|
44
|
+
nsu: string;
|
|
45
|
+
schema: string;
|
|
46
|
+
error: string;
|
|
47
|
+
}];
|
|
48
|
+
error: string;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* Descompacta e interpreta um docZip sem nunca rejeitar: a falha vira
|
|
52
|
+
* um item com `error`, para não derrubar o restante do lote.
|
|
53
|
+
*
|
|
54
|
+
* @param {Object} doc
|
|
55
|
+
* @returns {Promise<{xml: string,json: Object,nsu: string,schema: string} | {nsu: string,schema: string,error: string}>}
|
|
56
|
+
*/
|
|
57
|
+
static abrirDocZip(doc: any): Promise<{
|
|
58
|
+
xml: string;
|
|
59
|
+
json: any;
|
|
60
|
+
nsu: string;
|
|
61
|
+
schema: string;
|
|
62
|
+
} | {
|
|
63
|
+
nsu: string;
|
|
64
|
+
schema: string;
|
|
39
65
|
error: string;
|
|
40
66
|
}>;
|
|
41
67
|
}
|
package/dist/helpers/index.d.ts
CHANGED
|
@@ -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<{
|
|
@@ -21,6 +25,21 @@ declare const helper: Readonly<{
|
|
|
21
25
|
nsu: string;
|
|
22
26
|
schema: string;
|
|
23
27
|
}];
|
|
28
|
+
docZipErrors: [{
|
|
29
|
+
nsu: string;
|
|
30
|
+
schema: string;
|
|
31
|
+
error: string;
|
|
32
|
+
}];
|
|
33
|
+
error: string;
|
|
34
|
+
}>;
|
|
35
|
+
abrirDocZip(doc: any): Promise<{
|
|
36
|
+
xml: string;
|
|
37
|
+
json: any;
|
|
38
|
+
nsu: string;
|
|
39
|
+
schema: string;
|
|
40
|
+
} | {
|
|
41
|
+
nsu: string;
|
|
42
|
+
schema: string;
|
|
24
43
|
error: string;
|
|
25
44
|
}>;
|
|
26
45
|
};
|
|
@@ -29,6 +48,10 @@ declare const helper: Readonly<{
|
|
|
29
48
|
enviarEvento(data: string, opts: any): Promise<{
|
|
30
49
|
status: number;
|
|
31
50
|
data: string;
|
|
51
|
+
transportError?: {
|
|
52
|
+
code: string;
|
|
53
|
+
message: string;
|
|
54
|
+
};
|
|
32
55
|
}>;
|
|
33
56
|
montarRequest(opts: any): string;
|
|
34
57
|
montarResponse(data: string): {
|
|
@@ -63,6 +86,10 @@ declare const helper: Readonly<{
|
|
|
63
86
|
retornoSefaz: {
|
|
64
87
|
data: string;
|
|
65
88
|
status: number;
|
|
89
|
+
transportError?: {
|
|
90
|
+
code: string;
|
|
91
|
+
message: string;
|
|
92
|
+
};
|
|
66
93
|
};
|
|
67
94
|
}): {
|
|
68
95
|
data: any;
|
|
@@ -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
|
-
*
|
|
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
|
|
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,
|
package/lib/env/version.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
let {
|
|
2
|
-
|
|
2
|
+
CA_PADRAO,
|
|
3
3
|
DISTRIBUICAO
|
|
4
4
|
} = require("../env"), DistribuicaoSchema = require("../schemas").DistribuicaoSchema, SefazService = require("../services/sefaz-service"), {
|
|
5
5
|
Gzip,
|
|
@@ -7,19 +7,19 @@ let {
|
|
|
7
7
|
} = require("../util");
|
|
8
8
|
|
|
9
9
|
class DistribuicaoHelper {
|
|
10
|
-
static async enviarConsulta(e,
|
|
11
|
-
var
|
|
10
|
+
static async enviarConsulta(e, r) {
|
|
11
|
+
var t = DISTRIBUICAO[r.tpAmb], e = {
|
|
12
12
|
method: "POST",
|
|
13
13
|
data: e
|
|
14
14
|
};
|
|
15
15
|
return await new SefazService({
|
|
16
|
-
baseURL:
|
|
17
|
-
ca:
|
|
18
|
-
cert:
|
|
19
|
-
key:
|
|
20
|
-
tpAmb:
|
|
21
|
-
requestOptions:
|
|
22
|
-
httpsOptions:
|
|
16
|
+
baseURL: t,
|
|
17
|
+
ca: CA_PADRAO,
|
|
18
|
+
cert: r.cert,
|
|
19
|
+
key: r.key,
|
|
20
|
+
tpAmb: r.tpAmb,
|
|
21
|
+
requestOptions: r.requestOptions,
|
|
22
|
+
httpsOptions: r.httpsOptions
|
|
23
23
|
}).request(e);
|
|
24
24
|
}
|
|
25
25
|
static montarRequest(e) {
|
|
@@ -27,7 +27,7 @@ class DistribuicaoHelper {
|
|
|
27
27
|
return Xml.envelopar(e);
|
|
28
28
|
}
|
|
29
29
|
static async montarResponse(e) {
|
|
30
|
-
var
|
|
30
|
+
var r = {}, e = Xml.xmlToJson(e), {
|
|
31
31
|
"soap:Envelope": {
|
|
32
32
|
"soap:Body": {
|
|
33
33
|
nfeDistDFeInteresseResponse: {
|
|
@@ -37,21 +37,51 @@ class DistribuicaoHelper {
|
|
|
37
37
|
} = {}
|
|
38
38
|
} = {}
|
|
39
39
|
} = {}
|
|
40
|
-
} = (e.error && (
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
} = (e.error && (r.error = e.error), e);
|
|
41
|
+
let {
|
|
42
|
+
loteDistDFeInt: t = {}
|
|
43
|
+
} = e;
|
|
44
|
+
"" === t ? t = {} : "object" == typeof t && !Array.isArray(t) || (r.error = "loteDistDFeInt inválido.",
|
|
45
|
+
t = {}), t.docZip ? Array.isArray(t.docZip) || (t.docZip = [ t.docZip ]) : t.docZip = [];
|
|
46
|
+
var a, s = [], i = [];
|
|
47
|
+
for (a of await Promise.all(t.docZip.map(e => DistribuicaoHelper.abrirDocZip(e)))) (a.error ? i : s).push(a);
|
|
48
|
+
return r.tpAmb = e.tpAmb || "", r.verAplic = e.verAplic || "", r.cStat = e.cStat || "",
|
|
49
|
+
r.xMotivo = e.xMotivo || "", r.dhResp = e.dhResp || "", r.ultNSU = e.ultNSU || "",
|
|
50
|
+
r.maxNSU = e.maxNSU || "", r.docZip = s, r.docZipErrors = i, r;
|
|
51
|
+
}
|
|
52
|
+
static async abrirDocZip(e) {
|
|
53
|
+
var r = e["@_NSU"] || "", t = e["@_schema"] || "";
|
|
54
|
+
if (!e.value) return {
|
|
55
|
+
nsu: r,
|
|
56
|
+
schema: t,
|
|
57
|
+
error: "docZip sem conteúdo."
|
|
58
|
+
};
|
|
59
|
+
let a;
|
|
60
|
+
try {
|
|
61
|
+
a = await Gzip.unzip(e.value);
|
|
62
|
+
} catch (e) {
|
|
45
63
|
return {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
schema: e["@_schema"]
|
|
64
|
+
nsu: r,
|
|
65
|
+
schema: t,
|
|
66
|
+
error: "Falha ao descompactar o docZip: " + e.message
|
|
50
67
|
};
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
68
|
+
}
|
|
69
|
+
let s;
|
|
70
|
+
try {
|
|
71
|
+
s = Xml.xmlToJson(a);
|
|
72
|
+
} catch (e) {
|
|
73
|
+
return {
|
|
74
|
+
nsu: r,
|
|
75
|
+
schema: t,
|
|
76
|
+
error: "Falha ao interpretar o XML do docZip: " + e.message
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
xml: a,
|
|
81
|
+
json: s,
|
|
82
|
+
nsu: r,
|
|
83
|
+
schema: t
|
|
84
|
+
};
|
|
55
85
|
}
|
|
56
86
|
}
|
|
57
87
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
let {
|
|
2
|
-
|
|
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:
|
|
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:
|
|
6
|
-
retornoSefaz:
|
|
7
|
-
} = r,
|
|
5
|
+
data: a,
|
|
6
|
+
retornoSefaz: o
|
|
7
|
+
} = r, a = {
|
|
8
8
|
data: r,
|
|
9
|
-
reqXml:
|
|
10
|
-
resXml:
|
|
11
|
-
status:
|
|
9
|
+
reqXml: a,
|
|
10
|
+
resXml: o.data,
|
|
11
|
+
status: o.status
|
|
12
12
|
};
|
|
13
|
-
return
|
|
14
|
-
|
|
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: !
|
|
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:
|
|
36
|
+
data: a
|
|
37
37
|
} = await this.instance(e);
|
|
38
38
|
return {
|
|
39
39
|
status: s,
|
|
40
|
-
data:
|
|
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
|
-
}) :
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
status:
|
|
54
|
-
data:
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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/lib/util/gzip.js
CHANGED
|
@@ -3,11 +3,11 @@ let zlib = require("zlib");
|
|
|
3
3
|
class Gzip {
|
|
4
4
|
static unzip(e) {
|
|
5
5
|
let i = Buffer.from(e, "base64");
|
|
6
|
-
return new Promise((
|
|
6
|
+
return new Promise((r, t) => {
|
|
7
7
|
zlib.unzip(i, function(e, i) {
|
|
8
|
-
e
|
|
8
|
+
if (e) return t(e);
|
|
9
9
|
e = i.toString("utf8");
|
|
10
|
-
|
|
10
|
+
r(e);
|
|
11
11
|
});
|
|
12
12
|
});
|
|
13
13
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitize/bitmde",
|
|
3
|
-
"version": "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
|
},
|