Skip to content

billing.refunded Não existe como saber quando uma cobrança vira REFUNDED #22

Description

@Lone404

Pós abrir o PR #21 retomei mexer em meu site, e percebi um buraco esquisito.

PaymentStatus no checkout.ts lista REFUNDED como estado válido de cobrança (e o JSDoc da APICheckout confirma: "Billing status. Can be PENDING, EXPIRED, CANCELLED, PAID, REFUNDED").

Mas o WebhookEventType em webhook.ts só tem três:

PayoutFailed = 'payout.failed',
PayoutDone   = 'payout.done',
BillingPaid  = 'billing.paid',

Sem billing.refunded, sem billing.cancelled, sem billing.expired. Quem só consome webhook nunca fica sabendo que uma cobrança virou REFUNDED.

Pra quem vende digital com entrega imediata isso vira divida técnica. Cliente paga no cartão, pego o billing.paid, libero o produto na hora. Se o cara abrir disputa nos 90 dias da janela do cartão e a AbacatePay aprovar o estorno, o dinheiro sai do meu saldo e eu não recebo aviso nenhum (Se eu estiver errado me corrija, sem contar para o hook manual). A defesa que sobra é checkouts.get(id) em polling pelos 90 dias de cada cobrança, o que não escala.

A propósito, a #13 já terminava perguntando "não é possível fazer reembolso via API? Só via dashboard?". Fechou sem o lado de notificação ser resolvido.

Sugestão é adicionar pelo menos BillingRefunded, e idealmente BillingCancelled / BillingExpired também, com payload trazendo billing.id, status novo, motivo (chargeback / requested / etc), refundedAmount em cents e refundedAt. Toca em:

  • packages/types/types/v2/webhook.ts
  • packages/zod/src/v2/webhook.ts
  • packages/adapters/src/webhooks/dispatch.ts (novo handler onBillingRefunded)
  • adapters de framework (express / elysia / fastify / hono / supabase)

Se o lado server já estiver disparando esses eventos internamente e for só formalizar nos schemas + adapters, eu posso contribuir e mandar o PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions