Skip to content

fix(webhooks): CRUD account-scoped /v2/webhooks com envelope webHook#16

Merged
andrenfe merged 1 commit into
masterfrom
fix/account-webhooks-contract
Jul 10, 2026
Merged

fix(webhooks): CRUD account-scoped /v2/webhooks com envelope webHook#16
andrenfe merged 1 commit into
masterfrom
fix/account-webhooks-contract

Conversation

@andrenfe

Copy link
Copy Markdown
Member

Resumo

O CRUD de webhooks estava 100% quebrado contra a API real: as rotas company-scoped /v1/companies/{id}/webhooks retornam 404 (confirmado por sondas ao vivo em 3 contas, 2026-07-02/03). O contrato havia sido herdado por "parity with Node" de um contrato que o SDK Node alucinou. O contrato real é account-scoped: /v2/webhooks, com envelope { "webHook": {...} } obrigatório nos dois sentidos.

Espelha o client-nodejs v5.1.0 (superfície) — mas o contrato vem do spec OpenAPI (openapi/nf-servico-v1.yaml) + sonda ao vivo, nunca de SDK irmão.

Mudanças

  • Novos métodos account-scoped em client.webhooks: list_account_webhooks, create_account_webhook, retrieve_account_webhook, update_account_webhook, delete_account_webhook, delete_all_account_webhooks (destrutivo, nome propositalmente distinto), ping_account_webhook, fetch_event_types — envelope no request (create/update), unwrap nas respostas (fallback defensivo para corpo cru)
  • Novo Nfe::AccountWebhook (Data.define + RBS) com o shape real do fio; contentType/status como String ("json"/"Active") — desvio deliberado vs enum int do spec, pinado no teste de alinhamento
  • Teste de alinhamento YAML↔DTO (Psych): sync de spec que mude o contrato quebra a suíte em vez de driftar
  • Deprecated (YARD, comportamento inalterado): 6 métodos company-scoped, get_available_events/AVAILABLE_EVENTS (literais invoice.* não existem na API) e Nfe::WebhookSubscription
  • YARD dos cuidados reais: create pinga a uri e exige 2xx; secret 32–64 chars (ecoado só no create); PUT é substituição integral — update sem status desativa o webhook (confirmado ao vivo)
  • Docs (docs/webhooks.md + cookbook), samples, skill nfeio-ruby-sdk e CHANGELOG atualizados; OpenSpec sincronizado e arquivado

SemVer

Minor — tudo aditivo; nada que funciona hoje muda (o CRUD antigo já retornava 404 incondicional). Entrada em [Não lançado]; sem bump de versão neste PR (release único empacotará esta change + expand-service-invoice-dto).

Testes

  • rake completo (Docker ruby34): 671 examples, 0 failures · RuboCop limpo · Steep limpo · rbs validate ok · cobertura 98,35%
  • Smoke ao vivo contra api.nfe.io: 14/14 checks — create ecoa secret/retrieve omite, envelope nos dois sentidos, PUT integral, ping/delete 204, retrieve pós-delete 404, webhooks pré-existentes intactos e baseline restaurado

O CRUD company-scoped (/v1/companies/{id}/webhooks) retorna 404 na API
atual (sondas ao vivo, 3 contas, 2026-07-02/03); o contrato havia sido
herdado por paridade de uma alucinacao do SDK Node. Contrato real:
account-scoped /v2/webhooks, envelope webHook nos dois sentidos.

- Novos metodos: list/create/retrieve/update/delete_account_webhook,
  delete_all_account_webhooks (destrutivo, nome distinto),
  ping_account_webhook e fetch_event_types (46+ event types ao vivo)
- Novo value object Nfe::AccountWebhook (shape real do fio + RBS);
  contentType/status seguem o fio (String) e nao o enum int do spec
- Teste de alinhamento RSpec (Psych) amarrando o DTO ao schema de
  /v2/webhooks em openapi/nf-servico-v1.yaml
- Deprecated (YARD, sem mudanca de comportamento): metodos
  company-scoped, get_available_events/AVAILABLE_EVENTS (invoice.*
  nao existe) e Nfe::WebhookSubscription
- Docs, samples, skill nfeio-ruby-sdk e CHANGELOG atualizados
- OpenSpec: change fix-account-webhooks-contract sincronizada
  (entity-resources) e arquivada

Smoke ao vivo contra api.nfe.io: 14/14 checks (create ecoa secret,
retrieve omite, PUT integral, ping/delete 204, baseline preservado).
@andrenfe andrenfe self-assigned this Jul 10, 2026
@andrenfe andrenfe merged commit ed5cfd7 into master Jul 10, 2026
6 checks passed
@andrenfe andrenfe deleted the fix/account-webhooks-contract branch July 10, 2026 01:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant