@primer-io/react-native 2.30.0 → 2.30.1
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/android/.editorconfig +2 -0
- package/android/build.gradle +29 -1
- package/android/detekt-baseline.xml +24 -0
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +248 -195
- package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +261 -253
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +177 -143
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +298 -291
- package/android/src/main/java/com/primerioreactnative/PrimerRNViewModelStoreOwner.kt +2 -3
- package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +33 -36
- package/android/src/main/java/com/primerioreactnative/components/assets/AssetsManager.kt +29 -30
- package/android/src/main/java/com/primerioreactnative/components/assets/CardNetworkImageFileProvider.kt +15 -15
- package/android/src/main/java/com/primerioreactnative/components/assets/PaymentMethodAssetFileProvider.kt +16 -16
- package/android/src/main/java/com/primerioreactnative/components/datamodels/core/PrimerRNHeadlessUniversalCheckoutPaymentMethod.kt +9 -9
- package/android/src/main/java/com/primerioreactnative/components/datamodels/core/PrimerRawPaymentMethodType.kt +5 -5
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/asset/Resources.kt +143 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/card/PrimerRNCardData.kt +11 -11
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/cardRedirect/PrimerRNBancontactCardData.kt +19 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/phoneNumber/PrimerRNPhoneNumberData.kt +5 -5
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/retailOutlets/PrimerRNRetailOutletData.kt +2 -3
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/retailOutlets/RNRetailOutletsList.kt +15 -14
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/vault/PrimerRNValidationError.kt +10 -10
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/vault/PrimerRNVaultedPaymentMethod.kt +15 -16
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/vault/PrimerRNVaultedPaymentMethodAdditionalData.kt +4 -2
- package/android/src/main/java/com/primerioreactnative/components/events/PrimerHeadlessUniversalCheckoutComponentEvent.kt +6 -6
- package/android/src/main/java/com/primerioreactnative/components/events/PrimerHeadlessUniversalCheckoutEvent.kt +13 -13
- package/android/src/main/java/com/primerioreactnative/components/events/PrimerHeadlessUniversalCheckoutRawDataManagerEvent.kt +2 -2
- package/android/src/main/java/com/primerioreactnative/components/manager/NativeViewContainer.kt +9 -8
- package/android/src/main/java/com/primerioreactnative/components/manager/ach/{AchMandateManager.kt → PrimerRNAchMandateManager.kt} +20 -17
- package/android/src/main/java/com/primerioreactnative/components/manager/ach/PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent.kt +227 -212
- package/android/src/main/java/com/primerioreactnative/components/manager/asset/PrimerRNHeadlessUniversalCheckoutAssetManager.kt +178 -163
- package/android/src/main/java/com/primerioreactnative/components/manager/banks/PrimerRNHeadlessUniversalCheckoutBanksComponent.kt +207 -194
- package/android/src/main/java/com/primerioreactnative/components/manager/googlePay/PrimerGooglePayButtonConstantsModule.kt +23 -26
- package/android/src/main/java/com/primerioreactnative/components/manager/googlePay/PrimerGooglePayButtonManager.kt +25 -23
- package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerKlarnaPaymentViewManager.kt +24 -23
- package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.kt +111 -87
- package/android/src/main/java/com/primerioreactnative/components/manager/nativeUi/PrimerRNHeadlessUniversalCheckoutNativeUiManager.kt +68 -63
- package/android/src/main/java/com/primerioreactnative/components/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManager.kt +189 -164
- package/android/src/main/java/com/primerioreactnative/components/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManagerListener.kt +39 -37
- package/android/src/main/java/com/primerioreactnative/components/manager/vault/PrimerRNHeadlessUniversalCheckoutVaultManager.kt +128 -118
- package/android/src/main/java/com/primerioreactnative/datamodels/{NamedComponentStepRN.kt → NamedComponentStep.kt} +0 -2
- package/android/src/main/java/com/primerioreactnative/datamodels/{NamedComponentValidatableDataRN.kt → NamedComponentValidatableData.kt} +1 -3
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutAdditionalInfoRN.kt +14 -14
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutDataRN.kt +4 -4
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +34 -35
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +14 -14
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEvents.kt +10 -11
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerInputValidationErrorRN.kt +4 -4
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerIssuingBankRN.kt +1 -1
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt +66 -67
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +128 -119
- package/android/src/main/java/com/primerioreactnative/datamodels/ach/AchUserDetailsStepRN.kt +2 -3
- package/android/src/main/java/com/primerioreactnative/datamodels/banks/BanksStepRN.kt +3 -3
- package/android/src/main/java/com/primerioreactnative/datamodels/extensions/ach/AchUserDetailsCollectableData.kt +11 -6
- package/android/src/main/java/com/primerioreactnative/datamodels/extensions/ach/AchUserDetailsStep.kt +1 -1
- package/android/src/main/java/com/primerioreactnative/datamodels/extensions/banks/BanksCollectableData.kt +2 -2
- package/android/src/main/java/com/primerioreactnative/datamodels/extensions/banks/BanksStep.kt +8 -4
- package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentCategoryRN.kt +2 -2
- package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentCollectableDataRN.kt +2 -3
- package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentStepRN.kt +6 -6
- package/android/src/main/java/com/primerioreactnative/extensions/JSONExtensions.kt +26 -26
- package/android/src/main/java/com/primerioreactnative/extensions/LocaleSettingsRN.kt +5 -5
- package/android/src/main/java/com/primerioreactnative/extensions/PaymentInstrumentData.kt +37 -31
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerAddress.kt +11 -10
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutAdditionalInfo.kt +19 -14
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutData.kt +1 -1
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerClientSession.kt +9 -9
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerCustomer.kt +9 -8
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerDebugOptionsRN.kt +1 -2
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerError.kt +3 -3
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerIssuingBank.kt +1 -2
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerLineItem.kt +10 -3
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerOrder.kt +5 -3
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodData.kt +4 -1
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt +69 -54
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerUIOptionsRN.kt +16 -16
- package/android/src/main/java/com/primerioreactnative/extensions/ThreeDsAuthenticationData.kt +7 -7
- package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategory.kt +1 -1
- package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategoryRN.kt +1 -1
- package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCollectableData.kt +4 -4
- package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentStep.kt +8 -7
- package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +6 -5
- package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +33 -34
- package/android/src/main/java/com/primerioreactnative/utils/PrimerHeadlessUniversalCheckoutImplementedRNCallbacks.kt +26 -26
- package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +20 -20
- package/android/src/test/java/com/primerioreactnative/utils/ErrorHelperTest.kt +12 -13
- package/android/tooling/code-analysis/detekt.yml +68 -0
- package/ios/Sources/DataModels/Ach Component/RNTAchUserDetailsCollectableData.swift +2 -2
- package/ios/Sources/DataModels/Banks Component/RNTBanksCollectableData.swift +0 -1
- package/ios/Sources/DataModels/ImplementedRNCallbacks.swift +83 -63
- package/ios/Sources/DataModels/Klarna Component/PrimerHeadlessUniversalCheckoutComponentEvent.swift +3 -1
- package/ios/Sources/DataModels/Klarna Component/RNTKlarnaCollectableData.swift +2 -2
- package/ios/Sources/DataModels/Klarna Component/RNTKlarnaPaymentCategory.swift +1 -1
- package/ios/Sources/DataModels/Klarna Component/RNTKlarnaStep.swift +5 -5
- package/ios/Sources/DataModels/Klarna Component/RNTPrimerError.swift +1 -1
- package/ios/Sources/DataModels/PrimerBancontactCardRedirectData+Extension.swift +1 -2
- package/ios/Sources/DataModels/PrimerCardData+Extension.swift +6 -7
- package/ios/Sources/DataModels/PrimerCheckoutAdditionalInfoRN.swift +6 -7
- package/ios/Sources/DataModels/PrimerHeadlessUniversalCheckout_PaymentMethod.swift +10 -7
- package/ios/Sources/DataModels/PrimerPhoneNumberData+Extension.swift +1 -2
- package/ios/Sources/DataModels/PrimerRawRetailerData+Extension.swift +1 -2
- package/ios/Sources/DataModels/PrimerSettings+Extensions.swift +91 -50
- package/ios/Sources/DataModels/PrimerThemeRN.swift +6 -6
- package/ios/Sources/DataModels/RNTNativeError.swift +3 -4
- package/ios/Sources/DataModels/RNTPrimerPaymentMethodAsset.swift +54 -48
- package/ios/Sources/Headless Universal Checkout/Managers/Ach/PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent.swift +225 -202
- package/ios/Sources/Headless Universal Checkout/Managers/Ach/RNTAchMandateManager.swift +6 -6
- package/ios/Sources/Headless Universal Checkout/Managers/Assets Manager/RNTAssetsManager.swift +163 -161
- package/ios/Sources/Headless Universal Checkout/Managers/Klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.swift +268 -250
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNPrimerHeadlessUniversalCheckoutVaultManager.swift +88 -66
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTNativeUIManager.swift +51 -43
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTRawDataManager.swift +181 -158
- package/ios/Sources/Headless Universal Checkout/Managers/RNTRedirectManager.swift +165 -156
- package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +526 -459
- package/ios/Sources/Helpers/Encodable+Extension.swift +5 -1
- package/ios/Sources/Helpers/Error+Extensions.swift +5 -5
- package/ios/Sources/Helpers/UIColor+Extensions.swift +23 -20
- package/ios/Sources/RNTPrimer.swift +135 -48
- package/lib/commonjs/HeadlessUniversalCheckout/Components/NativeResourceView.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js +4 -4
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js +2 -2
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +6 -6
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/VaultManager.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +4 -4
- package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/types.js +5 -5
- package/lib/commonjs/Primer.js +2 -2
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/RNPrimer.js +5 -5
- package/lib/commonjs/RNPrimer.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/PrimerError.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Components/NativeResourceView.js +3 -3
- package/lib/module/HeadlessUniversalCheckout/Components/NativeResourceView.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.js +1 -1
- package/lib/module/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js +1 -1
- package/lib/module/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js +4 -4
- package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js +2 -2
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +6 -6
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/VaultManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +4 -4
- package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js +1 -1
- package/lib/module/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/types.js +5 -5
- package/lib/module/Primer.js +2 -2
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/RNPrimer.js +5 -5
- package/lib/module/RNPrimer.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/PrimerError.js.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Components/NativeResourceView.d.ts +2 -2
- package/lib/typescript/HeadlessUniversalCheckout/Components/NativeResourceView.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.d.ts +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts +4 -4
- package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/VaultManager.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.d.ts.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.d.ts.map +1 -1
- package/lib/typescript/Primer.d.ts.map +1 -1
- package/lib/typescript/RNPrimer.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +4 -4
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/models/IssuingBank.d.ts.map +1 -1
- package/lib/typescript/models/NamedComponentStep.d.ts.map +1 -1
- package/lib/typescript/models/NamedComponentValidatableData.d.ts.map +1 -1
- package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts +4 -4
- package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts.map +1 -1
- package/lib/typescript/models/PrimerCheckoutData.d.ts +1 -1
- package/lib/typescript/models/PrimerCheckoutData.d.ts.map +1 -1
- package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts.map +1 -1
- package/lib/typescript/models/PrimerClientSession.d.ts.map +1 -1
- package/lib/typescript/models/PrimerComponentDataValidation.d.ts +5 -5
- package/lib/typescript/models/PrimerComponentDataValidation.d.ts.map +1 -1
- package/lib/typescript/models/PrimerCountryCode.d.ts +1 -1
- package/lib/typescript/models/PrimerCountryCode.d.ts.map +1 -1
- package/lib/typescript/models/PrimerCurrencyCode.d.ts +1 -1
- package/lib/typescript/models/PrimerCurrencyCode.d.ts.map +1 -1
- package/lib/typescript/models/PrimerError.d.ts.map +1 -1
- package/lib/typescript/models/PrimerHandlers.d.ts.map +1 -1
- package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts +2 -2
- package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts.map +1 -1
- package/lib/typescript/models/PrimerImplementedRNCallbacks.d.ts.map +1 -1
- package/lib/typescript/models/PrimerInitializationData.d.ts +1 -1
- package/lib/typescript/models/PrimerInitializationData.d.ts.map +1 -1
- package/lib/typescript/models/PrimerInputElementType.d.ts.map +1 -1
- package/lib/typescript/models/PrimerInterfaces.d.ts +1 -1
- package/lib/typescript/models/PrimerPaymentMethodManagerCategory.d.ts.map +1 -1
- package/lib/typescript/models/PrimerPaymentMethodResource.d.ts.map +1 -1
- package/lib/typescript/models/PrimerRawData.d.ts.map +1 -1
- package/lib/typescript/models/PrimerSettings.d.ts +10 -10
- package/lib/typescript/models/PrimerSettings.d.ts.map +1 -1
- package/lib/typescript/models/PrimerValidationError.d.ts.map +1 -1
- package/lib/typescript/models/PrimerValidationErrorResult.d.ts +1 -1
- package/lib/typescript/models/PrimerValidationErrorResult.d.ts.map +1 -1
- package/lib/typescript/models/PrimerVaultedPaymentMethod.d.ts +1 -1
- package/lib/typescript/models/PrimerVaultedPaymentMethod.d.ts.map +1 -1
- package/lib/typescript/models/PrimerVaultedPaymentMethodAdditionalData.d.ts.map +1 -1
- package/lib/typescript/models/PrimerVaultedPaymentMethodResult.d.ts +1 -1
- package/lib/typescript/models/PrimerVaultedPaymentMethodResult.d.ts.map +1 -1
- package/lib/typescript/models/RetailOutletsRetail.d.ts.map +1 -1
- package/lib/typescript/models/ach/AchCollectableData.d.ts +4 -4
- package/lib/typescript/models/ach/AchCollectableData.d.ts.map +1 -1
- package/lib/typescript/models/ach/AchSteps.d.ts +3 -3
- package/lib/typescript/models/ach/AchSteps.d.ts.map +1 -1
- package/lib/typescript/models/banks/BanksCollectableData.d.ts +3 -3
- package/lib/typescript/models/banks/BanksCollectableData.d.ts.map +1 -1
- package/lib/typescript/models/banks/BanksSteps.d.ts +6 -6
- package/lib/typescript/models/banks/BanksSteps.d.ts.map +1 -1
- package/lib/typescript/models/klarna/KlarnaPaymentCategory.d.ts +2 -2
- package/lib/typescript/models/klarna/KlarnaPaymentCategory.d.ts.map +1 -1
- package/lib/typescript/models/klarna/KlarnaPaymentCollectableData.d.ts +4 -4
- package/lib/typescript/models/klarna/KlarnaPaymentCollectableData.d.ts.map +1 -1
- package/lib/typescript/models/klarna/KlarnaPaymentSteps.d.ts +6 -6
- package/lib/typescript/models/klarna/KlarnaPaymentSteps.d.ts.map +1 -1
- package/lib/typescript/utils/index.d.ts +1 -1
- package/package.json +5 -4
- package/primer-io-react-native.podspec +1 -1
- package/src/HeadlessUniversalCheckout/Components/NativeResourceView.tsx +17 -21
- package/src/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.tsx +3 -6
- package/src/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.tsx +2 -4
- package/src/HeadlessUniversalCheckout/Managers/AssetsManager.ts +68 -69
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.ts +127 -131
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.ts +23 -25
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.ts +21 -30
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.ts +137 -141
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.ts +17 -18
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.ts +158 -142
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.ts +7 -7
- package/src/HeadlessUniversalCheckout/Managers/VaultManager.ts +96 -87
- package/src/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.ts +159 -170
- package/src/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.ts +2 -6
- package/src/HeadlessUniversalCheckout/types.ts +5 -5
- package/src/Primer.ts +60 -57
- package/src/RNPrimer.ts +53 -54
- package/src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tsx +1 -1
- package/src/index.tsx +73 -36
- package/src/models/IssuingBank.ts +5 -5
- package/src/models/NamedComponentStep.ts +5 -5
- package/src/models/NamedComponentValidatableData.ts +5 -5
- package/src/models/PrimerCheckoutAdditionalInfo.ts +18 -23
- package/src/models/PrimerCheckoutData.ts +8 -8
- package/src/models/PrimerCheckoutPaymentMethodData.ts +6 -6
- package/src/models/PrimerClientSession.ts +34 -34
- package/src/models/PrimerComponentDataValidation.ts +33 -33
- package/src/models/PrimerCountryCode.ts +1 -1
- package/src/models/PrimerCurrencyCode.ts +1 -1
- package/src/models/PrimerError.ts +7 -1
- package/src/models/PrimerHandlers.ts +24 -24
- package/src/models/PrimerHeadlessUniversalCheckoutPaymentMethod.ts +4 -4
- package/src/models/PrimerImplementedRNCallbacks.ts +15 -15
- package/src/models/PrimerInitializationData.ts +3 -3
- package/src/models/PrimerInputElementType.ts +9 -9
- package/src/models/PrimerInterfaces.ts +1 -1
- package/src/models/PrimerPaymentMethodManagerCategory.ts +4 -4
- package/src/models/PrimerPaymentMethodResource.ts +11 -11
- package/src/models/PrimerRawData.ts +9 -9
- package/src/models/PrimerSessionIntent.ts +1 -1
- package/src/models/PrimerSettings.ts +37 -21
- package/src/models/PrimerValidationError.ts +3 -3
- package/src/models/PrimerValidationErrorResult.ts +2 -2
- package/src/models/PrimerVaultedPaymentMethod.ts +7 -7
- package/src/models/PrimerVaultedPaymentMethodAdditionalData.ts +1 -1
- package/src/models/PrimerVaultedPaymentMethodResult.ts +3 -3
- package/src/models/RetailOutletsRetail.ts +5 -5
- package/src/models/ach/AchCollectableData.ts +12 -12
- package/src/models/ach/AchSteps.ts +18 -18
- package/src/models/banks/BanksCollectableData.ts +14 -14
- package/src/models/banks/BanksSteps.ts +13 -13
- package/src/models/klarna/KlarnaPaymentCategory.ts +16 -16
- package/src/models/klarna/KlarnaPaymentCollectableData.ts +16 -15
- package/src/models/klarna/KlarnaPaymentSteps.ts +21 -17
- package/src/utils/index.ts +1 -1
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/cardRedirect/PrimerRNCardRedirectData.kt +0 -19
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/resource/Resources.kt +0 -138
|
@@ -9,540 +9,607 @@ import Foundation
|
|
|
9
9
|
import PrimerSDK
|
|
10
10
|
import React
|
|
11
11
|
|
|
12
|
+
// swiftlint:disable file_length
|
|
12
13
|
@objc
|
|
13
14
|
enum PrimerHeadlessUniversalCheckoutEvents: Int, CaseIterable {
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
16
|
+
// Delegate
|
|
17
|
+
case onAvailablePaymentMethodsLoad = 0
|
|
18
|
+
case onTokenizationStart
|
|
19
|
+
case onTokenizationSuccess
|
|
20
|
+
case onCheckoutResume
|
|
21
|
+
case onCheckoutPending
|
|
22
|
+
case onCheckoutAdditionalInfo
|
|
23
|
+
case onError
|
|
24
|
+
case onCheckoutComplete
|
|
25
|
+
case onBeforeClientSessionUpdate
|
|
26
|
+
case onClientSessionUpdate
|
|
27
|
+
case onBeforePaymentCreate
|
|
28
|
+
|
|
29
|
+
// UI Delegate
|
|
30
|
+
case onPreparationStart
|
|
31
|
+
case onPaymentMethodShow
|
|
32
|
+
|
|
33
|
+
var stringValue: String {
|
|
34
|
+
switch self {
|
|
35
|
+
case .onAvailablePaymentMethodsLoad:
|
|
36
|
+
return "onAvailablePaymentMethodsLoad"
|
|
37
|
+
case .onTokenizationStart:
|
|
38
|
+
return "onTokenizationStart"
|
|
39
|
+
case .onTokenizationSuccess:
|
|
40
|
+
return "onTokenizationSuccess"
|
|
41
|
+
case .onCheckoutResume:
|
|
42
|
+
return "onCheckoutResume"
|
|
43
|
+
case .onCheckoutPending:
|
|
44
|
+
return "onCheckoutPending"
|
|
45
|
+
case .onCheckoutAdditionalInfo:
|
|
46
|
+
return "onCheckoutAdditionalInfo"
|
|
47
|
+
case .onError:
|
|
48
|
+
return "onError"
|
|
49
|
+
case .onBeforeClientSessionUpdate:
|
|
50
|
+
return "onBeforeClientSessionUpdate"
|
|
51
|
+
case .onCheckoutComplete:
|
|
52
|
+
return "onCheckoutComplete"
|
|
53
|
+
case .onBeforePaymentCreate:
|
|
54
|
+
return "onBeforePaymentCreate"
|
|
55
|
+
case .onClientSessionUpdate:
|
|
56
|
+
return "onClientSessionUpdate"
|
|
57
|
+
case .onPreparationStart:
|
|
58
|
+
return "onPreparationStart"
|
|
59
|
+
case .onPaymentMethodShow:
|
|
60
|
+
return "onPaymentMethodShow"
|
|
61
61
|
}
|
|
62
|
+
}
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
@objc(PrimerHeadlessUniversalCheckout)
|
|
65
66
|
class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
|
|
66
67
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
var settings: PrimerSettings?
|
|
69
|
+
// swiftlint:disable identifier_name
|
|
70
|
+
var primerWillCreatePaymentWithDataDecisionHandler: ((_ errorMessage: String?) -> Void)?
|
|
71
|
+
var primerDidTokenizePaymentMethodDecisionHandler:
|
|
72
|
+
((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
|
|
73
|
+
// swiftlint:enable identifier_name
|
|
74
|
+
var primerDidResumeWithDecisionHandler:
|
|
75
|
+
((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
|
|
76
|
+
var implementedRNCallbacks: ImplementedRNCallbacks?
|
|
77
|
+
|
|
78
|
+
override class func requiresMainQueueSetup() -> Bool {
|
|
79
|
+
return true
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
override init() {
|
|
83
|
+
super.init()
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
override func supportedEvents() -> [String]! {
|
|
87
|
+
return PrimerHeadlessUniversalCheckoutEvents.allCases.compactMap({ $0.stringValue })
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// MARK: - API
|
|
91
|
+
|
|
92
|
+
@objc
|
|
93
|
+
public func startWithClientToken(
|
|
94
|
+
_ clientToken: String,
|
|
95
|
+
settingsStr: String?,
|
|
96
|
+
resolver: @escaping RCTPromiseResolveBlock,
|
|
97
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
|
98
|
+
) {
|
|
99
|
+
PrimerHeadlessUniversalCheckout.current.delegate = self
|
|
100
|
+
PrimerHeadlessUniversalCheckout.current.uiDelegate = self
|
|
101
|
+
|
|
102
|
+
do {
|
|
103
|
+
var tmpSettings: PrimerSettings?
|
|
104
|
+
if let settingsStr = settingsStr {
|
|
105
|
+
tmpSettings = try PrimerSettings(settingsStr: settingsStr)
|
|
106
|
+
self.settings = tmpSettings
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
PrimerHeadlessUniversalCheckout.current.start(
|
|
110
|
+
withClientToken: clientToken,
|
|
111
|
+
settings: settings,
|
|
112
|
+
delegate: self,
|
|
113
|
+
uiDelegate: self
|
|
114
|
+
) { paymentMethods, err in
|
|
115
|
+
if let err = err {
|
|
116
|
+
rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
|
|
117
|
+
} else if let paymentMethods = paymentMethods {
|
|
118
|
+
let paymentMethodObjects = paymentMethods.compactMap({ $0.toJsonObject() })
|
|
119
|
+
resolver(["availablePaymentMethods": paymentMethodObjects])
|
|
120
|
+
}
|
|
121
|
+
}
|
|
76
122
|
|
|
77
|
-
|
|
78
|
-
|
|
123
|
+
} catch {
|
|
124
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
79
125
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@objc
|
|
129
|
+
public func cleanUp(
|
|
130
|
+
_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
|
|
131
|
+
) {
|
|
132
|
+
DispatchQueue.main.async {
|
|
133
|
+
PrimerHeadlessUniversalCheckout.current.cleanUp()
|
|
134
|
+
resolver(nil)
|
|
83
135
|
}
|
|
136
|
+
}
|
|
84
137
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
@objc
|
|
88
|
-
public func startWithClientToken(_ clientToken: String,
|
|
89
|
-
settingsStr: String?,
|
|
90
|
-
resolver: @escaping RCTPromiseResolveBlock,
|
|
91
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
92
|
-
{
|
|
93
|
-
PrimerHeadlessUniversalCheckout.current.delegate = self
|
|
94
|
-
PrimerHeadlessUniversalCheckout.current.uiDelegate = self
|
|
95
|
-
|
|
96
|
-
do {
|
|
97
|
-
var tmpSettings: PrimerSettings?
|
|
98
|
-
if let settingsStr = settingsStr {
|
|
99
|
-
tmpSettings = try PrimerSettings(settingsStr: settingsStr)
|
|
100
|
-
self.settings = tmpSettings
|
|
101
|
-
}
|
|
138
|
+
// MARK: - DECISION HANDLERS
|
|
102
139
|
|
|
103
|
-
|
|
104
|
-
withClientToken: clientToken,
|
|
105
|
-
settings: settings,
|
|
106
|
-
delegate: self,
|
|
107
|
-
uiDelegate: self) { paymentMethods, err in
|
|
108
|
-
if let err = err {
|
|
109
|
-
rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
|
|
110
|
-
} else if let paymentMethods = paymentMethods {
|
|
111
|
-
let paymentMethodObjects = paymentMethods.compactMap({ $0.toJsonObject() })
|
|
112
|
-
resolver(["availablePaymentMethods": paymentMethodObjects])
|
|
113
|
-
}
|
|
114
|
-
}
|
|
140
|
+
// MARK: Tokenization & Resume Handlers
|
|
115
141
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
142
|
+
@objc
|
|
143
|
+
public func handleTokenizationNewClientToken(
|
|
144
|
+
_ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock,
|
|
145
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
|
146
|
+
) {
|
|
147
|
+
DispatchQueue.main.async {
|
|
148
|
+
self.primerDidTokenizePaymentMethodDecisionHandler?(newClientToken, nil)
|
|
149
|
+
self.primerDidTokenizePaymentMethodDecisionHandler = nil
|
|
150
|
+
resolver(nil)
|
|
119
151
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
@objc
|
|
155
|
+
public func handleResumeWithNewClientToken(
|
|
156
|
+
_ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock,
|
|
157
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
|
158
|
+
) {
|
|
159
|
+
DispatchQueue.main.async {
|
|
160
|
+
self.primerDidResumeWithDecisionHandler?(newClientToken, nil)
|
|
161
|
+
self.primerDidResumeWithDecisionHandler = nil
|
|
162
|
+
resolver(nil)
|
|
127
163
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
resolver(nil)
|
|
139
|
-
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
@objc
|
|
167
|
+
public func handleCompleteFlow(
|
|
168
|
+
_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
|
|
169
|
+
) {
|
|
170
|
+
DispatchQueue.main.async {
|
|
171
|
+
self.primerDidResumeWithDecisionHandler?(nil, nil)
|
|
172
|
+
self.primerDidResumeWithDecisionHandler = nil
|
|
173
|
+
resolver(nil)
|
|
140
174
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// MARK: Payment Creation
|
|
178
|
+
|
|
179
|
+
@objc
|
|
180
|
+
public func handlePaymentCreationAbort(
|
|
181
|
+
_ errorMessage: String?, resolver: @escaping RCTPromiseResolveBlock,
|
|
182
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
|
183
|
+
) {
|
|
184
|
+
DispatchQueue.main.async {
|
|
185
|
+
self.primerWillCreatePaymentWithDataDecisionHandler?(errorMessage ?? "")
|
|
186
|
+
self.primerWillCreatePaymentWithDataDecisionHandler = nil
|
|
187
|
+
resolver(nil)
|
|
149
188
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
@objc
|
|
192
|
+
public func handlePaymentCreationContinue(
|
|
193
|
+
_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
|
|
194
|
+
) {
|
|
195
|
+
DispatchQueue.main.async {
|
|
196
|
+
self.primerWillCreatePaymentWithDataDecisionHandler?(nil)
|
|
197
|
+
self.primerWillCreatePaymentWithDataDecisionHandler = nil
|
|
198
|
+
resolver(nil)
|
|
158
199
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// MARK: Helpers
|
|
203
|
+
|
|
204
|
+
private func detectImplemetedCallbacks() {
|
|
205
|
+
sendEvent(withName: PrimerEvents.detectImplementedRNCallbacks.stringValue, body: nil)
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
@objc
|
|
209
|
+
public func setImplementedRNCallbacks(
|
|
210
|
+
_ implementedRNCallbacksStr: String, resolver: @escaping RCTPromiseResolveBlock,
|
|
211
|
+
rejecter: @escaping RCTPromiseRejectBlock
|
|
212
|
+
) {
|
|
213
|
+
DispatchQueue.main.async {
|
|
214
|
+
do {
|
|
215
|
+
guard let implementedRNCallbacksData = implementedRNCallbacksStr.data(using: .utf8) else {
|
|
216
|
+
let err = RNTNativeError(
|
|
217
|
+
errorId: "native-ios",
|
|
218
|
+
errorDescription: "Failed to convert string to data",
|
|
219
|
+
recoverySuggestion: nil)
|
|
220
|
+
throw err
|
|
168
221
|
}
|
|
222
|
+
self.implementedRNCallbacks = try JSONDecoder().decode(
|
|
223
|
+
ImplementedRNCallbacks.self, from: implementedRNCallbacksData)
|
|
224
|
+
resolver(nil)
|
|
225
|
+
} catch {
|
|
226
|
+
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: false)
|
|
227
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
228
|
+
}
|
|
169
229
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
do {
|
|
190
|
-
guard let implementedRNCallbacksData = implementedRNCallbacksStr.data(using: .utf8) else {
|
|
191
|
-
let err = RNTNativeError(
|
|
192
|
-
errorId: "native-ios",
|
|
193
|
-
errorDescription: "Failed to convert string to data",
|
|
194
|
-
recoverySuggestion: nil)
|
|
195
|
-
throw err
|
|
196
|
-
}
|
|
197
|
-
self.implementedRNCallbacks = try JSONDecoder().decode(ImplementedRNCallbacks.self, from: implementedRNCallbacksData)
|
|
198
|
-
resolver(nil)
|
|
199
|
-
} catch {
|
|
200
|
-
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: false)
|
|
201
|
-
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
private func handleRNBridgeError(_ error: Error, checkoutData: PrimerCheckoutData?, stopOnDebug: Bool) {
|
|
207
|
-
DispatchQueue.main.async {
|
|
208
|
-
if stopOnDebug {
|
|
209
|
-
assertionFailure(error.localizedDescription)
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
var body: [String: Any] = ["error": error.rnError]
|
|
213
|
-
if let checkoutData = checkoutData,
|
|
214
|
-
let data = try? JSONEncoder().encode(checkoutData),
|
|
215
|
-
let json = try? JSONSerialization.jsonObject(with: data){
|
|
216
|
-
body["checkoutData"] = json
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onError.stringValue, body: body)
|
|
220
|
-
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
private func handleRNBridgeError(
|
|
233
|
+
_ error: Error, checkoutData: PrimerCheckoutData?, stopOnDebug: Bool
|
|
234
|
+
) {
|
|
235
|
+
DispatchQueue.main.async {
|
|
236
|
+
if stopOnDebug {
|
|
237
|
+
assertionFailure(error.localizedDescription)
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
var body: [String: Any] = ["error": error.rnError]
|
|
241
|
+
if let checkoutData = checkoutData,
|
|
242
|
+
let data = try? JSONEncoder().encode(checkoutData),
|
|
243
|
+
let json = try? JSONSerialization.jsonObject(with: data) {
|
|
244
|
+
body["checkoutData"] = json
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
self.sendEvent(
|
|
248
|
+
withName: PrimerHeadlessUniversalCheckoutEvents.onError.stringValue, body: body)
|
|
221
249
|
}
|
|
250
|
+
}
|
|
222
251
|
}
|
|
223
252
|
|
|
224
253
|
// MARK: - EVENTS
|
|
225
254
|
|
|
226
255
|
extension RNTPrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutDelegate {
|
|
227
256
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
257
|
+
// case onAvailablePaymentMethodsLoad = 0
|
|
258
|
+
func primerHeadlessUniversalCheckoutDidLoadAvailablePaymentMethods(
|
|
259
|
+
_ paymentMethods: [PrimerHeadlessUniversalCheckout.PaymentMethod]
|
|
260
|
+
) {
|
|
261
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onAvailablePaymentMethodsLoad
|
|
262
|
+
.stringValue
|
|
263
|
+
|
|
264
|
+
DispatchQueue.main.async {
|
|
265
|
+
self.sendEvent(
|
|
266
|
+
withName: rnCallbackName,
|
|
267
|
+
body: ["availablePaymentMethods": paymentMethods.compactMap({ $0.toJsonObject() })])
|
|
237
268
|
}
|
|
269
|
+
}
|
|
238
270
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
271
|
+
// case onTokenizationStart
|
|
272
|
+
func primerHeadlessUniversalCheckoutDidStartTokenization(for paymentMethodType: String) {
|
|
273
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onTokenizationStart.stringValue
|
|
242
274
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
}
|
|
275
|
+
DispatchQueue.main.async {
|
|
276
|
+
self.sendEvent(
|
|
277
|
+
withName: rnCallbackName,
|
|
278
|
+
body: ["paymentMethodType": paymentMethodType])
|
|
248
279
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
do {
|
|
267
|
-
let paymentMethodTokenJson = try paymentMethodTokenData.toJsonObject()
|
|
268
|
-
self.sendEvent(
|
|
269
|
-
withName: rnCallbackName,
|
|
270
|
-
body: ["paymentMethodTokenData": paymentMethodTokenJson])
|
|
271
|
-
|
|
272
|
-
} catch {
|
|
273
|
-
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
|
|
274
|
-
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// case onTokenizationSuccess
|
|
283
|
+
func primerHeadlessUniversalCheckoutDidTokenizePaymentMethod(
|
|
284
|
+
_ paymentMethodTokenData: PrimerPaymentMethodTokenData,
|
|
285
|
+
decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void
|
|
286
|
+
) {
|
|
287
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onTokenizationSuccess.stringValue
|
|
288
|
+
|
|
289
|
+
DispatchQueue.main.async {
|
|
290
|
+
if self.implementedRNCallbacks?.isOnTokenizationSuccessImplemented == true {
|
|
291
|
+
self.primerDidTokenizePaymentMethodDecisionHandler = { (newClientToken, _) in
|
|
292
|
+
DispatchQueue.main.async {
|
|
293
|
+
if let newClientToken = newClientToken {
|
|
294
|
+
decisionHandler(.continueWithNewClientToken(newClientToken))
|
|
275
295
|
} else {
|
|
276
|
-
|
|
277
|
-
let err = RNTNativeError(
|
|
278
|
-
errorId: "native-ios",
|
|
279
|
-
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
280
|
-
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
281
|
-
self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
|
|
282
|
-
}
|
|
296
|
+
decisionHandler(.complete())
|
|
283
297
|
}
|
|
298
|
+
}
|
|
284
299
|
}
|
|
285
|
-
}
|
|
286
300
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
if self.implementedRNCallbacks?.isOnCheckoutResumeImplemented == true {
|
|
293
|
-
self.primerDidResumeWithDecisionHandler = { (resumeToken, errorMessage) in
|
|
294
|
-
DispatchQueue.main.async {
|
|
295
|
-
if let resumeToken = resumeToken {
|
|
296
|
-
decisionHandler(.continueWithNewClientToken(resumeToken))
|
|
297
|
-
} else {
|
|
298
|
-
decisionHandler(.complete())
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
self.sendEvent(
|
|
304
|
-
withName: rnCallbackName,
|
|
305
|
-
body: ["resumeToken": resumeToken])
|
|
301
|
+
do {
|
|
302
|
+
let paymentMethodTokenJson = try paymentMethodTokenData.toJsonObject()
|
|
303
|
+
self.sendEvent(
|
|
304
|
+
withName: rnCallbackName,
|
|
305
|
+
body: ["paymentMethodTokenData": paymentMethodTokenJson])
|
|
306
306
|
|
|
307
|
+
} catch {
|
|
308
|
+
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
|
|
309
|
+
}
|
|
310
|
+
} else {
|
|
311
|
+
if self.settings?.paymentHandling == .manual {
|
|
312
|
+
let err = RNTNativeError(
|
|
313
|
+
errorId: "native-ios",
|
|
314
|
+
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
315
|
+
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
316
|
+
self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// case onCheckoutResume
|
|
323
|
+
func primerHeadlessUniversalCheckoutDidResumeWith(
|
|
324
|
+
_ resumeToken: String,
|
|
325
|
+
decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void
|
|
326
|
+
) {
|
|
327
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutResume.stringValue
|
|
328
|
+
|
|
329
|
+
DispatchQueue.main.async {
|
|
330
|
+
if self.implementedRNCallbacks?.isOnCheckoutResumeImplemented == true {
|
|
331
|
+
self.primerDidResumeWithDecisionHandler = { (resumeToken, _) in
|
|
332
|
+
DispatchQueue.main.async {
|
|
333
|
+
if let resumeToken = resumeToken {
|
|
334
|
+
decisionHandler(.continueWithNewClientToken(resumeToken))
|
|
307
335
|
} else {
|
|
308
|
-
|
|
309
|
-
let err = RNTNativeError(
|
|
310
|
-
errorId: "native-ios",
|
|
311
|
-
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
312
|
-
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
313
|
-
self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
|
|
314
|
-
}
|
|
336
|
+
decisionHandler(.complete())
|
|
315
337
|
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
self.sendEvent(
|
|
342
|
+
withName: rnCallbackName,
|
|
343
|
+
body: ["resumeToken": resumeToken])
|
|
344
|
+
|
|
345
|
+
} else {
|
|
346
|
+
if self.settings?.paymentHandling == .manual {
|
|
347
|
+
let err = RNTNativeError(
|
|
348
|
+
errorId: "native-ios",
|
|
349
|
+
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
350
|
+
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
351
|
+
self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
|
|
316
352
|
}
|
|
353
|
+
}
|
|
317
354
|
}
|
|
355
|
+
}
|
|
318
356
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
if self.implementedRNCallbacks?.isOnCheckoutPendingImplemented == true {
|
|
325
|
-
do {
|
|
326
|
-
let checkoutAdditionalInfoJson = try additionalInfo?.toJsonObject()
|
|
327
|
-
self.sendEvent(withName: rnCallbackName, body: checkoutAdditionalInfoJson)
|
|
328
|
-
} catch {
|
|
329
|
-
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
330
|
-
self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
|
|
331
|
-
}
|
|
332
|
-
} else {
|
|
333
|
-
let err = RNTNativeError(
|
|
334
|
-
errorId: "native-ios",
|
|
335
|
-
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
336
|
-
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
357
|
+
// case onCheckoutPending
|
|
358
|
+
func primerHeadlessUniversalCheckoutDidEnterResumePendingWithPaymentAdditionalInfo(
|
|
359
|
+
_ additionalInfo: PrimerCheckoutAdditionalInfo?
|
|
360
|
+
) {
|
|
361
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutPending.stringValue
|
|
337
362
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
363
|
+
DispatchQueue.main.async {
|
|
364
|
+
if self.implementedRNCallbacks?.isOnCheckoutPendingImplemented == true {
|
|
365
|
+
do {
|
|
366
|
+
let checkoutAdditionalInfoJson = try additionalInfo?.toJsonObject()
|
|
367
|
+
self.sendEvent(withName: rnCallbackName, body: checkoutAdditionalInfoJson)
|
|
368
|
+
} catch {
|
|
369
|
+
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
370
|
+
self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
|
|
341
371
|
}
|
|
372
|
+
} else {
|
|
373
|
+
let err = RNTNativeError(
|
|
374
|
+
errorId: "native-ios",
|
|
375
|
+
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
376
|
+
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
377
|
+
|
|
378
|
+
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
379
|
+
self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
|
|
380
|
+
}
|
|
342
381
|
}
|
|
382
|
+
}
|
|
343
383
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
do {
|
|
351
|
-
switch additionalInfo {
|
|
352
|
-
case let info as ACHBankAccountCollectorAdditionalInfo:
|
|
353
|
-
// Handled internally, nothing for merchant to handle
|
|
354
|
-
let keyWindow = UIApplication
|
|
355
|
-
.shared
|
|
356
|
-
.connectedScenes
|
|
357
|
-
.flatMap { ($0 as? UIWindowScene)?.windows ?? [] }
|
|
358
|
-
.last { $0.isKeyWindow }
|
|
359
|
-
DispatchQueue.main.async {
|
|
360
|
-
if let rootViewController = keyWindow?.rootViewController {
|
|
361
|
-
rootViewController.present(info.collectorViewController, animated: true, completion: nil)
|
|
362
|
-
} else {
|
|
363
|
-
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
364
|
-
self.handleRNBridgeError(
|
|
365
|
-
RNTNativeError(
|
|
366
|
-
errorId: "native-ios",
|
|
367
|
-
errorDescription: "Failed to retrieve root view controller, cannot present Stripe view controller",
|
|
368
|
-
recoverySuggestion: nil
|
|
369
|
-
),
|
|
370
|
-
checkoutData: checkoutData,
|
|
371
|
-
stopOnDebug: true
|
|
372
|
-
)
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
return
|
|
376
|
-
case _ as ACHMandateAdditionalInfo:
|
|
377
|
-
self.sendEvent(
|
|
378
|
-
withName: rnCallbackName,
|
|
379
|
-
body: try AchAdditionalInfoDisplayMandateRN().toJsonObject()
|
|
380
|
-
)
|
|
381
|
-
case let info as MultibancoCheckoutAdditionalInfo:
|
|
382
|
-
self.sendEvent(
|
|
383
|
-
withName: rnCallbackName,
|
|
384
|
-
body: try MultibancoCheckoutAdditionalInfoRN(expiresAt: info.expiresAt, reference: info.reference, entity: info.entity).toJsonObject()
|
|
385
|
-
)
|
|
386
|
-
case let info as PromptPayCheckoutAdditionalInfo:
|
|
387
|
-
self.sendEvent(
|
|
388
|
-
withName: rnCallbackName,
|
|
389
|
-
body: try PromptPayCheckoutAdditionalInfoRN(expiresAt: info.expiresAt, qrCodeUrl: info.qrCodeUrl, qrCodeBase64: info.qrCodeBase64).toJsonObject()
|
|
390
|
-
)
|
|
391
|
-
case let info as XenditCheckoutVoucherAdditionalInfo:
|
|
392
|
-
self.sendEvent(
|
|
393
|
-
withName: rnCallbackName,
|
|
394
|
-
body: try XenditCheckoutVoucherAdditionalInfoRN(expiresAt: info.expiresAt, couponCode: info.couponCode, retailerName: info.retailerName).toJsonObject()
|
|
395
|
-
)
|
|
396
|
-
default:
|
|
397
|
-
self.sendEvent(
|
|
398
|
-
withName: rnCallbackName,
|
|
399
|
-
body: try additionalInfo?.toJsonObject()
|
|
400
|
-
)
|
|
401
|
-
}
|
|
402
|
-
} catch {
|
|
403
|
-
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
404
|
-
self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
|
|
405
|
-
}
|
|
406
|
-
} else {
|
|
407
|
-
let err = RNTNativeError(
|
|
408
|
-
errorId: "native-bridge",
|
|
409
|
-
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
410
|
-
recoverySuggestion: "Callback [\(rnCallbackName)] should be implemented.")
|
|
384
|
+
// case onCheckoutAdditionalInfo
|
|
385
|
+
// swiftlint:disable function_body_length
|
|
386
|
+
func primerHeadlessUniversalCheckoutDidReceiveAdditionalInfo(
|
|
387
|
+
_ additionalInfo: PrimerCheckoutAdditionalInfo?
|
|
388
|
+
) {
|
|
389
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutAdditionalInfo.stringValue
|
|
411
390
|
|
|
391
|
+
DispatchQueue.main.async {
|
|
392
|
+
if self.implementedRNCallbacks?.isOnCheckoutAdditionalInfoImplemented == true {
|
|
393
|
+
do {
|
|
394
|
+
switch additionalInfo {
|
|
395
|
+
case let info as ACHBankAccountCollectorAdditionalInfo:
|
|
396
|
+
// Handled internally, nothing for merchant to handle
|
|
397
|
+
let keyWindow = UIApplication
|
|
398
|
+
.shared
|
|
399
|
+
.connectedScenes
|
|
400
|
+
.flatMap { ($0 as? UIWindowScene)?.windows ?? [] }
|
|
401
|
+
.last { $0.isKeyWindow }
|
|
402
|
+
DispatchQueue.main.async {
|
|
403
|
+
if let rootViewController = keyWindow?.rootViewController {
|
|
404
|
+
rootViewController.present(
|
|
405
|
+
info.collectorViewController, animated: true, completion: nil)
|
|
406
|
+
} else {
|
|
412
407
|
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
413
|
-
self.handleRNBridgeError(
|
|
408
|
+
self.handleRNBridgeError(
|
|
409
|
+
RNTNativeError(
|
|
410
|
+
errorId: "native-ios",
|
|
411
|
+
errorDescription:
|
|
412
|
+
"Failed to retrieve root view controller, cannot present Stripe view controller",
|
|
413
|
+
recoverySuggestion: nil
|
|
414
|
+
),
|
|
415
|
+
checkoutData: checkoutData,
|
|
416
|
+
stopOnDebug: true
|
|
417
|
+
)
|
|
418
|
+
}
|
|
414
419
|
}
|
|
420
|
+
return
|
|
421
|
+
case _ as ACHMandateAdditionalInfo:
|
|
422
|
+
self.sendEvent(
|
|
423
|
+
withName: rnCallbackName,
|
|
424
|
+
body: try AchAdditionalInfoDisplayMandateRN().toJsonObject()
|
|
425
|
+
)
|
|
426
|
+
case let info as MultibancoCheckoutAdditionalInfo:
|
|
427
|
+
self.sendEvent(
|
|
428
|
+
withName: rnCallbackName,
|
|
429
|
+
body: try MultibancoCheckoutAdditionalInfoRN(
|
|
430
|
+
expiresAt: info.expiresAt,
|
|
431
|
+
reference: info.reference,
|
|
432
|
+
entity: info.entity
|
|
433
|
+
).toJsonObject()
|
|
434
|
+
)
|
|
435
|
+
case let info as PromptPayCheckoutAdditionalInfo:
|
|
436
|
+
self.sendEvent(
|
|
437
|
+
withName: rnCallbackName,
|
|
438
|
+
body: try PromptPayCheckoutAdditionalInfoRN(
|
|
439
|
+
expiresAt: info.expiresAt,
|
|
440
|
+
qrCodeUrl: info.qrCodeUrl,
|
|
441
|
+
qrCodeBase64: info.qrCodeBase64
|
|
442
|
+
).toJsonObject()
|
|
443
|
+
)
|
|
444
|
+
case let info as XenditCheckoutVoucherAdditionalInfo:
|
|
445
|
+
self.sendEvent(
|
|
446
|
+
withName: rnCallbackName,
|
|
447
|
+
body: try XenditCheckoutVoucherAdditionalInfoRN(
|
|
448
|
+
expiresAt: info.expiresAt,
|
|
449
|
+
couponCode: info.couponCode,
|
|
450
|
+
retailerName: info.retailerName
|
|
451
|
+
).toJsonObject()
|
|
452
|
+
)
|
|
453
|
+
default:
|
|
454
|
+
self.sendEvent(
|
|
455
|
+
withName: rnCallbackName,
|
|
456
|
+
body: try additionalInfo?.toJsonObject()
|
|
457
|
+
)
|
|
458
|
+
}
|
|
459
|
+
} catch {
|
|
460
|
+
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
461
|
+
self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
|
|
415
462
|
}
|
|
463
|
+
} else {
|
|
464
|
+
let err = RNTNativeError(
|
|
465
|
+
errorId: "native-bridge",
|
|
466
|
+
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
467
|
+
recoverySuggestion: "Callback [\(rnCallbackName)] should be implemented.")
|
|
468
|
+
|
|
469
|
+
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
470
|
+
self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
|
|
471
|
+
}
|
|
416
472
|
}
|
|
473
|
+
}
|
|
474
|
+
// swiftlint:enable function_body_length
|
|
475
|
+
|
|
476
|
+
// case onError
|
|
477
|
+
func primerHeadlessUniversalCheckoutDidFail(
|
|
478
|
+
withError err: Error, checkoutData: PrimerCheckoutData?
|
|
479
|
+
) {
|
|
480
|
+
if self.implementedRNCallbacks?.isOnErrorImplemented == true {
|
|
481
|
+
// Send the error message to the RN bridge.
|
|
482
|
+
self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
|
|
483
|
+
|
|
484
|
+
} else {
|
|
485
|
+
// RN dev hasn't opted in on listening SDK errors.
|
|
486
|
+
// Ignore!
|
|
487
|
+
}
|
|
488
|
+
}
|
|
417
489
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
// Send the error message to the RN bridge.
|
|
422
|
-
self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
|
|
490
|
+
// case onCheckoutComplete
|
|
491
|
+
func primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData(_ data: PrimerCheckoutData) {
|
|
492
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutComplete.stringValue
|
|
423
493
|
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
494
|
+
DispatchQueue.main.async {
|
|
495
|
+
if self.implementedRNCallbacks?.isOnCheckoutCompleteImplemented == true {
|
|
496
|
+
do {
|
|
497
|
+
let checkoutJson = try data.toJsonObject()
|
|
498
|
+
self.sendEvent(withName: rnCallbackName, body: checkoutJson)
|
|
499
|
+
} catch {
|
|
500
|
+
self.handleRNBridgeError(error, checkoutData: data, stopOnDebug: true)
|
|
427
501
|
}
|
|
502
|
+
} else {
|
|
503
|
+
let err = RNTNativeError(
|
|
504
|
+
errorId: "native-ios",
|
|
505
|
+
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
506
|
+
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
507
|
+
self.handleRNBridgeError(err, checkoutData: data, stopOnDebug: false)
|
|
508
|
+
}
|
|
428
509
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
} else {
|
|
443
|
-
let err = RNTNativeError(
|
|
444
|
-
errorId: "native-ios",
|
|
445
|
-
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
446
|
-
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
447
|
-
self.handleRNBridgeError(err, checkoutData: data, stopOnDebug: false)
|
|
448
|
-
}
|
|
449
|
-
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
// case onBeforeClientSessionUpdate
|
|
513
|
+
func primerHeadlessUniversalCheckoutWillUpdateClientSession() {
|
|
514
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onBeforeClientSessionUpdate
|
|
515
|
+
.stringValue
|
|
516
|
+
|
|
517
|
+
DispatchQueue.main.async {
|
|
518
|
+
if self.implementedRNCallbacks?.isOnBeforeClientSessionUpdateImplemented == true {
|
|
519
|
+
self.sendEvent(
|
|
520
|
+
withName: rnCallbackName,
|
|
521
|
+
body: nil)
|
|
522
|
+
}
|
|
450
523
|
}
|
|
524
|
+
}
|
|
451
525
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
526
|
+
// case onClientSessionUpdate
|
|
527
|
+
func primerHeadlessUniversalCheckoutDidUpdateClientSession(_ clientSession: PrimerClientSession) {
|
|
528
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onClientSessionUpdate.stringValue
|
|
455
529
|
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
530
|
+
DispatchQueue.main.async {
|
|
531
|
+
if self.implementedRNCallbacks?.isOnClientSessionUpdateImplemented == true {
|
|
532
|
+
do {
|
|
533
|
+
let json = try clientSession.toJsonObject()
|
|
534
|
+
self.sendEvent(
|
|
535
|
+
withName: rnCallbackName,
|
|
536
|
+
body: ["clientSession": json])
|
|
537
|
+
|
|
538
|
+
} catch {
|
|
539
|
+
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
|
|
462
540
|
}
|
|
541
|
+
}
|
|
463
542
|
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// case onBeforePaymentCreate
|
|
546
|
+
func primerHeadlessUniversalCheckoutWillCreatePaymentWithData(
|
|
547
|
+
_ data: PrimerCheckoutPaymentMethodData,
|
|
548
|
+
decisionHandler: @escaping (PrimerPaymentCreationDecision) -> Void
|
|
549
|
+
) {
|
|
550
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onBeforePaymentCreate.stringValue
|
|
551
|
+
|
|
552
|
+
DispatchQueue.main.async {
|
|
553
|
+
if self.implementedRNCallbacks?.isOnBeforePaymentCreateImplemented == true {
|
|
554
|
+
self.primerWillCreatePaymentWithDataDecisionHandler = { errorMessage in
|
|
555
|
+
DispatchQueue.main.async {
|
|
556
|
+
if let errorMessage = errorMessage {
|
|
557
|
+
decisionHandler(
|
|
558
|
+
.abortPaymentCreation(withErrorMessage: errorMessage.isEmpty ? nil : errorMessage))
|
|
559
|
+
} else {
|
|
560
|
+
decisionHandler(.continuePaymentCreation())
|
|
480
561
|
}
|
|
562
|
+
}
|
|
481
563
|
}
|
|
482
|
-
}
|
|
483
564
|
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
if let errorMessage = errorMessage {
|
|
493
|
-
decisionHandler(.abortPaymentCreation(withErrorMessage: errorMessage.isEmpty ? nil : errorMessage))
|
|
494
|
-
} else {
|
|
495
|
-
decisionHandler(.continuePaymentCreation())
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
do {
|
|
501
|
-
let checkoutPaymentmethodJson = try data
|
|
502
|
-
.toPrimerCheckoutPaymentMethodDataRN()
|
|
503
|
-
.toJsonObject()
|
|
504
|
-
self.sendEvent(
|
|
505
|
-
withName: rnCallbackName,
|
|
506
|
-
body: checkoutPaymentmethodJson)
|
|
507
|
-
|
|
508
|
-
} catch {
|
|
509
|
-
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
|
|
510
|
-
}
|
|
565
|
+
do {
|
|
566
|
+
let checkoutPaymentmethodJson =
|
|
567
|
+
try data
|
|
568
|
+
.toPrimerCheckoutPaymentMethodDataRN()
|
|
569
|
+
.toJsonObject()
|
|
570
|
+
self.sendEvent(
|
|
571
|
+
withName: rnCallbackName,
|
|
572
|
+
body: checkoutPaymentmethodJson)
|
|
511
573
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
// been implemented on the RN side, continue the payment flow.
|
|
515
|
-
decisionHandler(.continuePaymentCreation())
|
|
516
|
-
}
|
|
574
|
+
} catch {
|
|
575
|
+
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
|
|
517
576
|
}
|
|
577
|
+
|
|
578
|
+
} else {
|
|
579
|
+
// 'primerHeadlessUniversalCheckoutWillCreatePaymentWithData' hasn't
|
|
580
|
+
// been implemented on the RN side, continue the payment flow.
|
|
581
|
+
decisionHandler(.continuePaymentCreation())
|
|
582
|
+
}
|
|
518
583
|
}
|
|
584
|
+
}
|
|
519
585
|
|
|
520
586
|
}
|
|
521
587
|
|
|
522
588
|
extension RNTPrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutUIDelegate {
|
|
523
589
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
590
|
+
// onPreparationStart
|
|
591
|
+
func primerHeadlessUniversalCheckoutUIDidStartPreparation(for paymentMethodType: String) {
|
|
592
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onPreparationStart.stringValue
|
|
527
593
|
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
}
|
|
594
|
+
DispatchQueue.main.async {
|
|
595
|
+
if self.implementedRNCallbacks?.isOnPreparationStartImplemented == true {
|
|
596
|
+
self.sendEvent(
|
|
597
|
+
withName: rnCallbackName,
|
|
598
|
+
body: ["paymentMethodType": paymentMethodType])
|
|
599
|
+
}
|
|
535
600
|
}
|
|
601
|
+
}
|
|
536
602
|
|
|
537
|
-
|
|
538
|
-
|
|
603
|
+
func primerHeadlessUniversalCheckoutUIDidShowPaymentMethod(for paymentMethodType: String) {
|
|
604
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onPaymentMethodShow.stringValue
|
|
539
605
|
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
}
|
|
606
|
+
DispatchQueue.main.async {
|
|
607
|
+
if self.implementedRNCallbacks?.isOnPaymentMethodShowImplemented == true {
|
|
608
|
+
self.sendEvent(
|
|
609
|
+
withName: rnCallbackName,
|
|
610
|
+
body: ["paymentMethodType": paymentMethodType])
|
|
611
|
+
}
|
|
547
612
|
}
|
|
613
|
+
}
|
|
548
614
|
}
|
|
615
|
+
// swiftlint:enable file_length
|