Skip to content

Commit a37b3d5

Browse files
authored
feat: support additional webhooks (#81)
- Gracefully ignore accounting sync webhooks - Add missing subscription events - Add missing customer credit balance recovered event - Sorted event types
1 parent b36bb76 commit a37b3d5

File tree

2 files changed

+45
-23
lines changed

2 files changed

+45
-23
lines changed

packages/orb-sync-lib/src/orb-sync.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,19 @@ export class OrbSync {
110110
case 'data_exports.transfer_error': {
111111
break;
112112
}
113+
// Ignore accounting sync webhooks for now in the sync engine, given they just add unnecessary writes/load
114+
case 'customer.accounting_sync_failed':
115+
case 'customer.accounting_sync_succeeded':
116+
case 'credit_note.accounting_sync_failed':
117+
case 'credit_note.accounting_sync_succeeded':
118+
case 'invoice.accounting_sync_failed':
119+
case 'invoice.accounting_sync_succeeded': {
120+
break;
121+
}
113122
case 'customer.created':
114123
case 'customer.edited':
115124
case 'customer.credit_balance_depleted':
125+
case 'customer.credit_balance_recovered':
116126
case 'customer.credit_balance_dropped': {
117127
const webhook = parsedData as CustomerWebhook;
118128

@@ -131,7 +141,9 @@ export class OrbSync {
131141
await syncCustomers(this.postgresClient, [customer], new Date().toISOString());
132142
break;
133143
}
134-
144+
case 'subscription.cancellation_scheduled':
145+
case 'subscription.cancellation_unscheduled':
146+
case 'subscription.plan_change_scheduled':
135147
case 'subscription.created':
136148
case 'subscription.ended':
137149
case 'subscription.plan_changed':

packages/orb-sync-lib/src/types.ts

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,51 @@
11
import type { CreditNote, Customer, Invoice, Subscription } from 'orb-billing/resources';
22

33
export type OrbWebhookType =
4+
| 'billable_metric.edited'
5+
| 'credit_note.accounting_sync_failed'
6+
| 'credit_note.accounting_sync_succeeded'
7+
| 'credit_note.issued'
8+
| 'credit_note.marked_as_void'
9+
| 'customer.accounting_sync_failed'
10+
| 'customer.accounting_sync_succeeded'
11+
| 'customer.balance_transaction_created'
412
| 'customer.created'
513
| 'customer.credit_balance_depleted'
614
| 'customer.credit_balance_dropped'
15+
| 'customer.credit_balance_recovered'
716
| 'customer.edited'
8-
| 'subscription.created'
9-
| 'subscription.started'
10-
| 'subscription.edited'
11-
| 'subscription.fixed_fee_quantity_updated'
12-
| 'subscription.ended'
13-
| 'subscription.plan_changed'
14-
| 'subscription.usage_exceeded'
15-
| 'subscription.cost_exceeded'
16-
| 'subscription.plan_version_change_scheduled'
17-
| 'subscription.plan_version_changed'
17+
| 'data_exports.transfer_error'
18+
| 'data_exports.transfer_success'
19+
| 'invoice.accounting_sync_failed'
20+
| 'invoice.accounting_sync_succeeded'
21+
| 'invoice.edited'
1822
| 'invoice.invoice_date_elapsed'
1923
| 'invoice.issue_failed'
2024
| 'invoice.issued'
25+
| 'invoice.manually_marked_as_paid'
26+
| 'invoice.manually_marked_as_void'
2127
| 'invoice.payment_failed'
2228
| 'invoice.payment_processing'
2329
| 'invoice.payment_succeeded'
24-
| 'invoice.edited'
25-
| 'invoice.manually_marked_as_void'
26-
| 'invoice.manually_marked_as_paid'
27-
| 'invoice.undo_mark_as_paid'
28-
| 'invoice.sync_succeded'
2930
| 'invoice.sync_failed'
30-
| 'credit_note.issued'
31-
| 'credit_note.marked_as_void'
31+
| 'invoice.sync_succeded'
32+
| 'invoice.undo_mark_as_paid'
3233
| 'resource_event.test'
33-
| 'subscription.usage_exceeded'
34+
| 'subscription.cancellation_scheduled'
35+
| 'subscription.cancellation_unscheduled'
3436
| 'subscription.cost_exceeded'
35-
| 'data_exports.transfer_success'
36-
| 'data_exports.transfer_error'
37-
| 'customer.balance_transaction_created'
38-
| 'billable_metric.edited';
37+
| 'subscription.cost_exceeded'
38+
| 'subscription.created'
39+
| 'subscription.edited'
40+
| 'subscription.ended'
41+
| 'subscription.fixed_fee_quantity_updated'
42+
| 'subscription.plan_change_scheduled'
43+
| 'subscription.plan_changed'
44+
| 'subscription.plan_version_change_scheduled'
45+
| 'subscription.plan_version_changed'
46+
| 'subscription.started'
47+
| 'subscription.usage_exceeded'
48+
| 'subscription.usage_exceeded';
3949

4050
export type OrbWebhook = {
4151
// Unique to this WebhookEvent resource, and can be used for idempotency (process-once) purposes

0 commit comments

Comments
 (0)