@mj-biz-apps/orders-core-entities-server 5.1.0 → 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 (99) hide show
  1. package/README.md +3 -1
  2. package/dist/AdvanceOrderStateOperation.d.ts.map +1 -1
  3. package/dist/AdvanceOrderStateOperation.js +35 -50
  4. package/dist/AdvanceOrderStateOperation.js.map +1 -1
  5. package/dist/BasePaymentProvider.d.ts +24 -0
  6. package/dist/BasePaymentProvider.d.ts.map +1 -1
  7. package/dist/BasePaymentProvider.js +10 -0
  8. package/dist/BasePaymentProvider.js.map +1 -1
  9. package/dist/CancelSubscriptionOperation.d.ts +9 -1
  10. package/dist/CancelSubscriptionOperation.d.ts.map +1 -1
  11. package/dist/CancelSubscriptionOperation.js +15 -3
  12. package/dist/CancelSubscriptionOperation.js.map +1 -1
  13. package/dist/CheckEntitlementOperation.d.ts +27 -0
  14. package/dist/CheckEntitlementOperation.d.ts.map +1 -0
  15. package/dist/CheckEntitlementOperation.js +45 -0
  16. package/dist/CheckEntitlementOperation.js.map +1 -0
  17. package/dist/CheckoutSessionService.d.ts +258 -0
  18. package/dist/CheckoutSessionService.d.ts.map +1 -0
  19. package/dist/CheckoutSessionService.js +1557 -0
  20. package/dist/CheckoutSessionService.js.map +1 -0
  21. package/dist/EntitlementBehavior.d.ts +68 -0
  22. package/dist/EntitlementBehavior.d.ts.map +1 -1
  23. package/dist/EntitlementBehavior.js +126 -0
  24. package/dist/EntitlementBehavior.js.map +1 -1
  25. package/dist/EntitlementEngine.d.ts +11 -0
  26. package/dist/EntitlementEngine.d.ts.map +1 -1
  27. package/dist/EntitlementEngine.js +38 -1
  28. package/dist/EntitlementEngine.js.map +1 -1
  29. package/dist/EntitlementGrantClaimDriver.d.ts +42 -0
  30. package/dist/EntitlementGrantClaimDriver.d.ts.map +1 -0
  31. package/dist/EntitlementGrantClaimDriver.js +158 -0
  32. package/dist/EntitlementGrantClaimDriver.js.map +1 -0
  33. package/dist/EntitlementRead.d.ts +82 -0
  34. package/dist/EntitlementRead.d.ts.map +1 -0
  35. package/dist/EntitlementRead.js +368 -0
  36. package/dist/EntitlementRead.js.map +1 -0
  37. package/dist/FulfillOrderLinesOperation.d.ts.map +1 -1
  38. package/dist/FulfillOrderLinesOperation.js +6 -12
  39. package/dist/FulfillOrderLinesOperation.js.map +1 -1
  40. package/dist/FulfillmentBehavior.js +2 -2
  41. package/dist/FulfillmentBehavior.js.map +1 -1
  42. package/dist/GetFulfillmentQueueOperation.d.ts.map +1 -1
  43. package/dist/GetFulfillmentQueueOperation.js +2 -4
  44. package/dist/GetFulfillmentQueueOperation.js.map +1 -1
  45. package/dist/GuestOrderClaimDriver.d.ts +36 -0
  46. package/dist/GuestOrderClaimDriver.d.ts.map +1 -0
  47. package/dist/GuestOrderClaimDriver.js +161 -0
  48. package/dist/GuestOrderClaimDriver.js.map +1 -0
  49. package/dist/ListEntitlementsOperation.d.ts +21 -0
  50. package/dist/ListEntitlementsOperation.d.ts.map +1 -0
  51. package/dist/ListEntitlementsOperation.js +39 -0
  52. package/dist/ListEntitlementsOperation.js.map +1 -0
  53. package/dist/OrderEntityServer.d.ts.map +1 -1
  54. package/dist/OrderEntityServer.js +2 -5
  55. package/dist/OrderEntityServer.js.map +1 -1
  56. package/dist/OrdersSettings.d.ts +5 -0
  57. package/dist/OrdersSettings.d.ts.map +1 -1
  58. package/dist/OrdersSettings.js +46 -5
  59. package/dist/OrdersSettings.js.map +1 -1
  60. package/dist/PaymentWebhookHandler.d.ts.map +1 -1
  61. package/dist/PaymentWebhookHandler.js +52 -3
  62. package/dist/PaymentWebhookHandler.js.map +1 -1
  63. package/dist/PreviewPriceOperation.d.ts +10 -17
  64. package/dist/PreviewPriceOperation.d.ts.map +1 -1
  65. package/dist/PreviewPriceOperation.js +40 -28
  66. package/dist/PreviewPriceOperation.js.map +1 -1
  67. package/dist/PriceOrderOperation.d.ts +5 -8
  68. package/dist/PriceOrderOperation.d.ts.map +1 -1
  69. package/dist/PriceOrderOperation.js +5 -8
  70. package/dist/PriceOrderOperation.js.map +1 -1
  71. package/dist/StripePaymentProvider.d.ts +13 -1
  72. package/dist/StripePaymentProvider.d.ts.map +1 -1
  73. package/dist/StripePaymentProvider.js +73 -15
  74. package/dist/StripePaymentProvider.js.map +1 -1
  75. package/dist/checkoutCaptureAlert.d.ts +16 -0
  76. package/dist/checkoutCaptureAlert.d.ts.map +1 -0
  77. package/dist/checkoutCaptureAlert.js +55 -0
  78. package/dist/checkoutCaptureAlert.js.map +1 -0
  79. package/dist/checkoutCaptureRetry.d.ts +27 -0
  80. package/dist/checkoutCaptureRetry.d.ts.map +1 -0
  81. package/dist/checkoutCaptureRetry.js +50 -0
  82. package/dist/checkoutCaptureRetry.js.map +1 -0
  83. package/dist/claimDriverHelpers.d.ts +15 -0
  84. package/dist/claimDriverHelpers.d.ts.map +1 -0
  85. package/dist/claimDriverHelpers.js +34 -0
  86. package/dist/claimDriverHelpers.js.map +1 -0
  87. package/dist/identityClaimContracts.d.ts +118 -0
  88. package/dist/identityClaimContracts.d.ts.map +1 -0
  89. package/dist/identityClaimContracts.js +58 -0
  90. package/dist/identityClaimContracts.js.map +1 -0
  91. package/dist/index.d.ts +17 -5
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +16 -3
  94. package/dist/index.js.map +1 -1
  95. package/dist/sql-guards.d.ts +16 -0
  96. package/dist/sql-guards.d.ts.map +1 -1
  97. package/dist/sql-guards.js +21 -0
  98. package/dist/sql-guards.js.map +1 -1
  99. package/package.json +17 -9
