@economist/web-apple-pay 1.7.6 → 1.7.7
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/index.js +88 -61
- package/dist/src/apple-pay-button.js +88 -61
- package/dist/src/apple-pay-button.stories.js +88 -61
- package/dist/src/apple-pay-logo.js +1 -1
- package/dist/src/apple-pay-modal.js +35 -21
- package/dist/src/apple-pay-modal.stories.js +88 -61
- package/dist/src/clients/payment-checkout/apple-session.js +22 -3
- package/dist/src/clients/payment-checkout/messages.d.ts +13 -14
- package/dist/src/clients/payment-checkout/messages.js +0 -4
- package/dist/src/clients/payment-checkout/payment-handler.d.ts +0 -8
- package/dist/src/clients/payment-checkout/payment-handler.js +45 -27
- package/dist/src/clients/payment-checkout/types.d.ts +1 -1
- package/dist/src/index.js +88 -61
- package/dist/src/utils/expressCheckoutRedirect.d.ts +29 -7
- package/dist/src/utils/expressCheckoutRedirect.js +23 -7
- package/package.json +1 -1
|
@@ -71,7 +71,7 @@ function ensureApplePayLogoSymbol() {
|
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
73
|
const tmp = document.createElement("div");
|
|
74
|
-
tmp.innerHTML = `<svg aria-hidden="true" style="display:none" id="${LOGO_DEFS_ID}"><defs><symbol id="apple-pay-logo" viewBox="0 0 51 22"><path d="${LOGO_PATH}" fill="
|
|
74
|
+
tmp.innerHTML = `<svg aria-hidden="true" style="display:none" id="${LOGO_DEFS_ID}"><defs><symbol id="apple-pay-logo" viewBox="0 0 51 22"><path d="${LOGO_PATH}" fill="currentColor"/></symbol></defs></svg>`;
|
|
75
75
|
document.body.prepend(tmp.firstElementChild);
|
|
76
76
|
}
|
|
77
77
|
|
|
@@ -109,16 +109,32 @@ var apple_pay_modal_template_default = `<style>
|
|
|
109
109
|
position: absolute;
|
|
110
110
|
top: 1.5rem;
|
|
111
111
|
right: 1.3125rem;
|
|
112
|
-
background:
|
|
112
|
+
background: transparent;
|
|
113
113
|
border: none;
|
|
114
114
|
cursor: pointer;
|
|
115
115
|
padding: 0;
|
|
116
|
+
width: 1.5rem;
|
|
117
|
+
height: 1.5rem;
|
|
116
118
|
display: flex;
|
|
117
119
|
align-items: center;
|
|
118
120
|
justify-content: center;
|
|
121
|
+
color: var(--mb-colour-greyscale-london-20, #1a1a1a);
|
|
122
|
+
transition:
|
|
123
|
+
background-color ease-in-out 0.2s,
|
|
124
|
+
color ease-in-out 0.2s;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.apm__close:hover {
|
|
128
|
+
color: var(--mb-colour-base-chicago-30, #333333);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.apm__close:active {
|
|
132
|
+
background-color: var(--mb-colour-base-chicago-90, #e6e6e6);
|
|
133
|
+
color: var(--mb-colour-base-chicago-30, #333333);
|
|
119
134
|
}
|
|
120
135
|
|
|
121
136
|
.apm__close:focus {
|
|
137
|
+
background-color: var(--mb-colour-base-chicago-90, #e6e6e6);
|
|
122
138
|
outline: solid 0.125rem var(--focus-border-color, #121212);
|
|
123
139
|
border-radius: 0.25rem;
|
|
124
140
|
}
|
|
@@ -301,10 +317,6 @@ var apple_pay_modal_template_default = `<style>
|
|
|
301
317
|
cursor: pointer;
|
|
302
318
|
color: #fff;
|
|
303
319
|
text-align: center;
|
|
304
|
-
font-family: var(
|
|
305
|
-
--mb-typeface-sans,
|
|
306
|
-
var(--wall-type-system-sans, system-ui, sans-serif)
|
|
307
|
-
);
|
|
308
320
|
font-size: 1.25rem;
|
|
309
321
|
font-style: normal;
|
|
310
322
|
font-weight: 500;
|
|
@@ -421,7 +433,7 @@ var apple_pay_modal_template_default = `<style>
|
|
|
421
433
|
fill-rule="evenodd"
|
|
422
434
|
clip-rule="evenodd"
|
|
423
435
|
d="M18.75 6.60964L17.3904 5.25L12 10.6404L6.60964 5.25L5.25 6.60964L10.6404 12L5.25 17.3904L6.60964 18.75L12 13.3596L17.3904 18.75L18.75 17.3904L13.3596 12L18.75 6.60964Z"
|
|
424
|
-
fill="
|
|
436
|
+
fill="currentColor"
|
|
425
437
|
/>
|
|
426
438
|
</g>
|
|
427
439
|
<defs>
|
|
@@ -679,6 +691,8 @@ function renewalPeriodText(unit, duration) {
|
|
|
679
691
|
return "";
|
|
680
692
|
}
|
|
681
693
|
}
|
|
694
|
+
var LI_SEPARATOR = "\0LI_SEP\0";
|
|
695
|
+
var P_SEPARATOR = "\0P_SEP\0";
|
|
682
696
|
function buildTermsContext(offer, country) {
|
|
683
697
|
const isUS = country === "US";
|
|
684
698
|
const isCA = country === "CA";
|
|
@@ -715,19 +729,19 @@ function freeTrialTerms(offer, ctx) {
|
|
|
715
729
|
const trialDuration = offer.subscription_options?.trial_period?.duration ?? 1;
|
|
716
730
|
const trialDateStr = `on ${getRenewalDateText(trialUnit, trialDuration)}${ctx.verificationText}`;
|
|
717
731
|
if (ctx.isUS) {
|
|
718
|
-
return `Your subscription renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${trialDateStr} when your free trial ends, until cancelled{
|
|
732
|
+
return `Your subscription renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${trialDateStr} when your free trial ends, until cancelled${LI_SEPARATOR}You\u2019ll be charged the rate in effect at each renewal until cancelled. ${ctx.usCancelNote}${ctx.taxFootnote}`;
|
|
719
733
|
}
|
|
720
|
-
return `Your subscription renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${trialDateStr} when your free trial ends, until cancelled{
|
|
734
|
+
return `Your subscription renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${trialDateStr} when your free trial ends, until cancelled${LI_SEPARATOR}You\u2019ll be charged the rate in effect at each renewal. ${ctx.cancelAnytime}${ctx.taxFootnote}`;
|
|
721
735
|
}
|
|
722
736
|
function nytTerms(ctx) {
|
|
723
737
|
const nytAccessText = "Your complimentary access to The New York Times is for one year only and does not auto-renew. We will send your instructions on how to redeem access to The New York Times by email.";
|
|
724
738
|
if (ctx.isUS) {
|
|
725
|
-
return `Your subscription to <em>The Economist</em> auto-renews ${ctx.periodText} until cancelled{
|
|
739
|
+
return `Your subscription to <em>The Economist</em> auto-renews ${ctx.periodText} until cancelled${LI_SEPARATOR}Your subscription renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${ctx.renewalDateStr}${LI_SEPARATOR}You\u2019ll be charged the rate in effect at each renewal until cancelled. ${ctx.usCancelNote}${ctx.taxFootnote}${P_SEPARATOR}${nytAccessText}`;
|
|
726
740
|
}
|
|
727
741
|
if (ctx.isCA) {
|
|
728
|
-
return `Your subscription to <em>The Economist</em> auto-renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${ctx.periodText} ${ctx.renewalDateStr} until cancelled
|
|
742
|
+
return `Your subscription to <em>The Economist</em> auto-renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${ctx.periodText} ${ctx.renewalDateStr} until cancelled.${LI_SEPARATOR}You\u2019ll be charged the rate in effect at each renewal. ${ctx.cancelAnytime}${ctx.taxFootnote}${P_SEPARATOR}${nytAccessText}`;
|
|
729
743
|
}
|
|
730
|
-
return `Your subscription to <em>The Economist</em> auto-renews at ${ctx.renewalPriceText} ${ctx.periodText} ${ctx.renewalDateStr} until cancelled{
|
|
744
|
+
return `Your subscription to <em>The Economist</em> auto-renews at ${ctx.renewalPriceText} ${ctx.periodText} ${ctx.renewalDateStr} until cancelled${LI_SEPARATOR}You\u2019ll be charged the rate in effect at each renewal. ${ctx.cancelAnytime} ${nytAccessText}`;
|
|
731
745
|
}
|
|
732
746
|
function minTermContractTerms(offer, ctx) {
|
|
733
747
|
const duePrice = formatPrice(offer.price.purchase, offer.price.currency_code);
|
|
@@ -737,28 +751,28 @@ function minTermContractTerms(offer, ctx) {
|
|
|
737
751
|
const contractLength = mtDuration && mtUnit ? `${mtDuration} ${mtUnit}` : "";
|
|
738
752
|
const initialContractText = contractLength ? `your initial ${contractLength} contract` : "your initial contract";
|
|
739
753
|
const mtRenewalDateText = mtUnit && mtDuration ? getRenewalDateText(mtUnit, Number(mtDuration)) : ctx.renewalDateText;
|
|
740
|
-
return `You\u2019ll be charged ${duePrice} a month for the duration of ${initialContractText}{
|
|
754
|
+
return `You\u2019ll be charged ${duePrice} a month for the duration of ${initialContractText}${LI_SEPARATOR}Your subscription auto-renews annually at ${ctx.renewalPriceText} a month on ${mtRenewalDateText} until cancelled${LI_SEPARATOR}You\u2019ll be charged the rate in effect at each renewal. ${ctx.cancelAnytime}`;
|
|
741
755
|
}
|
|
742
756
|
function paidTrialTerms(offer, ctx) {
|
|
743
757
|
const trialUnit = offer.subscription_options?.trial_period?.unit ?? ctx.unit;
|
|
744
758
|
const trialDuration = offer.subscription_options?.trial_period?.duration ?? ctx.duration;
|
|
745
759
|
const trialDateText = getRenewalDateText(trialUnit, trialDuration);
|
|
746
760
|
if (ctx.isUS) {
|
|
747
|
-
return `Your subscription auto-renews ${ctx.periodText} until cancelled{
|
|
761
|
+
return `Your subscription auto-renews ${ctx.periodText} until cancelled${LI_SEPARATOR}Your subscription renews at ${ctx.renewalPriceText}${ctx.taxSuffix} on ${trialDateText} when your paid trial ends${LI_SEPARATOR}You\u2019ll be charged the rate in effect at each renewal. ${ctx.usCancelNote}${ctx.taxFootnote}`;
|
|
748
762
|
}
|
|
749
|
-
return `Your subscription auto-renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${ctx.periodText} on ${trialDateText} when your paid trial ends, until cancelled{
|
|
763
|
+
return `Your subscription auto-renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${ctx.periodText} on ${trialDateText} when your paid trial ends, until cancelled${LI_SEPARATOR}You\u2019ll be charged the rate in effect at each renewal. ${ctx.cancelAnytime}${ctx.taxFootnote}`;
|
|
750
764
|
}
|
|
751
765
|
function autoRenewalTerms(ctx) {
|
|
752
766
|
if (ctx.isUS) {
|
|
753
|
-
return `Your subscription auto-renews ${ctx.periodText} until cancelled{
|
|
767
|
+
return `Your subscription auto-renews ${ctx.periodText} until cancelled${LI_SEPARATOR}Your subscription renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${ctx.renewalDateStr}${LI_SEPARATOR}You\u2019ll be charged the rate in effect at each renewal until cancelled. ${ctx.usCancelNote}${ctx.taxFootnote}`;
|
|
754
768
|
}
|
|
755
|
-
return `Your subscription auto-renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${ctx.periodText} ${ctx.renewalDateStr} until cancelled{
|
|
769
|
+
return `Your subscription auto-renews at ${ctx.renewalPriceText}${ctx.taxSuffix} ${ctx.periodText} ${ctx.renewalDateStr} until cancelled${LI_SEPARATOR}You\u2019ll be charged the rate in effect at each renewal. ${ctx.cancelAnytime}${ctx.taxFootnote}`;
|
|
756
770
|
}
|
|
757
771
|
function noAutoRenewalTerms(ctx) {
|
|
758
772
|
if (ctx.isUS || ctx.isCA) {
|
|
759
|
-
return `Your subscription does not renew automatically${ctx.taxFootnote}{
|
|
773
|
+
return `Your subscription does not renew automatically${ctx.taxFootnote}${LI_SEPARATOR}`;
|
|
760
774
|
}
|
|
761
|
-
return `Your subscription does not renew automatically{
|
|
775
|
+
return `Your subscription does not renew automatically${LI_SEPARATOR}`;
|
|
762
776
|
}
|
|
763
777
|
function generateApplePayModalTerms(offer, country) {
|
|
764
778
|
const ctx = buildTermsContext(offer, country);
|
|
@@ -781,9 +795,9 @@ function generateApplePayModalTerms(offer, country) {
|
|
|
781
795
|
return noAutoRenewalTerms(ctx);
|
|
782
796
|
}
|
|
783
797
|
function renderTermsHtml(termsText) {
|
|
784
|
-
const renewalTextLists = termsText.split(
|
|
798
|
+
const renewalTextLists = termsText.split(LI_SEPARATOR);
|
|
785
799
|
const lastPart = renewalTextLists.pop() || "";
|
|
786
|
-
const renewalTextParagraphs = lastPart.split(
|
|
800
|
+
const renewalTextParagraphs = lastPart.split(P_SEPARATOR);
|
|
787
801
|
const ulHtml = `<ul class="apm__terms-bullets">${renewalTextLists.map((value) => `<li>${value}</li>`).join("")}</ul>`;
|
|
788
802
|
const paragraphHtml = renewalTextParagraphs.filter(Boolean).map((value) => `<p class="apm__terms-legal">${value}</p>`).join("");
|
|
789
803
|
return ulHtml + paragraphHtml;
|
|
@@ -1026,8 +1040,8 @@ var apple_pay_button_template_default = `<style>
|
|
|
1026
1040
|
min-width: 0;
|
|
1027
1041
|
height: 100%;
|
|
1028
1042
|
min-height: var(--apple-pay-height, 2.75rem);
|
|
1029
|
-
background-color: #000;
|
|
1030
|
-
color: #fff;
|
|
1043
|
+
background-color: var(--apple-pay-background-color, #000);
|
|
1044
|
+
color: var(--apple-pay-foreground-color, #fff);
|
|
1031
1045
|
border: none;
|
|
1032
1046
|
border-radius: var(--apple-pay-border-radius, 1.375rem);
|
|
1033
1047
|
cursor: pointer;
|
|
@@ -1039,6 +1053,7 @@ var apple_pay_button_template_default = `<style>
|
|
|
1039
1053
|
teg-apple-pay-button .apple-pay-btn svg {
|
|
1040
1054
|
flex-shrink: 0;
|
|
1041
1055
|
display: block;
|
|
1056
|
+
color: currentColor;
|
|
1042
1057
|
}
|
|
1043
1058
|
|
|
1044
1059
|
teg-apple-pay-button .apple-pay-btn.wap-loading {
|
|
@@ -1053,8 +1068,8 @@ var apple_pay_button_template_default = `<style>
|
|
|
1053
1068
|
left: 50%;
|
|
1054
1069
|
width: 1.25rem;
|
|
1055
1070
|
height: 1.25rem;
|
|
1056
|
-
border: 2px solid rgba(255, 255, 255, 0.25);
|
|
1057
|
-
border-top-color:
|
|
1071
|
+
border: 2px solid var(--apple-pay-spinner-track-color, rgba(255, 255, 255, 0.25));
|
|
1072
|
+
border-top-color: var(--apple-pay-spinner-head-color, currentColor);
|
|
1058
1073
|
border-radius: 50%;
|
|
1059
1074
|
animation: wap-button-spinner 0.8s linear infinite;
|
|
1060
1075
|
}
|
|
@@ -1218,13 +1233,25 @@ var getExpressCheckoutSession = () => {
|
|
|
1218
1233
|
};
|
|
1219
1234
|
|
|
1220
1235
|
// src/utils/expressCheckoutRedirect.ts
|
|
1221
|
-
var
|
|
1222
|
-
var
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1236
|
+
var CHECKOUT_REDIRECT_KEY = "checkout-redirect";
|
|
1237
|
+
var ALLOWED_REDIRECT_HOSTNAME = "economist.com";
|
|
1238
|
+
function isAllowedRedirectUrl(url) {
|
|
1239
|
+
if (url.startsWith("/")) return !url.startsWith("//");
|
|
1240
|
+
try {
|
|
1241
|
+
const { hostname } = new URL(url);
|
|
1242
|
+
return hostname === ALLOWED_REDIRECT_HOSTNAME || hostname.endsWith(`.${ALLOWED_REDIRECT_HOSTNAME}`);
|
|
1243
|
+
} catch {
|
|
1244
|
+
return false;
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
var writeCheckoutRedirect = (originUrl) => {
|
|
1248
|
+
if (!isAllowedRedirectUrl(originUrl)) return;
|
|
1249
|
+
try {
|
|
1250
|
+
localStorage.setItem(CHECKOUT_REDIRECT_KEY, originUrl);
|
|
1251
|
+
} catch {
|
|
1252
|
+
}
|
|
1227
1253
|
};
|
|
1254
|
+
var captureOriginUrl = () => window.location.href;
|
|
1228
1255
|
var decodeSku = (sku) => {
|
|
1229
1256
|
try {
|
|
1230
1257
|
return atob(sku.substring(sku.indexOf("-") + 1));
|
|
@@ -1235,14 +1262,11 @@ var decodeSku = (sku) => {
|
|
|
1235
1262
|
var redirectToCheckoutComplete = (params) => {
|
|
1236
1263
|
const url = new URL("/checkout/complete", window.location.origin);
|
|
1237
1264
|
url.searchParams.set("basketId", params.basketId);
|
|
1238
|
-
if (params.queryString) {
|
|
1239
|
-
const qs = params.queryString.startsWith("?") ? params.queryString.slice(1) : params.queryString;
|
|
1240
|
-
new URLSearchParams(qs).forEach((v, k) => url.searchParams.set(k, v));
|
|
1241
|
-
}
|
|
1242
1265
|
url.searchParams.set("lmo_offer", params.skuId);
|
|
1243
1266
|
url.searchParams.set("status", params.status);
|
|
1244
1267
|
url.searchParams.set("redirectToCheckout", "true");
|
|
1245
|
-
url.searchParams.set("
|
|
1268
|
+
if (params.email) url.searchParams.set("email", params.email);
|
|
1269
|
+
if (params.country) url.searchParams.set("country", params.country);
|
|
1246
1270
|
return url.pathname + url.search;
|
|
1247
1271
|
};
|
|
1248
1272
|
var redirectToCheckoutFallback = (params) => {
|
|
@@ -1253,7 +1277,7 @@ var redirectToCheckoutFallback = (params) => {
|
|
|
1253
1277
|
url.searchParams.set("inlineError", params.inlineError);
|
|
1254
1278
|
if (params.email) url.searchParams.set("email", params.email);
|
|
1255
1279
|
if (params.emailError) url.searchParams.set("emailError", params.emailError);
|
|
1256
|
-
url.searchParams.set("
|
|
1280
|
+
if (params.country) url.searchParams.set("country", params.country);
|
|
1257
1281
|
return url.pathname + url.search;
|
|
1258
1282
|
};
|
|
1259
1283
|
|
|
@@ -1337,17 +1361,16 @@ var MSG_EMAIL_WRONG_FORMAT = "That email doesn\u2019t look right. Please enter a
|
|
|
1337
1361
|
var MSG_EMAIL_TOO_LONG = "This field must be 80 characters or less.";
|
|
1338
1362
|
var MSG_UNSUPPORTED_BILLING_COUNTRY = "Billing country does not match offer price zone";
|
|
1339
1363
|
var MSG_PAYMENT_GENERIC_ERROR = "Something went wrong. Please check your payment and billing details and try again or contact us.";
|
|
1340
|
-
var MSG_RECAPTCHA_VALIDATION_FAILED = "Security check failed. Please try again.";
|
|
1341
|
-
var MSG_EMAIL_COLLISION = "This email address is already linked to an account. Please log in, or try a different email address.";
|
|
1342
1364
|
var MSG_CONTACT_VALIDATION_INTERNAL = "Could not validate Apple Pay contact";
|
|
1343
1365
|
|
|
1344
1366
|
// src/clients/payment-checkout/apple-session.ts
|
|
1345
1367
|
function redirectToFallbackCheckout(config) {
|
|
1368
|
+
writeCheckoutRedirect(config.returnUrl);
|
|
1346
1369
|
trackFallbackCheckout(config.skuId);
|
|
1347
1370
|
window.location.href = redirectToCheckoutFallback({
|
|
1348
1371
|
skuId: config.skuId,
|
|
1349
|
-
|
|
1350
|
-
|
|
1372
|
+
inlineError: MSG_PAYMENT_GENERIC_ERROR,
|
|
1373
|
+
country: config.countryCode
|
|
1351
1374
|
});
|
|
1352
1375
|
}
|
|
1353
1376
|
async function handleMerchantValidation(event, session, config) {
|
|
@@ -1526,8 +1549,6 @@ var shippingContactDetails = (shippingContact) => {
|
|
|
1526
1549
|
};
|
|
1527
1550
|
|
|
1528
1551
|
// src/clients/payment-checkout/payment-handler.ts
|
|
1529
|
-
var MSG_ELIGIBILITY = "Something went wrong, please try again";
|
|
1530
|
-
var MSG_REGISTRATION = "We couldn't create your account. Please enter your email or try a different login method.";
|
|
1531
1552
|
var failApplePaySession = (session, errors = []) => {
|
|
1532
1553
|
session.completePayment({
|
|
1533
1554
|
status: ApplePaySession.STATUS_FAILURE,
|
|
@@ -1551,37 +1572,42 @@ function validateContacts(event, sessionData, supportedBillingCountries) {
|
|
|
1551
1572
|
}
|
|
1552
1573
|
return void 0;
|
|
1553
1574
|
}
|
|
1554
|
-
function redirectFallback(skuId, returnUrl, options) {
|
|
1575
|
+
function redirectFallback(skuId, returnUrl, country, options) {
|
|
1576
|
+
writeCheckoutRedirect(returnUrl);
|
|
1555
1577
|
trackFallbackCheckout(skuId);
|
|
1556
1578
|
window.location.href = redirectToCheckoutFallback({
|
|
1557
1579
|
skuId,
|
|
1558
|
-
|
|
1580
|
+
country,
|
|
1559
1581
|
...options
|
|
1560
1582
|
});
|
|
1561
1583
|
}
|
|
1562
1584
|
var ERROR_HANDLERS = {
|
|
1563
|
-
|
|
1564
|
-
|
|
1585
|
+
// emailError flows as an inline field error on the email input.
|
|
1586
|
+
// email pre-populates the input so the user doesn't have to retype it.
|
|
1587
|
+
EMAIL_COLLISION: ({ skuId, returnUrl, country, validatedEmail, walletError }) => redirectFallback(skuId, returnUrl, country, {
|
|
1588
|
+
emailError: walletError.message,
|
|
1589
|
+
email: validatedEmail
|
|
1590
|
+
}),
|
|
1591
|
+
PAYMENT_DECLINED: ({ skuId, returnUrl, country, walletError }) => redirectFallback(skuId, returnUrl, country, { inlineError: walletError.message }),
|
|
1592
|
+
ELIGIBILITY_REJECTED: ({ skuId, returnUrl, country, walletError }) => redirectFallback(skuId, returnUrl, country, { inlineError: walletError.message }),
|
|
1593
|
+
REGISTRATION_FAILED: ({ skuId, returnUrl, country, walletError }) => redirectFallback(skuId, returnUrl, country, { inlineError: walletError.message }),
|
|
1594
|
+
ACCOUNT_CREATION_FAILED: ({ skuId, returnUrl, country, validatedEmail, walletError }) => redirectFallback(skuId, returnUrl, country, {
|
|
1595
|
+
emailError: walletError.message,
|
|
1565
1596
|
email: validatedEmail
|
|
1566
1597
|
}),
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
redirectFallback(skuId, returnUrl, { inlineError: MSG_PAYMENT_GENERIC_ERROR })
|
|
1570
|
-
),
|
|
1571
|
-
ELIGIBILITY_REJECTED: ({ skuId, returnUrl }) => redirectFallback(skuId, returnUrl, { inlineError: MSG_ELIGIBILITY }),
|
|
1572
|
-
REGISTRATION_FAILED: ({ skuId, returnUrl }) => redirectFallback(skuId, returnUrl, { inlineError: MSG_REGISTRATION }),
|
|
1573
|
-
VALIDATION_ERROR: ({ skuId, returnUrl }) => redirectFallback(skuId, returnUrl, { inlineError: MSG_RECAPTCHA_VALIDATION_FAILED })
|
|
1598
|
+
VALIDATION_ERROR: ({ skuId, returnUrl, country, walletError }) => redirectFallback(skuId, returnUrl, country, { inlineError: walletError.message }),
|
|
1599
|
+
RECAPTCHA_FAILED: ({ skuId, returnUrl, country, walletError }) => redirectFallback(skuId, returnUrl, country, { inlineError: walletError.message })
|
|
1574
1600
|
};
|
|
1575
1601
|
function handleStructuredError(ctx) {
|
|
1576
1602
|
const handler = ERROR_HANDLERS[ctx.walletError.errorType];
|
|
1577
1603
|
if (handler) {
|
|
1578
1604
|
handler(ctx);
|
|
1579
1605
|
} else {
|
|
1580
|
-
redirectFallback(ctx.skuId, ctx.returnUrl, { inlineError: MSG_PAYMENT_GENERIC_ERROR });
|
|
1606
|
+
redirectFallback(ctx.skuId, ctx.returnUrl, ctx.country, { inlineError: MSG_PAYMENT_GENERIC_ERROR });
|
|
1581
1607
|
}
|
|
1582
1608
|
}
|
|
1583
1609
|
async function handlePaymentAuthorized(event, session, sessionData, config) {
|
|
1584
|
-
const { skuId, returnUrl,
|
|
1610
|
+
const { skuId, returnUrl, country } = config;
|
|
1585
1611
|
let validatedEmail;
|
|
1586
1612
|
try {
|
|
1587
1613
|
validatedEmail = validateContacts(
|
|
@@ -1601,13 +1627,15 @@ async function handlePaymentAuthorized(event, session, sessionData, config) {
|
|
|
1601
1627
|
});
|
|
1602
1628
|
trackWalletPaymentSuccess(skuId, result.basketId);
|
|
1603
1629
|
session.completePayment({ status: ApplePaySession.STATUS_SUCCESS });
|
|
1630
|
+
const successEmail = sessionData.loggedIn ? sessionData.emailAddress : validatedEmail;
|
|
1604
1631
|
const userStatus = sessionData.loggedIn ? "lex" : "nex";
|
|
1632
|
+
writeCheckoutRedirect(returnUrl);
|
|
1605
1633
|
window.location.href = redirectToCheckoutComplete({
|
|
1606
1634
|
basketId: result.basketId,
|
|
1607
1635
|
status: userStatus,
|
|
1608
1636
|
skuId: decodeSku(skuId),
|
|
1609
|
-
|
|
1610
|
-
|
|
1637
|
+
email: successEmail,
|
|
1638
|
+
country
|
|
1611
1639
|
});
|
|
1612
1640
|
} catch (err) {
|
|
1613
1641
|
if (err instanceof ContactValidationError) {
|
|
@@ -1619,10 +1647,10 @@ async function handlePaymentAuthorized(event, session, sessionData, config) {
|
|
|
1619
1647
|
trackWalletPaymentFailure(skuId, walletError?.errorType ?? "UNKNOWN");
|
|
1620
1648
|
failApplePaySession(session);
|
|
1621
1649
|
if (!walletError) {
|
|
1622
|
-
redirectFallback(skuId, returnUrl, { inlineError: MSG_PAYMENT_GENERIC_ERROR });
|
|
1650
|
+
redirectFallback(skuId, returnUrl, country, { inlineError: MSG_PAYMENT_GENERIC_ERROR });
|
|
1623
1651
|
return;
|
|
1624
1652
|
}
|
|
1625
|
-
handleStructuredError({ skuId, returnUrl, validatedEmail, walletError });
|
|
1653
|
+
handleStructuredError({ skuId, returnUrl, country, validatedEmail, walletError });
|
|
1626
1654
|
}
|
|
1627
1655
|
}
|
|
1628
1656
|
|
|
@@ -2208,7 +2236,6 @@ var ApplePayButton = class _ApplePayButton extends HTMLElement {
|
|
|
2208
2236
|
country,
|
|
2209
2237
|
currency: offer.price?.currency_code ?? DEFAULT_CURRENCY,
|
|
2210
2238
|
returnUrl: this.#returnUrl,
|
|
2211
|
-
queryString: buildQueryString(),
|
|
2212
2239
|
supportedBillingCountries: this.#supportedBillingCountries,
|
|
2213
2240
|
recaptchaTokens
|
|
2214
2241
|
})
|