@mj-biz-apps/orders-ng 5.1.0 → 5.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/checkout-element/main.js +38080 -0
- package/dist/lib/checkout-widget/checkout-draft-line.d.ts +25 -0
- package/dist/lib/checkout-widget/checkout-draft-line.d.ts.map +1 -0
- package/dist/lib/checkout-widget/checkout-draft-line.js +46 -0
- package/dist/lib/checkout-widget/checkout-draft-line.js.map +1 -0
- package/dist/lib/checkout-widget/checkout-public-host.component.d.ts +80 -0
- package/dist/lib/checkout-widget/checkout-public-host.component.d.ts.map +1 -0
- package/dist/lib/checkout-widget/checkout-public-host.component.js +360 -0
- package/dist/lib/checkout-widget/checkout-public-host.component.js.map +1 -0
- package/dist/lib/checkout-widget/checkout-widget.component.d.ts +143 -0
- package/dist/lib/checkout-widget/checkout-widget.component.d.ts.map +1 -0
- package/dist/lib/checkout-widget/checkout-widget.component.js +873 -0
- package/dist/lib/checkout-widget/checkout-widget.component.js.map +1 -0
- package/dist/lib/custom/OrderHeader/order-header-form.component.d.ts +1 -0
- package/dist/lib/custom/OrderHeader/order-header-form.component.d.ts.map +1 -1
- package/dist/lib/custom/OrderHeader/order-header-form.component.js +10 -6
- package/dist/lib/custom/OrderHeader/order-header-form.component.js.map +1 -1
- package/dist/lib/custom/OrderHeader/order-lines-editor.component.d.ts +2 -0
- package/dist/lib/custom/OrderHeader/order-lines-editor.component.d.ts.map +1 -1
- package/dist/lib/custom/OrderHeader/order-lines-editor.component.js +37 -11
- package/dist/lib/custom/OrderHeader/order-lines-editor.component.js.map +1 -1
- package/dist/lib/custom/Product/widgets/product-accounting-widget.component.js +9 -3
- package/dist/lib/custom/Product/widgets/product-accounting-widget.component.js.map +1 -1
- package/dist/lib/custom/Product/widgets/product-gl-links.component.d.ts +460 -0
- package/dist/lib/custom/Product/widgets/product-gl-links.component.d.ts.map +1 -0
- package/dist/lib/custom/Product/widgets/product-gl-links.component.js +1229 -0
- package/dist/lib/custom/Product/widgets/product-gl-links.component.js.map +1 -0
- package/dist/lib/custom/custom-forms.module.d.ts +18 -17
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +5 -0
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/form-panels/party-order-stats.js +2 -2
- package/dist/lib/form-panels/party-order-stats.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.js +103 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutSession/mjbizappsorderscheckoutsession.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidget/mjbizappsorderscheckoutwidget.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidget/mjbizappsorderscheckoutwidget.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidget/mjbizappsorderscheckoutwidget.form.component.js +136 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidget/mjbizappsorderscheckoutwidget.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidgetDistribution/mjbizappsorderscheckoutwidgetdistribution.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidgetDistribution/mjbizappsorderscheckoutwidgetdistribution.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidgetDistribution/mjbizappsorderscheckoutwidgetdistribution.form.component.js +106 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersCheckoutWidgetDistribution/mjbizappsorderscheckoutwidgetdistribution.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/mjBizAppsOrdersEventOrderLine/mjbizappsorderseventorderline.form.component.js +9 -9
- package/dist/lib/generated/Entities/mjBizAppsOrdersEventOrderLine/mjbizappsorderseventorderline.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersEventProduct/mjbizappsorderseventproduct.form.component.js +12 -12
- package/dist/lib/generated/Entities/mjBizAppsOrdersEventProduct/mjbizappsorderseventproduct.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCompanyPolicy/mjbizappsordersordercompanypolicy.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCompanyPolicy/mjbizappsordersordercompanypolicy.form.component.js +16 -10
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderCompanyPolicy/mjbizappsordersordercompanypolicy.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.js +78 -52
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderHeader/mjbizappsordersorderheader.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.js +88 -82
- package/dist/lib/generated/Entities/mjBizAppsOrdersOrderLine/mjbizappsordersorderline.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentHeader/mjbizappsorderspaymentheader.form.component.js +3 -3
- package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentHeader/mjbizappsorderspaymentheader.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentIntent/mjbizappsorderspaymentintent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentIntent/mjbizappsorderspaymentintent.form.component.js +23 -5
- package/dist/lib/generated/Entities/mjBizAppsOrdersPaymentIntent/mjbizappsorderspaymentintent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.js +75 -69
- package/dist/lib/generated/Entities/mjBizAppsOrdersProduct/mjbizappsordersproduct.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductCategory/mjbizappsordersproductcategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductCategory/mjbizappsordersproductcategory.form.component.js +37 -31
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductCategory/mjbizappsordersproductcategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductType/mjbizappsordersproducttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductType/mjbizappsordersproducttype.form.component.js +24 -16
- package/dist/lib/generated/Entities/mjBizAppsOrdersProductType/mjbizappsordersproducttype.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +54 -51
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +27 -18
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/pages/catalog/pricing.page.d.ts +3 -24
- package/dist/lib/pages/catalog/pricing.page.d.ts.map +1 -1
- package/dist/lib/pages/catalog/pricing.page.js +158 -214
- package/dist/lib/pages/catalog/pricing.page.js.map +1 -1
- package/dist/lib/pages/catalog/products.page.d.ts +6 -29
- package/dist/lib/pages/catalog/products.page.d.ts.map +1 -1
- package/dist/lib/pages/catalog/products.page.js +255 -315
- package/dist/lib/pages/catalog/products.page.js.map +1 -1
- package/dist/lib/pages/orders/fulfillment.page.d.ts +14 -97
- package/dist/lib/pages/orders/fulfillment.page.d.ts.map +1 -1
- package/dist/lib/pages/orders/fulfillment.page.js +93 -258
- package/dist/lib/pages/orders/fulfillment.page.js.map +1 -1
- package/dist/lib/pages/orders/order-document.page.js +1 -1
- package/dist/lib/pages/orders/order-document.page.js.map +1 -1
- package/dist/lib/pages/orders/orders-dashboard.page.d.ts +29 -58
- package/dist/lib/pages/orders/orders-dashboard.page.d.ts.map +1 -1
- package/dist/lib/pages/orders/orders-dashboard.page.js +602 -352
- package/dist/lib/pages/orders/orders-dashboard.page.js.map +1 -1
- package/dist/lib/pages/orders/orders-list.page.d.ts +8 -58
- package/dist/lib/pages/orders/orders-list.page.d.ts.map +1 -1
- package/dist/lib/pages/orders/orders-list.page.js +52 -237
- package/dist/lib/pages/orders/orders-list.page.js.map +1 -1
- package/dist/lib/pages/payments/account-credit.page.d.ts +7 -17
- package/dist/lib/pages/payments/account-credit.page.d.ts.map +1 -1
- package/dist/lib/pages/payments/account-credit.page.js +99 -85
- package/dist/lib/pages/payments/account-credit.page.js.map +1 -1
- package/dist/lib/pages/payments/payments-dashboard.page.d.ts +4 -15
- package/dist/lib/pages/payments/payments-dashboard.page.d.ts.map +1 -1
- package/dist/lib/pages/payments/payments-dashboard.page.js +76 -111
- package/dist/lib/pages/payments/payments-dashboard.page.js.map +1 -1
- package/dist/lib/pages/payments/payments-list.page.d.ts +7 -41
- package/dist/lib/pages/payments/payments-list.page.d.ts.map +1 -1
- package/dist/lib/pages/payments/payments-list.page.js +51 -130
- package/dist/lib/pages/payments/payments-list.page.js.map +1 -1
- package/dist/lib/pages/receivables/customer-ar.page.d.ts +6 -8
- package/dist/lib/pages/receivables/customer-ar.page.d.ts.map +1 -1
- package/dist/lib/pages/receivables/customer-ar.page.js +112 -100
- package/dist/lib/pages/receivables/customer-ar.page.js.map +1 -1
- package/dist/lib/pages/receivables/overdue.page.d.ts +6 -3
- package/dist/lib/pages/receivables/overdue.page.d.ts.map +1 -1
- package/dist/lib/pages/receivables/overdue.page.js +61 -65
- package/dist/lib/pages/receivables/overdue.page.js.map +1 -1
- package/dist/lib/pages/receivables/subscriptions.page.d.ts +5 -9
- package/dist/lib/pages/receivables/subscriptions.page.d.ts.map +1 -1
- package/dist/lib/pages/receivables/subscriptions.page.js +139 -153
- package/dist/lib/pages/receivables/subscriptions.page.js.map +1 -1
- package/dist/lib/panels/order-stages.d.ts +12 -16
- package/dist/lib/panels/order-stages.d.ts.map +1 -1
- package/dist/lib/panels/order-stages.js +6 -42
- package/dist/lib/panels/order-stages.js.map +1 -1
- package/dist/lib/panels/party-orders-overview.component.d.ts +3 -1
- package/dist/lib/panels/party-orders-overview.component.d.ts.map +1 -1
- package/dist/lib/panels/party-orders-overview.component.js +18 -6
- package/dist/lib/panels/party-orders-overview.component.js.map +1 -1
- package/dist/lib/panels/status-stepper.component.d.ts +1 -1
- package/dist/lib/panels/status-stepper.component.d.ts.map +1 -1
- package/dist/lib/services/pricing-scheduler.service.d.ts +3 -4
- package/dist/lib/services/pricing-scheduler.service.d.ts.map +1 -1
- package/dist/lib/services/pricing-scheduler.service.js +3 -4
- package/dist/lib/services/pricing-scheduler.service.js.map +1 -1
- package/dist/public-api.d.ts +3 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -2
- package/dist/public-api.js.map +1 -1
- package/package.json +28 -16
- package/dist/lib/pages/orders/order-editor.page.d.ts +0 -547
- package/dist/lib/pages/orders/order-editor.page.d.ts.map +0 -1
- package/dist/lib/pages/orders/order-editor.page.js +0 -2269
- package/dist/lib/pages/orders/order-editor.page.js.map +0 -1
- package/dist/lib/pages/orders/order-workspace.page.d.ts +0 -120
- package/dist/lib/pages/orders/order-workspace.page.d.ts.map +0 -1
- package/dist/lib/pages/orders/order-workspace.page.js +0 -443
- package/dist/lib/pages/orders/order-workspace.page.js.map +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CheckoutSubmissionEvent } from './checkout-widget.component.js';
|
|
2
|
+
/**
|
|
3
|
+
* Maps a widget submission onto the anonymous draft line.
|
|
4
|
+
* Extension payloads are the introspected field maps from ProductType.OrderLineExtensionEntity
|
|
5
|
+
* (any companion entity — Event Order Lines is only one example). No product-type-specific keys.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildCheckoutDraftLine(productId: string, event: CheckoutSubmissionEvent): Record<string, unknown>;
|
|
8
|
+
/** Gateway already collected — skip Stripe.js confirm and go straight to complete. */
|
|
9
|
+
export declare function intentAlreadyCollected(status: unknown): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Stripe.js "A processing error occurred." on a retried Pay is usually
|
|
12
|
+
* `payment_intent_unexpected_state`: the PI was already confirmed (first attempt
|
|
13
|
+
* succeeded at Stripe, complete then failed locally). Treat as already paid and
|
|
14
|
+
* let complete retrieve status from the gateway.
|
|
15
|
+
*/
|
|
16
|
+
export declare function stripeConfirmAlreadyCollected(error: {
|
|
17
|
+
code?: string;
|
|
18
|
+
message?: string;
|
|
19
|
+
decline_code?: string;
|
|
20
|
+
} | null | undefined): boolean;
|
|
21
|
+
export declare function formatStripeError(error: {
|
|
22
|
+
code?: string;
|
|
23
|
+
message?: string;
|
|
24
|
+
} | null | undefined): string;
|
|
25
|
+
//# sourceMappingURL=checkout-draft-line.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout-draft-line.d.ts","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-draft-line.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E;;;;GAIG;AACH,wBAAgB,sBAAsB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,uBAAuB,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAG/D;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAO3I;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAIvG"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps a widget submission onto the anonymous draft line.
|
|
3
|
+
* Extension payloads are the introspected field maps from ProductType.OrderLineExtensionEntity
|
|
4
|
+
* (any companion entity — Event Order Lines is only one example). No product-type-specific keys.
|
|
5
|
+
*/
|
|
6
|
+
export function buildCheckoutDraftLine(productId, event) {
|
|
7
|
+
const line = {
|
|
8
|
+
ProductID: productId,
|
|
9
|
+
Quantity: event.quantity,
|
|
10
|
+
};
|
|
11
|
+
const fields = event.extensionData?.fields;
|
|
12
|
+
const units = event.extensionData?.units;
|
|
13
|
+
if ((fields && Object.keys(fields).length > 0) || (units && units.length > 0)) {
|
|
14
|
+
line.ExtensionData = {
|
|
15
|
+
EntityName: event.extensionData?.entityName,
|
|
16
|
+
Fields: fields,
|
|
17
|
+
Units: units,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
return line;
|
|
21
|
+
}
|
|
22
|
+
/** Gateway already collected — skip Stripe.js confirm and go straight to complete. */
|
|
23
|
+
export function intentAlreadyCollected(status) {
|
|
24
|
+
const s = String(status ?? '').toLowerCase();
|
|
25
|
+
return s === 'succeeded';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Stripe.js "A processing error occurred." on a retried Pay is usually
|
|
29
|
+
* `payment_intent_unexpected_state`: the PI was already confirmed (first attempt
|
|
30
|
+
* succeeded at Stripe, complete then failed locally). Treat as already paid and
|
|
31
|
+
* let complete retrieve status from the gateway.
|
|
32
|
+
*/
|
|
33
|
+
export function stripeConfirmAlreadyCollected(error) {
|
|
34
|
+
const code = String(error?.code ?? '').toLowerCase();
|
|
35
|
+
const msg = String(error?.message ?? '').toLowerCase();
|
|
36
|
+
if (code === 'payment_intent_unexpected_state') {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return msg.includes('already succeeded') || msg.includes('already been confirmed') || msg.includes('already been captured');
|
|
40
|
+
}
|
|
41
|
+
export function formatStripeError(error) {
|
|
42
|
+
const msg = error?.message?.trim() || 'Payment failed.';
|
|
43
|
+
const code = error?.code?.trim();
|
|
44
|
+
return code && !msg.includes(code) ? `${msg} (${code})` : msg;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=checkout-draft-line.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout-draft-line.js","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-draft-line.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAClC,SAAiB,EACjB,KAA8B;IAE9B,MAAM,IAAI,GAA4B;QAClC,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KAC3B,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC;IACzC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAI,CAAC,aAAa,GAAG;YACjB,UAAU,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU;YAC3C,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK;SACf,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,sBAAsB,CAAC,MAAe;IAClD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,OAAO,CAAC,KAAK,WAAW,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAoF;IAC9H,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,IAAI,KAAK,iCAAiC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAChI,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA6D;IAC3F,MAAM,GAAG,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAAiB,CAAC;IACxD,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public host for `<mj-checkout-widget>`: loads widget Configuration from the
|
|
3
|
+
* anonymous checkout edge, mounts Stripe when the SKU is paid, and drives
|
|
4
|
+
* initialize → draft → payment-intent → complete.
|
|
5
|
+
*
|
|
6
|
+
* Registered as the Angular Element `<mj-orders-checkout>` for GET /checkout/:slug
|
|
7
|
+
* (and usable as a normal Angular component in Explorer or any host app).
|
|
8
|
+
*/
|
|
9
|
+
import { AfterViewChecked, OnDestroy, OnInit } from '@angular/core';
|
|
10
|
+
import { type CheckoutSubmissionEvent, type CheckoutWidgetConfig } from './checkout-widget.component.js';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export { buildCheckoutDraftLine } from './checkout-draft-line.js';
|
|
13
|
+
interface StripeCard {
|
|
14
|
+
mount(target: string | HTMLElement): void;
|
|
15
|
+
on(event: string, handler: (ev: {
|
|
16
|
+
complete?: boolean;
|
|
17
|
+
}) => void): void;
|
|
18
|
+
unmount?(): void;
|
|
19
|
+
}
|
|
20
|
+
interface StripeInstance {
|
|
21
|
+
elements(): {
|
|
22
|
+
create(type: string): StripeCard;
|
|
23
|
+
};
|
|
24
|
+
confirmCardPayment(clientSecret: string, opts: {
|
|
25
|
+
payment_method: {
|
|
26
|
+
card: StripeCard;
|
|
27
|
+
billing_details?: {
|
|
28
|
+
email?: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
}): Promise<{
|
|
32
|
+
error?: {
|
|
33
|
+
message?: string;
|
|
34
|
+
};
|
|
35
|
+
paymentIntent?: {
|
|
36
|
+
status?: string;
|
|
37
|
+
};
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
declare global {
|
|
41
|
+
interface Window {
|
|
42
|
+
Stripe?: (publishableKey: string) => StripeInstance;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export declare class CheckoutPublicHostComponent implements OnInit, AfterViewChecked, OnDestroy {
|
|
46
|
+
private readonly hostEl;
|
|
47
|
+
private readonly cdr;
|
|
48
|
+
slug: string;
|
|
49
|
+
apiRoot: string;
|
|
50
|
+
config: CheckoutWidgetConfig | null;
|
|
51
|
+
sessionKey: string;
|
|
52
|
+
sessionId: string;
|
|
53
|
+
processing: boolean;
|
|
54
|
+
isPaymentReady: boolean;
|
|
55
|
+
stripePaymentMethodId: string | null;
|
|
56
|
+
errorMessage: string | null;
|
|
57
|
+
loadError: string | null;
|
|
58
|
+
successMessage: string | null;
|
|
59
|
+
orderNumber: string | null;
|
|
60
|
+
private stripe;
|
|
61
|
+
private card;
|
|
62
|
+
private cardMounted;
|
|
63
|
+
private destroyed;
|
|
64
|
+
get isFree(): boolean;
|
|
65
|
+
ngOnInit(): Promise<void>;
|
|
66
|
+
ngAfterViewChecked(): void;
|
|
67
|
+
ngOnDestroy(): void;
|
|
68
|
+
onCancelled(): void;
|
|
69
|
+
onSubmitted(event: CheckoutSubmissionEvent): Promise<void>;
|
|
70
|
+
private finish;
|
|
71
|
+
private mountStripe;
|
|
72
|
+
private loadStripe;
|
|
73
|
+
private readHostAttributes;
|
|
74
|
+
private clientKey;
|
|
75
|
+
private post;
|
|
76
|
+
private str;
|
|
77
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CheckoutPublicHostComponent, never>;
|
|
78
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CheckoutPublicHostComponent, "mj-orders-checkout", never, { "slug": { "alias": "slug"; "required": false; }; "apiRoot": { "alias": "apiRoot"; "required": false; }; }, {}, never, never, true, never>;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=checkout-public-host.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout-public-host.component.d.ts","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-public-host.component.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACH,gBAAgB,EAKhB,SAAS,EACT,MAAM,EAET,MAAM,eAAe,CAAC;AAEvB,OAAO,EAEH,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EAC5B,MAAM,6BAA6B,CAAC;;AAQrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,UAAU,UAAU;IAChB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAC1C,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACvE,OAAO,CAAC,IAAI,IAAI,CAAC;CACpB;AAED,UAAU,cAAc;IACpB,QAAQ,IAAI;QAAE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAC;IACjD,kBAAkB,CACd,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;QAAE,cAAc,EAAE;YAAE,IAAI,EAAE,UAAU,CAAC;YAAC,eAAe,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,GACrF,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,aAAa,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;CACrF;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,cAAc,CAAC;KACvD;CACJ;AAED,qBAOa,2BAA4B,YAAW,MAAM,EAAE,gBAAgB,EAAE,SAAS;IACnF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IACjE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IAEjC,IAAI,SAAM;IACV,OAAO,SAAe;IAE/B,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IAC3C,UAAU,SAAM;IAChB,SAAS,SAAM;IACf,UAAU,UAAS;IACnB,cAAc,UAAS;IACvB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAE1B,IAAW,MAAM,IAAI,OAAO,CAE3B;IAEY,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC/B,kBAAkB,IAAI,IAAI;IAc1B,WAAW,IAAI,IAAI;IASnB,WAAW,IAAI,IAAI;IAIb,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;YAgEzD,MAAM;YAkBN,WAAW;IAoBzB,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,SAAS;YA+BH,IAAI;IAYlB,OAAO,CAAC,GAAG;yCAtRF,2BAA2B;2CAA3B,2BAA2B;CAyRvC"}
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public host for `<mj-checkout-widget>`: loads widget Configuration from the
|
|
3
|
+
* anonymous checkout edge, mounts Stripe when the SKU is paid, and drives
|
|
4
|
+
* initialize → draft → payment-intent → complete.
|
|
5
|
+
*
|
|
6
|
+
* Registered as the Angular Element `<mj-orders-checkout>` for GET /checkout/:slug
|
|
7
|
+
* (and usable as a normal Angular component in Explorer or any host app).
|
|
8
|
+
*/
|
|
9
|
+
import { ChangeDetectorRef, Component, ElementRef, Input, inject, } from '@angular/core';
|
|
10
|
+
import { CommonModule } from '@angular/common';
|
|
11
|
+
import { MJCheckoutWidgetComponent, } from './checkout-widget.component.js';
|
|
12
|
+
import { buildCheckoutDraftLine, formatStripeError, intentAlreadyCollected, stripeConfirmAlreadyCollected, } from './checkout-draft-line.js';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
function CheckoutPublicHostComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
15
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
16
|
+
i0.ɵɵtext(1);
|
|
17
|
+
i0.ɵɵelementEnd();
|
|
18
|
+
} if (rf & 2) {
|
|
19
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
20
|
+
i0.ɵɵadvance();
|
|
21
|
+
i0.ɵɵtextInterpolate(ctx_r0.loadError);
|
|
22
|
+
} }
|
|
23
|
+
function CheckoutPublicHostComponent_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
+
i0.ɵɵelementStart(0, "p", 8);
|
|
25
|
+
i0.ɵɵtext(1);
|
|
26
|
+
i0.ɵɵelementEnd();
|
|
27
|
+
} if (rf & 2) {
|
|
28
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
29
|
+
i0.ɵɵadvance();
|
|
30
|
+
i0.ɵɵtextInterpolate1("Order ", ctx_r0.orderNumber);
|
|
31
|
+
} }
|
|
32
|
+
function CheckoutPublicHostComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "div", 5);
|
|
34
|
+
i0.ɵɵtext(2, "\u2713");
|
|
35
|
+
i0.ɵɵelementEnd();
|
|
36
|
+
i0.ɵɵelementStart(3, "h1", 6);
|
|
37
|
+
i0.ɵɵtext(4, "You're all set");
|
|
38
|
+
i0.ɵɵelementEnd();
|
|
39
|
+
i0.ɵɵelementStart(5, "p", 7);
|
|
40
|
+
i0.ɵɵtext(6);
|
|
41
|
+
i0.ɵɵelementEnd();
|
|
42
|
+
i0.ɵɵconditionalCreate(7, CheckoutPublicHostComponent_Conditional_2_Conditional_7_Template, 2, 1, "p", 8);
|
|
43
|
+
i0.ɵɵelementEnd();
|
|
44
|
+
} if (rf & 2) {
|
|
45
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
46
|
+
i0.ɵɵadvance(6);
|
|
47
|
+
i0.ɵɵtextInterpolate(ctx_r0.successMessage);
|
|
48
|
+
i0.ɵɵadvance();
|
|
49
|
+
i0.ɵɵconditional(ctx_r0.orderNumber ? 7 : -1);
|
|
50
|
+
} }
|
|
51
|
+
function CheckoutPublicHostComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
+
i0.ɵɵelementStart(0, "p", 3);
|
|
53
|
+
i0.ɵɵtext(1, "Loading checkout\u2026");
|
|
54
|
+
i0.ɵɵelementEnd();
|
|
55
|
+
} }
|
|
56
|
+
function CheckoutPublicHostComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
57
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
58
|
+
i0.ɵɵelementStart(0, "mj-checkout-widget", 9);
|
|
59
|
+
i0.ɵɵlistener("submitted", function CheckoutPublicHostComponent_Conditional_4_Template_mj_checkout_widget_submitted_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onSubmitted($event)); })("cancelled", function CheckoutPublicHostComponent_Conditional_4_Template_mj_checkout_widget_cancelled_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onCancelled()); });
|
|
60
|
+
i0.ɵɵelementEnd();
|
|
61
|
+
} if (rf & 2) {
|
|
62
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
63
|
+
i0.ɵɵproperty("config", ctx_r0.config)("distributionSlug", ctx_r0.slug)("sessionKey", ctx_r0.sessionKey)("isProcessing", ctx_r0.processing)("isPaymentReady", ctx_r0.isPaymentReady)("stripePaymentMethodId", ctx_r0.stripePaymentMethodId)("errorMessage", ctx_r0.errorMessage);
|
|
64
|
+
} }
|
|
65
|
+
export { buildCheckoutDraftLine } from './checkout-draft-line.js';
|
|
66
|
+
export class CheckoutPublicHostComponent {
|
|
67
|
+
hostEl = inject(ElementRef, { optional: true });
|
|
68
|
+
cdr = inject(ChangeDetectorRef);
|
|
69
|
+
slug = '';
|
|
70
|
+
apiRoot = '/checkout';
|
|
71
|
+
config = null;
|
|
72
|
+
sessionKey = '';
|
|
73
|
+
sessionId = '';
|
|
74
|
+
processing = false;
|
|
75
|
+
isPaymentReady = false;
|
|
76
|
+
stripePaymentMethodId = null;
|
|
77
|
+
errorMessage = null;
|
|
78
|
+
loadError = null;
|
|
79
|
+
successMessage = null;
|
|
80
|
+
orderNumber = null;
|
|
81
|
+
stripe = null;
|
|
82
|
+
card = null;
|
|
83
|
+
cardMounted = false;
|
|
84
|
+
destroyed = false;
|
|
85
|
+
get isFree() {
|
|
86
|
+
return (this.config?.unitPrice ?? 0) <= 0;
|
|
87
|
+
}
|
|
88
|
+
async ngOnInit() {
|
|
89
|
+
this.readHostAttributes();
|
|
90
|
+
if (!this.slug) {
|
|
91
|
+
this.loadError = 'This checkout link is missing its reference.';
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
this.sessionKey = this.clientKey();
|
|
95
|
+
if (!this.sessionKey) {
|
|
96
|
+
this.loadError = 'Checkout requires a secure random source. Open this page over HTTPS.';
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const init = await this.post('/initialize', {
|
|
101
|
+
slug: this.slug,
|
|
102
|
+
clientSessionKey: this.sessionKey,
|
|
103
|
+
});
|
|
104
|
+
if (!init?.Success) {
|
|
105
|
+
this.loadError = this.str(init?.ErrorMessage, 'This checkout is not available.');
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
this.sessionId = this.str(init.SessionID);
|
|
109
|
+
const cfg = (init.Configuration || {});
|
|
110
|
+
if (typeof init.CustomCSS === 'string' && init.CustomCSS && !cfg.customUI?.css) {
|
|
111
|
+
cfg.customUI = { ...(cfg.customUI || {}), css: init.CustomCSS };
|
|
112
|
+
}
|
|
113
|
+
if (typeof init.CustomJS === 'string' && init.CustomJS && !cfg.customUI?.js) {
|
|
114
|
+
cfg.customUI = { ...(cfg.customUI || {}), js: init.CustomJS };
|
|
115
|
+
}
|
|
116
|
+
if (!cfg.productId) {
|
|
117
|
+
this.loadError = 'This checkout is not configured with a product.';
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
this.config = cfg;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
this.loadError = 'Checkout is temporarily unavailable. Please try again.';
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
this.cdr.detectChanges();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
ngAfterViewChecked() {
|
|
130
|
+
if (this.destroyed || this.cardMounted || !this.config) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (!this.config.stripePublishableKey) {
|
|
134
|
+
this.isPaymentReady = true;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const mount = document.getElementById('stripe-card-element');
|
|
138
|
+
if (mount) {
|
|
139
|
+
void this.mountStripe(mount);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
ngOnDestroy() {
|
|
143
|
+
this.destroyed = true;
|
|
144
|
+
try {
|
|
145
|
+
this.card?.unmount?.();
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
/* already gone */
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
onCancelled() {
|
|
152
|
+
this.errorMessage = null;
|
|
153
|
+
}
|
|
154
|
+
async onSubmitted(event) {
|
|
155
|
+
if (this.processing || !this.config?.productId) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
this.processing = true;
|
|
159
|
+
this.errorMessage = null;
|
|
160
|
+
try {
|
|
161
|
+
const line = buildCheckoutDraftLine(this.config.productId, event);
|
|
162
|
+
const draft = await this.post('/draft', {
|
|
163
|
+
sessionId: this.sessionId,
|
|
164
|
+
clientSessionKey: this.sessionKey,
|
|
165
|
+
email: event.email,
|
|
166
|
+
lines: [line],
|
|
167
|
+
});
|
|
168
|
+
if (!draft?.Success) {
|
|
169
|
+
throw new Error(this.str(draft?.ErrorMessage, 'Could not price this checkout.'));
|
|
170
|
+
}
|
|
171
|
+
if (!draft.RequiresPayment) {
|
|
172
|
+
await this.finish();
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const intent = await this.post('/payment-intent', {
|
|
176
|
+
sessionId: this.sessionId,
|
|
177
|
+
clientSessionKey: this.sessionKey,
|
|
178
|
+
});
|
|
179
|
+
if (!intent?.Success) {
|
|
180
|
+
throw new Error(this.str(intent?.ErrorMessage, 'Could not start payment.'));
|
|
181
|
+
}
|
|
182
|
+
if (intentAlreadyCollected(intent.Status)) {
|
|
183
|
+
await this.finish();
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (!intent.ClientSecret) {
|
|
187
|
+
throw new Error(this.str(intent?.ErrorMessage, 'Could not start payment.'));
|
|
188
|
+
}
|
|
189
|
+
if (!this.stripe || !this.card) {
|
|
190
|
+
throw new Error('Card entry is not ready.');
|
|
191
|
+
}
|
|
192
|
+
const result = await this.stripe.confirmCardPayment(String(intent.ClientSecret), {
|
|
193
|
+
payment_method: {
|
|
194
|
+
card: this.card,
|
|
195
|
+
billing_details: { email: event.email },
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
if (result.error) {
|
|
199
|
+
console.warn('[mj-orders-checkout] Stripe confirmCardPayment', result.error);
|
|
200
|
+
if (!stripeConfirmAlreadyCollected(result.error)) {
|
|
201
|
+
throw new Error(formatStripeError(result.error));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
const stripeStatus = (result.paymentIntent?.status || '').toLowerCase();
|
|
206
|
+
if (stripeStatus && stripeStatus !== 'succeeded' && stripeStatus !== 'processing') {
|
|
207
|
+
throw new Error(`Payment was not confirmed (Stripe status: ${result.paymentIntent?.status}).`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
await this.finish();
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
this.errorMessage = err instanceof Error ? err.message : 'Checkout failed.';
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
this.processing = false;
|
|
217
|
+
this.cdr.detectChanges();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async finish() {
|
|
221
|
+
const done = await this.post('/complete', {
|
|
222
|
+
sessionId: this.sessionId,
|
|
223
|
+
clientSessionKey: this.sessionKey,
|
|
224
|
+
});
|
|
225
|
+
if (!done?.Success) {
|
|
226
|
+
throw new Error(this.str(done?.ErrorMessage, 'Could not complete checkout.'));
|
|
227
|
+
}
|
|
228
|
+
this.orderNumber = done.OrderNumber ? String(done.OrderNumber) : null;
|
|
229
|
+
this.successMessage =
|
|
230
|
+
this.config?.successMessage ||
|
|
231
|
+
(this.orderNumber ? `Thank you. Order ${this.orderNumber} is confirmed.` : 'Thank you. Your order is confirmed.');
|
|
232
|
+
if (this.config?.redirectUrl) {
|
|
233
|
+
window.location.href = this.config.redirectUrl;
|
|
234
|
+
}
|
|
235
|
+
this.cdr.detectChanges();
|
|
236
|
+
}
|
|
237
|
+
async mountStripe(mount) {
|
|
238
|
+
const pk = this.config?.stripePublishableKey;
|
|
239
|
+
if (!pk) {
|
|
240
|
+
this.isPaymentReady = true;
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
this.cardMounted = true;
|
|
244
|
+
try {
|
|
245
|
+
this.stripe = await this.loadStripe(pk);
|
|
246
|
+
this.card = this.stripe.elements().create('card');
|
|
247
|
+
this.card.mount(mount);
|
|
248
|
+
this.card.on('change', (ev) => {
|
|
249
|
+
this.isPaymentReady = !!ev.complete;
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
this.cardMounted = false;
|
|
254
|
+
this.errorMessage = err instanceof Error ? err.message : 'Could not load card entry.';
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
loadStripe(pk) {
|
|
258
|
+
if (this.stripe) {
|
|
259
|
+
return Promise.resolve(this.stripe);
|
|
260
|
+
}
|
|
261
|
+
return new Promise((resolve, reject) => {
|
|
262
|
+
const inst = () => {
|
|
263
|
+
if (!window.Stripe) {
|
|
264
|
+
reject(new Error('Stripe.js did not load'));
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
resolve(window.Stripe(pk));
|
|
268
|
+
};
|
|
269
|
+
if (window.Stripe) {
|
|
270
|
+
inst();
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
const s = document.createElement('script');
|
|
274
|
+
s.src = 'https://js.stripe.com/v3/';
|
|
275
|
+
s.onload = () => inst();
|
|
276
|
+
s.onerror = () => reject(new Error('Could not load Stripe.js'));
|
|
277
|
+
document.head.appendChild(s);
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
readHostAttributes() {
|
|
281
|
+
const el = this.hostEl?.nativeElement;
|
|
282
|
+
if (!el) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
const slug = el.getAttribute('slug') || el.getAttribute('data-slug');
|
|
286
|
+
if (slug) {
|
|
287
|
+
this.slug = slug;
|
|
288
|
+
}
|
|
289
|
+
const apiRoot = el.getAttribute('api-root') || el.getAttribute('data-api-root');
|
|
290
|
+
if (apiRoot) {
|
|
291
|
+
this.apiRoot = apiRoot.replace(/\/+$/, '');
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
clientKey() {
|
|
295
|
+
const storageKey = `mj-checkout-key:${this.slug}`;
|
|
296
|
+
try {
|
|
297
|
+
const existing = sessionStorage.getItem(storageKey);
|
|
298
|
+
if (existing) {
|
|
299
|
+
return existing;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
/* private mode */
|
|
304
|
+
}
|
|
305
|
+
let key = '';
|
|
306
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
307
|
+
key = crypto.randomUUID();
|
|
308
|
+
}
|
|
309
|
+
else if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
310
|
+
const b = new Uint8Array(16);
|
|
311
|
+
crypto.getRandomValues(b);
|
|
312
|
+
b[6] = (b[6] & 0x0f) | 0x40;
|
|
313
|
+
b[8] = (b[8] & 0x3f) | 0x80;
|
|
314
|
+
const hex = Array.from(b, (n) => n.toString(16).padStart(2, '0'));
|
|
315
|
+
key = `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10, 16).join('')}`;
|
|
316
|
+
}
|
|
317
|
+
if (key) {
|
|
318
|
+
try {
|
|
319
|
+
sessionStorage.setItem(storageKey, key);
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
/* ignore */
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return key;
|
|
326
|
+
}
|
|
327
|
+
async post(path, body) {
|
|
328
|
+
const res = await fetch(`${this.apiRoot}${path}`, {
|
|
329
|
+
method: 'POST',
|
|
330
|
+
headers: { 'Content-Type': 'application/json' },
|
|
331
|
+
credentials: 'same-origin',
|
|
332
|
+
body: JSON.stringify(body),
|
|
333
|
+
});
|
|
334
|
+
const json = (await res.json());
|
|
335
|
+
json._httpStatus = res.status;
|
|
336
|
+
return json;
|
|
337
|
+
}
|
|
338
|
+
str(value, fallback = '') {
|
|
339
|
+
return typeof value === 'string' && value ? value : fallback;
|
|
340
|
+
}
|
|
341
|
+
static ɵfac = function CheckoutPublicHostComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CheckoutPublicHostComponent)(); };
|
|
342
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CheckoutPublicHostComponent, selectors: [["mj-orders-checkout"]], inputs: { slug: "slug", apiRoot: "apiRoot" }, decls: 5, vars: 1, consts: [[1, "mj-checkout-public"], ["role", "alert", 1, "mj-widget-error-banner"], ["role", "status", 1, "mj-checkout-success"], ["role", "status", 1, "mj-checkout-public__status"], [3, "config", "distributionSlug", "sessionKey", "isProcessing", "isPaymentReady", "stripePaymentMethodId", "errorMessage"], ["aria-hidden", "true", 1, "mj-checkout-success__icon"], [1, "mj-checkout-success__title"], [1, "mj-checkout-success__msg"], [1, "mj-checkout-success__order"], [3, "submitted", "cancelled", "config", "distributionSlug", "sessionKey", "isProcessing", "isPaymentReady", "stripePaymentMethodId", "errorMessage"]], template: function CheckoutPublicHostComponent_Template(rf, ctx) { if (rf & 1) {
|
|
343
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
344
|
+
i0.ɵɵconditionalCreate(1, CheckoutPublicHostComponent_Conditional_1_Template, 2, 1, "div", 1)(2, CheckoutPublicHostComponent_Conditional_2_Template, 8, 2, "div", 2)(3, CheckoutPublicHostComponent_Conditional_3_Template, 2, 0, "p", 3)(4, CheckoutPublicHostComponent_Conditional_4_Template, 1, 7, "mj-checkout-widget", 4);
|
|
345
|
+
i0.ɵɵelementEnd();
|
|
346
|
+
} if (rf & 2) {
|
|
347
|
+
i0.ɵɵadvance();
|
|
348
|
+
i0.ɵɵconditional(ctx.loadError ? 1 : ctx.successMessage ? 2 : !ctx.config ? 3 : 4);
|
|
349
|
+
} }, dependencies: [CommonModule, MJCheckoutWidgetComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n}\n\n.mj-checkout-public[_ngcontent-%COMP%] {\n max-width: 580px;\n margin: 0 auto;\n}\n\n.mj-checkout-public__status[_ngcontent-%COMP%] {\n text-align: center;\n color: #64748b;\n font-size: 0.95rem;\n padding: 2rem 0;\n}\n\n.mj-widget-error-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #fef2f2;\n border: 1px solid #f87171;\n color: #991b1b;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 0.875rem;\n}\n\n.mj-checkout-success[_ngcontent-%COMP%] {\n text-align: center;\n background: #ffffff;\n border: 1px solid #e2e8f0;\n border-radius: 10px;\n padding: 2rem 1.5rem;\n box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);\n}\n\n.mj-checkout-success__icon[_ngcontent-%COMP%] {\n width: 3rem;\n height: 3rem;\n margin: 0 auto 1rem;\n border-radius: 50%;\n background: #dcfce7;\n color: #16a34a;\n font-size: 1.5rem;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.mj-checkout-success__title[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem;\n font-size: 1.5rem;\n font-weight: 800;\n color: #0f172a;\n}\n\n.mj-checkout-success__msg[_ngcontent-%COMP%], \n.mj-checkout-success__order[_ngcontent-%COMP%] {\n margin: 0;\n color: #64748b;\n font-size: 0.95rem;\n line-height: 1.5;\n}\n\n.mj-checkout-success__order[_ngcontent-%COMP%] {\n margin-top: 0.75rem;\n font-weight: 600;\n color: #334155;\n}"] });
|
|
350
|
+
}
|
|
351
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CheckoutPublicHostComponent, [{
|
|
352
|
+
type: Component,
|
|
353
|
+
args: [{ selector: 'mj-orders-checkout', standalone: true, imports: [CommonModule, MJCheckoutWidgetComponent], template: "<div class=\"mj-checkout-public\">\n @if (loadError) {\n <div class=\"mj-widget-error-banner\" role=\"alert\">{{ loadError }}</div>\n } @else if (successMessage) {\n <div class=\"mj-checkout-success\" role=\"status\">\n <div class=\"mj-checkout-success__icon\" aria-hidden=\"true\">\u2713</div>\n <h1 class=\"mj-checkout-success__title\">You're all set</h1>\n <p class=\"mj-checkout-success__msg\">{{ successMessage }}</p>\n @if (orderNumber) {\n <p class=\"mj-checkout-success__order\">Order {{ orderNumber }}</p>\n }\n </div>\n } @else if (!config) {\n <p class=\"mj-checkout-public__status\" role=\"status\">Loading checkout\u2026</p>\n } @else {\n <mj-checkout-widget\n [config]=\"config\"\n [distributionSlug]=\"slug\"\n [sessionKey]=\"sessionKey\"\n [isProcessing]=\"processing\"\n [isPaymentReady]=\"isPaymentReady\"\n [stripePaymentMethodId]=\"stripePaymentMethodId\"\n [errorMessage]=\"errorMessage\"\n (submitted)=\"onSubmitted($event)\"\n (cancelled)=\"onCancelled()\">\n </mj-checkout-widget>\n }\n</div>\n", styles: [":host {\n display: block;\n}\n\n.mj-checkout-public {\n max-width: 580px;\n margin: 0 auto;\n}\n\n.mj-checkout-public__status {\n text-align: center;\n color: #64748b;\n font-size: 0.95rem;\n padding: 2rem 0;\n}\n\n.mj-widget-error-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #fef2f2;\n border: 1px solid #f87171;\n color: #991b1b;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 0.875rem;\n}\n\n.mj-checkout-success {\n text-align: center;\n background: #ffffff;\n border: 1px solid #e2e8f0;\n border-radius: 10px;\n padding: 2rem 1.5rem;\n box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);\n}\n\n.mj-checkout-success__icon {\n width: 3rem;\n height: 3rem;\n margin: 0 auto 1rem;\n border-radius: 50%;\n background: #dcfce7;\n color: #16a34a;\n font-size: 1.5rem;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.mj-checkout-success__title {\n margin: 0 0 0.5rem;\n font-size: 1.5rem;\n font-weight: 800;\n color: #0f172a;\n}\n\n.mj-checkout-success__msg,\n.mj-checkout-success__order {\n margin: 0;\n color: #64748b;\n font-size: 0.95rem;\n line-height: 1.5;\n}\n\n.mj-checkout-success__order {\n margin-top: 0.75rem;\n font-weight: 600;\n color: #334155;\n}\n"] }]
|
|
354
|
+
}], null, { slug: [{
|
|
355
|
+
type: Input
|
|
356
|
+
}], apiRoot: [{
|
|
357
|
+
type: Input
|
|
358
|
+
}] }); })();
|
|
359
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CheckoutPublicHostComponent, { className: "CheckoutPublicHostComponent", filePath: "lib/checkout-widget/checkout-public-host.component.ts", lineNumber: 61 }); })();
|
|
360
|
+
//# sourceMappingURL=checkout-public-host.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout-public-host.component.js","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-public-host.component.ts","../../../src/lib/checkout-widget/checkout-public-host.component.html"],"names":[],"mappings":"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"}
|