v0.2.0
0.2.0 (2026-08-08)
⚠ BREAKING CHANGES
- types: WebhookEvent payload fields require narrowing on event.type; un-narrowed access no longer compiles.
- the provider response body moved from
RevenueError.causeto a non-enumerableRevenueError.responseBody;causenow carries only the underlying JS error. Non-enumerability hides the body fromconsole.error,util.inspect,JSON.stringifyand Sentry, whileerror.responseBodyremains a deliberate read. It is not redacted: the content is customer PII, which a secrets list cannot enumerate.
Features
- add customers.create and customers.update (9ae21ae)
- add license keys (#5) (5b8bb65)
- add pay-what-you-want checkouts and a customerMetadata capability (6e57384)
- add subscription pause and resume (#2) (775d549)
- add the orders resource (#6) (580cdeb)
- add usage-based billing (#4) (b77bf17)
- add webhook event granularity, dedupe keys and checkout expiry (d675cfa)
- support custom provider adapters (4c37444)
- testing: add signWebhook for webhook handler tests (c4603c8)
Bug Fixes
- client: retry rate limits without Retry-After and honor aborts (a17348f)
- dodo-payments: redact the license key from error messages (e2992da)
- http: preserve baseUrl path prefixes (cbe1316)
- lemon-squeezy: dedupe first-payment webhooks, filter drafts, guard endTrial (41d6743)
- polar: map license activation-limit 403 to validation, redact the key (9d8b8f7)
- stripe: refuse plan changes when the subscription has no items (b0b1873)
Code Refactoring
- types: model WebhookEvent as a discriminated union (0af4d12)