@primer-io/react-native 2.16.4 → 2.17.0-rc.2
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 +13 -34
- 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 +104 -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 +0 -8
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt +0 -4
- 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 +88 -0
- package/ios/Sources/DataModels/RNTNativeError.swift +22 -0
- package/ios/Sources/DataModels/RNTPrimerPaymentMethodAsset.swift +65 -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 +80 -0
- package/ios/{RNTPrimer.swift → Sources/RNTPrimer.swift} +20 -34
- 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 +22 -32
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/PrimerInput.js.map +1 -1
- package/lib/commonjs/RNPrimer.js +2 -12
- 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 +22 -32
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/PrimerInput.js.map +1 -1
- package/lib/module/RNPrimer.js +2 -12
- 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 +3 -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 +14 -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 +2 -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 +18 -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 +30 -41
- package/src/RNPrimer.ts +2 -18
- package/src/index.tsx +43 -29
- package/src/models/PrimerAsset.ts +13 -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 +1 -28
- package/src/models/PrimerPaymentMethodManagerCategory.ts +5 -0
- package/src/models/PrimerRawData.ts +6 -10
- package/src/models/PrimerSettings.ts +29 -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,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
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Error+Extensions.swift
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 7/10/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import PrimerSDK
|
|
10
|
+
|
|
11
|
+
internal extension Error {
|
|
12
|
+
var rnError: [String: String] {
|
|
13
|
+
var json: [String: String] = [
|
|
14
|
+
"description": localizedDescription
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
if let primerValidationErr = self as? PrimerValidationError {
|
|
18
|
+
json["errorId"] = primerValidationErr.errorId
|
|
19
|
+
json["diagnosticsId"] = primerValidationErr.diagnosticsId
|
|
20
|
+
|
|
21
|
+
} else if let primerErr = self as? PrimerError {
|
|
22
|
+
json["errorId"] = primerErr.errorId
|
|
23
|
+
json["diagnosticsId"] = primerErr.diagnosticsId
|
|
24
|
+
|
|
25
|
+
} else {
|
|
26
|
+
json["errorId"] = (self as NSError).domain
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if let inputElementType = (self as NSError).userInfo["inputElementType"] as? String {
|
|
30
|
+
json["inputElementType"] = inputElementType
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if let recoverySuggestion = (self as NSError).localizedRecoverySuggestion {
|
|
34
|
+
json["recoverySuggestion"] = recoverySuggestion
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return json
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//
|
|
2
|
+
// UIColor+Extensions.swift
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 6/10/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import UIKit
|
|
9
|
+
|
|
10
|
+
extension UIColor {
|
|
11
|
+
|
|
12
|
+
func toHex(alpha: Bool = false) -> String? {
|
|
13
|
+
guard let components = cgColor.components, components.count >= 3 else {
|
|
14
|
+
return nil
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let r = Float(components[0])
|
|
18
|
+
let g = Float(components[1])
|
|
19
|
+
let b = Float(components[2])
|
|
20
|
+
var a = Float(1.0)
|
|
21
|
+
|
|
22
|
+
if components.count >= 4 {
|
|
23
|
+
a = Float(components[3])
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if alpha {
|
|
27
|
+
return String(format: "%02lX%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255), lroundf(a * 255))
|
|
28
|
+
} else {
|
|
29
|
+
return String(format: "%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255))
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//
|
|
2
|
+
// UIImage+Extensions.swift
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 6/10/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import UIKit
|
|
9
|
+
|
|
10
|
+
extension UIImage {
|
|
11
|
+
|
|
12
|
+
func store(withName name: String) throws -> URL {
|
|
13
|
+
guard let imageURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("\(name).png") else {
|
|
14
|
+
let err = RNTNativeError(
|
|
15
|
+
errorId: "native-ios",
|
|
16
|
+
errorDescription: "Failed to create URL for asset",
|
|
17
|
+
recoverySuggestion: nil)
|
|
18
|
+
throw err
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
guard let pngData = self.pngData() else {
|
|
22
|
+
let err = RNTNativeError(
|
|
23
|
+
errorId: "native-ios",
|
|
24
|
+
errorDescription: "Failed to get image's PNG data",
|
|
25
|
+
recoverySuggestion: nil)
|
|
26
|
+
throw err
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
try pngData.write(to: imageURL)
|
|
30
|
+
return imageURL
|
|
31
|
+
}
|
|
32
|
+
}
|