@fantastic.dev/better-stripe 0.9.0 → 0.10.1

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 (160) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/MIGRATION.md +26 -0
  3. package/README.md +38 -1
  4. package/dist/client/apiVersion.d.ts +6 -0
  5. package/dist/client/apiVersion.d.ts.map +1 -0
  6. package/dist/client/apiVersion.js +13 -0
  7. package/dist/client/apiVersion.js.map +1 -0
  8. package/dist/client/billing/checkout.d.ts +1 -0
  9. package/dist/client/billing/checkout.d.ts.map +1 -1
  10. package/dist/client/billing/checkout.js +5 -1
  11. package/dist/client/billing/checkout.js.map +1 -1
  12. package/dist/client/billing/providerReads.d.ts +18 -0
  13. package/dist/client/billing/providerReads.d.ts.map +1 -0
  14. package/dist/client/billing/providerReads.js +15 -0
  15. package/dist/client/billing/providerReads.js.map +1 -0
  16. package/dist/client/billing/subscriptions.d.ts +1 -1
  17. package/dist/client/billing/subscriptions.d.ts.map +1 -1
  18. package/dist/client/billing/subscriptions.js.map +1 -1
  19. package/dist/client/connect/payoutSnapshot.d.ts +28 -0
  20. package/dist/client/connect/payoutSnapshot.d.ts.map +1 -0
  21. package/dist/client/connect/payoutSnapshot.js +81 -0
  22. package/dist/client/connect/payoutSnapshot.js.map +1 -0
  23. package/dist/client/connect/transfers.d.ts.map +1 -1
  24. package/dist/client/connect/transfers.js +13 -32
  25. package/dist/client/connect/transfers.js.map +1 -1
  26. package/dist/client/core/accounts.d.ts +12 -23
  27. package/dist/client/core/accounts.d.ts.map +1 -1
  28. package/dist/client/core/accounts.js +5 -1
  29. package/dist/client/core/accounts.js.map +1 -1
  30. package/dist/client/core/idempotency.d.ts +5 -0
  31. package/dist/client/core/idempotency.d.ts.map +1 -0
  32. package/dist/client/core/idempotency.js +10 -0
  33. package/dist/client/core/idempotency.js.map +1 -0
  34. package/dist/client/index.d.ts +39 -37
  35. package/dist/client/index.d.ts.map +1 -1
  36. package/dist/client/index.js +47 -56
  37. package/dist/client/index.js.map +1 -1
  38. package/dist/client/previewRoutes.d.ts +9 -0
  39. package/dist/client/previewRoutes.d.ts.map +1 -0
  40. package/dist/client/previewRoutes.js +15 -0
  41. package/dist/client/previewRoutes.js.map +1 -0
  42. package/dist/client/settlement/allocation.d.ts +30 -0
  43. package/dist/client/settlement/allocation.d.ts.map +1 -0
  44. package/dist/client/settlement/allocation.js +71 -0
  45. package/dist/client/settlement/allocation.js.map +1 -0
  46. package/dist/client/settlement/commissions.d.ts +27 -0
  47. package/dist/client/settlement/commissions.d.ts.map +1 -0
  48. package/dist/client/settlement/commissions.js +69 -0
  49. package/dist/client/settlement/commissions.js.map +1 -0
  50. package/dist/client/settlement/execution.d.ts +27 -0
  51. package/dist/client/settlement/execution.d.ts.map +1 -0
  52. package/dist/client/settlement/execution.js +70 -0
  53. package/dist/client/settlement/execution.js.map +1 -0
  54. package/dist/client/settlement/reconciliation.d.ts +10 -0
  55. package/dist/client/settlement/reconciliation.d.ts.map +1 -0
  56. package/dist/client/settlement/reconciliation.js +73 -0
  57. package/dist/client/settlement/reconciliation.js.map +1 -0
  58. package/dist/client/settlement/settleSale.d.ts +21 -0
  59. package/dist/client/settlement/settleSale.d.ts.map +1 -0
  60. package/dist/client/settlement/settleSale.js +27 -0
  61. package/dist/client/settlement/settleSale.js.map +1 -0
  62. package/dist/client/settlement/verifiedSale.d.ts +25 -0
  63. package/dist/client/settlement/verifiedSale.d.ts.map +1 -0
  64. package/dist/client/settlement/verifiedSale.js +100 -0
  65. package/dist/client/settlement/verifiedSale.js.map +1 -0
  66. package/dist/client/types/options.d.ts +3 -0
  67. package/dist/client/types/options.d.ts.map +1 -1
  68. package/dist/client/utils/webhookEndpoints.d.ts +12 -8
  69. package/dist/client/utils/webhookEndpoints.d.ts.map +1 -1
  70. package/dist/client/utils/webhookEndpoints.js +41 -2
  71. package/dist/client/utils/webhookEndpoints.js.map +1 -1
  72. package/dist/client/webhooks/asyncHooks.d.ts +5 -0
  73. package/dist/client/webhooks/asyncHooks.d.ts.map +1 -0
  74. package/dist/client/webhooks/asyncHooks.js +20 -0
  75. package/dist/client/webhooks/asyncHooks.js.map +1 -0
  76. package/dist/client/webhooks/v2.d.ts.map +1 -1
  77. package/dist/client/webhooks/v2.js +10 -7
  78. package/dist/client/webhooks/v2.js.map +1 -1
  79. package/dist/component/_generated/component.d.ts +80 -0
  80. package/dist/component/_generated/component.d.ts.map +1 -1
  81. package/dist/component/lib/stripeFactory.d.ts +3 -2
  82. package/dist/component/lib/stripeFactory.d.ts.map +1 -1
  83. package/dist/component/lib/stripeFactory.js +6 -5
  84. package/dist/component/lib/stripeFactory.js.map +1 -1
  85. package/dist/component/schema.d.ts +67 -0
  86. package/dist/component/schema.js +4 -0
  87. package/dist/component/schema.js.map +1 -1
  88. package/dist/component/settlement/mutations.d.ts +47 -0
  89. package/dist/component/settlement/mutations.d.ts.map +1 -0
  90. package/dist/component/settlement/mutations.js +104 -0
  91. package/dist/component/settlement/mutations.js.map +1 -0
  92. package/dist/component/settlement/queries.d.ts +29 -0
  93. package/dist/component/settlement/queries.d.ts.map +1 -0
  94. package/dist/component/settlement/queries.js +35 -0
  95. package/dist/component/settlement/queries.js.map +1 -0
  96. package/dist/component/settlement/schema.d.ts +99 -0
  97. package/dist/component/settlement/schema.d.ts.map +1 -0
  98. package/dist/component/settlement/schema.js +35 -0
  99. package/dist/component/settlement/schema.js.map +1 -0
  100. package/dist/react/workflows/Checkout.d.ts +3 -1
  101. package/dist/react/workflows/Checkout.d.ts.map +1 -1
  102. package/dist/react/workflows/Checkout.js +3 -2
  103. package/dist/react/workflows/Checkout.js.map +1 -1
  104. package/dist/react/workflows/Payouts.d.ts +3 -18
  105. package/dist/react/workflows/Payouts.d.ts.map +1 -1
  106. package/dist/react/workflows/Payouts.js +2 -2
  107. package/dist/react/workflows/Payouts.js.map +1 -1
  108. package/docs/accounts-v2-preview.md +132 -0
  109. package/docs/react-workflows.md +5 -2
  110. package/docs/settlement.md +158 -0
  111. package/package.json +3 -1
  112. package/src/client/apiVersion.ts +20 -0
  113. package/src/client/billing/checkout-idempotency.test.ts +82 -0
  114. package/src/client/billing/checkout.ts +6 -1
  115. package/src/client/billing/providerReads.test.ts +60 -0
  116. package/src/client/billing/providerReads.ts +30 -0
  117. package/src/client/billing/subscriptions.ts +1 -8
  118. package/src/client/connect/payoutSnapshot.test.ts +91 -0
  119. package/src/client/connect/payoutSnapshot.ts +130 -0
  120. package/src/client/connect/transfers.test.ts +15 -4
  121. package/src/client/connect/transfers.ts +13 -42
  122. package/src/client/core/account-idempotency.test.ts +78 -0
  123. package/src/client/core/accounts.ts +18 -25
  124. package/src/client/core/idempotency.test.ts +10 -0
  125. package/src/client/core/idempotency.ts +11 -0
  126. package/src/client/customer-preview-thin.test.ts +41 -0
  127. package/src/client/customer-preview-webhooks.test.ts +150 -0
  128. package/src/client/customer-preview.test.ts +185 -0
  129. package/src/client/index.ts +115 -119
  130. package/src/client/previewRoutes.ts +26 -0
  131. package/src/client/settlement/allocation.test.ts +98 -0
  132. package/src/client/settlement/allocation.ts +110 -0
  133. package/src/client/settlement/commissions.test.ts +103 -0
  134. package/src/client/settlement/commissions.ts +125 -0
  135. package/src/client/settlement/execution.test.ts +186 -0
  136. package/src/client/settlement/execution.ts +134 -0
  137. package/src/client/settlement/reconciliation.ts +119 -0
  138. package/src/client/settlement/settleSale.ts +59 -0
  139. package/src/client/settlement/verifiedSale.test.ts +139 -0
  140. package/src/client/settlement/verifiedSale.ts +159 -0
  141. package/src/client/stripe-version.test.ts +10 -4
  142. package/src/client/types/options.ts +3 -0
  143. package/src/client/utils/webhookEndpoints.ts +70 -15
  144. package/src/client/webhooks/asyncHooks.ts +38 -0
  145. package/src/client/webhooks/processors.test.ts +9 -9
  146. package/src/client/webhooks/v2.ts +14 -10
  147. package/src/component/_generated/api.ts +4 -0
  148. package/src/component/_generated/component.ts +100 -0
  149. package/src/component/lib/stripeFactory.ts +13 -5
  150. package/src/component/schema.ts +8 -0
  151. package/src/component/settlement/mutations.ts +119 -0
  152. package/src/component/settlement/queries.ts +38 -0
  153. package/src/component/settlement/schema.ts +45 -0
  154. package/src/component/settlement-claims.test.ts +77 -0
  155. package/src/react/components/EmbeddedDisputes.render.test.tsx +2 -2
  156. package/src/react/index.payment-element.test.ts +22 -37
  157. package/src/react/workflows/Checkout.test.tsx +30 -0
  158. package/src/react/workflows/Checkout.tsx +10 -3
  159. package/src/react/workflows/Payouts.test.tsx +33 -0
  160. package/src/react/workflows/Payouts.tsx +21 -15
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commissions.js","sourceRoot":"","sources":["../../../src/client/settlement/commissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type Stripe from "stripe";
2
+ import type { SplitTransfer } from "../core/fees.js";
3
+ import type { Component, RunCtx } from "../helpers.js";
4
+ export type ResolvedSettlement = {
5
+ sourceChargeId: string;
6
+ paymentIntentId?: string;
7
+ sourceInvoiceId?: string;
8
+ gross: number;
9
+ currency: string;
10
+ processingFee: number;
11
+ platformNet: number;
12
+ adjustmentAmount?: number;
13
+ transfers: SplitTransfer[];
14
+ paymentId?: string;
15
+ };
16
+ export type SettlementResult = ResolvedSettlement & {
17
+ status: "settled";
18
+ executedTransfers: {
19
+ stripeTransferId: string;
20
+ destinationAccountId: string;
21
+ role: string;
22
+ amount: number;
23
+ }[];
24
+ };
25
+ /** Shared transfer engine for webhook splits and verified, host-resolved allocations. */
26
+ export declare function executeResolvedTransfers(stripe: Stripe, component: Component, ctx: RunCtx, opts: ResolvedSettlement): Promise<SettlementResult>;
27
+ //# sourceMappingURL=execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../src/client/settlement/execution.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG;IAClD,MAAM,EAAE,SAAS,CAAC;IAClB,iBAAiB,EAAE;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACL,CAAC;AAQF,yFAAyF;AACzF,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAyF3B"}
@@ -0,0 +1,70 @@
1
+ import { sourceTransfers, matchingTransfer, recordSettlementTransfer, } from "./reconciliation.js";
2
+ import { runMutationOrThrow } from "../helpers.js";
3
+ import { componentRef } from "../webhooks/helpers.js";
4
+ /** Shared transfer engine for webhook splits and verified, host-resolved allocations. */
5
+ export async function executeResolvedTransfers(stripe, component, ctx, opts) {
6
+ const saved = (await runMutationOrThrow(ctx, componentRef(component, "settlement/mutations/reserveSettlementAllocation"), opts));
7
+ const claim = {
8
+ sourceChargeId: saved.sourceChargeId,
9
+ paymentIntentId: saved.paymentIntentId,
10
+ sourceInvoiceId: saved.sourceInvoiceId,
11
+ gross: saved.gross,
12
+ currency: saved.currency,
13
+ processingFee: saved.processingFee,
14
+ platformNet: saved.platformNet,
15
+ adjustmentAmount: saved.adjustmentAmount,
16
+ transfers: saved.transfers,
17
+ paymentId: saved.paymentId,
18
+ };
19
+ const existing = ((await ctx.runQuery(componentRef(component, "connect/queries/listTransfersByCharge"), { sourceChargeId: claim.sourceChargeId })) ?? []);
20
+ let provider = await sourceTransfers(stripe, claim.sourceChargeId);
21
+ if (claim.transfers.some((leg) => leg.amount > 0 &&
22
+ !existing.some((t) => t.destinationAccountId === leg.destinationAccountId &&
23
+ t.role === leg.role) &&
24
+ !matchingTransfer(provider, claim, leg))) {
25
+ provider = [
26
+ ...new Map([
27
+ ...provider,
28
+ ...(await sourceTransfers(stripe, claim.sourceChargeId, true)),
29
+ ].map((t) => [t.id, t])).values(),
30
+ ];
31
+ }
32
+ const executedTransfers = [];
33
+ for (const leg of claim.transfers) {
34
+ if (leg.amount === 0)
35
+ continue;
36
+ const recorded = existing.find((t) => t.destinationAccountId === leg.destinationAccountId &&
37
+ t.role === leg.role);
38
+ if (recorded &&
39
+ (recorded.amount !== leg.amount || recorded.currency !== claim.currency))
40
+ throw new Error("Recorded transfer conflicts with immutable settlement.");
41
+ let transferId = recorded?.stripeTransferId;
42
+ if (!transferId) {
43
+ const recovered = matchingTransfer(provider, claim, leg);
44
+ const transfer = recovered ??
45
+ (await stripe.transfers.create({
46
+ amount: leg.amount,
47
+ currency: claim.currency,
48
+ destination: leg.destinationAccountId,
49
+ source_transaction: claim.sourceChargeId,
50
+ transfer_group: claim.sourceChargeId,
51
+ metadata: {
52
+ bsRole: leg.role,
53
+ bsSourceCharge: claim.sourceChargeId,
54
+ },
55
+ }, {
56
+ idempotencyKey: `bs_split_${claim.sourceChargeId}_${leg.destinationAccountId}_${leg.role}`,
57
+ }));
58
+ transferId = transfer.id;
59
+ await recordSettlementTransfer(component, ctx, claim, leg, transfer);
60
+ }
61
+ executedTransfers.push({
62
+ stripeTransferId: transferId,
63
+ destinationAccountId: leg.destinationAccountId,
64
+ role: leg.role,
65
+ amount: leg.amount,
66
+ });
67
+ }
68
+ return { ...claim, status: "settled", executedTransfers };
69
+ }
70
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../../src/client/settlement/execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type Stripe from "stripe";
2
+ import type { SplitTransfer } from "../core/fees.js";
3
+ import type { Component, RunCtx } from "../helpers.js";
4
+ import type { ResolvedSettlement } from "./execution.js";
5
+ export declare function sourceTransfers(stripe: Stripe, sourceChargeId: string, legacy?: boolean): Promise<Stripe.Transfer[]>;
6
+ export declare function matchingTransfer(provider: Stripe.Transfer[], claim: ResolvedSettlement, leg: SplitTransfer): Stripe.Transfer;
7
+ export declare function recordSettlementTransfer(component: Component, ctx: RunCtx, claim: ResolvedSettlement, leg: SplitTransfer, transfer: Stripe.Transfer): Promise<void>;
8
+ /** Recover provider-success/ledger-failure legs before sizing refunds or disputes. */
9
+ export declare function recoverSettlementTransfers(stripe: Stripe, component: Component, ctx: RunCtx, sourceChargeId: string): Promise<void>;
10
+ //# sourceMappingURL=reconciliation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconciliation.d.ts","sourceRoot":"","sources":["../../../src/client/settlement/reconciliation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,MAAM,UAAQ,GACb,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAwB5B;AACD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAC3B,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,aAAa,mBAwBnB;AACD,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ,iBAkB1B;AACD,sFAAsF;AACtF,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,iBA0BvB"}
@@ -0,0 +1,73 @@
1
+ import { runMutationOrThrow } from "../helpers.js";
2
+ import { componentRef } from "../webhooks/helpers.js";
3
+ export async function sourceTransfers(stripe, sourceChargeId, legacy = false) {
4
+ const rows = [];
5
+ let cursor;
6
+ const charge = legacy ? await stripe.charges.retrieve(sourceChargeId) : null;
7
+ const created = charge && charge.created <= Math.floor(Date.now() / 1000)
8
+ ? { gte: charge.created }
9
+ : undefined;
10
+ for (let page = 0; page < 100; page++) {
11
+ const batch = await stripe.transfers.list({
12
+ ...(legacy ? { created } : { transfer_group: sourceChargeId }),
13
+ limit: 100,
14
+ starting_after: cursor,
15
+ });
16
+ rows.push(...batch.data);
17
+ if (!batch.has_more)
18
+ return rows;
19
+ const next = batch.data[batch.data.length - 1]?.id;
20
+ if (!next || next === cursor)
21
+ throw new Error("Settlement transfer reconciliation did not advance.");
22
+ cursor = next;
23
+ }
24
+ throw new Error("Settlement transfer reconciliation exceeded its page bound; review before retrying.");
25
+ }
26
+ export function matchingTransfer(provider, claim, leg) {
27
+ const matches = provider.filter((t) => (typeof t.destination === "string"
28
+ ? t.destination
29
+ : t.destination?.id) === leg.destinationAccountId &&
30
+ (t.metadata.bsRole ?? t.metadata.role) === leg.role &&
31
+ (t.metadata.bsSourceCharge ?? t.metadata.storeSaleChargeId) ===
32
+ claim.sourceChargeId);
33
+ if (matches.length > 1 ||
34
+ matches.some((t) => t.amount !== leg.amount ||
35
+ t.currency !== claim.currency ||
36
+ t.source_transaction !== claim.sourceChargeId))
37
+ throw new Error("Provider transfers conflict with claimed settlement; manual review required.");
38
+ return matches[0];
39
+ }
40
+ export async function recordSettlementTransfer(component, ctx, claim, leg, transfer) {
41
+ await runMutationOrThrow(ctx, componentRef(component, "connect/mutations/upsertTransfer"), {
42
+ stripeTransferId: transfer.id,
43
+ sourceChargeId: claim.sourceChargeId,
44
+ sourceInvoiceId: claim.sourceInvoiceId,
45
+ destinationAccountId: leg.destinationAccountId,
46
+ amount: leg.amount,
47
+ currency: claim.currency,
48
+ role: leg.role,
49
+ status: "paid",
50
+ paymentId: claim.paymentId,
51
+ reversedAmount: transfer.amount_reversed ?? 0,
52
+ });
53
+ }
54
+ /** Recover provider-success/ledger-failure legs before sizing refunds or disputes. */
55
+ export async function recoverSettlementTransfers(stripe, component, ctx, sourceChargeId) {
56
+ const claim = (await ctx.runQuery(componentRef(component, "settlement/queries/getSettlementAllocation"), { sourceChargeId }));
57
+ if (!claim || typeof claim.sourceChargeId !== "string")
58
+ return;
59
+ let provider = await sourceTransfers(stripe, sourceChargeId);
60
+ if (claim.transfers.some((leg) => leg.amount > 0 && !matchingTransfer(provider, claim, leg)))
61
+ provider = [
62
+ ...new Map([
63
+ ...provider,
64
+ ...(await sourceTransfers(stripe, sourceChargeId, true)),
65
+ ].map((t) => [t.id, t])).values(),
66
+ ];
67
+ for (const leg of claim.transfers) {
68
+ const transfer = matchingTransfer(provider, claim, leg);
69
+ if (transfer)
70
+ await recordSettlementTransfer(component, ctx, claim, leg, transfer);
71
+ }
72
+ }
73
+ //# sourceMappingURL=reconciliation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconciliation.js","sourceRoot":"","sources":["../../../src/client/settlement/reconciliation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type Stripe from "stripe";
2
+ import type { SplitTransfer } from "../core/fees.js";
3
+ import type { Component, RunCtx } from "../helpers.js";
4
+ import { getVerifiedSale, type VerifiedSaleOptions } from "./verifiedSale.js";
5
+ import { type SettlementResult } from "./execution.js";
6
+ export type SettleSaleOptions = VerifiedSaleOptions & {
7
+ allocation: {
8
+ gross: number;
9
+ currency: string;
10
+ processingFee: number;
11
+ platformNet: number;
12
+ adjustmentAmount?: number;
13
+ transfers: SplitTransfer[];
14
+ };
15
+ paymentId?: string;
16
+ onSettled?: (result: SettlementResult) => Promise<void>;
17
+ };
18
+ export declare function settleSale(stripe: Stripe, component: Component, ctx: RunCtx, opts: SettleSaleOptions): Promise<SettlementResult | Exclude<Awaited<ReturnType<typeof getVerifiedSale>>, {
19
+ status: "ready";
20
+ }>>;
21
+ //# sourceMappingURL=settleSale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settleSale.d.ts","sourceRoot":"","sources":["../../../src/client/settlement/settleSale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG;IACpD,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,SAAS,EAAE,aAAa,EAAE,CAAC;KAC5B,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CAAC;AACF,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,iBAAiB,GACtB,OAAO,CACN,gBAAgB,GAChB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAC5E,CA4BA"}
@@ -0,0 +1,27 @@
1
+ import { componentRef } from "../webhooks/helpers.js";
2
+ import { throwStripeError } from "../errors.js";
3
+ import { getVerifiedSale } from "./verifiedSale.js";
4
+ import { executeResolvedTransfers, } from "./execution.js";
5
+ export async function settleSale(stripe, component, ctx, opts) {
6
+ const sale = await getVerifiedSale(stripe, opts);
7
+ if (sale.status !== "ready")
8
+ return sale;
9
+ const prior = (await ctx.runQuery(componentRef(component, "settlement/queries/getSettlementAllocation"), {
10
+ sourceChargeId: sale.chargeId,
11
+ }));
12
+ const allocation = prior ?? opts.allocation;
13
+ if (allocation.gross !== sale.gross ||
14
+ allocation.currency !== sale.currency ||
15
+ allocation.processingFee !== sale.processingFee)
16
+ throwStripeError("INVALID_CONFIGURATION", "Allocation must use verified payment currency, gross and actual processing cost.");
17
+ const result = await executeResolvedTransfers(stripe, component, ctx, {
18
+ ...opts.allocation,
19
+ sourceChargeId: sale.chargeId,
20
+ paymentIntentId: sale.paymentIntentId,
21
+ sourceInvoiceId: sale.invoiceId,
22
+ paymentId: opts.paymentId,
23
+ });
24
+ await opts.onSettled?.(result);
25
+ return result;
26
+ }
27
+ //# sourceMappingURL=settleSale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settleSale.js","sourceRoot":"","sources":["../../../src/client/settlement/settleSale.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAA4B,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EACL,wBAAwB,GAEzB,MAAM,gBAAgB,CAAC;AAaxB,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,SAAoB,EACpB,GAAW,EACX,IAAuB;IAKvB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAC/B,YAAY,CAAC,SAAS,EAAE,4CAA4C,CAAC,EACrE;QACE,cAAc,EAAE,IAAI,CAAC,QAAQ;KAC9B,CACF,CAA4B,CAAC;IAC9B,MAAM,UAAU,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC;IAC5C,IACE,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;QAC/B,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;QACrC,UAAU,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa;QAE/C,gBAAgB,CACd,uBAAuB,EACvB,kFAAkF,CACnF,CAAC;IACJ,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE;QACpE,GAAG,IAAI,CAAC,UAAU;QAClB,cAAc,EAAE,IAAI,CAAC,QAAQ;QAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,eAAe,EAAE,IAAI,CAAC,SAAS;QAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type Stripe from "stripe";
2
+ export type VerifiedSaleOptions = {
3
+ paymentIntentId: string;
4
+ subscriptionId?: string;
5
+ invoiceId?: string;
6
+ };
7
+ export type VerifiedSale = {
8
+ status: "pending" | "not_payable";
9
+ reason: string;
10
+ retryable: boolean;
11
+ } | {
12
+ status: "ready";
13
+ paymentIntentId: string;
14
+ chargeId: string;
15
+ gross: number;
16
+ processingFee: number;
17
+ currency: string;
18
+ metadata: Record<string, string>;
19
+ invoiceId?: string;
20
+ subscriptionId?: string;
21
+ stripePriceId?: string;
22
+ stripeProductId?: string;
23
+ };
24
+ export declare function getVerifiedSale(stripe: Stripe, opts: VerifiedSaleOptions): Promise<VerifiedSale>;
25
+ //# sourceMappingURL=verifiedSale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifiedSale.d.ts","sourceRoot":"","sources":["../../../src/client/settlement/verifiedSale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GACzE;IACE,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAGN,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,YAAY,CAAC,CAmIvB"}
@@ -0,0 +1,100 @@
1
+ import { isBetterStripeError, throwStripeError } from "../errors.js";
2
+ const id = (value) => typeof value === "string" ? value : value?.id;
3
+ export async function getVerifiedSale(stripe, opts) {
4
+ try {
5
+ const payment = await stripe.paymentIntents.retrieve(opts.paymentIntentId, {
6
+ expand: ["latest_charge.balance_transaction"],
7
+ });
8
+ if (payment.status === "processing")
9
+ return {
10
+ status: "pending",
11
+ reason: "payment_processing",
12
+ retryable: true,
13
+ };
14
+ if (payment.status !== "succeeded")
15
+ return {
16
+ status: "not_payable",
17
+ reason: "payment_not_succeeded",
18
+ retryable: false,
19
+ };
20
+ const charge = payment.latest_charge;
21
+ if (!charge || typeof charge === "string")
22
+ return {
23
+ status: "pending",
24
+ reason: "charge_unavailable",
25
+ retryable: true,
26
+ };
27
+ if (charge.amount_refunded > 0 || charge.disputed)
28
+ return {
29
+ status: "not_payable",
30
+ reason: "charge_refunded_or_disputed",
31
+ retryable: false,
32
+ };
33
+ const balance = charge.balance_transaction;
34
+ if (!balance || typeof balance === "string")
35
+ return {
36
+ status: "pending",
37
+ reason: "processing_fee_unavailable",
38
+ retryable: true,
39
+ };
40
+ if (balance.currency !== payment.currency ||
41
+ charge.currency !== payment.currency)
42
+ throwStripeError("INVALID_CONFIGURATION", "Settlement currency must match the payment and processing currency.");
43
+ if (![payment.amount_received, balance.fee].every(Number.isSafeInteger) ||
44
+ balance.fee < 0 ||
45
+ balance.fee > payment.amount_received ||
46
+ charge.amount !== payment.amount_received)
47
+ throwStripeError("INVALID_CONFIGURATION", "Unsupported payment or processing amounts.");
48
+ if (opts.subscriptionId && !opts.invoiceId)
49
+ throwStripeError("INVALID_CONFIGURATION", "Subscription settlement requires a paid invoice.");
50
+ const invoice = opts.invoiceId
51
+ ? await stripe.invoices.retrieve(opts.invoiceId)
52
+ : null;
53
+ if (invoice && invoice.status !== "paid")
54
+ return { status: "pending", reason: "invoice_not_paid", retryable: true };
55
+ const subscriptionId = id(invoice?.parent?.subscription_details?.subscription);
56
+ if (invoice &&
57
+ (invoice.currency !== payment.currency ||
58
+ (opts.subscriptionId && subscriptionId !== opts.subscriptionId)))
59
+ throwStripeError("INVALID_CONFIGURATION", "Invoice currency or subscription does not match settlement.");
60
+ if (invoice) {
61
+ if (invoice.amount_paid !== payment.amount_received)
62
+ throwStripeError("INVALID_CONFIGURATION", "Partial invoice payments require an explicitly resolved invoice allocation.");
63
+ const linked = await stripe.invoicePayments.list({
64
+ invoice: invoice.id,
65
+ limit: 100,
66
+ status: "paid",
67
+ payment: { type: "payment_intent", payment_intent: payment.id },
68
+ });
69
+ if (!linked.data.some((row) => row.status === "paid" &&
70
+ id(row.payment.payment_intent) === payment.id))
71
+ throwStripeError("INVALID_CONFIGURATION", "Payment does not belong to this paid invoice.");
72
+ }
73
+ const subscription = subscriptionId
74
+ ? await stripe.subscriptions.retrieve(subscriptionId)
75
+ : null;
76
+ if (subscription && subscription.items.data.length !== 1)
77
+ throwStripeError("INVALID_CONFIGURATION", "Resolve multi-price subscription allocations explicitly.");
78
+ const price = subscription?.items.data[0]?.price;
79
+ const metadata = subscription?.metadata ?? payment.metadata;
80
+ return {
81
+ status: "ready",
82
+ paymentIntentId: payment.id,
83
+ chargeId: charge.id,
84
+ gross: payment.amount_received,
85
+ processingFee: balance.fee,
86
+ currency: payment.currency,
87
+ metadata,
88
+ invoiceId: invoice?.id,
89
+ subscriptionId,
90
+ stripePriceId: price?.id ?? metadata.stripePriceId,
91
+ stripeProductId: id(price?.product) ?? metadata.stripeProductId,
92
+ };
93
+ }
94
+ catch (error) {
95
+ if (isBetterStripeError(error))
96
+ throw error;
97
+ throwStripeError("STRIPE_API_ERROR", "Could not retrieve verified sale context.");
98
+ }
99
+ }
100
+ //# sourceMappingURL=verifiedSale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifiedSale.js","sourceRoot":"","sources":["../../../src/client/settlement/verifiedSale.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { SupportedStripeApiVersion } from "../apiVersion.js";
1
2
  import type { StripeEventHandler, StripeEventHandlers, StripeWebhookEvent } from "./events.js";
