AbacatePay / AbacatePay/ecosystem

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

オープン
#22 コメント 1 件 リアクション 1 件 担当者 0 名 GitHub で見る
主要言語
TypeScript
スター
8
フォーク
5
PR マージ指標
30日以内にマージされた PR はありません

説明

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

`PaymentStatus` no [checkout.ts](https://github.com/AbacatePay/ecosystem/blob/main/packages/types/types/v2/entities/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](https://github.com/AbacatePay/ecosystem/blob/main/packages/types/types/v2/webhook.ts) só tem três:

```ts
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.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。