@primer-io/react-native 2.16.7 → 2.17.0-rc.10
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/.project +2 -2
- package/android/build.gradle +2 -3
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/primerioreactnative/PrimerCardNumberEditTextManager.kt +0 -15
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +15 -2
- package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +23 -8
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +20 -120
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +61 -69
- package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +6 -2
- package/android/src/main/java/com/primerioreactnative/{huc → components}/assets/AssetsManager.kt +5 -14
- package/android/src/main/java/com/primerioreactnative/components/assets/CardNetworkImageFileProvider.kt +23 -0
- package/android/src/main/java/com/primerioreactnative/components/assets/PaymentMethodAssetFileProvider.kt +24 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/core/PrimerRNHeadlessUniversalCheckoutPaymentMethod.kt +25 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/core/PrimerRawPaymentMethodType.kt +9 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/asset/PrimerRNAsset.kt +106 -0
- package/android/src/main/java/com/primerioreactnative/{huc/datamodels/manager/raw/card/PrimerRNRawCardData.kt → components/datamodels/manager/raw/card/PrimerRNCardData.kt} +6 -8
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/cardRedirect/PrimerRNCardRedirectData.kt +19 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/phoneNumber/PrimerRNPhoneNumberData.kt +14 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/retailOutlets/PrimerRNRetailOutletData.kt +12 -0
- package/android/src/main/java/com/primerioreactnative/{huc → components}/datamodels/manager/raw/retailOutlets/RNRetailOutletsList.kt +1 -1
- package/android/src/main/java/com/primerioreactnative/components/events/PrimerHeadlessUniversalCheckoutEvent.kt +17 -0
- package/android/src/main/java/com/primerioreactnative/{huc → components}/events/PrimerHeadlessUniversalCheckoutRawDataManagerEvent.kt +1 -2
- package/android/src/main/java/com/primerioreactnative/components/manager/asset/PrimerRNHeadlessUniversalCheckoutAssetManager.kt +131 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/nativeUi/PrimerRNHeadlessUniversalCheckoutNativeUiManager.kt +87 -0
- package/android/src/main/java/com/primerioreactnative/{huc → components}/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManager.kt +72 -68
- package/android/src/main/java/com/primerioreactnative/{huc → components}/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManagerListener.kt +13 -5
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +5 -4
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerInputValidationErrorRN.kt +11 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +13 -9
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt +3 -3
- package/android/src/main/java/com/primerioreactnative/utils/PrimerHeadlessUniversalCheckoutImplementedRNCallbacks.kt +15 -15
- package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +7 -7
- package/ios/Podfile.lock +1 -1
- package/ios/ReactNative.xcodeproj/project.pbxproj +20 -20
- package/ios/Sources/DataModels/ImplementedRNCallbacks.swift +75 -0
- package/ios/{DataModels/RNTPrimerCardRedirectData.swift → Sources/DataModels/PrimerBancontactCardRedirectData+Extension.swift} +5 -8
- package/ios/{DataModels/RNTPrimerCardData.swift → Sources/DataModels/PrimerCardData+Extension.swift} +2 -5
- package/ios/Sources/DataModels/PrimerHeadlessUniversalCheckout_PaymentMethod.swift +20 -0
- package/ios/{DataModels/RNTPrimerPhoneNumberData.swift → Sources/DataModels/PrimerPhoneNumberData+Extension.swift} +0 -1
- package/ios/{DataModels/RNTPrimerRetailerData.swift → Sources/DataModels/PrimerRawRetailerData+Extension.swift} +3 -4
- package/ios/Sources/DataModels/PrimerSettings+Extensions.swift +94 -0
- package/ios/Sources/DataModels/RNTNativeError.swift +22 -0
- package/ios/Sources/DataModels/RNTPrimerPaymentMethodAsset.swift +67 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTNativeUIManager.m +19 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTNativeUIManager.swift +63 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTRawDataManager.m +23 -0
- package/ios/{Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutRawDataManager.swift → Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTRawDataManager.swift } +36 -31
- package/ios/Sources/Headless Universal Checkout/Managers/RNTAssetsManager.m +24 -0
- package/ios/Sources/Headless Universal Checkout/Managers/RNTAssetsManager.swift +107 -0
- package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +41 -0
- package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +498 -0
- package/ios/Sources/Helpers/Encodable+Extension.swift +17 -0
- package/ios/Sources/Helpers/Error+Extensions.swift +39 -0
- package/ios/Sources/Helpers/UIColor+Extensions.swift +32 -0
- package/ios/Sources/Helpers/UIImage+Extensions.swift +32 -0
- package/ios/Sources/RNTPrimer.m +86 -0
- package/ios/{RNTPrimer.swift → Sources/RNTPrimer.swift} +37 -28
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js +59 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js +35 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +1 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +151 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -0
- package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +270 -0
- package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/commonjs/{headless_checkout → HeadlessUniversalCheckout}/RNPrimerHeadlessUniversalCheckout.js +7 -81
- package/lib/commonjs/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/commonjs/HeadlessUniversalCheckout/types.js +34 -0
- package/lib/commonjs/HeadlessUniversalCheckout/types.js.map +1 -0
- package/lib/commonjs/Primer.js +24 -23
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/PrimerInput.js.map +1 -1
- package/lib/commonjs/RNPrimer.js +4 -4
- package/lib/commonjs/RNPrimer.js.map +1 -1
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -1
- package/lib/commonjs/index.js +63 -71
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/PrimerAsset.js +2 -0
- package/lib/commonjs/models/PrimerAsset.js.map +1 -0
- package/lib/commonjs/models/PrimerCheckoutAdditionalInfo.js.map +1 -1
- package/lib/commonjs/models/PrimerCheckoutData.js.map +1 -1
- package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js.map +1 -1
- package/lib/commonjs/models/PrimerClientSession.js.map +1 -1
- package/lib/commonjs/models/PrimerCountryCode.js.map +1 -1
- package/lib/commonjs/models/PrimerCurrencyCode.js.map +1 -1
- package/lib/commonjs/models/PrimerError.js +4 -4
- package/lib/commonjs/models/PrimerError.js.map +1 -1
- package/lib/commonjs/models/PrimerHandlers.js +2 -0
- package/lib/commonjs/models/PrimerHandlers.js.map +1 -0
- package/lib/commonjs/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js +2 -0
- package/lib/commonjs/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js.map +1 -0
- package/lib/commonjs/models/PrimerImplementedRNCallbacks.js +2 -0
- package/lib/commonjs/models/PrimerImplementedRNCallbacks.js.map +1 -0
- package/lib/commonjs/models/PrimerInitializationData.js.map +1 -1
- package/lib/commonjs/models/PrimerInputElementType.js +20 -0
- package/lib/commonjs/models/PrimerInputElementType.js.map +1 -0
- package/lib/commonjs/models/PrimerInterfaces.js.map +1 -1
- package/lib/commonjs/models/PrimerPaymentMethodManagerCategory.js +14 -0
- package/lib/commonjs/models/PrimerPaymentMethodManagerCategory.js.map +1 -0
- package/lib/commonjs/models/PrimerPaymentMethodTokenData.js.map +1 -1
- package/lib/commonjs/models/PrimerRawData.js.map +1 -1
- package/lib/commonjs/models/PrimerSessionIntent.js.map +1 -1
- package/lib/commonjs/models/PrimerSettings.js.map +1 -1
- package/lib/commonjs/models/PrimerTheme.js.map +1 -1
- package/lib/commonjs/models/RetailOutletsRetail.js.map +1 -1
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js +52 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js +28 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +144 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +261 -0
- package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/module/{headless_checkout → HeadlessUniversalCheckout}/RNPrimerHeadlessUniversalCheckout.js +7 -81
- package/lib/module/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/types.js +33 -0
- package/lib/module/HeadlessUniversalCheckout/types.js.map +1 -0
- package/lib/module/Primer.js +24 -23
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/PrimerInput.js.map +1 -1
- package/lib/module/RNPrimer.js +4 -4
- package/lib/module/RNPrimer.js.map +1 -1
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -1
- package/lib/module/index.js +15 -9
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/PrimerAsset.js +2 -0
- package/lib/module/models/PrimerAsset.js.map +1 -0
- package/lib/module/models/PrimerCheckoutAdditionalInfo.js.map +1 -1
- package/lib/module/models/PrimerCheckoutData.js.map +1 -1
- package/lib/module/models/PrimerCheckoutPaymentMethodData.js.map +1 -1
- package/lib/module/models/PrimerClientSession.js.map +1 -1
- package/lib/module/models/PrimerCountryCode.js.map +1 -1
- package/lib/module/models/PrimerCurrencyCode.js.map +1 -1
- package/lib/module/models/PrimerError.js +4 -4
- package/lib/module/models/PrimerError.js.map +1 -1
- package/lib/module/models/PrimerHandlers.js +2 -0
- package/lib/module/models/PrimerHandlers.js.map +1 -0
- package/lib/module/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js +2 -0
- package/lib/module/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js.map +1 -0
- package/lib/module/models/PrimerImplementedRNCallbacks.js +2 -0
- package/lib/module/models/PrimerImplementedRNCallbacks.js.map +1 -0
- package/lib/module/models/PrimerInitializationData.js.map +1 -1
- package/lib/module/models/PrimerInputElementType.js +13 -0
- package/lib/module/models/PrimerInputElementType.js.map +1 -0
- package/lib/module/models/PrimerInterfaces.js.map +1 -1
- package/lib/module/models/PrimerPaymentMethodManagerCategory.js +7 -0
- package/lib/module/models/PrimerPaymentMethodManagerCategory.js.map +1 -0
- package/lib/module/models/PrimerPaymentMethodTokenData.js.map +1 -1
- package/lib/module/models/PrimerRawData.js.map +1 -1
- package/lib/module/models/PrimerSessionIntent.js.map +1 -1
- package/lib/module/models/PrimerSettings.js.map +1 -1
- package/lib/module/models/PrimerTheme.js.map +1 -1
- package/lib/module/models/RetailOutletsRetail.js.map +1 -1
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts +9 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.d.ts +8 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.d.ts.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts +29 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts.map +1 -0
- package/lib/typescript/{headless_checkout → HeadlessUniversalCheckout}/PrimerHeadlessUniversalCheckout.d.ts +4 -5
- package/lib/typescript/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.d.ts.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.d.ts +18 -0
- package/lib/typescript/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.d.ts.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/types.d.ts +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/types.d.ts.map +1 -0
- package/lib/typescript/Primer.d.ts +1 -0
- package/lib/typescript/Primer.d.ts.map +1 -0
- package/lib/typescript/PrimerInput.d.ts +5 -4
- package/lib/typescript/PrimerInput.d.ts.map +1 -0
- package/lib/typescript/RNPrimer.d.ts +4 -4
- package/lib/typescript/RNPrimer.d.ts.map +1 -0
- package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts +1 -0
- package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +18 -9
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/models/PrimerAsset.d.ts +15 -0
- package/lib/typescript/models/PrimerAsset.d.ts.map +1 -0
- package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts +7 -6
- package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts.map +1 -0
- package/lib/typescript/models/PrimerCheckoutData.d.ts +3 -2
- package/lib/typescript/models/PrimerCheckoutData.d.ts.map +1 -0
- package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts +2 -1
- package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts.map +1 -0
- package/lib/typescript/models/PrimerClientSession.d.ts +6 -5
- package/lib/typescript/models/PrimerClientSession.d.ts.map +1 -0
- package/lib/typescript/models/PrimerCountryCode.d.ts +2 -1
- package/lib/typescript/models/PrimerCountryCode.d.ts.map +1 -0
- package/lib/typescript/models/PrimerCurrencyCode.d.ts +2 -1
- package/lib/typescript/models/PrimerCurrencyCode.d.ts.map +1 -0
- package/lib/typescript/models/PrimerError.d.ts +3 -1
- package/lib/typescript/models/PrimerError.d.ts.map +1 -0
- package/lib/typescript/models/PrimerHandlers.d.ts +22 -0
- package/lib/typescript/models/PrimerHandlers.d.ts.map +1 -0
- package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts +6 -0
- package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts.map +1 -0
- package/lib/typescript/models/PrimerImplementedRNCallbacks.d.ts +17 -0
- package/lib/typescript/models/PrimerImplementedRNCallbacks.d.ts.map +1 -0
- package/lib/typescript/models/PrimerInitializationData.d.ts +3 -2
- package/lib/typescript/models/PrimerInitializationData.d.ts.map +1 -0
- package/lib/typescript/models/PrimerInputElementType.d.ts +12 -0
- package/lib/typescript/models/PrimerInputElementType.d.ts.map +1 -0
- package/lib/typescript/models/PrimerInterfaces.d.ts +3 -20
- package/lib/typescript/models/PrimerInterfaces.d.ts.map +1 -0
- package/lib/typescript/models/PrimerPaymentMethodManagerCategory.d.ts +6 -0
- package/lib/typescript/models/PrimerPaymentMethodManagerCategory.d.ts.map +1 -0
- package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts +2 -1
- package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts.map +1 -0
- package/lib/typescript/models/PrimerRawData.d.ts +7 -10
- package/lib/typescript/models/PrimerRawData.d.ts.map +1 -0
- package/lib/typescript/models/PrimerSessionIntent.d.ts +1 -0
- package/lib/typescript/models/PrimerSessionIntent.d.ts.map +1 -0
- package/lib/typescript/models/PrimerSettings.d.ts +28 -6
- package/lib/typescript/models/PrimerSettings.d.ts.map +1 -0
- package/lib/typescript/models/PrimerTheme.d.ts +3 -2
- package/lib/typescript/models/PrimerTheme.d.ts.map +1 -0
- package/lib/typescript/models/RetailOutletsRetail.d.ts +2 -1
- package/lib/typescript/models/RetailOutletsRetail.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +1 -0
- package/lib/typescript/utils/index.d.ts.map +1 -0
- package/package.json +8 -7
- package/primer-io-react-native.podspec +1 -2
- package/src/HeadlessUniversalCheckout/Managers/AssetsManager.ts +56 -0
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.ts +31 -0
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.ts +166 -0
- package/src/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.ts +333 -0
- package/src/{headless_checkout → HeadlessUniversalCheckout}/RNPrimerHeadlessUniversalCheckout.ts +37 -128
- package/src/HeadlessUniversalCheckout/types.ts +32 -0
- package/src/Primer.ts +32 -31
- package/src/RNPrimer.ts +4 -9
- package/src/index.tsx +43 -29
- package/src/models/PrimerAsset.ts +14 -0
- package/src/models/PrimerError.ts +3 -1
- package/src/models/PrimerHandlers.ts +25 -0
- package/src/models/PrimerHeadlessUniversalCheckoutPaymentMethod.ts +5 -0
- package/src/models/PrimerImplementedRNCallbacks.ts +20 -0
- package/src/models/PrimerInputElementType.ts +11 -0
- package/src/models/PrimerInterfaces.ts +2 -28
- package/src/models/PrimerPaymentMethodManagerCategory.ts +5 -0
- package/src/models/PrimerRawData.ts +6 -10
- package/src/models/PrimerSettings.ts +42 -16
- package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/cardRedirect/PrimerRNPRawCardRedirectData.kt +0 -20
- package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/phoneNumber/PrimerRNRawPhoneNumberData.kt +0 -14
- package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/retailOutlets/PrimerRNRawRetailOutletData.kt +0 -12
- package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +0 -15
- package/ios/DataModels/ImplementedRNCallbacks.swift +0 -62
- package/ios/DataModels/PrimerErrorRN.swift +0 -35
- package/ios/DataModels/PrimerSettingsRN.swift +0 -84
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +0 -62
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +0 -501
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.m +0 -14
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +0 -117
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutRawDataManager.m +0 -23
- package/ios/RNTPrimer.m +0 -59
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -288
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js +0 -91
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
- package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js +0 -91
- package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
- package/lib/commonjs/headless_checkout/types.js +0 -6
- package/lib/commonjs/headless_checkout/types.js.map +0 -1
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -279
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js +0 -83
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
- package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js +0 -84
- package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
- package/lib/module/headless_checkout/types.js +0 -2
- package/lib/module/headless_checkout/types.js.map +0 -1
- package/lib/typescript/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.d.ts +0 -18
- package/lib/typescript/headless_checkout/RNPrimerHeadlessUniversalCheckout.d.ts +0 -22
- package/lib/typescript/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.d.ts +0 -14
- package/lib/typescript/headless_checkout/types.d.ts +0 -22
- package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +0 -358
- package/src/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.ts +0 -109
- package/src/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.ts +0 -104
- package/src/headless_checkout/types.ts +0 -32
- /package/ios/{DataModels → Sources/DataModels}/PrimerThemeRN.swift +0 -0
- /package/ios/{Headless Universal Checkout → Sources/Headless Universal Checkout/Managers/Payment Method Managers}/RNTPrimerCardNumberInputElementManager.m +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RNTAssetsManager.swift
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 6/10/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import PrimerSDK
|
|
10
|
+
|
|
11
|
+
@objc(RNTPrimerHeadlessUniversalCheckoutAssetsManager)
|
|
12
|
+
class RNTPrimerHeadlessUniversalCheckoutAssetsManager: RCTEventEmitter {
|
|
13
|
+
|
|
14
|
+
override func supportedEvents() -> [String]! {
|
|
15
|
+
return []
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
override class func requiresMainQueueSetup() -> Bool {
|
|
19
|
+
return true
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@objc
|
|
23
|
+
func getCardNetworkImage(
|
|
24
|
+
_ cardNetworkStr: String,
|
|
25
|
+
resolver: RCTPromiseResolveBlock,
|
|
26
|
+
rejecter: RCTPromiseRejectBlock
|
|
27
|
+
) {
|
|
28
|
+
do {
|
|
29
|
+
|
|
30
|
+
guard let cardNetwork = CardNetwork(rawValue: cardNetworkStr) else {
|
|
31
|
+
let err = RNTNativeError(
|
|
32
|
+
errorId: "native-ios",
|
|
33
|
+
errorDescription: "Failed to find asset of \(cardNetworkStr).",
|
|
34
|
+
recoverySuggestion: nil)
|
|
35
|
+
throw err
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
guard let cardNetworkImage = try PrimerSDK.PrimerHeadlessUniversalCheckout.AssetsManager.getCardNetworkImage(for: cardNetwork) else {
|
|
39
|
+
let err = RNTNativeError(
|
|
40
|
+
errorId: "native-ios",
|
|
41
|
+
errorDescription: "Failed to find asset of \(cardNetworkStr).",
|
|
42
|
+
recoverySuggestion: nil)
|
|
43
|
+
throw err
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
let localUrl = try cardNetworkImage.store(withName: cardNetwork.rawValue)
|
|
47
|
+
resolver(["cardNetworkImageURL": localUrl.absoluteString])
|
|
48
|
+
|
|
49
|
+
} catch {
|
|
50
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@objc
|
|
55
|
+
func getPaymentMethodAsset(
|
|
56
|
+
_ paymentMethodType: String,
|
|
57
|
+
resolver: RCTPromiseResolveBlock,
|
|
58
|
+
rejecter: RCTPromiseRejectBlock
|
|
59
|
+
) {
|
|
60
|
+
do {
|
|
61
|
+
guard let paymentMethodAsset = try PrimerSDK.PrimerHeadlessUniversalCheckout.AssetsManager.getPaymentMethodAsset(for: paymentMethodType) else {
|
|
62
|
+
let err = RNTNativeError(
|
|
63
|
+
errorId: "native-ios",
|
|
64
|
+
errorDescription: "Failed to find asset of \(paymentMethodType) for this session",
|
|
65
|
+
recoverySuggestion: nil)
|
|
66
|
+
throw err
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if let rntPaymentMethodAsset = try? RNTPrimerPaymentMethodAsset(primerPaymentMethodAsset: paymentMethodAsset).toJsonObject() {
|
|
70
|
+
resolver(["paymentMethodAsset": rntPaymentMethodAsset])
|
|
71
|
+
} else {
|
|
72
|
+
let err = RNTNativeError(
|
|
73
|
+
errorId: "native-ios",
|
|
74
|
+
errorDescription: "Failed to create the RNTPrimerPaymentMethodAsset",
|
|
75
|
+
recoverySuggestion: nil)
|
|
76
|
+
throw err
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
} catch {
|
|
80
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@objc
|
|
85
|
+
func getPaymentMethodAssets(
|
|
86
|
+
_ resolver: RCTPromiseResolveBlock,
|
|
87
|
+
rejecter: RCTPromiseRejectBlock
|
|
88
|
+
) {
|
|
89
|
+
do {
|
|
90
|
+
let paymentMethodAssets = try PrimerSDK.PrimerHeadlessUniversalCheckout.AssetsManager.getPaymentMethodAssets()
|
|
91
|
+
|
|
92
|
+
let rntPaymentMethodAssets = paymentMethodAssets.compactMap({ try? RNTPrimerPaymentMethodAsset(primerPaymentMethodAsset: $0).toJsonObject() })
|
|
93
|
+
guard !rntPaymentMethodAssets.isEmpty else {
|
|
94
|
+
let err = RNTNativeError(
|
|
95
|
+
errorId: "native-ios",
|
|
96
|
+
errorDescription: "Failed to find assets for this session",
|
|
97
|
+
recoverySuggestion: nil)
|
|
98
|
+
throw err
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
resolver(["paymentMethodAssets": rntPaymentMethodAssets])
|
|
102
|
+
|
|
103
|
+
} catch {
|
|
104
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RNTPrimerHeadlessUniversalCheckout.m
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 8/3/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import <React/RCTBridgeModule.h>
|
|
9
|
+
#import <React/RCTEventEmitter.h>
|
|
10
|
+
|
|
11
|
+
@interface RCT_EXTERN_MODULE(PrimerHeadlessUniversalCheckout, RCTEventEmitter)
|
|
12
|
+
|
|
13
|
+
RCT_EXTERN_METHOD(startWithClientToken:(NSString *)clientToken
|
|
14
|
+
settingsStr:(NSString *)settingsStr
|
|
15
|
+
resolver:(RCTPromiseResolveBlock)resolver
|
|
16
|
+
rejecter: (RCTPromiseRejectBlock)rejecter)
|
|
17
|
+
|
|
18
|
+
RCT_EXTERN_METHOD(cleanUp:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
19
|
+
|
|
20
|
+
// MARK: - DECISION HANDLERS
|
|
21
|
+
|
|
22
|
+
// MARK: Tokenization & Resume Handlers
|
|
23
|
+
|
|
24
|
+
RCT_EXTERN_METHOD(handleTokenizationNewClientToken:(NSString *)newClientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
25
|
+
|
|
26
|
+
RCT_EXTERN_METHOD(handleResumeWithNewClientToken:(NSString *)newClientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
27
|
+
|
|
28
|
+
RCT_EXTERN_METHOD(handleCompleteFlow:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
29
|
+
|
|
30
|
+
// MARK: Payment Creation Handlers
|
|
31
|
+
|
|
32
|
+
RCT_EXTERN_METHOD(handlePaymentCreationAbort:(NSString *)errorMessage resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
33
|
+
|
|
34
|
+
RCT_EXTERN_METHOD(handlePaymentCreationContinue:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
35
|
+
|
|
36
|
+
// MARK: - HELPERS
|
|
37
|
+
|
|
38
|
+
RCT_EXTERN_METHOD(setImplementedRNCallbacks:(NSString *)implementedRNCallbacksStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@end
|
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RNTPrimerHeadlessUniversalCheckout.swift
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 8/3/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import PrimerSDK
|
|
10
|
+
|
|
11
|
+
@objc
|
|
12
|
+
enum PrimerHeadlessUniversalCheckoutEvents: Int, CaseIterable {
|
|
13
|
+
|
|
14
|
+
// Delegate
|
|
15
|
+
case onAvailablePaymentMethodsLoad = 0
|
|
16
|
+
case onTokenizationStart
|
|
17
|
+
case onTokenizationSuccess
|
|
18
|
+
case onCheckoutResume
|
|
19
|
+
case onCheckoutPending
|
|
20
|
+
case onCheckoutAdditionalInfo
|
|
21
|
+
case onError
|
|
22
|
+
case onCheckoutComplete
|
|
23
|
+
case onBeforeClientSessionUpdate
|
|
24
|
+
case onClientSessionUpdate
|
|
25
|
+
case onBeforePaymentCreate
|
|
26
|
+
|
|
27
|
+
// UI Delegate
|
|
28
|
+
case onPreparationStart
|
|
29
|
+
case onPaymentMethodShow
|
|
30
|
+
|
|
31
|
+
var stringValue: String {
|
|
32
|
+
switch self {
|
|
33
|
+
case .onAvailablePaymentMethodsLoad:
|
|
34
|
+
return "onAvailablePaymentMethodsLoad"
|
|
35
|
+
case .onTokenizationStart:
|
|
36
|
+
return "onTokenizationStart"
|
|
37
|
+
case .onTokenizationSuccess:
|
|
38
|
+
return "onTokenizationSuccess"
|
|
39
|
+
case .onCheckoutResume:
|
|
40
|
+
return "onCheckoutResume"
|
|
41
|
+
case .onCheckoutPending:
|
|
42
|
+
return "onCheckoutPending"
|
|
43
|
+
case .onCheckoutAdditionalInfo:
|
|
44
|
+
return "onCheckoutAdditionalInfo"
|
|
45
|
+
case .onError:
|
|
46
|
+
return "onError"
|
|
47
|
+
case .onBeforeClientSessionUpdate:
|
|
48
|
+
return "onBeforeClientSessionUpdate"
|
|
49
|
+
case .onCheckoutComplete:
|
|
50
|
+
return "onCheckoutComplete"
|
|
51
|
+
case .onBeforePaymentCreate:
|
|
52
|
+
return "onBeforePaymentCreate"
|
|
53
|
+
case .onClientSessionUpdate:
|
|
54
|
+
return "onClientSessionUpdate"
|
|
55
|
+
case .onPreparationStart:
|
|
56
|
+
return "onPreparationStart"
|
|
57
|
+
case .onPaymentMethodShow:
|
|
58
|
+
return "onPaymentMethodShow"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@objc(PrimerHeadlessUniversalCheckout)
|
|
64
|
+
class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
|
|
65
|
+
|
|
66
|
+
private var settings: PrimerSettings?
|
|
67
|
+
private var primerWillCreatePaymentWithDataDecisionHandler: ((_ errorMessage: String?) -> Void)?
|
|
68
|
+
private var primerDidTokenizePaymentMethodDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
|
|
69
|
+
private var primerDidResumeWithDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
|
|
70
|
+
private var implementedRNCallbacks: ImplementedRNCallbacks?
|
|
71
|
+
|
|
72
|
+
override class func requiresMainQueueSetup() -> Bool {
|
|
73
|
+
return true
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
override init() {
|
|
77
|
+
super.init()
|
|
78
|
+
PrimerHeadlessUniversalCheckout.current.delegate = self
|
|
79
|
+
PrimerHeadlessUniversalCheckout.current.uiDelegate = self
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
override func supportedEvents() -> [String]! {
|
|
83
|
+
return PrimerHeadlessUniversalCheckoutEvents.allCases.compactMap({ $0.stringValue })
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// MARK: - API
|
|
87
|
+
|
|
88
|
+
@objc
|
|
89
|
+
public func startWithClientToken(_ clientToken: String,
|
|
90
|
+
settingsStr: String?,
|
|
91
|
+
resolver: @escaping RCTPromiseResolveBlock,
|
|
92
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
93
|
+
{
|
|
94
|
+
do {
|
|
95
|
+
var tmpSettings: PrimerSettings?
|
|
96
|
+
if let settingsStr = settingsStr {
|
|
97
|
+
tmpSettings = try PrimerSettings(settingsStr: settingsStr)
|
|
98
|
+
self.settings = tmpSettings
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
PrimerHeadlessUniversalCheckout.current.start(
|
|
102
|
+
withClientToken: clientToken,
|
|
103
|
+
settings: settings,
|
|
104
|
+
delegate: self,
|
|
105
|
+
uiDelegate: self) { paymentMethods, err in
|
|
106
|
+
if let err = err {
|
|
107
|
+
rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
|
|
108
|
+
} else if let paymentMethods = paymentMethods {
|
|
109
|
+
let paymentMethodObjects = paymentMethods.compactMap({ $0.toJsonObject() })
|
|
110
|
+
resolver(["availablePaymentMethods": paymentMethodObjects])
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
} catch {
|
|
115
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@objc
|
|
120
|
+
public func cleanUp(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
121
|
+
DispatchQueue.main.async {
|
|
122
|
+
PrimerHeadlessUniversalCheckout.current.cleanUp()
|
|
123
|
+
resolver(nil)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// MARK: - DECISION HANDLERS
|
|
128
|
+
|
|
129
|
+
// MARK: Tokenization & Resume Handlers
|
|
130
|
+
|
|
131
|
+
@objc
|
|
132
|
+
public func handleTokenizationNewClientToken(_ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
133
|
+
DispatchQueue.main.async {
|
|
134
|
+
self.primerDidTokenizePaymentMethodDecisionHandler?(newClientToken, nil)
|
|
135
|
+
self.primerDidTokenizePaymentMethodDecisionHandler = nil
|
|
136
|
+
resolver(nil)
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@objc
|
|
141
|
+
public func handleResumeWithNewClientToken(_ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
142
|
+
DispatchQueue.main.async {
|
|
143
|
+
self.primerDidResumeWithDecisionHandler?(newClientToken, nil)
|
|
144
|
+
self.primerDidResumeWithDecisionHandler = nil
|
|
145
|
+
resolver(nil)
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
@objc
|
|
150
|
+
public func handleCompleteFlow(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
151
|
+
DispatchQueue.main.async {
|
|
152
|
+
self.primerDidResumeWithDecisionHandler?(nil, nil)
|
|
153
|
+
self.primerDidResumeWithDecisionHandler = nil
|
|
154
|
+
resolver(nil)
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// MARK: Payment Creation
|
|
159
|
+
|
|
160
|
+
@objc
|
|
161
|
+
public func handlePaymentCreationAbort(_ errorMessage: String?, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
162
|
+
DispatchQueue.main.async {
|
|
163
|
+
self.primerWillCreatePaymentWithDataDecisionHandler?(errorMessage ?? "")
|
|
164
|
+
self.primerWillCreatePaymentWithDataDecisionHandler = nil
|
|
165
|
+
resolver(nil)
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@objc
|
|
170
|
+
public func handlePaymentCreationContinue(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
171
|
+
DispatchQueue.main.async {
|
|
172
|
+
self.primerWillCreatePaymentWithDataDecisionHandler?(nil)
|
|
173
|
+
self.primerWillCreatePaymentWithDataDecisionHandler = nil
|
|
174
|
+
resolver(nil)
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// MARK: Helpers
|
|
179
|
+
|
|
180
|
+
private func detectImplemetedCallbacks() {
|
|
181
|
+
sendEvent(withName: PrimerEvents.detectImplementedRNCallbacks.stringValue, body: nil)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
@objc
|
|
185
|
+
public func setImplementedRNCallbacks(_ implementedRNCallbacksStr: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
186
|
+
DispatchQueue.main.async {
|
|
187
|
+
do {
|
|
188
|
+
guard let implementedRNCallbacksData = implementedRNCallbacksStr.data(using: .utf8) else {
|
|
189
|
+
let err = RNTNativeError(
|
|
190
|
+
errorId: "native-ios",
|
|
191
|
+
errorDescription: "Failed to convert string to data",
|
|
192
|
+
recoverySuggestion: nil)
|
|
193
|
+
throw err
|
|
194
|
+
}
|
|
195
|
+
self.implementedRNCallbacks = try JSONDecoder().decode(ImplementedRNCallbacks.self, from: implementedRNCallbacksData)
|
|
196
|
+
resolver(nil)
|
|
197
|
+
} catch {
|
|
198
|
+
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: false)
|
|
199
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
private func handleRNBridgeError(_ error: Error, checkoutData: PrimerCheckoutData?, stopOnDebug: Bool) {
|
|
205
|
+
DispatchQueue.main.async {
|
|
206
|
+
if stopOnDebug {
|
|
207
|
+
assertionFailure(error.localizedDescription)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
var body: [String: Any] = ["error": error.rnError]
|
|
211
|
+
if let checkoutData = checkoutData,
|
|
212
|
+
let data = try? JSONEncoder().encode(checkoutData),
|
|
213
|
+
let json = try? JSONSerialization.jsonObject(with: data){
|
|
214
|
+
body["checkoutData"] = json
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onError.stringValue, body: body)
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// MARK: - EVENTS
|
|
223
|
+
|
|
224
|
+
extension RNTPrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutDelegate {
|
|
225
|
+
|
|
226
|
+
// case onAvailablePaymentMethodsLoad = 0
|
|
227
|
+
func primerHeadlessUniversalCheckoutDidLoadAvailablePaymentMethods(_ paymentMethods: [PrimerHeadlessUniversalCheckout.PaymentMethod]) {
|
|
228
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onAvailablePaymentMethodsLoad.stringValue
|
|
229
|
+
|
|
230
|
+
DispatchQueue.main.async {
|
|
231
|
+
self.sendEvent(
|
|
232
|
+
withName: rnCallbackName,
|
|
233
|
+
body: ["availablePaymentMethods": paymentMethods.compactMap({ $0.toJsonObject() })])
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// case onTokenizationStart
|
|
238
|
+
func primerHeadlessUniversalCheckoutDidStartTokenization(for paymentMethodType: String) {
|
|
239
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onTokenizationStart.stringValue
|
|
240
|
+
|
|
241
|
+
DispatchQueue.main.async {
|
|
242
|
+
self.sendEvent(
|
|
243
|
+
withName: rnCallbackName,
|
|
244
|
+
body: ["paymentMethodType": paymentMethodType])
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// case onTokenizationSuccess
|
|
249
|
+
func primerHeadlessUniversalCheckoutDidTokenizePaymentMethod(_ paymentMethodTokenData: PrimerPaymentMethodTokenData, decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void) {
|
|
250
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onTokenizationSuccess.stringValue
|
|
251
|
+
|
|
252
|
+
DispatchQueue.main.async {
|
|
253
|
+
if self.implementedRNCallbacks?.isOnTokenizationSuccessImplemented == true {
|
|
254
|
+
self.primerDidTokenizePaymentMethodDecisionHandler = { (newClientToken, errorMessage) in
|
|
255
|
+
DispatchQueue.main.async {
|
|
256
|
+
if let newClientToken = newClientToken {
|
|
257
|
+
decisionHandler(.continueWithNewClientToken(newClientToken))
|
|
258
|
+
} else {
|
|
259
|
+
decisionHandler(.complete())
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
do {
|
|
265
|
+
let paymentMethodTokenJson = try paymentMethodTokenData.toJsonObject()
|
|
266
|
+
self.sendEvent(
|
|
267
|
+
withName: rnCallbackName,
|
|
268
|
+
body: ["paymentMethodTokenData": paymentMethodTokenJson])
|
|
269
|
+
|
|
270
|
+
} catch {
|
|
271
|
+
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
|
|
272
|
+
}
|
|
273
|
+
} else {
|
|
274
|
+
if self.settings?.paymentHandling == .manual {
|
|
275
|
+
let err = RNTNativeError(
|
|
276
|
+
errorId: "native-ios",
|
|
277
|
+
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
278
|
+
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
279
|
+
self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// case onCheckoutResume
|
|
286
|
+
func primerHeadlessUniversalCheckoutDidResumeWith(_ resumeToken: String, decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void) {
|
|
287
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutResume.stringValue
|
|
288
|
+
|
|
289
|
+
DispatchQueue.main.async {
|
|
290
|
+
if self.implementedRNCallbacks?.isOnCheckoutResumeImplemented == true {
|
|
291
|
+
self.primerDidResumeWithDecisionHandler = { (resumeToken, errorMessage) in
|
|
292
|
+
DispatchQueue.main.async {
|
|
293
|
+
if let resumeToken = resumeToken {
|
|
294
|
+
decisionHandler(.continueWithNewClientToken(resumeToken))
|
|
295
|
+
} else {
|
|
296
|
+
decisionHandler(.complete())
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
self.sendEvent(
|
|
302
|
+
withName: rnCallbackName,
|
|
303
|
+
body: ["resumeToken": resumeToken])
|
|
304
|
+
|
|
305
|
+
} else {
|
|
306
|
+
if self.settings?.paymentHandling == .manual {
|
|
307
|
+
let err = RNTNativeError(
|
|
308
|
+
errorId: "native-ios",
|
|
309
|
+
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
310
|
+
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
311
|
+
self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// case onCheckoutPending
|
|
318
|
+
func primerHeadlessUniversalCheckoutDidEnterResumePendingWithPaymentAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?) {
|
|
319
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutPending.stringValue
|
|
320
|
+
|
|
321
|
+
DispatchQueue.main.async {
|
|
322
|
+
if self.implementedRNCallbacks?.isOnCheckoutPendingImplemented == true {
|
|
323
|
+
do {
|
|
324
|
+
let checkoutAdditionalInfoJson = try additionalInfo?.toJsonObject()
|
|
325
|
+
self.sendEvent(withName: rnCallbackName, body: checkoutAdditionalInfoJson)
|
|
326
|
+
} catch {
|
|
327
|
+
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
328
|
+
self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
|
|
329
|
+
}
|
|
330
|
+
} else {
|
|
331
|
+
let err = RNTNativeError(
|
|
332
|
+
errorId: "native-ios",
|
|
333
|
+
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
334
|
+
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
335
|
+
|
|
336
|
+
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
337
|
+
self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// case onCheckoutAdditionalInfo
|
|
343
|
+
func primerHeadlessUniversalCheckoutDidReceiveAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?) {
|
|
344
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutAdditionalInfo.stringValue
|
|
345
|
+
|
|
346
|
+
DispatchQueue.main.async {
|
|
347
|
+
if self.implementedRNCallbacks?.isOnCheckoutAdditionalInfoImplemented == true {
|
|
348
|
+
do {
|
|
349
|
+
let checkoutAdditionalInfoJson = try additionalInfo?.toJsonObject()
|
|
350
|
+
self.sendEvent(
|
|
351
|
+
withName: rnCallbackName,
|
|
352
|
+
body: checkoutAdditionalInfoJson)
|
|
353
|
+
|
|
354
|
+
} catch {
|
|
355
|
+
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
356
|
+
self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
|
|
357
|
+
}
|
|
358
|
+
} else {
|
|
359
|
+
let err = RNTNativeError(
|
|
360
|
+
errorId: "native-bridge",
|
|
361
|
+
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
362
|
+
recoverySuggestion: "Callback [\(rnCallbackName)] should be implemented.")
|
|
363
|
+
|
|
364
|
+
let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
|
|
365
|
+
self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// case onError
|
|
371
|
+
func primerHeadlessUniversalCheckoutDidFail(withError err: Error, checkoutData: PrimerCheckoutData?) {
|
|
372
|
+
if self.implementedRNCallbacks?.isOnErrorImplemented == true {
|
|
373
|
+
// Send the error message to the RN bridge.
|
|
374
|
+
self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
|
|
375
|
+
|
|
376
|
+
} else {
|
|
377
|
+
// RN dev hasn't opted in on listening SDK errors.
|
|
378
|
+
// Ignore!
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// case onCheckoutComplete
|
|
383
|
+
func primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData(_ data: PrimerCheckoutData) {
|
|
384
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutComplete.stringValue
|
|
385
|
+
|
|
386
|
+
DispatchQueue.main.async {
|
|
387
|
+
if self.implementedRNCallbacks?.isOnCheckoutCompleteImplemented == true {
|
|
388
|
+
do {
|
|
389
|
+
let checkoutJson = try data.toJsonObject()
|
|
390
|
+
self.sendEvent(withName: rnCallbackName, body: checkoutJson)
|
|
391
|
+
} catch {
|
|
392
|
+
self.handleRNBridgeError(error, checkoutData: data, stopOnDebug: true)
|
|
393
|
+
}
|
|
394
|
+
} else {
|
|
395
|
+
let err = RNTNativeError(
|
|
396
|
+
errorId: "native-ios",
|
|
397
|
+
errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
|
|
398
|
+
recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
|
|
399
|
+
self.handleRNBridgeError(err, checkoutData: data, stopOnDebug: false)
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// case onBeforeClientSessionUpdate
|
|
405
|
+
func primerHeadlessUniversalCheckoutWillUpdateClientSession() {
|
|
406
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onBeforeClientSessionUpdate.stringValue
|
|
407
|
+
|
|
408
|
+
DispatchQueue.main.async {
|
|
409
|
+
if self.implementedRNCallbacks?.isOnBeforeClientSessionUpdateImplemented == true {
|
|
410
|
+
self.sendEvent(
|
|
411
|
+
withName: rnCallbackName,
|
|
412
|
+
body: nil)
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// case onClientSessionUpdate
|
|
418
|
+
func primerHeadlessUniversalCheckoutDidUpdateClientSession(_ clientSession: PrimerClientSession) {
|
|
419
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onClientSessionUpdate.stringValue
|
|
420
|
+
|
|
421
|
+
DispatchQueue.main.async {
|
|
422
|
+
if self.implementedRNCallbacks?.isOnClientSessionUpdateImplemented == true {
|
|
423
|
+
do {
|
|
424
|
+
let json = try clientSession.toJsonObject()
|
|
425
|
+
self.sendEvent(
|
|
426
|
+
withName: rnCallbackName,
|
|
427
|
+
body: ["clientSession": json])
|
|
428
|
+
|
|
429
|
+
} catch {
|
|
430
|
+
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// case onBeforePaymentCreate
|
|
437
|
+
func primerHeadlessUniversalCheckoutWillCreatePaymentWithData(_ data: PrimerCheckoutPaymentMethodData, decisionHandler: @escaping (PrimerPaymentCreationDecision) -> Void) {
|
|
438
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onBeforePaymentCreate.stringValue
|
|
439
|
+
|
|
440
|
+
DispatchQueue.main.async {
|
|
441
|
+
if self.implementedRNCallbacks?.isOnBeforePaymentCreateImplemented == true {
|
|
442
|
+
self.primerWillCreatePaymentWithDataDecisionHandler = { errorMessage in
|
|
443
|
+
DispatchQueue.main.async {
|
|
444
|
+
if let errorMessage = errorMessage {
|
|
445
|
+
decisionHandler(.abortPaymentCreation(withErrorMessage: errorMessage.isEmpty ? nil : errorMessage))
|
|
446
|
+
} else {
|
|
447
|
+
decisionHandler(.continuePaymentCreation())
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
do {
|
|
453
|
+
let checkoutPaymentmethodJson = try data.toJsonObject()
|
|
454
|
+
self.sendEvent(
|
|
455
|
+
withName: rnCallbackName,
|
|
456
|
+
body: checkoutPaymentmethodJson)
|
|
457
|
+
|
|
458
|
+
} catch {
|
|
459
|
+
self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
} else {
|
|
463
|
+
// 'primerHeadlessUniversalCheckoutWillCreatePaymentWithData' hasn't
|
|
464
|
+
// been implemented on the RN side, continue the payment flow.
|
|
465
|
+
decisionHandler(.continuePaymentCreation())
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
extension RNTPrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutUIDelegate {
|
|
473
|
+
|
|
474
|
+
// onPreparationStart
|
|
475
|
+
func primerHeadlessUniversalCheckoutUIDidStartPreparation(for paymentMethodType: String) {
|
|
476
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onPreparationStart.stringValue
|
|
477
|
+
|
|
478
|
+
DispatchQueue.main.async {
|
|
479
|
+
if self.implementedRNCallbacks?.isOnPreparationStartImplemented == true {
|
|
480
|
+
self.sendEvent(
|
|
481
|
+
withName: rnCallbackName,
|
|
482
|
+
body: ["paymentMethodType": paymentMethodType])
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
func primerHeadlessUniversalCheckoutUIDidShowPaymentMethod(for paymentMethodType: String) {
|
|
488
|
+
let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onPaymentMethodShow.stringValue
|
|
489
|
+
|
|
490
|
+
DispatchQueue.main.async {
|
|
491
|
+
if self.implementedRNCallbacks?.isOnPaymentMethodShowImplemented == true {
|
|
492
|
+
self.sendEvent(
|
|
493
|
+
withName: rnCallbackName,
|
|
494
|
+
body: ["paymentMethodType": paymentMethodType])
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Encodable+Extension.swift
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 7/10/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
extension Encodable {
|
|
11
|
+
|
|
12
|
+
func toJsonObject() throws -> Any {
|
|
13
|
+
let data = try JSONEncoder().encode(self)
|
|
14
|
+
let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
|
|
15
|
+
return json
|
|
16
|
+
}
|
|
17
|
+
}
|