@edx/frontend-app-subscription-manage 1.24.0 → 1.25.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.
@@ -61,7 +61,7 @@ const OrderPurchases = () => {
61
61
  console.error('Unable to load payment receipt.', error);
62
62
  }
63
63
  });
64
- return (_jsxs("section", { className: "manage-section mt-5", "aria-labelledby": "order-purchases-title", "aria-live": "polite", "aria-busy": purchaseHistoryQuery.isLoading || purchaseHistoryQuery.isFetching, children: [_jsx("h2", { id: "order-purchases-title", className: "manage-section__title h3 font-weight-bold text-primary-500 mb-1", children: formatMessage(messages.otherPurchasesTitle) }), purchaseHistoryQuery.isError && (_jsx(Alert, { variant: "danger", children: formatMessage(messages.purchaseHistoryError) })), !purchaseHistoryQuery.isError && !purchaseHistoryQuery.isSuccess && (_jsx("div", { className: "d-flex justify-content-center py-4", children: _jsx(Spinner, { animation: "border", screenReaderText: formatMessage(messages.loadingOrders) }) })), purchaseHistoryQuery.isSuccess && orders.length === 0 && (_jsx("p", { className: "manage-section__subtitle text-gray-700 mb-3", children: formatMessage(messages.coursePurchasesEmptyMessage) })), purchaseHistoryQuery.isSuccess && orders.length > 0 && (_jsxs(_Fragment, { children: [_jsx(OrdersList, { orders: orders, onViewReceipt: handleViewReceipt }), _jsx(RefundNotice, {})] }))] }));
64
+ return (_jsxs("section", { className: "manage-section mt-5", "aria-labelledby": "order-purchases-title", "aria-live": "polite", "aria-busy": purchaseHistoryQuery.isLoading || purchaseHistoryQuery.isFetching, children: [_jsx("h2", { id: "order-purchases-title", className: "manage-section__title h3 font-weight-bold text-primary-500 mb-1", children: formatMessage(messages.otherPurchasesTitle) }), purchaseHistoryQuery.isError && (_jsx(Alert, { variant: "danger", children: formatMessage(messages.purchaseHistoryError) })), !purchaseHistoryQuery.isError && !purchaseHistoryQuery.isSuccess && (_jsx("div", { className: "d-flex justify-content-center py-4", children: _jsx(Spinner, { animation: "border", screenReaderText: formatMessage(messages.loadingOrders) }) })), purchaseHistoryQuery.isSuccess && orders.length === 0 && (_jsx("p", { className: "manage-section__subtitle text-gray-700 mb-3", children: formatMessage(messages.coursePurchasesMessage) })), purchaseHistoryQuery.isSuccess && orders.length > 0 && (_jsxs(_Fragment, { children: [_jsx("p", { className: "manage-section__subtitle text-gray-700 mb-3", children: formatMessage(messages.coursePurchasesMessage) }), _jsx(OrdersList, { orders: orders, onViewReceipt: handleViewReceipt }), _jsx(RefundNotice, {})] }))] }));
65
65
  };
66
66
  export default OrderPurchases;
67
67
  //# sourceMappingURL=OrderPurchases.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderPurchases.js","sourceRoot":"","sources":["../../../src/components/OrderHistory/OrderPurchases.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Alert, Spinner } from '@openedx/paragon';\nimport { getAppConfig, useIntl } from '@openedx/frontend-base';\n\nimport type { PurchaseHistoryItem } from '../../types';\nimport { appId } from '../../constants';\nimport { getStripePaymentReceipt } from '../../data/services/orderHistory/orderHistory';\nimport { usePurchaseHistoryQuery } from '../../data/hooks/useOrderHistoryQueries';\nimport { useViaxClient, useViaxSession } from '../../data/hooks/useManageQueries';\nimport OrdersList from './OrderList';\nimport RefundNotice from '../RefundNotice/RefundNotice';\nimport messages from './messages';\n\nconst getPaypalReceiptUrl = (): string | null => {\n const config = getAppConfig(appId) as { PAYPAL_RECEIPT_URL?: string };\n const paypalReceiptUrl = config.PAYPAL_RECEIPT_URL;\n\n if (typeof paypalReceiptUrl !== 'string') {\n return null;\n }\n\n return paypalReceiptUrl.trim() || null;\n};\n\n/** One-off course and program purchases, shown in the payment history tab. */\nconst OrderPurchases: React.FC = () => {\n const { formatMessage } = useIntl();\n const client = useViaxClient();\n const { sessionReady } = useViaxSession(client);\n const purchaseHistoryQuery = usePurchaseHistoryQuery(client, sessionReady);\n const orders = purchaseHistoryQuery.data ?? [];\n\n const handleViewReceipt = async (order: PurchaseHistoryItem) => {\n if (!client || !order.orderId) {\n return;\n }\n\n try {\n const paymentMethodType = (order.paymentMethod?.type ?? '').toLowerCase();\n const isNotAppleOrGooglePay = !order.paymentMethod?.wallet;\n\n if (paymentMethodType === 'paypal') {\n const paypalReceiptUrl = getPaypalReceiptUrl();\n if (!paypalReceiptUrl) {\n console.error('PayPal receipt URL is not configured.');\n return;\n }\n\n window.open(paypalReceiptUrl, '_blank', 'noopener,noreferrer');\n return;\n } else if (paymentMethodType === 'card' && isNotAppleOrGooglePay) {\n const receiptUrl = await getStripePaymentReceipt(client.gql, order.orderId);\n if (receiptUrl) {\n window.open(receiptUrl, '_blank', 'noopener,noreferrer');\n }\n }\n } catch (error) {\n console.error('Unable to load payment receipt.', error);\n }\n };\n\n return (\n <section\n className=\"manage-section mt-5\"\n aria-labelledby=\"order-purchases-title\"\n aria-live=\"polite\"\n aria-busy={purchaseHistoryQuery.isLoading || purchaseHistoryQuery.isFetching}\n >\n <h2 id=\"order-purchases-title\" className=\"manage-section__title h3 font-weight-bold text-primary-500 mb-1\">\n {formatMessage(messages.otherPurchasesTitle)}\n </h2>\n\n {purchaseHistoryQuery.isError && (\n <Alert variant=\"danger\">{formatMessage(messages.purchaseHistoryError)}</Alert>\n )}\n\n {!purchaseHistoryQuery.isError && !purchaseHistoryQuery.isSuccess && (\n <div className=\"d-flex justify-content-center py-4\">\n <Spinner animation=\"border\" screenReaderText={formatMessage(messages.loadingOrders)} />\n </div>\n )}\n\n {purchaseHistoryQuery.isSuccess && orders.length === 0 && (\n <p className=\"manage-section__subtitle text-gray-700 mb-3\">\n {formatMessage(messages.coursePurchasesEmptyMessage)}\n </p>\n )}\n\n {purchaseHistoryQuery.isSuccess && orders.length > 0 && (\n <>\n <OrdersList orders={orders} onViewReceipt={handleViewReceipt} />\n <RefundNotice />\n </>\n )}\n </section>\n );\n};\n\nexport default OrderPurchases;\n"]}
