diff --git a/.changeset/warm-crews-decide.md b/.changeset/warm-crews-decide.md new file mode 100644 index 00000000..7f2bf35a --- /dev/null +++ b/.changeset/warm-crews-decide.md @@ -0,0 +1,5 @@ +--- +'@adyen/adyen-web': patch +--- + +Fixes issue which ApplePay crashes Drop-in when initialized within iframe diff --git a/packages/lib/src/components/ApplePay/ApplePay.tsx b/packages/lib/src/components/ApplePay/ApplePay.tsx index 4c623709..e8a6eecf 100644 --- a/packages/lib/src/components/ApplePay/ApplePay.tsx +++ b/packages/lib/src/components/ApplePay/ApplePay.tsx @@ -136,8 +136,12 @@ class ApplePayElement extends UIElement { return Promise.reject(new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'clientKey was not provided')); } - if (window.ApplePaySession && ApplePaySession.canMakePayments() && ApplePaySession.supportsVersion(this.props.version)) { - return Promise.resolve(true); + try { + if (window.ApplePaySession && ApplePaySession.canMakePayments() && ApplePaySession.supportsVersion(this.props.version)) { + return Promise.resolve(true); + } + } catch (error) { + console.warn(error); } return Promise.reject(new AdyenCheckoutError('ERROR', 'Apple Pay is not available on this device')); diff --git a/packages/lib/src/components/ApplePay/utils.ts b/packages/lib/src/components/ApplePay/utils.ts index 829deac3..14d0fbc7 100644 --- a/packages/lib/src/components/ApplePay/utils.ts +++ b/packages/lib/src/components/ApplePay/utils.ts @@ -1,10 +1,15 @@ -export function resolveSupportedVersion(latestVersion) { +export function resolveSupportedVersion(latestVersion: number): number | null { const versions = []; for (let i = latestVersion; i > 0; i--) { versions.push(i); } - return versions.find(v => v && window.ApplePaySession && ApplePaySession.supportsVersion(v)); + try { + return versions.find(v => v && window.ApplePaySession && ApplePaySession.supportsVersion(v)); + } catch (error) { + console.warn(error); + return null; + } } export function mapBrands(brands) {