@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.
- package/README.md +3 -1
- package/dist/AdvanceOrderStateOperation.d.ts.map +1 -1
- package/dist/AdvanceOrderStateOperation.js +35 -50
- package/dist/AdvanceOrderStateOperation.js.map +1 -1
- package/dist/BasePaymentProvider.d.ts +24 -0
- package/dist/BasePaymentProvider.d.ts.map +1 -1
- package/dist/BasePaymentProvider.js +10 -0
- package/dist/BasePaymentProvider.js.map +1 -1
- package/dist/CancelSubscriptionOperation.d.ts +9 -1
- package/dist/CancelSubscriptionOperation.d.ts.map +1 -1
- package/dist/CancelSubscriptionOperation.js +15 -3
- package/dist/CancelSubscriptionOperation.js.map +1 -1
- package/dist/CheckEntitlementOperation.d.ts +27 -0
- package/dist/CheckEntitlementOperation.d.ts.map +1 -0
- package/dist/CheckEntitlementOperation.js +45 -0
- package/dist/CheckEntitlementOperation.js.map +1 -0
- package/dist/CheckoutSessionService.d.ts +258 -0
- package/dist/CheckoutSessionService.d.ts.map +1 -0
- package/dist/CheckoutSessionService.js +1557 -0
- package/dist/CheckoutSessionService.js.map +1 -0
- package/dist/EntitlementBehavior.d.ts +68 -0
- package/dist/EntitlementBehavior.d.ts.map +1 -1
- package/dist/EntitlementBehavior.js +126 -0
- package/dist/EntitlementBehavior.js.map +1 -1
- package/dist/EntitlementEngine.d.ts +11 -0
- package/dist/EntitlementEngine.d.ts.map +1 -1
- package/dist/EntitlementEngine.js +38 -1
- package/dist/EntitlementEngine.js.map +1 -1
- package/dist/EntitlementGrantClaimDriver.d.ts +42 -0
- package/dist/EntitlementGrantClaimDriver.d.ts.map +1 -0
- package/dist/EntitlementGrantClaimDriver.js +158 -0
- package/dist/EntitlementGrantClaimDriver.js.map +1 -0
- package/dist/EntitlementRead.d.ts +82 -0
- package/dist/EntitlementRead.d.ts.map +1 -0
- package/dist/EntitlementRead.js +368 -0
- package/dist/EntitlementRead.js.map +1 -0
- package/dist/FulfillOrderLinesOperation.d.ts.map +1 -1
- package/dist/FulfillOrderLinesOperation.js +6 -12
- package/dist/FulfillOrderLinesOperation.js.map +1 -1
- package/dist/FulfillmentBehavior.js +2 -2
- package/dist/FulfillmentBehavior.js.map +1 -1
- package/dist/GetFulfillmentQueueOperation.d.ts.map +1 -1
- package/dist/GetFulfillmentQueueOperation.js +2 -4
- package/dist/GetFulfillmentQueueOperation.js.map +1 -1
- package/dist/GuestOrderClaimDriver.d.ts +36 -0
- package/dist/GuestOrderClaimDriver.d.ts.map +1 -0
- package/dist/GuestOrderClaimDriver.js +161 -0
- package/dist/GuestOrderClaimDriver.js.map +1 -0
- package/dist/ListEntitlementsOperation.d.ts +21 -0
- package/dist/ListEntitlementsOperation.d.ts.map +1 -0
- package/dist/ListEntitlementsOperation.js +39 -0
- package/dist/ListEntitlementsOperation.js.map +1 -0
- package/dist/OrderEntityServer.d.ts.map +1 -1
- package/dist/OrderEntityServer.js +2 -5
- package/dist/OrderEntityServer.js.map +1 -1
- package/dist/OrdersSettings.d.ts +5 -0
- package/dist/OrdersSettings.d.ts.map +1 -1
- package/dist/OrdersSettings.js +46 -5
- package/dist/OrdersSettings.js.map +1 -1
- package/dist/PaymentWebhookHandler.d.ts.map +1 -1
- package/dist/PaymentWebhookHandler.js +52 -3
- package/dist/PaymentWebhookHandler.js.map +1 -1
- package/dist/PreviewPriceOperation.d.ts +10 -17
- package/dist/PreviewPriceOperation.d.ts.map +1 -1
- package/dist/PreviewPriceOperation.js +40 -28
- package/dist/PreviewPriceOperation.js.map +1 -1
- package/dist/PriceOrderOperation.d.ts +5 -8
- package/dist/PriceOrderOperation.d.ts.map +1 -1
- package/dist/PriceOrderOperation.js +5 -8
- package/dist/PriceOrderOperation.js.map +1 -1
- package/dist/StripePaymentProvider.d.ts +13 -1
- package/dist/StripePaymentProvider.d.ts.map +1 -1
- package/dist/StripePaymentProvider.js +73 -15
- package/dist/StripePaymentProvider.js.map +1 -1
- package/dist/checkoutCaptureAlert.d.ts +16 -0
- package/dist/checkoutCaptureAlert.d.ts.map +1 -0
- package/dist/checkoutCaptureAlert.js +55 -0
- package/dist/checkoutCaptureAlert.js.map +1 -0
- package/dist/checkoutCaptureRetry.d.ts +27 -0
- package/dist/checkoutCaptureRetry.d.ts.map +1 -0
- package/dist/checkoutCaptureRetry.js +50 -0
- package/dist/checkoutCaptureRetry.js.map +1 -0
- package/dist/claimDriverHelpers.d.ts +15 -0
- package/dist/claimDriverHelpers.d.ts.map +1 -0
- package/dist/claimDriverHelpers.js +34 -0
- package/dist/claimDriverHelpers.js.map +1 -0
- package/dist/identityClaimContracts.d.ts +118 -0
- package/dist/identityClaimContracts.d.ts.map +1 -0
- package/dist/identityClaimContracts.js +58 -0
- package/dist/identityClaimContracts.js.map +1 -0
- package/dist/index.d.ts +17 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -3
- package/dist/index.js.map +1 -1
- package/dist/sql-guards.d.ts +16 -0
- package/dist/sql-guards.d.ts.map +1 -1
- package/dist/sql-guards.js +21 -0
- package/dist/sql-guards.js.map +1 -1
- 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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"}
|