Skip to content

Commit 063b360

Browse files
committed
chore(release): v5.2.0
1 parent 3051dfc commit 063b360

3 files changed

Lines changed: 90 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,90 @@ Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
55
O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/),
66
e este projeto adere ao [Versionamento Semântico](https://semver.org/lang/pt-BR/).
77

8+
## [5.2.0] - 2026-07-13
9+
10+
> Correção do contrato de paginação de `companies` contra a API real, provado
11+
> por sonda ao vivo (2026-07-13, duas contas). O request de `GET /companies` é
12+
> **1-based** — a API rejeita `pageIndex: 0` com `"pageIndex must be greater or
13+
> equal to 1"` — igual ao de `serviceInvoices` (rejeição de `pageIndex: 0`
14+
> reconfirmada ao vivo), não o oposto como se supunha.
15+
16+
### Corrigido
17+
18+
- **`companies.listAll()` e `companies.listIterator()` falhavam na primeira
19+
chamada**, por dois motivos independentes: (1) iniciavam a paginação em
20+
`pageIndex = 0`, que a API rejeita — agora iniciam em `1`; (2) pediam
21+
`pageCount: 100`, mas a API limita `GET /companies` a **50 itens por página**
22+
(sonda ao vivo: aceita 2–50; rejeita 1, apesar da mensagem `"between 1 and
23+
50"`, e rejeita ≥51) — agora pedem `50`. Consertados transitivamente os
24+
quatro métodos que dependem de `listAll()`: `findByTaxNumber`, `findByName`,
25+
`getCompaniesWithCertificates` e `getCompaniesWithExpiringCertificates`.
26+
- `companies.list()` ecoava `pageCount: 100` como default no `page` da resposta;
27+
o default real da API é **10 itens** quando `pageCount` é omitido.
28+
- ⚠️ **JSDoc de `companies.update()` era ativamente enganoso**: dizia *"only
29+
fields to update"* (semântica PATCH), mas a API faz **PUT (substituição
30+
total)** — update parcial seguindo o docblock resulta em 400 ou em campos
31+
zerados silenciosamente. O JSDoc agora documenta o replace integral com
32+
exemplo read-modify-write. As assinaturas frouxas (`Partial<Company>`/
33+
`Omit<Company>`) foram mantidas por compat; o aperto para os schemas
34+
estritos fica para a próxima major (política de versionamento) ou para a
35+
migração de CRUD v2.
36+
- JSDoc de `companies.create()` documenta os obrigatórios reais do corpo
37+
(`name`, `federalTaxNumber`, `taxRegime`, `address`) e que `email` **não**
38+
faz parte dele; exemplo corrigido (o anterior compilava e falhava com 400).
39+
- Vitest coletava os testes **** através dos symlinks `client-php`/
40+
`client-ruby` (que apontam de volta para este repo), causando flakes por
41+
corrida no `.test-temp` compartilhado e inflando a suíte (3710 → 698 testes
42+
reais). O `include` agora é restrito a `tests/**`.
43+
44+
### Deprecado
45+
46+
- **`companies.list()`** (API v1, paginação offset): a API v1 de companies
47+
está sendo descontinuada. Use `listV2()` (cursor, v2) para listagem
48+
paginada, ou `listAll()`/`listIterator()` para varredura completa. O método
49+
continua funcionando (e corrigido — ver acima) durante a convivência.
50+
**Nota**: `listAll()`/`listIterator()` permanecem no transporte v1 nesta
51+
release porque a enumeração completa via v2 falha de forma determinística
52+
em contas com certos registros (HTTP 500 server-side em qualquer janela
53+
que os contenha — bug reportado ao backend em 2026-07-14), e porque as
54+
projeções v1/v2 divergem de campos. A troca de transporte fica para quando
55+
o backend corrigir o 500.
56+
- JSDoc de `companies.list` e `serviceInvoices.list`, `docs/API.md` e `README`
57+
exemplificavam `pageIndex: 0` — todos corrigidos para a convenção 1-based.
58+
- `PaginationOptions.pageIndex` e `PageInfo.pageIndex` documentados como
59+
1-based (a primeira página é 1).
60+
- Specs OpenAPI (`nf-servico-v1.yaml`): `pageIndex` agora declara `minimum: 1`
61+
em `/v1/companies` e na listagem de notas de serviço; `pageCount` de
62+
`/v1/companies` declara `maximum: 50`.
63+
64+
### Alterado
65+
66+
- ⚠️ **Nota de migração**: `companies.list()` deixou de subtrair 1 da resposta.
67+
`list({ pageIndex: 1 }).page.pageIndex` agora retorna `1` (antes retornava
68+
`0`). A convenção do SDK passa a ser **1-based nos dois lados** (request e
69+
response), fiel ao fio da API. Se seu código lia `page.pageIndex` assumindo
70+
base 0 (ex.: `pageIndex + 1` para exibir o número da página), remova o ajuste.
71+
72+
### Adicionado
73+
74+
- **`companies.listV2()`** — listagem pela API v2 (`api.nfse.io/v2/companies`,
75+
contribuintes-v2), **cursor-based**: `{ limit (1–50, default 10),
76+
startingAfter, endingBefore }``{ data, hasMore }` (contrato provado ao
77+
vivo em 2026-07-14). Os itens seguem a projeção v2 (`CompanyResourceItem`)
78+
— shape diferente do `Company` v1 (sem campos de configuração NFS-e; com
79+
`stateTaxes`, `municipalTaxes`, `type`, `version`). `limit` fora de 1–50 é
80+
rejeitado client-side (a API aceitaria `limit: 0` devolvendo página vazia).
81+
Tipos novos: `CompanyV2ListOptions`, `CompanyV2ListResponse`.
82+
- Testes de contrato de paginação: mock espelha a rejeição da API a
83+
`pageIndex: 0` e trava a regressão — `listAll`/`listIterator` são testados
84+
iniciando em 1 e incrementando 1 → 2; suite equivalente para o contrato
85+
cursor do `listV2`.
86+
- Teste de alinhamento de tipos para os corpos de escrita de companies
87+
(`tests/types/company-write-alignment.test-d.ts`): pina os obrigatórios de
88+
`CreateCompanyResourceItem`/`UpdateCompanyResourceItem` (mesmo conjunto —
89+
evidência da semântica PUT) e a ausência de `email` no corpo; um sync de
90+
spec que mude o contrato quebra o `npm run test:types` em vez de driftar.
91+
892
## [5.1.0] - 2026-07-03
993

