@primer-io/react-native 0.15.8 → 2.0.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/README.md +114 -24
- package/android/build.gradle +7 -2
- package/android/gradle.properties +3 -3
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +118 -148
- package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +212 -127
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutDataRN.kt +12 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +54 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +3 -7
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEvents.kt +13 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt +4 -4
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentMethodDataRN.kt +8 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +43 -125
- package/android/src/main/java/com/primerioreactnative/extensions/Payment.kt +6 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerAddress.kt +15 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutData.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerClientSession.kt +15 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerCustomer.kt +13 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerLineItem.kt +8 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerOrder.kt +6 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodData.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +1 -3
- package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +45 -0
- package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +16 -6
- package/ios/DataModels/ImplementedRNCallbacks.swift +31 -0
- package/ios/DataModels/PrimerErrorRN.swift +0 -17
- package/ios/DataModels/PrimerSettingsRN.swift +70 -147
- package/ios/DataModels/PrimerThemeRN.swift +1 -10
- package/ios/{Pods/Manifest.lock → Podfile.lock} +1 -1
- package/ios/RNTPrimer.m +26 -12
- package/ios/RNTPrimer.swift +295 -249
- package/ios/ReactNative.xcodeproj/project.pbxproj +14 -14
- package/lib/commonjs/Primer.js +201 -150
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/RNPrimer.js +102 -41
- package/lib/commonjs/RNPrimer.js.map +1 -1
- package/lib/commonjs/index.js +117 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/Primer.js +6 -0
- package/lib/commonjs/models/{action-request.js.map → Primer.js.map} +0 -0
- package/lib/commonjs/models/PrimerCheckoutData.js +9 -0
- package/lib/commonjs/models/PrimerCheckoutData.js.map +1 -0
- package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js +2 -0
- package/lib/commonjs/models/{client-session-actions-request.js.map → PrimerCheckoutPaymentMethodData.js.map} +0 -0
- package/lib/commonjs/models/PrimerClientSession.js +2 -0
- package/lib/commonjs/models/{primer-callbacks.js.map → PrimerClientSession.js.map} +0 -0
- package/lib/commonjs/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
- package/lib/commonjs/models/PrimerCountryCode.js.map +1 -0
- package/lib/commonjs/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
- package/lib/commonjs/models/PrimerCurrencyCode.js.map +1 -0
- package/lib/commonjs/models/PrimerError.js +28 -0
- package/lib/commonjs/models/PrimerError.js.map +1 -0
- package/lib/commonjs/models/PrimerPaymentMethodTokenData.js +14 -0
- package/lib/commonjs/models/PrimerPaymentMethodTokenData.js.map +1 -0
- package/lib/commonjs/models/PrimerSessionIntent.js +14 -0
- package/lib/commonjs/models/PrimerSessionIntent.js.map +1 -0
- package/lib/commonjs/models/PrimerSettings.js +6 -0
- package/lib/commonjs/models/{primer-config.js.map → PrimerSettings.js.map} +0 -0
- package/lib/commonjs/models/PrimerTheme.js +2 -0
- package/lib/commonjs/models/{primer-request.js.map → PrimerTheme.js.map} +0 -0
- package/lib/commonjs/utils/index.js +1 -1
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/module/Primer.js +201 -137
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/RNPrimer.js +102 -41
- package/lib/module/RNPrimer.js.map +1 -1
- package/lib/module/index.js +9 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/Primer.js +2 -0
- package/lib/{commonjs/models/primer-settings.js.map → module/models/Primer.js.map} +0 -0
- package/lib/module/models/PrimerCheckoutData.js +7 -0
- package/lib/module/models/PrimerCheckoutData.js.map +1 -0
- package/lib/module/models/PrimerCheckoutPaymentMethodData.js +2 -0
- package/lib/{commonjs/models/primer-theme.js.map → module/models/PrimerCheckoutPaymentMethodData.js.map} +0 -0
- package/lib/module/models/PrimerClientSession.js +2 -0
- package/lib/{commonjs/models/primer.js.map → module/models/PrimerClientSession.js.map} +0 -0
- package/lib/module/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
- package/lib/module/models/PrimerCountryCode.js.map +1 -0
- package/lib/module/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
- package/lib/module/models/PrimerCurrencyCode.js.map +1 -0
- package/lib/module/models/PrimerError.js +19 -0
- package/lib/module/models/PrimerError.js.map +1 -0
- package/lib/module/models/PrimerPaymentMethodTokenData.js +7 -0
- package/lib/module/models/PrimerPaymentMethodTokenData.js.map +1 -0
- package/lib/module/models/PrimerSessionIntent.js +7 -0
- package/lib/module/models/PrimerSessionIntent.js.map +1 -0
- package/lib/module/models/PrimerSettings.js +2 -0
- package/lib/module/models/{action-request.js.map → PrimerSettings.js.map} +0 -0
- package/lib/module/models/PrimerTheme.js +2 -0
- package/lib/module/models/{client-session-actions-request.js.map → PrimerTheme.js.map} +0 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/Primer.d.ts +2 -15
- package/lib/typescript/RNPrimer.d.ts +16 -9
- package/lib/typescript/index.d.ts +9 -3
- package/lib/typescript/models/Primer.d.ts +26 -0
- package/lib/typescript/models/PrimerCheckoutData.d.ts +15 -0
- package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts +5 -0
- package/lib/typescript/models/PrimerClientSession.d.ts +45 -0
- package/lib/typescript/models/{utils/countryCode.d.ts → PrimerCountryCode.d.ts} +1 -1
- package/lib/typescript/models/{utils/currencyCode.d.ts → PrimerCurrencyCode.d.ts} +1 -1
- package/lib/typescript/models/PrimerError.d.ts +11 -0
- package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts +116 -0
- package/lib/typescript/models/PrimerSessionIntent.d.ts +4 -0
- package/lib/typescript/models/PrimerSettings.d.ts +73 -0
- package/lib/typescript/models/{primer-theme.d.ts → PrimerTheme.d.ts} +1 -1
- package/lib/typescript/utils/index.d.ts +1 -1
- package/package.json +1 -1
- package/primer-io-react-native.podspec +1 -1
- package/src/Primer.ts +228 -172
- package/src/RNPrimer.ts +135 -51
- package/src/index.tsx +33 -6
- package/src/models/Primer.ts +35 -0
- package/src/models/PrimerCheckoutData.ts +18 -0
- package/src/models/PrimerCheckoutPaymentMethodData.ts +5 -0
- package/src/models/PrimerClientSession.ts +53 -0
- package/src/models/{utils/countryCode.ts → PrimerCountryCode.ts} +1 -1
- package/src/models/{utils/currencyCode.ts → PrimerCurrencyCode.ts} +1 -1
- package/src/models/PrimerError.ts +20 -0
- package/src/models/PrimerPaymentMethodTokenData.ts +130 -0
- package/src/models/PrimerSessionIntent.ts +4 -0
- package/src/models/PrimerSettings.ts +93 -0
- package/src/models/{primer-theme.ts → PrimerTheme.ts} +1 -1
- package/src/utils/index.ts +1 -1
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEventsRN.kt +0 -11
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerIntentRN.kt +0 -80
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerOnClientSessionActionsRequestRN.kt +0 -65
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerRequestRN.kt +0 -9
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerThemeRN.kt +0 -51
- package/android/src/main/java/com/primerioreactnative/utils/PrimerEventQueueRN.kt +0 -30
- package/ios/DataModels/PrimerIntentRN.swift +0 -10
- package/ios/DataModels/PrimerRequestRN.swift +0 -14
- package/ios/Pods/Pods.xcodeproj/project.pbxproj +0 -344
- package/ios/Pods/Pods.xcodeproj/xcuserdata/aladintaleb.xcuserdatad/xcschemes/Pods-ReactNative.xcscheme +0 -60
- package/ios/Pods/Pods.xcodeproj/xcuserdata/aladintaleb.xcuserdatad/xcschemes/xcschememanagement.plist +0 -16
- package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-acknowledgements.markdown +0 -3
- package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-acknowledgements.plist +0 -29
- package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-dummy.m +0 -5
- package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative.debug.xcconfig +0 -8
- package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative.release.xcconfig +0 -8
- package/ios/ReactNative.xcworkspace/xcuserdata/aladintaleb.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/lib/commonjs/models/action-request.js +0 -2
- package/lib/commonjs/models/client-session-actions-request.js +0 -2
- package/lib/commonjs/models/payment-instrument-token.js +0 -30
- package/lib/commonjs/models/payment-instrument-token.js.map +0 -1
- package/lib/commonjs/models/primer-callbacks.js +0 -2
- package/lib/commonjs/models/primer-config.js +0 -2
- package/lib/commonjs/models/primer-error.js +0 -4
- package/lib/commonjs/models/primer-error.js.map +0 -1
- package/lib/commonjs/models/primer-intent.js +0 -4
- package/lib/commonjs/models/primer-intent.js.map +0 -1
- package/lib/commonjs/models/primer-request.js +0 -2
- package/lib/commonjs/models/primer-settings.js +0 -2
- package/lib/commonjs/models/primer-theme.js +0 -2
- package/lib/commonjs/models/primer.js +0 -2
- package/lib/commonjs/models/utils/countryCode.js.map +0 -1
- package/lib/commonjs/models/utils/currencyCode.js.map +0 -1
- package/lib/commonjs/models/utils/redirectScheme.js +0 -4
- package/lib/commonjs/models/utils/redirectScheme.js.map +0 -1
- package/lib/module/models/action-request.js +0 -2
- package/lib/module/models/client-session-actions-request.js +0 -2
- package/lib/module/models/payment-instrument-token.js +0 -28
- package/lib/module/models/payment-instrument-token.js.map +0 -1
- package/lib/module/models/primer-callbacks.js +0 -2
- package/lib/module/models/primer-callbacks.js.map +0 -1
- package/lib/module/models/primer-config.js +0 -2
- package/lib/module/models/primer-config.js.map +0 -1
- package/lib/module/models/primer-error.js +0 -2
- package/lib/module/models/primer-error.js.map +0 -1
- package/lib/module/models/primer-intent.js +0 -2
- package/lib/module/models/primer-intent.js.map +0 -1
- package/lib/module/models/primer-request.js +0 -2
- package/lib/module/models/primer-request.js.map +0 -1
- package/lib/module/models/primer-settings.js +0 -2
- package/lib/module/models/primer-settings.js.map +0 -1
- package/lib/module/models/primer-theme.js +0 -2
- package/lib/module/models/primer-theme.js.map +0 -1
- package/lib/module/models/primer.js +0 -2
- package/lib/module/models/primer.js.map +0 -1
- package/lib/module/models/utils/countryCode.js.map +0 -1
- package/lib/module/models/utils/currencyCode.js.map +0 -1
- package/lib/module/models/utils/redirectScheme.js +0 -2
- package/lib/module/models/utils/redirectScheme.js.map +0 -1
- package/lib/typescript/models/action-request.d.ts +0 -10
- package/lib/typescript/models/client-session-actions-request.d.ts +0 -15
- package/lib/typescript/models/payment-instrument-token.d.ts +0 -76
- package/lib/typescript/models/primer-callbacks.d.ts +0 -10
- package/lib/typescript/models/primer-config.d.ts +0 -44
- package/lib/typescript/models/primer-error.d.ts +0 -8
- package/lib/typescript/models/primer-intent.d.ts +0 -13
- package/lib/typescript/models/primer-request.d.ts +0 -7
- package/lib/typescript/models/primer-settings.d.ts +0 -65
- package/lib/typescript/models/primer.d.ts +0 -33
- package/lib/typescript/models/utils/redirectScheme.d.ts +0 -3
- package/src/models/action-request.ts +0 -12
- package/src/models/client-session-actions-request.ts +0 -21
- package/src/models/payment-instrument-token.ts +0 -109
- package/src/models/primer-callbacks.ts +0 -14
- package/src/models/primer-config.ts +0 -55
- package/src/models/primer-error.ts +0 -19
- package/src/models/primer-intent.ts +0 -49
- package/src/models/primer-request.ts +0 -7
- package/src/models/primer-settings.ts +0 -73
- package/src/models/primer.ts +0 -41
- package/src/models/utils/redirectScheme.ts +0 -5
|
@@ -1,169 +1,254 @@
|
|
|
1
1
|
package com.primerioreactnative
|
|
2
2
|
|
|
3
|
-
import android.util.Log
|
|
4
3
|
import com.primerioreactnative.datamodels.*
|
|
4
|
+
import com.primerioreactnative.extensions.toPrimerCheckoutDataRN
|
|
5
|
+
import com.primerioreactnative.extensions.toPrimerClientSessionRN
|
|
6
|
+
import com.primerioreactnative.extensions.toPrimerPaymentMethodDataRN
|
|
5
7
|
import com.primerioreactnative.utils.PrimerImplementedRNCallbacks
|
|
6
|
-
import com.primerioreactnative.utils.asError
|
|
7
8
|
import com.primerioreactnative.utils.errorTo
|
|
8
|
-
import io.primer.android.
|
|
9
|
-
import io.primer.android.completion.
|
|
10
|
-
import io.primer.android.
|
|
9
|
+
import io.primer.android.PrimerCheckoutListener
|
|
10
|
+
import io.primer.android.completion.PrimerErrorDecisionHandler
|
|
11
|
+
import io.primer.android.completion.PrimerPaymentCreationDecisionHandler
|
|
12
|
+
import io.primer.android.completion.PrimerResumeDecisionHandler
|
|
13
|
+
import io.primer.android.domain.PrimerCheckoutData
|
|
14
|
+
import io.primer.android.domain.action.models.PrimerClientSession
|
|
15
|
+
import io.primer.android.domain.error.models.PrimerError
|
|
16
|
+
import io.primer.android.domain.tokenization.models.PrimerPaymentMethodData
|
|
17
|
+
import io.primer.android.domain.tokenization.models.PrimerPaymentMethodTokenData
|
|
11
18
|
import kotlinx.serialization.encodeToString
|
|
12
19
|
import kotlinx.serialization.json.Json
|
|
13
20
|
import org.json.JSONObject
|
|
14
21
|
|
|
15
|
-
class PrimerRNEventListener :
|
|
22
|
+
class PrimerRNEventListener : PrimerCheckoutListener {
|
|
16
23
|
|
|
17
|
-
private var
|
|
18
|
-
private var
|
|
19
|
-
private var
|
|
20
|
-
|
|
24
|
+
private var paymentCreationDecisionHandler: ((errorMessage: String?) -> Unit)? = null
|
|
25
|
+
private var primerErrorDecisionHandler: ((errorMessage: String?) -> Unit)? = null
|
|
26
|
+
private var tokenizeSuccessDecisionHandler: ((resumeToken: String?, errorMessage: String?) -> Unit)? =
|
|
27
|
+
null
|
|
28
|
+
private var resumeSuccessDecisionHandler: ((resumeToken: String?, errorMessage: String?) -> Unit)? =
|
|
29
|
+
null
|
|
21
30
|
private var implementedRNCallbacks: PrimerImplementedRNCallbacks? = null
|
|
22
31
|
|
|
23
|
-
private var resumeHandler: ResumeHandler? = null
|
|
24
|
-
|
|
25
32
|
var sendEvent: ((eventName: String, paramsJson: JSONObject?) -> Unit)? = null
|
|
26
33
|
var sendError: ((error: PrimerErrorRN) -> Unit)? = null
|
|
34
|
+
var sendErrorWithCheckoutData: ((error: PrimerErrorRN, checkoutData: PrimerCheckoutDataRN?) -> Unit)? =
|
|
35
|
+
null
|
|
36
|
+
|
|
37
|
+
override fun onCheckoutCompleted(checkoutData: PrimerCheckoutData) {
|
|
38
|
+
if (implementedRNCallbacks?.isOnCheckoutCompleteImplemented == true) {
|
|
39
|
+
sendEvent?.invoke(
|
|
40
|
+
PrimerEvents.ON_CHECKOUT_COMPLETE.eventName,
|
|
41
|
+
JSONObject(Json.encodeToString(checkoutData.toPrimerCheckoutDataRN()))
|
|
42
|
+
)
|
|
43
|
+
} else {
|
|
44
|
+
sendError?.invoke(
|
|
45
|
+
ErrorTypeRN.NativeBridgeFailed
|
|
46
|
+
errorTo "Callback [onCheckoutComplete] should be implemented."
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
27
50
|
|
|
28
|
-
override fun
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
else ->
|
|
51
|
+
override fun onBeforePaymentCreated(
|
|
52
|
+
paymentMethodData: PrimerPaymentMethodData,
|
|
53
|
+
decisionHandler: PrimerPaymentCreationDecisionHandler
|
|
54
|
+
) {
|
|
55
|
+
if (implementedRNCallbacks?.isOnBeforePaymentCreateImplemented == true) {
|
|
56
|
+
paymentCreationDecisionHandler = { errorMessage ->
|
|
57
|
+
when {
|
|
58
|
+
errorMessage != null -> decisionHandler.abortPaymentCreation(errorMessage.ifBlank { null })
|
|
59
|
+
else -> decisionHandler.continuePaymentCreation()
|
|
60
|
+
}
|
|
37
61
|
}
|
|
62
|
+
sendEvent?.invoke(
|
|
63
|
+
PrimerEvents.ON_BEFORE_PAYMENT_CREATE.eventName,
|
|
64
|
+
JSONObject(Json.encodeToString(paymentMethodData.toPrimerPaymentMethodDataRN()))
|
|
65
|
+
)
|
|
66
|
+
} else {
|
|
67
|
+
super.onBeforePaymentCreated(paymentMethodData, decisionHandler)
|
|
38
68
|
}
|
|
69
|
+
}
|
|
39
70
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
when {
|
|
51
|
-
err != null -> resumeHandler?.handleError(err.asError())
|
|
52
|
-
newClientToken != null -> resumeHandler?.handleNewClientToken(newClientToken)
|
|
53
|
-
else -> resumeHandler?.handleSuccess()
|
|
54
|
-
}
|
|
55
|
-
}
|
|
71
|
+
override fun onBeforeClientSessionUpdated() {
|
|
72
|
+
if (implementedRNCallbacks?.isOnBeforeClientSessionUpdateImplemented == true) {
|
|
73
|
+
sendEvent?.invoke(
|
|
74
|
+
PrimerEvents.ON_BEFORE_CLIENT_SESSION_UPDATE.eventName,
|
|
75
|
+
null
|
|
76
|
+
)
|
|
77
|
+
} else {
|
|
78
|
+
super.onBeforeClientSessionUpdated()
|
|
79
|
+
}
|
|
80
|
+
}
|
|
56
81
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
else -> resumeHandler?.handleSuccess()
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
resumeHandler = e.resumeHandler
|
|
72
|
-
val resumeToken = mapOf(Keys.RESUME_TOKEN to token)
|
|
73
|
-
sendEvent?.invoke(
|
|
74
|
-
PrimerEventsRN.OnResumeSuccess.string,
|
|
75
|
-
JSONObject(Json.encodeToString(resumeToken))
|
|
76
|
-
)
|
|
77
|
-
} else {
|
|
78
|
-
sendError?.invoke(ErrorTypeRN.InitFailed
|
|
79
|
-
errorTo "Callback [onResumeSuccess] should had been implemented.")
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
is CheckoutEvent.ApiError -> {
|
|
83
|
-
Log.e("PrimerRN", "ApiError: ${e.data}")
|
|
84
|
-
val exception = ErrorTypeRN.CheckoutFlowFailed errorTo e.data.description
|
|
85
|
-
sendError?.invoke(exception)
|
|
86
|
-
}
|
|
87
|
-
is CheckoutEvent.TokenAddedToVault -> {
|
|
88
|
-
val token = PrimerPaymentInstrumentTokenRN.fromPaymentMethodToken(e.data)
|
|
89
|
-
val request = JSONObject(Json.encodeToString(token))
|
|
90
|
-
sendEvent?.invoke(
|
|
91
|
-
PrimerEventsRN.OnVaultSuccess.string,
|
|
92
|
-
request
|
|
93
|
-
)
|
|
94
|
-
}
|
|
95
|
-
is CheckoutEvent.TokenSelected -> {
|
|
96
|
-
val token = PrimerPaymentInstrumentTokenRN.fromPaymentMethodToken(e.data)
|
|
97
|
-
val request = JSONObject(Json.encodeToString(token))
|
|
98
|
-
onTokenizeSuccess = { newClientToken, err ->
|
|
99
|
-
when {
|
|
100
|
-
err != null -> resumeHandler?.handleError(err.asError())
|
|
101
|
-
newClientToken != null -> resumeHandler?.handleNewClientToken(newClientToken)
|
|
102
|
-
else -> resumeHandler?.handleSuccess()
|
|
103
|
-
}
|
|
104
|
-
}
|
|
82
|
+
override fun onClientSessionUpdated(clientSession: PrimerClientSession) {
|
|
83
|
+
if (implementedRNCallbacks?.isOnClientSessionUpdateImplemented == true) {
|
|
84
|
+
sendEvent?.invoke(
|
|
85
|
+
PrimerEvents.ON_CLIENT_SESSION_UPDATE.eventName,
|
|
86
|
+
JSONObject(Json.encodeToString(clientSession.toPrimerClientSessionRN()))
|
|
87
|
+
)
|
|
88
|
+
} else {
|
|
89
|
+
super.onClientSessionUpdated(clientSession)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
105
92
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
errorTo "Callback [onCheckoutDismissed] should had been implemented.")
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
is CheckoutEvent.TokenizationError -> {
|
|
122
|
-
if (implementedRNCallbacks?.isCheckoutFailedImplemented == true) {
|
|
123
|
-
Log.e("PrimerRN", "TokenizationError: ${e.data}")
|
|
124
|
-
val exception = ErrorTypeRN.TokenizationFailed errorTo e.data.description
|
|
125
|
-
sendError?.invoke(exception)
|
|
126
|
-
} else {
|
|
127
|
-
sendError?.invoke(ErrorTypeRN.InitFailed
|
|
128
|
-
errorTo "Callback [onError] should had been implemented.")
|
|
93
|
+
override fun onTokenizeSuccess(
|
|
94
|
+
paymentMethodTokenData: PrimerPaymentMethodTokenData,
|
|
95
|
+
decisionHandler: PrimerResumeDecisionHandler
|
|
96
|
+
) {
|
|
97
|
+
if (implementedRNCallbacks?.isOnTokenizeSuccessImplemented == true) {
|
|
98
|
+
val token = PrimerPaymentInstrumentTokenRN.fromPaymentMethodToken(paymentMethodTokenData)
|
|
99
|
+
val request = JSONObject(Json.encodeToString(token))
|
|
100
|
+
tokenizeSuccessDecisionHandler = { newClientToken, err ->
|
|
101
|
+
when {
|
|
102
|
+
err != null -> decisionHandler.handleFailure(err.ifBlank { null })
|
|
103
|
+
newClientToken != null -> decisionHandler.continueWithNewClientToken(newClientToken)
|
|
104
|
+
else -> decisionHandler.handleSuccess()
|
|
129
105
|
}
|
|
130
106
|
}
|
|
131
|
-
|
|
107
|
+
sendEvent?.invoke(PrimerEvents.ON_TOKENIZE_SUCCESS.eventName, request)
|
|
108
|
+
} else {
|
|
109
|
+
sendError?.invoke(
|
|
110
|
+
ErrorTypeRN.NativeBridgeFailed
|
|
111
|
+
errorTo "Callback [onTokenizeSuccess] should be implemented."
|
|
112
|
+
)
|
|
132
113
|
}
|
|
133
114
|
}
|
|
134
115
|
|
|
135
|
-
fun
|
|
136
|
-
|
|
137
|
-
|
|
116
|
+
override fun onResumeSuccess(
|
|
117
|
+
resumeToken: String,
|
|
118
|
+
decisionHandler: PrimerResumeDecisionHandler
|
|
119
|
+
) {
|
|
120
|
+
if (implementedRNCallbacks?.isOnResumeSuccessImplemented == true) {
|
|
121
|
+
resumeSuccessDecisionHandler = { newClientToken, err ->
|
|
122
|
+
when {
|
|
123
|
+
err != null -> decisionHandler.handleFailure(err.ifBlank { null })
|
|
124
|
+
newClientToken != null -> decisionHandler.continueWithNewClientToken(newClientToken)
|
|
125
|
+
else -> decisionHandler.handleSuccess()
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
val resumeToken = mapOf(Keys.RESUME_TOKEN to resumeToken)
|
|
130
|
+
sendEvent?.invoke(
|
|
131
|
+
PrimerEvents.ON_RESUME_SUCCESS.eventName,
|
|
132
|
+
JSONObject(Json.encodeToString(resumeToken))
|
|
133
|
+
)
|
|
134
|
+
} else {
|
|
135
|
+
sendError?.invoke(
|
|
136
|
+
ErrorTypeRN.NativeBridgeFailed
|
|
137
|
+
errorTo "Callback [onResumeSuccess] should be implemented."
|
|
138
|
+
)
|
|
139
|
+
}
|
|
138
140
|
}
|
|
139
141
|
|
|
140
|
-
fun
|
|
141
|
-
if (implementedRNCallbacks?.
|
|
142
|
-
|
|
142
|
+
override fun onDismissed() {
|
|
143
|
+
if (implementedRNCallbacks?.isOnDismissImplemented == true) {
|
|
144
|
+
sendEvent?.invoke(
|
|
145
|
+
PrimerEvents.ON_DISMISS.eventName,
|
|
146
|
+
null
|
|
147
|
+
)
|
|
143
148
|
}
|
|
149
|
+
removeCallbacksAndHandlers()
|
|
144
150
|
}
|
|
145
151
|
|
|
146
|
-
fun
|
|
147
|
-
|
|
152
|
+
override fun onFailed(
|
|
153
|
+
error: PrimerError,
|
|
154
|
+
checkoutData: PrimerCheckoutData?,
|
|
155
|
+
errorHandler: PrimerErrorDecisionHandler?
|
|
156
|
+
) {
|
|
157
|
+
if (implementedRNCallbacks?.isOnErrorImplemented == true) {
|
|
158
|
+
primerErrorDecisionHandler = { errorMessage: String? ->
|
|
159
|
+
errorHandler?.showErrorMessage(errorMessage?.ifBlank { null })
|
|
160
|
+
}
|
|
161
|
+
sendErrorWithCheckoutData?.invoke(
|
|
162
|
+
PrimerErrorRN(
|
|
163
|
+
error.errorId,
|
|
164
|
+
error.description,
|
|
165
|
+
error.recoverySuggestion
|
|
166
|
+
), checkoutData?.toPrimerCheckoutDataRN()
|
|
167
|
+
)
|
|
168
|
+
} else {
|
|
169
|
+
super.onFailed(error, checkoutData, errorHandler)
|
|
170
|
+
}
|
|
148
171
|
}
|
|
149
172
|
|
|
150
|
-
fun
|
|
151
|
-
if (implementedRNCallbacks?.
|
|
152
|
-
|
|
173
|
+
override fun onFailed(error: PrimerError, errorHandler: PrimerErrorDecisionHandler?) {
|
|
174
|
+
if (implementedRNCallbacks?.isOnErrorImplemented == true) {
|
|
175
|
+
primerErrorDecisionHandler = { errorMessage: String? ->
|
|
176
|
+
errorHandler?.showErrorMessage(errorMessage)
|
|
177
|
+
}
|
|
178
|
+
sendError?.invoke(PrimerErrorRN(error.errorId, error.description, error.recoverySuggestion))
|
|
153
179
|
} else {
|
|
154
|
-
|
|
155
|
-
errorTo "Callback [onResumeSuccess] should had been implemented.")
|
|
180
|
+
super.onFailed(error, errorHandler)
|
|
156
181
|
}
|
|
157
182
|
}
|
|
158
183
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
184
|
+
// region tokenization handlers
|
|
185
|
+
fun handleTokenizationNewClientToken(newClientToken: String) {
|
|
186
|
+
tokenizeSuccessDecisionHandler?.invoke(newClientToken, null)
|
|
187
|
+
tokenizeSuccessDecisionHandler = null
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
fun handleTokenizationSuccess() {
|
|
191
|
+
tokenizeSuccessDecisionHandler?.invoke(null, null)
|
|
192
|
+
tokenizeSuccessDecisionHandler = null
|
|
164
193
|
}
|
|
165
194
|
|
|
195
|
+
fun handleTokenizationFailure(errorMessage: String) {
|
|
196
|
+
tokenizeSuccessDecisionHandler?.invoke(
|
|
197
|
+
null,
|
|
198
|
+
errorMessage.ifBlank { null }
|
|
199
|
+
)
|
|
200
|
+
tokenizeSuccessDecisionHandler = null
|
|
201
|
+
}
|
|
202
|
+
// endregion
|
|
203
|
+
|
|
204
|
+
// region resume handlers
|
|
205
|
+
fun handleResumeNewClientToken(newClientToken: String) {
|
|
206
|
+
resumeSuccessDecisionHandler?.invoke(newClientToken, null)
|
|
207
|
+
resumeSuccessDecisionHandler = null
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
fun handleResumeSuccess() {
|
|
211
|
+
resumeSuccessDecisionHandler?.invoke(null, null)
|
|
212
|
+
resumeSuccessDecisionHandler = null
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
fun handleResumeFailure(errorMessage: String) {
|
|
216
|
+
resumeSuccessDecisionHandler?.invoke(
|
|
217
|
+
null,
|
|
218
|
+
errorMessage.ifBlank { null }
|
|
219
|
+
)
|
|
220
|
+
resumeSuccessDecisionHandler = null
|
|
221
|
+
}
|
|
222
|
+
// endregion
|
|
223
|
+
|
|
224
|
+
// region payment create handlers
|
|
225
|
+
fun handlePaymentCreationContinue() {
|
|
226
|
+
paymentCreationDecisionHandler?.invoke(null)
|
|
227
|
+
paymentCreationDecisionHandler = null
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
fun handlePaymentCreationAbort(errorMessage: String) {
|
|
231
|
+
paymentCreationDecisionHandler?.invoke(errorMessage)
|
|
232
|
+
paymentCreationDecisionHandler = null
|
|
233
|
+
}
|
|
234
|
+
// endregion
|
|
235
|
+
|
|
236
|
+
// region error handlers
|
|
237
|
+
fun handleErrorMessage(errorMessage: String) {
|
|
238
|
+
primerErrorDecisionHandler?.invoke(errorMessage)
|
|
239
|
+
primerErrorDecisionHandler = null
|
|
240
|
+
}
|
|
241
|
+
// endregion
|
|
242
|
+
|
|
166
243
|
fun setImplementedCallbacks(implementedRNCallbacks: PrimerImplementedRNCallbacks) {
|
|
167
244
|
this.implementedRNCallbacks = implementedRNCallbacks
|
|
168
245
|
}
|
|
246
|
+
|
|
247
|
+
private fun removeCallbacksAndHandlers() {
|
|
248
|
+
paymentCreationDecisionHandler = null
|
|
249
|
+
primerErrorDecisionHandler = null
|
|
250
|
+
tokenizeSuccessDecisionHandler = null
|
|
251
|
+
resumeSuccessDecisionHandler = null
|
|
252
|
+
implementedRNCallbacks = null
|
|
253
|
+
}
|
|
169
254
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels
|
|
2
|
+
|
|
3
|
+
import kotlinx.serialization.Serializable
|
|
4
|
+
|
|
5
|
+
@Serializable
|
|
6
|
+
data class PrimerCheckoutDataRN(val paymentRN: PrimerPaymentRN)
|
|
7
|
+
|
|
8
|
+
@Serializable
|
|
9
|
+
data class PrimerPaymentRN(
|
|
10
|
+
val id: String,
|
|
11
|
+
val orderId: String,
|
|
12
|
+
)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels
|
|
2
|
+
|
|
3
|
+
import io.primer.android.data.configuration.models.CountryCode
|
|
4
|
+
import io.primer.android.domain.action.models.*
|
|
5
|
+
import kotlinx.serialization.Serializable
|
|
6
|
+
|
|
7
|
+
@Serializable
|
|
8
|
+
data class PrimerClientSessionRN(
|
|
9
|
+
val customerId: String?,
|
|
10
|
+
val orderId: String?,
|
|
11
|
+
val currencyCode: String?,
|
|
12
|
+
val totalAmount: Int?,
|
|
13
|
+
val lineItems: List<PrimerLineItemRN>?,
|
|
14
|
+
val orderDetails: PrimerOrderRN?,
|
|
15
|
+
val customer: PrimerCustomerRN?,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
@Serializable
|
|
19
|
+
data class PrimerCustomerRN(
|
|
20
|
+
val emailAddress: String?,
|
|
21
|
+
val mobileNumber: String?,
|
|
22
|
+
val firstName: String?,
|
|
23
|
+
val lastName: String?,
|
|
24
|
+
val billingAddress: PrimerAddressRN?,
|
|
25
|
+
val shippingAddress: PrimerAddressRN?,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
@Serializable
|
|
29
|
+
data class PrimerOrderRN(
|
|
30
|
+
val countryCode: CountryCode?,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
@Serializable
|
|
34
|
+
data class PrimerLineItemRN(
|
|
35
|
+
val itemId: String?,
|
|
36
|
+
val itemDescription: String?,
|
|
37
|
+
val amount: Int?,
|
|
38
|
+
val discountAmount: Int?,
|
|
39
|
+
val quantity: Int?,
|
|
40
|
+
val taxCode: String?,
|
|
41
|
+
val taxAmount: Int?
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
@Serializable
|
|
45
|
+
data class PrimerAddressRN(
|
|
46
|
+
val firstName: String? = null,
|
|
47
|
+
val lastName: String? = null,
|
|
48
|
+
val addressLine1: String? = null,
|
|
49
|
+
val addressLine2: String? = null,
|
|
50
|
+
val postalCode: String? = null,
|
|
51
|
+
val city: String? = null,
|
|
52
|
+
val state: String? = null,
|
|
53
|
+
val countryCode: CountryCode? = null,
|
|
54
|
+
)
|
|
@@ -2,18 +2,14 @@ package com.primerioreactnative.datamodels
|
|
|
2
2
|
|
|
3
3
|
import kotlinx.serialization.Serializable
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
@Serializable
|
|
7
6
|
data class PrimerErrorRN(
|
|
8
7
|
val errorId: String? = null,
|
|
9
|
-
val
|
|
8
|
+
val description: String? = null,
|
|
10
9
|
val recoverySuggestion: String? = null
|
|
11
10
|
)
|
|
12
11
|
|
|
13
12
|
@Serializable
|
|
14
|
-
enum class ErrorTypeRN {
|
|
15
|
-
|
|
16
|
-
InitFailed,
|
|
17
|
-
CheckoutFlowFailed,
|
|
18
|
-
TokenizationFailed,
|
|
13
|
+
enum class ErrorTypeRN(val errorId: String) {
|
|
14
|
+
NativeBridgeFailed("native-bridge"),
|
|
19
15
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels
|
|
2
|
+
|
|
3
|
+
internal enum class PrimerEvents(val eventName: String) {
|
|
4
|
+
|
|
5
|
+
ON_CHECKOUT_COMPLETE("onCheckoutComplete"),
|
|
6
|
+
ON_BEFORE_CLIENT_SESSION_UPDATE("onBeforeClientSessionUpdate"),
|
|
7
|
+
ON_CLIENT_SESSION_UPDATE("onClientSessionUpdate"),
|
|
8
|
+
ON_BEFORE_PAYMENT_CREATE("onBeforePaymentCreate"),
|
|
9
|
+
ON_DISMISS("onDismiss"),
|
|
10
|
+
ON_TOKENIZE_SUCCESS("onTokenizeSuccess"),
|
|
11
|
+
ON_RESUME_SUCCESS("onResumeSuccess"),
|
|
12
|
+
ON_ERROR("onError"),
|
|
13
|
+
}
|
package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
package com.primerioreactnative.datamodels
|
|
2
2
|
|
|
3
|
-
import io.primer.android.
|
|
4
|
-
import io.primer.android.
|
|
5
|
-
import io.primer.android.
|
|
3
|
+
import io.primer.android.data.tokenization.models.PaymentInstrumentData
|
|
4
|
+
import io.primer.android.data.tokenization.models.TokenType
|
|
5
|
+
import io.primer.android.domain.tokenization.models.PrimerPaymentMethodTokenData
|
|
6
6
|
import kotlinx.serialization.Serializable
|
|
7
7
|
|
|
8
8
|
@Serializable
|
|
@@ -31,7 +31,7 @@ data class PrimerPaymentInstrumentTokenRN(
|
|
|
31
31
|
)
|
|
32
32
|
|
|
33
33
|
companion object {
|
|
34
|
-
fun fromPaymentMethodToken(token:
|
|
34
|
+
fun fromPaymentMethodToken(token: PrimerPaymentMethodTokenData): PrimerPaymentInstrumentTokenRN {
|
|
35
35
|
return PrimerPaymentInstrumentTokenRN(
|
|
36
36
|
token.token,
|
|
37
37
|
token.analyticsId,
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels
|
|
2
|
+
|
|
3
|
+
import io.primer.android.data.configuration.models.PrimerPaymentMethodType
|
|
4
|
+
import io.primer.android.domain.tokenization.models.PrimerPaymentMethodData
|
|
5
|
+
import kotlinx.serialization.Serializable
|
|
6
|
+
|
|
7
|
+
@Serializable
|
|
8
|
+
data class PrimerPaymentMethodDataRN(val paymentMethodType: PrimerPaymentMethodType)
|