Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ jobs:

strategy:
matrix:
node-version: [18.x, 20.x, 22.x]
node-version: [22.x, 24.x]

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
Expand All @@ -48,7 +48,7 @@ jobs:

- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: test-results-node-${{ matrix.node-version }}
path: |
Expand All @@ -62,12 +62,12 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: '20.x'
node-version: '24.x'
cache: 'npm'

- name: Install dependencies
Expand All @@ -82,7 +82,7 @@ jobs:
run: npm test -- --coverage --run

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v7
with:
files: ./coverage/coverage-final.json
flags: unittests
Expand All @@ -95,12 +95,12 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: '20.x'
node-version: '24.x'
cache: 'npm'

- name: Install dependencies
Expand All @@ -122,7 +122,7 @@ jobs:
test -f dist/index.d.ts || (echo "Types build missing" && exit 1)

- name: Upload build artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: dist
path: dist/
Expand All @@ -136,12 +136,12 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: '20.x'
node-version: '24.x'
cache: 'npm'

- name: Install dependencies
Expand All @@ -157,14 +157,14 @@ jobs:
run: npm run typecheck

- name: Upload generated types
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: openapi-generated-types
path: src/generated/

- name: Comment on PR with spec info
if: github.event_name == 'pull_request'
uses: actions/github-script@v7
uses: actions/github-script@v9
with:
script: |
const fs = require('fs');
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
ref: ${{ github.event.inputs.tag || github.ref }}

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: '20.x'
node-version: '24.x'
registry-url: 'https://registry.npmjs.org'
cache: 'npm'

Expand Down Expand Up @@ -98,7 +98,7 @@ jobs:

- name: Comment on related issues/PRs
if: github.event_name == 'release'
uses: actions/github-script@v7
uses: actions/github-script@v9
with:
script: |
const version = '${{ steps.package-version.outputs.version }}';
Expand Down
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,35 @@ Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/),
e este projeto adere ao [Versionamento Semântico](https://semver.org/lang/pt-BR/).

## [4.0.0] - 2026-06-12

### ⚠️ BREAKING CHANGE — Node.js >= 22

O único requisito novo é **Node.js >= 22** (Node 18 e 20 atingiram fim de vida em abr/2025 e abr/2026). **Não há nenhuma mudança de API** — todo código escrito para a v3 funciona sem alterações. Quem ainda precisa de Node 18/20 deve permanecer no `nfe-io@^3.2`. Veja [MIGRATION.md](MIGRATION.md#v3--v4).

### 🔒 Correções de Segurança

Zeradas todas as vulnerabilidades reportadas pelo Dependabot e pelo Code Scanning (CodeQL). Nenhuma afetava o pacote publicado (zero dependências de runtime) — todas estavam em ferramentas de build/teste e CI. Rastreamento completo em [#31](https://github.com/nfe/client-nodejs/issues/31).

- **vitest** (crítica, GHSA-5xrq-8626-4rwp): leitura/execução arbitrária de arquivos com o servidor do Vitest UI ativo — resolvida pelo upgrade para vitest 4
- **esbuild** (baixa, GHSA-g7r4-m6w7-qqqr): leitura arbitrária de arquivos no dev server em Windows — eliminada da árvore pela migração tsup → tsdown; o esbuild residual (via tsx) já usa a versão corrigida 0.28.1
- **CodeQL** (7 alertas, via [#32](https://github.com/nfe/client-nodejs/pull/32)): permissions mínimas do `GITHUB_TOKEN` no CI, remoção do script morto `scripts/download-openapi.ts` e remoção do código legado v2 (`lib/`)
- **Resultado**: `npm audit` reporta **0 vulnerabilidades** e security tab zerada

### 🔧 Modernização do Toolchain (sem impacto na API)

- **Build**: tsup → **tsdown** (Rolldown/Rust) — mesmo output dual ESM/CJS + declarações de tipos, target `node22`
- **Testes**: vitest 3.2.4 → **4.1.8** (+ `@vitest/ui`, `@vitest/coverage-v8`)
- **CI**: matriz de testes Node 22/24 (antes 18/20/22); actions atualizadas para majors compatíveis com Node 24 (`checkout@v6`, `setup-node@v6`, `upload-artifact@v7`, `github-script@v9`, `codecov@v7`) — runners do GitHub passam a executar actions em Node 24 a partir de 16/06/2026
- **Tipos**: `@types/node` ^20 → ^22
- **vitest.config.ts**: corrigida opção inexistente `testMatch` → `include`; thresholds de coverage no formato achatado do vitest

### 📦 Skill embarcada

- Skill renomeada de `nfeio-sdk` para **`nfeio-node-sdk`** — fixa a convenção cross-SDK (`<org>-<linguagem>-sdk`) antes da publicação no [skills.sh](https://skills.sh)
- Corrigido o path do bloco `agents.skills` no `package.json`, que apontava para diretório inexistente (`./skills/nfe-io-sdk`)
- Requisito documentado na skill atualizado para Node.js 22+

## [3.2.1] - 2026-06-11

### 🔒 Correção crítica de segurança — Validação de assinatura de webhook
Expand Down
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Official NFE.io SDK for Node.js -- TypeScript native client for Brazilian electr
```bash
npm run validate:spec # Validate OpenAPI YAML specs
npm run generate # Generate TypeScript types from OpenAPI specs into src/generated/
npm run build # Full pipeline: validate:spec -> generate -> clean -> typecheck -> tsup
npm run build # Full pipeline: validate:spec -> generate -> clean -> typecheck -> tsdown
npm run typecheck # TypeScript strict check (tsc --noEmit)
npm run lint # ESLint with auto-fix
npm run format # Prettier formatting
Expand Down Expand Up @@ -56,7 +56,7 @@ Specs live in `openapi/spec/*.yaml`. The generation script (`scripts/generate-ty

### Module Output

Dual format via tsup: ESM (`dist/index.js`) + CommonJS (`dist/index.cjs`) + type declarations (`dist/index.d.ts`). Target: Node.js 18+.
Dual format via tsdown (Rolldown): ESM (`dist/index.js`) + CommonJS (`dist/index.cjs`) + type declarations (`dist/index.d.ts`). Target: Node.js 22+.

## Code Style

Expand Down
19 changes: 19 additions & 0 deletions MIGRATION.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
# Guia de Migração

## v3 → v4

A v4.0.0 **não contém mudanças de API** — todo código escrito para a v3 funciona sem alterações.

O único requisito novo é **Node.js >= 22** (Node 18 e 20 atingiram fim de vida):

```bash
node --version # deve ser >= 22
npm install nfe-io@^4
```

Se você ainda precisa de Node 18/20, permaneça no `nfe-io@^3.2`.

Internamente, a v4 moderniza o toolchain de build (tsup → tsdown/Rolldown, vitest 4) e corrige alertas de segurança em dependências de desenvolvimento — nada disso afeta o código consumidor.

---

# Guia de Migração: v2 → v3

Este guia ajuda você a migrar do SDK NFE.io v2.x para v3.0.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
[![TypeScript](https://img.shields.io/badge/TypeScript-5.3-blue.svg)](https://www.typescriptlang.org/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**SDK Oficial NFE.io para Node.js 18+** - SDK TypeScript moderno para emissão de notas fiscais de serviço eletrônicas (NFS-e).
**SDK Oficial NFE.io para Node.js 22+** - SDK TypeScript moderno para emissão de notas fiscais de serviço eletrônicas (NFS-e).

> ✨ **Versão 3.0** - Reescrita completa com TypeScript, zero dependências em runtime e API moderna async/await.

Expand Down Expand Up @@ -1071,7 +1071,7 @@ O processo de build valida automaticamente as specs e gera tipos antes da compil

```bash
npm run build
# → Executa: validate:spec → generate → typecheck → tsup
# → Executa: validate:spec → generate → typecheck → tsdown
```

**Nota**: Arquivos gerados não devem ser editados manualmente. Edite as specs OpenAPI e regenere.
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.2.1
4.0.0
Loading
Loading