@fantastic.dev/better-stripe 0.28.2 → 0.28.4

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 (96) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +5 -1
  3. package/dist/client/connect/payoutAdoptionTestHelpers.d.ts +96 -2
  4. package/dist/client/connect/payoutAdoptionTestHelpers.d.ts.map +1 -1
  5. package/dist/client/connect/payoutExecutionTestHelpers.d.ts +48 -1
  6. package/dist/client/connect/payoutExecutionTestHelpers.d.ts.map +1 -1
  7. package/dist/client/connect/payoutExecutionTestHelpers.js +1 -1
  8. package/dist/client/connect/payoutExecutionTestHelpers.js.map +1 -1
  9. package/dist/client/connect/payoutExpiry.d.ts +42 -0
  10. package/dist/client/connect/payoutExpiry.d.ts.map +1 -0
  11. package/dist/client/connect/payoutExpiry.js +93 -0
  12. package/dist/client/connect/payoutExpiry.js.map +1 -0
  13. package/dist/client/connect/payoutSyncTestHelpers.d.ts +38 -1
  14. package/dist/client/connect/payoutSyncTestHelpers.d.ts.map +1 -1
  15. package/dist/client/payoutPolicy.d.ts +18 -2
  16. package/dist/client/payoutPolicy.d.ts.map +1 -1
  17. package/dist/client/payoutPolicy.js +3 -25
  18. package/dist/client/payoutPolicy.js.map +1 -1
  19. package/dist/component/_generated/component.d.ts +118 -0
  20. package/dist/component/_generated/component.d.ts.map +1 -1
  21. package/dist/component/core/resetSafety.d.ts.map +1 -1
  22. package/dist/component/core/resetSafety.js +7 -1
  23. package/dist/component/core/resetSafety.js.map +1 -1
  24. package/dist/component/earnings/triggers.d.ts +22 -2
  25. package/dist/component/earnings/triggers.d.ts.map +1 -1
  26. package/dist/component/payoutPolicy/expiry.d.ts +78 -0
  27. package/dist/component/payoutPolicy/expiry.d.ts.map +1 -0
  28. package/dist/component/payoutPolicy/expiry.js +57 -0
  29. package/dist/component/payoutPolicy/expiry.js.map +1 -0
  30. package/dist/component/payoutPolicy/helpers.d.ts +10 -0
  31. package/dist/component/payoutPolicy/helpers.d.ts.map +1 -1
  32. package/dist/component/payoutPolicy/mutations.d.ts +77 -0
  33. package/dist/component/payoutPolicy/mutations.d.ts.map +1 -1
  34. package/dist/component/payoutPolicy/mutations.js +36 -3
  35. package/dist/component/payoutPolicy/mutations.js.map +1 -1
  36. package/dist/component/payoutPolicy/queries.d.ts +20 -0
  37. package/dist/component/payoutPolicy/queries.d.ts.map +1 -1
  38. package/dist/component/payoutPolicy/schema.d.ts +139 -2
  39. package/dist/component/payoutPolicy/schema.d.ts.map +1 -1
  40. package/dist/component/payoutPolicy/schema.js +12 -0
  41. package/dist/component/payoutPolicy/schema.js.map +1 -1
  42. package/dist/component/payoutRelease/deadline.d.ts +10 -0
  43. package/dist/component/payoutRelease/deadline.d.ts.map +1 -0
  44. package/dist/component/payoutRelease/deadline.js +20 -0
  45. package/dist/component/payoutRelease/deadline.js.map +1 -0
  46. package/dist/component/payoutRelease/helpers.d.ts +10 -0
  47. package/dist/component/payoutRelease/helpers.d.ts.map +1 -1
  48. package/dist/component/payoutRelease/planning.d.ts +1 -0
  49. package/dist/component/payoutRelease/planning.d.ts.map +1 -1
  50. package/dist/component/payoutRelease/planning.js +5 -2
  51. package/dist/component/payoutRelease/planning.js.map +1 -1
  52. package/dist/component/payoutRelease/preview.d.ts +7 -1
  53. package/dist/component/payoutRelease/preview.d.ts.map +1 -1
  54. package/dist/component/payoutRelease/preview.js +5 -1
  55. package/dist/component/payoutRelease/preview.js.map +1 -1
  56. package/dist/component/payoutRelease/queries.d.ts +2 -0
  57. package/dist/component/payoutRelease/queries.d.ts.map +1 -1
  58. package/dist/component/payoutWorker/mutations.d.ts.map +1 -1
  59. package/dist/component/payoutWorker/mutations.js +12 -4
  60. package/dist/component/payoutWorker/mutations.js.map +1 -1
  61. package/dist/component/payoutWorker/queries.d.ts +20 -0
  62. package/dist/component/payoutWorker/queries.d.ts.map +1 -1
  63. package/dist/component/schema.d.ts +38 -1
  64. package/dist/react/workflows/PayoutProgress.d.ts.map +1 -1
  65. package/dist/react/workflows/PayoutProgress.js +2 -2
  66. package/dist/react/workflows/PayoutProgress.js.map +1 -1
  67. package/dist/react/workflows/PayoutSettings.d.ts.map +1 -1
  68. package/dist/react/workflows/PayoutSettings.js +1 -1
  69. package/dist/react/workflows/PayoutSettings.js.map +1 -1
  70. package/dist/react/workflows/payout-progress-state.d.ts +11 -1
  71. package/dist/react/workflows/payout-progress-state.d.ts.map +1 -1
  72. package/dist/react/workflows/payout-progress-state.js +42 -7
  73. package/dist/react/workflows/payout-progress-state.js.map +1 -1
  74. package/docs/react-workflows.md +14 -0
  75. package/docs/settlement.md +50 -0
  76. package/package.json +1 -1
  77. package/src/client/connect/payoutDeadline.test.ts +238 -0
  78. package/src/client/connect/payoutExecutionTestHelpers.ts +1 -1
  79. package/src/client/connect/payoutExpiry.ts +132 -0
  80. package/src/client/payoutPolicy.test.ts +196 -0
  81. package/src/client/payoutPolicy.ts +9 -23
  82. package/src/component/_generated/api.ts +4 -0
  83. package/src/component/_generated/component.ts +145 -0
  84. package/src/component/core/resetSafety.ts +49 -33
  85. package/src/component/payout-reset-safety.test.ts +28 -0
  86. package/src/component/payoutPolicy/expiry.ts +80 -0
  87. package/src/component/payoutPolicy/mutations.ts +47 -2
  88. package/src/component/payoutPolicy/schema.ts +17 -0
  89. package/src/component/payoutRelease/deadline.ts +24 -0
  90. package/src/component/payoutRelease/planning.ts +5 -2
  91. package/src/component/payoutRelease/preview.ts +5 -0
  92. package/src/component/payoutWorker/mutations.ts +20 -4
  93. package/src/react/workflows/PayoutProgress.test.tsx +65 -0
  94. package/src/react/workflows/PayoutProgress.tsx +25 -1
  95. package/src/react/workflows/PayoutSettings.tsx +4 -1
  96. package/src/react/workflows/payout-progress-state.ts +60 -8
