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.
Pós abrir o PR #21 retomei mexer em meu site, e percebi um buraco esquisito.
PaymentStatusno checkout.ts listaREFUNDEDcomo estado válido de cobrança (e o JSDoc daAPICheckoutconfirma: "Billing status. Can bePENDING,EXPIRED,CANCELLED,PAID,REFUNDED").Mas o
WebhookEventTypeem webhook.ts só tem três:Sem
billing.refunded, sembilling.cancelled, sembilling.expired. Quem só consome webhook nunca fica sabendo que uma cobrança virouREFUNDED.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 idealmenteBillingCancelled/BillingExpiredtambém, com payload trazendobilling.id,statusnovo, motivo (chargeback/requested/ etc),refundedAmountem cents erefundedAt. Toca em:packages/types/types/v2/webhook.tspackages/zod/src/v2/webhook.tspackages/adapters/src/webhooks/dispatch.ts(novo handleronBillingRefunded)Se o lado server já estiver disparando esses eventos internamente e for só formalizar nos schemas + adapters, eu posso contribuir e mandar o PR.