Configuração do emissor
criarEmissor cria uma instância com uma identidade fiscal. Use uma instância para cada configuração de emitente, UF, modelo e ambiente.
import { criarEmissor } from 'cosmemilton-acbr-node';
const emissor = criarEmissor({
cnpj: '11222333000181',
uf: 'CE',
modelo: 55,
ambiente: 2
});Esta configuração sintética permite gerar XML offline. Operações com A1 precisam do campo certificado.
Identidade e credenciais
| Campo | Tipo | Como preencher |
|---|---|---|
cnpj | string | 14 dígitos, sem pontuação |
uf | string | Sigla maiúscula, como CE ou SP |
modelo | 55 | 65 | NF-e ou NFC-e |
ambiente | 1 | 2 | Produção ou homologação |
certificado | A1 opcional | { pfx: Uint8Array, senha: string } ou { arquivo: string, senha: string } |
csc | Objeto opcional | { id: string, valor: string } para NFC-e |
Informe todos os quatro campos de identidade. O CNPJ, UF, modelo e ambiente do documento devem corresponder à configuração. No A1, o motor verifica a raiz do CNPJ, formada pelos primeiros oito dígitos.
Escolha apenas uma origem para o A1: pfx ou arquivo. O PFX aceita no máximo 2 MiB. O ID do CSC aceita de 1 a 6 dígitos; o valor deve ser uma string não vazia de até 256 caracteres. A assinatura de NFC-e exige o CSC.
Limites de execução
| Campo opcional | Padrão | Faixa aceita |
|---|---|---|
timeoutMs | 120000 | Inteiro de 1 a 120000 ms |
limiteFila | 32 | Inteiro de 0 a 1000 operações aguardando |
limiteBytes | 8388608 | Inteiro de 256 a 8388608 bytes |
runtimeDirectory | Runtime instalado pelo npm | Caminho para um runtime próprio completo |
Uma instância executa uma operação por vez. As demais aguardam na fila; limiteFila: 0 permite recusar novas operações enquanto ela está ocupada. XML de entrada tem um limite próprio de 2 MiB, mesmo com limiteBytes maior.
Não aumente timeouts ou repita transmissões automaticamente para esconder uma falha. Se houve possível envio, confira a situação fiscal antes de decidir uma nova tentativa.
Cancelamento de uma operação
Cada operação aceita { signal } como último argumento:
const controller = new AbortController();
const resultado = await emissor.gerarXml(nota, { signal: controller.signal });Chamar controller.abort() cancela a espera ou encerra o processo em execução. Cancelar a execução local não desfaz um envio já recebido por um serviço fiscal.
Encerramento
Use await emissor.fechar() em finally. Ele cancela a fila, encerra e aguarda o processo atual. A instância fechada não pode executar novas operações.
try {
const resultado = await emissor.gerarXml(nota);
// Confira resultado.sucesso antes de usar o XML.
} finally {
await emissor.fechar();
}O pacote principal já seleciona contrato e validador dos modelos gerados. Para usar outro contrato, siga o fluxo de revisão própria.