@primer-io/react-native 2.17.3 → 2.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +3 -1
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/vault/PrimerRNValidationError.kt +23 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/vault/PrimerRNVaultedPaymentMethod.kt +34 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/vault/PrimerRNVaultedPaymentMethodAdditionalData.kt +12 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/vault/PrimerRNHeadlessUniversalCheckoutVaultManager.kt +165 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +3 -1
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt +0 -3
- package/android/src/main/java/com/primerioreactnative/extensions/ThreeDsAuthenticationData.kt +13 -0
- package/ios/Podfile.lock +1 -1
- package/ios/ReactNative.xcodeproj/project.pbxproj +18 -18
- package/ios/Sources/DataModels/PrimerSettings+Extensions.swift +5 -1
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNPrimerHeadlessUniversalCheckoutVaultManager.m +25 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNPrimerHeadlessUniversalCheckoutVaultManager.swift +85 -0
- package/ios/Sources/Helpers/Encodable+Extension.swift +14 -1
- package/package.json +5 -9
- package/primer-io-react-native.podspec +1 -1
- package/src/HeadlessUniversalCheckout/Managers/AssetsManager.ts +1 -1
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.ts +21 -21
- package/src/HeadlessUniversalCheckout/Managers/VaultManager.ts +90 -0
- package/src/index.tsx +17 -0
- package/src/models/PrimerSettings.ts +2 -0
- package/src/models/PrimerValidationError.ts +7 -0
- package/src/models/PrimerValidationErrorResult.ts +7 -0
- package/src/models/PrimerVaultedPaymentMethod.ts +12 -0
- package/src/models/PrimerVaultedPaymentMethodAdditionalData.ts +5 -0
- package/src/models/PrimerVaultedPaymentMethodResult.ts +7 -0
- package/LICENSE +0 -21
- package/README.md +0 -149
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js +0 -59
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +0 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js +0 -35
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +0 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +0 -151
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +0 -1
- package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +0 -270
- package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/commonjs/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js +0 -121
- package/lib/commonjs/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/commonjs/HeadlessUniversalCheckout/types.js +0 -34
- package/lib/commonjs/HeadlessUniversalCheckout/types.js.map +0 -1
- package/lib/commonjs/Primer.js +0 -269
- package/lib/commonjs/Primer.js.map +0 -1
- package/lib/commonjs/PrimerInput.js +0 -70
- package/lib/commonjs/PrimerInput.js.map +0 -1
- package/lib/commonjs/RNPrimer.js +0 -220
- package/lib/commonjs/RNPrimer.js.map +0 -1
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +0 -12
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +0 -1
- package/lib/commonjs/index.js +0 -204
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/models/PrimerAsset.js +0 -2
- package/lib/commonjs/models/PrimerAsset.js.map +0 -1
- package/lib/commonjs/models/PrimerCheckoutAdditionalInfo.js +0 -2
- package/lib/commonjs/models/PrimerCheckoutAdditionalInfo.js.map +0 -1
- package/lib/commonjs/models/PrimerCheckoutData.js +0 -11
- package/lib/commonjs/models/PrimerCheckoutData.js.map +0 -1
- package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js +0 -2
- package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js.map +0 -1
- package/lib/commonjs/models/PrimerClientSession.js +0 -2
- package/lib/commonjs/models/PrimerClientSession.js.map +0 -1
- package/lib/commonjs/models/PrimerCountryCode.js +0 -4
- package/lib/commonjs/models/PrimerCountryCode.js.map +0 -1
- package/lib/commonjs/models/PrimerCurrencyCode.js +0 -4
- package/lib/commonjs/models/PrimerCurrencyCode.js.map +0 -1
- package/lib/commonjs/models/PrimerError.js +0 -22
- package/lib/commonjs/models/PrimerError.js.map +0 -1
- package/lib/commonjs/models/PrimerHandlers.js +0 -2
- package/lib/commonjs/models/PrimerHandlers.js.map +0 -1
- package/lib/commonjs/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js +0 -2
- package/lib/commonjs/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js.map +0 -1
- package/lib/commonjs/models/PrimerImplementedRNCallbacks.js +0 -2
- package/lib/commonjs/models/PrimerImplementedRNCallbacks.js.map +0 -1
- package/lib/commonjs/models/PrimerInitializationData.js +0 -6
- package/lib/commonjs/models/PrimerInitializationData.js.map +0 -1
- package/lib/commonjs/models/PrimerInputElementType.js +0 -20
- package/lib/commonjs/models/PrimerInputElementType.js.map +0 -1
- package/lib/commonjs/models/PrimerInterfaces.js +0 -6
- package/lib/commonjs/models/PrimerInterfaces.js.map +0 -1
- package/lib/commonjs/models/PrimerPaymentMethodManagerCategory.js +0 -14
- package/lib/commonjs/models/PrimerPaymentMethodManagerCategory.js.map +0 -1
- package/lib/commonjs/models/PrimerPaymentMethodTokenData.js +0 -13
- package/lib/commonjs/models/PrimerPaymentMethodTokenData.js.map +0 -1
- package/lib/commonjs/models/PrimerRawData.js +0 -2
- package/lib/commonjs/models/PrimerRawData.js.map +0 -1
- package/lib/commonjs/models/PrimerSessionIntent.js +0 -13
- package/lib/commonjs/models/PrimerSessionIntent.js.map +0 -1
- package/lib/commonjs/models/PrimerSettings.js +0 -6
- package/lib/commonjs/models/PrimerSettings.js.map +0 -1
- package/lib/commonjs/models/PrimerTheme.js +0 -2
- package/lib/commonjs/models/PrimerTheme.js.map +0 -1
- package/lib/commonjs/models/RetailOutletsRetail.js +0 -2
- package/lib/commonjs/models/RetailOutletsRetail.js.map +0 -1
- package/lib/commonjs/utils/index.js +0 -39
- package/lib/commonjs/utils/index.js.map +0 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js +0 -52
- package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +0 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js +0 -28
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +0 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +0 -144
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +0 -1
- package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +0 -261
- package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/module/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js +0 -114
- package/lib/module/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/module/HeadlessUniversalCheckout/types.js +0 -33
- package/lib/module/HeadlessUniversalCheckout/types.js.map +0 -1
- package/lib/module/Primer.js +0 -261
- package/lib/module/Primer.js.map +0 -1
- package/lib/module/PrimerInput.js +0 -55
- package/lib/module/PrimerInput.js.map +0 -1
- package/lib/module/RNPrimer.js +0 -213
- package/lib/module/RNPrimer.js.map +0 -1
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +0 -5
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +0 -1
- package/lib/module/index.js +0 -21
- package/lib/module/index.js.map +0 -1
- package/lib/module/models/PrimerAsset.js +0 -2
- package/lib/module/models/PrimerAsset.js.map +0 -1
- package/lib/module/models/PrimerCheckoutAdditionalInfo.js +0 -2
- package/lib/module/models/PrimerCheckoutAdditionalInfo.js.map +0 -1
- package/lib/module/models/PrimerCheckoutData.js +0 -7
- package/lib/module/models/PrimerCheckoutData.js.map +0 -1
- package/lib/module/models/PrimerCheckoutPaymentMethodData.js +0 -2
- package/lib/module/models/PrimerCheckoutPaymentMethodData.js.map +0 -1
- package/lib/module/models/PrimerClientSession.js +0 -2
- package/lib/module/models/PrimerClientSession.js.map +0 -1
- package/lib/module/models/PrimerCountryCode.js +0 -2
- package/lib/module/models/PrimerCountryCode.js.map +0 -1
- package/lib/module/models/PrimerCurrencyCode.js +0 -2
- package/lib/module/models/PrimerCurrencyCode.js.map +0 -1
- package/lib/module/models/PrimerError.js +0 -15
- package/lib/module/models/PrimerError.js.map +0 -1
- package/lib/module/models/PrimerHandlers.js +0 -2
- package/lib/module/models/PrimerHandlers.js.map +0 -1
- package/lib/module/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js +0 -2
- package/lib/module/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js.map +0 -1
- package/lib/module/models/PrimerImplementedRNCallbacks.js +0 -2
- package/lib/module/models/PrimerImplementedRNCallbacks.js.map +0 -1
- package/lib/module/models/PrimerInitializationData.js +0 -2
- package/lib/module/models/PrimerInitializationData.js.map +0 -1
- package/lib/module/models/PrimerInputElementType.js +0 -13
- package/lib/module/models/PrimerInputElementType.js.map +0 -1
- package/lib/module/models/PrimerInterfaces.js +0 -2
- package/lib/module/models/PrimerInterfaces.js.map +0 -1
- package/lib/module/models/PrimerPaymentMethodManagerCategory.js +0 -7
- package/lib/module/models/PrimerPaymentMethodManagerCategory.js.map +0 -1
- package/lib/module/models/PrimerPaymentMethodTokenData.js +0 -6
- package/lib/module/models/PrimerPaymentMethodTokenData.js.map +0 -1
- package/lib/module/models/PrimerRawData.js +0 -2
- package/lib/module/models/PrimerRawData.js.map +0 -1
- package/lib/module/models/PrimerSessionIntent.js +0 -6
- package/lib/module/models/PrimerSessionIntent.js.map +0 -1
- package/lib/module/models/PrimerSettings.js +0 -2
- package/lib/module/models/PrimerSettings.js.map +0 -1
- package/lib/module/models/PrimerTheme.js +0 -2
- package/lib/module/models/PrimerTheme.js.map +0 -1
- package/lib/module/models/RetailOutletsRetail.js +0 -2
- package/lib/module/models/RetailOutletsRetail.js.map +0 -1
- package/lib/module/utils/index.js +0 -32
- package/lib/module/utils/index.js.map +0 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts +0 -9
- package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts.map +0 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.d.ts +0 -8
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.d.ts.map +0 -1
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts +0 -29
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts.map +0 -1
- package/lib/typescript/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.d.ts +0 -11
- package/lib/typescript/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.d.ts.map +0 -1
- package/lib/typescript/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.d.ts +0 -20
- package/lib/typescript/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.d.ts.map +0 -1
- package/lib/typescript/HeadlessUniversalCheckout/types.d.ts +0 -1
- package/lib/typescript/HeadlessUniversalCheckout/types.d.ts.map +0 -1
- package/lib/typescript/Primer.d.ts +0 -3
- package/lib/typescript/Primer.d.ts.map +0 -1
- package/lib/typescript/PrimerInput.d.ts +0 -16
- package/lib/typescript/PrimerInput.d.ts.map +0 -1
- package/lib/typescript/RNPrimer.d.ts +0 -34
- package/lib/typescript/RNPrimer.d.ts.map +0 -1
- package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts +0 -2
- package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts.map +0 -1
- package/lib/typescript/index.d.ts +0 -23
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/models/PrimerAsset.d.ts +0 -15
- package/lib/typescript/models/PrimerAsset.d.ts.map +0 -1
- package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts +0 -29
- package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts.map +0 -1
- package/lib/typescript/models/PrimerCheckoutData.d.ts +0 -18
- package/lib/typescript/models/PrimerCheckoutData.d.ts.map +0 -1
- package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts +0 -6
- package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts.map +0 -1
- package/lib/typescript/models/PrimerClientSession.d.ts +0 -46
- package/lib/typescript/models/PrimerClientSession.d.ts.map +0 -1
- package/lib/typescript/models/PrimerCountryCode.d.ts +0 -4
- package/lib/typescript/models/PrimerCountryCode.d.ts.map +0 -1
- package/lib/typescript/models/PrimerCurrencyCode.d.ts +0 -4
- package/lib/typescript/models/PrimerCurrencyCode.d.ts.map +0 -1
- package/lib/typescript/models/PrimerError.d.ts +0 -13
- package/lib/typescript/models/PrimerError.d.ts.map +0 -1
- package/lib/typescript/models/PrimerHandlers.d.ts +0 -22
- package/lib/typescript/models/PrimerHandlers.d.ts.map +0 -1
- package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts +0 -6
- package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts.map +0 -1
- package/lib/typescript/models/PrimerImplementedRNCallbacks.d.ts +0 -17
- package/lib/typescript/models/PrimerImplementedRNCallbacks.d.ts.map +0 -1
- package/lib/typescript/models/PrimerInitializationData.d.ts +0 -10
- package/lib/typescript/models/PrimerInitializationData.d.ts.map +0 -1
- package/lib/typescript/models/PrimerInputElementType.d.ts +0 -12
- package/lib/typescript/models/PrimerInputElementType.d.ts.map +0 -1
- package/lib/typescript/models/PrimerInterfaces.d.ts +0 -10
- package/lib/typescript/models/PrimerInterfaces.d.ts.map +0 -1
- package/lib/typescript/models/PrimerPaymentMethodManagerCategory.d.ts +0 -6
- package/lib/typescript/models/PrimerPaymentMethodManagerCategory.d.ts.map +0 -1
- package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts +0 -117
- package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts.map +0 -1
- package/lib/typescript/models/PrimerRawData.d.ts +0 -20
- package/lib/typescript/models/PrimerRawData.d.ts.map +0 -1
- package/lib/typescript/models/PrimerSessionIntent.d.ts +0 -5
- package/lib/typescript/models/PrimerSessionIntent.d.ts.map +0 -1
- package/lib/typescript/models/PrimerSettings.d.ts +0 -106
- package/lib/typescript/models/PrimerSettings.d.ts.map +0 -1
- package/lib/typescript/models/PrimerTheme.d.ts +0 -24
- package/lib/typescript/models/PrimerTheme.d.ts.map +0 -1
- package/lib/typescript/models/RetailOutletsRetail.d.ts +0 -9
- package/lib/typescript/models/RetailOutletsRetail.d.ts.map +0 -1
- package/lib/typescript/utils/index.d.ts +0 -4
- package/lib/typescript/utils/index.d.ts.map +0 -1
package/android/build.gradle
CHANGED
|
@@ -136,5 +136,5 @@ dependencies {
|
|
|
136
136
|
api 'com.facebook.react:react-native:+'
|
|
137
137
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
138
138
|
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.3"
|
|
139
|
-
implementation 'io.primer:android:2.
|
|
139
|
+
implementation 'io.primer:android:2.21.0'
|
|
140
140
|
}
|
|
@@ -7,6 +7,7 @@ import com.facebook.react.uimanager.ViewManager
|
|
|
7
7
|
import com.primerioreactnative.components.manager.asset.PrimerRNHeadlessUniversalCheckoutAssetManager
|
|
8
8
|
import com.primerioreactnative.components.manager.nativeUi.PrimerRNHeadlessUniversalCheckoutNativeUiManager
|
|
9
9
|
import com.primerioreactnative.components.manager.raw.PrimerRNHeadlessUniversalCheckoutRawManager
|
|
10
|
+
import com.primerioreactnative.components.manager.vault.PrimerRNHeadlessUniversalCheckoutVaultManager
|
|
10
11
|
import kotlinx.serialization.json.Json
|
|
11
12
|
|
|
12
13
|
class ReactNativePackage : ReactPackage {
|
|
@@ -19,7 +20,8 @@ class ReactNativePackage : ReactPackage {
|
|
|
19
20
|
PrimerRNHeadlessUniversalCheckout(reactContext, json),
|
|
20
21
|
PrimerRNHeadlessUniversalCheckoutRawManager(reactContext, json),
|
|
21
22
|
PrimerRNHeadlessUniversalCheckoutNativeUiManager(reactContext),
|
|
22
|
-
PrimerRNHeadlessUniversalCheckoutAssetManager(reactContext)
|
|
23
|
+
PrimerRNHeadlessUniversalCheckoutAssetManager(reactContext),
|
|
24
|
+
PrimerRNHeadlessUniversalCheckoutVaultManager(reactContext, json)
|
|
23
25
|
)
|
|
24
26
|
}
|
|
25
27
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
package com.primerioreactnative.components.datamodels.manager.vault
|
|
2
|
+
|
|
3
|
+
import kotlinx.serialization.Serializable
|
|
4
|
+
import io.primer.android.components.domain.error.PrimerValidationError
|
|
5
|
+
|
|
6
|
+
@Serializable
|
|
7
|
+
data class PrimerRNValidationError(
|
|
8
|
+
val errorId: String,
|
|
9
|
+
val description: String,
|
|
10
|
+
val diagnosticsId: String
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
@Serializable
|
|
14
|
+
data class PrimerRNValidationErrors(
|
|
15
|
+
val validationErrors: List<PrimerRNValidationError>
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
internal fun PrimerValidationError.toPrimerRNValidationError() =
|
|
19
|
+
PrimerRNValidationError(
|
|
20
|
+
errorId,
|
|
21
|
+
description,
|
|
22
|
+
diagnosticsId
|
|
23
|
+
)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
package com.primerioreactnative.components.datamodels.manager.vault
|
|
2
|
+
|
|
3
|
+
import com.primerioreactnative.datamodels.PrimerPaymentInstrumentTokenRN.PaymentInstrumentData
|
|
4
|
+
import com.primerioreactnative.datamodels.PrimerPaymentInstrumentTokenRN.ThreeDSAuthenticationData
|
|
5
|
+
import com.primerioreactnative.extensions.toPaymentInstrumentDataRN
|
|
6
|
+
import com.primerioreactnative.extensions.toThreeDsAuthenticationDataRN
|
|
7
|
+
import io.primer.android.domain.tokenization.models.PrimerVaultedPaymentMethod
|
|
8
|
+
import kotlinx.serialization.Serializable
|
|
9
|
+
|
|
10
|
+
@Serializable
|
|
11
|
+
data class PrimerRNVaultedPaymentMethod(
|
|
12
|
+
val id: String,
|
|
13
|
+
val analyticsId: String,
|
|
14
|
+
val paymentInstrumentType: String,
|
|
15
|
+
val paymentMethodType: String,
|
|
16
|
+
val paymentInstrumentData: PaymentInstrumentData?,
|
|
17
|
+
val threeDSecureAuthentication: ThreeDSAuthenticationData? = null
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
@Serializable
|
|
21
|
+
data class PrimerRNVaultedPaymentMethods(
|
|
22
|
+
val paymentMethods: List<PrimerRNVaultedPaymentMethod>
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
internal fun PrimerVaultedPaymentMethod.toPrimerRNVaultedPaymentMethod() =
|
|
26
|
+
PrimerRNVaultedPaymentMethod(
|
|
27
|
+
id,
|
|
28
|
+
analyticsId,
|
|
29
|
+
paymentInstrumentType,
|
|
30
|
+
paymentMethodType,
|
|
31
|
+
paymentInstrumentData.toPaymentInstrumentDataRN(),
|
|
32
|
+
threeDSecureAuthentication?.toThreeDsAuthenticationDataRN()
|
|
33
|
+
)
|
|
34
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.primerioreactnative.components.datamodels.manager.vault
|
|
2
|
+
|
|
3
|
+
import io.primer.android.components.domain.payments.vault.model.card.PrimerVaultedCardAdditionalData
|
|
4
|
+
import kotlinx.serialization.Serializable
|
|
5
|
+
|
|
6
|
+
@Serializable
|
|
7
|
+
data class PrimerRNVaultedPaymentMethodAdditionalData(
|
|
8
|
+
val cvv: String
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
internal fun PrimerRNVaultedPaymentMethodAdditionalData.toPrimerVaultedCardAdditionalData() =
|
|
12
|
+
PrimerVaultedCardAdditionalData(cvv)
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
package com.primerioreactnative.components.manager.vault
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise
|
|
4
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
6
|
+
import com.facebook.react.bridge.ReactMethod
|
|
7
|
+
import com.primerioreactnative.components.datamodels.manager.vault.PrimerRNValidationErrors
|
|
8
|
+
import com.primerioreactnative.components.datamodels.manager.vault.PrimerRNVaultedPaymentMethodAdditionalData
|
|
9
|
+
import com.primerioreactnative.components.datamodels.manager.vault.PrimerRNVaultedPaymentMethods
|
|
10
|
+
import com.primerioreactnative.components.datamodels.manager.vault.toPrimerRNValidationError
|
|
11
|
+
import com.primerioreactnative.components.datamodels.manager.vault.toPrimerRNVaultedPaymentMethod
|
|
12
|
+
import com.primerioreactnative.components.datamodels.manager.vault.toPrimerVaultedCardAdditionalData
|
|
13
|
+
import com.primerioreactnative.datamodels.ErrorTypeRN
|
|
14
|
+
import com.primerioreactnative.utils.convertJsonToMap
|
|
15
|
+
import com.primerioreactnative.utils.errorTo
|
|
16
|
+
import io.primer.android.components.manager.vault.PrimerHeadlessUniversalCheckoutVaultManager
|
|
17
|
+
import io.primer.android.components.manager.vault.PrimerHeadlessUniversalCheckoutVaultManagerInterface
|
|
18
|
+
import kotlinx.coroutines.CoroutineScope
|
|
19
|
+
import kotlinx.coroutines.SupervisorJob
|
|
20
|
+
import kotlinx.coroutines.launch
|
|
21
|
+
import kotlinx.serialization.decodeFromString
|
|
22
|
+
import kotlinx.serialization.encodeToString
|
|
23
|
+
import kotlinx.serialization.json.Json
|
|
24
|
+
import org.json.JSONObject
|
|
25
|
+
|
|
26
|
+
class PrimerRNHeadlessUniversalCheckoutVaultManager(
|
|
27
|
+
reactContext: ReactApplicationContext,
|
|
28
|
+
private val json: Json,
|
|
29
|
+
) : ReactContextBaseJavaModule(reactContext) {
|
|
30
|
+
|
|
31
|
+
private val vaultScope = CoroutineScope(SupervisorJob())
|
|
32
|
+
private lateinit var nativeVaultManager: PrimerHeadlessUniversalCheckoutVaultManagerInterface
|
|
33
|
+
|
|
34
|
+
override fun getName() = "RNPrimerHeadlessUniversalCheckoutVaultManager"
|
|
35
|
+
|
|
36
|
+
@ReactMethod
|
|
37
|
+
fun configure(promise: Promise) {
|
|
38
|
+
try {
|
|
39
|
+
nativeVaultManager = PrimerHeadlessUniversalCheckoutVaultManager.newInstance()
|
|
40
|
+
promise.resolve(null)
|
|
41
|
+
} catch (e: Exception) {
|
|
42
|
+
val exception =
|
|
43
|
+
ErrorTypeRN.NativeBridgeFailed errorTo (e.message
|
|
44
|
+
?: "An error occurs while initialising the vault manager.")
|
|
45
|
+
promise.reject(exception.errorId, exception.description)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@ReactMethod
|
|
50
|
+
fun fetchVaultedPaymentMethods(promise: Promise) {
|
|
51
|
+
vaultScope.launch {
|
|
52
|
+
nativeVaultManager.fetchVaultedPaymentMethods().onSuccess { vaultedPaymentMethods ->
|
|
53
|
+
promise.resolve(
|
|
54
|
+
convertJsonToMap(
|
|
55
|
+
JSONObject(
|
|
56
|
+
Json.encodeToString(
|
|
57
|
+
PrimerRNVaultedPaymentMethods(vaultedPaymentMethods.map {
|
|
58
|
+
it.toPrimerRNVaultedPaymentMethod()
|
|
59
|
+
})
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
|
+
)
|
|
64
|
+
}.onFailure { throwable ->
|
|
65
|
+
val exception =
|
|
66
|
+
ErrorTypeRN.NativeBridgeFailed errorTo (throwable.message
|
|
67
|
+
?: "An error occurs while fetching vaulted payment methods.")
|
|
68
|
+
promise.reject(exception.errorId, exception.description)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@ReactMethod
|
|
74
|
+
fun deleteVaultedPaymentMethod(vaultedPaymentMethodId: String, promise: Promise) {
|
|
75
|
+
vaultScope.launch {
|
|
76
|
+
nativeVaultManager.deleteVaultedPaymentMethod(vaultedPaymentMethodId).onSuccess {
|
|
77
|
+
promise.resolve(null)
|
|
78
|
+
}.onFailure { throwable ->
|
|
79
|
+
promise.reject(
|
|
80
|
+
ErrorTypeRN.VaultManagerDeleteFailed.errorId,
|
|
81
|
+
throwable.message,
|
|
82
|
+
throwable
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@ReactMethod
|
|
89
|
+
fun validate(
|
|
90
|
+
vaultedPaymentMethodId: String,
|
|
91
|
+
additionalDataStr: String,
|
|
92
|
+
promise: Promise
|
|
93
|
+
) {
|
|
94
|
+
val additionalData: PrimerRNVaultedPaymentMethodAdditionalData =
|
|
95
|
+
json.decodeFromString(additionalDataStr)
|
|
96
|
+
|
|
97
|
+
vaultScope.launch {
|
|
98
|
+
nativeVaultManager.validate(
|
|
99
|
+
vaultedPaymentMethodId,
|
|
100
|
+
additionalData.toPrimerVaultedCardAdditionalData()
|
|
101
|
+
).onSuccess { errors ->
|
|
102
|
+
promise.resolve(
|
|
103
|
+
convertJsonToMap(
|
|
104
|
+
JSONObject(
|
|
105
|
+
Json.encodeToString(
|
|
106
|
+
PrimerRNValidationErrors(errors.map {
|
|
107
|
+
it.toPrimerRNValidationError()
|
|
108
|
+
})
|
|
109
|
+
)
|
|
110
|
+
)
|
|
111
|
+
)
|
|
112
|
+
)
|
|
113
|
+
}.onFailure { throwable ->
|
|
114
|
+
promise.reject(
|
|
115
|
+
ErrorTypeRN.InvalidVaultedPaymentMethodId.errorId,
|
|
116
|
+
throwable.message,
|
|
117
|
+
throwable
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@ReactMethod
|
|
124
|
+
fun startPaymentFlow(
|
|
125
|
+
vaultedPaymentMethodId: String,
|
|
126
|
+
promise: Promise
|
|
127
|
+
) {
|
|
128
|
+
vaultScope.launch {
|
|
129
|
+
nativeVaultManager.startPaymentFlow(vaultedPaymentMethodId).onSuccess {
|
|
130
|
+
promise.resolve(null)
|
|
131
|
+
}.onFailure { throwable ->
|
|
132
|
+
promise.reject(
|
|
133
|
+
ErrorTypeRN.InvalidVaultedPaymentMethodId.errorId,
|
|
134
|
+
throwable.message,
|
|
135
|
+
throwable
|
|
136
|
+
)
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@ReactMethod
|
|
142
|
+
fun startPaymentFlowWithAdditionalData(
|
|
143
|
+
vaultedPaymentMethodId: String,
|
|
144
|
+
additionalDataStr: String,
|
|
145
|
+
promise: Promise
|
|
146
|
+
) {
|
|
147
|
+
val additionalData: PrimerRNVaultedPaymentMethodAdditionalData =
|
|
148
|
+
json.decodeFromString(additionalDataStr)
|
|
149
|
+
|
|
150
|
+
vaultScope.launch {
|
|
151
|
+
nativeVaultManager.startPaymentFlow(
|
|
152
|
+
vaultedPaymentMethodId,
|
|
153
|
+
additionalData.toPrimerVaultedCardAdditionalData()
|
|
154
|
+
).onSuccess {
|
|
155
|
+
promise.resolve(null)
|
|
156
|
+
}.onFailure { throwable ->
|
|
157
|
+
promise.reject(
|
|
158
|
+
ErrorTypeRN.InvalidVaultedPaymentMethodId.errorId,
|
|
159
|
+
throwable.message,
|
|
160
|
+
throwable
|
|
161
|
+
)
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
@@ -15,5 +15,7 @@ enum class ErrorTypeRN(val errorId: String) {
|
|
|
15
15
|
NativeBridgeFailed("native-android"),
|
|
16
16
|
UnitializedSdkSession("uninitialized-sdk-session"),
|
|
17
17
|
UnsupportedPaymentMethod("unsupported-payment-method-type"),
|
|
18
|
-
UnsupportedPaymentIntent("unsupported-session-intent")
|
|
18
|
+
UnsupportedPaymentIntent("unsupported-session-intent"),
|
|
19
|
+
VaultManagerDeleteFailed("vaulted-manager-delete-failed"),
|
|
20
|
+
InvalidVaultedPaymentMethodId("invalid-vaulted-payment-method-id")
|
|
19
21
|
}
|
package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt
CHANGED
|
@@ -7,7 +7,6 @@ fun PrimerPaymentMethodOptionsRN.toPrimerPaymentMethodOptions() = PrimerPaymentM
|
|
|
7
7
|
androidSettingsRN.redirectScheme,
|
|
8
8
|
googlePayOptions.toPrimerGooglePayOptions(),
|
|
9
9
|
klarnaOptions.toPrimerKlarnaOptions(),
|
|
10
|
-
apayaOptions.toPrimerApayaOptions(),
|
|
11
10
|
threeDsOptions.toPrimerThreeDsOptions()
|
|
12
11
|
)
|
|
13
12
|
|
|
@@ -17,7 +16,5 @@ fun PrimerGooglePayOptionsRN.toPrimerGooglePayOptions() =
|
|
|
17
16
|
fun PrimerKlarnaOptionsRN.toPrimerKlarnaOptions() =
|
|
18
17
|
PrimerKlarnaOptions(recurringPaymentDescription, webViewTitle)
|
|
19
18
|
|
|
20
|
-
fun PrimerApayaOptionsRN.toPrimerApayaOptions() = PrimerApayaOptions(webViewTitle)
|
|
21
|
-
|
|
22
19
|
fun PrimerThreeDsOptionsRN.toPrimerThreeDsOptions() =
|
|
23
20
|
PrimerThreeDsOptions(threeDsOptionsAndroid?.threeDsAppRequestorUrl)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package com.primerioreactnative.extensions
|
|
2
|
+
|
|
3
|
+
import com.primerioreactnative.datamodels.PrimerPaymentInstrumentTokenRN
|
|
4
|
+
import io.primer.android.domain.tokenization.models.PrimerVaultedPaymentMethod.AuthenticationDetails
|
|
5
|
+
|
|
6
|
+
internal fun AuthenticationDetails.toThreeDsAuthenticationDataRN() =
|
|
7
|
+
PrimerPaymentInstrumentTokenRN.ThreeDSAuthenticationData(
|
|
8
|
+
responseCode.name,
|
|
9
|
+
reasonCode,
|
|
10
|
+
reasonText,
|
|
11
|
+
protocolVersion,
|
|
12
|
+
challengeIssued
|
|
13
|
+
)
|
package/ios/Podfile.lock
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
1DEBE0FE26C2D875004E3064 /* PrimerSettingsRN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DEBE0FD26C2D875004E3064 /* PrimerSettingsRN.swift */; };
|
|
15
15
|
1DEBE10026C2D88E004E3064 /* PrimerThemeRN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DEBE0FF26C2D88E004E3064 /* PrimerThemeRN.swift */; };
|
|
16
16
|
1DEBE10226C2D8BA004E3064 /* PaymentInstrumentTokenRN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DEBE10126C2D8BA004E3064 /* PaymentInstrumentTokenRN.swift */; };
|
|
17
|
-
|
|
17
|
+
8E3F8F3B3C2574B3E4202E53 /* libPods-ReactNative.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CD4026BA31061D2403A622C /* libPods-ReactNative.a */; };
|
|
18
18
|
F4FF95D7245B92E800C19C63 /* UniversalCheckoutRN.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4FF95D6245B92E800C19C63 /* UniversalCheckoutRN.swift */; };
|
|
19
19
|
/* End PBXBuildFile section */
|
|
20
20
|
|
|
@@ -32,15 +32,15 @@
|
|
|
32
32
|
|
|
33
33
|
/* Begin PBXFileReference section */
|
|
34
34
|
134814201AA4EA6300B7C361 /* libReactNative.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libReactNative.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
35
|
-
|
|
35
|
+
15203C8CCE9BB14783E2578D /* Pods-ReactNative.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNative.release.xcconfig"; path = "Target Support Files/Pods-ReactNative/Pods-ReactNative.release.xcconfig"; sourceTree = "<group>"; };
|
|
36
|
+
1CD4026BA31061D2403A622C /* libPods-ReactNative.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNative.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
36
37
|
1DEBE0F626C2D594004E3064 /* PrimerRN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrimerRN.swift; sourceTree = "<group>"; };
|
|
37
38
|
1DEBE0F926C2D75A004E3064 /* PrimerFlowRN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrimerFlowRN.swift; sourceTree = "<group>"; };
|
|
38
39
|
1DEBE0FB26C2D859004E3064 /* PrimerExceptionRN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrimerExceptionRN.swift; sourceTree = "<group>"; };
|
|
39
40
|
1DEBE0FD26C2D875004E3064 /* PrimerSettingsRN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrimerSettingsRN.swift; sourceTree = "<group>"; };
|
|
40
41
|
1DEBE0FF26C2D88E004E3064 /* PrimerThemeRN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrimerThemeRN.swift; sourceTree = "<group>"; };
|
|
41
42
|
1DEBE10126C2D8BA004E3064 /* PaymentInstrumentTokenRN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentInstrumentTokenRN.swift; sourceTree = "<group>"; };
|
|
42
|
-
|
|
43
|
-
AED192A9C2698C599CF21663 /* Pods-ReactNative.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNative.debug.xcconfig"; path = "Target Support Files/Pods-ReactNative/Pods-ReactNative.debug.xcconfig"; sourceTree = "<group>"; };
|
|
43
|
+
6F27A6DD8EDB5175DD0555AC /* Pods-ReactNative.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNative.debug.xcconfig"; path = "Target Support Files/Pods-ReactNative/Pods-ReactNative.debug.xcconfig"; sourceTree = "<group>"; };
|
|
44
44
|
B3E7B5891CC2AC0600A0062D /* ReactNative.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ReactNative.m; sourceTree = "<group>"; };
|
|
45
45
|
F4FF95D5245B92E700C19C63 /* ReactNative-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ReactNative-Bridging-Header.h"; sourceTree = "<group>"; };
|
|
46
46
|
F4FF95D6245B92E800C19C63 /* UniversalCheckoutRN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UniversalCheckoutRN.swift; sourceTree = "<group>"; };
|
|
@@ -51,27 +51,27 @@
|
|
|
51
51
|
isa = PBXFrameworksBuildPhase;
|
|
52
52
|
buildActionMask = 2147483647;
|
|
53
53
|
files = (
|
|
54
|
-
|
|
54
|
+
8E3F8F3B3C2574B3E4202E53 /* libPods-ReactNative.a in Frameworks */,
|
|
55
55
|
);
|
|
56
56
|
runOnlyForDeploymentPostprocessing = 0;
|
|
57
57
|
};
|
|
58
58
|
/* End PBXFrameworksBuildPhase section */
|
|
59
59
|
|
|
60
60
|
/* Begin PBXGroup section */
|
|
61
|
-
|
|
61
|
+
134814211AA4EA7D00B7C361 /* Products */ = {
|
|
62
62
|
isa = PBXGroup;
|
|
63
63
|
children = (
|
|
64
|
-
|
|
64
|
+
134814201AA4EA6300B7C361 /* libReactNative.a */,
|
|
65
65
|
);
|
|
66
|
-
name =
|
|
66
|
+
name = Products;
|
|
67
67
|
sourceTree = "<group>";
|
|
68
68
|
};
|
|
69
|
-
|
|
69
|
+
1D954B2391C2E372CF2A37CD /* Frameworks */ = {
|
|
70
70
|
isa = PBXGroup;
|
|
71
71
|
children = (
|
|
72
|
-
|
|
72
|
+
1CD4026BA31061D2403A622C /* libPods-ReactNative.a */,
|
|
73
73
|
);
|
|
74
|
-
name =
|
|
74
|
+
name = Frameworks;
|
|
75
75
|
sourceTree = "<group>";
|
|
76
76
|
};
|
|
77
77
|
1DEBE0F826C2D70C004E3064 /* DataModels */ = {
|
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
38076040A533828516C55677 /* Pods */ = {
|
|
90
90
|
isa = PBXGroup;
|
|
91
91
|
children = (
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
6F27A6DD8EDB5175DD0555AC /* Pods-ReactNative.debug.xcconfig */,
|
|
93
|
+
15203C8CCE9BB14783E2578D /* Pods-ReactNative.release.xcconfig */,
|
|
94
94
|
);
|
|
95
95
|
path = Pods;
|
|
96
96
|
sourceTree = "<group>";
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
F4FF95D5245B92E700C19C63 /* ReactNative-Bridging-Header.h */,
|
|
106
106
|
134814211AA4EA7D00B7C361 /* Products */,
|
|
107
107
|
38076040A533828516C55677 /* Pods */,
|
|
108
|
-
|
|
108
|
+
1D954B2391C2E372CF2A37CD /* Frameworks */,
|
|
109
109
|
);
|
|
110
110
|
sourceTree = "<group>";
|
|
111
111
|
};
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
isa = PBXNativeTarget;
|
|
117
117
|
buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "ReactNative" */;
|
|
118
118
|
buildPhases = (
|
|
119
|
-
|
|
119
|
+
D526704F4A182B8F02826462 /* [CP] Check Pods Manifest.lock */,
|
|
120
120
|
58B511D71A9E6C8500147676 /* Sources */,
|
|
121
121
|
58B511D81A9E6C8500147676 /* Frameworks */,
|
|
122
122
|
58B511D91A9E6C8500147676 /* CopyFiles */,
|
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
/* End PBXProject section */
|
|
164
164
|
|
|
165
165
|
/* Begin PBXShellScriptBuildPhase section */
|
|
166
|
-
|
|
166
|
+
D526704F4A182B8F02826462 /* [CP] Check Pods Manifest.lock */ = {
|
|
167
167
|
isa = PBXShellScriptBuildPhase;
|
|
168
168
|
buildActionMask = 2147483647;
|
|
169
169
|
files = (
|
|
@@ -310,7 +310,7 @@
|
|
|
310
310
|
};
|
|
311
311
|
58B511F01A9E6C8500147676 /* Debug */ = {
|
|
312
312
|
isa = XCBuildConfiguration;
|
|
313
|
-
baseConfigurationReference =
|
|
313
|
+
baseConfigurationReference = 6F27A6DD8EDB5175DD0555AC /* Pods-ReactNative.debug.xcconfig */;
|
|
314
314
|
buildSettings = {
|
|
315
315
|
HEADER_SEARCH_PATHS = (
|
|
316
316
|
"$(inherited)",
|
|
@@ -330,7 +330,7 @@
|
|
|
330
330
|
};
|
|
331
331
|
58B511F11A9E6C8500147676 /* Release */ = {
|
|
332
332
|
isa = XCBuildConfiguration;
|
|
333
|
-
baseConfigurationReference =
|
|
333
|
+
baseConfigurationReference = 15203C8CCE9BB14783E2578D /* Pods-ReactNative.release.xcconfig */;
|
|
334
334
|
buildSettings = {
|
|
335
335
|
HEADER_SEARCH_PATHS = (
|
|
336
336
|
"$(inherited)",
|
|
@@ -38,11 +38,15 @@ extension PrimerSettings {
|
|
|
38
38
|
let rnApplePayMerchantName = rnApplePayOptions["merchantName"] as? String
|
|
39
39
|
{
|
|
40
40
|
let rnApplePayIsCaptureBillingAddressEnabled = (rnApplePayOptions["isCaptureBillingAddressEnabled"] as? Bool) ?? false
|
|
41
|
+
let rnApplePayShowApplePayForUnsupportedDevice = (rnApplePayOptions["showApplePayForUnsupportedDevice"] as? Bool) ?? true
|
|
42
|
+
let rnApplePayCheckProvidedNetworks = (rnApplePayOptions["checkProvidedNetworks"] as? Bool) ?? true
|
|
41
43
|
|
|
42
44
|
applePayOptions = PrimerApplePayOptions(
|
|
43
45
|
merchantIdentifier: rnApplePayMerchantIdentifier,
|
|
44
46
|
merchantName: rnApplePayMerchantName,
|
|
45
|
-
isCaptureBillingAddressEnabled: rnApplePayIsCaptureBillingAddressEnabled
|
|
47
|
+
isCaptureBillingAddressEnabled: rnApplePayIsCaptureBillingAddressEnabled,
|
|
48
|
+
showApplePayForUnsupportedDevice: rnApplePayShowApplePayForUnsupportedDevice,
|
|
49
|
+
checkProvidedNetworks: rnApplePayCheckProvidedNetworks)
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
var klarnaOptions: PrimerKlarnaOptions?
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//
|
|
2
|
+
// VaultManager.m
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
|
|
6
|
+
#import <React/RCTBridgeModule.h>
|
|
7
|
+
#import <React/RCTEventEmitter.h>
|
|
8
|
+
|
|
9
|
+
@interface RCT_EXTERN_MODULE(RNPrimerHeadlessUniversalCheckoutVaultManager, RCTEventEmitter)
|
|
10
|
+
|
|
11
|
+
// MARK: - API
|
|
12
|
+
|
|
13
|
+
RCT_EXTERN_METHOD(configure: (RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
14
|
+
|
|
15
|
+
RCT_EXTERN_METHOD(fetchVaultedPaymentMethods:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
16
|
+
|
|
17
|
+
RCT_EXTERN_METHOD(deleteVaultedPaymentMethod:(NSString *)vaultedPaymentMethodId resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
18
|
+
|
|
19
|
+
RCT_EXTERN_METHOD(validate:(NSString *)vaultedPaymentMethodId additionalDataStr:(NSString *)additionalDataStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
20
|
+
|
|
21
|
+
RCT_EXTERN_METHOD(startPaymentFlow:(NSString *)vaultedPaymentMethodId resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
22
|
+
|
|
23
|
+
RCT_EXTERN_METHOD(startPaymentFlowWithAdditionalData:(NSString *)vaultedPaymentMethodId additionalDataStr:(NSString *)additionalDataStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
24
|
+
|
|
25
|
+
@end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import PrimerSDK
|
|
2
|
+
|
|
3
|
+
@objc(RNPrimerHeadlessUniversalCheckoutVaultManager)
|
|
4
|
+
class RNPrimerHeadlessUniversalCheckoutVaultManager: RCTEventEmitter {
|
|
5
|
+
|
|
6
|
+
private var vaultedManager: PrimerHeadlessUniversalCheckout.VaultManager!
|
|
7
|
+
|
|
8
|
+
override func supportedEvents() -> [String]! {
|
|
9
|
+
return []
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
override class func requiresMainQueueSetup() -> Bool {
|
|
13
|
+
return true
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@objc
|
|
17
|
+
func configure(_ resolver : @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
18
|
+
do {
|
|
19
|
+
self.vaultedManager = PrimerSDK.PrimerHeadlessUniversalCheckout.VaultManager()
|
|
20
|
+
try self.vaultedManager.configure()
|
|
21
|
+
resolver(nil)
|
|
22
|
+
} catch {
|
|
23
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@objc
|
|
28
|
+
func fetchVaultedPaymentMethods(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
29
|
+
self.vaultedManager.fetchVaultedPaymentMethods { vaultedPaymentMethods, err in
|
|
30
|
+
if let err = err {
|
|
31
|
+
rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
|
|
32
|
+
} else if let paymentMethods = vaultedPaymentMethods {
|
|
33
|
+
do {
|
|
34
|
+
let paymentMethodObjects = try paymentMethods.compactMap({ try $0.toJsonObject() })
|
|
35
|
+
resolver(["paymentMethods": paymentMethodObjects])
|
|
36
|
+
} catch {
|
|
37
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@objc
|
|
44
|
+
func deleteVaultedPaymentMethod(_ vaultedPaymentMethodId: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
45
|
+
self.vaultedManager.deleteVaultedPaymentMethod(id: vaultedPaymentMethodId) { err in
|
|
46
|
+
if let err = err {
|
|
47
|
+
rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
|
|
48
|
+
} else {
|
|
49
|
+
resolver([])
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@objc
|
|
55
|
+
func validate(_ vaultedPaymentMethodId: String, additionalDataStr: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
56
|
+
do {
|
|
57
|
+
let additionalData = try PrimerVaultedCardAdditionalData.from(jsonString: additionalDataStr)
|
|
58
|
+
self.vaultedManager.validate(vaultedPaymentMethodId: vaultedPaymentMethodId, vaultedPaymentMethodAdditionalData: additionalData) { err in
|
|
59
|
+
if let err = err, err.count > 0 {
|
|
60
|
+
rejecter(err.first!.rnError["errorId"]!, err.first!.rnError["description"], err.first!)
|
|
61
|
+
} else {
|
|
62
|
+
resolver(["validationErrors": []])
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
} catch {
|
|
66
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@objc
|
|
71
|
+
func startPaymentFlow(_ vaultedPaymentMethodId: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
72
|
+
self.vaultedManager.startPaymentFlow(vaultedPaymentMethodId: vaultedPaymentMethodId)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@objc
|
|
76
|
+
func startPaymentFlowWithAdditionalData(_ vaultedPaymentMethodId: String, additionalDataStr: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
77
|
+
do {
|
|
78
|
+
let additionalData = try PrimerVaultedCardAdditionalData.from(jsonString: additionalDataStr)
|
|
79
|
+
self.vaultedManager.startPaymentFlow(vaultedPaymentMethodId: vaultedPaymentMethodId,
|
|
80
|
+
vaultedPaymentMethodAdditionalData: additionalData)
|
|
81
|
+
} catch {
|
|
82
|
+
rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -8,10 +8,23 @@
|
|
|
8
8
|
import Foundation
|
|
9
9
|
|
|
10
10
|
extension Encodable {
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
func toJsonObject() throws -> Any {
|
|
13
13
|
let data = try JSONEncoder().encode(self)
|
|
14
14
|
let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
|
|
15
15
|
return json
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
|
|
19
|
+
extension Decodable {
|
|
20
|
+
/// Initialize an object from a JSON string.
|
|
21
|
+
/// - Parameter jsonString: A string representation of the JSON.
|
|
22
|
+
/// - Throws: An error if the decoding fails.
|
|
23
|
+
/// - Returns: An initialized object conforming to the Decodable protocol.
|
|
24
|
+
static func from(jsonString: String) throws -> Self {
|
|
25
|
+
guard let data = jsonString.data(using: .utf8) else {
|
|
26
|
+
throw NSError(domain: "String could not be converted to UTF-8 data.", code: 0, userInfo: [NSLocalizedDescriptionKey: "String could not be converted to UTF-8 data."])
|
|
27
|
+
}
|
|
28
|
+
return try JSONDecoder().decode(Self.self, from: data)
|
|
29
|
+
}
|
|
30
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@primer-io/react-native",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.19.0",
|
|
4
4
|
"description": "Primer SDK for RN",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -9,10 +9,8 @@
|
|
|
9
9
|
"source": "src/index",
|
|
10
10
|
"files": [
|
|
11
11
|
"src",
|
|
12
|
-
"lib",
|
|
13
12
|
"android",
|
|
14
13
|
"ios",
|
|
15
|
-
"cpp",
|
|
16
14
|
"primer-io-react-native.podspec",
|
|
17
15
|
"!android/build",
|
|
18
16
|
"!ios/build",
|
|
@@ -24,10 +22,10 @@
|
|
|
24
22
|
"test": "jest",
|
|
25
23
|
"typescript": "tsc --noEmit",
|
|
26
24
|
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
25
|
+
"build": "bob build",
|
|
27
26
|
"prepare": "bob build",
|
|
28
27
|
"release": "release-it",
|
|
29
28
|
"example": "yarn --cwd example",
|
|
30
|
-
"pods": "cd example && pod-install --quiet",
|
|
31
29
|
"bootstrap": "yarn example && yarn && yarn pods"
|
|
32
30
|
},
|
|
33
31
|
"keywords": [
|
|
@@ -52,18 +50,16 @@
|
|
|
52
50
|
"@release-it/conventional-changelog": "^5.1.1",
|
|
53
51
|
"@tsconfig/react-native": "^3.0.0",
|
|
54
52
|
"@types/jest": "^26.0.0",
|
|
55
|
-
"@types/react": "^18.0.
|
|
56
|
-
"@types/react-native": "0.
|
|
53
|
+
"@types/react": "^18.0.26",
|
|
54
|
+
"@types/react-native": "0.72.2",
|
|
57
55
|
"commitlint": "^11.0.0",
|
|
58
|
-
"eslint": "^
|
|
56
|
+
"eslint": "^7.0.0",
|
|
59
57
|
"eslint-config-prettier": "^7.0.0",
|
|
60
58
|
"eslint-plugin-prettier": "^3.1.3",
|
|
61
59
|
"husky": "^4.2.5",
|
|
62
60
|
"jest": "^26.0.1",
|
|
63
61
|
"pod-install": "^0.1.0",
|
|
64
62
|
"prettier": "^2.4.1",
|
|
65
|
-
"react": "18.2.0",
|
|
66
|
-
"react-native": "0.72.3",
|
|
67
63
|
"react-native-builder-bob": "^0.20.1",
|
|
68
64
|
"release-it": "^15.5.0",
|
|
69
65
|
"typescript": "4.8.4"
|