@edx/frontend-app-alacarte-checkout 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +2 -0
- package/README.rst +235 -0
- package/dist/Main.d.ts +3 -0
- package/dist/Main.js +15 -0
- package/dist/Main.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.js +12 -0
- package/dist/app.js.map +1 -0
- package/dist/checkoutPage/CheckoutPage.d.ts +3 -0
- package/dist/checkoutPage/CheckoutPage.js +26 -0
- package/dist/checkoutPage/CheckoutPage.js.map +1 -0
- package/dist/components/BrandMarks/BrandMarks.d.ts +7 -0
- package/dist/components/BrandMarks/BrandMarks.js +9 -0
- package/dist/components/BrandMarks/BrandMarks.js.map +1 -0
- package/dist/components/CartSummary/CartSummary.d.ts +26 -0
- package/dist/components/CartSummary/CartSummary.js +41 -0
- package/dist/components/CartSummary/CartSummary.js.map +1 -0
- package/dist/components/CartSummary/Messages.d.ts +103 -0
- package/dist/components/CartSummary/Messages.js +106 -0
- package/dist/components/CartSummary/Messages.js.map +1 -0
- package/dist/components/Checkout/Checkout.d.ts +9 -0
- package/dist/components/Checkout/Checkout.js +82 -0
- package/dist/components/Checkout/Checkout.js.map +1 -0
- package/dist/components/Checkout/Messages.d.ts +8 -0
- package/dist/components/Checkout/Messages.js +10 -0
- package/dist/components/Checkout/Messages.js.map +1 -0
- package/dist/components/CheckoutGate/CheckoutGate.d.ts +9 -0
- package/dist/components/CheckoutGate/CheckoutGate.js +40 -0
- package/dist/components/CheckoutGate/CheckoutGate.js.map +1 -0
- package/dist/components/CheckoutGate/Messages.d.ts +8 -0
- package/dist/components/CheckoutGate/Messages.js +10 -0
- package/dist/components/CheckoutGate/Messages.js.map +1 -0
- package/dist/components/CountryUnavailableModal/CountryUnavailableModal.d.ts +9 -0
- package/dist/components/CountryUnavailableModal/CountryUnavailableModal.js +10 -0
- package/dist/components/CountryUnavailableModal/CountryUnavailableModal.js.map +1 -0
- package/dist/components/CountryUnavailableModal/Messages.d.ts +18 -0
- package/dist/components/CountryUnavailableModal/Messages.js +20 -0
- package/dist/components/CountryUnavailableModal/Messages.js.map +1 -0
- package/dist/components/CourseEnrollmentCard/CourseEnrollmentCard.d.ts +9 -0
- package/dist/components/CourseEnrollmentCard/CourseEnrollmentCard.js +31 -0
- package/dist/components/CourseEnrollmentCard/CourseEnrollmentCard.js.map +1 -0
- package/dist/components/CourseEnrollmentCard/Messages.d.ts +33 -0
- package/dist/components/CourseEnrollmentCard/Messages.js +35 -0
- package/dist/components/CourseEnrollmentCard/Messages.js.map +1 -0
- package/dist/components/EdxUnlimitedBanner/EdxUnlimitedBanner.d.ts +13 -0
- package/dist/components/EdxUnlimitedBanner/EdxUnlimitedBanner.js +11 -0
- package/dist/components/EdxUnlimitedBanner/EdxUnlimitedBanner.js.map +1 -0
- package/dist/components/EnrollmentSummary/EnrollmentSummary.d.ts +22 -0
- package/dist/components/EnrollmentSummary/EnrollmentSummary.js +33 -0
- package/dist/components/EnrollmentSummary/EnrollmentSummary.js.map +1 -0
- package/dist/components/EnrollmentSummary/Messages.d.ts +48 -0
- package/dist/components/EnrollmentSummary/Messages.js +50 -0
- package/dist/components/EnrollmentSummary/Messages.js.map +1 -0
- package/dist/components/PaymentFields/PaymentFields.d.ts +9 -0
- package/dist/components/PaymentFields/PaymentFields.js +7 -0
- package/dist/components/PaymentFields/PaymentFields.js.map +1 -0
- package/dist/components/PaymentForm/Messages.d.ts +118 -0
- package/dist/components/PaymentForm/Messages.js +125 -0
- package/dist/components/PaymentForm/Messages.js.map +1 -0
- package/dist/components/PaymentForm/PaymentForm.d.ts +28 -0
- package/dist/components/PaymentForm/PaymentForm.js +121 -0
- package/dist/components/PaymentForm/PaymentForm.js.map +1 -0
- package/dist/components/StatusScreens/Messages.d.ts +108 -0
- package/dist/components/StatusScreens/Messages.js +114 -0
- package/dist/components/StatusScreens/Messages.js.map +1 -0
- package/dist/components/StatusScreens/StatusScreens.d.ts +24 -0
- package/dist/components/StatusScreens/StatusScreens.js +32 -0
- package/dist/components/StatusScreens/StatusScreens.js.map +1 -0
- package/dist/constants.d.ts +59 -0
- package/dist/constants.js +282 -0
- package/dist/constants.js.map +1 -0
- package/dist/data/hooks/keys.d.ts +14 -0
- package/dist/data/hooks/keys.js +15 -0
- package/dist/data/hooks/keys.js.map +1 -0
- package/dist/data/hooks/useCheckout.d.ts +61 -0
- package/dist/data/hooks/useCheckout.js +343 -0
- package/dist/data/hooks/useCheckout.js.map +1 -0
- package/dist/data/hooks/useCheckoutGate.d.ts +16 -0
- package/dist/data/hooks/useCheckoutGate.js +61 -0
- package/dist/data/hooks/useCheckoutGate.js.map +1 -0
- package/dist/data/hooks/useCheckoutMutations.d.ts +22 -0
- package/dist/data/hooks/useCheckoutMutations.js +166 -0
- package/dist/data/hooks/useCheckoutMutations.js.map +1 -0
- package/dist/data/hooks/useCheckoutQueries.d.ts +32 -0
- package/dist/data/hooks/useCheckoutQueries.js +107 -0
- package/dist/data/hooks/useCheckoutQueries.js.map +1 -0
- package/dist/data/services/subs/urls.d.ts +2 -0
- package/dist/data/services/subs/urls.js +4 -0
- package/dist/data/services/subs/urls.js.map +1 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +2 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/messages.d.ts +8 -0
- package/dist/messages.js +10 -0
- package/dist/messages.js.map +1 -0
- package/dist/routes.d.ts +18 -0
- package/dist/routes.js +47 -0
- package/dist/routes.js.map +1 -0
- package/dist/slots/ExampleSlot/ExampleSlot.d.ts +3 -0
- package/dist/slots/ExampleSlot/ExampleSlot.js +6 -0
- package/dist/slots/ExampleSlot/ExampleSlot.js.map +1 -0
- package/dist/slots.d.ts +3 -0
- package/dist/slots.js +3 -0
- package/dist/slots.js.map +1 -0
- package/dist/style.scss +14 -0
- package/dist/styles/components/brandMarks.scss +41 -0
- package/dist/styles/components/cartSummary.scss +29 -0
- package/dist/styles/components/checkout.scss +29 -0
- package/dist/styles/components/checkoutStepper.scss +9 -0
- package/dist/styles/components/courseEnrollmentCard.scss +38 -0
- package/dist/styles/components/edxUnlimitedBanner.scss +138 -0
- package/dist/styles/components/enrollmentSummary.scss +19 -0
- package/dist/styles/components/paymentFields.scss +15 -0
- package/dist/styles/components/paymentForm.scss +139 -0
- package/dist/styles/components/statusScreens.scss +39 -0
- package/dist/styles/components/successScreen.scss +0 -0
- package/dist/types.d.ts +232 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/auth.d.ts +7 -0
- package/dist/utils/auth.js +28 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/billingDetails.d.ts +30 -0
- package/dist/utils/billingDetails.js +48 -0
- package/dist/utils/billingDetails.js.map +1 -0
- package/dist/utils/bootstrapApi.d.ts +20 -0
- package/dist/utils/bootstrapApi.js +142 -0
- package/dist/utils/bootstrapApi.js.map +1 -0
- package/dist/utils/cartApi.d.ts +16 -0
- package/dist/utils/cartApi.js +133 -0
- package/dist/utils/cartApi.js.map +1 -0
- package/dist/utils/checkout.d.ts +6 -0
- package/dist/utils/checkout.js +28 -0
- package/dist/utils/checkout.js.map +1 -0
- package/dist/utils/checkoutErrors.d.ts +1 -0
- package/dist/utils/checkoutErrors.js +11 -0
- package/dist/utils/checkoutErrors.js.map +1 -0
- package/dist/utils/fetchActiveSubscriptions.d.ts +4 -0
- package/dist/utils/fetchActiveSubscriptions.js +36 -0
- package/dist/utils/fetchActiveSubscriptions.js.map +1 -0
- package/dist/utils/fetchBillingPlans.d.ts +2 -0
- package/dist/utils/fetchBillingPlans.js +48 -0
- package/dist/utils/fetchBillingPlans.js.map +1 -0
- package/dist/utils/graphqlClient.d.ts +16 -0
- package/dist/utils/graphqlClient.js +39 -0
- package/dist/utils/graphqlClient.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +17 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/planQuery.d.ts +16 -0
- package/dist/utils/planQuery.js +57 -0
- package/dist/utils/planQuery.js.map +1 -0
- package/dist/utils/provision.d.ts +48 -0
- package/dist/utils/provision.js +161 -0
- package/dist/utils/provision.js.map +1 -0
- package/dist/utils/queries.d.ts +35 -0
- package/dist/utils/queries.js +168 -0
- package/dist/utils/queries.js.map +1 -0
- package/dist/utils/stripe.d.ts +23 -0
- package/dist/utils/stripe.js +86 -0
- package/dist/utils/stripe.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
export const appId = 'org.openedx.frontend.app.aca.checkout';
|
|
2
|
+
export const acaCheckoutRole = 'org.openedx.frontend.role.aca.checkout';
|
|
3
|
+
// --- Cart BI state machine ---------------------------------------------------
|
|
4
|
+
export const STATUS = {
|
|
5
|
+
IN_CART: 'IN_CART',
|
|
6
|
+
CONFIRM: 'CONFIRM',
|
|
7
|
+
SANCTION_STARTED: 'SANCTION_STARTED',
|
|
8
|
+
SANCTION_PASSED: 'SANCTION_PASSED',
|
|
9
|
+
SANCTION_BLOCK: 'SANCTION_BLOCK',
|
|
10
|
+
STRIPE_STARTED: 'STRIPE_STARTED',
|
|
11
|
+
STRIPE_SUBSCRIBED: 'STRIPE_SUBSCRIBED',
|
|
12
|
+
STRIPE_CONFIRMATION_REQUIRED: 'STRIPE_CONFIRMATION_REQUIRED',
|
|
13
|
+
STRIPE_FAIL: 'STRIPE_FAIL',
|
|
14
|
+
SUBSCRIPTION_CREATED: 'SUBSCRIPTION_CREATED',
|
|
15
|
+
};
|
|
16
|
+
export const TERMINAL_STATES = [
|
|
17
|
+
STATUS.SUBSCRIPTION_CREATED,
|
|
18
|
+
STATUS.SANCTION_BLOCK,
|
|
19
|
+
STATUS.STRIPE_FAIL,
|
|
20
|
+
];
|
|
21
|
+
export const STATUS_LABELS = {
|
|
22
|
+
IN_CART: 'Cart created',
|
|
23
|
+
CONFIRM: 'Order confirmed',
|
|
24
|
+
SANCTION_STARTED: 'Checking sanctions…',
|
|
25
|
+
SANCTION_PASSED: 'Sanctions passed — setting up your account…',
|
|
26
|
+
SANCTION_BLOCK: 'Order blocked',
|
|
27
|
+
STRIPE_STARTED: 'Setting up your subscription…',
|
|
28
|
+
STRIPE_CONFIRMATION_REQUIRED: 'Card verification required',
|
|
29
|
+
STRIPE_SUBSCRIBED: 'Card verified — finalizing…',
|
|
30
|
+
STRIPE_FAIL: 'Payment failed',
|
|
31
|
+
SUBSCRIPTION_CREATED: 'Subscription created',
|
|
32
|
+
};
|
|
33
|
+
export const isTerminalStatus = (status) => TERMINAL_STATES.includes(status);
|
|
34
|
+
/** UI phase derived from the raw bpStatus code + cart readiness. */
|
|
35
|
+
export function phaseFor(status, ready) {
|
|
36
|
+
if (status === STATUS.SUBSCRIPTION_CREATED)
|
|
37
|
+
return 'success';
|
|
38
|
+
if (status === STATUS.SANCTION_BLOCK)
|
|
39
|
+
return 'blocked';
|
|
40
|
+
if (status === STATUS.STRIPE_FAIL)
|
|
41
|
+
return 'failed';
|
|
42
|
+
if (status && status !== STATUS.IN_CART)
|
|
43
|
+
return 'processing';
|
|
44
|
+
return ready ? 'ready' : 'init';
|
|
45
|
+
}
|
|
46
|
+
// --- Dev defaults (match the local test harness) -----------------------------
|
|
47
|
+
export const DEFAULTS = {
|
|
48
|
+
apiUrl: '/api/graphql',
|
|
49
|
+
confirmIntentUrl: '/api/stripe/confirm-pi',
|
|
50
|
+
customerUid: '019d2bde-f769-743d-88f9-8bf0d1a7a002',
|
|
51
|
+
salableUid: '019d2ce7-05bc-7dd6-b141-e32df9ac86c1',
|
|
52
|
+
// Monthly Subscription template uid (not Annual)
|
|
53
|
+
billingPlanUid: '019d2ce7-05bf-733c-ba56-0fcafafeb69b',
|
|
54
|
+
};
|
|
55
|
+
export const LS_KEYS = { biId: 'twou.cartBiId', uid: 'twou.cartUid' };
|
|
56
|
+
// ─── Checkout gate feature flags (dev controls) ───────────────────────────────
|
|
57
|
+
// Set to false during development to bypass the country gate check.
|
|
58
|
+
// Should be true in production. Subscriber access is enforced outside this app.
|
|
59
|
+
/** When false, the country check is skipped — all countries can access checkout. */
|
|
60
|
+
export const GATE_CHECK_COUNTRY = true;
|
|
61
|
+
/**
|
|
62
|
+
* ISO 3166-1 alpha-2 country codes that are permitted to complete checkout.
|
|
63
|
+
* Add or remove codes here to open or restrict access by country.
|
|
64
|
+
*/
|
|
65
|
+
export const ALLOWED_CHECKOUT_COUNTRIES = ['GB', 'AU', 'CA', 'US'];
|
|
66
|
+
/**
|
|
67
|
+
* ISO 3166-1 alpha-2 country codes that require the extra billing-consent checkbox.
|
|
68
|
+
* Add or remove codes here to control which selected billing countries show it.
|
|
69
|
+
*/
|
|
70
|
+
export const COUNTRIES_REQUIRING_EXTRA_CONFIRM = ['GB', 'CA'];
|
|
71
|
+
// export const COUNTRIES: readonly (readonly [string, string])[] = [
|
|
72
|
+
// ['AF', 'Afghanistan'],
|
|
73
|
+
// ['AL', 'Albania'],
|
|
74
|
+
// ['DZ', 'Algeria'],
|
|
75
|
+
// ['AD', 'Andorra'],
|
|
76
|
+
// ['AO', 'Angola'],
|
|
77
|
+
// ['AG', 'Antigua and Barbuda'],
|
|
78
|
+
// ['AR', 'Argentina'],
|
|
79
|
+
// ['AM', 'Armenia'],
|
|
80
|
+
// ['AU', 'Australia'],
|
|
81
|
+
// ['AT', 'Austria'],
|
|
82
|
+
// ['AZ', 'Azerbaijan'],
|
|
83
|
+
// ['BS', 'Bahamas'],
|
|
84
|
+
// ['BH', 'Bahrain'],
|
|
85
|
+
// ['BD', 'Bangladesh'],
|
|
86
|
+
// ['BB', 'Barbados'],
|
|
87
|
+
// ['BY', 'Belarus'],
|
|
88
|
+
// ['BE', 'Belgium'],
|
|
89
|
+
// ['BZ', 'Belize'],
|
|
90
|
+
// ['BJ', 'Benin'],
|
|
91
|
+
// ['BT', 'Bhutan'],
|
|
92
|
+
// ['BO', 'Bolivia'],
|
|
93
|
+
// ['BA', 'Bosnia and Herzegovina'],
|
|
94
|
+
// ['BW', 'Botswana'],
|
|
95
|
+
// ['BR', 'Brazil'],
|
|
96
|
+
// ['BN', 'Brunei'],
|
|
97
|
+
// ['BG', 'Bulgaria'],
|
|
98
|
+
// ['BF', 'Burkina Faso'],
|
|
99
|
+
// ['BI', 'Burundi'],
|
|
100
|
+
// ['CV', 'Cabo Verde'],
|
|
101
|
+
// ['KH', 'Cambodia'],
|
|
102
|
+
// ['CM', 'Cameroon'],
|
|
103
|
+
// ['CA', 'Canada'],
|
|
104
|
+
// ['CF', 'Central African Republic'],
|
|
105
|
+
// ['TD', 'Chad'],
|
|
106
|
+
// ['CL', 'Chile'],
|
|
107
|
+
// ['CN', 'China'],
|
|
108
|
+
// ['CO', 'Colombia'],
|
|
109
|
+
// ['KM', 'Comoros'],
|
|
110
|
+
// ['CG', 'Congo (Congo-Brazzaville)'],
|
|
111
|
+
// ['CR', 'Costa Rica'],
|
|
112
|
+
// ['HR', 'Croatia'],
|
|
113
|
+
// ['CU', 'Cuba'],
|
|
114
|
+
// ['CY', 'Cyprus'],
|
|
115
|
+
// ['CZ', 'Czechia (Czech Republic)'],
|
|
116
|
+
// ['CD', 'Democratic Republic of the Congo'],
|
|
117
|
+
// ['DK', 'Denmark'],
|
|
118
|
+
// ['DJ', 'Djibouti'],
|
|
119
|
+
// ['DM', 'Dominica'],
|
|
120
|
+
// ['DO', 'Dominican Republic'],
|
|
121
|
+
// ['EC', 'Ecuador'],
|
|
122
|
+
// ['EG', 'Egypt'],
|
|
123
|
+
// ['SV', 'El Salvador'],
|
|
124
|
+
// ['GQ', 'Equatorial Guinea'],
|
|
125
|
+
// ['ER', 'Eritrea'],
|
|
126
|
+
// ['EE', 'Estonia'],
|
|
127
|
+
// ['SZ', 'Eswatini'],
|
|
128
|
+
// ['ET', 'Ethiopia'],
|
|
129
|
+
// ['FJ', 'Fiji'],
|
|
130
|
+
// ['FI', 'Finland'],
|
|
131
|
+
// ['FR', 'France'],
|
|
132
|
+
// ['GA', 'Gabon'],
|
|
133
|
+
// ['GM', 'Gambia'],
|
|
134
|
+
// ['GE', 'Georgia'],
|
|
135
|
+
// ['DE', 'Germany'],
|
|
136
|
+
// ['GH', 'Ghana'],
|
|
137
|
+
// ['GR', 'Greece'],
|
|
138
|
+
// ['GD', 'Grenada'],
|
|
139
|
+
// ['GT', 'Guatemala'],
|
|
140
|
+
// ['GN', 'Guinea'],
|
|
141
|
+
// ['GW', 'Guinea-Bissau'],
|
|
142
|
+
// ['GY', 'Guyana'],
|
|
143
|
+
// ['HT', 'Haiti'],
|
|
144
|
+
// ['VA', 'Holy See (Vatican City)'],
|
|
145
|
+
// ['HN', 'Honduras'],
|
|
146
|
+
// ['HU', 'Hungary'],
|
|
147
|
+
// ['IS', 'Iceland'],
|
|
148
|
+
// ['ID', 'Indonesia'],
|
|
149
|
+
// ['IR', 'Iran'],
|
|
150
|
+
// ['IQ', 'Iraq'],
|
|
151
|
+
// ['IE', 'Ireland'],
|
|
152
|
+
// ['IL', 'Israel'],
|
|
153
|
+
// ['IT', 'Italy'],
|
|
154
|
+
// ['CI', "Ivory Coast (Côte d'Ivoire)"],
|
|
155
|
+
// ['JM', 'Jamaica'],
|
|
156
|
+
// ['JP', 'Japan'],
|
|
157
|
+
// ['JO', 'Jordan'],
|
|
158
|
+
// ['KZ', 'Kazakhstan'],
|
|
159
|
+
// ['KE', 'Kenya'],
|
|
160
|
+
// ['KI', 'Kiribati'],
|
|
161
|
+
// ['KW', 'Kuwait'],
|
|
162
|
+
// ['KG', 'Kyrgyzstan'],
|
|
163
|
+
// ['LA', 'Laos'],
|
|
164
|
+
// ['LV', 'Latvia'],
|
|
165
|
+
// ['LB', 'Lebanon'],
|
|
166
|
+
// ['LS', 'Lesotho'],
|
|
167
|
+
// ['LR', 'Liberia'],
|
|
168
|
+
// ['LY', 'Libya'],
|
|
169
|
+
// ['LI', 'Liechtenstein'],
|
|
170
|
+
// ['LT', 'Lithuania'],
|
|
171
|
+
// ['LU', 'Luxembourg'],
|
|
172
|
+
// ['MG', 'Madagascar'],
|
|
173
|
+
// ['MW', 'Malawi'],
|
|
174
|
+
// ['MY', 'Malaysia'],
|
|
175
|
+
// ['MV', 'Maldives'],
|
|
176
|
+
// ['ML', 'Mali'],
|
|
177
|
+
// ['MT', 'Malta'],
|
|
178
|
+
// ['MH', 'Marshall Islands'],
|
|
179
|
+
// ['MR', 'Mauritania'],
|
|
180
|
+
// ['MU', 'Mauritius'],
|
|
181
|
+
// ['MX', 'Mexico'],
|
|
182
|
+
// ['FM', 'Micronesia'],
|
|
183
|
+
// ['MD', 'Moldova'],
|
|
184
|
+
// ['MC', 'Monaco'],
|
|
185
|
+
// ['MN', 'Mongolia'],
|
|
186
|
+
// ['ME', 'Montenegro'],
|
|
187
|
+
// ['MA', 'Morocco'],
|
|
188
|
+
// ['MZ', 'Mozambique'],
|
|
189
|
+
// ['MM', 'Myanmar (Burma)'],
|
|
190
|
+
// ['NA', 'Namibia'],
|
|
191
|
+
// ['NR', 'Nauru'],
|
|
192
|
+
// ['NP', 'Nepal'],
|
|
193
|
+
// ['NL', 'Netherlands'],
|
|
194
|
+
// ['NZ', 'New Zealand'],
|
|
195
|
+
// ['NI', 'Nicaragua'],
|
|
196
|
+
// ['NE', 'Niger'],
|
|
197
|
+
// ['NG', 'Nigeria'],
|
|
198
|
+
// ['KP', 'North Korea'],
|
|
199
|
+
// ['MK', 'North Macedonia'],
|
|
200
|
+
// ['NO', 'Norway'],
|
|
201
|
+
// ['OM', 'Oman'],
|
|
202
|
+
// ['PK', 'Pakistan'],
|
|
203
|
+
// ['PW', 'Palau'],
|
|
204
|
+
// ['PS', 'Palestine State'],
|
|
205
|
+
// ['PA', 'Panama'],
|
|
206
|
+
// ['PG', 'Papua New Guinea'],
|
|
207
|
+
// ['PY', 'Paraguay'],
|
|
208
|
+
// ['PE', 'Peru'],
|
|
209
|
+
// ['PH', 'Philippines'],
|
|
210
|
+
// ['PL', 'Poland'],
|
|
211
|
+
// ['PT', 'Portugal'],
|
|
212
|
+
// ['QA', 'Qatar'],
|
|
213
|
+
// ['RO', 'Romania'],
|
|
214
|
+
// ['RU', 'Russia'],
|
|
215
|
+
// ['RW', 'Rwanda'],
|
|
216
|
+
// ['KN', 'Saint Kitts and Nevis'],
|
|
217
|
+
// ['LC', 'Saint Lucia'],
|
|
218
|
+
// ['VC', 'Saint Vincent and the Grenadines'],
|
|
219
|
+
// ['WS', 'Samoa'],
|
|
220
|
+
// ['SM', 'San Marino'],
|
|
221
|
+
// ['ST', 'Sao Tome and Principe'],
|
|
222
|
+
// ['SA', 'Saudi Arabia'],
|
|
223
|
+
// ['SN', 'Senegal'],
|
|
224
|
+
// ['RS', 'Serbia'],
|
|
225
|
+
// ['SC', 'Seychelles'],
|
|
226
|
+
// ['SL', 'Sierra Leone'],
|
|
227
|
+
// ['SG', 'Singapore'],
|
|
228
|
+
// ['SK', 'Slovakia'],
|
|
229
|
+
// ['SI', 'Slovenia'],
|
|
230
|
+
// ['SB', 'Solomon Islands'],
|
|
231
|
+
// ['SO', 'Somalia'],
|
|
232
|
+
// ['ZA', 'South Africa'],
|
|
233
|
+
// ['KR', 'South Korea'],
|
|
234
|
+
// ['SS', 'South Sudan'],
|
|
235
|
+
// ['ES', 'Spain'],
|
|
236
|
+
// ['LK', 'Sri Lanka'],
|
|
237
|
+
// ['SD', 'Sudan'],
|
|
238
|
+
// ['SR', 'Suriname'],
|
|
239
|
+
// ['SE', 'Sweden'],
|
|
240
|
+
// ['CH', 'Switzerland'],
|
|
241
|
+
// ['SY', 'Syria'],
|
|
242
|
+
// ['TJ', 'Tajikistan'],
|
|
243
|
+
// ['TZ', 'Tanzania'],
|
|
244
|
+
// ['TH', 'Thailand'],
|
|
245
|
+
// ['TL', 'Timor-Leste'],
|
|
246
|
+
// ['TG', 'Togo'],
|
|
247
|
+
// ['TO', 'Tonga'],
|
|
248
|
+
// ['TT', 'Trinidad and Tobago'],
|
|
249
|
+
// ['TN', 'Tunisia'],
|
|
250
|
+
// ['TR', 'Turkey'],
|
|
251
|
+
// ['TM', 'Turkmenistan'],
|
|
252
|
+
// ['TV', 'Tuvalu'],
|
|
253
|
+
// ['UG', 'Uganda'],
|
|
254
|
+
// ['UA', 'Ukraine'],
|
|
255
|
+
// ['AE', 'United Arab Emirates'],
|
|
256
|
+
// ['GB', 'United Kingdom'],
|
|
257
|
+
// ['US', 'United States'],
|
|
258
|
+
// ['UY', 'Uruguay'],
|
|
259
|
+
// ['UZ', 'Uzbekistan'],
|
|
260
|
+
// ['VU', 'Vanuatu'],
|
|
261
|
+
// ['VE', 'Venezuela'],
|
|
262
|
+
// ['VN', 'Vietnam'],
|
|
263
|
+
// ['YE', 'Yemen'],
|
|
264
|
+
// ['ZM', 'Zambia'],
|
|
265
|
+
// ['ZW', 'Zimbabwe'],
|
|
266
|
+
// ];
|
|
267
|
+
/** Billing country dropdown options for the supported countries in this checkout flow. */
|
|
268
|
+
export const BILLING_COUNTRIES = [
|
|
269
|
+
['GB', 'United Kingdom'],
|
|
270
|
+
['AU', 'Australia'],
|
|
271
|
+
['CA', 'Canada'],
|
|
272
|
+
['US', 'United States'],
|
|
273
|
+
];
|
|
274
|
+
// --- Stripe Element presentation ---------------------------------------------
|
|
275
|
+
// A div that hosts a Stripe Element but reads like a Paragon input.
|
|
276
|
+
export const STRIPE_FIELD_STYLE = {
|
|
277
|
+
height: 'auto', minHeight: '2.875rem', display: 'flex', alignItems: 'center',
|
|
278
|
+
};
|
|
279
|
+
export const STRIPE_ELEMENT_OPTS = {
|
|
280
|
+
style: { base: { fontSize: '16px', color: '#1a1a1a', '::placeholder': { color: '#8f8f8f' } } },
|
|
281
|
+
};
|
|
282
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAG,uCAAuC,CAAC;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,wCAAwC,CAAC;AAExE,gFAAgF;AAChF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,iBAAiB,EAAE,mBAAmB;IACtC,4BAA4B,EAAE,8BAA8B;IAC5D,WAAW,EAAE,aAAa;IAC1B,oBAAoB,EAAE,sBAAsB;CACpC,CAAC;AAMX,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC,MAAM,CAAC,oBAAoB;IAC3B,MAAM,CAAC,cAAc;IACrB,MAAM,CAAC,WAAW;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,iBAAiB;IAC1B,gBAAgB,EAAE,qBAAqB;IACvC,eAAe,EAAE,6CAA6C;IAC9D,cAAc,EAAE,eAAe;IAC/B,cAAc,EAAE,+BAA+B;IAC/C,4BAA4B,EAAE,4BAA4B;IAC1D,iBAAiB,EAAE,6BAA6B;IAChD,WAAW,EAAE,gBAAgB;IAC7B,oBAAoB,EAAE,sBAAsB;CAC7C,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAiC,EAAW,EAAE,CAC7E,eAAe,CAAC,QAAQ,CAAC,MAAgB,CAAC,CAAC;AAE7C,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CAAC,MAAqB,EAAE,KAAc;IAC5D,IAAI,MAAM,KAAK,MAAM,CAAC,oBAAoB;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,MAAM,KAAK,MAAM,CAAC,cAAc;QAAE,OAAO,SAAS,CAAC;IACvD,IAAI,MAAM,KAAK,MAAM,CAAC,WAAW;QAAE,OAAO,QAAQ,CAAC;IACnD,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,OAAO;QAAE,OAAO,YAAY,CAAC;IAC7D,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAClC,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,MAAM,EAAE,cAAc;IACtB,gBAAgB,EAAE,wBAAwB;IAC1C,WAAW,EAAE,sCAAsC;IACnD,UAAU,EAAE,sCAAsC;IAClD,iDAAiD;IACjD,cAAc,EAAE,sCAAsC;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;AAEtE,iFAAiF;AACjF,oEAAoE;AACpE,gFAAgF;AAEhF,oFAAoF;AACpF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEtF;;;GAGG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAEjF,qEAAqE;AACrE,2BAA2B;AAC3B,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,mCAAmC;AACnC,yBAAyB;AACzB,uBAAuB;AACvB,yBAAyB;AACzB,uBAAuB;AACvB,0BAA0B;AAC1B,uBAAuB;AACvB,uBAAuB;AACvB,0BAA0B;AAC1B,wBAAwB;AACxB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,qBAAqB;AACrB,sBAAsB;AACtB,uBAAuB;AACvB,sCAAsC;AACtC,wBAAwB;AACxB,sBAAsB;AACtB,sBAAsB;AACtB,wBAAwB;AACxB,4BAA4B;AAC5B,uBAAuB;AACvB,0BAA0B;AAC1B,wBAAwB;AACxB,wBAAwB;AACxB,sBAAsB;AACtB,wCAAwC;AACxC,oBAAoB;AACpB,qBAAqB;AACrB,qBAAqB;AACrB,wBAAwB;AACxB,uBAAuB;AACvB,yCAAyC;AACzC,0BAA0B;AAC1B,uBAAuB;AACvB,oBAAoB;AACpB,sBAAsB;AACtB,wCAAwC;AACxC,gDAAgD;AAChD,uBAAuB;AACvB,wBAAwB;AACxB,wBAAwB;AACxB,kCAAkC;AAClC,uBAAuB;AACvB,qBAAqB;AACrB,2BAA2B;AAC3B,iCAAiC;AACjC,uBAAuB;AACvB,uBAAuB;AACvB,wBAAwB;AACxB,wBAAwB;AACxB,oBAAoB;AACpB,uBAAuB;AACvB,sBAAsB;AACtB,qBAAqB;AACrB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,qBAAqB;AACrB,sBAAsB;AACtB,uBAAuB;AACvB,yBAAyB;AACzB,sBAAsB;AACtB,6BAA6B;AAC7B,sBAAsB;AACtB,qBAAqB;AACrB,uCAAuC;AACvC,wBAAwB;AACxB,uBAAuB;AACvB,uBAAuB;AACvB,yBAAyB;AACzB,oBAAoB;AACpB,oBAAoB;AACpB,uBAAuB;AACvB,sBAAsB;AACtB,qBAAqB;AACrB,2CAA2C;AAC3C,uBAAuB;AACvB,qBAAqB;AACrB,sBAAsB;AACtB,0BAA0B;AAC1B,qBAAqB;AACrB,wBAAwB;AACxB,sBAAsB;AACtB,0BAA0B;AAC1B,oBAAoB;AACpB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,qBAAqB;AACrB,6BAA6B;AAC7B,yBAAyB;AACzB,0BAA0B;AAC1B,0BAA0B;AAC1B,sBAAsB;AACtB,wBAAwB;AACxB,wBAAwB;AACxB,oBAAoB;AACpB,qBAAqB;AACrB,gCAAgC;AAChC,0BAA0B;AAC1B,yBAAyB;AACzB,sBAAsB;AACtB,0BAA0B;AAC1B,uBAAuB;AACvB,sBAAsB;AACtB,wBAAwB;AACxB,0BAA0B;AAC1B,uBAAuB;AACvB,0BAA0B;AAC1B,+BAA+B;AAC/B,uBAAuB;AACvB,qBAAqB;AACrB,qBAAqB;AACrB,2BAA2B;AAC3B,2BAA2B;AAC3B,yBAAyB;AACzB,qBAAqB;AACrB,uBAAuB;AACvB,2BAA2B;AAC3B,+BAA+B;AAC/B,sBAAsB;AACtB,oBAAoB;AACpB,wBAAwB;AACxB,qBAAqB;AACrB,+BAA+B;AAC/B,sBAAsB;AACtB,gCAAgC;AAChC,wBAAwB;AACxB,oBAAoB;AACpB,2BAA2B;AAC3B,sBAAsB;AACtB,wBAAwB;AACxB,qBAAqB;AACrB,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,qCAAqC;AACrC,2BAA2B;AAC3B,gDAAgD;AAChD,qBAAqB;AACrB,0BAA0B;AAC1B,qCAAqC;AACrC,4BAA4B;AAC5B,uBAAuB;AACvB,sBAAsB;AACtB,0BAA0B;AAC1B,4BAA4B;AAC5B,yBAAyB;AACzB,wBAAwB;AACxB,wBAAwB;AACxB,+BAA+B;AAC/B,uBAAuB;AACvB,4BAA4B;AAC5B,2BAA2B;AAC3B,2BAA2B;AAC3B,qBAAqB;AACrB,yBAAyB;AACzB,qBAAqB;AACrB,wBAAwB;AACxB,sBAAsB;AACtB,2BAA2B;AAC3B,qBAAqB;AACrB,0BAA0B;AAC1B,wBAAwB;AACxB,wBAAwB;AACxB,2BAA2B;AAC3B,oBAAoB;AACpB,qBAAqB;AACrB,mCAAmC;AACnC,uBAAuB;AACvB,sBAAsB;AACtB,4BAA4B;AAC5B,sBAAsB;AACtB,sBAAsB;AACtB,uBAAuB;AACvB,oCAAoC;AACpC,8BAA8B;AAC9B,6BAA6B;AAC7B,uBAAuB;AACvB,0BAA0B;AAC1B,uBAAuB;AACvB,yBAAyB;AACzB,uBAAuB;AACvB,qBAAqB;AACrB,sBAAsB;AACtB,wBAAwB;AACxB,KAAK;AAEL,0FAA0F;AAC1F,MAAM,CAAC,MAAM,iBAAiB,GAA2C;IACvE,CAAC,IAAI,EAAE,gBAAgB,CAAC;IACxB,CAAC,IAAI,EAAE,WAAW,CAAC;IACnB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAChB,CAAC,IAAI,EAAE,eAAe,CAAC;CACxB,CAAC;AAEF,gFAAgF;AAChF,oEAAoE;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAkB;IAC/C,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ;CAC7E,CAAC;AACF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;CAC/F,CAAC","sourcesContent":["import type { CSSProperties } from 'react';\n\nexport const appId = 'org.openedx.frontend.app.aca.checkout';\nexport const acaCheckoutRole = 'org.openedx.frontend.role.aca.checkout';\n\n// --- Cart BI state machine ---------------------------------------------------\nexport const STATUS = {\n IN_CART: 'IN_CART',\n CONFIRM: 'CONFIRM',\n SANCTION_STARTED: 'SANCTION_STARTED',\n SANCTION_PASSED: 'SANCTION_PASSED',\n SANCTION_BLOCK: 'SANCTION_BLOCK',\n STRIPE_STARTED: 'STRIPE_STARTED',\n STRIPE_SUBSCRIBED: 'STRIPE_SUBSCRIBED',\n STRIPE_CONFIRMATION_REQUIRED: 'STRIPE_CONFIRMATION_REQUIRED',\n STRIPE_FAIL: 'STRIPE_FAIL',\n SUBSCRIPTION_CREATED: 'SUBSCRIPTION_CREATED',\n} as const;\n\nexport type Status = typeof STATUS[keyof typeof STATUS];\n\nexport type Phase = 'init' | 'ready' | 'processing' | 'threeds' | 'success' | 'blocked' | 'failed';\n\nexport const TERMINAL_STATES: Status[] = [\n STATUS.SUBSCRIPTION_CREATED,\n STATUS.SANCTION_BLOCK,\n STATUS.STRIPE_FAIL,\n];\n\nexport const STATUS_LABELS: Record<string, string> = {\n IN_CART: 'Cart created',\n CONFIRM: 'Order confirmed',\n SANCTION_STARTED: 'Checking sanctions…',\n SANCTION_PASSED: 'Sanctions passed — setting up your account…',\n SANCTION_BLOCK: 'Order blocked',\n STRIPE_STARTED: 'Setting up your subscription…',\n STRIPE_CONFIRMATION_REQUIRED: 'Card verification required',\n STRIPE_SUBSCRIBED: 'Card verified — finalizing…',\n STRIPE_FAIL: 'Payment failed',\n SUBSCRIPTION_CREATED: 'Subscription created',\n};\n\nexport const isTerminalStatus = (status: Status | null | undefined): boolean =>\n TERMINAL_STATES.includes(status as Status);\n\n/** UI phase derived from the raw bpStatus code + cart readiness. */\nexport function phaseFor(status: Status | null, ready: boolean): Phase {\n if (status === STATUS.SUBSCRIPTION_CREATED) return 'success';\n if (status === STATUS.SANCTION_BLOCK) return 'blocked';\n if (status === STATUS.STRIPE_FAIL) return 'failed';\n if (status && status !== STATUS.IN_CART) return 'processing';\n return ready ? 'ready' : 'init';\n}\n\n// --- Dev defaults (match the local test harness) -----------------------------\nexport const DEFAULTS = {\n apiUrl: '/api/graphql',\n confirmIntentUrl: '/api/stripe/confirm-pi',\n customerUid: '019d2bde-f769-743d-88f9-8bf0d1a7a002',\n salableUid: '019d2ce7-05bc-7dd6-b141-e32df9ac86c1',\n // Monthly Subscription template uid (not Annual)\n billingPlanUid: '019d2ce7-05bf-733c-ba56-0fcafafeb69b',\n};\n\nexport const LS_KEYS = { biId: 'twou.cartBiId', uid: 'twou.cartUid' };\n\n// ─── Checkout gate feature flags (dev controls) ───────────────────────────────\n// Set to false during development to bypass the country gate check.\n// Should be true in production. Subscriber access is enforced outside this app.\n\n/** When false, the country check is skipped — all countries can access checkout. */\nexport const GATE_CHECK_COUNTRY = true;\n\n/**\n * ISO 3166-1 alpha-2 country codes that are permitted to complete checkout.\n * Add or remove codes here to open or restrict access by country.\n */\nexport const ALLOWED_CHECKOUT_COUNTRIES: readonly string[] = ['GB', 'AU', 'CA', 'US'];\n\n/**\n * ISO 3166-1 alpha-2 country codes that require the extra billing-consent checkbox.\n * Add or remove codes here to control which selected billing countries show it.\n */\nexport const COUNTRIES_REQUIRING_EXTRA_CONFIRM: readonly string[] = ['GB', 'CA'];\n\n// export const COUNTRIES: readonly (readonly [string, string])[] = [\n// ['AF', 'Afghanistan'],\n// ['AL', 'Albania'],\n// ['DZ', 'Algeria'],\n// ['AD', 'Andorra'],\n// ['AO', 'Angola'],\n// ['AG', 'Antigua and Barbuda'],\n// ['AR', 'Argentina'],\n// ['AM', 'Armenia'],\n// ['AU', 'Australia'],\n// ['AT', 'Austria'],\n// ['AZ', 'Azerbaijan'],\n// ['BS', 'Bahamas'],\n// ['BH', 'Bahrain'],\n// ['BD', 'Bangladesh'],\n// ['BB', 'Barbados'],\n// ['BY', 'Belarus'],\n// ['BE', 'Belgium'],\n// ['BZ', 'Belize'],\n// ['BJ', 'Benin'],\n// ['BT', 'Bhutan'],\n// ['BO', 'Bolivia'],\n// ['BA', 'Bosnia and Herzegovina'],\n// ['BW', 'Botswana'],\n// ['BR', 'Brazil'],\n// ['BN', 'Brunei'],\n// ['BG', 'Bulgaria'],\n// ['BF', 'Burkina Faso'],\n// ['BI', 'Burundi'],\n// ['CV', 'Cabo Verde'],\n// ['KH', 'Cambodia'],\n// ['CM', 'Cameroon'],\n// ['CA', 'Canada'],\n// ['CF', 'Central African Republic'],\n// ['TD', 'Chad'],\n// ['CL', 'Chile'],\n// ['CN', 'China'],\n// ['CO', 'Colombia'],\n// ['KM', 'Comoros'],\n// ['CG', 'Congo (Congo-Brazzaville)'],\n// ['CR', 'Costa Rica'],\n// ['HR', 'Croatia'],\n// ['CU', 'Cuba'],\n// ['CY', 'Cyprus'],\n// ['CZ', 'Czechia (Czech Republic)'],\n// ['CD', 'Democratic Republic of the Congo'],\n// ['DK', 'Denmark'],\n// ['DJ', 'Djibouti'],\n// ['DM', 'Dominica'],\n// ['DO', 'Dominican Republic'],\n// ['EC', 'Ecuador'],\n// ['EG', 'Egypt'],\n// ['SV', 'El Salvador'],\n// ['GQ', 'Equatorial Guinea'],\n// ['ER', 'Eritrea'],\n// ['EE', 'Estonia'],\n// ['SZ', 'Eswatini'],\n// ['ET', 'Ethiopia'],\n// ['FJ', 'Fiji'],\n// ['FI', 'Finland'],\n// ['FR', 'France'],\n// ['GA', 'Gabon'],\n// ['GM', 'Gambia'],\n// ['GE', 'Georgia'],\n// ['DE', 'Germany'],\n// ['GH', 'Ghana'],\n// ['GR', 'Greece'],\n// ['GD', 'Grenada'],\n// ['GT', 'Guatemala'],\n// ['GN', 'Guinea'],\n// ['GW', 'Guinea-Bissau'],\n// ['GY', 'Guyana'],\n// ['HT', 'Haiti'],\n// ['VA', 'Holy See (Vatican City)'],\n// ['HN', 'Honduras'],\n// ['HU', 'Hungary'],\n// ['IS', 'Iceland'],\n// ['ID', 'Indonesia'],\n// ['IR', 'Iran'],\n// ['IQ', 'Iraq'],\n// ['IE', 'Ireland'],\n// ['IL', 'Israel'],\n// ['IT', 'Italy'],\n// ['CI', \"Ivory Coast (Côte d'Ivoire)\"],\n// ['JM', 'Jamaica'],\n// ['JP', 'Japan'],\n// ['JO', 'Jordan'],\n// ['KZ', 'Kazakhstan'],\n// ['KE', 'Kenya'],\n// ['KI', 'Kiribati'],\n// ['KW', 'Kuwait'],\n// ['KG', 'Kyrgyzstan'],\n// ['LA', 'Laos'],\n// ['LV', 'Latvia'],\n// ['LB', 'Lebanon'],\n// ['LS', 'Lesotho'],\n// ['LR', 'Liberia'],\n// ['LY', 'Libya'],\n// ['LI', 'Liechtenstein'],\n// ['LT', 'Lithuania'],\n// ['LU', 'Luxembourg'],\n// ['MG', 'Madagascar'],\n// ['MW', 'Malawi'],\n// ['MY', 'Malaysia'],\n// ['MV', 'Maldives'],\n// ['ML', 'Mali'],\n// ['MT', 'Malta'],\n// ['MH', 'Marshall Islands'],\n// ['MR', 'Mauritania'],\n// ['MU', 'Mauritius'],\n// ['MX', 'Mexico'],\n// ['FM', 'Micronesia'],\n// ['MD', 'Moldova'],\n// ['MC', 'Monaco'],\n// ['MN', 'Mongolia'],\n// ['ME', 'Montenegro'],\n// ['MA', 'Morocco'],\n// ['MZ', 'Mozambique'],\n// ['MM', 'Myanmar (Burma)'],\n// ['NA', 'Namibia'],\n// ['NR', 'Nauru'],\n// ['NP', 'Nepal'],\n// ['NL', 'Netherlands'],\n// ['NZ', 'New Zealand'],\n// ['NI', 'Nicaragua'],\n// ['NE', 'Niger'],\n// ['NG', 'Nigeria'],\n// ['KP', 'North Korea'],\n// ['MK', 'North Macedonia'],\n// ['NO', 'Norway'],\n// ['OM', 'Oman'],\n// ['PK', 'Pakistan'],\n// ['PW', 'Palau'],\n// ['PS', 'Palestine State'],\n// ['PA', 'Panama'],\n// ['PG', 'Papua New Guinea'],\n// ['PY', 'Paraguay'],\n// ['PE', 'Peru'],\n// ['PH', 'Philippines'],\n// ['PL', 'Poland'],\n// ['PT', 'Portugal'],\n// ['QA', 'Qatar'],\n// ['RO', 'Romania'],\n// ['RU', 'Russia'],\n// ['RW', 'Rwanda'],\n// ['KN', 'Saint Kitts and Nevis'],\n// ['LC', 'Saint Lucia'],\n// ['VC', 'Saint Vincent and the Grenadines'],\n// ['WS', 'Samoa'],\n// ['SM', 'San Marino'],\n// ['ST', 'Sao Tome and Principe'],\n// ['SA', 'Saudi Arabia'],\n// ['SN', 'Senegal'],\n// ['RS', 'Serbia'],\n// ['SC', 'Seychelles'],\n// ['SL', 'Sierra Leone'],\n// ['SG', 'Singapore'],\n// ['SK', 'Slovakia'],\n// ['SI', 'Slovenia'],\n// ['SB', 'Solomon Islands'],\n// ['SO', 'Somalia'],\n// ['ZA', 'South Africa'],\n// ['KR', 'South Korea'],\n// ['SS', 'South Sudan'],\n// ['ES', 'Spain'],\n// ['LK', 'Sri Lanka'],\n// ['SD', 'Sudan'],\n// ['SR', 'Suriname'],\n// ['SE', 'Sweden'],\n// ['CH', 'Switzerland'],\n// ['SY', 'Syria'],\n// ['TJ', 'Tajikistan'],\n// ['TZ', 'Tanzania'],\n// ['TH', 'Thailand'],\n// ['TL', 'Timor-Leste'],\n// ['TG', 'Togo'],\n// ['TO', 'Tonga'],\n// ['TT', 'Trinidad and Tobago'],\n// ['TN', 'Tunisia'],\n// ['TR', 'Turkey'],\n// ['TM', 'Turkmenistan'],\n// ['TV', 'Tuvalu'],\n// ['UG', 'Uganda'],\n// ['UA', 'Ukraine'],\n// ['AE', 'United Arab Emirates'],\n// ['GB', 'United Kingdom'],\n// ['US', 'United States'],\n// ['UY', 'Uruguay'],\n// ['UZ', 'Uzbekistan'],\n// ['VU', 'Vanuatu'],\n// ['VE', 'Venezuela'],\n// ['VN', 'Vietnam'],\n// ['YE', 'Yemen'],\n// ['ZM', 'Zambia'],\n// ['ZW', 'Zimbabwe'],\n// ];\n\n/** Billing country dropdown options for the supported countries in this checkout flow. */\nexport const BILLING_COUNTRIES: readonly (readonly [string, string])[] = [\n ['GB', 'United Kingdom'],\n ['AU', 'Australia'],\n ['CA', 'Canada'],\n ['US', 'United States'],\n];\n\n// --- Stripe Element presentation ---------------------------------------------\n// A div that hosts a Stripe Element but reads like a Paragon input.\nexport const STRIPE_FIELD_STYLE: CSSProperties = {\n height: 'auto', minHeight: '2.875rem', display: 'flex', alignItems: 'center',\n};\nexport const STRIPE_ELEMENT_OPTS = {\n style: { base: { fontSize: '16px', color: '#1a1a1a', '::placeholder': { color: '#8f8f8f' } } },\n};\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* query/keys.ts — typed query-key factory for the checkout module.
|
|
3
|
+
*/
|
|
4
|
+
export declare const checkoutKeys: {
|
|
5
|
+
all: readonly ["checkout"];
|
|
6
|
+
status: (cartBiId: string) => readonly ["checkout", "status", string];
|
|
7
|
+
clientSecret: (subscriptionId: string) => readonly ["checkout", "clientSecret", string];
|
|
8
|
+
subscriptionId: (cartBiId: string) => readonly ["checkout", "subscriptionId", string];
|
|
9
|
+
customer: (userEmail: string) => readonly ["checkout", "customer", string];
|
|
10
|
+
salable: (maId: string) => readonly ["checkout", "salable", string];
|
|
11
|
+
billingPlans: () => readonly ["checkout", "billingPlans"];
|
|
12
|
+
viaxSession: () => readonly ["checkout", "viaxSession"];
|
|
13
|
+
courseDetail: (courseKey: string) => readonly ["checkout", "courseDetail", string];
|
|
14
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* query/keys.ts — typed query-key factory for the checkout module.
|
|
3
|
+
*/
|
|
4
|
+
export const checkoutKeys = {
|
|
5
|
+
all: ['checkout'],
|
|
6
|
+
status: (cartBiId) => ['checkout', 'status', cartBiId],
|
|
7
|
+
clientSecret: (subscriptionId) => ['checkout', 'clientSecret', subscriptionId],
|
|
8
|
+
subscriptionId: (cartBiId) => ['checkout', 'subscriptionId', cartBiId],
|
|
9
|
+
customer: (userEmail) => ['checkout', 'customer', userEmail],
|
|
10
|
+
salable: (maId) => ['checkout', 'salable', maId],
|
|
11
|
+
billingPlans: () => ['checkout', 'billingPlans'],
|
|
12
|
+
viaxSession: () => ['checkout', 'viaxSession'],
|
|
13
|
+
courseDetail: (courseKey) => ['checkout', 'courseDetail', courseKey],
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/data/hooks/keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,GAAG,EAAE,CAAC,UAAU,CAAU;IAC1B,MAAM,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAU;IACvE,YAAY,EAAE,CAAC,cAAsB,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,cAAc,CAAU;IAC/F,cAAc,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,CAAU;IACvF,QAAQ,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAU;IAC7E,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAU;IACjE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,cAAc,CAAU;IACzD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,aAAa,CAAU;IACvD,YAAY,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,CAAU;CACtF,CAAC","sourcesContent":["/**\n * query/keys.ts — typed query-key factory for the checkout module.\n */\nexport const checkoutKeys = {\n all: ['checkout'] as const,\n status: (cartBiId: string) => ['checkout', 'status', cartBiId] as const,\n clientSecret: (subscriptionId: string) => ['checkout', 'clientSecret', subscriptionId] as const,\n subscriptionId: (cartBiId: string) => ['checkout', 'subscriptionId', cartBiId] as const,\n customer: (userEmail: string) => ['checkout', 'customer', userEmail] as const,\n salable: (maId: string) => ['checkout', 'salable', maId] as const,\n billingPlans: () => ['checkout', 'billingPlans'] as const,\n viaxSession: () => ['checkout', 'viaxSession'] as const,\n courseDetail: (courseKey: string) => ['checkout', 'courseDetail', courseKey] as const,\n};\n"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Ref } from 'react';
|
|
2
|
+
import type { BillingCycle } from '../../types';
|
|
3
|
+
import type { Status, Phase, BillingInfo, BillingPlan, CheckoutConsent, SupportedPaymentMethod } from '../../types';
|
|
4
|
+
export interface UseCheckoutOptions {
|
|
5
|
+
apiUrl?: string;
|
|
6
|
+
edxSessionUrl?: string;
|
|
7
|
+
stripePublishableKey?: string;
|
|
8
|
+
onComplete?: (subscriptionBiId: string | null) => void;
|
|
9
|
+
/** Country code resolved by CheckoutGate — used to show/hide the UK/CA extra checkbox. */
|
|
10
|
+
userCountry?: string | null;
|
|
11
|
+
/**
|
|
12
|
+
* Course run key from the URL (e.g. course-v1:HarvardX+CS50+X).
|
|
13
|
+
* When omitted, read from ?course_run_key=.
|
|
14
|
+
*/
|
|
15
|
+
courseRunKey?: string | null;
|
|
16
|
+
/** Override only for tests; production performs a full-page browser redirect. */
|
|
17
|
+
redirectToUrl?: (url: string) => void;
|
|
18
|
+
}
|
|
19
|
+
export interface UseCheckoutResult {
|
|
20
|
+
phase: Phase;
|
|
21
|
+
status: Status | null;
|
|
22
|
+
statusLabel: string;
|
|
23
|
+
stripeReady: boolean;
|
|
24
|
+
/** True once the Stripe card Element iframe is fully initialised and interactive. */
|
|
25
|
+
cardReady: boolean;
|
|
26
|
+
notConfigured: boolean;
|
|
27
|
+
showBanner: boolean;
|
|
28
|
+
dismissBanner: () => void;
|
|
29
|
+
error: string;
|
|
30
|
+
clearError: () => void;
|
|
31
|
+
cardError: string;
|
|
32
|
+
lastComment: string;
|
|
33
|
+
/** Full subscription details including card last 4 — available after SUBSCRIPTION_CREATED. */
|
|
34
|
+
subscriptionDetails: import('../../types').SubscriptionDetails | null;
|
|
35
|
+
billing: BillingInfo;
|
|
36
|
+
setField: (field: keyof BillingInfo, value: string) => void;
|
|
37
|
+
numberMountRef: Ref<HTMLDivElement>;
|
|
38
|
+
expiryMountRef: Ref<HTMLDivElement>;
|
|
39
|
+
cvcMountRef: Ref<HTMLDivElement>;
|
|
40
|
+
submitting: boolean;
|
|
41
|
+
/** True from Place order click until a terminal status is reached. */
|
|
42
|
+
processingSubscription: boolean;
|
|
43
|
+
/** True when Stripe sent the learner back with ?cart_bi_id=. */
|
|
44
|
+
returningFromStripe: boolean;
|
|
45
|
+
placeOrder: (consent: CheckoutConsent, paymentMethod?: SupportedPaymentMethod) => void;
|
|
46
|
+
/** Billing plans fetched on mount — includes prices for display in CartSummary. */
|
|
47
|
+
billingPlans: BillingPlan[];
|
|
48
|
+
/** Live active subscriber count for display in CartSummary. */
|
|
49
|
+
activeSubscriberCount: number | null;
|
|
50
|
+
/** Currently selected billing cycle. */
|
|
51
|
+
selectedCycle: BillingCycle;
|
|
52
|
+
/** Switch between monthly and annual billing. */
|
|
53
|
+
setCycle: (cycle: BillingCycle) => void;
|
|
54
|
+
/** True once GET /edx-session has returned and the viax token is set. */
|
|
55
|
+
sessionReady: boolean;
|
|
56
|
+
/** ISO 3166-1 alpha-2 country code — passed in from CheckoutGate for the UK/CA checkbox. */
|
|
57
|
+
userCountry: string | null;
|
|
58
|
+
/** Course details when arrived via ?course_run_key=; null for standard checkout. */
|
|
59
|
+
course: import('../../types').CourseDetail | null;
|
|
60
|
+
}
|
|
61
|
+
export default function useCheckout(options?: UseCheckoutOptions): UseCheckoutResult;
|