@fantastic.dev/better-stripe 0.27.0 → 0.28.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 (70) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/MIGRATION.md +13 -0
  3. package/README.md +1 -1
  4. package/dist/component/_generated/component.d.ts +8 -0
  5. package/dist/component/_generated/component.d.ts.map +1 -1
  6. package/dist/component/affiliatePayouts/queries.d.ts.map +1 -1
  7. package/dist/component/affiliatePayouts/queries.js +3 -1
  8. package/dist/component/affiliatePayouts/queries.js.map +1 -1
  9. package/dist/component/costRecovery/queries.d.ts.map +1 -1
  10. package/dist/component/costRecovery/queries.js +3 -1
  11. package/dist/component/costRecovery/queries.js.map +1 -1
  12. package/dist/component/payoutPolicy/queries.d.ts.map +1 -1
  13. package/dist/component/payoutPolicy/queries.js +3 -1
  14. package/dist/component/payoutPolicy/queries.js.map +1 -1
  15. package/dist/component/payoutRelease/allocationTotals.d.ts +8 -0
  16. package/dist/component/payoutRelease/allocationTotals.d.ts.map +1 -0
  17. package/dist/component/payoutRelease/allocationTotals.js +43 -0
  18. package/dist/component/payoutRelease/allocationTotals.js.map +1 -0
  19. package/dist/component/payoutRelease/planning.d.ts.map +1 -1
  20. package/dist/component/payoutRelease/planning.js +2 -0
  21. package/dist/component/payoutRelease/planning.js.map +1 -1
  22. package/dist/component/payoutRelease/preview.d.ts +35 -2
  23. package/dist/component/payoutRelease/preview.d.ts.map +1 -1
  24. package/dist/component/payoutRelease/preview.js +6 -11
  25. package/dist/component/payoutRelease/preview.js.map +1 -1
  26. package/dist/component/payoutRelease/progress.d.ts +29 -0
  27. package/dist/component/payoutRelease/progress.d.ts.map +1 -0
  28. package/dist/component/payoutRelease/progress.js +40 -0
  29. package/dist/component/payoutRelease/progress.js.map +1 -0
  30. package/dist/component/payoutRelease/queries.d.ts +8 -0
  31. package/dist/component/payoutRelease/queries.d.ts.map +1 -1
  32. package/dist/component/payoutSnapshots/mutations.d.ts.map +1 -1
  33. package/dist/component/payoutSnapshots/mutations.js +6 -4
  34. package/dist/component/payoutSnapshots/mutations.js.map +1 -1
  35. package/dist/component/payoutWorker/queries.d.ts.map +1 -1
  36. package/dist/component/payoutWorker/queries.js +5 -3
  37. package/dist/component/payoutWorker/queries.js.map +1 -1
  38. package/dist/react/workflows/PayoutProgress.d.ts.map +1 -1
  39. package/dist/react/workflows/PayoutProgress.js +2 -2
  40. package/dist/react/workflows/PayoutProgress.js.map +1 -1
  41. package/dist/react/workflows/payout-progress-state.d.ts +8 -1
  42. package/dist/react/workflows/payout-progress-state.d.ts.map +1 -1
  43. package/dist/react/workflows/payout-progress-state.js +31 -0
  44. package/dist/react/workflows/payout-progress-state.js.map +1 -1
  45. package/dist/testing/component-db.d.ts +3 -0
  46. package/dist/testing/component-db.d.ts.map +1 -0
  47. package/dist/testing/component-db.js +26 -0
  48. package/dist/testing/component-db.js.map +1 -0
  49. package/docs/react-workflows.md +8 -1
  50. package/docs/settlement.md +33 -0
  51. package/package.json +1 -1
  52. package/src/client/connect/payoutPreview.test.ts +145 -0
  53. package/src/component/_generated/api.ts +4 -0
  54. package/src/component/_generated/component.ts +8 -0
  55. package/src/component/affiliate-component-pagination.test.ts +1 -25
  56. package/src/component/affiliatePayouts/queries.ts +3 -1
  57. package/src/component/costRecovery/queries.ts +3 -1
  58. package/src/component/payout-component-pagination.test.ts +212 -0
  59. package/src/component/payoutPolicy/queries.ts +3 -1
  60. package/src/component/payoutRelease/allocationTotals.ts +56 -0
  61. package/src/component/payoutRelease/planning.ts +2 -0
  62. package/src/component/payoutRelease/preview.ts +10 -20
  63. package/src/component/payoutRelease/progress.test.ts +63 -0
  64. package/src/component/payoutRelease/progress.ts +56 -0
  65. package/src/component/payoutSnapshots/mutations.ts +6 -4
  66. package/src/component/payoutWorker/queries.ts +5 -3
  67. package/src/react/workflows/PayoutProgress.test.tsx +39 -0
  68. package/src/react/workflows/PayoutProgress.tsx +14 -0
  69. package/src/react/workflows/payout-progress-state.ts +48 -1
  70. package/src/testing/component-db.ts +24 -0
