cosmemilton-acbr-node 0.1.2 → 0.2.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/LICENSE +502 -502
- package/NOTICE +8 -8
- package/README.md +40 -11
- package/acbr.config.json +16 -16
- package/acbr.lock.json +0 -0
- package/dist/cli.js +375 -176
- package/dist/cli.js.map +4 -4
- package/dist/contract.json +0 -0
- package/dist/index.cjs +36 -11
- package/dist/index.cjs.map +2 -2
- package/dist/index.js +36 -11
- package/dist/index.js.map +2 -2
- package/dist/runtime.cjs +36 -11
- package/dist/runtime.cjs.map +2 -2
- package/dist/runtime.js +36 -11
- package/dist/runtime.js.map +2 -2
- package/dist/types/generated/acbr/index.d.ts +1 -0
- package/dist/types/generated/acbr/models.d.ts +0 -0
- package/dist/types/src/cli.d.ts +0 -0
- package/dist/types/src/config.d.ts +0 -0
- package/dist/types/src/contract-help.d.ts +0 -0
- package/dist/types/src/diagnostics.d.ts +2 -0
- package/dist/types/src/generator.d.ts +0 -0
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/native-build.d.ts +1 -0
- package/dist/types/src/offline-check.d.ts +0 -0
- package/dist/types/src/offline-fixture.d.ts +0 -0
- package/dist/types/src/runtime.d.ts +1 -0
- package/dist/types/src/source.d.ts +0 -0
- package/dist/types/src/types.d.ts +4 -2
- package/docs/API.md +116 -90
- package/docs/ARQUITETURA.md +19 -15
- package/docs/CI.md +60 -60
- package/docs/CLI.md +1 -1
- package/docs/DEPENDENCIAS-NATIVAS.md +103 -93
- package/docs/VALIDACAO.md +67 -67
- package/docs/examples/recuperar-xml.mjs +54 -0
- package/docs/licenses/common/Apache-2.0.txt +202 -0
- package/docs/licenses/common/Artistic.txt +131 -0
- package/docs/licenses/common/GFDL-1.2.txt +397 -0
- package/docs/licenses/common/GPL-1.txt +251 -0
- package/docs/licenses/common/GPL-2.txt +339 -0
- package/docs/licenses/common/GPL-3.txt +674 -0
- package/docs/licenses/common/GPL.txt +674 -0
- package/docs/licenses/common/LGPL-2.1.txt +502 -0
- package/docs/licenses/common/LGPL-2.txt +481 -0
- package/docs/licenses/common/LGPL-3.txt +165 -0
- package/docs/licenses/common/LGPL.txt +165 -0
- package/docs/licenses/common/ORIGIN.json +208 -0
- package/docs/licenses/fpc/COPYING.FPC +25 -25
- package/docs/licenses/fpc/COPYING.GPL.txt +340 -340
- package/docs/licenses/fpc/COPYING.LGPL.txt +504 -504
- package/docs/licenses/fpc/ORIGIN.json +21 -21
- package/docs/licenses/lazarus/COPYING.LGPL.txt +481 -481
- package/docs/licenses/lazarus/COPYING.modifiedLGPL.txt +26 -26
- package/docs/licenses/lazarus/COPYING.txt +46 -46
- package/docs/licenses/lazarus/ORIGIN.json +1 -1
- package/native/NativeMotor.pas +55 -3
- package/native/NativeProtocol.pas +3 -2
- package/native/NativeRecovery.pas +274 -0
- package/native/generated/AcbrModels.pas +0 -0
- package/package.json +6 -4
- package/scripts/build-native-deps.mjs +237 -237
- package/scripts/runtime-license-inventory.d.mts +5 -0
- package/scripts/runtime-license-inventory.mjs +161 -0
- package/tools/extract-model.lpr +119 -119
package/NOTICE
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
ACBr Node — integração Node.js/Free Pascal para os componentes ACBr.
|
|
2
|
-
Copyright 2026 Cosmemilton e colaboradores.
|
|
3
|
-
|
|
4
|
-
Este projeto usa os fontes públicos do Projeto ACBr, sob LGPL 2.1 ou posterior.
|
|
5
|
-
Os avisos originais das unidades e as licenças das dependências são preservados.
|
|
6
|
-
Fontes: https://svn.code.sf.net/p/acbr/code/trunk2
|
|
7
|
-
A revisão exata, hashes e materiais de reconstrução acompanham cada runtime.
|
|
8
|
-
Não é um pacote oficial do Projeto ACBr. Não depende de Delphi nem dos binários ACBr Pro.
|
|
1
|
+
ACBr Node — integração Node.js/Free Pascal para os componentes ACBr.
|
|
2
|
+
Copyright 2026 Cosmemilton e colaboradores.
|
|
3
|
+
|
|
4
|
+
Este projeto usa os fontes públicos do Projeto ACBr, sob LGPL 2.1 ou posterior.
|
|
5
|
+
Os avisos originais das unidades e as licenças das dependências são preservados.
|
|
6
|
+
Fontes: https://svn.code.sf.net/p/acbr/code/trunk2
|
|
7
|
+
A revisão exata, hashes e materiais de reconstrução acompanham cada runtime.
|
|
8
|
+
Não é um pacote oficial do Projeto ACBr. Não depende de Delphi nem dos binários ACBr Pro.
|
package/README.md
CHANGED
|
@@ -14,32 +14,33 @@ npm install cosmemilton-acbr-node
|
|
|
14
14
|
|
|
15
15
|
O npm instala o runtime opcional da sua plataforma. Não use `--omit=optional` na instalação final. Também é possível informar `runtimeDirectory` para um motor próprio.
|
|
16
16
|
|
|
17
|
-
O
|
|
17
|
+
Esta documentação descreve a versão 0.2.1, preparada localmente para completar os textos de licenças distribuídos com os runtimes. O motor fiscal é o mesmo da 0.2.0, que adicionou `recuperarXml`, e o help TAG da 0.1.2 continua disponível. A disponibilidade da 0.2.1 no npm depende de publicação e confirmação posteriores no registry.
|
|
18
18
|
|
|
19
19
|
Para instalar tarballs revisados em um projeto separado, informe o SDK e o runtime da plataforma:
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
npm install --offline --ignore-scripts --no-audit --no-fund \
|
|
23
|
-
/caminho/cosmemilton-acbr-node-0.1.
|
|
24
|
-
/caminho/cosmemilton-acbr-node-linux-x64-0.1.
|
|
23
|
+
/caminho/cosmemilton-acbr-node-0.2.1.tgz \
|
|
24
|
+
/caminho/cosmemilton-acbr-node-linux-x64-0.2.1.tgz
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
No Windows, selecione `cosmemilton-acbr-node-win32-x64-0.1.
|
|
27
|
+
No Windows, selecione `cosmemilton-acbr-node-win32-x64-0.2.1.tgz`.
|
|
28
28
|
|
|
29
29
|
```ts
|
|
30
|
-
import {
|
|
30
|
+
import { writeFile } from 'node:fs/promises';
|
|
31
31
|
import { criarEmissor, TNFe, type TNFeInput } from 'cosmemilton-acbr-node';
|
|
32
32
|
import { nota } from './nota.js'; // nota: TNFeInput, com dados fiscais completos
|
|
33
|
+
import { lerA1Privado } from './credencial-local.js'; // função da aplicação
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
// A aplicação lê o PFX e pede a senha de forma oculta, sem argv, env ou logs.
|
|
36
|
+
const certificado = await lerA1Privado(); // { pfx: Uint8Array, senha: string }
|
|
36
37
|
|
|
37
38
|
const emissor = criarEmissor({
|
|
38
39
|
cnpj: '11222333000181',
|
|
39
40
|
uf: 'CE',
|
|
40
41
|
modelo: 55,
|
|
41
42
|
ambiente: 2,
|
|
42
|
-
certificado
|
|
43
|
+
certificado,
|
|
43
44
|
// Para NFC-e: modelo: 65, csc: { id: '000001', valor: 'seu CSC' }
|
|
44
45
|
});
|
|
45
46
|
|
|
@@ -55,17 +56,45 @@ try {
|
|
|
55
56
|
await writeFile('./nota-assinada.xml', Buffer.from(assinado.xmlBase64, 'base64'));
|
|
56
57
|
// Transmissão explícita: await emissor.transmitir(xmlAssinado).
|
|
57
58
|
} finally {
|
|
58
|
-
await emissor.fechar();
|
|
59
|
+
try { await emissor.fechar(); }
|
|
60
|
+
finally { certificado.pfx.fill(0); certificado.senha = ''; }
|
|
59
61
|
}
|
|
60
62
|
```
|
|
61
63
|
|
|
62
|
-
A biblioteca também aceita XML pronto em `assinar`, `validar` e `
|
|
64
|
+
A biblioteca também aceita XML pronto em `assinar`, `validar`, `transmitir` e `recuperarXml`. As operações fiscais incluem `consultar`, `recuperarXml`, `cancelar`, `cartaCorrecao` (somente modelo 55) e `inutilizar`. `lerA1Privado` acima pertence à aplicação, não ao SDK. [API e protocolo](docs/API.md).
|
|
65
|
+
|
|
66
|
+
## Recuperar o XML autorizado
|
|
67
|
+
|
|
68
|
+
`consultar({ chave })` continua devolvendo o XML de resposta da consulta em `xmlBase64`, normalmente `retConsSitNFe`. Para obter o processo completo a partir de uma NF-e já assinada e preservada, use `recuperarXml(xmlAssinado, opcoes?)`. O argumento `opcoes` pode ser omitido e aceita somente `signal?: AbortSignal`:
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
const controlador = new AbortController();
|
|
72
|
+
const opcoes = { signal: controlador.signal };
|
|
73
|
+
// A interface pode chamar controlador.abort() para solicitar cancelamento.
|
|
74
|
+
const resultado = await emissor.recuperarXml(xmlAssinado, opcoes);
|
|
75
|
+
if (resultado.sucesso === true && resultado.estado === 'XML_RECUPERADO'
|
|
76
|
+
&& resultado.cStat === 100 && resultado.xmlBase64) {
|
|
77
|
+
const xmlProcessado = Buffer.from(resultado.xmlBase64, 'base64');
|
|
78
|
+
// A aplicação decide onde guardar um arquivo NOVO; o original é preservado.
|
|
79
|
+
await writeFile(arquivoProcessadoPrivado, xmlProcessado, { flag: 'wx', mode: 0o600 });
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
O sinal solicita o cancelamento da operação do SDK, sem cancelar a autorização fiscal. A consulta pode já ter sido enviada quando o sinal é acionado. Sem essa opção, chame `emissor.recuperarXml(xmlAssinado)`.
|
|
84
|
+
|
|
85
|
+
Essa operação faz uma consulta externa pela chave extraída do XML, com A1. O motor confere a assinatura da NFe original, seu schema, sua identidade e seu ambiente; só devolve `nfeProc` depois de confirmar `cStat=100`, protocolo correlacionado e `digVal` presente e exatamente igual ao `DigestValue` assinado. Não assina novamente, não emite, não transmite a nota nem grava arquivos fiscais automaticamente. A NFe e sua assinatura original são preservadas, e essa assinatura é verificada antes e depois da composição do processo; o arquivo original continua sob controle da aplicação.
|
|
86
|
+
|
|
87
|
+
Limitação da versão 0.2.0: se o `protNFe` recebido contiver uma assinatura XMLDSig (`ds:Signature`), a recuperação é recusada com `RECUPERACAO_NAO_COMPROVADA`, sem `xmlBase64` ou `protocolo`, mesmo com `cStat=100`. Esta versão não oferece verificação independente dessa assinatura adicional da SEFAZ. Nos protocolos aceitos, os dados vêm da resposta real da consulta e a prova por `digVal` continua obrigatória.
|
|
88
|
+
|
|
89
|
+
Sem digest, com divergência ou com outro status, inclusive `150` e `217`, a recuperação não retorna XML processado nem protocolo. Confira o diagnóstico; não repita nem emita uma nova nota automaticamente para obter o arquivo. `envioIniciado=false` nessa operação não significa ausência de rede: a consulta externa ocorreu sem transmissão de nota ou evento.
|
|
90
|
+
|
|
91
|
+
Atualize o pacote principal e o runtime da sua plataforma juntos. O manifesto do motor precisa anunciar `capabilities: ['recuperarXml']`; um runtime antigo é recusado com `RUNTIME_SEM_CAPACIDADE` antes de iniciar o processo. Veja o [contrato completo](docs/API.md#consulta-e-recuperação-do-xml) e o [exemplo de integração por arquivo](docs/examples/recuperar-xml.mjs), que não executa nenhuma operação ao ser importado. Os testes usam XML e A1 sintéticos com serviço SOAP local, sem SEFAZ real.
|
|
63
92
|
|
|
64
93
|
## Modelos e atualizações explícitas
|
|
65
94
|
|
|
66
95
|
Nomes, grupos e enums espelham o ACBr. Construtores recebem objetos; coleções são arrays tipados e oferecem `New()`. Valores decimais são strings, preservando escala e evitando conversão binária pelo JavaScript. Datas são strings ISO civis, por exemplo `2026-10-08T12:30:00`; o ACBr aplica o fuso da UF na escrita do XML. Campos omitidos preservam os padrões do componente. Assinatura, protocolo e informações suplementares produzidas pelo motor não são entradas editáveis.
|
|
67
96
|
|
|
68
|
-
A versão 0.
|
|
97
|
+
A versão 0.2.0 mantém a revisão SVN **48590**, com **204 tipos gerados** e contrato `e5a497cefe8e0e350a30da5cc04e88b35c38a98535893d52f878890260d1346d`. Revisão, inventário e hashes estão em `acbr.lock.json`; cliente e motor recusam contratos diferentes. Não há atualização automática dos fontes ao instalar.
|
|
69
98
|
|
|
70
99
|
```bash
|
|
71
100
|
npx acbr-node init --revision 48590
|
package/acbr.config.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
{
|
|
2
|
-
"formatVersion": 1,
|
|
3
|
-
"source": {
|
|
4
|
-
"url": "https://svn.code.sf.net/p/acbr/code/trunk2",
|
|
5
|
-
"revision": 48590,
|
|
6
|
-
"directory": ".acbr/source"
|
|
7
|
-
},
|
|
8
|
-
"generator": {
|
|
9
|
-
"outputDir": "."
|
|
10
|
-
},
|
|
11
|
-
"native": {
|
|
12
|
-
"project": "native/acbr-worker.lpr",
|
|
13
|
-
"outputDir": ".acbr/runtime",
|
|
14
|
-
"fpc": "fpc"
|
|
15
|
-
}
|
|
16
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"formatVersion": 1,
|
|
3
|
+
"source": {
|
|
4
|
+
"url": "https://svn.code.sf.net/p/acbr/code/trunk2",
|
|
5
|
+
"revision": 48590,
|
|
6
|
+
"directory": ".acbr/source"
|
|
7
|
+
},
|
|
8
|
+
"generator": {
|
|
9
|
+
"outputDir": "."
|
|
10
|
+
},
|
|
11
|
+
"native": {
|
|
12
|
+
"project": "native/acbr-worker.lpr",
|
|
13
|
+
"outputDir": ".acbr/runtime",
|
|
14
|
+
"fpc": "fpc"
|
|
15
|
+
}
|
|
16
|
+
}
|
package/acbr.lock.json
CHANGED
|
File without changes
|