@primer-io/react-native 2.18.0 → 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/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/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 -108
- 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
|
@@ -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"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { NativeEventEmitter, NativeModules, EmitterSubscription } from 'react-native';
|
|
1
|
+
import { type PrimerRawData as RawData } from '../../../models/PrimerRawData';
|
|
2
|
+
import { NativeEventEmitter, NativeModules, EmitterSubscription, EventSubscription } from 'react-native';
|
|
3
3
|
import type { PrimerInitializationData } from 'src/models/PrimerInitializationData';
|
|
4
4
|
import { PrimerError } from '../../../models/PrimerError';
|
|
5
5
|
import type { PrimerInputElementType } from '../../../models/PrimerInputElementType';
|
|
@@ -26,6 +26,8 @@ class PrimerHeadlessUniversalCheckoutRawDataManager {
|
|
|
26
26
|
|
|
27
27
|
options?: RawDataManagerProps
|
|
28
28
|
|
|
29
|
+
subscriptions: EventSubscription[] = []
|
|
30
|
+
|
|
29
31
|
///////////////////////////////////////////
|
|
30
32
|
// Init
|
|
31
33
|
///////////////////////////////////////////
|
|
@@ -54,25 +56,23 @@ class PrimerHeadlessUniversalCheckoutRawDataManager {
|
|
|
54
56
|
|
|
55
57
|
async configureListeners(): Promise<void> {
|
|
56
58
|
//@ts-ignore
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
this.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
resolve();
|
|
75
|
-
});
|
|
59
|
+
if (this.options?.onMetadataChange) {
|
|
60
|
+
const sub = await this.addListener("onMetadataChange", (data) => {
|
|
61
|
+
if (this.options?.onMetadataChange) {
|
|
62
|
+
this.options.onMetadataChange(data);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
this.subscriptions.push(sub);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (this.options?.onValidation) {
|
|
69
|
+
const sub = await this.addListener("onValidation", (data) => {
|
|
70
|
+
if (this.options?.onValidation) {
|
|
71
|
+
this.options.onValidation(data.isValid, data.errors);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
this.subscriptions.push(sub);
|
|
75
|
+
}
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
async getRequiredInputElementTypes(): Promise<PrimerInputElementType[]> {
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { NativeModules } from 'react-native';
|
|
2
|
+
import { PrimerValidationError as ValidationError } from 'src/models/PrimerValidationError';
|
|
3
|
+
import { PrimerVaultedPaymentMethod as VaultedPaymentMethod } from 'src/models/PrimerVaultedPaymentMethod';
|
|
4
|
+
import { PrimerVaultedPaymentMethodAdditionalData as VaultedPaymentMethodAdditionalData } from 'src/models/PrimerVaultedPaymentMethodAdditionalData';
|
|
5
|
+
import { PrimerVaultedPaymentMethodResult } from 'src/models/PrimerVaultedPaymentMethodResult';
|
|
6
|
+
import { PrimerValidationErrorResult } from 'src/models/PrimerValidationErrorResult';
|
|
7
|
+
|
|
8
|
+
const { RNPrimerHeadlessUniversalCheckoutVaultManager } = NativeModules;
|
|
9
|
+
|
|
10
|
+
class PrimerHeadlessUniversalCheckoutVaultManager {
|
|
11
|
+
|
|
12
|
+
///////////////////////////////////////////
|
|
13
|
+
// Init
|
|
14
|
+
///////////////////////////////////////////
|
|
15
|
+
constructor() { }
|
|
16
|
+
|
|
17
|
+
///////////////////////////////////////////
|
|
18
|
+
// Native API
|
|
19
|
+
///////////////////////////////////////////
|
|
20
|
+
|
|
21
|
+
async configure(): Promise<void> {
|
|
22
|
+
return new Promise(async (resolve, reject) => {
|
|
23
|
+
try {
|
|
24
|
+
await RNPrimerHeadlessUniversalCheckoutVaultManager.configure();
|
|
25
|
+
resolve();
|
|
26
|
+
} catch (err) {
|
|
27
|
+
console.error(err);
|
|
28
|
+
reject(err);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async fetchVaultedPaymentMethods(): Promise<VaultedPaymentMethod[]> {
|
|
34
|
+
return new Promise(async (resolve, reject) => {
|
|
35
|
+
try {
|
|
36
|
+
const data: PrimerVaultedPaymentMethodResult =
|
|
37
|
+
await RNPrimerHeadlessUniversalCheckoutVaultManager.fetchVaultedPaymentMethods();
|
|
38
|
+
const paymentMethods: VaultedPaymentMethod[] = data.paymentMethods;
|
|
39
|
+
resolve(paymentMethods);
|
|
40
|
+
} catch (err) {
|
|
41
|
+
console.error(err);
|
|
42
|
+
reject(err);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async deleteVaultedPaymentMethod(vaultedPaymentMethodId: string): Promise<void> {
|
|
48
|
+
return new Promise(async (resolve, reject) => {
|
|
49
|
+
try {
|
|
50
|
+
await RNPrimerHeadlessUniversalCheckoutVaultManager.deleteVaultedPaymentMethod(vaultedPaymentMethodId);
|
|
51
|
+
resolve();
|
|
52
|
+
} catch (err) {
|
|
53
|
+
console.error(err);
|
|
54
|
+
reject(err);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async validate(vaultedPaymentMethodId: string, additionalData: VaultedPaymentMethodAdditionalData): Promise<ValidationError[]> {
|
|
60
|
+
return new Promise(async (resolve, reject) => {
|
|
61
|
+
try {
|
|
62
|
+
const data: PrimerValidationErrorResult =
|
|
63
|
+
await RNPrimerHeadlessUniversalCheckoutVaultManager.validate(vaultedPaymentMethodId, JSON.stringify(additionalData));
|
|
64
|
+
const errors: ValidationError[] = data.validationErrors;
|
|
65
|
+
resolve(errors);
|
|
66
|
+
} catch (err) {
|
|
67
|
+
console.error(err);
|
|
68
|
+
reject(err);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async startPaymentFlow(vaultedPaymentMethodId: string, additionalData?: VaultedPaymentMethodAdditionalData): Promise<void> {
|
|
74
|
+
return new Promise(async (resolve, reject) => {
|
|
75
|
+
try {
|
|
76
|
+
if(additionalData) {
|
|
77
|
+
await RNPrimerHeadlessUniversalCheckoutVaultManager.startPaymentFlowWithAdditionalData(vaultedPaymentMethodId, JSON.stringify(additionalData));
|
|
78
|
+
} else {
|
|
79
|
+
await RNPrimerHeadlessUniversalCheckoutVaultManager.startPaymentFlow(vaultedPaymentMethodId);
|
|
80
|
+
}
|
|
81
|
+
resolve();
|
|
82
|
+
} catch (err) {
|
|
83
|
+
console.error(err);
|
|
84
|
+
reject(err);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export default PrimerHeadlessUniversalCheckoutVaultManager;
|