@@ -3,7 +3,16 @@ import type { PayoutPolicy, PayoutPreview } from "../../client/payoutPolicy.js";
3
3
  import { formatPrice } from "../lib/price-helpers.js";
4
4
  export type PayoutProgressMetric = {
5
5
  key:
6
- "qualifying" | "pending" | "minimum" | "eligible" | "fees" | "liabilities";
6
+ | "qualifying"
7
+ | "pending"
8
+ | "minimum"
9
+ | "eligible"
10
+ | "fees"
11
+ | "liabilities"
12
+ | "carried"
13
+ | "withheld"
14
+ | "reserved"
15
+ | "released";
7
16
  label: string;
8
17
  amount: number;
9
18
  formattedValue: string;
@@ -15,12 +24,19 @@ export type PayoutProgressState = {
15
24
  reason: string | null;
16
25
  message: string;
17
26
  metrics: PayoutProgressMetric[];
27
+ accounting?: NonNullable<
28
+ Extract<PayoutPreview, { currency: string }>["accounting"]
29
+ >;
18
30
  sources: {
19
31
  role: "store" | "affiliate" | "other";
20
32
  matureUnpaid: number;
21
33
  pendingCredits: number;
22
34
  matureLabel: string;
23
35
  pendingLabel: string;
36
+ releasedAmount?: number;
37
+ reservedAmount?: number;
38
+ releasedLabel?: string;
39
+ reservedLabel?: string;
24
40
  }[];
25
41
  progress: { value: number; max: number } | null;
26
42
  nextAttemptAt: number | null;
@@ -118,6 +134,7 @@ export function payoutProgressState({
118
134
  : (reasons[preview.reason ?? ""] ??
119
135
  "Automatic payout is on hold. Refresh or contact support.");
120
136
  state.observedAt = preview.observedAt;
137
+ state.accounting = preview.accounting;
121
138
  state.progress = {
122
139
  value: Math.max(0, Math.min(preview.threshold, preview.matureUnpaid)),
123
140
  max: preview.threshold,
@@ -127,6 +144,30 @@ export function payoutProgressState({
127
144
  ["pending", "Pending settlement", preview.pendingCredits],
128
145
  ["minimum", "Combined payout minimum", preview.threshold],
129
146
  ["eligible", "Eligible at assessment", preview.amount],
147
+ ...(preview.accounting
148
+ ? ([
149
+ [
150
+ "carried",
151
+ "Carried forward",
152
+ preview.accounting.carriedForwardAmount,
153
+ ],
154
+ [
155
+ "withheld",
156
+ "Withheld for costs",
157
+ preview.accounting.withheldAmount,
158
+ ],
159
+ [
160
+ "reserved",
161
+ "Payouts in progress",
162
+ preview.accounting.reservedAmount,
163
+ ],
164
+ [
165
+ "released",
166
+ "Paid out, net of returns",
167
+ preview.accounting.releasedAmount,
168
+ ],
169
+ ] as const)
170
+ : []),
130
171
  ["fees", "Confirmed payout costs", preview.confirmedFees],
131
172
  [
132
173
  "liabilities",
@@ -144,6 +185,12 @@ export function payoutProgressState({
144
185
  ...source,
145
186
  matureLabel: amount(source.matureUnpaid),
146
187
  pendingLabel: amount(source.pendingCredits),
188
+ ...(source.releasedAmount === undefined
189
+ ? {}
190
+ : { releasedLabel: amount(source.releasedAmount) }),
191
+ ...(source.reservedAmount === undefined
192
+ ? {}
193
+ : { reservedLabel: amount(source.reservedAmount) }),
147
194
  }));
148
195
  }
149
196
  }
@@ -0,0 +1,24 @@
1
+ /** Model the deployed component boundary that convex-test does not enforce. */
2
+ export function componentDb<T extends object>(db: T): T {
3
+ function wrap<TValue extends object>(value: TValue): TValue {
4
+ return new Proxy(value, {
5
+ get(target, key) {
6
+ if (key === "paginate")
7
+ return () => {
8
+ throw new Error("paginate() is only supported in the app");
9
+ };
10
+ const member = Reflect.get(target, key);
11
+ if (typeof member !== "function") return member;
12
+ return (...args: unknown[]) => {
13
+ const result = member.apply(target, args);
14
+ return result &&
15
+ typeof result === "object" &&
16
+ !(result instanceof Promise)
17
+ ? wrap(result)
18
+ : result;
19
+ };
20
+ },
21
+ });
22
+ }
23
+ return wrap(db);
24
+ }