@mj-biz-apps/orders-core-entities-server 0.0.1 → 5.2.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 (267) hide show
  1. package/LICENSE +183 -0
  2. package/README.md +141 -2
  3. package/dist/AccountingBridge.d.ts +65 -0
  4. package/dist/AccountingBridge.d.ts.map +1 -0
  5. package/dist/AccountingBridge.js +102 -0
  6. package/dist/AccountingBridge.js.map +1 -0
  7. package/dist/AdvanceOrderStateOperation.d.ts +80 -0
  8. package/dist/AdvanceOrderStateOperation.d.ts.map +1 -0
  9. package/dist/AdvanceOrderStateOperation.js +267 -0
  10. package/dist/AdvanceOrderStateOperation.js.map +1 -0
  11. package/dist/ApplyAccountCreditOperation.d.ts +97 -0
  12. package/dist/ApplyAccountCreditOperation.d.ts.map +1 -0
  13. package/dist/ApplyAccountCreditOperation.js +275 -0
  14. package/dist/ApplyAccountCreditOperation.js.map +1 -0
  15. package/dist/BaseDeliveryChannel.d.ts +106 -0
  16. package/dist/BaseDeliveryChannel.d.ts.map +1 -0
  17. package/dist/BaseDeliveryChannel.js +36 -0
  18. package/dist/BaseDeliveryChannel.js.map +1 -0
  19. package/dist/BasePaymentProvider.d.ts +239 -0
  20. package/dist/BasePaymentProvider.d.ts.map +1 -0
  21. package/dist/BasePaymentProvider.js +91 -0
  22. package/dist/BasePaymentProvider.js.map +1 -0
  23. package/dist/BundleBehavior.d.ts +139 -0
  24. package/dist/BundleBehavior.d.ts.map +1 -0
  25. package/dist/BundleBehavior.js +173 -0
  26. package/dist/BundleBehavior.js.map +1 -0
  27. package/dist/BundleEngine.d.ts +60 -0
  28. package/dist/BundleEngine.d.ts.map +1 -0
  29. package/dist/BundleEngine.js +197 -0
  30. package/dist/BundleEngine.js.map +1 -0
  31. package/dist/CancelSubscriptionOperation.d.ts +98 -0
  32. package/dist/CancelSubscriptionOperation.d.ts.map +1 -0
  33. package/dist/CancelSubscriptionOperation.js +317 -0
  34. package/dist/CancelSubscriptionOperation.js.map +1 -0
  35. package/dist/CapturePaymentOperation.d.ts +62 -0
  36. package/dist/CapturePaymentOperation.d.ts.map +1 -0
  37. package/dist/CapturePaymentOperation.js +463 -0
  38. package/dist/CapturePaymentOperation.js.map +1 -0
  39. package/dist/CheckEntitlementOperation.d.ts +27 -0
  40. package/dist/CheckEntitlementOperation.d.ts.map +1 -0
  41. package/dist/CheckEntitlementOperation.js +45 -0
  42. package/dist/CheckEntitlementOperation.js.map +1 -0
  43. package/dist/CheckoutSessionService.d.ts +258 -0
  44. package/dist/CheckoutSessionService.d.ts.map +1 -0
  45. package/dist/CheckoutSessionService.js +1557 -0
  46. package/dist/CheckoutSessionService.js.map +1 -0
  47. package/dist/DeliveryBehavior.d.ts +121 -0
  48. package/dist/DeliveryBehavior.d.ts.map +1 -0
  49. package/dist/DeliveryBehavior.js +145 -0
  50. package/dist/DeliveryBehavior.js.map +1 -0
  51. package/dist/DeliveryRecipientResolver.d.ts +38 -0
  52. package/dist/DeliveryRecipientResolver.d.ts.map +1 -0
  53. package/dist/DeliveryRecipientResolver.js +93 -0
  54. package/dist/DeliveryRecipientResolver.js.map +1 -0
  55. package/dist/DeliveryResolver.d.ts +14 -0
  56. package/dist/DeliveryResolver.d.ts.map +1 -0
  57. package/dist/DeliveryResolver.js +45 -0
  58. package/dist/DeliveryResolver.js.map +1 -0
  59. package/dist/EmailDeliveryChannel.d.ts +31 -0
  60. package/dist/EmailDeliveryChannel.d.ts.map +1 -0
  61. package/dist/EmailDeliveryChannel.js +158 -0
  62. package/dist/EmailDeliveryChannel.js.map +1 -0
  63. package/dist/EntitlementBehavior.d.ts +235 -0
  64. package/dist/EntitlementBehavior.d.ts.map +1 -0
  65. package/dist/EntitlementBehavior.js +330 -0
  66. package/dist/EntitlementBehavior.js.map +1 -0
  67. package/dist/EntitlementEngine.d.ts +97 -0
  68. package/dist/EntitlementEngine.d.ts.map +1 -0
  69. package/dist/EntitlementEngine.js +338 -0
  70. package/dist/EntitlementEngine.js.map +1 -0
  71. package/dist/EntitlementGrantClaimDriver.d.ts +42 -0
  72. package/dist/EntitlementGrantClaimDriver.d.ts.map +1 -0
  73. package/dist/EntitlementGrantClaimDriver.js +158 -0
  74. package/dist/EntitlementGrantClaimDriver.js.map +1 -0
  75. package/dist/EntitlementRead.d.ts +82 -0
  76. package/dist/EntitlementRead.d.ts.map +1 -0
  77. package/dist/EntitlementRead.js +368 -0
  78. package/dist/EntitlementRead.js.map +1 -0
  79. package/dist/FulfillOrderLinesOperation.d.ts +34 -0
  80. package/dist/FulfillOrderLinesOperation.d.ts.map +1 -0
  81. package/dist/FulfillOrderLinesOperation.js +208 -0
  82. package/dist/FulfillOrderLinesOperation.js.map +1 -0
  83. package/dist/FulfillmentBehavior.d.ts +101 -0
  84. package/dist/FulfillmentBehavior.d.ts.map +1 -0
  85. package/dist/FulfillmentBehavior.js +145 -0
  86. package/dist/FulfillmentBehavior.js.map +1 -0
  87. package/dist/GLAccountResolver.d.ts +123 -0
  88. package/dist/GLAccountResolver.d.ts.map +1 -0
  89. package/dist/GLAccountResolver.js +175 -0
  90. package/dist/GLAccountResolver.js.map +1 -0
  91. package/dist/GetFulfillmentQueueOperation.d.ts +35 -0
  92. package/dist/GetFulfillmentQueueOperation.d.ts.map +1 -0
  93. package/dist/GetFulfillmentQueueOperation.js +221 -0
  94. package/dist/GetFulfillmentQueueOperation.js.map +1 -0
  95. package/dist/GetOverdueWorklistOperation.d.ts +41 -0
  96. package/dist/GetOverdueWorklistOperation.d.ts.map +1 -0
  97. package/dist/GetOverdueWorklistOperation.js +210 -0
  98. package/dist/GetOverdueWorklistOperation.js.map +1 -0
  99. package/dist/GiftCardBehavior.d.ts +97 -0
  100. package/dist/GiftCardBehavior.d.ts.map +1 -0
  101. package/dist/GiftCardBehavior.js +121 -0
  102. package/dist/GiftCardBehavior.js.map +1 -0
  103. package/dist/GiftCardEngine.d.ts +59 -0
  104. package/dist/GiftCardEngine.d.ts.map +1 -0
  105. package/dist/GiftCardEngine.js +197 -0
  106. package/dist/GiftCardEngine.js.map +1 -0
  107. package/dist/GuestOrderClaimDriver.d.ts +36 -0
  108. package/dist/GuestOrderClaimDriver.d.ts.map +1 -0
  109. package/dist/GuestOrderClaimDriver.js +161 -0
  110. package/dist/GuestOrderClaimDriver.js.map +1 -0
  111. package/dist/InvoiceBehavior.d.ts +394 -0
  112. package/dist/InvoiceBehavior.d.ts.map +1 -0
  113. package/dist/InvoiceBehavior.js +496 -0
  114. package/dist/InvoiceBehavior.js.map +1 -0
  115. package/dist/InvoiceBuilder.d.ts +48 -0
  116. package/dist/InvoiceBuilder.d.ts.map +1 -0
  117. package/dist/InvoiceBuilder.js +352 -0
  118. package/dist/InvoiceBuilder.js.map +1 -0
  119. package/dist/InvoiceDisplay.d.ts +96 -0
  120. package/dist/InvoiceDisplay.d.ts.map +1 -0
  121. package/dist/InvoiceDisplay.js +121 -0
  122. package/dist/InvoiceDisplay.js.map +1 -0
  123. package/dist/ListEntitlementsOperation.d.ts +21 -0
  124. package/dist/ListEntitlementsOperation.d.ts.map +1 -0
  125. package/dist/ListEntitlementsOperation.js +39 -0
  126. package/dist/ListEntitlementsOperation.js.map +1 -0
  127. package/dist/ManualPaymentProvider.d.ts +19 -0
  128. package/dist/ManualPaymentProvider.d.ts.map +1 -0
  129. package/dist/ManualPaymentProvider.js +92 -0
  130. package/dist/ManualPaymentProvider.js.map +1 -0
  131. package/dist/OrderEntityServer.d.ts +542 -0
  132. package/dist/OrderEntityServer.d.ts.map +1 -0
  133. package/dist/OrderEntityServer.js +2100 -0
  134. package/dist/OrderEntityServer.js.map +1 -0
  135. package/dist/OrderJournalEntryFactory.d.ts +140 -0
  136. package/dist/OrderJournalEntryFactory.d.ts.map +1 -0
  137. package/dist/OrderJournalEntryFactory.js +466 -0
  138. package/dist/OrderJournalEntryFactory.js.map +1 -0
  139. package/dist/OrderLineEntityServer.d.ts +90 -0
  140. package/dist/OrderLineEntityServer.d.ts.map +1 -0
  141. package/dist/OrderLineEntityServer.js +260 -0
  142. package/dist/OrderLineEntityServer.js.map +1 -0
  143. package/dist/OrdersSettings.d.ts +36 -0
  144. package/dist/OrdersSettings.d.ts.map +1 -0
  145. package/dist/OrdersSettings.js +147 -0
  146. package/dist/OrdersSettings.js.map +1 -0
  147. package/dist/PaymentAllocationFactory.d.ts +128 -0
  148. package/dist/PaymentAllocationFactory.d.ts.map +1 -0
  149. package/dist/PaymentAllocationFactory.js +235 -0
  150. package/dist/PaymentAllocationFactory.js.map +1 -0
  151. package/dist/PaymentHeaderEntityServer.d.ts +180 -0
  152. package/dist/PaymentHeaderEntityServer.d.ts.map +1 -0
  153. package/dist/PaymentHeaderEntityServer.js +656 -0
  154. package/dist/PaymentHeaderEntityServer.js.map +1 -0
  155. package/dist/PaymentIntentService.d.ts +101 -0
  156. package/dist/PaymentIntentService.d.ts.map +1 -0
  157. package/dist/PaymentIntentService.js +150 -0
  158. package/dist/PaymentIntentService.js.map +1 -0
  159. package/dist/PaymentJournalEntryFactory.d.ts +99 -0
  160. package/dist/PaymentJournalEntryFactory.d.ts.map +1 -0
  161. package/dist/PaymentJournalEntryFactory.js +127 -0
  162. package/dist/PaymentJournalEntryFactory.js.map +1 -0
  163. package/dist/PaymentLineEntityServer.d.ts +73 -0
  164. package/dist/PaymentLineEntityServer.d.ts.map +1 -0
  165. package/dist/PaymentLineEntityServer.js +303 -0
  166. package/dist/PaymentLineEntityServer.js.map +1 -0
  167. package/dist/PaymentProviderBehavior.d.ts +222 -0
  168. package/dist/PaymentProviderBehavior.d.ts.map +1 -0
  169. package/dist/PaymentProviderBehavior.js +368 -0
  170. package/dist/PaymentProviderBehavior.js.map +1 -0
  171. package/dist/PaymentProviderResolver.d.ts +84 -0
  172. package/dist/PaymentProviderResolver.d.ts.map +1 -0
  173. package/dist/PaymentProviderResolver.js +220 -0
  174. package/dist/PaymentProviderResolver.js.map +1 -0
  175. package/dist/PaymentReversalFactory.d.ts +107 -0
  176. package/dist/PaymentReversalFactory.d.ts.map +1 -0
  177. package/dist/PaymentReversalFactory.js +174 -0
  178. package/dist/PaymentReversalFactory.js.map +1 -0
  179. package/dist/PaymentSettlement.d.ts +56 -0
  180. package/dist/PaymentSettlement.d.ts.map +1 -0
  181. package/dist/PaymentSettlement.js +243 -0
  182. package/dist/PaymentSettlement.js.map +1 -0
  183. package/dist/PaymentTermsBehavior.d.ts +109 -0
  184. package/dist/PaymentTermsBehavior.d.ts.map +1 -0
  185. package/dist/PaymentTermsBehavior.js +172 -0
  186. package/dist/PaymentTermsBehavior.js.map +1 -0
  187. package/dist/PaymentWebhookHandler.d.ts +103 -0
  188. package/dist/PaymentWebhookHandler.d.ts.map +1 -0
  189. package/dist/PaymentWebhookHandler.js +246 -0
  190. package/dist/PaymentWebhookHandler.js.map +1 -0
  191. package/dist/PreviewPriceOperation.d.ts +62 -0
  192. package/dist/PreviewPriceOperation.d.ts.map +1 -0
  193. package/dist/PreviewPriceOperation.js +161 -0
  194. package/dist/PreviewPriceOperation.js.map +1 -0
  195. package/dist/PriceOrderOperation.d.ts +93 -0
  196. package/dist/PriceOrderOperation.d.ts.map +1 -0
  197. package/dist/PriceOrderOperation.js +146 -0
  198. package/dist/PriceOrderOperation.js.map +1 -0
  199. package/dist/ProductPriceEntityServer.d.ts +34 -0
  200. package/dist/ProductPriceEntityServer.d.ts.map +1 -0
  201. package/dist/ProductPriceEntityServer.js +97 -0
  202. package/dist/ProductPriceEntityServer.js.map +1 -0
  203. package/dist/RefundPaymentOperation.d.ts +61 -0
  204. package/dist/RefundPaymentOperation.d.ts.map +1 -0
  205. package/dist/RefundPaymentOperation.js +177 -0
  206. package/dist/RefundPaymentOperation.js.map +1 -0
  207. package/dist/RevenueRecognition.d.ts +76 -0
  208. package/dist/RevenueRecognition.d.ts.map +1 -0
  209. package/dist/RevenueRecognition.js +133 -0
  210. package/dist/RevenueRecognition.js.map +1 -0
  211. package/dist/ReversalBehavior.d.ts +82 -0
  212. package/dist/ReversalBehavior.d.ts.map +1 -0
  213. package/dist/ReversalBehavior.js +100 -0
  214. package/dist/ReversalBehavior.js.map +1 -0
  215. package/dist/ReversalResolver.d.ts +37 -0
  216. package/dist/ReversalResolver.d.ts.map +1 -0
  217. package/dist/ReversalResolver.js +96 -0
  218. package/dist/ReversalResolver.js.map +1 -0
  219. package/dist/SpawnRenewalsOperation.d.ts +109 -0
  220. package/dist/SpawnRenewalsOperation.d.ts.map +1 -0
  221. package/dist/SpawnRenewalsOperation.js +295 -0
  222. package/dist/SpawnRenewalsOperation.js.map +1 -0
  223. package/dist/StoredValuePaymentProvider.d.ts +52 -0
  224. package/dist/StoredValuePaymentProvider.d.ts.map +1 -0
  225. package/dist/StoredValuePaymentProvider.js +205 -0
  226. package/dist/StoredValuePaymentProvider.js.map +1 -0
  227. package/dist/StripeACHPaymentProvider.d.ts +50 -0
  228. package/dist/StripeACHPaymentProvider.d.ts.map +1 -0
  229. package/dist/StripeACHPaymentProvider.js +211 -0
  230. package/dist/StripeACHPaymentProvider.js.map +1 -0
  231. package/dist/StripePaymentProvider.d.ts +83 -0
  232. package/dist/StripePaymentProvider.d.ts.map +1 -0
  233. package/dist/StripePaymentProvider.js +442 -0
  234. package/dist/StripePaymentProvider.js.map +1 -0
  235. package/dist/SubscriptionBehavior.d.ts +197 -0
  236. package/dist/SubscriptionBehavior.d.ts.map +1 -0
  237. package/dist/SubscriptionBehavior.js +415 -0
  238. package/dist/SubscriptionBehavior.js.map +1 -0
  239. package/dist/checkoutCaptureAlert.d.ts +16 -0
  240. package/dist/checkoutCaptureAlert.d.ts.map +1 -0
  241. package/dist/checkoutCaptureAlert.js +55 -0
  242. package/dist/checkoutCaptureAlert.js.map +1 -0
  243. package/dist/checkoutCaptureRetry.d.ts +27 -0
  244. package/dist/checkoutCaptureRetry.d.ts.map +1 -0
  245. package/dist/checkoutCaptureRetry.js +50 -0
  246. package/dist/checkoutCaptureRetry.js.map +1 -0
  247. package/dist/claimDriverHelpers.d.ts +15 -0
  248. package/dist/claimDriverHelpers.d.ts.map +1 -0
  249. package/dist/claimDriverHelpers.js +34 -0
  250. package/dist/claimDriverHelpers.js.map +1 -0
  251. package/dist/entity-names.d.ts +15 -0
  252. package/dist/entity-names.d.ts.map +1 -0
  253. package/dist/entity-names.js +15 -0
  254. package/dist/entity-names.js.map +1 -0
  255. package/dist/identityClaimContracts.d.ts +118 -0
  256. package/dist/identityClaimContracts.d.ts.map +1 -0
  257. package/dist/identityClaimContracts.js +58 -0
  258. package/dist/identityClaimContracts.js.map +1 -0
  259. package/dist/index.d.ts +126 -0
  260. package/dist/index.d.ts.map +1 -0
  261. package/dist/index.js +115 -0
  262. package/dist/index.js.map +1 -0
  263. package/dist/sql-guards.d.ts +78 -0
  264. package/dist/sql-guards.d.ts.map +1 -0
  265. package/dist/sql-guards.js +115 -0
  266. package/dist/sql-guards.js.map +1 -0
  267. package/package.json +50 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionBehavior.d.ts","sourceRoot":"","sources":["../src/SubscriptionBehavior.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,415 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ /**
8
+ * Subscription behaviour — the rules engine over `SubscriptionType` (plan D45).
9
+ *
10
+ * PATTERN — deliberately DIFFERENT from RevenueRecognitionDriver (D43):
11
+ *
12
+ * RevRec is BEHAVIOUR-first. The type row names a driver, and the driver computes everything,
13
+ * because "how is revenue earned over time" is genuinely an algorithm.
14
+ *
15
+ * Subscriptions are DATA-first. Anchor dates, cadences, concurrency, grace windows are
16
+ * CONFIGURATION. So the `SubscriptionType` COLUMNS are the rules, this base class reads them and
17
+ * implements the standard flows, and `SubscriptionType.DriverClass` is NULLABLE. Supply a driver
18
+ * only when a customer needs something the columns cannot express — and it SUBCLASSES this class,
19
+ * inheriting every rule it does not override:
20
+ *
21
+ * @RegisterClass(SubscriptionBehavior, 'AcmeCalendarYear')
22
+ * export class AcmeCalendarYear extends SubscriptionBehavior {
23
+ * protected override ComputeProration(...) { ... } // everything else inherited
24
+ * }
25
+ *
26
+ * A driver-only model would have forced a class per permutation of anchor × cadence × concurrency.
27
+ *
28
+ * This class is PURE: it computes dates, amounts, and decisions. It never touches the database and
29
+ * never opens a transaction — `OrderEntityServer` persists the results inside the booking
30
+ * transaction, which keeps transaction management in one place (same discipline as the rev-rec
31
+ * drivers).
32
+ *
33
+ * CONNECTS TO:
34
+ * TABLE: __mj_BizAppsOrders.SubscriptionType
35
+ * CALLER: OrderEntityServer (term creation at confirm)
36
+ */
37
+ import { RegisterClass } from '@memberjunction/global';
38
+ function money(v) {
39
+ return Math.round((v + Number.EPSILON) * 100) / 100;
40
+ }
41
+ /**
42
+ * Snap to UTC midnight — the ONLY safe basis for this arithmetic.
43
+ *
44
+ * Every date here is a calendar date, not an instant: `SubscriptionTerm.StartDate`/`EndDate` are
45
+ * SQL `DATE` columns, and a term "starts July 1" regardless of who is looking. But `OrderDate`
46
+ * round-trips through the database as UTC midnight while `new Date(y, m, d)` builds LOCAL midnight,
47
+ * so mixing the two puts them hours apart. West of Greenwich that is enough to make a term END
48
+ * BEFORE IT STARTS — a purchase on the anchor date resolves its "next anchor" to the SAME day it was
49
+ * bought, and `EndDate = anchor − 1 day` lands before the start, violating CK_SubscriptionTerm_Dates.
50
+ *
51
+ * So: normalize at the boundary, and do all shifting in UTC.
52
+ */
53
+ function utcDay(d) {
54
+ return new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()));
55
+ }
56
+ function addMonths(d, n) {
57
+ const day = d.getUTCDate();
58
+ const shifted = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth() + n, day));
59
+ // Clamp: Jan 31 + 1 month is Feb 28/29, not Mar 2/3.
60
+ if (shifted.getUTCDate() < day)
61
+ shifted.setUTCDate(0);
62
+ return shifted;
63
+ }
64
+ function addDays(d, n) {
65
+ return new Date(d.getTime() + n * 86400000);
66
+ }
67
+ function daysBetween(a, b) {
68
+ return Math.round((b.getTime() - a.getTime()) / 86400000);
69
+ }
70
+ /** Calendar date for user-facing explanations. */
71
+ function isoDay(d) {
72
+ return d.toISOString().slice(0, 10);
73
+ }
74
+ let SubscriptionBehavior = class SubscriptionBehavior {
75
+ /**
76
+ * The one entry point: given the rules and what already exists, decide what to do and compute
77
+ * the term. Override individual `protected` members below to customize a single aspect.
78
+ */
79
+ Decide(rawContext) {
80
+ // Normalize once, here, so every protected method below is guaranteed a calendar date.
81
+ const ctx = {
82
+ ...rawContext,
83
+ PurchaseDate: utcDay(rawContext.PurchaseDate),
84
+ Existing: rawContext.Existing
85
+ ? { ...rawContext.Existing, LatestTermEnd: rawContext.Existing.LatestTermEnd ? utcDay(rawContext.Existing.LatestTermEnd) : null }
86
+ : rawContext.Existing,
87
+ };
88
+ const scopeError = this.ValidateSubscriberScope(ctx);
89
+ if (scopeError) {
90
+ return { Action: 'Reject', RejectReason: scopeError };
91
+ }
92
+ const action = this.ChooseAction(ctx);
93
+ if (action === 'Reject') {
94
+ return {
95
+ Action: 'Reject',
96
+ RejectReason: `This subscription type (${ctx.Rules.Code}) does not allow a second concurrent ` +
97
+ `subscription for the same subscriber, and an active one already exists.`,
98
+ };
99
+ }
100
+ // An extension starts where the existing coverage ends — never overlapping it.
101
+ const extending = action === 'ExtendExisting';
102
+ const start = extending && ctx.Existing?.LatestTermEnd
103
+ ? addDays(ctx.Existing.LatestTermEnd, 1)
104
+ : utcDay(this.ComputeStartDate(ctx));
105
+ const end = this.ComputeEndDate(ctx, start, extending);
106
+ const { isProrated, factor } = this.ComputeProration(ctx, start, end, extending);
107
+ return {
108
+ Action: action,
109
+ SubscriptionID: action === 'CreateNew' ? undefined : ctx.Existing?.ID,
110
+ Term: {
111
+ StartDate: start,
112
+ EndDate: end,
113
+ TermNumber: (ctx.Existing?.LatestTermNumber ?? 0) + 1,
114
+ IsProrated: isProrated,
115
+ ProrationFactor: isProrated ? factor : null,
116
+ Amount: money(ctx.Amount * (isProrated ? factor : 1)),
117
+ },
118
+ };
119
+ }
120
+ // ─── Overridable pieces ────────────────────────────────────────────────────
121
+ ValidateSubscriberScope(ctx) {
122
+ const { SubscriberScope, BenefitModel, Code } = ctx.Rules;
123
+ const org = ctx.Subscriber.OrganizationID;
124
+ const person = ctx.Subscriber.PersonID;
125
+ if (!org && !person) {
126
+ return (`Subscription type ${Code} needs a subscriber, but neither a ship-to organization nor ` +
127
+ `a ship-to person is set on the order line, and the order header names no customer.`);
128
+ }
129
+ if (SubscriberScope === 'Organization' && !org) {
130
+ return `Subscription type ${Code} is organization-only, but no organization was resolved for this line.`;
131
+ }
132
+ if (SubscriberScope === 'Person' && !person) {
133
+ return `Subscription type ${Code} is individual-only, but no person was resolved for this line.`;
134
+ }
135
+ // The benefit model is the stricter of the two rules, so it is checked second.
136
+ if (BenefitModel === 'Organization' && !org) {
137
+ return (`Subscription type ${Code} benefits an organization's members, so it must be held by ` +
138
+ `an organization — none was resolved for this line, the order's ship-to, or its customer.`);
139
+ }
140
+ // `Holder` needs no extra check: SubscriberScope already guaranteed a holder exists, and
141
+ // the benefit simply follows them.
142
+ if (BenefitModel === 'Individual' && !person) {
143
+ // Note WHERE this can be satisfied from. The person is NOT required on the line: it
144
+ // falls back to the order's ship-to and then its customer, so a bulk order for one
145
+ // recipient states them once on the header. The failure only fires when no person is
146
+ // resolvable ANYWHERE, which genuinely leaves nobody to benefit.
147
+ return (`Subscription type ${Code} benefits a named person, but none was resolved from the ` +
148
+ `line's ship-to, the order's ship-to, or the order's customer.`);
149
+ }
150
+ return null;
151
+ }
152
+ /**
153
+ * The identity a duplicate is judged against — the heart of the concurrency rule.
154
+ *
155
+ * `Organization` keys on the ORG alone: a company holds ONE membership however many
156
+ * employees benefit, so a second purchase extends it. `Individual` keys on the PAIR, so
157
+ * ten seats bought for ten staff on one order are ten distinct subscriptions rather than ten
158
+ * collisions with each other. Getting this wrong is what made a bulk seat purchase impossible.
159
+ */
160
+ DedupeIdentity(rules, subscriber) {
161
+ switch (rules.BenefitModel) {
162
+ case 'Holder':
163
+ // Key on whichever side holds it, so a personal membership dedupes by person and an
164
+ // org-held one by org — without either leaking into the other's identity.
165
+ return subscriber.PersonID && !subscriber.OrganizationID
166
+ ? { OrganizationID: null, PersonID: subscriber.PersonID }
167
+ : { OrganizationID: subscriber.OrganizationID ?? null, PersonID: null };
168
+ case 'Organization':
169
+ // The org holds ONE, however many of its people benefit — so a second purchase
170
+ // extends rather than duplicating.
171
+ return { OrganizationID: subscriber.OrganizationID, PersonID: null };
172
+ case 'Individual':
173
+ // Both sides as resolved. For a seat that is (org, person), so ten staff are ten
174
+ // subscriptions. For a personal membership the org is simply absent, leaving the
175
+ // person as the key.
176
+ return { OrganizationID: subscriber.OrganizationID ?? null, PersonID: subscriber.PersonID };
177
+ }
178
+ }
179
+ ChooseAction(ctx) {
180
+ const existing = ctx.Existing;
181
+ if (!existing)
182
+ return 'CreateNew';
183
+ // A renewal continues THIS subscription, whatever the concurrency rule says (see IsRenewal).
184
+ // Reactivation still applies below when the subscription has lapsed — a renewal arriving
185
+ // after a lapse should revive it rather than silently extend a dead one.
186
+ const isActive = existing.Status === 'Active' || existing.Status === 'Trialing';
187
+ if (ctx.IsRenewal && isActive)
188
+ return 'ExtendExisting';
189
+ if (isActive) {
190
+ switch (ctx.Rules.ConcurrencyMode) {
191
+ case 'AllowMultiple': return 'CreateNew';
192
+ case 'ExtendExisting': return 'ExtendExisting';
193
+ case 'RejectDuplicate': return 'Reject';
194
+ }
195
+ }
196
+ // Lapsed or canceled — reactivation policy decides.
197
+ switch (ctx.Rules.ReactivationMode) {
198
+ case 'AlwaysCreateNew':
199
+ return 'CreateNew';
200
+ case 'ReactivateExisting':
201
+ return 'Reactivate';
202
+ case 'ReactivateWithinWindow': {
203
+ const window = ctx.Rules.ReactivationWindowDays ?? 0;
204
+ const end = existing.LatestTermEnd ? new Date(existing.LatestTermEnd) : null;
205
+ const withinWindow = end != null && daysBetween(end, ctx.PurchaseDate) <= window;
206
+ return withinWindow ? 'Reactivate' : 'CreateNew';
207
+ }
208
+ }
209
+ }
210
+ /** Immediate / Deferred / snap-forward to the calendar anchor. */
211
+ ComputeStartDate(ctx) {
212
+ const purchase = ctx.PurchaseDate;
213
+ switch (ctx.Rules.StartMode) {
214
+ case 'Immediate':
215
+ return purchase;
216
+ case 'Deferred':
217
+ return addDays(purchase, ctx.Rules.DeferredStartDays ?? 0);
218
+ case 'CalendarAnchored':
219
+ // ExtendToNextAnchor waits for the anchor; Prorate/ChargeFull start NOW and run to
220
+ // the anchor, which is what makes the first term partial.
221
+ return ctx.Rules.PartialPeriodMode === 'ExtendToNextAnchor'
222
+ ? this.NextAnchor(ctx, purchase)
223
+ : purchase;
224
+ }
225
+ }
226
+ ComputeEndDate(ctx, start, extending) {
227
+ const months = ctx.Rules.DefaultTermMonths ?? this.MonthsForCadence(ctx.Rules.BillingCadence, ctx.Rules.CustomCycleDays);
228
+ if (ctx.Rules.StartMode === 'CalendarAnchored' && !extending) {
229
+ // A partial first term runs from the purchase to the day before the next anchor.
230
+ const anchor = this.NextAnchor(ctx, start);
231
+ if (ctx.Rules.PartialPeriodMode !== 'ExtendToNextAnchor' && anchor.getTime() > start.getTime()) {
232
+ return addDays(anchor, -1);
233
+ }
234
+ }
235
+ return addDays(addMonths(start, months), -1);
236
+ }
237
+ /**
238
+ * Only `Prorate` actually reduces the amount. `ChargeFull` deliberately charges a whole term for
239
+ * a partial window — the customer pays full freight to join mid-cycle — and
240
+ * `ExtendToNextAnchor` has no partial window at all.
241
+ */
242
+ ComputeProration(ctx, start, end, extending) {
243
+ if (extending)
244
+ return { isProrated: false, factor: 1 };
245
+ if (ctx.Rules.StartMode !== 'CalendarAnchored')
246
+ return { isProrated: false, factor: 1 };
247
+ if (ctx.Rules.PartialPeriodMode !== 'Prorate')
248
+ return { isProrated: false, factor: 1 };
249
+ const fullMonths = ctx.Rules.DefaultTermMonths ?? 12;
250
+ const fullDays = daysBetween(start, addMonths(start, fullMonths));
251
+ const actualDays = daysBetween(start, end) + 1;
252
+ if (fullDays <= 0 || actualDays >= fullDays)
253
+ return { isProrated: false, factor: 1 };
254
+ return { isProrated: true, factor: Math.round((actualDays / fullDays) * 1e6) / 1e6 };
255
+ }
256
+ /** The next occurrence of AnchorMonth/AnchorDay strictly after `from`. */
257
+ NextAnchor(ctx, from) {
258
+ const month = (ctx.Rules.AnchorMonth ?? 1) - 1;
259
+ const day = ctx.Rules.AnchorDay ?? 1;
260
+ const base = utcDay(from);
261
+ let anchor = new Date(Date.UTC(base.getUTCFullYear(), month, day));
262
+ // Strictly after: buying ON the anchor date starts a FULL term at that anchor rather than
263
+ // a zero-length stub ending the day before itself.
264
+ if (anchor.getTime() <= base.getTime()) {
265
+ anchor = new Date(Date.UTC(base.getUTCFullYear() + 1, month, day));
266
+ }
267
+ return anchor;
268
+ }
269
+ MonthsForCadence(cadence, customDays) {
270
+ switch (cadence) {
271
+ case 'Monthly': return 1;
272
+ case 'Quarterly': return 3;
273
+ case 'Annual': return 12;
274
+ case 'Custom': return Math.max(1, Math.round((customDays ?? 30) / 30));
275
+ }
276
+ }
277
+ /** Months per recognition slice — `MatchBilling` follows the billing cadence. */
278
+ RecognitionMonths(rules) {
279
+ const cadence = rules.RecognitionCadence === 'MatchBilling' ? rules.BillingCadence : rules.RecognitionCadence;
280
+ return this.MonthsForCadence(cadence, rules.CustomCycleDays);
281
+ }
282
+ // ─── Cancellation (design §5) ──────────────────────────────────────────────
283
+ //
284
+ // The mechanics of a cancellation already work: a reversal order line with a negative quantity
285
+ // produces mirrored journal entries through the ordinary booking path (D16). What was missing is
286
+ // the POLICY — and the raw mechanic is terrible data entry. Amith's case: a subscription running
287
+ // 1/1-12/31, cancelled on 7/1, needs a line of quantity -0.5. The user should pick a DATE; the
288
+ // engine derives the fraction. That is what this computes.
289
+ /**
290
+ * Apply the type's cancellation rules to a request. Pure — computes dates and amounts, touches
291
+ * nothing. Override any protected piece below to change one aspect.
292
+ */
293
+ DecideCancellation(rawContext) {
294
+ const ctx = {
295
+ ...rawContext,
296
+ RequestDate: utcDay(rawContext.RequestDate),
297
+ Term: {
298
+ ...rawContext.Term,
299
+ StartDate: utcDay(rawContext.Term.StartDate),
300
+ EndDate: utcDay(rawContext.Term.EndDate),
301
+ },
302
+ };
303
+ const effective = this.ClampToTerm(ctx, this.ComputeCancellationDate(ctx));
304
+ const { amount, explanation } = this.ComputeRefund(ctx, effective);
305
+ const uncapped = money(Math.min(Math.max(amount, 0), ctx.Term.Amount));
306
+ // Round the FRACTION to the reversal line's own precision, then derive the refund back from
307
+ // it — not the other way round. `OrderLine.Quantity` is DECIMAL(18,4), so a fraction with
308
+ // more precision than that is silently truncated on insert, and the line total recomputed
309
+ // from the truncated quantity no longer matches the one stored at insert. The immutability
310
+ // trigger sees a "changed" financial column and rejects the very next write to that line.
311
+ // Deriving both numbers from one rounded fraction keeps the reversed revenue and the
312
+ // refunded cash exactly equal, which is the invariant that actually matters.
313
+ const rawFraction = ctx.Term.Amount > 0 ? uncapped / ctx.Term.Amount : 0;
314
+ const fraction = Math.round(rawFraction * 1e4) / 1e4;
315
+ const refund = money(ctx.Term.Amount * fraction);
316
+ return {
317
+ EffectiveDate: effective,
318
+ AccessThroughDate: addDays(effective, ctx.Rules.GracePeriodDays ?? 0),
319
+ RefundAmount: refund,
320
+ ReversalFraction: fraction,
321
+ // Riding the term out is not a cancellation of coverage — the customer got everything
322
+ // they paid for. Only a cut-short term is `Canceled`.
323
+ TermStatus: effective.getTime() >= ctx.Term.EndDate.getTime() ? 'Completed' : 'Canceled',
324
+ Explanation: explanation,
325
+ };
326
+ }
327
+ /** When coverage ends, per `CancellationMode`. */
328
+ ComputeCancellationDate(ctx) {
329
+ switch (ctx.Rules.CancellationMode) {
330
+ case 'Immediate':
331
+ return ctx.RequestDate;
332
+ case 'EndOfTerm':
333
+ return ctx.Term.EndDate;
334
+ case 'EndOfBillingPeriod':
335
+ return this.EndOfBillingPeriod(ctx);
336
+ }
337
+ }
338
+ /**
339
+ * The last day of the billing cycle the request falls in. Cycles are counted forward from the
340
+ * TERM START, not from the request — a monthly subscription started on the 12th bills on the
341
+ * 12th, and cancelling on the 20th runs to the 11th of the next month.
342
+ */
343
+ EndOfBillingPeriod(ctx) {
344
+ const step = this.MonthsForCadence(ctx.Rules.BillingCadence, ctx.Rules.CustomCycleDays);
345
+ let boundary = addMonths(ctx.Term.StartDate, step);
346
+ // Bounded by the term itself, so a mis-configured cadence cannot spin.
347
+ while (boundary.getTime() <= ctx.RequestDate.getTime() && boundary.getTime() < ctx.Term.EndDate.getTime()) {
348
+ boundary = addMonths(boundary, step);
349
+ }
350
+ return addDays(boundary, -1);
351
+ }
352
+ /** Cancellation never resurrects a finished term, and never ends coverage before it began. */
353
+ ClampToTerm(ctx, date) {
354
+ if (date.getTime() < ctx.Term.StartDate.getTime())
355
+ return ctx.Term.StartDate;
356
+ if (date.getTime() > ctx.Term.EndDate.getTime())
357
+ return ctx.Term.EndDate;
358
+ return date;
359
+ }
360
+ /** What to give back, per `CancellationRefundMode`. */
361
+ ComputeRefund(ctx, effective) {
362
+ const { Rules: rules, Term: term } = ctx;
363
+ switch (rules.CancellationRefundMode) {
364
+ case 'NoRefund':
365
+ return {
366
+ amount: 0,
367
+ explanation: `Coverage ends ${isoDay(effective)} (${rules.CancellationMode}). This subscription ` +
368
+ `type does not refund, so nothing is reversed.`,
369
+ };
370
+ case 'FullRefundWithinWindow': {
371
+ const window = rules.CancellationWindowDays ?? 0;
372
+ const elapsed = daysBetween(term.StartDate, ctx.RequestDate);
373
+ if (elapsed <= window) {
374
+ return {
375
+ amount: term.Amount,
376
+ explanation: `Cancelled ${elapsed} day(s) into the term, within the ${window}-day refund ` +
377
+ `window — the full ${term.Amount} is refunded and reversed.`,
378
+ };
379
+ }
380
+ return {
381
+ amount: 0,
382
+ explanation: `Cancelled ${elapsed} day(s) into the term, past the ${window}-day refund window. ` +
383
+ `Coverage ends ${isoDay(effective)} with no refund.`,
384
+ };
385
+ }
386
+ case 'ProrateUnused': {
387
+ // Inclusive day counts on both sides, so a cancellation on the term's first day
388
+ // refunds the whole term rather than all-but-one-day.
389
+ const totalDays = daysBetween(term.StartDate, term.EndDate) + 1;
390
+ const unusedDays = daysBetween(effective, term.EndDate);
391
+ if (totalDays <= 0 || unusedDays <= 0) {
392
+ return {
393
+ amount: 0,
394
+ explanation: `Coverage ends ${isoDay(effective)} with no unused period remaining.`,
395
+ };
396
+ }
397
+ const fraction = unusedDays / totalDays;
398
+ return {
399
+ amount: term.Amount * fraction,
400
+ explanation: `Coverage ends ${isoDay(effective)}; ${unusedDays} of ${totalDays} day(s) go ` +
401
+ `unused, so ${Math.round(fraction * 1000) / 10}% of the term is refunded.`,
402
+ };
403
+ }
404
+ }
405
+ }
406
+ };
407
+ SubscriptionBehavior = __decorate([
408
+ RegisterClass(SubscriptionBehavior, 'Default')
409
+ ], SubscriptionBehavior);
410
+ export { SubscriptionBehavior };
411
+ /** Tree-shaking anchor — the base behaviour must be registered before booking runs. */
412
+ export function LoadSubscriptionBehavior() {
413
+ // intentionally empty
414
+ }
415
+ //# sourceMappingURL=SubscriptionBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionBehavior.js","sourceRoot":"","sources":["../src/SubscriptionBehavior.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Durable signal when a settled checkout payment will never book on retry.
3
+ *
4
+ * The log marker is the alert floor. A Tasks row is the human-visible artifact —
5
+ * only if bizapps-tasks is installed AND a GENERAL TaskType can be resolved by
6
+ * Code. TypeID is NOT NULL with no default; writing a Task without it always fails.
7
+ *
8
+ * Reads and writes go through the generated Tasks subclasses, not `.Get()` / `.Set()`.
9
+ */
10
+ import { type UserInfo } from '@memberjunction/core';
11
+ export declare const CHECKOUT_CAPTURE_TASK_ENTITY = "MJ_BizApps_Tasks: Tasks";
12
+ export declare const CHECKOUT_CAPTURE_TASK_TYPE_ENTITY = "MJ_BizApps_Tasks: Task Types";
13
+ /** Seeded TaskType.Code — resolved at runtime, never a hardcoded GUID. */
14
+ export declare const CHECKOUT_CAPTURE_TASK_TYPE_CODE = "GENERAL";
15
+ export declare function raiseCheckoutCaptureTerminalAlert(orderID: string, sessionID: string | undefined, reason: string, contextUser?: UserInfo): Promise<void>;
16
+ //# sourceMappingURL=checkoutCaptureAlert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkoutCaptureAlert.d.ts","sourceRoot":"","sources":["../src/checkoutCaptureAlert.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAA+B,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQlF,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AACtE,eAAO,MAAM,iCAAiC,iCAAiC,CAAC;AAChF,0EAA0E;AAC1E,eAAO,MAAM,+BAA+B,YAAY,CAAC;AAEzD,wBAAsB,iCAAiC,CACnD,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,IAAI,CAAC,CAkDf"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Durable signal when a settled checkout payment will never book on retry.
3
+ *
4
+ * The log marker is the alert floor. A Tasks row is the human-visible artifact —
5
+ * only if bizapps-tasks is installed AND a GENERAL TaskType can be resolved by
6
+ * Code. TypeID is NOT NULL with no default; writing a Task without it always fails.
7
+ *
8
+ * Reads and writes go through the generated Tasks subclasses, not `.Get()` / `.Set()`.
9
+ */
10
+ import { LogError, Metadata, RunView } from '@memberjunction/core';
11
+ import { CHECKOUT_CAPTURE_TERMINAL_LOG_MARKER } from './checkoutCaptureRetry.js';
12
+ import { EscapeText } from './sql-guards.js';
13
+ export const CHECKOUT_CAPTURE_TASK_ENTITY = 'MJ_BizApps_Tasks: Tasks';
14
+ export const CHECKOUT_CAPTURE_TASK_TYPE_ENTITY = 'MJ_BizApps_Tasks: Task Types';
15
+ /** Seeded TaskType.Code — resolved at runtime, never a hardcoded GUID. */
16
+ export const CHECKOUT_CAPTURE_TASK_TYPE_CODE = 'GENERAL';
17
+ export async function raiseCheckoutCaptureTerminalAlert(orderID, sessionID, reason, contextUser) {
18
+ LogError(`${CHECKOUT_CAPTURE_TERMINAL_LOG_MARKER} Settled payment was not booked onto confirmed checkout order ${orderID}` +
19
+ `${sessionID ? ` session=${sessionID}` : ''}: ${reason}`);
20
+ if (!contextUser) {
21
+ return;
22
+ }
23
+ try {
24
+ const md = new Metadata();
25
+ if (!md.EntityByName(CHECKOUT_CAPTURE_TASK_ENTITY)) {
26
+ return;
27
+ }
28
+ const rv = new RunView();
29
+ const types = await rv.RunView({
30
+ EntityName: CHECKOUT_CAPTURE_TASK_TYPE_ENTITY,
31
+ ExtraFilter: `Code = '${EscapeText(CHECKOUT_CAPTURE_TASK_TYPE_CODE)}'`,
32
+ ResultType: 'entity_object',
33
+ MaxRows: 1,
34
+ }, contextUser);
35
+ const typeID = types.Success ? types.Results?.[0]?.ID : undefined;
36
+ if (!typeID) {
37
+ LogError(`${CHECKOUT_CAPTURE_TERMINAL_LOG_MARKER} No GENERAL TaskType — cannot raise a Task`);
38
+ return;
39
+ }
40
+ const task = await md.GetEntityObject(CHECKOUT_CAPTURE_TASK_ENTITY, contextUser);
41
+ task.NewRecord();
42
+ task.TypeID = typeID;
43
+ task.Name = `Checkout capture not booked: ${orderID}`;
44
+ task.Description =
45
+ `A Stripe payment settled and the checkout order is Confirmed, but Orders.CapturePayment was refused and will not succeed on retry.\n\nOrder: ${orderID}\nSession: ${sessionID ?? '(unknown)'}\nReason: ${reason}`;
46
+ task.Status = 'Open';
47
+ if (!(await task.Save())) {
48
+ LogError(`${CHECKOUT_CAPTURE_TERMINAL_LOG_MARKER} Could not raise a Task: ${task.LatestResult?.CompleteMessage ?? 'unknown error'}`);
49
+ }
50
+ }
51
+ catch (err) {
52
+ LogError(`${CHECKOUT_CAPTURE_TERMINAL_LOG_MARKER} Could not raise a Task: ${err instanceof Error ? err.message : String(err)}`);
53
+ }
54
+ }
55
+ //# sourceMappingURL=checkoutCaptureAlert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkoutCaptureAlert.js","sourceRoot":"","sources":["../src/checkoutCaptureAlert.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAiB,MAAM,sBAAsB,CAAC;AAKlF,OAAO,EAAE,oCAAoC,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AACtE,MAAM,CAAC,MAAM,iCAAiC,GAAG,8BAA8B,CAAC;AAChF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACnD,OAAe,EACf,SAA6B,EAC7B,MAAc,EACd,WAAsB;IAEtB,QAAQ,CACJ,GAAG,oCAAoC,iEAAiE,OAAO,EAAE;QAC7G,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,EAAE,CAC/D,CAAC;IACF,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO;IACX,CAAC;IACD,IAAI,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,4BAA4B,CAAC,EAAE,CAAC;YACjD,OAAO;QACX,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAC1B;YACI,UAAU,EAAE,iCAAiC;YAC7C,WAAW,EAAE,WAAW,UAAU,CAAC,+BAA+B,CAAC,GAAG;YACtE,UAAU,EAAE,eAAe;YAC3B,OAAO,EAAE,CAAC;SACb,EACD,WAAW,CACd,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,QAAQ,CAAC,GAAG,oCAAoC,4CAA4C,CAAC,CAAC;YAC9F,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,eAAe,CACjC,4BAA4B,EAC5B,WAAW,CACd,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,gCAAgC,OAAO,EAAE,CAAC;QACtD,IAAI,CAAC,WAAW;YACZ,gJAAgJ,OAAO,cAAc,SAAS,IAAI,WAAW,aAAa,MAAM,EAAE,CAAC;QACvN,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACvB,QAAQ,CACJ,GAAG,oCAAoC,4BAA4B,IAAI,CAAC,YAAY,EAAE,eAAe,IAAI,eAAe,EAAE,CAC7H,CAAC;QACN,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,QAAQ,CACJ,GAAG,oCAAoC,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACxH,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Classify a failed checkout CapturePayment as terminal vs transient so the
3
+ * payment webhook 500s (Stripe retries) only when a later attempt might work.
4
+ *
5
+ * Unclassified defaults to transient: convergence matters more than tidiness,
6
+ * and the event-age bound makes that bias affordable.
7
+ */
8
+ import type { WebhookEvent } from './BasePaymentProvider.js';
9
+ /** Stripe retries ~3 days; stop 500ing well inside that envelope. */
10
+ export declare const CHECKOUT_CAPTURE_RETRY_WINDOW_MS: number;
11
+ /** Grep / alert marker when a settled checkout payment will never book on retry. */
12
+ export declare const CHECKOUT_CAPTURE_TERMINAL_LOG_MARKER = "[CHECKOUT-CAPTURE-TERMINAL]";
13
+ /**
14
+ * CapturePayment `Blockers[].Code` values that will not change on replay.
15
+ * `CaptureFailed` is deliberately absent — it wraps a thrown save-path error.
16
+ */
17
+ export declare const TERMINAL_CAPTURE_BLOCKER_CODES: ReadonlySet<string>;
18
+ export declare const TERMINAL_CAPTURE_PRECHECKS: ReadonlySet<string>;
19
+ export declare function isTerminalCapturePrecheck(message: string): boolean;
20
+ /** True when a later CapturePayment might succeed. Empty / unknown codes retry. */
21
+ export declare function isCaptureRefusalRetryable(blockerCodes: readonly string[]): boolean;
22
+ /**
23
+ * Missing OccurredAt does NOT disable retries (the bound cannot be applied, and
24
+ * that is logged by the caller). Present-and-older-than-window → stop 500ing.
25
+ */
26
+ export declare function webhookEventExceedsRetryWindow(event: Pick<WebhookEvent, 'OccurredAt'>, nowMs?: number, windowMs?: number): boolean;
27
+ //# sourceMappingURL=checkoutCaptureRetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkoutCaptureRetry.d.ts","sourceRoot":"","sources":["../src/checkoutCaptureRetry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,qEAAqE;AACrE,eAAO,MAAM,gCAAgC,QAAsB,CAAC;AAEpE,oFAAoF;AACpF,eAAO,MAAM,oCAAoC,gCAAgC,CAAC;AAElF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CAe7D,CAAC;AAEH,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAIzD,CAAC;AAEH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAElE;AAED,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAKlF;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EACvC,KAAK,GAAE,MAAmB,EAC1B,QAAQ,GAAE,MAAyC,GACpD,OAAO,CAKT"}
@@ -0,0 +1,50 @@
1
+ /** Stripe retries ~3 days; stop 500ing well inside that envelope. */
2
+ export const CHECKOUT_CAPTURE_RETRY_WINDOW_MS = 12 * 60 * 60 * 1000;
3
+ /** Grep / alert marker when a settled checkout payment will never book on retry. */
4
+ export const CHECKOUT_CAPTURE_TERMINAL_LOG_MARKER = '[CHECKOUT-CAPTURE-TERMINAL]';
5
+ /**
6
+ * CapturePayment `Blockers[].Code` values that will not change on replay.
7
+ * `CaptureFailed` is deliberately absent — it wraps a thrown save-path error.
8
+ */
9
+ export const TERMINAL_CAPTURE_BLOCKER_CODES = new Set([
10
+ 'BadCompanyID',
11
+ 'BadPaymentIntentID',
12
+ 'BadPayerID',
13
+ 'BadOrderID',
14
+ 'NonPositiveAmount',
15
+ 'NonPositiveAllocation',
16
+ 'NoAllocations',
17
+ 'AllocationMismatch',
18
+ 'PayerAmbiguous',
19
+ 'OrderNotFound',
20
+ 'PaymentNotFound',
21
+ 'UnknownTender',
22
+ 'ReversalTender',
23
+ 'OrderCompanyMismatch',
24
+ ]);
25
+ export const TERMINAL_CAPTURE_PRECHECKS = new Set([
26
+ 'no bill-to party',
27
+ 'payment intent not found',
28
+ 'no context user',
29
+ ]);
30
+ export function isTerminalCapturePrecheck(message) {
31
+ return TERMINAL_CAPTURE_PRECHECKS.has(message);
32
+ }
33
+ /** True when a later CapturePayment might succeed. Empty / unknown codes retry. */
34
+ export function isCaptureRefusalRetryable(blockerCodes) {
35
+ if (!blockerCodes.length) {
36
+ return true;
37
+ }
38
+ return blockerCodes.some((code) => !TERMINAL_CAPTURE_BLOCKER_CODES.has(code));
39
+ }
40
+ /**
41
+ * Missing OccurredAt does NOT disable retries (the bound cannot be applied, and
42
+ * that is logged by the caller). Present-and-older-than-window → stop 500ing.
43
+ */
44
+ export function webhookEventExceedsRetryWindow(event, nowMs = Date.now(), windowMs = CHECKOUT_CAPTURE_RETRY_WINDOW_MS) {
45
+ if (!event.OccurredAt) {
46
+ return false;
47
+ }
48
+ return nowMs - event.OccurredAt.getTime() > windowMs;
49
+ }
50
+ //# sourceMappingURL=checkoutCaptureRetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkoutCaptureRetry.js","sourceRoot":"","sources":["../src/checkoutCaptureRetry.ts"],"names":[],"mappings":"AASA,qEAAqE;AACrE,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpE,oFAAoF;AACpF,MAAM,CAAC,MAAM,oCAAoC,GAAG,6BAA6B,CAAC;AAElF;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAwB,IAAI,GAAG,CAAC;IACvE,cAAc;IACd,oBAAoB;IACpB,YAAY;IACZ,YAAY;IACZ,mBAAmB;IACnB,uBAAuB;IACvB,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,eAAe;IACf,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,sBAAsB;CACzB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAwB,IAAI,GAAG,CAAC;IACnE,kBAAkB;IAClB,0BAA0B;IAC1B,iBAAiB;CACpB,CAAC,CAAC;AAEH,MAAM,UAAU,yBAAyB,CAAC,OAAe;IACrD,OAAO,0BAA0B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,yBAAyB,CAAC,YAA+B;IACrE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAC1C,KAAuC,EACvC,QAAgB,IAAI,CAAC,GAAG,EAAE,EAC1B,WAAmB,gCAAgC;IAEnD,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;AACzD,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @fileoverview Shared helper utilities for Identity Claim drivers in BizApps Orders.
3
+ *
4
+ * @module @mj-biz-apps/orders-core-entities-server/claimDriverHelpers
5
+ */
6
+ import { UserInfo, IEntityDataProvider, IMetadataProvider } from '@memberjunction/core';
7
+ /**
8
+ * Resolves or looks up the primary Person record associated with an authenticated UserInfo.
9
+ *
10
+ * @param user The authenticated UserInfo from the claim context
11
+ * @param provider Optional scoped entity/metadata provider
12
+ * @returns Person ID string if found, or null
13
+ */
14
+ export declare function resolvePersonID(user: UserInfo, provider?: IEntityDataProvider | IMetadataProvider | null): Promise<string | null>;
15
+ //# sourceMappingURL=claimDriverHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claimDriverHelpers.d.ts","sourceRoot":"","sources":["../src/claimDriverHelpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAW,QAAQ,EAAoB,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAInH;;;;;;GAMG;AACH,wBAAsB,eAAe,CACjC,IAAI,EAAE,QAAQ,EACd,QAAQ,CAAC,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,GAC1D,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB"}