@@ -42,10 +42,23 @@ export type PayoutProgressState = {
42
42
  nextAttemptAt: number | null;
43
43
  holdDeadline: number | null;
44
44
  observedAt: number | null;
45
+ recovery?: {
46
+ status: NonNullable<PayoutPolicy["holdingExpiry"]>["status"];
47
+ balances?: {
48
+ currency: string;
49
+ available: number;
50
+ pending: number;
51
+ availableLabel: string;
52
+ pendingLabel: string;
53
+ }[];
54
+ };
45
55
  };
46
56
  export type PayoutProgressProps = {
47
57
  policy:
48
- | Pick<PayoutPolicy, "mode" | "status" | "thresholds" | "holdDeadline">
58
+ | Pick<
59
+ PayoutPolicy,
60
+ "mode" | "status" | "thresholds" | "holdDeadline" | "holdingExpiry"
61
+ >
49
62
  | null
50
63
  | undefined;
51
64
  preview?: PayoutPreview | null;
@@ -104,6 +117,33 @@ export function payoutProgressState({
104
117
  state.status = "changing";
105
118
  state.message =
106
119
  "Payout settings are being verified. Eligibility is unavailable until the change completes.";
120
+ } else if (
121
+ policy?.holdingExpiry &&
122
+ policy.holdingExpiry.status !== "no_held_balance"
123
+ ) {
124
+ const expiry = policy.holdingExpiry;
125
+ state.status = "unavailable";
126
+ state.reason = "holding_expiry_unresolved";
127
+ state.holdDeadline = expiry.deadline;
128
+ state.observedAt = expiry.observedAt ?? null;
129
+ state.message =
130
+ "The holding deadline has passed. Schedule restoration does not confirm disbursement. " +
131
+ (expiry.status === "unverified"
132
+ ? "Stripe balance verification is unavailable. "
133
+ : "Stripe balances or payout claims still require recovery. ") +
134
+ "Contact platform support; automatic recovery checks will retry.";
135
+ state.recovery = {
136
+ status: expiry.status,
137
+ ...(expiry.balances
138
+ ? {
139
+ balances: expiry.balances.map((b) => ({
140
+ ...b,
141
+ availableLabel: formatPrice(b.available, b.currency, locale),
142
+ pendingLabel: formatPrice(b.pending, b.currency, locale),
143
+ })),
144
+ }
145
+ : {}),
146
+ };
107
147
  } else if (!policy || policy.mode === "stripe_managed") {
108
148
  state.status = "stripe_managed";
109
149
  state.message =
@@ -123,24 +163,36 @@ export function payoutProgressState({
123
163
  if (
124
164
  preview.currency !== currency ||
125
165
  !configured ||
126
- configured.amount !== preview.threshold
166
+ configured.amount !== preview.threshold ||
167
+ (preview.minimumWaived &&
168
+ preview.holdDeadline !== policy.holdDeadline)
127
169
  )
128
170
  throw new Error(
129
171
  "Payout progress currency or policy does not match the assessment.",
130
172
  );
131
173
  state.status = "assessed";
132
174
  state.reason = preview.reason ?? null;
133
- state.message =
134
- preview.status === "qualified"
175
+ state.message = preview.minimumWaived
176
+ ? "The holding deadline is approaching. The application minimum is waived for final automatic attempts; provider limits and all balance checks still apply. " +
177
+ (preview.status === "qualified"
178
+ ? "The worker will verify eligibility again before any payout."
179
+ : (reasons[preview.reason ?? ""] ??
180
+ "Automatic payout remains on hold. Contact support before the deadline."))
181
+ : preview.status === "qualified"
135
182
  ? "The combined balance qualified at the assessment time. The automatic worker will verify it again before any payout."
136
183
  : (reasons[preview.reason ?? ""] ??
137
184
  "Automatic payout is on hold. Refresh or contact support.");
138
185
  state.observedAt = preview.observedAt;
139
186
  state.accounting = preview.accounting;
140
- state.progress = {
141
- value: Math.max(0, Math.min(preview.threshold, preview.matureUnpaid)),
142
- max: preview.threshold,
143
- };
187
+ state.progress = preview.minimumWaived
188
+ ? null
189
+ : {
190
+ value: Math.max(
191
+ 0,
192
+ Math.min(preview.threshold, preview.matureUnpaid),
193
+ ),
194
+ max: preview.threshold,
195
+ };
144
196
  const definitions = [
145
197
  ["qualifying", "Combined qualifying balance", preview.matureUnpaid],
146
198
  ["pending", "Pending settlement", preview.pendingCredits],