1
+ {"version":3,"file":"OrderPurchases.js","sourceRoot":"","sources":["../../../src/components/OrderHistory/OrderPurchases.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Alert, Spinner } from '@openedx/paragon';\nimport { getAppConfig, useIntl } from '@openedx/frontend-base';\n\nimport type { PurchaseHistoryItem } from '../../types';\nimport { appId } from '../../constants';\nimport { getStripePaymentReceipt } from '../../data/services/orderHistory/orderHistory';\nimport { usePurchaseHistoryQuery } from '../../data/hooks/useOrderHistoryQueries';\nimport { useViaxClient, useViaxSession } from '../../data/hooks/useManageQueries';\nimport OrdersList from './OrderList';\nimport RefundNotice from '../RefundNotice/RefundNotice';\nimport messages from './messages';\n\nconst getPaypalReceiptUrl = (): string | null => {\n const config = getAppConfig(appId) as { PAYPAL_RECEIPT_URL?: string };\n const paypalReceiptUrl = config.PAYPAL_RECEIPT_URL;\n\n if (typeof paypalReceiptUrl !== 'string') {\n return null;\n }\n\n return paypalReceiptUrl.trim() || null;\n};\n\n/** One-off course and program purchases, shown in the payment history tab. */\nconst OrderPurchases: React.FC = () => {\n const { formatMessage } = useIntl();\n const client = useViaxClient();\n const { sessionReady } = useViaxSession(client);\n const purchaseHistoryQuery = usePurchaseHistoryQuery(client, sessionReady);\n const orders = purchaseHistoryQuery.data ?? [];\n\n const handleViewReceipt = async (order: PurchaseHistoryItem) => {\n if (!client || !order.orderId) {\n return;\n }\n\n try {\n const paymentMethodType = (order.paymentMethod?.type ?? '').toLowerCase();\n const isNotAppleOrGooglePay = !order.paymentMethod?.wallet;\n\n if (paymentMethodType === 'paypal') {\n const paypalReceiptUrl = getPaypalReceiptUrl();\n if (!paypalReceiptUrl) {\n console.error('PayPal receipt URL is not configured.');\n return;\n }\n\n window.open(paypalReceiptUrl, '_blank', 'noopener,noreferrer');\n return;\n } else if (paymentMethodType === 'card' && isNotAppleOrGooglePay) {\n const receiptUrl = await getStripePaymentReceipt(client.gql, order.orderId);\n if (receiptUrl) {\n window.open(receiptUrl, '_blank', 'noopener,noreferrer');\n }\n }\n } catch (error) {\n console.error('Unable to load payment receipt.', error);\n }\n };\n\n return (\n <section\n className=\"manage-section mt-5\"\n aria-labelledby=\"order-purchases-title\"\n aria-live=\"polite\"\n aria-busy={purchaseHistoryQuery.isLoading || purchaseHistoryQuery.isFetching}\n >\n <h2 id=\"order-purchases-title\" className=\"manage-section__title h3 font-weight-bold text-primary-500 mb-1\">\n {formatMessage(messages.otherPurchasesTitle)}\n </h2>\n\n {purchaseHistoryQuery.isError && (\n <Alert variant=\"danger\">{formatMessage(messages.purchaseHistoryError)}</Alert>\n )}\n\n {!purchaseHistoryQuery.isError && !purchaseHistoryQuery.isSuccess && (\n <div className=\"d-flex justify-content-center py-4\">\n <Spinner animation=\"border\" screenReaderText={formatMessage(messages.loadingOrders)} />\n </div>\n )}\n\n {purchaseHistoryQuery.isSuccess && orders.length === 0 && (\n <p className=\"manage-section__subtitle text-gray-700 mb-3\">\n {formatMessage(messages.coursePurchasesMessage)}\n </p>\n )}\n\n {purchaseHistoryQuery.isSuccess && orders.length > 0 && (\n <>\n <p className=\"manage-section__subtitle text-gray-700 mb-3\">\n {formatMessage(messages.coursePurchasesMessage)}\n </p>\n <OrdersList orders={orders} onViewReceipt={handleViewReceipt} />\n <RefundNotice />\n </>\n )}\n </section>\n );\n};\n\nexport default OrderPurchases;\n"]}
@@ -9,7 +9,7 @@ declare const messages: {
9
9
  defaultMessage: string;
10
10
  description: string;
11
11
  };
