Release v3.1.0 - Expansão Massiva de Recursos NFE.io SDK#20
Merged
andrekutianski merged 20 commits intomasterfrom Feb 23, 2026
Merged
Release v3.1.0 - Expansão Massiva de Recursos NFE.io SDK#20andrekutianski merged 20 commits intomasterfrom
andrekutianski merged 20 commits intomasterfrom
Conversation
…ource - Introduced `cteApiKey` in NfeConfig and RequiredNfeConfig interfaces for CT-e API key management. - Added TransportationInvoicesResource for handling CT-e operations, including enabling/disabling automatic searches, retrieving settings, and managing events. - Implemented comprehensive unit tests for TransportationInvoicesResource covering all functionalities and edge cases. - Updated NfeClient to support multi-API key configuration, including fallback mechanisms for CT-e API key. - Regenerated OpenAPI types and updated generated files with new timestamps.
Consolida as chaves de API separadas para serviços de consulta
(addressApiKey e cteApiKey) em uma única propriedade dataApiKey,
simplificando a configuração do SDK e refletindo a arquitetura
real da API NFE.io (duas categorias: fiscal e consulta).
Motivação:
- A API NFE.io utiliza apenas duas categorias de chave: uma para
operações fiscais (NFS-e, Companies, etc.) e outra para todos
os serviços de consulta (Endereços, CT-e, CNPJ, CPF)
- Ter chaves separadas (addressApiKey, cteApiKey) adicionava
complexidade desnecessária sem benefício real
- A unificação prepara o SDK para futuros serviços de consulta
que usarão a mesma chave
Alterações em tipos (src/core/types.ts):
- NfeConfig: remove addressApiKey e cteApiKey, adiciona dataApiKey
- RequiredNfeConfig: idem, mantendo tipagem string | undefined
Alterações no client (src/core/client.ts):
- Remove resolveAddressApiKey() e resolveCteApiKey()
- Adiciona resolveDataApiKey() com cadeia de fallback:
config.dataApiKey → config.apiKey → NFE_DATA_API_KEY → NFE_API_KEY
- getAddressHttpClient() e getCteHttpClient() usam resolveDataApiKey()
- validateAndNormalizeConfig() normaliza dataApiKey ao invés de duas
- updateConfig() preserva cache de dataApiKey ao invés de duas
- Mensagens de erro atualizadas para referenciar dataApiKey
- JSDoc atualizado nos getters addresses e transportationInvoices
Alterações em resources:
- addresses.ts: JSDoc atualizado para referenciar dataApiKey
- transportation-invoices.ts: JSDoc atualizado para referenciar dataApiKey
Alterações em testes:
- tests/unit/client-multikey.test.ts: reescrito (38 testes)
- Testa cadeia de fallback para Addresses e CT-e via dataApiKey
- Testa que ambos services resolvem a mesma chave
- Testa uso isolado de dataApiKey sem apiKey
- Testa que NFE_ADDRESS_API_KEY e NFE_CTE_API_KEY não são mais
reconhecidas (breaking change documentada)
- tests/integration/addresses.integration.test.ts: atualizado
Alterações em documentação:
- README.md: config examples, tabela env vars (2 vars ao invés de 3),
notas sobre Address API e CT-e
- docs/API.md: NfeConfig type, nota do recurso CT-e
Alterações em exemplos:
- examples/setup.js: template .env.test usa NFE_DATA_API_KEY
- examples/address-lookup.js: config e env vars atualizados
- examples/transportation-invoices.js: config e env vars atualizados
Arquivos gerados (src/generated/):
- Timestamps atualizados pela regeneração do openapi-typescript
Validação:
- TypeScript: zero erros (npx tsc --noEmit)
- Testes: 381 passed, 47 skipped (integration)
- Build: ESM + CJS + DTS gerados com sucesso
BREAKING CHANGE: addressApiKey e cteApiKey foram removidos de NfeConfig.
Use dataApiKey para configurar a chave de serviços de consulta.
As variáveis de ambiente NFE_ADDRESS_API_KEY e NFE_CTE_API_KEY foram
substituídas por NFE_DATA_API_KEY.
Feature/consulta cte
…buição) Adiciona suporte completo à API consulta-nfe-distribuicao-v1 para consulta de NF-e recebidas via Distribuição DFe (SEFAZ), seguindo o padrão do TransportationInvoicesResource existente. ## Novos arquivos - src/core/resources/inbound-product-invoices.ts Classe InboundProductInvoicesResource com 13 métodos públicos: - enableAutoFetch / disableAutoFetch / getSettings (gerenciamento) - getDetails / getProductInvoiceDetails (consulta webhook v1/v2) - getEventDetails / getProductInvoiceEventDetails (eventos) - getXml / getEventXml / getPdf / getJson (downloads) - manifest (Manifestação do Destinatário: 210210/210220/210240) - reprocessWebhook (reprocessar por chave de acesso ou NSU) - tests/unit/resources/inbound-product-invoices.test.ts 31 testes unitários cobrindo validação de parâmetros, caminhos HTTP corretos, métodos HTTP corretos e valores de retorno. - examples/inbound-product-invoices.js Exemplo completo demonstrando todos os fluxos principais. ## Arquivos modificados - src/core/types.ts 12 novos tipos/interfaces: InboundInvoiceMetadata, InboundProductInvoiceMetadata, InboundSettings, EnableInboundOptions, ManifestEventType, InboundCompany, InboundIssuer, InboundBuyer, InboundTransportation, InboundLinks, InboundProductInvoice, AutomaticManifesting. - src/core/client.ts Lazy getter `inboundProductInvoices` usando cteHttp (api.nfse.io). - src/core/resources/index.ts Export do InboundProductInvoicesResource. - src/index.ts Re-exports de todos os tipos de NF-e Distribuição. - docs/API.md Referência completa da API com assinaturas, tabelas de parâmetros, tabelas de resposta e exemplos de código para todos os 13 métodos. - README.md Seção "NF-e de Entrada - Distribuição" com exemplos de uso em português e tabela de tipos de manifestação. ## Decisões técnicas - Reutiliza o HttpClient de CT-e (mesmo host api.nfse.io) - Tipos handwritten (nomes gerados são ilegíveis: Sucessonarequisio) - tpEvent do manifest é passado como query param na URL - Webhook v2 (getProductInvoice*) omite nsuParent/nfeSerialNumber/ operationType e adiciona productInvoices[] - Validação de chave de acesso: 44 dígitos numéricos
feat(inbound): implementa recurso InboundProductInvoices (NF-e Distribuição)
…sulta-nf) Adiciona recurso ProductInvoiceQuery para consulta de NF-e (Nota Fiscal Eletrônica de Produto) diretamente na SEFAZ por chave de acesso de 44 dígitos. Recurso somente leitura sem necessidade de escopo de empresa, usando host dedicado nfe.api.nfe.io com resolução de dataApiKey/apiKey. Resource (src/core/resources/product-invoice-query.ts): - retrieve(accessKey) — consulta dados completos da NF-e (emissor, destinatário, itens, totais, transporte, pagamento) - downloadPdf(accessKey) — baixa DANFE em PDF como Buffer - downloadXml(accessKey) — baixa XML da NF-e como Buffer - listEvents(accessKey) — lista eventos fiscais (cancelamentos, correções, manifestações) - Validação de chave de acesso (44 dígitos numéricos) com ValidationError HTTP Client (src/core/http/client.ts): - Adiciona método getBuffer(path, accept) para requisições GET com resposta binária (PDF/XML), enviando header Accept customizado Client (src/core/client.ts): - Registra productInvoiceQuery como getter lazy-init com JSDoc completo - Adiciona getNfeQueryHttpClient() com HTTP client dedicado para nfe.api.nfe.io - Usa resolveDataApiKey() para cadeia de fallback dataApiKey → apiKey → env vars Types (src/core/types.ts): - ~550 linhas de tipos TypeScript: 16 string unions (ProductInvoiceStatus, PaymentType, OperationType, etc.) e ~30 interfaces (ProductInvoiceDetails, Issuer, Buyer, Totals, IcmsTotals, Item, ItemIcms, ItemTax, Transport, Payment, Protocol, Billing, Event, EventsResponse, etc.) - Exporta todos os tipos via src/index.ts Testes (21 novos testes de resource + 5 de integração): - tests/unit/resources/product-invoice-query.test.ts: validação de chave de acesso (vazio, não-numérico, curto, longo, válido), retrieve (sucesso, 404, 401), downloadPdf/Xml (Buffer, endpoint correto, 404), listEvents (com eventos, array vazio, endpoint, 404) - tests/unit/nfe-client.test.ts: getter productInvoiceQuery (definido, lazy init, erro sem API key) - tests/unit/http-client.test.ts: getBuffer (Accept header, XML, propagação de erros) Documentação: - docs/API.md: seção Product Invoice Query com assinaturas, parâmetros, tipos de retorno e exemplos de código - README.md: seção de uso com exemplos de retrieve, downloadPdf/Xml, listEvents - examples/product-invoice-query.js: exemplo completo executável Baseado na spec OpenAPI: openapi/spec/consulta-nf.yaml (Swagger 2.0, host nfe.api.nfe.io, 4 endpoints GET /v2/productinvoices/) Refs: openspec/changes/implement-consulta-nf
Implementa o recurso ConsumerInvoiceQueryResource para consulta de Cupons Fiscais Eletrônicos (CFe-SAT) por chave de acesso, baseado na spec consulta-nf-consumidor.yaml. Novos arquivos: - src/core/resources/consumer-invoice-query.ts: resource com retrieve() e downloadXml() - tests/unit/consumer-invoice-query.test.ts: 17 testes unitários - examples/consumer-invoice-query.js: exemplo de uso completo Tipos adicionados (src/core/types.ts): - TaxCoupon: interface principal do cupom fiscal - CouponIssuer, CouponBuyer: entidades emissor/destinatário - CouponItem, CouponItemTax: itens com detalhamento tributário - CouponPayment, CouponPaymentDetail: dados de pagamento - CouponTotal, CouponIcmsTotal, CouponIssqnTotal: totalizadores - CouponIcmsTax, CouponPisTax, CouponCofinsTax, CouponIssqnTax: impostos - CouponAddress, CouponCity, CouponDelivery: endereços - CouponAdditionalInformation, CouponFiscoField, CouponReferencedDocument - Enums: CouponStatus, CouponPersonType, CouponTaxRegime, CouponPaymentMethod Integração no client: - NfeClient.consumerInvoiceQuery: lazy getter reutilizando getNfeQueryHttpClient() - Exportações públicas de todos os tipos em src/index.ts - Host: nfe.api.nfe.io (mesmo da consulta NF-e, autenticação via dataApiKey) Documentação: - docs/API.md: seção Consumer Invoice Query com assinaturas e exemplos - README.md: seção CFe-SAT com exemplos de uso Validação: - npm run typecheck: zero erros - npm test: 456 testes passando (17 novos)
Adiciona novo resource LegalEntityLookupResource exposto como nfe.legalEntityLookup, conectando à API legalentity.api.nfe.io para consulta de dados cadastrais de pessoas jurídicas (CNPJ). 4 métodos implementados: - getBasicInfo(cnpj, options?) — dados cadastrais da Receita Federal (razão social, endereço, sócios, CNAE, natureza jurídica, capital social) - getStateTaxInfo(uf, cnpj) — inscrição estadual e regime tributário - getStateTaxForInvoice(uf, cnpj) — avaliação de IE para emissão de NF-e - getSuggestedStateTaxForInvoice(uf, cnpj) — melhor IE sugerida para emissão Arquitetura: - HttpClient dedicado com base URL legalentity.api.nfe.io - Resolução de API key via cadeia dataApiKey → apiKey → env vars - Lazy instantiation e cache do resource (padrão existente do SDK) - Validação client-side de CNPJ (14 dígitos, aceita pontuação) e UF (29 códigos) Tipos TypeScript: - 30+ interfaces/types com prefixo LegalEntity em src/core/types.ts - BrazilianState union type (27 UFs + EX + NA) - Enums tipados para status, porte, regime tributário, natureza jurídica - Todos os campos opcionais (?) exceto onde garantido pela API - Exportados via src/index.ts Testes: - 38 testes unitários cobrindo validação, métodos e error handling - Mock de HttpClient com vitest (padrão existente) Documentação: - README.md: seção Consulta CNPJ com exemplos de código - docs/API.md: documentação completa (métodos, parâmetros, tipos, exemplos) - examples/cnpj-lookup.js: 6 exemplos demonstrando todos os métodos Validação: typecheck ✓ | 494 tests passing ✓ | build ✓ Ref: openapi/spec/consulta-cnpj.yaml (Swagger 2.0)
…a CPF)
Adiciona suporte completo para consulta de situação cadastral de CPF
na Receita Federal via a API naturalperson.api.nfe.io.
## Novos arquivos
- src/core/resources/natural-person-lookup.ts
Resource com validação de CPF (11 dígitos, aceita pontuação),
validação de data de nascimento (string YYYY-MM-DD ou Date object),
e método getStatus() que consulta a API.
- openapi/spec/consulta-cpf.yaml
Spec OpenAPI (Swagger 2.0) da API de Consulta CPF, renomeado de
cpf-api.yaml para seguir o padrão de nomenclatura do projeto.
- tests/unit/natural-person-lookup.test.ts
22 testes unitários cobrindo: validação de CPF (vazio, curto, longo,
formatado), validação de data (formato inválido, mês/dia fora de
range, Date object inválido), chamadas getStatus() com normalização
de entrada, e propagação de erros HTTP (404, 401, 400).
- examples/cpf-lookup.js
Exemplo de uso com string date, Date object e tratamento de erros.
## Tipos adicionados (src/core/types.ts)
- NaturalPersonStatus: union type com valores conhecidos da Receita
('Regular', 'Suspensa', 'Cancelada', 'Titular Falecido',
'Pendente de Regularização', 'Nula') + fallback string.
- NaturalPersonStatusResponse: interface com campos name?,
federalTaxNumber, birthOn?, status?, createdOn?.
## Integração no NfeClient (src/core/client.ts)
- Lazy getter naturalPersonLookup com HttpClient dedicado
- Método privado getNaturalPersonHttpClient() usando resolveDataApiKey()
- Re-export de NATURAL_PERSON_API_BASE_URL
## Exports públicos (src/index.ts)
- Tipos: NaturalPersonStatus, NaturalPersonStatusResponse
- Constante: NATURAL_PERSON_API_BASE_URL
## Documentação
- README.md: seção Consulta CPF com exemplos de código
- docs/API.md: referência completa (método, parâmetros, tipos, throws)
## Arquivos gerados (src/generated/)
- Apenas atualização de timestamps pela re-execução do gerador.
…iares
Adiciona suporte completo ao Motor de Cálculo de Tributos (calculo-impostos-v1)
com dois novos resources no SDK: taxCalculation e taxCodes.
## Novos Resources
### TaxCalculationResource (nfe.taxCalculation)
- calculate(tenantId, request) → CalculateResponse
- Calcula ICMS, ICMS-ST, PIS, COFINS, IPI, II para operações com produtos
- Validação de tenantId e campos obrigatórios do request
- URL encoding e trim do tenantId
- Endpoint: POST /tax-rules/{tenantId}/engine/calculate (api.nfse.io)
### TaxCodesResource (nfe.taxCodes)
- listOperationCodes() — códigos de natureza de operação
- listAcquisitionPurposes() — finalidades de aquisição
- listIssuerTaxProfiles() — perfis fiscais do emissor
- listRecipientTaxProfiles() — perfis fiscais do destinatário
- Paginação via pageIndex/pageCount (1-based, difere do OData $skip/$top)
- Endpoints: GET /tax-codes/* (api.nfse.io)
## Tipos Adicionados (src/core/types.ts)
- Enums: TaxOperationType, TaxOrigin, TaxCalcTaxRegime
- Componentes tributários: TaxIcms (~45 campos), TaxIcmsUfDest, TaxPis,
TaxCofins, TaxIpi, TaxIi
- Request: CalculateRequest, CalculateRequestIssuer/Recipient, CalculateItemRequest
- Response: CalculateResponse, CalculateItemResponse
- Códigos: TaxCode, TaxCodePaginatedResponse, TaxCodeListOptions
- Nota: TaxCalcTaxRegime usa PascalCase (RealProfit) para evitar conflito
com o TaxRegime existente (LucroReal) das notas de serviço
## Integração no NfeClient
- Lazy getters: nfe.taxCalculation e nfe.taxCodes
- Ambos usam getCteHttpClient() (api.nfse.io) com resolveDataApiKey()
- Exports públicos adicionados em src/index.ts
## Testes (38 novos testes)
- tax-calculation.test.ts: 13 testes (calculate, validação, erros)
- tax-codes.test.ts: 15 testes (4 métodos, paginação, erros)
- tax-types.test.ts: 10 testes (verificação de tipos compile-time + runtime)
## Documentação
- README.md: seções Cálculo de Impostos e Códigos Auxiliares com exemplos
- docs/API.md: referência completa (métodos, parâmetros, tipos, erros)
- examples/tax-calculation.js: exemplo completo com listagem e cálculo
- examples/README.md: entrada do novo exemplo
## Arquivos Modificados
- src/core/types.ts (+439 linhas)
- src/core/client.ts (imports, cache fields, lazy getters)
- src/core/resources/index.ts (exports)
- src/index.ts (type re-exports, resource exports)
- openapi/spec/calculo-impostos-v1.yaml (host field)
- src/generated/*.ts (timestamps da regeneração)
Ref: openspec/changes/implement-calculo-impostos (30/30 tasks)
…ões Estaduais
Adiciona suporte completo à API NF-e de Produto (nf-produto-v2) com dois novos
recursos: ProductInvoicesResource e StateTaxesResource, ambos conectados ao host
api.nfse.io via getCteHttpClient().
## ProductInvoicesResource (16 métodos)
Ciclo de vida completo de NF-e de Produto:
- create(): emissão de NF-e (assíncrono, retorna 202)
- createWithStateTax(): emissão via inscrição estadual específica
- list(): listagem com paginação cursor-based (environment obrigatório)
- retrieve(): consulta detalhada por ID
- cancel(): cancelamento assíncrono com motivo opcional
- listItems(): itens da nota fiscal com paginação
- listEvents(): eventos fiscais com paginação
- downloadPdf(): URL do DANFE PDF (com opção force)
- downloadXml(): URL do XML autorizado
- downloadRejectionXml(): URL do XML de rejeição
- downloadEpecXml(): URL do XML de contingência EPEC
- sendCorrectionLetter(): CC-e com validação 15-1000 caracteres
- downloadCorrectionLetterPdf(): URL do PDF da CC-e
- downloadCorrectionLetterXml(): URL do XML da CC-e
- disable(): inutilização por ID
- disableRange(): inutilização de faixa de numeração
## StateTaxesResource (5 métodos CRUD)
Gestão de Inscrições Estaduais (pré-requisito para emissão de NF-e):
- list(): listagem com paginação cursor-based
- create(): criação com body wrapper { stateTax: data }
- retrieve(): consulta por ID
- update(): atualização parcial com body wrapper
- delete(): exclusão por ID
## Tipos TypeScript (~1.075 linhas)
- 30+ enums como string literal unions (NfeInvoiceStatus, NfePaymentMethod, etc.)
- Interfaces completas: NfeProductInvoice, NfeProductInvoiceIssueData, NfeStateTax
- Tipos de request/response: NfeProductInvoiceListOptions, NfeDisablementData, etc.
- Tipos auxiliares: NfeIcmsTaxResource, NfeInvoiceItemResource, NfeBillingResource
## Integração no NfeClient
- Lazy getters productInvoices e stateTaxes em NfeClient
- Ambos usam getCteHttpClient() (host api.nfse.io, dataApiKey com fallback)
- Exports públicos em src/core/resources/index.ts e src/index.ts
## Testes (50 novos testes)
- product-invoices.test.ts: 36 testes cobrindo todos os 16 métodos
- state-taxes.test.ts: 14 testes cobrindo CRUD + validações
- Mock do HttpClient com verificação de paths, params e body wrapping
## Documentação e Exemplos
- docs/API.md: referência completa dos 21 métodos com assinaturas, exemplos e tabelas
- README.md: seções em português para nfe.productInvoices e nfe.stateTaxes
- examples/product-invoices.js: exemplo de ciclo de vida completo (128 linhas)
- examples/state-taxes.js: exemplo CRUD com todas as operações (85 linhas)
Baseado na spec OpenAPI nf-produto-v2.yaml.
Todos os 606 testes passam, zero erros TypeScript.
📋 OpenAPI Spec Validation✅ All specs validated and types generated successfully Specs processed:
Generated types available as artifact in |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📊 Resumo Executivo
Branch de origem:
developBranch de destino:
masterVersão: v3.0.2 → v3.1.0
Commits: 17 commits
Arquivos modificados: 58 arquivos
Linhas adicionadas: +14,176
Linhas removidas: -102
Autor principal: Andre Kutianski
Período: 16 de fevereiro - 22 de fevereiro de 2026
🎯 Objetivo
Esta release representa uma expansão massiva do NFE.io SDK, adicionando suporte completo para 10 novos recursos da API NFE.io, transformando o SDK de uma solução focada em NFS-e para uma plataforma completa de gestão de documentos fiscais eletrônicos brasileiros.
✨ Principais Destaques
🚀 Novos Recursos Implementados (10)
🚚 CT-e (Conhecimento de Transporte Eletrônico)
📥 NF-e de Entrada (Distribuição NF-e)
📋 Consulta NF-e por Chave de Acesso
🧾 Consulta CFe-SAT (Cupom Fiscal Eletrônico)
🏢 Consulta CNPJ (Legal Entity Lookup)
👤 Consulta CPF (Natural Person Lookup)
📊 NF-e de Produto (Emissão)
🧮 Cálculo de Impostos
📖 Códigos Auxiliares de Tributação
🗺️ Inscrições Estaduais
📦 Detalhamento Técnico das Mudanças
Arquivos Criados (30 novos arquivos)
Recursos (10 arquivos)
Testes Unitários (11 arquivos)
Exemplos (9 arquivos)
Arquivos Modificados Principais
1. Core Client (client.ts)
_cteHttp- API de CT-e (api.nfse.io)_nfeQueryHttp- API de consulta NF-e_legalEntityHttp- API de consulta CNPJ_naturalPersonHttp- API de consulta CPFdataApiKey(unificação de chaves auxiliares)2. Tipos TypeScript (types.ts)
3. Exportações Públicas (index.ts)
4. Documentação
README.md
API.md
5. HTTP Client (client.ts)
6. OpenAPI Specs
cpf-api.yamlparaconsulta-cpf.yamlcalculo-impostos-v1.yaml🔧 Mudanças de Configuração
Breaking Changes (Configuração)
❌ Removido:
addressApiKey❌ Removido:
cteApiKey✅ Adicionado:
dataApiKey(unifica todas as chaves de APIs auxiliares)📊 Cobertura de Testes
Novos Testes Adicionados
Status de Testes
✅ Todos os testes existentes continuam passando
✅ Novos testes implementados para todos os recursos
✅ Cobertura estimada > 85%
🔍 Exemplos de Uso dos Novos Recursos
1. Consulta CNPJ
2. CT-e (Transporte)
3. NF-e de Produto
4. Cálculo de Impostos
🐛 Correções Incluídas
.gitignore
client-pythonCI/CD
bugfix/*echore/*Documentação
Generated Files
📈 Impacto e Métricas
Crescimento do SDK
APIs Suportadas