1094
> Correção do contrato de webhooks contra a API real, provado por sonda ao vivo
@@ -837,7 +921,8 @@ SDK JavaScript legado com API baseada em callbacks.
837921

838922
## Links
839923

840-
[Unreleased]: https://github.com/nfe/client-nodejs/compare/v5.1.0...HEAD
924+
[Unreleased]: https://github.com/nfe/client-nodejs/compare/v5.2.0...HEAD
925+
[5.2.0]: https://github.com/nfe/client-nodejs/compare/v5.1.0...v5.2.0
841926
[5.1.0]: https://github.com/nfe/client-nodejs/compare/v5.0.0...v5.1.0
842927
[5.0.0]: https://github.com/nfe/client-nodejs/releases/tag/v5.0.0
843928
[3.0.0]: https://github.com/nfe/client-nodejs/releases/tag/v3.0.0

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nfe-io",
3-
"version": "5.1.0",
3+
"version": "5.2.0",
44
"description": "Official NFE.io SDK for Node.js - TypeScript native with zero runtime dependencies",
55
"keywords": [
66
"nfe",
@@ -28,7 +28,7 @@
2828
"url": "git+https://github.com/nfe/client-nodejs.git"
2929
},
3030
"bugs": "https://github.com/nfe/client-nodejs/issues",
31-
"homepage": "https://nfe.io",
31+
"homepage": "https://nfe.io/docs/desenvolvedores/bibliotecas/node/",
3232
"engines": {
3333
"node": ">=22.0.0"
3434
},

0 commit comments

Comments
 (0)