12
- coursePurchasesEmptyMessage: {
12
+ coursePurchasesMessage: {
13
13
  id: string;
14
14
  defaultMessage: string;
15
15
  description: string;
@@ -10,7 +10,7 @@ const messages = defineMessages({
10
10
  defaultMessage: 'Other purchases',
11
11
  description: 'Heading above the list of course and program purchases.',
12
12
  },
13
- coursePurchasesEmptyMessage: {
13
+ coursePurchasesMessage: {
14
14
  id: 'orderHistory.coursePayments.emptyMessage',
15
15
  defaultMessage: 'Courses you purchased in the last 180 days will appear here. If possible, please retain receipts for your records.',
16
16
  description: 'Message shown when there are no course purchases to display.',
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/components/OrderHistory/messages.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n orderHistoryTitle: {\n id: 'orderHistoryTitle',\n defaultMessage: 'Order History',\n description: 'Heading for order history',\n },\n otherPurchasesTitle: {\n id: 'orderHistory.coursePayments.otherPurchasesTitle',\n defaultMessage: 'Other purchases',\n description: 'Heading above the list of course and program purchases.',\n },\n coursePurchasesEmptyMessage: {\n id: 'orderHistory.coursePayments.emptyMessage',\n defaultMessage: 'Courses you purchased in the last 180 days will appear here. If possible, please retain receipts for your records.',\n description: 'Message shown when there are no course purchases to display.',\n },\n loadingOrders: {\n id: 'orderHistory.loadingOrders',\n defaultMessage: 'Loading orders…',\n description: 'Loading state while the order history is fetched',\n },\n purchaseHistoryError: {\n id: 'orderHistory.purchaseHistoryError',\n defaultMessage: 'We could not load your orders. Please try again later.',\n description: 'Error alert when the order history fails to load',\n },\n orderNotFound: {\n id: 'orderHistory.orderNotFound',\n defaultMessage: 'We could not find this order.',\n description: 'Shown on the order details page when no matching order exists',\n },\n orderDateTitle: {\n id: 'orderDateTitle',\n defaultMessage: 'Order date',\n description: 'Label for order date',\n },\n orderSummaryTitle: {\n id: 'orderSummaryTitle',\n defaultMessage: 'Order summary',\n description: 'Heading for order summary section',\n },\n orderItemsTitle: {\n id: 'orderItemsTitle',\n defaultMessage: 'Order items',\n description: 'Heading for order items section',\n },\n paymentTitle: {\n id: 'paymentTitle',\n defaultMessage: 'Payment',\n description: 'Heading for payment section',\n },\n receiptOrderNumberLabel: {\n id: 'receiptOrderNumberLabel',\n defaultMessage: 'Order number:',\n description: 'Receipt label for the order number',\n },\n receiptOrderDateLabel: {\n id: 'receiptOrderDateLabel',\n defaultMessage: 'Order date:',\n description: 'Receipt label for the order date',\n },\n receiptSubtotalLabel: {\n id: 'receiptSubtotalLabel',\n defaultMessage: 'Subtotal:',\n description: 'Receipt label for the subtotal amount',\n },\n receiptDiscountCodeLabel: {\n id: 'receiptDiscountCodeLabel',\n defaultMessage: 'Discount code:',\n description: 'Receipt label for the discount code',\n },\n receiptDiscountAmountLabel: {\n id: 'receiptDiscountAmountLabel',\n defaultMessage: 'Discount amount:',\n description: 'Receipt label for the discount amount',\n },\n receiptTotalAfterDiscountLabel: {\n id: 'receiptTotalAfterDiscountLabel',\n defaultMessage: 'Total after discount:',\n description: 'Receipt label for the total after discount',\n },\n receiptNameLabel: {\n id: 'receiptNameLabel',\n defaultMessage: 'Name:',\n description: 'Receipt label for the item name',\n },\n receiptPriceLabel: {\n id: 'receiptPriceLabel',\n defaultMessage: 'Price:',\n description: 'Receipt label for the item price',\n },\n receiptAmountLabel: {\n id: 'receiptAmountLabel',\n defaultMessage: 'Amount:',\n description: 'Receipt label for the payment amount',\n },\n receiptTableCourseHeader: {\n id: 'receiptTableCourseHeader',\n defaultMessage: 'Course',\n description: 'Program order items table header for the course name column',\n },\n receiptTablePriceHeader: {\n id: 'receiptTablePriceHeader',\n defaultMessage: 'Price',\n description: 'Program order items table header for the course price column',\n },\n receiptTableDiscountAmountHeader: {\n id: 'receiptTableDiscountAmountHeader',\n defaultMessage: 'Discount amount',\n description: 'Program order items table header for the discount amount column',\n },\n receiptTableTotalAfterDiscountHeader: {\n id: 'receiptTableTotalAfterDiscountHeader',\n defaultMessage: 'Total after discount',\n description: 'Program order items table header for the total after discount column',\n },\n viewReceiptButton: {\n id: 'viewReceiptButton',\n defaultMessage: 'View receipt',\n description: 'Button text for viewing a payment receipt',\n },\n viewOrderDetailsButton: {\n id: 'viewOrderDetailsButton',\n defaultMessage: 'View order details',\n description: 'Button text for viewing order details',\n },\n dateOfPurchaseLabel: {\n id: 'dateOfPurchaseLabel',\n defaultMessage: 'Date of purchase',\n description: 'Label for the date of purchase in the order history card',\n },\n totalCostLabel: {\n id: 'totalCostLabel',\n defaultMessage: 'Total cost',\n description: 'Label for the total cost in the order history card',\n },\n orderNumberLabel: {\n id: 'orderNumberLabel',\n defaultMessage: 'Order number',\n description: 'Label for the order number in the order history card',\n },\n});\n\nexport default messages;\n"]}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/components/OrderHistory/messages.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n orderHistoryTitle: {\n id: 'orderHistoryTitle',\n defaultMessage: 'Order History',\n description: 'Heading for order history',\n },\n otherPurchasesTitle: {\n id: 'orderHistory.coursePayments.otherPurchasesTitle',\n defaultMessage: 'Other purchases',\n description: 'Heading above the list of course and program purchases.',\n },\n coursePurchasesMessage: {\n id: 'orderHistory.coursePayments.emptyMessage',\n defaultMessage: 'Courses you purchased in the last 180 days will appear here. If possible, please retain receipts for your records.',\n description: 'Message shown when there are no course purchases to display.',\n },\n loadingOrders: {\n id: 'orderHistory.loadingOrders',\n defaultMessage: 'Loading orders…',\n description: 'Loading state while the order history is fetched',\n },\n purchaseHistoryError: {\n id: 'orderHistory.purchaseHistoryError',\n defaultMessage: 'We could not load your orders. Please try again later.',\n description: 'Error alert when the order history fails to load',\n },\n orderNotFound: {\n id: 'orderHistory.orderNotFound',\n defaultMessage: 'We could not find this order.',\n description: 'Shown on the order details page when no matching order exists',\n },\n orderDateTitle: {\n id: 'orderDateTitle',\n defaultMessage: 'Order date',\n description: 'Label for order date',\n },\n orderSummaryTitle: {\n id: 'orderSummaryTitle',\n defaultMessage: 'Order summary',\n description: 'Heading for order summary section',\n },\n orderItemsTitle: {\n id: 'orderItemsTitle',\n defaultMessage: 'Order items',\n description: 'Heading for order items section',\n },\n paymentTitle: {\n id: 'paymentTitle',\n defaultMessage: 'Payment',\n description: 'Heading for payment section',\n },\n receiptOrderNumberLabel: {\n id: 'receiptOrderNumberLabel',\n defaultMessage: 'Order number:',\n description: 'Receipt label for the order number',\n },\n receiptOrderDateLabel: {\n id: 'receiptOrderDateLabel',\n defaultMessage: 'Order date:',\n description: 'Receipt label for the order date',\n },\n receiptSubtotalLabel: {\n id: 'receiptSubtotalLabel',\n defaultMessage: 'Subtotal:',\n description: 'Receipt label for the subtotal amount',\n },\n receiptDiscountCodeLabel: {\n id: 'receiptDiscountCodeLabel',\n defaultMessage: 'Discount code:',\n description: 'Receipt label for the discount code',\n },\n receiptDiscountAmountLabel: {\n id: 'receiptDiscountAmountLabel',\n defaultMessage: 'Discount amount:',\n description: 'Receipt label for the discount amount',\n },\n receiptTotalAfterDiscountLabel: {\n id: 'receiptTotalAfterDiscountLabel',\n defaultMessage: 'Total after discount:',\n description: 'Receipt label for the total after discount',\n },\n receiptNameLabel: {\n id: 'receiptNameLabel',\n defaultMessage: 'Name:',\n description: 'Receipt label for the item name',\n },\n receiptPriceLabel: {\n id: 'receiptPriceLabel',\n defaultMessage: 'Price:',\n description: 'Receipt label for the item price',\n },\n receiptAmountLabel: {\n id: 'receiptAmountLabel',\n defaultMessage: 'Amount:',\n description: 'Receipt label for the payment amount',\n },\n receiptTableCourseHeader: {\n id: 'receiptTableCourseHeader',\n defaultMessage: 'Course',\n description: 'Program order items table header for the course name column',\n },\n receiptTablePriceHeader: {\n id: 'receiptTablePriceHeader',\n defaultMessage: 'Price',\n description: 'Program order items table header for the course price column',\n },\n receiptTableDiscountAmountHeader: {\n id: 'receiptTableDiscountAmountHeader',\n defaultMessage: 'Discount amount',\n description: 'Program order items table header for the discount amount column',\n },\n receiptTableTotalAfterDiscountHeader: {\n id: 'receiptTableTotalAfterDiscountHeader',\n defaultMessage: 'Total after discount',\n description: 'Program order items table header for the total after discount column',\n },\n viewReceiptButton: {\n id: 'viewReceiptButton',\n defaultMessage: 'View receipt',\n description: 'Button text for viewing a payment receipt',\n },\n viewOrderDetailsButton: {\n id: 'viewOrderDetailsButton',\n defaultMessage: 'View order details',\n description: 'Button text for viewing order details',\n },\n dateOfPurchaseLabel: {\n id: 'dateOfPurchaseLabel',\n defaultMessage: 'Date of purchase',\n description: 'Label for the date of purchase in the order history card',\n },\n totalCostLabel: {\n id: 'totalCostLabel',\n defaultMessage: 'Total cost',\n description: 'Label for the total cost in the order history card',\n },\n orderNumberLabel: {\n id: 'orderNumberLabel',\n defaultMessage: 'Order number',\n description: 'Label for the order number in the order history card',\n },\n});\n\nexport default messages;\n"]}
@@ -5,10 +5,6 @@ export declare const subscriptionCheckoutRole = "org.openedx.frontend.role.subsc
5
5
  /** Sibling search MFE route role (externalRoutes). */
6
6
  export declare const subscriptionSearchRole = "org.openedx.frontend.role.subscription.search";
7
7
  export declare const ORDER_HISTORY_PAGE_PATH = "order-history";
8
- /** Default help center URL when not overridden in app config. */
9
- export declare const DEFAULT_LEARNER_HELP_CENTER_URL = "https://support.edx.org/hc/en-us";
10
- /** Default marketing page for "Learn about edX Subscription". */
11
- export declare const DEFAULT_SUBSCRIPTION_LEARN_MORE_URL = "https://www.edx.org/edx-subscription";
12
8
  /** Countries that require the extra renew consent checkbox (ISO alpha-2). */
13
9
  export declare const COUNTRIES_REQUIRING_EXTRA_CONFIRM: readonly string[];
14
10
  /** Active / trial statuses that map to the manage (active) view. */
package/dist/constants.js CHANGED
@@ -5,10 +5,6 @@ export const subscriptionCheckoutRole = 'org.openedx.frontend.role.subscription.
5
5
  /** Sibling search MFE route role (externalRoutes). */
6
6
  export const subscriptionSearchRole = 'org.openedx.frontend.role.subscription.search';
7
7
  export const ORDER_HISTORY_PAGE_PATH = 'order-history';
8
- /** Default help center URL when not overridden in app config. */
9
- export const DEFAULT_LEARNER_HELP_CENTER_URL = 'https://support.edx.org/hc/en-us';
10
- /** Default marketing page for "Learn about edX Subscription". */
11
- export const DEFAULT_SUBSCRIPTION_LEARN_MORE_URL = 'https://www.edx.org/edx-subscription';
12
8
  /** Countries that require the extra renew consent checkbox (ISO alpha-2). */
13
9
  export const COUNTRIES_REQUIRING_EXTRA_CONFIRM = ['GB', 'CA'];
14
10
  /** Active / trial statuses that map to the manage (active) view. */
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,8CAA8C,CAAC;AACpE,MAAM,CAAC,MAAM,sBAAsB,GAAG,+CAA+C,CAAC;AAEtF,wDAAwD;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,iDAAiD,CAAC;AAE1F,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,+CAA+C,CAAC;AAEtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEvD,iEAAiE;AACjE,MAAM,CAAC,MAAM,+BAA+B,GAAG,kCAAkC,CAAC;AAElF,iEAAiE;AACjE,MAAM,CAAC,MAAM,mCAAmC,GAAG,sCAAsC,CAAC;AAE1F,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iCAAiC,GAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAEjF,oEAAoE;AACpE,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAClD,QAAQ;IACR,cAAc;IACd,UAAU;CACX,CAAC,CAAC;AAEH,qEAAqE;AACrE,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC;IACpD,UAAU;IACV,WAAW;IACX,sBAAsB;IACtB,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;AAEtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AAE/C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAEnD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAEnD,kDAAkD;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC","sourcesContent":["export const appId = 'org.openedx.frontend.app.subscription.manage';\nexport const subscriptionManageRole = 'org.openedx.frontend.role.subscription.manage';\n\n/** Sibling checkout MFE route role (externalRoutes). */\nexport const subscriptionCheckoutRole = 'org.openedx.frontend.role.subscription.checkout';\n\n/** Sibling search MFE route role (externalRoutes). */\nexport const subscriptionSearchRole = 'org.openedx.frontend.role.subscription.search';\n\nexport const ORDER_HISTORY_PAGE_PATH = 'order-history';\n\n/** Default help center URL when not overridden in app config. */\nexport const DEFAULT_LEARNER_HELP_CENTER_URL = 'https://support.edx.org/hc/en-us';\n\n/** Default marketing page for \"Learn about edX Subscription\". */\nexport const DEFAULT_SUBSCRIPTION_LEARN_MORE_URL = 'https://www.edx.org/edx-subscription';\n\n/** Countries that require the extra renew consent checkbox (ISO alpha-2). */\nexport const COUNTRIES_REQUIRING_EXTRA_CONFIRM: readonly string[] = ['GB', 'CA'];\n\n/** Active / trial statuses that map to the manage (active) view. */\nexport const ACTIVE_SUBSCRIPTION_STATUSES = new Set([\n 'ACTIVE',\n 'TRIAL_ACTIVE',\n 'TRIALING',\n]);\n\n/** Canceled statuses that may still have access until period end. */\nexport const CANCELED_SUBSCRIPTION_STATUSES = new Set([\n 'CANCELED',\n 'CANCELLED',\n 'CANCEL_AT_PERIOD_END',\n 'PENDING_CANCEL',\n]);\n\nexport const appName = 'learner-home';\n\nexport const STRIPE_PAYMENT_GATEWAY = 'stripe';\n\nexport const PAYPAL_PAYMENT_GATEWAY = 'paypal';\n\n/** Path of the order history page (route `order-history`). */\nexport const ORDER_HISTORY_PATH = '/order-history';\n\n/** Path of the order details page (route `order-details/:orderNumber`). */\nexport const ORDER_DETAILS_PATH = '/order-details';\n\n/** Billing contact shown in the refund notice. */\nexport const BILLING_SUPPORT_EMAIL = 'billing@edx.org';\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,8CAA8C,CAAC;AACpE,MAAM,CAAC,MAAM,sBAAsB,GAAG,+CAA+C,CAAC;AAEtF,wDAAwD;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,iDAAiD,CAAC;AAE1F,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,+CAA+C,CAAC;AAEtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEvD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iCAAiC,GAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAEjF,oEAAoE;AACpE,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAClD,QAAQ;IACR,cAAc;IACd,UAAU;CACX,CAAC,CAAC;AAEH,qEAAqE;AACrE,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC;IACpD,UAAU;IACV,WAAW;IACX,sBAAsB;IACtB,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;AAEtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AAE/C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAEnD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAEnD,kDAAkD;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC","sourcesContent":["export const appId = 'org.openedx.frontend.app.subscription.manage';\nexport const subscriptionManageRole = 'org.openedx.frontend.role.subscription.manage';\n\n/** Sibling checkout MFE route role (externalRoutes). */\nexport const subscriptionCheckoutRole = 'org.openedx.frontend.role.subscription.checkout';\n\n/** Sibling search MFE route role (externalRoutes). */\nexport const subscriptionSearchRole = 'org.openedx.frontend.role.subscription.search';\n\nexport const ORDER_HISTORY_PAGE_PATH = 'order-history';\n\n/** Countries that require the extra renew consent checkbox (ISO alpha-2). */\nexport const COUNTRIES_REQUIRING_EXTRA_CONFIRM: readonly string[] = ['GB', 'CA'];\n\n/** Active / trial statuses that map to the manage (active) view. */\nexport const ACTIVE_SUBSCRIPTION_STATUSES = new Set([\n 'ACTIVE',\n 'TRIAL_ACTIVE',\n 'TRIALING',\n]);\n\n/** Canceled statuses that may still have access until period end. */\nexport const CANCELED_SUBSCRIPTION_STATUSES = new Set([\n 'CANCELED',\n 'CANCELLED',\n 'CANCEL_AT_PERIOD_END',\n 'PENDING_CANCEL',\n]);\n\nexport const appName = 'learner-home';\n\nexport const STRIPE_PAYMENT_GATEWAY = 'stripe';\n\nexport const PAYPAL_PAYMENT_GATEWAY = 'paypal';\n\n/** Path of the order history page (route `order-history`). */\nexport const ORDER_HISTORY_PATH = '/order-history';\n\n/** Path of the order details page (route `order-details/:orderNumber`). */\nexport const ORDER_DETAILS_PATH = '/order-details';\n\n/** Billing contact shown in the refund notice. */\nexport const BILLING_SUPPORT_EMAIL = 'billing@edx.org';\n"]}
@@ -1,6 +1,9 @@
1
- const getFormattedCurrency = ({ amount, currency }) => new Intl.NumberFormat('en-US', {
2
- style: 'currency',
3
- currency,
4
- }).format(amount);
1
+ const getFormattedCurrency = ({ amount, currency }) => {
2
+ const formattedAmount = new Intl.NumberFormat('en-US', {
3
+ style: 'currency',
4
+ currency,
5
+ }).format(amount);
6
+ return `${formattedAmount} ${currency}`;
7
+ };
5
8
  export default getFormattedCurrency;
6
9
  //# sourceMappingURL=currency.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"currency.js","sourceRoot":"","sources":["../../src/utils/currency.ts"],"names":[],"mappings":"AAKA,MAAM,oBAAoB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAc,EAAU,EAAE,CACxE,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IAC7B,KAAK,EAAE,UAAU;IACjB,QAAQ;CACT,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAEpB,eAAe,oBAAoB,CAAC","sourcesContent":["interface OrderTotal {\n amount: number,\n currency: string,\n}\n\nconst getFormattedCurrency = ({ amount, currency }: OrderTotal): string =>\n new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(amount);\n\nexport default getFormattedCurrency;\n"]}
1
+ {"version":3,"file":"currency.js","sourceRoot":"","sources":["../../src/utils/currency.ts"],"names":[],"mappings":"AAKA,MAAM,oBAAoB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAc,EAAU,EAAE;IACxE,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;QACrD,KAAK,EAAE,UAAU;QACjB,QAAQ;KACT,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAElB,OAAO,GAAG,eAAe,IAAI,QAAQ,EAAE,CAAC;AAC1C,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC","sourcesContent":["interface OrderTotal {\n amount: number,\n currency: string,\n}\n\nconst getFormattedCurrency = ({ amount, currency }: OrderTotal): string => {\n const formattedAmount = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(amount);\n\n return `${formattedAmount} ${currency}`;\n};\n\nexport default getFormattedCurrency;\n"]}
@@ -44,8 +44,8 @@ function isDevelopment() {
44
44
  /** LMS edx-session endpoint for the current site. */
45
45
  export function getEdxSessionUrl() {
46
46
  return isDevelopment()
47
- ? 'https://courses.stage.edx.org/api/edx-session'
48
- : `${getSiteConfig().lmsBaseUrl}/api/edx-session`;
47
+ ? `${getSiteConfig().lmsBaseUrl}/api/edx-session`
48
+ : ''; // same url but static was used before.
49
49
  }
50
50
  /** Exchange the learner's edX session for a Viax token. */
51
51
  export function fetchEdxSession(sessionUrl) {
@@ -1 +1 @@
1
- {"version":3,"file":"edxSession.js","sourceRoot":"","sources":["../../src/utils/edxSession.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;AAEH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAWzE,qGAAqG;AACrG,MAAM,gBAAgB,GAAG;IACvB,OAAO,EAAE,kuBAAkuB;IAC3uB,SAAS,EAAE,wVAAwV;CACpW,CAAC;AAEF,SAAS,oBAAoB,CAAC,IAA6B;;IACzD,MAAM,SAAS,GAAG,CAChB,MAAA,MAAA,MAAA,IAAI,CAAC,SAAS,mCAAI,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC,WAAW,CAChD,CAAC;IACxB,MAAM,WAAW,GAAG,CAAC,MAAA,IAAI,CAAC,WAAW,mCAAI,IAAI,CAAC,YAAY,CAAuB,CAAC;IAElF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,SAAS;QACT,WAAW;QACX,QAAQ,EAAE,IAAI,CAAC,QAA8B;QAC7C,SAAS,EAAE,IAAI,CAAC,SAA+B;QAC/C,QAAQ,EAAE,IAAI,CAAC,QAA8B;QAC7C,KAAK,EAAE,IAAI,CAAC,KAA2B;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,aAAa,EAAE,CAAC,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;AACtE,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,EAAE;QACpB,CAAC,CAAC,+CAA+C;QACjD,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC,UAAU,kBAAkB,CAAC;AACtD,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAgB,eAAe,CAAC,UAAkB;;QACtD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,SAAS;YACtB,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,gCAAgC,GAAG,CAAC,MAAM,uCAAuC,CAClF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAkD,CAAC;QAC9E,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CAAA","sourcesContent":["/**\n * Exchange the learner's edX session for a Viax JWT.\n *\n * Dev uses POST with a hardcoded JWT payload (local LMS cookie exchange is\n * unavailable). Stage/prod use POST with browser session cookies.\n */\n\nimport { EnvironmentTypes, getSiteConfig } from '@openedx/frontend-base';\n\nexport interface EdxSessionResult {\n viaxToken: string,\n customerUid: string,\n partyUid?: string,\n edxUserId?: string,\n username?: string,\n email?: string,\n}\n\n/** Hardcoded edX JWT used only for local/dev against Viax (same pattern as enroll/checkout MFEs). */\nconst DEV_SESSION_BODY = {\n payload: 'eyJhbGciOiJSUzUxMiIsImtpZCI6Imxtc3N0YWdlMDAyIiwidHlwIjoiSldUIn0.eyJhdWQiOiJJbmtvY3VqTGlreXVjc0Vkd2lXYXRkZWJyRWFja21ldkxha0R1aWZLb29zaGtha1dvdyIsImV4cCI6MTc5MTUyODA4OSwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwiaWF0IjoxNzkxNTI0NDg5LCJpc3MiOiJodHRwczovL2NvdXJzZXMuc3RhZ2UuZWR4Lm9yZy9vYXV0aDIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJUVV8yNjA4X0pFRzMiLCJzY29wZXMiOlsidXNlcl9pZCIsImVtYWlsIiwicHJvZmlsZSJdLCJ2ZXJzaW9uIjoiMS4yLjAiLCJzdWIiOiJiMTM0NGUxYWFjNGI5MWExZDBiZGU0NzFkMjdlMTkwNCIsImZpbHRlcnMiOlsidXNlcjptZSJdLCJpc19yZXN0cmljdGVkIjpmYWxzZSwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJ1c2VyX2lkIjo1Mjg0NzAwLCJlbWFpbCI6InRlc3QtdXNlckBnbWFpbC5jb20iLCJuYW1lIjoiVGVzdCBVc2VyIiwiZmFtaWx5X25hbWUiOiIiLCJnaXZlbl9uYW1lIjoiIiwiYWRtaW5pc3RyYXRvciI6ZmFsc2UsInN1cGVydXNlciI6ZmFsc2V9',\n signature: 'Ho60pm9qWXSiU9yWPJ6srgKxlDtAgiBH3kMbzCFOBZq7qm8Qi_z-iNMqxVl5dozvQNtJAuS5A--lvzkIk9fEb2u0tS_L_QKBdrEg28yvPcjwlgOsGGZ5wUOu5Vi2NN9cbNH-TiPA0zLIMVifvh8NhuWTzk6Q4yIAqU28H1Xz6Mwiz0ftHcARvdIYA-IGaWJt0YEVOw_nDLWui7V4AXSeAV50rHAlqsHzAfUnmpBxW2KAve-ZWMxmDCiF3xEaiwKtQXBsUCJ1xjGxub4dzZjry4ELRQf6EpW2l6sL5vGjD2FrlSMyt08D7lUCMBAbzpr8-ycuTRicMpnS2l64VMOp1g'\n};\n\nfunction parseSessionResponse(data: Record<string, unknown>): EdxSessionResult {\n const viaxToken = (\n data.viaxToken ?? data.token ?? data.access_token ?? data.accessToken\n ) as string | undefined;\n const customerUid = (data.customerUid ?? data.customer_uid) as string | undefined;\n\n if (!viaxToken) {\n throw new Error('Session response missing viax token.');\n }\n if (!customerUid) {\n throw new Error('Session response missing customerUid.');\n }\n\n return {\n viaxToken,\n customerUid,\n partyUid: data.partyUid as string | undefined,\n edxUserId: data.edxUserId as string | undefined,\n username: data.username as string | undefined,\n email: data.email as string | undefined,\n };\n}\n\nfunction isDevelopment(): boolean {\n return getSiteConfig().environment === EnvironmentTypes.DEVELOPMENT;\n}\n\n/** LMS edx-session endpoint for the current site. */\nexport function getEdxSessionUrl(): string {\n return isDevelopment()\n ? 'https://courses.stage.edx.org/api/edx-session'\n : `${getSiteConfig().lmsBaseUrl}/api/edx-session`;\n}\n\n/** Exchange the learner's edX session for a Viax token. */\nexport async function fetchEdxSession(sessionUrl: string): Promise<EdxSessionResult> {\n const res = await fetch(sessionUrl, {\n method: 'POST',\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: isDevelopment() ? JSON.stringify(DEV_SESSION_BODY) : undefined,\n });\n\n if (!res.ok) {\n throw new Error(\n `Failed to establish session (${res.status}). Please log into edX and try again.`,\n );\n }\n\n const data = await res.json() as Record<string, unknown> & { error?: string };\n if (data.error) {\n throw new Error(String(data.error));\n }\n\n return parseSessionResponse(data);\n}\n"]}
1
+ {"version":3,"file":"edxSession.js","sourceRoot":"","sources":["../../src/utils/edxSession.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;AAEH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAWzE,qGAAqG;AACrG,MAAM,gBAAgB,GAAG;IACvB,OAAO,EAAE,kuBAAkuB;IAC3uB,SAAS,EAAE,wVAAwV;CACpW,CAAC;AAEF,SAAS,oBAAoB,CAAC,IAA6B;;IACzD,MAAM,SAAS,GAAG,CAChB,MAAA,MAAA,MAAA,IAAI,CAAC,SAAS,mCAAI,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC,WAAW,CAChD,CAAC;IACxB,MAAM,WAAW,GAAG,CAAC,MAAA,IAAI,CAAC,WAAW,mCAAI,IAAI,CAAC,YAAY,CAAuB,CAAC;IAElF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,SAAS;QACT,WAAW;QACX,QAAQ,EAAE,IAAI,CAAC,QAA8B;QAC7C,SAAS,EAAE,IAAI,CAAC,SAA+B;QAC/C,QAAQ,EAAE,IAAI,CAAC,QAA8B;QAC7C,KAAK,EAAE,IAAI,CAAC,KAA2B;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,aAAa,EAAE,CAAC,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;AACtE,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,EAAE;QACpB,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC,UAAU,kBAAkB;QACjD,CAAC,CAAC,EAAE,CAAC,CAAC,uCAAuC;AACjD,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAgB,eAAe,CAAC,UAAkB;;QACtD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,SAAS;YACtB,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,gCAAgC,GAAG,CAAC,MAAM,uCAAuC,CAClF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAkD,CAAC;QAC9E,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CAAA","sourcesContent":["/**\n * Exchange the learner's edX session for a Viax JWT.\n *\n * Dev uses POST with a hardcoded JWT payload (local LMS cookie exchange is\n * unavailable). Stage/prod use POST with browser session cookies.\n */\n\nimport { EnvironmentTypes, getSiteConfig } from '@openedx/frontend-base';\n\nexport interface EdxSessionResult {\n viaxToken: string,\n customerUid: string,\n partyUid?: string,\n edxUserId?: string,\n username?: string,\n email?: string,\n}\n\n/** Hardcoded edX JWT used only for local/dev against Viax (same pattern as enroll/checkout MFEs). */\nconst DEV_SESSION_BODY = {\n payload: 'eyJhbGciOiJSUzUxMiIsImtpZCI6Imxtc3N0YWdlMDAyIiwidHlwIjoiSldUIn0.eyJhdWQiOiJJbmtvY3VqTGlreXVjc0Vkd2lXYXRkZWJyRWFja21ldkxha0R1aWZLb29zaGtha1dvdyIsImV4cCI6MTc5MTUyODA4OSwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwiaWF0IjoxNzkxNTI0NDg5LCJpc3MiOiJodHRwczovL2NvdXJzZXMuc3RhZ2UuZWR4Lm9yZy9vYXV0aDIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJUVV8yNjA4X0pFRzMiLCJzY29wZXMiOlsidXNlcl9pZCIsImVtYWlsIiwicHJvZmlsZSJdLCJ2ZXJzaW9uIjoiMS4yLjAiLCJzdWIiOiJiMTM0NGUxYWFjNGI5MWExZDBiZGU0NzFkMjdlMTkwNCIsImZpbHRlcnMiOlsidXNlcjptZSJdLCJpc19yZXN0cmljdGVkIjpmYWxzZSwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJ1c2VyX2lkIjo1Mjg0NzAwLCJlbWFpbCI6InRlc3QtdXNlckBnbWFpbC5jb20iLCJuYW1lIjoiVGVzdCBVc2VyIiwiZmFtaWx5X25hbWUiOiIiLCJnaXZlbl9uYW1lIjoiIiwiYWRtaW5pc3RyYXRvciI6ZmFsc2UsInN1cGVydXNlciI6ZmFsc2V9',\n signature: 'Ho60pm9qWXSiU9yWPJ6srgKxlDtAgiBH3kMbzCFOBZq7qm8Qi_z-iNMqxVl5dozvQNtJAuS5A--lvzkIk9fEb2u0tS_L_QKBdrEg28yvPcjwlgOsGGZ5wUOu5Vi2NN9cbNH-TiPA0zLIMVifvh8NhuWTzk6Q4yIAqU28H1Xz6Mwiz0ftHcARvdIYA-IGaWJt0YEVOw_nDLWui7V4AXSeAV50rHAlqsHzAfUnmpBxW2KAve-ZWMxmDCiF3xEaiwKtQXBsUCJ1xjGxub4dzZjry4ELRQf6EpW2l6sL5vGjD2FrlSMyt08D7lUCMBAbzpr8-ycuTRicMpnS2l64VMOp1g'\n};\n\nfunction parseSessionResponse(data: Record<string, unknown>): EdxSessionResult {\n const viaxToken = (\n data.viaxToken ?? data.token ?? data.access_token ?? data.accessToken\n ) as string | undefined;\n const customerUid = (data.customerUid ?? data.customer_uid) as string | undefined;\n\n if (!viaxToken) {\n throw new Error('Session response missing viax token.');\n }\n if (!customerUid) {\n throw new Error('Session response missing customerUid.');\n }\n\n return {\n viaxToken,\n customerUid,\n partyUid: data.partyUid as string | undefined,\n edxUserId: data.edxUserId as string | undefined,\n username: data.username as string | undefined,\n email: data.email as string | undefined,\n };\n}\n\nfunction isDevelopment(): boolean {\n return getSiteConfig().environment === EnvironmentTypes.DEVELOPMENT;\n}\n\n/** LMS edx-session endpoint for the current site. */\nexport function getEdxSessionUrl(): string {\n return isDevelopment()\n ? `${getSiteConfig().lmsBaseUrl}/api/edx-session`\n : ''; // same url but static was used before.\n}\n\n/** Exchange the learner's edX session for a Viax token. */\nexport async function fetchEdxSession(sessionUrl: string): Promise<EdxSessionResult> {\n const res = await fetch(sessionUrl, {\n method: 'POST',\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: isDevelopment() ? JSON.stringify(DEV_SESSION_BODY) : undefined,\n });\n\n if (!res.ok) {\n throw new Error(\n `Failed to establish session (${res.status}). Please log into edX and try again.`,\n );\n }\n\n const data = await res.json() as Record<string, unknown> & { error?: string };\n if (data.error) {\n throw new Error(String(data.error));\n }\n\n return parseSessionResponse(data);\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * External / sibling-app URLs for manage-subscription CTAs.
3
3
  */
4
4
  import { getAppConfig, getSiteConfig, getUrlByRouteRole } from '@openedx/frontend-base';
5
- import { DEFAULT_LEARNER_HELP_CENTER_URL, DEFAULT_SUBSCRIPTION_LEARN_MORE_URL, appId, subscriptionCheckoutRole, } from '../constants';
5
+ import { appId, subscriptionCheckoutRole, } from '../constants';
6
6
  /** Checkout / subscribe flow URL (renew + new subscribe). */
7
7
  export function getCheckoutUrl() {
8
8
  var _a;
@@ -21,13 +21,13 @@ export function getCheckoutUrl() {
21
21
  export function getLearnMoreUrl() {
22
22
  var _a;
23
23
  const config = getAppConfig(appId);
24
- return (_a = config.SUBSCRIPTION_LEARN_MORE_URL) !== null && _a !== void 0 ? _a : DEFAULT_SUBSCRIPTION_LEARN_MORE_URL;
24
+ return (_a = config.SUBSCRIPTION_LEARN_MORE_URL) !== null && _a !== void 0 ? _a : config.EDX_SUBSCRIPTION_URL;
25
25
  }
26
26
  /** Learner Help Center (footer link). */
27
27
  export function getLearnerHelpCenterUrl() {
28
28
  var _a;
29
29
  const config = getAppConfig(appId);
30
- return (_a = config.LEARNER_HELP_CENTER_URL) !== null && _a !== void 0 ? _a : DEFAULT_LEARNER_HELP_CENTER_URL;
30
+ return (_a = config.LEARNER_HELP_CENTER_URL) !== null && _a !== void 0 ? _a : config.SUPPORT_URL;
31
31
  }
32
32
  /** Learner dashboard URL for post-cancel return. */
33
33
  export function getLearnerDashboardUrl() {
@@ -1 +1 @@
1
- {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/utils/urls.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * External / sibling-app URLs for manage-subscription CTAs.\n */\n\nimport { getAppConfig, getSiteConfig, getUrlByRouteRole } from '@openedx/frontend-base';\n\nimport {\n DEFAULT_LEARNER_HELP_CENTER_URL,\n DEFAULT_SUBSCRIPTION_LEARN_MORE_URL,\n appId,\n subscriptionCheckoutRole,\n} from '../constants';\n\n/** Checkout / subscribe flow URL (renew + new subscribe). */\nexport function getCheckoutUrl(): string {\n const config = getAppConfig(appId);\n const fromConfig = config.CHECKOUT_URL as string | undefined;\n if (fromConfig) {\n return fromConfig;\n }\n\n const fromRole = getUrlByRouteRole(subscriptionCheckoutRole)?.replace(/\\/+$/, '');\n if (fromRole) {\n return fromRole;\n }\n\n return '/checkout';\n}\n\n/** Marketing page for \"Learn about edX Subscription\". */\nexport function getLearnMoreUrl(): string {\n const config = getAppConfig(appId);\n return (config.SUBSCRIPTION_LEARN_MORE_URL as string | undefined)\n ?? DEFAULT_SUBSCRIPTION_LEARN_MORE_URL;\n}\n\n/** Learner Help Center (footer link). */\nexport function getLearnerHelpCenterUrl(): string {\n const config = getAppConfig(appId);\n return (config.LEARNER_HELP_CENTER_URL as string | undefined)\n ?? DEFAULT_LEARNER_HELP_CENTER_URL;\n}\n\n/** Learner dashboard URL for post-cancel return. */\nexport function getLearnerDashboardUrl(): string {\n const config = getAppConfig(appId);\n const fromConfig = config.LEARNER_DASHBOARD_URL as string | undefined;\n if (fromConfig) {\n return fromConfig;\n }\n const lms = getSiteConfig().baseUrl?.replace(/\\/+$/, '') ?? '';\n return lms ? `${lms}/subscription-learner-dashboard` : '/subscription-learner-dashboard';\n}\n\n/** Optional change-to-annual checkout deep link. */\nexport function getChangeToAnnualUrl(): string {\n const config = getAppConfig(appId);\n const fromConfig = config.CHANGE_TO_ANNUAL_URL as string | undefined;\n if (fromConfig) {\n return fromConfig;\n }\n return `${getCheckoutUrl()}?plan=annual`;\n}\n\n/** Courses / LMS host used for certificate and course deep links. */\nexport function getCoursesBaseUrl(): string {\n const config = getAppConfig(appId);\n return (config.COURSES_BASE_URL as string | undefined)?.replace(/\\/+$/, '') ?? '';\n}\n\n/**\n * Resolve a certificate path (`tCertificateUrl`) against COURSES_BASE_URL.\n * Returns null when the path is empty.\n */\nexport function getCertificateUrl(certificatePath: string | null | undefined): string | null {\n const path = certificatePath?.trim();\n if (!path) {\n return null;\n }\n if (/^https?:\\/\\//i.test(path)) {\n return path;\n }\n const base = getCoursesBaseUrl();\n if (!base) {\n return path.startsWith('/') ? path : `/${path}`;\n }\n return `${base}${path.startsWith('/') ? path : `/${path}`}`;\n}\n"]}
1
+ {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/utils/urls.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * External / sibling-app URLs for manage-subscription CTAs.\n */\n\nimport { getAppConfig, getSiteConfig, getUrlByRouteRole } from '@openedx/frontend-base';\n\nimport {\n appId,\n subscriptionCheckoutRole,\n} from '../constants';\n\n/** Checkout / subscribe flow URL (renew + new subscribe). */\nexport function getCheckoutUrl(): string {\n const config = getAppConfig(appId);\n const fromConfig = config.CHECKOUT_URL as string | undefined;\n if (fromConfig) {\n return fromConfig;\n }\n\n const fromRole = getUrlByRouteRole(subscriptionCheckoutRole)?.replace(/\\/+$/, '');\n if (fromRole) {\n return fromRole;\n }\n\n return '/checkout';\n}\n\n/** Marketing page for \"Learn about edX Subscription\". */\nexport function getLearnMoreUrl(): string {\n const config = getAppConfig(appId);\n return (config.SUBSCRIPTION_LEARN_MORE_URL as string | undefined)\n ?? config.EDX_SUBSCRIPTION_URL as string;\n}\n\n/** Learner Help Center (footer link). */\nexport function getLearnerHelpCenterUrl(): string {\n const config = getAppConfig(appId);\n return (config.LEARNER_HELP_CENTER_URL as string | undefined)\n ?? config.SUPPORT_URL as string;\n}\n\n/** Learner dashboard URL for post-cancel return. */\nexport function getLearnerDashboardUrl(): string {\n const config = getAppConfig(appId);\n const fromConfig = config.LEARNER_DASHBOARD_URL as string | undefined;\n if (fromConfig) {\n return fromConfig;\n }\n const lms = getSiteConfig().baseUrl?.replace(/\\/+$/, '') ?? '';\n return lms ? `${lms}/subscription-learner-dashboard` : '/subscription-learner-dashboard';\n}\n\n/** Optional change-to-annual checkout deep link. */\nexport function getChangeToAnnualUrl(): string {\n const config = getAppConfig(appId);\n const fromConfig = config.CHANGE_TO_ANNUAL_URL as string | undefined;\n if (fromConfig) {\n return fromConfig;\n }\n return `${getCheckoutUrl()}?plan=annual`;\n}\n\n/** Courses / LMS host used for certificate and course deep links. */\nexport function getCoursesBaseUrl(): string {\n const config = getAppConfig(appId);\n return (config.COURSES_BASE_URL as string | undefined)?.replace(/\\/+$/, '') ?? '';\n}\n\n/**\n * Resolve a certificate path (`tCertificateUrl`) against COURSES_BASE_URL.\n * Returns null when the path is empty.\n */\nexport function getCertificateUrl(certificatePath: string | null | undefined): string | null {\n const path = certificatePath?.trim();\n if (!path) {\n return null;\n }\n if (/^https?:\\/\\//i.test(path)) {\n return path;\n }\n const base = getCoursesBaseUrl();\n if (!base) {\n return path.startsWith('/') ? path : `/${path}`;\n }\n return `${base}${path.startsWith('/') ? path : `/${path}`}`;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-app-subscription-manage",
3
- "version": "1.24.0",
3
+ "version": "1.25.0",
4
4
  "description": "Subscription Manage Frontend application",
5
5
  "repository": {
6
6
  "type": "git",