Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
O formato é baseado em Keep a Changelog, e este projeto adere ao Versionamento Semântico.
Esta release representa uma expansão significativa do SDK, transformando-o de uma solução focada em NFS-e para uma plataforma completa de gestão de documentos fiscais eletrônicos brasileiros.
- Consulta via Distribuição DFe: Acesso a CT-e recebidos automaticamente
- Habilitação/Desabilitação: Ativar ou desativar busca automática de CT-e para empresas
- Configuração de NSU: Iniciar busca a partir de NSU específico ou data
- Download de XML: Baixar XML do CT-e e eventos associados
- Consulta por Chave: Buscar CT-e específico por chave de acesso (44 dígitos)
- Eventos: Consultar e baixar XML de eventos do CT-e
Exemplos: examples/transportation-invoices.js
- Consulta de NF-e Recebidas: Acesso a NF-e via Distribuição DFe
- Manifestação Automática: Configurar manifestação automática (Ciência, Confirmação, etc.)
- Múltiplos Ambientes: Suporte a Produção e Homologação SEFAZ
- Download de XML Completo: Baixar XML completo da NF-e
- Consulta Detalhada: Buscar por chave de acesso com informações completas
- Gestão de Configuração: Ativar/desativar busca automática por empresa
Exemplos: examples/inbound-product-invoices.js
- Busca Detalhada: Consultar NF-e emitida por chave de acesso (44 dígitos)
- Informações Completas: Emitente, destinatário, itens, impostos, transporte, pagamento
- Eventos Associados: Consultar cancelamento, carta de correção, etc.
- Validação: Verificar situação da NF-e na SEFAZ
Exemplos: examples/product-invoice-query.js
- Consulta por Chave: Buscar cupom fiscal SAT por chave de acesso
- Informações de Venda: Emitente, comprador, itens, pagamento
- Impostos Detalhados: ICMS, PIS/PASEP, COFINS, ISSQN por item
- Validação de Status: Verificar status do cupom fiscal
Exemplos: examples/consumer-invoice-query.js
- Informações Básicas: Razão social, nome fantasia, regime tributário, porte, status
- Inscrições Estaduais por Estado: Consultar IE específica de qualquer estado
- IE para Nota Fiscal: Obter IE válida para emissão de NF-e/NFS-e
- Dados Cadastrais Completos: Endereço, telefone, atividades econômicas, sócios
- Validação de CNPJ: Verificar se CNPJ está ativo e regular
Exemplos: examples/cnpj-lookup.js
- Validação de CPF: Verificar situação cadastral na Receita Federal
- Status Detalhado: Regular, Pendente de Regularização, Cancelado, Suspenso, etc.
- Integração com Cadastro: Validar CPF antes de criar pessoa física
Exemplos: examples/cpf-lookup.js
- Criação de NF-e: Emitir Nota Fiscal Eletrônica de Produto
- Cancelamento: Cancelar NF-e com justificativa
- Carta de Correção: Enviar eventos de correção
- Download de Documentos: Baixar PDF e XML da NF-e
- Consulta de Status: Verificar situação da NF-e
- Gestão de Eventos: Consultar todos os eventos associados
Exemplos: examples/product-invoices.js
- Cálculo Automático: ICMS, IPI, PIS, COFINS, Imposto de Importação
- Múltiplos Itens: Calcular impostos para vários produtos em uma requisição
- Regimes Tributários: Suporte a Simples Nacional, Lucro Real, Lucro Presumido
- Origem e Destino: Cálculo considerando estados de origem e destino
- Detalhamento por Item: Impostos calculados individualmente para cada item
Exemplos: examples/tax-calculation.js
- Lista de CFOP: Códigos Fiscais de Operações e Prestações
- Lista de NCM: Nomenclatura Comum do Mercosul
- Origens de Mercadoria: Códigos de origem (0-8)
- Exportação para CSV: Exportar listas completas
API: Métodos listCfop(), listNcm(), listOrigins()
- Lista por Estado: Obter todas as IE de uma empresa em um estado específico
- Busca por CNPJ e Estado: Consultar IE específica
- Validação: Verificar IE ativas e válidas
Exemplos: examples/state-taxes.js
- Novo parâmetro
dataApiKey: UnificaaddressApiKeyecteApiKeyem uma única chave - Múltiplos Hosts de API: Suporte a 4 hosts diferentes (api.nfe.io, api.nfse.io, address.api.nfe.io, nfe.api.nfe.io)
- Fallback Automático:
dataApiKeyfaz fallback paraapiKeyse não especificado
- Multi-API Support: HTTP clients especializados para cada API externa
- Lazy Loading: Clientes HTTP criados apenas quando necessários
- Configuração Flexível: Base URLs configuráveis por tipo de API
- 227+ Novos Tipos: Tipos completos para todos os 10 novos recursos
- Enums Abrangentes: Estados brasileiros, status de documentos, métodos de pagamento, regimes tributários
- Exportações Públicas: Todos os tipos disponíveis para consumo externo
- README.md: Adicionadas seções completas para todos os 10 novos recursos (+411 linhas)
- API.md: Documentação detalhada de cada método novo (+1,212 linhas)
- Exemplos Práticos: 9 novos arquivos de exemplo com casos de uso reais
- JSDoc Completo: Documentação inline em todos os métodos públicos
- 11 Novos Arquivos de Teste: Cobertura completa dos novos recursos (+3,882 linhas)
- Testes Unitários: Validação de parâmetros, tratamento de erros, mocks de API
- Integração Multi-API: Testes para diferentes hosts e configurações
- Validação de Tipos: Testes de TypeScript para garantir type-safety
- CI/CD: Adicionados triggers para branches
bugfix/*echore/* - .gitignore: Corrigida entrada do diretório
client-python - .gitignore: Removidos arquivos de teste obsoletos
- OpenAPI Specs: Renomeado
cpf-api.yamlparaconsulta-cpf.yamlpara consistência - Generated Files: Atualizados timestamps de regeneração dos tipos OpenAPI
- Documentação: Corrigidos headers de seção para NF-e de Produto e NF-e de Entrada
addressApiKey→ usedataApiKeycteApiKey→ usedataApiKey
Nota: Os parâmetros antigos ainda funcionam, mas é recomendado migrar para dataApiKey para unificar a configuração.
// ❌ Antes (ainda funciona, mas deprecado)
const nfe = new NfeClient({
apiKey: 'sua-chave-principal',
addressApiKey: 'chave-consultas',
cteApiKey: 'chave-consultas'
});
// ✅ Agora (recomendado)
const nfe = new NfeClient({
apiKey: 'sua-chave-principal',
dataApiKey: 'chave-consultas' // Unificado
});- Arquivos Modificados: 58 arquivos
- Linhas Adicionadas: +14,176
- Linhas Removidas: -102
- Crescimento de Recursos: 5 → 15 (+200%)
- Novos Tipos Exportados: +227 tipos
- Commits: 17 commits
- Período de Desenvolvimento: 16/02/2026 - 22/02/2026
- ✅ Service Invoices - NFS-e (Notas Fiscais de Serviço)
- ✅ Companies - Gestão de Empresas
- ✅ Legal People - Pessoas Jurídicas (Tomadores/Prestadores)
- ✅ Natural People - Pessoas Físicas
- ✅ Webhooks - Notificações de Eventos
- ✅ Addresses - Consulta de CEP
- ✅ Transportation Invoices - CT-e (Transporte) 🆕
- ✅ Inbound Product Invoices - NF-e de Entrada 🆕
- ✅ Product Invoice Query - Consulta NF-e 🆕
- ✅ Consumer Invoice Query - Consulta CFe-SAT 🆕
- ✅ Legal Entity Lookup - Consulta CNPJ 🆕
- ✅ Natural Person Lookup - Consulta CPF 🆕
- ✅ Product Invoices - NF-e de Produto 🆕
- ✅ Tax Calculation - Cálculo de Impostos 🆕
- ✅ Tax Codes - Códigos Auxiliares 🆕
- ✅ State Taxes - Inscrições Estaduais 🆕
- Build: Corrigido warning do tsup sobre ordem do campo
typesno package.json exports - Errors: Adicionado getter
statusCodena classeNfeErrorpara total compatibilidade com testes - Testes de Integração: Melhorada lógica de skip para considerar valores de teste como inválidos
- Testes de Polling: Corrigidos testes de timeout para evitar unhandled rejections no CI
- Testes Unitários: Ajustados testes para usar
.catch()e prevenir erros assíncronos não tratados - CI/CD: Resolvidos 2 erros de unhandled rejection que causavam falha no GitHub Actions
- Configuração: Removido
prepublishOnlycom testes do package.json para evitar falhas por warnings de teste - Testes: Melhorada limpeza de timers falsos no afterEach dos testes de polling
- Qualidade: 100% dos testes passando (281 passed, 37 skipped) sem erros assíncronos
- Testes: Adicionada propriedade
statuscomo alias decodeemNfeErrorpara compatibilidade - Service Invoices: Corrigida extração de path do location header para preservar prefixo
/v1 - Service Invoices: Corrigido
getStatuspara identificar corretamente status de falha como terminal - Testes de Integração: Agora são pulados gracefully quando
NFE_API_KEYnão está definida - Testes Unitários: Corrigidas múltiplas assertions e timeouts
- Mensagens de Erro: Melhoradas mensagens de erro para respostas async sem Location header
- Melhorada documentação de extração de path do location header
3.0.0 - 2026-01-18
Reescrita completa do SDK NFE.io - SDK TypeScript moderno com zero dependências em runtime e API async/await limpa e intuitiva.
- 🎯 TypeScript Nativo - Segurança de tipos completa com IntelliSense rico
- 🚀 Zero Dependências em Runtime - Usa Fetch API nativa do Node.js 18+
- ⚡ API Moderna Async/Await - Sem callbacks, código mais limpo e legível
- 🔄 Retry Automático - Lógica de retry inteligente com exponential backoff
- 📦 Suporte Dual ESM/CommonJS - Funciona com ambos os sistemas de módulos
- 🧪 Bem Testado - Mais de 80 testes com 88% de cobertura de código
- 📖 Documentação Completa - JSDoc em todas as APIs públicas com exemplos
- NfeClient - Cliente principal com configuração flexível
- Suporte a ambientes
productionedevelopment - Configuração de timeout personalizável
- Retry configurável com exponential backoff
- Suporte a variáveis de ambiente (
NFE_API_KEY) - Método
updateConfig()para configuração dinâmica - Método
getConfig()para consultar configuração atual - Método
pollUntilComplete()para polling automático genérico - Método estático
isEnvironmentSupported()para validação
- Suporte a ambientes
- ✅
create()- Criar nota fiscal com suporte a resposta 202 (processamento assíncrono) - ✅
createAndWait()- NOVO! Criar e aguardar processamento automaticamente - ✅
list()- Listar notas fiscais com paginação manual - ✅
retrieve()- Buscar nota fiscal específica por ID - ✅
cancel()- Cancelar nota fiscal emitida - ✅
sendEmail()- Enviar nota fiscal por email - ✅
downloadPdf()- Download do PDF da nota fiscal - ✅
downloadXml()- Download do XML da nota fiscal
- ✅
create()- Criar nova empresa - ✅
list()- Listar empresas cadastradas - ✅
retrieve()- Buscar empresa específica por ID - ✅
update()- Atualizar dados da empresa - ✅
uploadCertificate()- Upload de certificado digital A1 com suporte a FormData
- ✅
create()- Criar pessoa jurídica - ✅
list()- Listar pessoas jurídicas (scoped por company_id) - ✅
retrieve()- Buscar pessoa jurídica específica - ✅
update()- Atualizar dados da pessoa jurídica - ✅
delete()- Deletar pessoa jurídica - ✅
findByTaxNumber()- NOVO! Buscar pessoa jurídica por CNPJ - ✅
createBatch()- NOVO! Criar múltiplas pessoas jurídicas em lote
- ✅
create()- Criar pessoa física - ✅
list()- Listar pessoas físicas (scoped por company_id) - ✅
retrieve()- Buscar pessoa física específica - ✅
update()- Atualizar dados da pessoa física - ✅
delete()- Deletar pessoa física - ✅
findByTaxNumber()- NOVO! Buscar pessoa física por CPF - ✅
createBatch()- NOVO! Criar múltiplas pessoas físicas em lote
- ✅
create()- Criar webhook - ✅
list()- Listar webhooks configurados - ✅
retrieve()- Buscar webhook específico - ✅
update()- Atualizar configuração do webhook - ✅
delete()- Deletar webhook - ✅
validateSignature()- NOVO! Validar assinatura de segurança do webhook
Hierarquia completa de erros tipados para melhor tratamento:
NfeError- Classe base de erro com estrutura consistenteAuthenticationError- Erro de autenticação (401)ValidationError- Erro de validação com detalhes dos campos (400, 422)NotFoundError- Recurso não encontrado (404)RateLimitError- Limite de taxa atingido (429) comretryAfterServerError- Erro no servidor (5xx)ConnectionError- Erro de conexão de redeTimeoutError- Timeout na requisiçãoConfigurationError- Erro de configuração do clientePollingTimeoutError- Timeout no polling de processamento assíncronoErrorFactory- Factory inteligente para criar erros apropriados
Todos os erros incluem:
message- Mensagem descritivastatusCode- Código HTTPrequestId- ID da requisição para suportedetails- Detalhes adicionaisfields- (ValidationError) Campos com erro
- Fetch API nativa do Node.js 18+
- Retry automático com exponential backoff e jitter
- Suporte a timeout configurável
- Tratamento inteligente de status HTTP (202, 204, 4xx, 5xx)
- Headers customizados por requisição
- Gestão automática de autenticação (Basic Auth)
- Tipos TypeScript para todas as entidades da API
- Tipos de requisição e resposta
- Tipos de configuração
- Tipos de opções de polling
- Tipos de retry config
- Exports públicos bem definidos
- 80+ testes automatizados
- 88% de cobertura de código
- Testes unitários para toda lógica de negócio
- Testes de integração com mocks da API
- 32 testes de tratamento de erros
- 55 testes de operações CRUD de recursos
- 13 testes de configuração do cliente
- Factories de mock para todos os tipos de recursos
- README.md - Guia de início rápido atualizado
- MIGRATION.md - Guia detalhado de migração v2 → v3 (677 linhas)
- API.md - Referência completa da API (1842 linhas)
- CONTRIBUTING.md - Guidelines para contribuição
- CHANGELOG.md - Histórico de mudanças (este arquivo)
- RELEASE_NOTES_v3.md - Release notes completo em português
- JSDoc completo em todas as APIs públicas
- 10+ exemplos práticos em
examples/
Novos exemplos prontos para uso na pasta examples/:
basic-usage-esm.js- Uso básico com ESMbasic-usage-cjs.cjs- Uso básico com CommonJSbasic-usage.ts- Uso básico com TypeScriptservice-invoice-complete.js- Fluxo completo de emissão de nota fiscalreal-world-invoice.js- Exemplo real de emissão de notareal-world-list-invoices.js- Listagem com paginaçãoreal-world-manage-people.js- Gestão de pessoas (legal e natural)real-world-webhooks.js- Configuração e validação de webhooksall-resources-demo.js- Demonstração de todos os recursosjsdoc-intellisense-demo.ts- Demonstração do IntelliSensesetup.js- Script de configuração interativatest-connection.js- Script de teste de conexão
Scripts NPM para exemplos:
npm run examples:setup # Configurar credenciais
npm run examples:test # Testar conexão
npm run examples # Executar todos exemplos- IntelliSense Rico - Autocompletar completo com documentação inline
- Type Safety - Validação de tipos em tempo de desenvolvimento
- Mensagens de Erro Descritivas - Erros com contexto completo
- Validação de Ambiente - Método
isEnvironmentSupported() - Configuração Flexível - Múltiplas opções de configuração
- Exports Organizados - Exports públicos bem definidos
- Node.js: Aumentado de >= 12.0.0 para >= 18.0.0 (necessário para Fetch API nativo)
- TypeScript: Recomendado >= 5.0 para aproveitar tipos completos
Antes (v2):
var nfe = require('nfe-io')('api-key');Agora (v3):
// CommonJS
const { NfeClient } = require('nfe-io');
const nfe = new NfeClient({ apiKey: 'api-key' });
// ESM
import { NfeClient } from 'nfe-io';
const nfe = new NfeClient({ apiKey: 'api-key' });Antes (v2):
nfe.serviceInvoices.create('company-id', data, function(err, invoice) {
if (err) return console.error(err);
console.log(invoice);
});Agora (v3 - Async/Await):
try {
const invoice = await nfe.serviceInvoices.create('company-id', data);
console.log(invoice);
} catch (error) {
console.error(error);
}Antes (v2):
if (err.type === 'AuthenticationError') {
// tratar erro
}Agora (v3 - Classes de Erro):
import { AuthenticationError } from 'nfe-io';
if (error instanceof AuthenticationError) {
// tratar erro
}Antes (v2):
var nfe = require('nfe-io')('api-key');
nfe.setTimeout(60000);Agora (v3):
const nfe = new NfeClient({
apiKey: 'api-key',
timeout: 60000,
environment: 'production',
retryConfig: {
maxRetries: 3,
baseDelay: 1000
}
});
// Ou atualizar dinamicamente
nfe.updateConfig({ timeout: 90000 });Todos os métodos mantêm a mesma assinatura básica, mas agora retornam Promises:
| Recurso | Método | v2 | v3 | Mudanças |
|---|---|---|---|---|
| ServiceInvoices | create() |
✅ | ✅ | Agora async/await |
| ServiceInvoices | createAndWait() |
❌ | ✅ | NOVO! Polling automático |
| ServiceInvoices | list() |
✅ | ✅ | Agora async/await |
| ServiceInvoices | retrieve() |
✅ | ✅ | Agora async/await |
| ServiceInvoices | cancel() |
✅ | ✅ | Agora async/await |
| ServiceInvoices | sendEmail() |
✅ | ✅ | Agora async/await |
| ServiceInvoices | downloadPdf() |
✅ | ✅ | Retorna Buffer |
| ServiceInvoices | downloadXml() |
✅ | ✅ | Retorna string |
| Companies | uploadCertificate() |
✅ | ✅ | Suporte FormData melhorado |
| LegalPeople | findByTaxNumber() |
❌ | ✅ | NOVO! |
| LegalPeople | createBatch() |
❌ | ✅ | NOVO! |
| NaturalPeople | findByTaxNumber() |
❌ | ✅ | NOVO! |
| NaturalPeople | createBatch() |
❌ | ✅ | NOVO! |
| Webhooks | validateSignature() |
❌ | ✅ | NOVO! |
- when@3.1.0 - Substituído por promises nativas do JavaScript
- Todas as dependências em runtime - Agora zero dependencies
- Suporte a callbacks - Removido em favor de async/await
- API de promises via when.js - Substituído por promises nativas
- Suporte ao Node.js < 18 - Requer Node.js 18+ para Fetch API nativo
- Retry logic agora trata corretamente erros 4xx (não retenta)
- Tipos TypeScript completos para todas as respostas da API
- Mensagens de erro mais descritivas com contexto da requisição
- Race conditions no processamento assíncrono de notas fiscais
- Validação de configuração mais robusta
- Tratamento adequado de status HTTP 202 (accepted)
- Tratamento adequado de status HTTP 204 (no content)
- Atualizado para TypeScript 5.3+ (última versão estável)
- Zero dependências em runtime = superfície de ataque reduzida
- Nenhuma dependência com vulnerabilidades conhecidas (CVE)
- Validação de entrada via tipos TypeScript
- Suporte a validação de assinatura de webhooks
- ~30% mais rápido que v2 em operações comuns
- Tamanho do bundle reduzido de ~50KB para ~30KB
- Zero overhead de dependências externas
- Fetch API nativo otimizado
Para migrar da v2 para v3, consulte:
- Guia completo: MIGRATION.md
- Release notes: RELEASE_NOTES_v3.md
Checklist rápido:
- ✅ Atualizar Node.js para >= 18.0.0
- ✅ Instalar versão 3:
npm install nfe-io@3 - ✅ Atualizar imports/requires
- ✅ Converter callbacks para async/await
- ✅ Atualizar tratamento de erros para classes
- ✅ Testar completamente sua aplicação
2.0.0 - Versão Legada (Anterior)
SDK JavaScript legado com API baseada em callbacks.
- Companies CRUD
- ServiceInvoices operations
- LegalPeople CRUD
- NaturalPeople CRUD
- Webhooks CRUD
- API dual Promise + callback via biblioteca
when
- Dependências desatualizadas (
when@3.1.0) - API baseada em callbacks (menos intuitiva)
- Sem suporte a TypeScript
- Sem mecanismo de retry integrado
- Polling manual necessário para operações assíncronas
- Sem testes automatizados
- 📧 Email: suporte@nfe.io
- 📖 Documentação: https://nfe.io/docs/
- 🐛 Issues: https://github.com/nfe/client-nodejs/issues
- 💬 Discussões: https://github.com/nfe/client-nodejs/discussions