Conversation
…ook) - CertificateValidator.validate() para de fabricar metadata e reportar validade falsa; vira pré-flight só de formato (verificação real é server-side) - updateConfig() agora invalida TODOS os resources/HTTP clients via resetCaches() (antes deixava productInvoices/stateTaxes/lookups/query stale) - README: header de webhook x-nfe-signature -> x-hub-signature (HMAC-SHA1) OpenSpec change: fix-repo-bugs (11/11 tasks)
…placeholders mortos
- generate-types.ts: skip de spec não-allowlistado falha o build (antes do banner);
os 5 Swagger 2.0 legados ficam num KNOWN_SKIPPED (não quebram) — review B1
- discoverSpecs aceita .json (contribuintes-v2.json deixaria de ser ignorado) — review B2
- índice gerado não emite mais placeholders { [key]: unknown } (tipos públicos vivem
em core/types.ts) — review 0B/Task 1.3
- testes de geração alinhados ao allowlist + tipos públicos repontados p/ core/types.ts
OpenSpec: sync-openapi-specs-from-docs (Track A / Phase 1 parcial)
- serviceInvoicesRtc: NFS-e leiaute RTC (grupo ibsCbs) via api.nfe.io; create/createAndWait (polling) + downloadCancellationXml; path sem /v1 - productInvoicesRtc: NF-e/NFC-e leiaute RTC via api.nfse.io; create webhook-driven (espelha product-invoices, sem polling) - tipos NFSeRtcRequest / ProductInvoiceRtcRequest (schemas nomeados das specs RTC) - specs RTC sincronizadas em openapi/spec/ + geradas; proveniência em SOURCES.json - getters lazy no NfeClient (+ resetCaches), exports no barrel, 8 testes novos OpenSpec: add-rtc-invoice-emission (19/19 tasks)
…m major) - contribuintes-v2.json adotado na geração (10/15); tipos de empresa/cert/endereço - Company enriquecido aditivamente (& Partial<Omit<CompanyResourceItem,...>> + índice mantido): campos reais opcionais, federalTaxNumber segue number, create() intacto - novos tipos opt-in: CompanyResourceItem/V1, CreateCompanyResourceItem, UpdateCompanyResourceItem, CertificateMetadataResource, CompanyAddress - guard de tipo executável: npm run test:types (vitest typecheck) — company.test-d.ts - SOURCES.json + CHANGELOG atualizados - consolidação de enums (TaxRegime/SpecialTaxRegime) deferida (risco de quebra) OpenSpec: sync-openapi-specs-from-docs (Phase 2 / Track B+C)
…o vivo - WebhooksResource estendido (mesma resource, não separada): list/create/retrieve/ update/delete de conta, pingAccountWebhook, e deleteAllAccountWebhooks (nome distinto + JSDoc de destrutivo) — company-scoped inalterado - fetchEventTypes() (GET /v2/webhooks/eventTypes, união aberta); getAvailableEvents() marcado @deprecated (lista hardcoded fazia drift) - +6 testes OpenSpec: add-missing-resources (Phase 1 / P1)
- nfe.municipalTaxes (api.nfse.io): CRUD de inscrições municipais (espelha stateTaxes),
updatePrefecture (PATCH .../updateprefecture) e getSeries (.../series/{serie})
- HTTP client: novo verbo patch() com paridade de retry/timeout/erro (+2 testes)
- tipos MunicipalTax/CreateMunicipalTaxData/UpdateMunicipalTaxData (contribuintes-v2)
- getter lazy + resetCaches + barrel; 7 testes do resource
OpenSpec: add-missing-resources (Phase 2 / P3)
- nfe.consumerInvoices (api.nfse.io): create webhook-driven, list, retrieve, cancel, getItems, getEvents, downloadPdf/Xml/RejectionXml, disable (inutilização) - distinto do consumerInvoiceQuery (consulta de cupom, read-only) - tipos do nf-consumidor-v2 (ConsumerInvoiceRequest/InvoiceResource/DisablementResource) - getter lazy + resetCaches + barrel; 6 testes OpenSpec: add-missing-resources (Phase 3 / P4)
- nfe.certificates (api.nfse.io / contribuintes-v2): list, getByThumbprint/ deleteByThumbprint (v2) + variantes v1 - recurso DEDICADO (não estende companies) porque o cert API do contribuintes-v2 está em host diferente (api.nfse.io) do companies.uploadCertificate (api.nfe.io) — desvio de design documentado no spec - tipos CertificateMetadataResource/CertificatesMetadataResource; +4 testes OpenSpec: add-missing-resources (Phase 4 / P2)
…d + switch-authorizer
- HTTP client: verbo head() (corpo vazio ok); +2 testes
- companies.exists(id) via HEAD /v2/companies/{id} (api.nfse.io, client v2 opcional; 404->false)
- NotificationsResource (api.nfe.io): list/retrieve/delete/sendEmail
- serviceInvoices.retrieveByExternalId (GET .../serviceinvoices/external/{id})
- stateTaxes.switchAuthorizer (POST .../switch-authorizer)
- getters + resetCaches + barrel; +7 testes. Conclui add-missing (P6 batch deferido)
OpenSpec: add-missing-resources (Phase 5 / P5+P7) — change completa
Correções descobertas testando contra a API ao vivo:
- addresses.lookupByPostalCode: desempacota o envelope { address } e retorna
um Address único (antes retornava o envelope tipado como { addresses: [] },
então result.addresses[0] vinha undefined).
- addresses.search/lookupByTerm removidos: os endpoints (/v2/addresses e
/v2/addresses/{term}) respondem 404 no host real — nunca funcionaram.
AddressSearchOptions removido; AddressLookupResponse agora descreve o
envelope real { address: Address }.
- serviceInvoices.cancel: cancelamento e assincrono (202 + Location); passa a
retornar a uniao discriminada CancelInvoiceResponse, espelhando create()
(antes devolvia o stub de polling tipado como ServiceInvoiceData).
- serviceInvoices.cancelAndWait: novo helper que faz polling ate o
cancelamento concluir. Tipos exportados: CreateInvoiceResponse,
CancelInvoiceResponse.
- Testes de integracao corrigidos para os shapes reais; a suite de
service-invoices auto-pula quando a empresa nao tem inscricao municipal.
Validado ao vivo: addresses 6/6, service-invoices 13/13.
Atualiza o status das checkboxes nas tasks.md ja versionadas: - generate-sdk-from-openapi: 89/89 (merge strategy + checklist final) - implement-service-invoices: 157/157 (emissao validada ao vivo 13/13) - implement-address-lookup: 45/45 (lookup live verificado pos-fix) As changes novas (fix-address-lookup-api-mismatch, fix-service-invoice-cancel-async) seguem fora do git por .gitignore.
Primeira release de funcionalidades desde a v3 (a v4 foi so o bump de Node 22). - package.json: v4.0.0 -> 5.0.0 (corrige prefixo "v" malformado) - Sincroniza constantes de versao que estavam stale em 3.0.0-beta.1 (PACKAGE_VERSION, VERSION); getRuntimeInfo() passa a derivar de VERSION. - CHANGELOG: secao [5.0.0] com BREAKING CHANGES promovidos ao topo. - MIGRATION.md: guia v4 -> v5 (lookupByPostalCode, search/lookupByTerm removidos, cancel() discriminado + cancelAndWait, CertificateValidator). - README: v4 -> v5 + blurb de novidades.
Move 4 changes 100% completas para openspec/changes/archive/ (gitignored): - implement-companies-resource (121/121) - generate-sdk-from-openapi (89/89) - implement-address-lookup (45/45) - implement-service-invoices (157/157) Os arquivos seguem em disco no archive; deixam de ser rastreados, alinhando com a politica de manter artefatos openspec fora do git. Sem sync de specs (deltas preservados no archive; evita gravar address-lookup stale).
Smoke sweep read-only de toda a SDK contra a API real revelou 3 recursos
(novos na v5) inutilizaveis; todos verificados ao vivo apos o fix:
- taxCodes.*: usava o cliente CT-e (chave de dados) -> 403 com dataApiKey
separada. Passa a usar a chave principal contra api.nfse.io (200).
- consumerInvoices: (1) list() omitia o param obrigatorio `environment`
(-> 400); agora exige `{ environment }` e os reads aceitam env opcional.
(2) usava chave de dados (-> 403); passa a usar a chave principal.
- webhooks de conta: caminho `/v1/v2/webhooks` (duplo prefixo) -> 404.
Cliente dedicado em api.nfe.io/v2; paths sem `/v2`. Desempacota os
envelopes {webHooks} e {eventTypes}.
Cada fix isolado por recurso (sem inverter resolveDataApiKey global).
Exporta CreateInvoiceResponse/CancelInvoiceResponse ja na v5;
ConsumerInvoiceListOptions/Environment. Suite 682 verde; lint 0 erros.
📋 OpenAPI Spec Validation✅ All specs validated and types generated successfully Specs processed:
Generated types available as artifact in |
A skill (publicada via package.json files) e os exemplos estavam com API antiga: - skill Resource Map: remove addresses.search/lookupByTerm (removidos); adiciona serviceInvoicesRtc, productInvoicesRtc, consumerInvoices, municipalTaxes, certificates, notifications e webhooks de conta; serviceInvoices ganha cancelAndWait/retrieveByExternalId; companies.exists; stateTaxes.switchAuthorizer. - skill data-services ref: addresses agora e so lookupByPostalCode -> Address (envelope desempacotado); tipo Address corrigido (postalCode com hifen, numberMin/Max opcionais, country alpha-3). - examples/service-invoice-complete.js: cancelamento usa cancelAndWait() (cancel() agora retorna uniao discriminada).
📋 OpenAPI Spec Validation✅ All specs validated and types generated successfully Specs processed:
Generated types available as artifact in |
Exemplos runnable (examples/) e reference doc (skill publicada) para os recursos introduzidos na v5: - examples: rtc-invoices, consumer-invoices, municipal-taxes, certificates, notifications, account-webhooks (assinaturas conferidas no código). - examples/README: título v3 -> v5 + seção "Novos na v5". - skills: nova reference rtc-nfce-and-account-resources.md (assinaturas RTC, NFC-e c/ environment, municipal, certificates, notifications, webhooks de conta, cancelAndWait/exists/switchAuthorizer) + registro no SKILL.md.
📋 OpenAPI Spec Validation✅ All specs validated and types generated successfully Specs processed:
Generated types available as artifact in |
O CI falhava em coverage (branches 76.55% < 80%) porque o codigo novo da v5 adicionou ramos sem teste. Adiciona: - service-invoices-rtc: createAndWait (immediate/async/IssueFailed) + retrieve - service-invoices: cancelAndWait (async/immediate/CancelFailed) - consumer-invoices: forward de environment nos reads/downloads + filtros do list Branches: 76.55% -> 80.74%. 692 testes verdes.
📋 OpenAPI Spec Validation✅ All specs validated and types generated successfully Specs processed:
Generated types available as artifact in |
…client-ruby) Conjunto de documentacao no padrao do client-ruby/docs, adaptado ao Node/v5 e pronto pra colar no nfeio-docs (Docusaurus): - 9 guias: getting-started, configuration, async-and-polling, multi-host-routing, pagination, downloads, webhooks, errors, rtc-emission. - README (indice, slug /desenvolvedores/bibliotecas/node) + _category_.json. - 19 recursos (cookbook) em docs/recursos/: service/product/consumer invoices, companies, municipal/state taxes, certificates, notifications, webhooks, rtc, addresses, lookups CNPJ/CPF, people PJ/PF, tax-codes, tax-calculation, CT-e, inbound, e as consultas por chave. Frontmatter rico, admonitions, tabelas de metodos e exemplos em TypeScript; API conferida no codigo da v5 (uniao discriminada, cancelAndWait, environment na NFC-e, multi-host/chave). Links internos validados.
📋 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.
v5.0.0 — primeira release de funcionalidades desde a v3
A v4 foi apenas o bump de runtime (Node 22), sem mudanças de API. A v5 reúne os novos recursos e correções de contrato validadas contra a API ao vivo.
✨ Novidades
serviceInvoicesRtc,productInvoicesRtcconsumerInvoicesmunicipalTaxescertificatesnotificationsfetchEventTypes()companies.exists(),serviceInvoices.retrieveByExternalId(),serviceInvoices.cancelAndWait(),stateTaxes.switchAuthorizer()Companyenriquecido com campos do spec (opcionais); verbos HTTPpatch/headaddresses.lookupByPostalCode()retorna umAddress(era envelope{ addresses: [] })addresses.search()/lookupByTerm()removidos (endpoints inexistentes / 404)serviceInvoices.cancel()retorna união discriminadaCancelInvoiceResponse(cancelamento é assíncrono) + novocancelAndWait()CertificateValidator.validate()não fabrica maismetadata🐛 Corrigidos via smoke test ao vivo de toda a SDK
taxCodes.*usava a chave de dados → 403; agora usa a chave principalconsumerInvoices.list()exigeenvironment(obrigatório pela API) + chave principalwebhooksde conta montavam/v1/v2/webhooks→ 404; cliente dedicado emapi.nfe.io/v2+ unwrap dos envelopes✅ Verificação
Migração: MIGRATION.md#v4--v5