@@ -0,0 +1,258 @@
1
+ /**
2
+ * @fileoverview CheckoutSessionService
3
+ *
4
+ * Provides generic server-side orchestration for anonymous checkout sessions, widget token
5
+ * initialization, draft order graph composition with polymorphic product extensions,
6
+ * and payment completion handling.
7
+ *
8
+ * @module @mj-biz-apps/orders-core-entities-server/CheckoutSessionService
9
+ */
10
+ import { UserInfo } from '@memberjunction/core';
11
+ import { type CheckoutWidgetConfiguration } from '@mj-biz-apps/orders-entities';
12
+ export interface InitSessionResult {
13
+ Success: boolean;
14
+ ErrorMessage?: string;
15
+ SessionID?: string;
16
+ ClientSessionKey?: string;
17
+ WidgetID?: string;
18
+ WidgetName?: string;
19
+ CompanyID?: string;
20
+ DistributionSlug?: string;
21
+ Configuration?: CheckoutWidgetConfiguration;
22
+ CustomCSS?: string | null;
23
+ CustomJS?: string | null;
24
+ ExpiresAt?: string;
25
+ }
26
+ export interface CheckoutAttendeeInput {
27
+ FirstName: string;
28
+ LastName: string;
29
+ Email: string;
30
+ Company?: string;
31
+ PersonID?: string;
32
+ DietaryPreferences?: string;
33
+ Comments?: string;
34
+ }
35
+ export type AttendeeInput = CheckoutAttendeeInput;
36
+ export interface CheckoutLineExtensionData {
37
+ /** Target extension entity name (e.g. 'MJ_BizApps_Orders: Event Order Lines') */
38
+ EntityName?: string;
39
+ /** Key-value dictionary of extension fields */
40
+ Fields?: Record<string, unknown>;
41
+ /** For multi-unit items (e.g. 3 tickets), array of per-unit field dictionaries */
42
+ Units?: Array<Record<string, unknown>>;
43
+ }
44
+ export interface CheckoutLineInput {
45
+ ProductID: string;
46
+ Quantity: number;
47
+ /** Generic polymorphic extension payload */
48
+ ExtensionData?: CheckoutLineExtensionData;
49
+ /** Generic field dictionary directly on line input */
50
+ ExtensionFields?: Record<string, unknown>;
51
+ /** Per-unit field dictionaries */
52
+ Units?: Array<Record<string, unknown>>;
53
+ /** Legacy attendee input compatibility */
54
+ Attendees?: CheckoutAttendeeInput[];
55
+ }
56
+ export interface CheckoutLineSummary {
57
+ ID: string;
58
+ ProductID: string;
59
+ Quantity: number;
60
+ UnitPrice: number;
61
+ ExtendedPrice: number;
62
+ Description?: string;
63
+ }
64
+ export interface UpdateDraftResult {
65
+ Success: boolean;
66
+ ErrorMessage?: string;
67
+ SessionID: string;
68
+ OrderID?: string;
69
+ OrderNumber?: string;
70
+ Subtotal: number;
71
+ Tax: number;
72
+ Adjustments: number;
73
+ TotalGross: number;
74
+ RequiresPayment: boolean;
75
+ Lines: CheckoutLineSummary[];
76
+ }
77
+ /** Outcome of booking CapturePayment after a checkout order is already confirmed. */
78
+ export interface BookCheckoutPaymentResult {
79
+ /** True when CapturePayment was invoked (or would have been, but a pre-check failed). */
80
+ Attempted: boolean;
81
+ /** True when the order is paid (already, or as a result of this call). */
82
+ Booked: boolean;
83
+ ErrorMessage?: string;
84
+ /**
85
+ * When Attempted && !Booked: a later attempt might succeed. Unclassified defaults
86
+ * true. The webhook 500s only when this is true (and the event is still inside
87
+ * the retry window).
88
+ */
89
+ Retryable?: boolean;
90
+ }
91
+ export interface CompleteCheckoutResult {
92
+ Success: boolean;
93
+ ErrorMessage?: string;
94
+ SessionID: string;
95
+ Status: string;
96
+ OrderID?: string;
97
+ OrderNumber?: string;
98
+ TotalGross?: number;
99
+ PaymentIntentID?: string;
100
+ ClientSecret?: string;
101
+ /**
102
+ * The IdentityClaim row id minted for the buyer's email (the actual verification token is
103
+ * only ever delivered in the claim email — it is never returned through the checkout path).
104
+ */
105
+ ClaimToken?: string;
106
+ }
107
+ export interface OpenSessionPaymentIntentResult {
108
+ Success: boolean;
109
+ ErrorMessage?: string;
110
+ SessionID: string;
111
+ PaymentIntentID?: string;
112
+ /** Returned to the caller for Stripe.js confirmation — never persisted. */
113
+ ClientSecret?: string;
114
+ Status?: string;
115
+ Amount?: number;
116
+ }
117
+ export declare class CheckoutSessionService {
118
+ /**
119
+ * Resolves a public distribution slug, validates widget status, and mints an active CheckoutSession.
120
+ */
121
+ static InitializeSession(slug: string, clientSessionKey: string, contextUser?: UserInfo): Promise<InitSessionResult>;
122
+ /**
123
+ * Strips obviously sensitive keys from a widget Configuration before it ships to an
124
+ * anonymous caller. `Configuration` is admin-authored JSON with an open index signature,
125
+ * so a future secret-shaped key (a webhook secret, an API credential, a server-side
126
+ * payment provider ref) must never ride along to the browser. `stripePublishableKey`
127
+ * is publishable by definition and survives.
128
+ */
129
+ /**
130
+ * Keys that may cross to an unauthenticated browser. Anything else in the
131
+ * admin-authored Configuration JSON stays on the server (allowlist, not denylist).
132
+ */
133
+ private static readonly PUBLIC_CONFIGURATION_KEYS;
134
+ private static sanitizeConfigurationForClient;
135
+ private static idsEqual;
136
+ /**
137
+ * Catalog this anonymous session is allowed to sell. Explicit `productId` /
138
+ * `allowedProductIds` / SKU-resolved id. An empty result is a misconfigured
139
+ * anonymous widget unless `allowAnyProduct` is set (open catalog still
140
+ * requires a company match).
141
+ */
142
+ private static resolveAllowedProductIds;
143
+ /** Marks expired-but-still-Open sessions Expired. Bounded; best-effort. */
144
+ static ReapExpiredOpenSessions(contextUser?: UserInfo, limit?: number): Promise<number>;
145
+ /**
146
+ * Verifies a caller-presented client session key against the session row's stored key.
147
+ * The session GUID alone must never be sufficient to drive a session — both values are
148
+ * required on every mutating call. Constant-time comparison over char codes (this package
149
+ * deliberately avoids Node globals, so no crypto.timingSafeEqual); a length mismatch is a
150
+ * plain refusal — it leaks only the length, which the caller already knows from their own key.
151
+ */
152
+ private static verifyClientSessionKey;
153
+ /**
154
+ * Enforces the session TTL on mutating calls (it was previously only enforced at
155
+ * session reuse). An expired-but-Open session is transitioned to 'Expired' (best-effort)
156
+ * and refused.
157
+ */
158
+ private static enforceSessionExpiry;
159
+ /**
160
+ * Discovers extension field definitions from metadata for the target product's extension entity.
161
+ */
162
+ /**
163
+ * ProductType.Configuration is the reusable presentation layer (customUI CSS/JS/theme,
164
+ * unitMode, quantity). Widget Configuration overlays it; widget wins on conflict.
165
+ */
166
+ private static mergeProductTypePresentation;
167
+ private static discoverExtensionFields;
168
+ /**
169
+ * Resolves — and optionally creates — a Person entity record based on provided fields.
170
+ * Lookup is by normalized email. Creation only happens when `createIfMissing` is true:
171
+ * draft updates resolve-only (so abandoned checkouts never mint Person rows), while
172
+ * completion creates the payer/attendee records it genuinely needs.
173
+ */
174
+ private static resolveOrEnsurePerson;
175
+ /**
176
+ * Creates an order line entity instance attached to the order's Lines collection.
177
+ */
178
+ private static createOrderLine;
179
+ /**
180
+ * Dynamically populates and coerces extension companion properties from a field map.
181
+ */
182
+ private static hydrateLineExtension;
183
+ /**
184
+ * Extracts unit field maps from an input line across all polymorphic formats.
185
+ */
186
+ private static extractUnitPayloads;
187
+ /**
188
+ * Builds and prices draft order lines in memory, persisting the checkout state to the
189
+ * CheckoutSession without creating premature draft rows in the OrderHeader database table.
190
+ */
191
+ static UpdateDraft(sessionID: string, clientSessionKey: string, email: string, lines: CheckoutLineInput[], contextUser?: UserInfo): Promise<UpdateDraftResult>;
192
+ /**
193
+ * Opens (or idempotently re-opens) a payment intent for a session's CURRENT server-priced
194
+ * total. This is the only way a checkout session acquires a `PaymentIntentID`.
195
+ *
196
+ * Everything money-shaped is resolved server-side, per the checkout pricing-input rule:
197
+ * the amount comes from the session's own priced snapshot (never the client), and the
198
+ * payment provider comes from the widget's admin-authored Configuration
199
+ * (`paymentProviderId`) — the client supplies only its session id + key. The gateway
200
+ * client secret is returned for Stripe.js confirmation and never persisted.
201
+ */
202
+ static OpenPaymentIntentForSession(sessionID: string, clientSessionKey: string, contextUser?: UserInfo): Promise<OpenSessionPaymentIntentResult>;
203
+ /**
204
+ * Completes an existing CheckoutSession, constructing the final Order,
205
+ * executing lifecycle confirmation (with accounting GL bookings and deferred revenue),
206
+ * and generating a claim token if unauthenticated.
207
+ */
208
+ static CompleteCheckout(sessionID: string, clientSessionKey: string, contextUser?: UserInfo): Promise<CompleteCheckoutResult>;
209
+ /**
210
+ * Verifies the paid-order gate for a session against a server-computed total. Returns a
211
+ * refusal message, or null when payment checks out. The intent must exist, belong to this
212
+ * session, be in a settled state, and cover the freshly re-priced total.
213
+ */
214
+ private static verifySessionPayment;
215
+ /**
216
+ * Gateway-side retry for a checkout whose order confirmed but CapturePayment did not book.
217
+ *
218
+ * `applyEvent` only stamps PaymentIntent status — it does not write a PaymentHeader (D19).
219
+ * Card checkout books via CapturePayment after Confirm. If that fails, two things retry
220
+ * the same idempotent CapturePayment (`checkout-complete:${session.ID}`):
221
+ * 1. POST /checkout/complete against a Confirmed session (client replay)
222
+ * 2. This method, from `payment_intent.succeeded` — including AlreadyApplied deliveries,
223
+ * so a 500 after the intent row is stamped still converges on the next Stripe retry.
224
+ *
225
+ * No-ops when the intent is not a confirmed checkout session (back-office captures).
226
+ */
227
+ static BookSettledCheckoutPaymentIfNeeded(paymentIntentID: string, contextUser: UserInfo): Promise<BookCheckoutPaymentResult>;
228
+ /**
229
+ * After the order is committed, book `Orders.CapturePayment` against the session's
230
+ * settled PaymentIntent and stamp PaymentIntent.OrderHeaderID.
231
+ *
232
+ * Fail-soft and post-commit: a capture problem must not un-confirm the order.
233
+ * Retries are CompleteCheckout replay and `BookSettledCheckoutPaymentIfNeeded`
234
+ * from the payment_intent.succeeded webhook (including AlreadyApplied).
235
+ */
236
+ private static applySettledPaymentToOrder;
237
+ private static captureFailed;
238
+ /**
239
+ * Pull the gateway's current intent status onto our row. Fail-soft: a retrieve
240
+ * error leaves the local status unchanged and the paid gate still refuses.
241
+ */
242
+ private static refreshIntentFromGateway;
243
+ /**
244
+ * Atomically stamps a Processing session as Confirmed with its completed order id — the
245
+ * repair path when the entity-level save cannot run after the order has committed.
246
+ */
247
+ private static stampSessionConfirmedAtomic;
248
+ /**
249
+ * Executes atomic single-use Compare-And-Swap (CAS) state transition on CheckoutSession
250
+ * from 'Open' to 'Processing'. Returns true iff this execution successfully transitioned the record.
251
+ */
252
+ private static latchSessionProcessingAtomic;
253
+ /**
254
+ * Reverts atomic CAS state from 'Processing' back to 'Open' if order confirmation fails.
255
+ */
256
+ private static revertSessionOpenAtomic;
257
+ }
258
+ //# sourceMappingURL=CheckoutSessionService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckoutSessionService.d.ts","sourceRoot":"","sources":["../src/CheckoutSessionService.ts"],"names":[],"mappings":"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"}