@fantastic.dev/better-stripe 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/MIGRATION.md +135 -0
  3. package/README.md +23 -2
  4. package/dist/client/billing/checkout.d.ts.map +1 -1
  5. package/dist/client/billing/checkout.js +22 -8
  6. package/dist/client/billing/checkout.js.map +1 -1
  7. package/dist/client/billing/subscriptionRouting.d.ts +24 -0
  8. package/dist/client/billing/subscriptionRouting.d.ts.map +1 -0
  9. package/dist/client/billing/subscriptionRouting.js +19 -0
  10. package/dist/client/billing/subscriptionRouting.js.map +1 -0
  11. package/dist/client/billing/subscriptions.d.ts +6 -6
  12. package/dist/client/billing/subscriptions.d.ts.map +1 -1
  13. package/dist/client/billing/subscriptions.js +31 -12
  14. package/dist/client/billing/subscriptions.js.map +1 -1
  15. package/dist/client/connect/disputes.js.map +1 -1
  16. package/dist/client/constants.js +1 -1
  17. package/dist/client/core/accountLinks.d.ts +1 -0
  18. package/dist/client/core/accountLinks.d.ts.map +1 -1
  19. package/dist/client/core/accountLinks.js +0 -6
  20. package/dist/client/core/accountLinks.js.map +1 -1
  21. package/dist/client/core/accountStatus.d.ts.map +1 -1
  22. package/dist/client/core/accountStatus.js +23 -8
  23. package/dist/client/core/accountStatus.js.map +1 -1
  24. package/dist/client/index.d.ts +5 -2
  25. package/dist/client/index.d.ts.map +1 -1
  26. package/dist/client/index.js.map +1 -1
  27. package/dist/client/types/documents.d.ts +1 -0
  28. package/dist/client/types/documents.d.ts.map +1 -1
  29. package/dist/client/types/events.d.ts +2 -1
  30. package/dist/client/types/events.d.ts.map +1 -1
  31. package/dist/client/types/options.d.ts +7 -0
  32. package/dist/client/types/options.d.ts.map +1 -1
  33. package/dist/client/utils/stripeDashboardUrl.d.ts.map +1 -1
  34. package/dist/client/utils/webhookEndpoints.d.ts.map +1 -1
  35. package/dist/client/webhooks/handler.d.ts.map +1 -1
  36. package/dist/client/webhooks/handler.js +35 -1
  37. package/dist/client/webhooks/handler.js.map +1 -1
  38. package/dist/client/webhooks/hooks.d.ts +1 -1
  39. package/dist/client/webhooks/hooks.d.ts.map +1 -1
  40. package/dist/client/webhooks/hooks.js +5 -1
  41. package/dist/client/webhooks/hooks.js.map +1 -1
  42. package/dist/client/webhooks/processors.d.ts.map +1 -1
  43. package/dist/client/webhooks/processors.js +12 -2
  44. package/dist/client/webhooks/processors.js.map +1 -1
  45. package/dist/client/webhooks/v2.d.ts.map +1 -1
  46. package/dist/client/webhooks/v2.js +11 -3
  47. package/dist/client/webhooks/v2.js.map +1 -1
  48. package/dist/component/_generated/component.d.ts +8 -0
  49. package/dist/component/_generated/component.d.ts.map +1 -1
  50. package/dist/component/_generated/server.d.ts +7 -1
  51. package/dist/component/_generated/server.d.ts.map +1 -1
  52. package/dist/component/_generated/server.js +2 -1
  53. package/dist/component/_generated/server.js.map +1 -1
  54. package/dist/component/billing/mutations.d.ts +29 -28
  55. package/dist/component/billing/mutations.d.ts.map +1 -1
  56. package/dist/component/billing/mutations.js +1 -0
  57. package/dist/component/billing/mutations.js.map +1 -1
  58. package/dist/component/billing/queries.d.ts +138 -131
  59. package/dist/component/billing/queries.d.ts.map +1 -1
  60. package/dist/component/billing/schema.d.ts +67 -65
  61. package/dist/component/billing/schema.d.ts.map +1 -1
  62. package/dist/component/billing/validators.d.ts +94 -91
  63. package/dist/component/billing/validators.d.ts.map +1 -1
  64. package/dist/component/billing/validators.js +1 -0
  65. package/dist/component/billing/validators.js.map +1 -1
  66. package/dist/component/connect/mutations.d.ts +37 -37
  67. package/dist/component/connect/queries.d.ts +115 -115
  68. package/dist/component/connect/queries.d.ts.map +1 -1
  69. package/dist/component/connect/queries.js +34 -71
  70. package/dist/component/connect/queries.js.map +1 -1
  71. package/dist/component/connect/schema.d.ts +73 -73
  72. package/dist/component/connect/validators.d.ts +119 -119
  73. package/dist/component/connect/validators.d.ts.map +1 -1
  74. package/dist/component/convex.config.d.ts +1 -0
  75. package/dist/component/convex.config.d.ts.map +1 -1
  76. package/dist/component/convex.config.js +2 -1
  77. package/dist/component/convex.config.js.map +1 -1
  78. package/dist/component/core/mutations.d.ts +12 -12
  79. package/dist/component/core/queries.d.ts +34 -34
  80. package/dist/component/core/schema.d.ts +11 -11
  81. package/dist/component/core/validators.d.ts +14 -14
  82. package/dist/component/core/validators.d.ts.map +1 -1
  83. package/dist/component/lib/fees.d.ts +12 -12
  84. package/dist/component/lib/fees.d.ts.map +1 -1
  85. package/dist/component/lib/fees.js +1 -1
  86. package/dist/component/lib/reversals.js.map +1 -1
  87. package/dist/component/products/mutations.d.ts +7 -7
  88. package/dist/component/products/queries.d.ts +33 -33
  89. package/dist/component/products/schema.d.ts +15 -15
  90. package/dist/component/products/validators.d.ts +16 -16
  91. package/dist/component/products/validators.d.ts.map +1 -1
  92. package/dist/component/schema.d.ts +173 -171
  93. package/dist/component/schema.d.ts.map +1 -1
  94. package/dist/component/webhooks/mutations.d.ts +3 -3
  95. package/dist/component/webhooks/queries.d.ts +12 -12
  96. package/dist/component/webhooks/schema.d.ts +7 -7
  97. package/dist/component/webhooks/validators.d.ts +10 -10
  98. package/dist/component/webhooks/validators.d.ts.map +1 -1
  99. package/dist/react/components/AccountCreateCard.js.map +1 -1
  100. package/dist/react/components/BuyerBillingView.js +1 -1
  101. package/dist/react/components/CheckoutSessionProviderWithKey.d.ts +1 -1
  102. package/dist/react/components/DisputeDetail.js +1 -1
  103. package/dist/react/components/DisputesList.js +1 -1
  104. package/dist/react/components/EarningsSummary.js +1 -1
  105. package/dist/react/components/EmbeddedCheckout.d.ts.map +1 -1
  106. package/dist/react/components/EmbeddedCheckout.js +1 -1
  107. package/dist/react/components/EmbeddedCheckout.js.map +1 -1
  108. package/dist/react/components/PayoutSchedule.js +1 -1
  109. package/dist/react/components/SplitBreakdown.js +1 -1
  110. package/dist/react/components/StripeProvider.d.ts +1 -1
  111. package/dist/react/components/StripeProviderWithKey.d.ts +1 -1
  112. package/dist/react/hooks/useAccount.d.ts.map +1 -1
  113. package/dist/react/hooks/useAccountOnboarding.d.ts.map +1 -1
  114. package/dist/react/hooks/useCheckout.d.ts.map +1 -1
  115. package/dist/react/hooks/useDisputeWithCountdown.d.ts.map +1 -1
  116. package/dist/react/hooks/useDisputes.d.ts.map +1 -1
  117. package/dist/react/hooks/useEarnings.d.ts.map +1 -1
  118. package/dist/react/hooks/useInvoices.d.ts.map +1 -1
  119. package/dist/react/hooks/usePaymentMethodActions.js.map +1 -1
  120. package/dist/react/hooks/usePaymentMethods.d.ts.map +1 -1
  121. package/dist/react/hooks/usePrices.d.ts.map +1 -1
  122. package/dist/react/hooks/useProducts.d.ts.map +1 -1
  123. package/dist/react/hooks/useSplitBreakdown.d.ts.map +1 -1
  124. package/dist/react/hooks/useSubscription.d.ts.map +1 -1
  125. package/dist/react/hooks/useSubscriptions.d.ts.map +1 -1
  126. package/dist/react/lib/stripe-element-styles.d.ts.map +1 -1
  127. package/dist/react/lib/stripe-element-styles.js.map +1 -1
  128. package/package.json +25 -23
  129. package/src/client/billing/checkout.test.ts +62 -14
  130. package/src/client/billing/checkout.ts +26 -10
  131. package/src/client/billing/subscriptionRouting.ts +25 -0
  132. package/src/client/billing/subscriptions.test.ts +90 -28
  133. package/src/client/billing/subscriptions.ts +53 -18
  134. package/src/client/constants.ts +1 -1
  135. package/src/client/core/accountLinks.test.ts +20 -13
  136. package/src/client/core/accountLinks.ts +2 -10
  137. package/src/client/core/accountStatus.test.ts +67 -0
  138. package/src/client/core/accountStatus.ts +30 -13
  139. package/src/client/helpers.test.ts +2 -2
  140. package/src/client/index.ts +49 -44
  141. package/src/client/stripe-version.test.ts +47 -0
  142. package/src/client/types/documents.ts +1 -0
  143. package/src/client/types/events.ts +2 -1
  144. package/src/client/types/options.ts +7 -0
  145. package/src/client/webhooks/handler.ts +38 -1
  146. package/src/client/webhooks/hooks.ts +3 -0
  147. package/src/client/webhooks/processors.test.ts +201 -40
  148. package/src/client/webhooks/processors.ts +21 -17
  149. package/src/client/webhooks/retry.integration.test.ts +196 -0
  150. package/src/client/webhooks/v2.test.ts +36 -0
  151. package/src/client/webhooks/v2.ts +14 -4
  152. package/src/component/_generated/component.ts +15 -28
  153. package/src/component/_generated/server.ts +9 -2
  154. package/src/component/billing/mutations.ts +1 -0
  155. package/src/component/billing/validators.ts +1 -0
  156. package/src/component/config-queries.test.ts +8 -4
  157. package/src/component/connect/queries.ts +31 -66
  158. package/src/component/convex.config.ts +2 -1
  159. package/src/component/earnings-totals.test.ts +27 -1
  160. package/src/component/lib/fees.ts +1 -1
  161. package/src/react/components/EmbeddedCheckout.render.test.tsx +57 -0
  162. package/src/react/components/EmbeddedCheckout.tsx +1 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,66 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.6.0](https://github.com/FantasticDevHQ/better-stripe/compare/v0.5.0...v0.6.0) (2026-10-12)
4
+
5
+
6
+ ### ⚠ BREAKING CHANGES
7
+
8
+ * the package name changes to @fantastic.dev/better-stripe; @getdojo/better-stripe receives no further releases.
9
+
10
+ ### Features
11
+
12
+ * complete Stripe Endive compatibility and release 0.5.0 ([#126](https://github.com/FantasticDevHQ/better-stripe/issues/126)) ([135695f](https://github.com/FantasticDevHQ/better-stripe/commit/135695f51906ea156a36dbe8d0d43cf1d99e5fc1))
13
+ * publish as [@fantastic](https://github.com/fantastic).dev/better-stripe via Release Please and trusted publishing (BTS-114) ([#120](https://github.com/FantasticDevHQ/better-stripe/issues/120)) ([7451eeb](https://github.com/FantasticDevHQ/better-stripe/commit/7451eeb514b09a09656355c74c4bec083e1ddce7))
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * repair example checkout billing and seller flows ([#125](https://github.com/FantasticDevHQ/better-stripe/issues/125)) ([5911fb8](https://github.com/FantasticDevHQ/better-stripe/commit/5911fb8d8bc585fab62fe48e58e1e964047b8fd9))
19
+
20
+
21
+ ### Maintenance
22
+
23
+ * **deps:** update dependencies to latest (BTS-115) ([#122](https://github.com/FantasticDevHQ/better-stripe/issues/122)) ([a7e4161](https://github.com/FantasticDevHQ/better-stripe/commit/a7e416179d20afdd2356668cbd4482e2e3fa4eff))
24
+
25
+
26
+ ### Continuous Integration
27
+
28
+ * **release:** open release PRs with the org release GitHub App ([#124](https://github.com/FantasticDevHQ/better-stripe/issues/124)) ([3c94f2e](https://github.com/FantasticDevHQ/better-stripe/commit/3c94f2ef317f939ac039c261f9c148e6b1f14a56))
29
+
30
+ ## 0.5.0
31
+
32
+ ### Features
33
+
34
+ - Incorporate Dojo's `retryOnHookError` webhook patch upstream. Selected,
35
+ signature-verified V1 `onEvent`/event hooks must succeed before acknowledgment;
36
+ failed hooks and unavailable ledger writes return 500, in-flight deliveries
37
+ return 503, and successful redelivery deduplicates. The default remains
38
+ best-effort. Add regression coverage using real SDK signatures and the real
39
+ Convex component ledger, including stale-reservation recovery.
40
+
41
+ ### Bug Fixes
42
+
43
+ - Complete support for Stripe API **`2026-09-30.endive`** with stripe-node
44
+ **23.0.0** (already pinned in the 0.4.0 checkout). Verify both client factories'
45
+ outgoing version headers against the typed single-source API constant.
46
+ - Preserve verified V2 notification context when retrieving accounts; accept
47
+ related-object pointers without an id and resolve accounts from their URL.
48
+ - Map Endive `rejected`/`restricted` capabilities to `restricted` and pending
49
+ capabilities to `in_progress`, including nested Stripe balance capabilities.
50
+ - Remount embedded Checkout when its key/client secret changes, using React
51
+ Stripe.js 7's current `createEmbeddedCheckoutPage` integration.
52
+ - Deprecate the retained, ignored V2 account-link `configurations` option and
53
+ remove its obsolete internal use.
54
+
55
+ ### Migration
56
+
57
+ See [MIGRATION.md](MIGRATION.md) for removing the Dojo pnpm patch, upgrading
58
+ 0.2.0 webhook wiring, billing-anchor/payment-method request changes, and
59
+ **separate consumer-controlled webhook destination upgrades**. The public
60
+ `V2ThinEvent.related_object.id` is now optional; consumers must guard it.
61
+ No account defaults, event destinations, DNS, or production deployments are
62
+ changed by this release.
63
+
3
64
  ## 0.4.0
4
65
 
5
66
  **Renamed to `@fantastic.dev/better-stripe`.** This is the first release under the new name, published from `FantasticDevHQ/better-stripe` through npm trusted publishing with provenance. `@getdojo/better-stripe` is deprecated and gets no further releases. To migrate, replace `@getdojo/better-stripe` with `@fantastic.dev/better-stripe` in `package.json`, in imports and in `convex.config.ts`, then run `npx convex dev` to regenerate `_generated/`. The API is unchanged by the rename.
package/MIGRATION.md ADDED
@@ -0,0 +1,135 @@
1
+ # Migrating to 0.5.0 and Stripe Endive
2
+
3
+ ## Package and runtime
4
+
5
+ Install `@fantastic.dev/better-stripe@0.5.0`. The old
6
+ `@getdojo/better-stripe` name is deprecated. Replace imports and the component
7
+ config import with the new name, retaining your existing component instance
8
+ name (for example `betterStripe`) so its stored data remains attached. Run
9
+ `npx convex dev` against your development deployment to regenerate bindings.
10
+ Node.js 20 or newer is required by stripe-node 23.
11
+
12
+ The package depends on `stripe ~23.0.0`, whose supported API is exactly
13
+ `2026-09-30.endive`. The typed `STRIPE_API_VERSION` constant in
14
+ `src/client/constants.ts` pins app clients, component actions, and webhook
15
+ resource refreshes. This SDK and pin were already present in the 0.4.0 checkout;
16
+ 0.5.0 adds fulfillment retries and completes the V2/React compatibility fixes.
17
+ Leave `stripeApiVersion` unset to use this pin. The legacy string override is
18
+ retained for compatibility, but overriding it does not change the SDK's types
19
+ or convert webhook payloads and can make requests inconsistent with them.
20
+
21
+ ## Remove Dojo's consumer patch
22
+
23
+ Remove the `@getdojo/better-stripe@0.2.0` entry from pnpm's
24
+ `patchedDependencies` and delete `patches/@getdojo__better-stripe@0.2.0.patch`.
25
+ Update the dependency/imports and regenerate the lockfile. The upstream
26
+ `RegisterRoutesConfig.retryOnHookError` has the same signature and V1 semantics
27
+ as that patch. Dojo can keep its existing selector:
28
+
29
+ ```ts
30
+ retryOnHookError: (event) => {
31
+ if (event.type !== "checkout.session.completed" || !("data" in event)) {
32
+ return false;
33
+ }
34
+ const metadata = (event.data.object as {
35
+ metadata?: Record<string, string>;
36
+ }).metadata;
37
+ return (
38
+ (metadata?.purchaseType ?? metadata?.purchase_type) === "communityMembership" &&
39
+ metadata?.dojoMembershipFulfillment === "1"
40
+ );
41
+ },
42
+ ```
43
+
44
+ For selected **verified V1 events**, component processing commits first;
45
+ `onEvent` and the matching `events[type]` hook then run before the event is marked
46
+ processed. A hook failure records `failed` and returns HTTP 500. A concurrent
47
+ delivery returns 503; ledger reservation/completion failures return 500. Failed
48
+ events can be retried immediately; an abandoned processing reservation can be
49
+ retried after ten minutes. Once processed, redelivery deduplicates without
50
+ re-running the hooks. Selector exceptions also return 500.
51
+
52
+ Hooks and any sync triggers must be idempotent using `event.id` or a durable
53
+ business key: processing can run again after a hook failure, and hook success
54
+ followed by a failed completion write can rerun a successful hook. This is
55
+ at-least-once fulfillment. Unselected events, V2 hooks, and scheduled
56
+ `asyncWebhook` hooks keep their existing best-effort acknowledgment behavior.
57
+ Put required fulfillment in `onEvent`/`events`, not in a scheduled hook.
58
+
59
+ ### Existing breaking change when coming from 0.2.0
60
+
61
+ The 0.3.0/0.4.0 webhook wiring change remains required: `triggersApi()` was
62
+ replaced by `webhookHandlers()`. The constructor's `triggers` and `hooks` stay
63
+ the same. Export the two wrappers:
64
+
65
+ ```ts
66
+ export const { syncWebhook, asyncWebhook } = stripe.webhookHandlers();
67
+ ```
68
+
69
+ In `registerRoutes`, replace `triggers: internal.stripe` with
70
+ `webhooks: internal.stripe`. Regenerate Convex bindings before using the pair.
71
+
72
+ ## Stripe request and response changes
73
+
74
+ - **V2 account links:** `use_case.account_onboarding.configurations` and
75
+ `use_case.account_update.configurations` are removed. The public
76
+ `createV2AccountLink({ configurations })` option is retained, deprecated, and
77
+ ignored. Stripe collects requirements for the account without it.
78
+ - **Billing-cycle anchors:** Endive changes Subscription update/resume and
79
+ invoice preview `subscription_details.billing_cycle_anchor` to an object,
80
+ for example `{ type: "now" }` or `{ type: "unchanged" }`. These wrappers
81
+ currently send no billing-cycle anchor; no scalar anchor request needed
82
+ rewriting. Consumer raw SDK calls to those endpoints must migrate. Creation
83
+ and Checkout `subscription_data.billing_cycle_anchor` still accept a Unix
84
+ timestamp; do not convert those fields to the update format.
85
+ - **Payment methods:** Checkout Session creation and PaymentIntent
86
+ create/update/confirm and SetupIntent create/update no longer accept
87
+ `payment_method_types`. Use `allowed_payment_method_types` for a restriction,
88
+ or omit it for dynamic methods; retain `automatic_payment_methods` only where
89
+ supported. The package's Checkout requests omit the removed parameter.
90
+ Update consumer `sessionOverrides` and raw Stripe calls; SDK 23 types catch
91
+ old parameters. Subscription/invoice `payment_settings.payment_method_types`
92
+ and PaymentMethod list `type` are separate, still-supported parameters.
93
+ - **Account status:** an applied V2 configuration with a `rejected` or
94
+ `restricted` capability now maps to public `restricted`; a `pending`
95
+ capability maps to `in_progress`, including nested `stripe_balance` groups.
96
+ Unsupported optional payment methods do not block onboarding. Existing public
97
+ status strings remain unchanged.
98
+ - **V2 notifications:** signature verification uses
99
+ `parseEventNotificationAsync`. Account refreshes propagate the notification's
100
+ `context` via `stripeContext`. `related_object.id` is now optional because
101
+ singleton pointers can omit it; account pointers can resolve from their URL.
102
+ Consumers reading the public thin-event type must guard an absent id. Other
103
+ singleton resource events remain outside the account-sync handler's scope.
104
+ - **React embedded Checkout:** React Stripe.js 7 calls the current Stripe.js 10
105
+ `createEmbeddedCheckoutPage` API. `EmbeddedCheckout` keeps its public props and
106
+ now remounts the provider when the key or client secret changes, destroying
107
+ the previous session rather than keeping an immutable provider on it.
108
+
109
+ ## Upgrade webhook payload versions separately
110
+
111
+ Installing this package pins outgoing API requests. It does **not** change your
112
+ Stripe account's default API version or the version of an existing event
113
+ destination. In particular, a V1 snapshot event keeps the version configured on
114
+ its destination, regardless of `stripeApiVersion`.
115
+
116
+ 1. Deploy and test the consumer upgrade in a Stripe sandbox first. Preserve
117
+ your current endpoint URL, selected events, and signing secrets.
118
+ 2. In Stripe Workbench, review the destination's current version and the
119
+ [Endive changelog](https://docs.stripe.com/changelog/2026-09-30.endive).
120
+ Review every intervening breaking release if coming from Dahlia.
121
+ 3. Use Stripe's destination-version upgrade/testing procedure to test Endive
122
+ V1 snapshot payloads and V2 thin notifications separately. V2 uses
123
+ `webhookSecretV2` if set; otherwise it uses `webhookSecret`.
124
+ 4. Verify subscription fulfillment, cancellation, required-hook failure/retry,
125
+ and deduplication in sandbox before explicitly upgrading production
126
+ destinations. Keep the Stripe rollback window and its documented limits in
127
+ mind. Do not change the account default version as part of a package upgrade.
128
+
129
+ The official [stripe-node 23.0.0 changelog](https://github.com/stripe/stripe-node/blob/v23.0.0/CHANGELOG.md#2300---2026-09-30)
130
+ and installed SDK 23 types were reviewed for the breaking request/response
131
+ changes. Further consumer guidance: [Stripe API changelog](https://docs.stripe.com/changelog),
132
+ [API versioning](https://docs.stripe.com/upgrades), and
133
+ [event destinations](https://docs.stripe.com/event-destinations).
134
+ The docs.stripe.com changelog page returned HTTP 403 in this execution
135
+ environment.
package/README.md CHANGED
@@ -6,7 +6,7 @@ Built for Convex + Next.js applications. Follows the conventions established by
6
6
 
7
7
  ## Status
8
8
 
9
- **Version**: `0.4.0` <!-- x-release-please-version --> (pre-1.0). API may change between minor versions until 1.0.
9
+ **Version**: `0.6.0` <!-- x-release-please-version --> (pre-1.0). API may change between minor versions until 1.0.
10
10
 
11
11
  Used in production by its authors. Webhook pipeline is covered by unit tests and a live E2E harness (`npm run e2e:webhooks`) that fires real Stripe-signed events and asserts the ledger.
12
12
 
@@ -28,6 +28,25 @@ Release policy lives in `release-please-config.json`. Keep the workflow file nam
28
28
 
29
29
  The private `example` workspace isn't published.
30
30
 
31
+ ### Development toolchain
32
+
33
+ Install with `pnpm install` from the repository root, then run `pnpm build`
34
+ and `pnpm dev` to start the example at http://localhost:5173. The example needs
35
+ Node.js 22.12+ and a configured Convex development deployment; see
36
+ [the example setup guide](example/README.md).
37
+
38
+ Builds and typechecks use TypeScript 7 (`@typescript/native` aliases
39
+ `typescript`). ESLint and Convex code generation still need the TypeScript 6
40
+ API, so `typescript` aliases Microsoft's `@typescript/typescript6` compatibility
41
+ package. Keep both aliases when updating dependencies, as described in
42
+ [Microsoft's migration guide](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/#running-side-by-side-with-typescript-6.0).
43
+
44
+ Stripe 23 targets API version `2026-09-30.endive`. Account links now collect
45
+ requirements without a `configurations` parameter; callers can still pass the
46
+ legacy option, but it is not sent to Stripe. See the
47
+ [Stripe API changelog](https://docs.stripe.com/changelog) before upgrading an
48
+ existing integration to this API version.
49
+
31
50
  ### Regenerating codegen
32
51
 
33
52
  The component ships committed Convex codegen output at `src/component/_generated/{api,component,dataModel,server}.ts` — consumers reach the bindings via the `./_generated/component` subpath export. The example app also commits its own codegen at `example/convex/_generated/`. Running `pnpm dev` (which wraps `convex dev`) regenerates these automatically when the schema or function definitions change, but only against the live dev deployment and only while the dev server is watching.
@@ -118,6 +137,8 @@ app.use(betterStripe, {
118
137
  export default app;
119
138
  ```
120
139
 
140
+ > **TypeScript 6+:** `compilerOptions.types` now defaults to `[]`, so installed `@types/*` packages are no longer included automatically. If Convex's typecheck reports `Cannot find name 'process'` for the `process.env` reads below, add `"types": ["node"]` to `convex/tsconfig.json` and make sure `@types/node` is a devDependency.
141
+
121
142
  ### Step 2: Create a BetterStripe instance with triggers
122
143
 
123
144
  ```typescript
@@ -1017,7 +1038,7 @@ the deployment env — no `app.use` wiring required.
1017
1038
 
1018
1039
  ### Stripe API Version
1019
1040
 
1020
- The component pins the Stripe API version internally (`2026-05-27.dahlia`). Upgrading the pinned version requires a package release and changelog entry. Apps do not need to set `STRIPE_API_VERSION`.
1041
+ The component pins the Stripe API version internally (`2026-09-30.endive`) using the installed stripe-node 23 SDK's exact API-version type. Upgrading the pinned version requires a package release and changelog entry. Apps do not need to set `STRIPE_API_VERSION`. See [the migration notes](MIGRATION.md) for removing Dojo's fulfillment-retry patch and upgrading webhook payload versions separately.
1021
1042
 
1022
1043
  ### SDK Management
1023
1044
 
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../../src/client/billing/checkout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../../src/client/billing/checkout.ts"],"names":[],"mappings":"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"}
@@ -38,18 +38,30 @@ function deriveFeeRow(params) {
38
38
  return {};
39
39
  }
40
40
  /**
41
- * Destination charges require the price to live on the PLATFORM account, not a
42
- * connected account. Best-effort guard: if the price is in the component catalog
43
- * and its product belongs to a connected account, throw a clear error before
44
- * hitting Stripe. A price absent from the catalog is left to Stripe to validate.
41
+ * Destination and separate charges use platform prices. Catalog accountId is a
42
+ * store attribution tag, not Stripe ownership (createProduct uses the platform).
43
+ * For tagged products, verify the price in the platform Stripe context before
44
+ * rejecting it. Untagged/unknown catalog entries are validated by Checkout.
45
45
  */
46
- async function assertPlatformPrice(component, ctx, stripePriceId) {
46
+ async function assertPlatformPrice(stripe, component, ctx, stripePriceId) {
47
47
  const price = (await ctx.runQuery(componentRef(component, "products/queries/getPriceByStripeId"), { stripePriceId }));
48
48
  if (!price?.stripeProductId)
49
49
  return;
50
50
  const product = (await ctx.runQuery(componentRef(component, "products/queries/getProductByStripeId"), { stripeProductId: price.stripeProductId }));
51
51
  if (product?.accountId) {
52
- throwStripeError("INVALID_CONFIGURATION", `Price ${stripePriceId} belongs to connected account ${product.accountId}; destination charges require a platform-owned price.`);
52
+ try {
53
+ await stripe.prices.retrieve(stripePriceId);
54
+ }
55
+ catch (error) {
56
+ // Only absence on the platform means the ownership check failed.
57
+ // Auth/network/rate-limit failures must not be misreported as ownership.
58
+ if (!error ||
59
+ typeof error !== "object" ||
60
+ !("code" in error) ||
61
+ error.code !== "resource_missing")
62
+ throw error;
63
+ throwStripeError("INVALID_CONFIGURATION", `Price ${stripePriceId} is unavailable on the platform account; destination charges require a platform-owned price.`);
64
+ }
53
65
  }
54
66
  }
55
67
  // =============================================================================
@@ -85,7 +97,9 @@ export async function createCheckoutSession(stripe, component, ctx, opts) {
85
97
  ? {
86
98
  bsChargeType: "separate",
87
99
  bsSplit: JSON.stringify(opts.split),
88
- ...(opts.feeConfig ? { bsFeeConfig: JSON.stringify(opts.feeConfig) } : {}),
100
+ ...(opts.feeConfig
101
+ ? { bsFeeConfig: JSON.stringify(opts.feeConfig) }
102
+ : {}),
89
103
  }
90
104
  : {};
91
105
  // Strip the reserved `bs*` namespace from caller metadata so it can't forge
@@ -216,7 +230,7 @@ export async function createCheckoutSession(stripe, component, ctx, opts) {
216
230
  const finalPriceId = finalSessionParams.line_items?.[0]?.price;
217
231
  if ((isSeparate || feeRow.chargeType === "destination") &&
218
232
  typeof finalPriceId === "string") {
219
- await assertPlatformPrice(component, ctx, finalPriceId);
233
+ await assertPlatformPrice(stripe, component, ctx, finalPriceId);
220
234
  }
221
235
  const session = await stripe.checkout.sessions.create(finalSessionParams);
222
236
  await runMutationOrThrow(ctx, componentRef(component, "billing/mutations/upsertCheckoutSession"), {
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../../src/client/billing/checkout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../../src/client/billing/checkout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type Stripe from "stripe";
2
+ /** Recover routing from Stripe for both webhook delivery and explicit syncs. */
3
+ export declare function subscriptionRouting(subscription: Stripe.Subscription): {
4
+ chargeType: "destination";
5
+ destinationAccountId: string;
6
+ applicationFeePercent: number | undefined;
7
+ splitRecipients?: undefined;
8
+ } | {
9
+ destinationAccountId?: undefined;
10
+ applicationFeePercent?: undefined;
11
+ chargeType: "separate";
12
+ splitRecipients: {
13
+ amount?: number | undefined;
14
+ destinationAccountId: string;
15
+ percent?: number | undefined;
16
+ role: "affiliate" | "other" | "store";
17
+ }[];
18
+ } | {
19
+ destinationAccountId?: undefined;
20
+ applicationFeePercent?: undefined;
21
+ chargeType?: undefined;
22
+ splitRecipients?: undefined;
23
+ };
24
+ //# sourceMappingURL=subscriptionRouting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptionRouting.d.ts","sourceRoot":"","sources":["../../../src/client/billing/subscriptionRouting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAKjC,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY;gBAInD,aAAa;;;;;;;gBAWN,UAAU;;;;;;;;;;;;EAGlC"}
@@ -0,0 +1,19 @@
1
+ import { validateSplit } from "../core/fees.js";
2
+ /** Recover routing from Stripe for both webhook delivery and explicit syncs. */
3
+ export function subscriptionRouting(subscription) {
4
+ const destination = subscription.transfer_data?.destination;
5
+ if (destination) {
6
+ return {
7
+ chargeType: "destination",
8
+ destinationAccountId: typeof destination === "string" ? destination : destination.id,
9
+ applicationFeePercent: subscription.application_fee_percent ?? undefined,
10
+ };
11
+ }
12
+ if (subscription.metadata?.bsChargeType === "separate") {
13
+ const split = JSON.parse(subscription.metadata.bsSplit ?? "null");
14
+ validateSplit(split);
15
+ return { chargeType: "separate", splitRecipients: split };
16
+ }
17
+ return {};
18
+ }
19
+ //# sourceMappingURL=subscriptionRouting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptionRouting.js","sourceRoot":"","sources":["../../../src/client/billing/subscriptionRouting.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,YAAiC;IACnE,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,EAAE,WAAW,CAAC;IAC5D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO;YACL,UAAU,EAAE,aAAsB;YAClC,oBAAoB,EAClB,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE;YAChE,qBAAqB,EAAE,YAAY,CAAC,uBAAuB,IAAI,SAAS;SACzE,CAAC;IACJ,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,EAAE,YAAY,KAAK,UAAU,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACtB,YAAY,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM,CACpB,CAAC;QACtB,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,EAAE,UAAU,EAAE,UAAmB,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -21,6 +21,8 @@ export declare function createSubscription(stripe: Stripe, component: Component,
21
21
  split?: SplitRecipient[];
22
22
  feeConfig?: PlatformFeeConfig;
23
23
  trialDays?: number;
24
+ /** Attached payment method to use for this subscription. */
25
+ defaultPaymentMethod?: string;
24
26
  /** Platform-default statement-descriptor suffix (BTS-32); see checkout.ts. */
25
27
  defaultStatementDescriptorSuffix?: string;
26
28
  metadata?: Record<string, string>;
@@ -54,8 +56,8 @@ export declare function updateSubscriptionQuantity(stripe: Stripe, _ctx: RunCtx,
54
56
  success: boolean;
55
57
  }>;
56
58
  /**
57
- * Pause collection on a subscription. Sets `pause_collection` (Stripe transitions
58
- * the subscription to `status: "paused"`); the component DB is updated when the
59
+ * Pause collection on a subscription. Sets `pause_collection` without changing
60
+ * the subscription status; the component DB is updated when the
59
61
  * resulting `customer.subscription.updated` webhook arrives.
60
62
  */
61
63
  export declare function pauseSubscription(stripe: Stripe, _ctx: RunCtx, opts: {
@@ -66,10 +68,8 @@ export declare function pauseSubscription(stripe: Stripe, _ctx: RunCtx, opts: {
66
68
  success: boolean;
67
69
  }>;
68
70
  /**
69
- * Resume a paused subscription by clearing `pause_collection`. There is no
70
- * dedicated Stripe resume endpoint — passing the empty-string sentinel
71
- * (`Emptyable<PauseCollection>`) clears the field and Stripe returns the
72
- * subscription to its prior active status.
71
+ * Resume payment collection by clearing `pause_collection`. The empty-string
72
+ * sentinel clears the field without changing the subscription status.
73
73
  */
74
74
  export declare function resumeSubscription(stripe: Stripe, _ctx: RunCtx, opts: {
75
75
  stripeSubscriptionId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../../src/client/billing/subscriptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../../src/client/billing/subscriptions.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { subscriptionRouting } from "./subscriptionRouting.js";
2
+ import { resolveOwnerAccount } from "../utils/owner.js";
1
3
  import { isPercentOnlyFee, validateSplit } from "../core/fees.js";
2
4
  import { epochToIso, runMutationOrThrow, stripReservedMetadata, } from "../helpers.js";
3
5
  import { throwStripeError } from "../errors.js";
@@ -64,6 +66,9 @@ export async function createSubscription(stripe, component, ctx, opts) {
64
66
  }
65
67
  const params = {
66
68
  customer_account: opts.customerAccount,
69
+ ...(opts.defaultPaymentMethod
70
+ ? { default_payment_method: opts.defaultPaymentMethod }
71
+ : {}),
67
72
  items: [{ price: opts.stripePriceId }],
68
73
  metadata,
69
74
  };
@@ -78,7 +83,9 @@ export async function createSubscription(stripe, component, ctx, opts) {
78
83
  ...metadata,
79
84
  bsChargeType: "separate",
80
85
  bsSplit: JSON.stringify(opts.split),
81
- ...(opts.feeConfig ? { bsFeeConfig: JSON.stringify(opts.feeConfig) } : {}),
86
+ ...(opts.feeConfig
87
+ ? { bsFeeConfig: JSON.stringify(opts.feeConfig) }
88
+ : {}),
82
89
  };
83
90
  feeRow.chargeType = "separate";
84
91
  feeRow.splitRecipients = opts.split;
@@ -111,13 +118,27 @@ export async function createSubscription(stripe, component, ctx, opts) {
111
118
  ? { idempotencyKey: opts.idempotencyKey }
112
119
  : undefined;
113
120
  const sub = await callStripe("Failed to create subscription", () => stripe.subscriptions.create(params, requestOpts));
121
+ // Stripe 23 permits future status strings; our ledger accepts only these
122
+ // known statuses. Reject an unknown value before attempting to persist it.
123
+ const isKnownStatus = (value) => value === "active" ||
124
+ value === "canceled" ||
125
+ value === "incomplete" ||
126
+ value === "incomplete_expired" ||
127
+ value === "past_due" ||
128
+ value === "paused" ||
129
+ value === "trialing" ||
130
+ value === "unpaid";
131
+ const status = sub.status;
132
+ if (!isKnownStatus(status)) {
133
+ throwStripeError("STRIPE_API_ERROR", `Unsupported subscription status: ${status}`);
134
+ }
114
135
  const firstItem = sub.items?.data?.[0];
115
136
  await runMutationOrThrow(ctx, componentRef(component, "billing/mutations/upsertSubscription"), {
116
137
  stripeSubscriptionId: sub.id,
117
138
  accountId: opts.customerAccount,
118
139
  userId: opts.userId,
119
140
  orgId: opts.orgId,
120
- status: sub.status,
141
+ status,
121
142
  priceId: firstItem?.price?.id ?? opts.stripePriceId,
122
143
  quantity: firstItem?.quantity ?? undefined,
123
144
  currentPeriodStart: epochToIso(firstItem?.current_period_start ?? undefined),
@@ -130,7 +151,7 @@ export async function createSubscription(stripe, component, ctx, opts) {
130
151
  ...feeRow,
131
152
  metadata: sub.metadata ?? undefined,
132
153
  });
133
- return { stripeSubscriptionId: sub.id, status: sub.status };
154
+ return { stripeSubscriptionId: sub.id, status };
134
155
  }
135
156
  export async function getSubscription(component, ctx, opts) {
136
157
  return (await ctx.runQuery(componentRef(component, "billing/queries/getSubscription"), opts));
@@ -165,8 +186,8 @@ export async function updateSubscriptionQuantity(stripe, _ctx, opts) {
165
186
  return { success: true };
166
187
  }
167
188
  /**
168
- * Pause collection on a subscription. Sets `pause_collection` (Stripe transitions
169
- * the subscription to `status: "paused"`); the component DB is updated when the
189
+ * Pause collection on a subscription. Sets `pause_collection` without changing
190
+ * the subscription status; the component DB is updated when the
170
191
  * resulting `customer.subscription.updated` webhook arrives.
171
192
  */
172
193
  export async function pauseSubscription(stripe, _ctx, opts) {
@@ -179,10 +200,8 @@ export async function pauseSubscription(stripe, _ctx, opts) {
179
200
  return { success: true };
180
201
  }
181
202
  /**
182
- * Resume a paused subscription by clearing `pause_collection`. There is no
183
- * dedicated Stripe resume endpoint — passing the empty-string sentinel
184
- * (`Emptyable<PauseCollection>`) clears the field and Stripe returns the
185
- * subscription to its prior active status.
203
+ * Resume payment collection by clearing `pause_collection`. The empty-string
204
+ * sentinel clears the field without changing the subscription status.
186
205
  */
187
206
  export async function resumeSubscription(stripe, _ctx, opts) {
188
207
  await callStripe("Failed to resume subscription", () => stripe.subscriptions.update(opts.stripeSubscriptionId, {
@@ -294,9 +313,8 @@ export async function syncAllSubscriptions(stripe, component, ctx) {
294
313
  const periodEnd = firstItem?.current_period_end ?? undefined;
295
314
  await runMutationOrThrow(ctx, componentRef(component, "billing/mutations/upsertSubscription"), {
296
315
  stripeSubscriptionId: sub.id,
297
- accountId: typeof sub.customer === "string"
298
- ? sub.customer
299
- : (sub.customer?.id ?? ""),
316
+ ...subscriptionRouting(sub),
317
+ accountId: resolveOwnerAccount(sub) ?? "",
300
318
  userId,
301
319
  orgId,
302
320
  status: sub.status,
@@ -305,6 +323,7 @@ export async function syncAllSubscriptions(stripe, component, ctx) {
305
323
  currentPeriodStart: epochToIso(periodStart),
306
324
  currentPeriodEnd: epochToIso(periodEnd),
307
325
  cancelAtPeriodEnd: sub.cancel_at_period_end,
326
+ isCollectionPaused: !!sub.pause_collection,
308
327
  canceledAt: epochToIso(sub.canceled_at),
309
328
  isTrialing: sub.status === "trialing",
310
329
  trialStart: epochToIso(sub.trial_start),