@economist/web-apple-pay 0.1.1-beta.1 → 0.1.2-beta.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/dist/index.js CHANGED
@@ -787,30 +787,45 @@ function startApplePaySession(config) {
787
787
  // Only request email from Apple Pay sheet if user is NOT logged in
788
788
  ...!config.userLoggedIn && { requiredShippingContactFields: ["email"] }
789
789
  };
790
- const session = new ApplePaySession(3, paymentRequest);
791
- session.onvalidatemerchant = async (event) => {
792
- console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
793
- try {
794
- const validationHost = new URL(event.validationURL).host;
795
- if (!validationHost.endsWith("apple.com")) {
796
- console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
797
- trackFallbackCheckout(config.skuId);
798
- session.abort();
799
- window.location.href = redirectToCheckoutFallback({
800
- skuId: config.skuId,
801
- returnUrl: config.returnUrl,
802
- inlineError: MSG_PAYMENT_GENERIC_ERROR
790
+ try {
791
+ const session = new ApplePaySession(3, paymentRequest);
792
+ console.log("[web-apple-pay] startApplePaySession: ApplePaySession created");
793
+ session.onvalidatemerchant = async (event) => {
794
+ console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
795
+ try {
796
+ const validationHost = new URL(event.validationURL).host;
797
+ if (!validationHost.endsWith("apple.com")) {
798
+ console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
799
+ trackFallbackCheckout(config.skuId);
800
+ session.abort();
801
+ window.location.href = redirectToCheckoutFallback({
802
+ skuId: config.skuId,
803
+ returnUrl: config.returnUrl,
804
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
805
+ });
806
+ return;
807
+ }
808
+ const recaptchaToken = await getRecaptchaToken("verifyMerchant");
809
+ console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
810
+ const response = await validateAppleMerchant({
811
+ validationURL: event.validationURL,
812
+ recaptchaToken
803
813
  });
804
- return;
805
- }
806
- const recaptchaToken = await getRecaptchaToken("verifyMerchant");
807
- console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
808
- const response = await validateAppleMerchant({
809
- validationURL: event.validationURL,
810
- recaptchaToken
811
- });
812
- if (!response?.merchantSession) {
813
- console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
814
+ if (!response?.merchantSession) {
815
+ console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
816
+ trackFallbackCheckout(config.skuId);
817
+ session.abort();
818
+ window.location.href = redirectToCheckoutFallback({
819
+ skuId: config.skuId,
820
+ returnUrl: config.returnUrl,
821
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
822
+ });
823
+ return;
824
+ }
825
+ console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
826
+ session.completeMerchantValidation(response.merchantSession);
827
+ } catch (err) {
828
+ console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
814
829
  trackFallbackCheckout(config.skuId);
815
830
  session.abort();
816
831
  window.location.href = redirectToCheckoutFallback({
@@ -818,33 +833,29 @@ function startApplePaySession(config) {
818
833
  returnUrl: config.returnUrl,
819
834
  inlineError: MSG_PAYMENT_GENERIC_ERROR
820
835
  });
821
- return;
822
836
  }
823
- console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
824
- session.completeMerchantValidation(response.merchantSession);
825
- } catch (err) {
826
- console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
827
- trackFallbackCheckout(config.skuId);
828
- session.abort();
829
- window.location.href = redirectToCheckoutFallback({
830
- skuId: config.skuId,
831
- returnUrl: config.returnUrl,
832
- inlineError: MSG_PAYMENT_GENERIC_ERROR
833
- });
834
- }
835
- };
836
- session.onpaymentauthorized = (event) => {
837
- console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
838
- trackWalletPaymentAuthorised(config.skuId);
839
- config.onPaymentAuthorized(event, session);
840
- };
841
- session.oncancel = () => {
842
- console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
843
- config.onCancel?.();
844
- };
845
- console.log("[web-apple-pay] startApplePaySession: beginning session");
846
- trackWalletPaymentSheetOpen(config.skuId);
847
- session.begin();
837
+ };
838
+ session.onpaymentauthorized = (event) => {
839
+ console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
840
+ trackWalletPaymentAuthorised(config.skuId);
841
+ config.onPaymentAuthorized(event, session);
842
+ };
843
+ session.oncancel = () => {
844
+ console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
845
+ config.onCancel?.();
846
+ };
847
+ console.log("[web-apple-pay] startApplePaySession: beginning session");
848
+ trackWalletPaymentSheetOpen(config.skuId);
849
+ session.begin();
850
+ } catch (err) {
851
+ console.error("[web-apple-pay] startApplePaySession: failed to create or begin ApplePaySession", err);
852
+ trackFallbackCheckout(config.skuId);
853
+ window.location.href = redirectToCheckoutFallback({
854
+ skuId: config.skuId,
855
+ returnUrl: config.returnUrl,
856
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
857
+ });
858
+ }
848
859
  }
849
860
 
850
861
  // src/clients/payment-checkout/contact-validation.ts
@@ -776,30 +776,45 @@ function startApplePaySession(config) {
776
776
  // Only request email from Apple Pay sheet if user is NOT logged in
777
777
  ...!config.userLoggedIn && { requiredShippingContactFields: ["email"] }
778
778
  };
779
- const session = new ApplePaySession(3, paymentRequest);
780
- session.onvalidatemerchant = async (event) => {
781
- console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
782
- try {
783
- const validationHost = new URL(event.validationURL).host;
784
- if (!validationHost.endsWith("apple.com")) {
785
- console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
786
- trackFallbackCheckout(config.skuId);
787
- session.abort();
788
- window.location.href = redirectToCheckoutFallback({
789
- skuId: config.skuId,
790
- returnUrl: config.returnUrl,
791
- inlineError: MSG_PAYMENT_GENERIC_ERROR
779
+ try {
780
+ const session = new ApplePaySession(3, paymentRequest);
781
+ console.log("[web-apple-pay] startApplePaySession: ApplePaySession created");
782
+ session.onvalidatemerchant = async (event) => {
783
+ console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
784
+ try {
785
+ const validationHost = new URL(event.validationURL).host;
786
+ if (!validationHost.endsWith("apple.com")) {
787
+ console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
788
+ trackFallbackCheckout(config.skuId);
789
+ session.abort();
790
+ window.location.href = redirectToCheckoutFallback({
791
+ skuId: config.skuId,
792
+ returnUrl: config.returnUrl,
793
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
794
+ });
795
+ return;
796
+ }
797
+ const recaptchaToken = await getRecaptchaToken("verifyMerchant");
798
+ console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
799
+ const response = await validateAppleMerchant({
800
+ validationURL: event.validationURL,
801
+ recaptchaToken
792
802
  });
793
- return;
794
- }
795
- const recaptchaToken = await getRecaptchaToken("verifyMerchant");
796
- console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
797
- const response = await validateAppleMerchant({
798
- validationURL: event.validationURL,
799
- recaptchaToken
800
- });
801
- if (!response?.merchantSession) {
802
- console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
803
+ if (!response?.merchantSession) {
804
+ console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
805
+ trackFallbackCheckout(config.skuId);
806
+ session.abort();
807
+ window.location.href = redirectToCheckoutFallback({
808
+ skuId: config.skuId,
809
+ returnUrl: config.returnUrl,
810
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
811
+ });
812
+ return;
813
+ }
814
+ console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
815
+ session.completeMerchantValidation(response.merchantSession);
816
+ } catch (err) {
817
+ console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
803
818
  trackFallbackCheckout(config.skuId);
804
819
  session.abort();
805
820
  window.location.href = redirectToCheckoutFallback({
@@ -807,33 +822,29 @@ function startApplePaySession(config) {
807
822
  returnUrl: config.returnUrl,
808
823
  inlineError: MSG_PAYMENT_GENERIC_ERROR
809
824
  });
810
- return;
811
825
  }
812
- console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
813
- session.completeMerchantValidation(response.merchantSession);
814
- } catch (err) {
815
- console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
816
- trackFallbackCheckout(config.skuId);
817
- session.abort();
818
- window.location.href = redirectToCheckoutFallback({
819
- skuId: config.skuId,
820
- returnUrl: config.returnUrl,
821
- inlineError: MSG_PAYMENT_GENERIC_ERROR
822
- });
823
- }
824
- };
825
- session.onpaymentauthorized = (event) => {
826
- console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
827
- trackWalletPaymentAuthorised(config.skuId);
828
- config.onPaymentAuthorized(event, session);
829
- };
830
- session.oncancel = () => {
831
- console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
832
- config.onCancel?.();
833
- };
834
- console.log("[web-apple-pay] startApplePaySession: beginning session");
835
- trackWalletPaymentSheetOpen(config.skuId);
836
- session.begin();
826
+ };
827
+ session.onpaymentauthorized = (event) => {
828
+ console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
829
+ trackWalletPaymentAuthorised(config.skuId);
830
+ config.onPaymentAuthorized(event, session);
831
+ };
832
+ session.oncancel = () => {
833
+ console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
834
+ config.onCancel?.();
835
+ };
836
+ console.log("[web-apple-pay] startApplePaySession: beginning session");
837
+ trackWalletPaymentSheetOpen(config.skuId);
838
+ session.begin();
839
+ } catch (err) {
840
+ console.error("[web-apple-pay] startApplePaySession: failed to create or begin ApplePaySession", err);
841
+ trackFallbackCheckout(config.skuId);
842
+ window.location.href = redirectToCheckoutFallback({
843
+ skuId: config.skuId,
844
+ returnUrl: config.returnUrl,
845
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
846
+ });
847
+ }
837
848
  }
838
849
 
839
850
  // src/clients/payment-checkout/contact-validation.ts
@@ -791,30 +791,45 @@ function startApplePaySession(config) {
791
791
  // Only request email from Apple Pay sheet if user is NOT logged in
792
792
  ...!config.userLoggedIn && { requiredShippingContactFields: ["email"] }
793
793
  };
794
- const session = new ApplePaySession(3, paymentRequest);
795
- session.onvalidatemerchant = async (event) => {
796
- console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
797
- try {
798
- const validationHost = new URL(event.validationURL).host;
799
- if (!validationHost.endsWith("apple.com")) {
800
- console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
801
- trackFallbackCheckout(config.skuId);
802
- session.abort();
803
- window.location.href = redirectToCheckoutFallback({
804
- skuId: config.skuId,
805
- returnUrl: config.returnUrl,
806
- inlineError: MSG_PAYMENT_GENERIC_ERROR
794
+ try {
795
+ const session = new ApplePaySession(3, paymentRequest);
796
+ console.log("[web-apple-pay] startApplePaySession: ApplePaySession created");
797
+ session.onvalidatemerchant = async (event) => {
798
+ console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
799
+ try {
800
+ const validationHost = new URL(event.validationURL).host;
801
+ if (!validationHost.endsWith("apple.com")) {
802
+ console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
803
+ trackFallbackCheckout(config.skuId);
804
+ session.abort();
805
+ window.location.href = redirectToCheckoutFallback({
806
+ skuId: config.skuId,
807
+ returnUrl: config.returnUrl,
808
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
809
+ });
810
+ return;
811
+ }
812
+ const recaptchaToken = await getRecaptchaToken("verifyMerchant");
813
+ console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
814
+ const response = await validateAppleMerchant({
815
+ validationURL: event.validationURL,
816
+ recaptchaToken
807
817
  });
808
- return;
809
- }
810
- const recaptchaToken = await getRecaptchaToken("verifyMerchant");
811
- console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
812
- const response = await validateAppleMerchant({
813
- validationURL: event.validationURL,
814
- recaptchaToken
815
- });
816
- if (!response?.merchantSession) {
817
- console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
818
+ if (!response?.merchantSession) {
819
+ console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
820
+ trackFallbackCheckout(config.skuId);
821
+ session.abort();
822
+ window.location.href = redirectToCheckoutFallback({
823
+ skuId: config.skuId,
824
+ returnUrl: config.returnUrl,
825
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
826
+ });
827
+ return;
828
+ }
829
+ console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
830
+ session.completeMerchantValidation(response.merchantSession);
831
+ } catch (err) {
832
+ console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
818
833
  trackFallbackCheckout(config.skuId);
819
834
  session.abort();
820
835
  window.location.href = redirectToCheckoutFallback({
@@ -822,33 +837,29 @@ function startApplePaySession(config) {
822
837
  returnUrl: config.returnUrl,
823
838
  inlineError: MSG_PAYMENT_GENERIC_ERROR
824
839
  });
825
- return;
826
840
  }
827
- console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
828
- session.completeMerchantValidation(response.merchantSession);
829
- } catch (err) {
830
- console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
831
- trackFallbackCheckout(config.skuId);
832
- session.abort();
833
- window.location.href = redirectToCheckoutFallback({
834
- skuId: config.skuId,
835
- returnUrl: config.returnUrl,
836
- inlineError: MSG_PAYMENT_GENERIC_ERROR
837
- });
838
- }
839
- };
840
- session.onpaymentauthorized = (event) => {
841
- console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
842
- trackWalletPaymentAuthorised(config.skuId);
843
- config.onPaymentAuthorized(event, session);
844
- };
845
- session.oncancel = () => {
846
- console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
847
- config.onCancel?.();
848
- };
849
- console.log("[web-apple-pay] startApplePaySession: beginning session");
850
- trackWalletPaymentSheetOpen(config.skuId);
851
- session.begin();
841
+ };
842
+ session.onpaymentauthorized = (event) => {
843
+ console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
844
+ trackWalletPaymentAuthorised(config.skuId);
845
+ config.onPaymentAuthorized(event, session);
846
+ };
847
+ session.oncancel = () => {
848
+ console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
849
+ config.onCancel?.();
850
+ };
851
+ console.log("[web-apple-pay] startApplePaySession: beginning session");
852
+ trackWalletPaymentSheetOpen(config.skuId);
853
+ session.begin();
854
+ } catch (err) {
855
+ console.error("[web-apple-pay] startApplePaySession: failed to create or begin ApplePaySession", err);
856
+ trackFallbackCheckout(config.skuId);
857
+ window.location.href = redirectToCheckoutFallback({
858
+ skuId: config.skuId,
859
+ returnUrl: config.returnUrl,
860
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
861
+ });
862
+ }
852
863
  }
853
864
 
854
865
  // src/clients/payment-checkout/contact-validation.ts
@@ -776,30 +776,45 @@ function startApplePaySession(config) {
776
776
  // Only request email from Apple Pay sheet if user is NOT logged in
777
777
  ...!config.userLoggedIn && { requiredShippingContactFields: ["email"] }
778
778
  };
779
- const session = new ApplePaySession(3, paymentRequest);
780
- session.onvalidatemerchant = async (event) => {
781
- console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
782
- try {
783
- const validationHost = new URL(event.validationURL).host;
784
- if (!validationHost.endsWith("apple.com")) {
785
- console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
786
- trackFallbackCheckout(config.skuId);
787
- session.abort();
788
- window.location.href = redirectToCheckoutFallback({
789
- skuId: config.skuId,
790
- returnUrl: config.returnUrl,
791
- inlineError: MSG_PAYMENT_GENERIC_ERROR
779
+ try {
780
+ const session = new ApplePaySession(3, paymentRequest);
781
+ console.log("[web-apple-pay] startApplePaySession: ApplePaySession created");
782
+ session.onvalidatemerchant = async (event) => {
783
+ console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
784
+ try {
785
+ const validationHost = new URL(event.validationURL).host;
786
+ if (!validationHost.endsWith("apple.com")) {
787
+ console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
788
+ trackFallbackCheckout(config.skuId);
789
+ session.abort();
790
+ window.location.href = redirectToCheckoutFallback({
791
+ skuId: config.skuId,
792
+ returnUrl: config.returnUrl,
793
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
794
+ });
795
+ return;
796
+ }
797
+ const recaptchaToken = await getRecaptchaToken("verifyMerchant");
798
+ console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
799
+ const response = await validateAppleMerchant({
800
+ validationURL: event.validationURL,
801
+ recaptchaToken
792
802
  });
793
- return;
794
- }
795
- const recaptchaToken = await getRecaptchaToken("verifyMerchant");
796
- console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
797
- const response = await validateAppleMerchant({
798
- validationURL: event.validationURL,
799
- recaptchaToken
800
- });
801
- if (!response?.merchantSession) {
802
- console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
803
+ if (!response?.merchantSession) {
804
+ console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
805
+ trackFallbackCheckout(config.skuId);
806
+ session.abort();
807
+ window.location.href = redirectToCheckoutFallback({
808
+ skuId: config.skuId,
809
+ returnUrl: config.returnUrl,
810
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
811
+ });
812
+ return;
813
+ }
814
+ console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
815
+ session.completeMerchantValidation(response.merchantSession);
816
+ } catch (err) {
817
+ console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
803
818
  trackFallbackCheckout(config.skuId);
804
819
  session.abort();
805
820
  window.location.href = redirectToCheckoutFallback({
@@ -807,33 +822,29 @@ function startApplePaySession(config) {
807
822
  returnUrl: config.returnUrl,
808
823
  inlineError: MSG_PAYMENT_GENERIC_ERROR
809
824
  });
810
- return;
811
825
  }
812
- console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
813
- session.completeMerchantValidation(response.merchantSession);
814
- } catch (err) {
815
- console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
816
- trackFallbackCheckout(config.skuId);
817
- session.abort();
818
- window.location.href = redirectToCheckoutFallback({
819
- skuId: config.skuId,
820
- returnUrl: config.returnUrl,
821
- inlineError: MSG_PAYMENT_GENERIC_ERROR
822
- });
823
- }
824
- };
825
- session.onpaymentauthorized = (event) => {
826
- console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
827
- trackWalletPaymentAuthorised(config.skuId);
828
- config.onPaymentAuthorized(event, session);
829
- };
830
- session.oncancel = () => {
831
- console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
832
- config.onCancel?.();
833
- };
834
- console.log("[web-apple-pay] startApplePaySession: beginning session");
835
- trackWalletPaymentSheetOpen(config.skuId);
836
- session.begin();
826
+ };
827
+ session.onpaymentauthorized = (event) => {
828
+ console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
829
+ trackWalletPaymentAuthorised(config.skuId);
830
+ config.onPaymentAuthorized(event, session);
831
+ };
832
+ session.oncancel = () => {
833
+ console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
834
+ config.onCancel?.();
835
+ };
836
+ console.log("[web-apple-pay] startApplePaySession: beginning session");
837
+ trackWalletPaymentSheetOpen(config.skuId);
838
+ session.begin();
839
+ } catch (err) {
840
+ console.error("[web-apple-pay] startApplePaySession: failed to create or begin ApplePaySession", err);
841
+ trackFallbackCheckout(config.skuId);
842
+ window.location.href = redirectToCheckoutFallback({
843
+ skuId: config.skuId,
844
+ returnUrl: config.returnUrl,
845
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
846
+ });
847
+ }
837
848
  }
838
849
 
839
850
  // src/clients/payment-checkout/contact-validation.ts
@@ -179,30 +179,45 @@ function startApplePaySession(config) {
179
179
  // Only request email from Apple Pay sheet if user is NOT logged in
180
180
  ...!config.userLoggedIn && { requiredShippingContactFields: ["email"] }
181
181
  };
182
- const session = new ApplePaySession(3, paymentRequest);
183
- session.onvalidatemerchant = async (event) => {
184
- console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
185
- try {
186
- const validationHost = new URL(event.validationURL).host;
187
- if (!validationHost.endsWith("apple.com")) {
188
- console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
189
- trackFallbackCheckout(config.skuId);
190
- session.abort();
191
- window.location.href = redirectToCheckoutFallback({
192
- skuId: config.skuId,
193
- returnUrl: config.returnUrl,
194
- inlineError: MSG_PAYMENT_GENERIC_ERROR
182
+ try {
183
+ const session = new ApplePaySession(3, paymentRequest);
184
+ console.log("[web-apple-pay] startApplePaySession: ApplePaySession created");
185
+ session.onvalidatemerchant = async (event) => {
186
+ console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
187
+ try {
188
+ const validationHost = new URL(event.validationURL).host;
189
+ if (!validationHost.endsWith("apple.com")) {
190
+ console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
191
+ trackFallbackCheckout(config.skuId);
192
+ session.abort();
193
+ window.location.href = redirectToCheckoutFallback({
194
+ skuId: config.skuId,
195
+ returnUrl: config.returnUrl,
196
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
197
+ });
198
+ return;
199
+ }
200
+ const recaptchaToken = await getRecaptchaToken("verifyMerchant");
201
+ console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
202
+ const response = await validateAppleMerchant({
203
+ validationURL: event.validationURL,
204
+ recaptchaToken
195
205
  });
196
- return;
197
- }
198
- const recaptchaToken = await getRecaptchaToken("verifyMerchant");
199
- console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
200
- const response = await validateAppleMerchant({
201
- validationURL: event.validationURL,
202
- recaptchaToken
203
- });
204
- if (!response?.merchantSession) {
205
- console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
206
+ if (!response?.merchantSession) {
207
+ console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
208
+ trackFallbackCheckout(config.skuId);
209
+ session.abort();
210
+ window.location.href = redirectToCheckoutFallback({
211
+ skuId: config.skuId,
212
+ returnUrl: config.returnUrl,
213
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
214
+ });
215
+ return;
216
+ }
217
+ console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
218
+ session.completeMerchantValidation(response.merchantSession);
219
+ } catch (err) {
220
+ console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
206
221
  trackFallbackCheckout(config.skuId);
207
222
  session.abort();
208
223
  window.location.href = redirectToCheckoutFallback({
@@ -210,33 +225,29 @@ function startApplePaySession(config) {
210
225
  returnUrl: config.returnUrl,
211
226
  inlineError: MSG_PAYMENT_GENERIC_ERROR
212
227
  });
213
- return;
214
228
  }
215
- console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
216
- session.completeMerchantValidation(response.merchantSession);
217
- } catch (err) {
218
- console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
219
- trackFallbackCheckout(config.skuId);
220
- session.abort();
221
- window.location.href = redirectToCheckoutFallback({
222
- skuId: config.skuId,
223
- returnUrl: config.returnUrl,
224
- inlineError: MSG_PAYMENT_GENERIC_ERROR
225
- });
226
- }
227
- };
228
- session.onpaymentauthorized = (event) => {
229
- console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
230
- trackWalletPaymentAuthorised(config.skuId);
231
- config.onPaymentAuthorized(event, session);
232
- };
233
- session.oncancel = () => {
234
- console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
235
- config.onCancel?.();
236
- };
237
- console.log("[web-apple-pay] startApplePaySession: beginning session");
238
- trackWalletPaymentSheetOpen(config.skuId);
239
- session.begin();
229
+ };
230
+ session.onpaymentauthorized = (event) => {
231
+ console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
232
+ trackWalletPaymentAuthorised(config.skuId);
233
+ config.onPaymentAuthorized(event, session);
234
+ };
235
+ session.oncancel = () => {
236
+ console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
237
+ config.onCancel?.();
238
+ };
239
+ console.log("[web-apple-pay] startApplePaySession: beginning session");
240
+ trackWalletPaymentSheetOpen(config.skuId);
241
+ session.begin();
242
+ } catch (err) {
243
+ console.error("[web-apple-pay] startApplePaySession: failed to create or begin ApplePaySession", err);
244
+ trackFallbackCheckout(config.skuId);
245
+ window.location.href = redirectToCheckoutFallback({
246
+ skuId: config.skuId,
247
+ returnUrl: config.returnUrl,
248
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
249
+ });
250
+ }
240
251
  }
241
252
  export {
242
253
  startApplePaySession
package/dist/src/index.js CHANGED
@@ -787,30 +787,45 @@ function startApplePaySession(config) {
787
787
  // Only request email from Apple Pay sheet if user is NOT logged in
788
788
  ...!config.userLoggedIn && { requiredShippingContactFields: ["email"] }
789
789
  };
790
- const session = new ApplePaySession(3, paymentRequest);
791
- session.onvalidatemerchant = async (event) => {
792
- console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
793
- try {
794
- const validationHost = new URL(event.validationURL).host;
795
- if (!validationHost.endsWith("apple.com")) {
796
- console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
797
- trackFallbackCheckout(config.skuId);
798
- session.abort();
799
- window.location.href = redirectToCheckoutFallback({
800
- skuId: config.skuId,
801
- returnUrl: config.returnUrl,
802
- inlineError: MSG_PAYMENT_GENERIC_ERROR
790
+ try {
791
+ const session = new ApplePaySession(3, paymentRequest);
792
+ console.log("[web-apple-pay] startApplePaySession: ApplePaySession created");
793
+ session.onvalidatemerchant = async (event) => {
794
+ console.log("[web-apple-pay] onvalidatemerchant: received", { validationURL: event.validationURL });
795
+ try {
796
+ const validationHost = new URL(event.validationURL).host;
797
+ if (!validationHost.endsWith("apple.com")) {
798
+ console.warn("[web-apple-pay] onvalidatemerchant: invalid host, aborting", { validationHost });
799
+ trackFallbackCheckout(config.skuId);
800
+ session.abort();
801
+ window.location.href = redirectToCheckoutFallback({
802
+ skuId: config.skuId,
803
+ returnUrl: config.returnUrl,
804
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
805
+ });
806
+ return;
807
+ }
808
+ const recaptchaToken = await getRecaptchaToken("verifyMerchant");
809
+ console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
810
+ const response = await validateAppleMerchant({
811
+ validationURL: event.validationURL,
812
+ recaptchaToken
803
813
  });
804
- return;
805
- }
806
- const recaptchaToken = await getRecaptchaToken("verifyMerchant");
807
- console.log("[web-apple-pay] onvalidatemerchant: calling validateAppleMerchant");
808
- const response = await validateAppleMerchant({
809
- validationURL: event.validationURL,
810
- recaptchaToken
811
- });
812
- if (!response?.merchantSession) {
813
- console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
814
+ if (!response?.merchantSession) {
815
+ console.warn("[web-apple-pay] onvalidatemerchant: no merchantSession in response, aborting");
816
+ trackFallbackCheckout(config.skuId);
817
+ session.abort();
818
+ window.location.href = redirectToCheckoutFallback({
819
+ skuId: config.skuId,
820
+ returnUrl: config.returnUrl,
821
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
822
+ });
823
+ return;
824
+ }
825
+ console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
826
+ session.completeMerchantValidation(response.merchantSession);
827
+ } catch (err) {
828
+ console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
814
829
  trackFallbackCheckout(config.skuId);
815
830
  session.abort();
816
831
  window.location.href = redirectToCheckoutFallback({
@@ -818,33 +833,29 @@ function startApplePaySession(config) {
818
833
  returnUrl: config.returnUrl,
819
834
  inlineError: MSG_PAYMENT_GENERIC_ERROR
820
835
  });
821
- return;
822
836
  }
823
- console.log("[web-apple-pay] onvalidatemerchant: merchant validated successfully");
824
- session.completeMerchantValidation(response.merchantSession);
825
- } catch (err) {
826
- console.error("[web-apple-pay] onvalidatemerchant: error during validation", err);
827
- trackFallbackCheckout(config.skuId);
828
- session.abort();
829
- window.location.href = redirectToCheckoutFallback({
830
- skuId: config.skuId,
831
- returnUrl: config.returnUrl,
832
- inlineError: MSG_PAYMENT_GENERIC_ERROR
833
- });
834
- }
835
- };
836
- session.onpaymentauthorized = (event) => {
837
- console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
838
- trackWalletPaymentAuthorised(config.skuId);
839
- config.onPaymentAuthorized(event, session);
840
- };
841
- session.oncancel = () => {
842
- console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
843
- config.onCancel?.();
844
- };
845
- console.log("[web-apple-pay] startApplePaySession: beginning session");
846
- trackWalletPaymentSheetOpen(config.skuId);
847
- session.begin();
837
+ };
838
+ session.onpaymentauthorized = (event) => {
839
+ console.log("[web-apple-pay] onpaymentauthorized: payment authorized by user", { skuId: config.skuId });
840
+ trackWalletPaymentAuthorised(config.skuId);
841
+ config.onPaymentAuthorized(event, session);
842
+ };
843
+ session.oncancel = () => {
844
+ console.log("[web-apple-pay] oncancel: payment sheet cancelled by user", { skuId: config.skuId });
845
+ config.onCancel?.();
846
+ };
847
+ console.log("[web-apple-pay] startApplePaySession: beginning session");
848
+ trackWalletPaymentSheetOpen(config.skuId);
849
+ session.begin();
850
+ } catch (err) {
851
+ console.error("[web-apple-pay] startApplePaySession: failed to create or begin ApplePaySession", err);
852
+ trackFallbackCheckout(config.skuId);
853
+ window.location.href = redirectToCheckoutFallback({
854
+ skuId: config.skuId,
855
+ returnUrl: config.returnUrl,
856
+ inlineError: MSG_PAYMENT_GENERIC_ERROR
857
+ });
858
+ }
848
859
  }
849
860
 
850
861
  // src/clients/payment-checkout/contact-validation.ts
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@economist/web-apple-pay",
3
3
  "description": "Web component package for Apple Pay checkout UI",
4
- "version": "0.1.1-beta.1",
4
+ "version": "0.1.2-beta.0",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",