2
3
  import type { AsyncHooks, SyncTriggers, WebhookHandlerRefs } from "./triggers.js";
3
4
  /**
@@ -31,6 +32,8 @@ export type PlatformFeeConfig = {
31
32
  */
32
33
  export type FeeOverride = PlatformFeeConfig;
33
34
  export type BetterStripeOptions = {
35
+ /** Defaults to GA. Non-Connect Accounts v2 customers require explicit preview opt-in. */
36
+ stripeApiVersion?: SupportedStripeApiVersion;
34
37
  STRIPE_SECRET_KEY?: string;
35
38
  /** Sync triggers — run in the same transaction as component DB writes */
36
39
  triggers?: SyncTriggers;
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/client/types/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAMvB;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAM5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,yDAAyD;IACzD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC,CAAC;AAMF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC;IAC1D;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD,CAAC"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/client/types/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAMvB;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAM5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,yDAAyD;IACzD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC,CAAC;AAMF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC;IAC1D;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD,CAAC"}
@@ -11,6 +11,8 @@ export type BetterStripeWebhookEvent = (typeof BETTER_STRIPE_WEBHOOK_EVENTS)[num
11
11
  * These are thin events — the webhook handler fetches full data from the API.
12
12
  */
13
13
  export declare const BETTER_STRIPE_V2_WEBHOOK_EVENTS: readonly ["v2.core.account.updated", "v2.core.account.created", "v2.core.account[requirements].updated", "v2.core.account[identity].updated", "v2.core.account[configuration.merchant].updated", "v2.core.account[configuration.merchant].capability_status_updated", "v2.core.account[configuration.customer].updated", "v2.core.account[configuration.recipient].updated", "v2.core.account[defaults].updated", "v2.core.account_person.created", "v2.core.account_person.updated", "v2.core.account_link.returned"];
14
+ /** Minimal customer lifecycle subscription for non-Connect preview merchants. */
15
+ export declare const BETTER_STRIPE_CUSTOMER_ACCOUNT_EVENTS: readonly ["v2.core.account.created", "v2.core.account[configuration.customer].updated", "v2.core.account[identity].updated"];
14
16
  export type BetterStripeV2WebhookEvent = (typeof BETTER_STRIPE_V2_WEBHOOK_EVENTS)[number];
15
17
  /**
16
18
  * All events (V1 + V2) that better-stripe processes.
@@ -27,10 +29,17 @@ export declare function listWebhookEndpoints(stripe: Stripe, _ctx: RunCtx, opts?
27
29
  description: string | undefined;
28
30
  livemode: boolean;
29
31
  }[]>;
30
- export declare function createWebhookEndpoint(stripe: Stripe, _ctx: RunCtx, opts: {
32
+ export type WebhookEndpointOptions = {
31
33
  url: string;
32
34
  description?: string;
33
35
  enabledEvents?: string[];
36
+ };
37
+ export type EventDestinationOptions = WebhookEndpointOptions & {
38
+ name?: string;
39
+ eventPayload?: "snapshot" | "thin";
40
+ };
41
+ export declare function createWebhookEndpoint(stripe: Stripe, _ctx: RunCtx, opts: WebhookEndpointOptions & {
42
+ apiVersion?: string;
34
43
  }): Promise<{
35
44
  id: string;
36
45
  secret: string;
@@ -66,13 +75,8 @@ export declare function listEventDestinations(stripe: Stripe, _ctx: RunCtx, opts
66
75
  *
67
76
  * Defaults to a thin destination with V2 account events if no overrides given.
68
77
  */
69
- export declare function setupEventDestination(stripe: Stripe, _ctx: RunCtx, opts: {
70
- url: string;
71
- name?: string;
72
- description?: string;
73
- enabledEvents?: string[];
74
- /** 'snapshot' for V1 events, 'thin' for V2 events. Defaults to 'thin'. */
75
- eventPayload?: "snapshot" | "thin";
78
+ export declare function setupEventDestination(stripe: Stripe, _ctx: RunCtx, opts: EventDestinationOptions & {
79
+ apiVersion?: string;
76
80
  }): Promise<{
77
81
  id: string;
78
82
  secret: string;
@@ -1 +1 @@
1
- {"version":3,"file":"webhookEndpoints.d.ts","sourceRoot":"","sources":["../../../src/client/utils/webhookEndpoints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhookEndpoints.d.ts","sourceRoot":"","sources":["../../../src/client/utils/webhookEndpoints.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { STRIPE_CUSTOMER_PREVIEW_API_VERSION } from "../apiVersion.js";
2
+ import { throwStripeError } from "../errors.js";
1
3
  // =============================================================================
2
4
  // Webhook endpoint management
3
5
  // =============================================================================
@@ -63,6 +65,12 @@ export const BETTER_STRIPE_V2_WEBHOOK_EVENTS = [
63
65
  "v2.core.account_person.updated",
64
66
  "v2.core.account_link.returned",
65
67
  ];
68
+ /** Minimal customer lifecycle subscription for non-Connect preview merchants. */
69
+ export const BETTER_STRIPE_CUSTOMER_ACCOUNT_EVENTS = [
70
+ "v2.core.account.created",
71
+ "v2.core.account[configuration.customer].updated",
72
+ "v2.core.account[identity].updated",
73
+ ];
66
74
  /**
67
75
  * All events (V1 + V2) that better-stripe processes.
68
76
  * Use with setupEventDestination() for complete webhook coverage.
@@ -93,6 +101,11 @@ export async function createWebhookEndpoint(stripe, _ctx, opts) {
93
101
  }
94
102
  const endpoint = await stripe.webhookEndpoints.create({
95
103
  url: opts.url,
104
+ ...(opts.apiVersion
105
+ ? {
106
+ api_version: opts.apiVersion,
107
+ }
108
+ : {}),
96
109
  enabled_events: (opts.enabledEvents ??
97
110
  BETTER_STRIPE_WEBHOOK_EVENTS),
98
111
  description: opts.description ?? "Created by better-stripe createWebhookEndpoint",
@@ -132,7 +145,9 @@ export async function setupEventDestination(stripe, _ctx, opts) {
132
145
  const payloadType = opts.eventPayload ?? "thin";
133
146
  const events = opts.enabledEvents ??
134
147
  (payloadType === "thin"
135
- ? [...BETTER_STRIPE_V2_WEBHOOK_EVENTS]
148
+ ? opts.apiVersion === STRIPE_CUSTOMER_PREVIEW_API_VERSION
149
+ ? [...BETTER_STRIPE_CUSTOMER_ACCOUNT_EVENTS]
150
+ : [...BETTER_STRIPE_V2_WEBHOOK_EVENTS]
136
151
  : [...BETTER_STRIPE_WEBHOOK_EVENTS]);
137
152
  const name = opts.name ??
138
153
  (payloadType === "thin" ? "better-stripe-v2" : "better-stripe");
@@ -145,6 +160,21 @@ export async function setupEventDestination(stripe, _ctx, opts) {
145
160
  include: ["webhook_endpoint.url"],
146
161
  });
147
162
  const match = existing.data.find((d) => d.webhook_endpoint?.url === opts.url && d.event_payload === payloadType);
163
+ if (match &&
164
+ payloadType === "snapshot" &&
165
+ opts.apiVersion &&
166
+ match.snapshot_api_version !== opts.apiVersion)
167
+ throwStripeError("INVALID_CONFIGURATION", "Existing snapshot destination API version differs. Create a replacement destination with the selected version and configure its signing secret before retiring the old destination.");
168
+ if (match && opts.apiVersion === STRIPE_CUSTOMER_PREVIEW_API_VERSION) {
169
+ const scopes = new Set((match.events_from ?? []).map((scope) => scope === "self"
170
+ ? "@self"
171
+ : scope === "other_accounts"
172
+ ? "@accounts"
173
+ : scope));
174
+ const required = payloadType === "thin" ? ["@self", "@accounts"] : ["@self"];
175
+ if (required.some((scope) => !scopes.has(scope)))
176
+ throwStripeError("INVALID_CONFIGURATION", "Existing destination event scope differs. Create a replacement with the customer preview scopes before retiring the old destination.");
177
+ }
148
178
  if (match) {
149
179
  const updated = await stripe.v2.core.eventDestinations.update(match.id, {
150
180
  name,
@@ -170,7 +200,16 @@ export async function setupEventDestination(stripe, _ctx, opts) {
170
200
  type: "webhook_endpoint",
171
201
  event_payload: payloadType,
172
202
  enabled_events: events,
173
- events_from: payloadType === "thin" ? ["self", "other_accounts"] : ["self"],
203
+ ...(payloadType === "snapshot" && opts.apiVersion
204
+ ? { snapshot_api_version: opts.apiVersion }
205
+ : {}),
206
+ events_from: opts.apiVersion === STRIPE_CUSTOMER_PREVIEW_API_VERSION
207
+ ? payloadType === "thin"
208
+ ? ["@self", "@accounts"]
209
+ : ["@self"]
210
+ : payloadType === "thin"
211
+ ? ["self", "other_accounts"]
212
+ : ["self"],
174
213
  webhook_endpoint: { url: opts.url },
175
214
  include: ["webhook_endpoint.signing_secret", "webhook_endpoint.url"],
176
215
  });
@@ -1 +1 @@
1
- {"version":3,"file":"webhookEndpoints.js","sourceRoot":"","sources":["../../../src/client/utils/webhookEndpoints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhookEndpoints.js","sourceRoot":"","sources":["../../../src/client/utils/webhookEndpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { AsyncHooks, AsyncHookCtx } from "../types.js";
2
+ import type { AsyncHookName } from "../types/triggers.js";
3
+ /** Route async webhook hooks through the shared public callback contract. */
4
+ export declare function buildAsyncHookRoutes(hooks: AsyncHooks | undefined): Record<AsyncHookName, ((ctx: AsyncHookCtx, doc: unknown) => Promise<void>) | undefined>;
5
+ //# sourceMappingURL=asyncHooks.d.ts.map