@primer-io/react-native 0.6.5 → 0.7.0-beta

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.
Files changed (105) hide show
  1. package/README.md +4 -6
  2. package/android/.gradle/7.0.2/dependencies-accessors/dependencies-accessors.lock +0 -0
  3. package/android/.gradle/7.0.2/executionHistory/executionHistory.lock +0 -0
  4. package/android/.gradle/7.0.2/fileHashes/fileHashes.lock +0 -0
  5. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  6. package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
  7. package/android/.gradle/checksums/checksums.lock +0 -0
  8. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  9. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  10. package/android/build.gradle +1 -1
  11. package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +53 -3
  12. package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +30 -2
  13. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerOnClientSessionActionsRequestRN.kt +42 -0
  14. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerRequestRN.kt +2 -2
  15. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +1 -1
  16. package/android/src/main/java/com/primerioreactnative/utils/PrimerEventQueueRN.kt +0 -2
  17. package/ios/DataModels/PrimerErrorRN.swift +4 -0
  18. package/ios/DataModels/PrimerRequestRN.swift +1 -1
  19. package/ios/DataModels/PrimerSettingsRN.swift +1 -1
  20. package/ios/PrimerRN+PrimerDelegate.swift +61 -3
  21. package/ios/PrimerRN.swift +38 -4
  22. package/ios/ReactNative.m +6 -0
  23. package/lib/commonjs/Primer.js +98 -4
  24. package/lib/commonjs/Primer.js.map +1 -1
  25. package/lib/commonjs/models/client-session-actions-request.js +2 -0
  26. package/lib/commonjs/models/client-session-actions-request.js.map +1 -0
  27. package/lib/module/Primer.js +98 -4
  28. package/lib/module/Primer.js.map +1 -1
  29. package/lib/module/models/client-session-actions-request.js +2 -0
  30. package/lib/module/models/client-session-actions-request.js.map +1 -0
  31. package/lib/typescript/models/client-session-actions-request.d.ts +11 -0
  32. package/lib/typescript/models/primer-callbacks.d.ts +2 -0
  33. package/lib/typescript/models/primer-config.d.ts +3 -1
  34. package/lib/typescript/models/primer-request.d.ts +13 -2
  35. package/package.json +1 -1
  36. package/primer-io-react-native.podspec +1 -1
  37. package/src/Primer.ts +62 -4
  38. package/src/models/client-session-actions-request.ts +13 -0
  39. package/src/models/primer-callbacks.ts +6 -0
  40. package/src/models/primer-config.ts +6 -0
  41. package/src/models/primer-request.ts +18 -2
  42. package/android/.gradle/7.0.2/fileHashes/fileHashes.bin +0 -0
  43. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  44. package/android/.idea/.gitignore +0 -3
  45. package/android/.idea/compiler.xml +0 -6
  46. package/android/.idea/gradle.xml +0 -18
  47. package/android/.idea/jarRepositories.xml +0 -35
  48. package/android/.idea/libraries/Gradle__androidx_activity_activity_1_2_0_beta01_aar.xml +0 -16
  49. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml +0 -13
  50. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_2_0_aar.xml +0 -16
  51. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_2_0_aar.xml +0 -13
  52. package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +0 -11
  53. package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +0 -13
  54. package/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +0 -11
  55. package/android/.idea/libraries/Gradle__androidx_core_core_1_3_2_aar.xml +0 -16
  56. package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +0 -13
  57. package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +0 -13
  58. package/android/.idea/libraries/Gradle__androidx_databinding_viewbinding_7_0_1_aar.xml +0 -13
  59. package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +0 -16
  60. package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_2_5_aar.xml +0 -16
  61. package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +0 -13
  62. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_3_1.xml +0 -11
  63. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_3_1_aar.xml +0 -13
  64. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml +0 -13
  65. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml +0 -13
  66. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml +0 -13
  67. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml +0 -13
  68. package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +0 -13
  69. package/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml +0 -13
  70. package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +0 -16
  71. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +0 -13
  72. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +0 -13
  73. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml +0 -13
  74. package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +0 -13
  75. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_0_3.xml +0 -13
  76. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_0_0_aar.xml +0 -15
  77. package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_0_0_aar.xml +0 -18
  78. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_0_0_aar.xml +0 -18
  79. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_0_0_aar.xml +0 -18
  80. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_0_0_aar.xml +0 -18
  81. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_0_0_aar.xml +0 -15
  82. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_0_0_aar.xml +0 -15
  83. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_0_0_aar.xml +0 -15
  84. package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_11_2.xml +0 -13
  85. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_63_4_aar.xml +0 -18
  86. package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_9_0.xml +0 -13
  87. package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_9_0.xml +0 -13
  88. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_9_0_aar.xml +0 -15
  89. package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_14_1.xml +0 -13
  90. package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +0 -13
  91. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_12.xml +0 -13
  92. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_3_12_12.xml +0 -13
  93. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml +0 -13
  94. package/android/.idea/libraries/Gradle__io_primer_android_1_0_0_aar.xml +0 -15
  95. package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +0 -13
  96. package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +0 -13
  97. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_5_21.xml +0 -13
  98. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_5_21.xml +0 -13
  99. package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_serialization_core_jvm_1_2_2.xml +0 -13
  100. package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_serialization_json_jvm_1_2_2.xml +0 -13
  101. package/android/.idea/misc.xml +0 -9
  102. package/android/.idea/modules/android.iml +0 -126
  103. package/android/.idea/modules.xml +0 -8
  104. package/android/.idea/vcs.xml +0 -6
  105. package/android/local.properties +0 -8
package/README.md CHANGED
@@ -43,15 +43,13 @@ import { Primer } from '@primer-io/react-native';
43
43
  const token: string = await fetchClientToken();
44
44
 
45
45
  // configure listeners and settings.
46
- const onTokenizeSuccess = (t, handler) => {
47
- setPaymentInstrument(t);
48
- handler.resumeWithSuccess(); // call this to resume the checkout flow.
46
+ const onTokenizeSuccess = async (t, handler) => {
47
+ const payment = await createPayment(t);
48
+ handler.handleSuccess(); // resume the checkout flow with success message.
49
49
  };
50
50
 
51
- const settings = { order: { amount: 50, currency: 'GBP' } };
52
-
53
51
  // show Universal Checkout with client token and config.
54
- Primer.showUniversalCheckout(token, { onTokenizeSuccess, settings });
52
+ Primer.showUniversalCheckout(token, { onTokenizeSuccess });
55
53
  ```
56
54
 
57
55
  For more info & help troubleshooting, check out our 🔥 [docs](https://www.notion.so/primerio/Quick-Start-6c5eb61e5bbe426ca66244259e06048e)
@@ -1,2 +1,2 @@
1
- #Tue Oct 05 20:07:48 BST 2021
1
+ #Tue Nov 30 22:24:16 GMT 2021
2
2
  gradle.version=7.0.2
@@ -128,5 +128,5 @@ dependencies {
128
128
  api 'com.facebook.react:react-native:+'
129
129
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
130
130
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2"
131
- implementation 'io.primer:android:1.1.0'
131
+ implementation 'io.primer:android:1.5.0'
132
132
  }
@@ -8,11 +8,11 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule
8
8
  import com.facebook.react.bridge.ReactMethod
9
9
  import com.primerioreactnative.datamodels.*
10
10
  import io.primer.android.Primer
11
- import io.primer.android.model.PrimerDebugOptions
12
11
  import io.primer.android.model.dto.*
13
12
  import kotlinx.serialization.decodeFromString
14
13
  import kotlinx.serialization.encodeToString
15
14
  import kotlinx.serialization.json.Json
15
+ import kotlin.Error
16
16
 
17
17
 
18
18
  class PrimerRN(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
@@ -89,6 +89,16 @@ class PrimerRN(reactContext: ReactApplicationContext) : ReactContextBaseJavaModu
89
89
  mListener.configureOnTokenizeSuccess(callback)
90
90
  }
91
91
 
92
+ @ReactMethod
93
+ fun configureOnClientSessionActions(callback: Callback) {
94
+ mListener.configureOnClientSessionActions(callback)
95
+ }
96
+
97
+ @ReactMethod
98
+ fun configureOnResumeSuccess(callback: Callback) {
99
+ mListener.configureOnResumeSuccess(callback)
100
+ }
101
+
92
102
  @ReactMethod
93
103
  fun configureOnVaultSuccess(callback: Callback) {
94
104
  mListener.configureOnVaultSuccess(callback)
@@ -123,10 +133,26 @@ class PrimerRN(reactContext: ReactApplicationContext) : ReactContextBaseJavaModu
123
133
  mListener.completion = { error, clientToken ->
124
134
  currentActivity?.let {
125
135
  it.runOnUiThread {
136
+ if (error != null) {
137
+ mListener.resumeHandler?.handleError(Error(error))
138
+ } else {
139
+ if (clientToken == null) {
140
+ mListener.resumeHandler?.handleSuccess()
141
+ } else {
142
+ mListener.resumeHandler?.handleNewClientToken(clientToken)
143
+ }
144
+ }
145
+ }
146
+ }
147
+ }
126
148
 
127
- Primer.instance.showError()
149
+ mListener.actionCompletion = { error, clientToken ->
150
+ currentActivity?.let {
151
+ it.runOnUiThread {
152
+ if (error != null) {
153
+ mListener.actionResumeHandler?.handleError(Error(error))
128
154
  } else {
129
- clientToken?.let { t -> mListener.resumeHandler?.handleNewClientToken(t) }
155
+ mListener.actionResumeHandler?.handleClientToken(clientToken)
130
156
  }
131
157
  }
132
158
  }
@@ -191,4 +217,28 @@ class PrimerRN(reactContext: ReactApplicationContext) : ReactContextBaseJavaModu
191
217
  haltExecution = true
192
218
  }
193
219
  }
220
+
221
+ @ReactMethod
222
+ fun actionResume(request: String) {
223
+ try {
224
+ Log.d("PrimerRN", "resume: $request")
225
+ val data = json.decodeFromString<PrimerResumeRequest>(request)
226
+ mListener.actionCompletion?.invoke(data.error, data.token)
227
+
228
+ mListener.actionCompletion = { error, clientToken ->
229
+ currentActivity?.let {
230
+ it.runOnUiThread {
231
+ if (error != null) {
232
+ mListener.actionResumeHandler?.handleError(Error(error))
233
+ } else {
234
+ mListener.actionResumeHandler?.handleClientToken(clientToken)
235
+ }
236
+ }
237
+ }
238
+ }
239
+
240
+ } catch (e: Exception) {
241
+ Log.e("PrimerRN", "configure settings error: $e")
242
+ }
243
+ }
194
244
  }
@@ -4,10 +4,11 @@ import android.util.Log
4
4
  import com.facebook.react.bridge.Callback
5
5
  import com.primerioreactnative.datamodels.ErrorTypeRN
6
6
  import com.primerioreactnative.datamodels.PrimerErrorRN
7
+ import com.primerioreactnative.datamodels.PrimerOnClientSessionActionsRequestRN
7
8
  import com.primerioreactnative.datamodels.PrimerPaymentInstrumentTokenRN
8
9
  import com.primerioreactnative.utils.PrimerEventQueueRN
9
10
  import io.primer.android.CheckoutEventListener
10
- import io.primer.android.Primer
11
+ import io.primer.android.completion.ActionResumeHandler
11
12
  import io.primer.android.completion.ResumeHandler
12
13
  import io.primer.android.events.CheckoutEvent
13
14
  import kotlinx.serialization.encodeToString
@@ -16,20 +17,34 @@ import kotlinx.serialization.json.Json
16
17
  class PrimerRNEventListener : CheckoutEventListener {
17
18
 
18
19
  private var onTokenizeSuccessQueue: PrimerEventQueueRN? = null
20
+ private var onClientSessionActionsQueue: PrimerEventQueueRN? = null
21
+ private var onResumeSuccessQueue: PrimerEventQueueRN? = null
19
22
  private var onVaultSuccessQueue: PrimerEventQueueRN? = null
20
23
  private var onDismissQueue: PrimerEventQueueRN? = null
21
24
  var onPrimerErrorQueue: PrimerEventQueueRN? = null
22
25
  var onSavedPaymentInstrumentsFetchedQueue: PrimerEventQueueRN? = null
23
26
 
24
- var completion: ((error: Boolean, token: String?) -> Unit)? = null
27
+ var completion: ((error: String?, token: String?) -> Unit)? = null
28
+ var actionCompletion: ((error: String?, token: String?) -> Unit)? = null
25
29
 
26
30
  var resumeHandler: ResumeHandler? = null
31
+ var actionResumeHandler: ActionResumeHandler? = null
27
32
 
28
33
  fun configureOnTokenizeSuccess(callback: Callback) {
29
34
  onTokenizeSuccessQueue = PrimerEventQueueRN()
30
35
  onTokenizeSuccessQueue?.poll(callback)
31
36
  }
32
37
 
38
+ fun configureOnClientSessionActions(callback: Callback) {
39
+ onClientSessionActionsQueue = PrimerEventQueueRN()
40
+ onClientSessionActionsQueue?.poll(callback)
41
+ }
42
+
43
+ fun configureOnResumeSuccess(callback: Callback) {
44
+ onResumeSuccessQueue = PrimerEventQueueRN()
45
+ onResumeSuccessQueue?.poll(callback)
46
+ }
47
+
33
48
  fun configureOnVaultSuccess(callback: Callback) {
34
49
  onVaultSuccessQueue = PrimerEventQueueRN()
35
50
  onVaultSuccessQueue?.poll(callback)
@@ -50,6 +65,14 @@ class PrimerRNEventListener : CheckoutEventListener {
50
65
  onSavedPaymentInstrumentsFetchedQueue?.poll(callback)
51
66
  }
52
67
 
68
+ override fun onClientSessionActions(event: CheckoutEvent.OnClientSessionActions) {
69
+ val token = PrimerOnClientSessionActionsRequestRN.build(event.data)
70
+ val request = Json.encodeToString(token)
71
+
72
+ onClientSessionActionsQueue?.addRequestAndPoll(request)
73
+ actionResumeHandler = event.resumeHandler
74
+ }
75
+
53
76
  override fun onCheckoutEvent(e: CheckoutEvent) {
54
77
  when (e) {
55
78
  is CheckoutEvent.TokenAddedToVault -> {
@@ -68,6 +91,11 @@ class PrimerRNEventListener : CheckoutEventListener {
68
91
  val request = Json.encodeToString(token)
69
92
  onTokenizeSuccessQueue?.addRequestAndPoll(request)
70
93
  }
94
+ is CheckoutEvent.ResumeSuccess -> {
95
+ val token = e.resumeToken
96
+ onResumeSuccessQueue?.addRequestAndPoll(token)
97
+ resumeHandler = e.resumeHandler
98
+ }
71
99
  is CheckoutEvent.SavedPaymentInstrumentsFetched -> {
72
100
  val list = e.data.map { PrimerPaymentInstrumentTokenRN.fromPaymentMethodToken(it) }
73
101
  val request = Json.encodeToString(list)
@@ -0,0 +1,42 @@
1
+ package com.primerioreactnative.datamodels
2
+
3
+ import io.primer.android.data.action.models.ClientSessionActionsRequest
4
+ import kotlinx.serialization.Serializable
5
+
6
+ @Serializable
7
+ data class PrimerOnClientSessionActionsRequestRN(
8
+ val actions: List<Action>,
9
+ ) {
10
+
11
+ @Serializable
12
+ data class Action(
13
+ val type: String,
14
+ val paymentMethodType: String? = null,
15
+ val network: String? = null,
16
+ )
17
+
18
+ companion object {
19
+ fun build(
20
+ request: ClientSessionActionsRequest,
21
+ ): PrimerOnClientSessionActionsRequestRN {
22
+ return PrimerOnClientSessionActionsRequestRN(
23
+ actions = request.actions.map { action ->
24
+ when (action) {
25
+ is ClientSessionActionsRequest.SetPaymentMethod -> {
26
+ Action(
27
+ type = "SET_PAYMENT_METHOD",
28
+ paymentMethodType = action.paymentMethodType,
29
+ network = action.network,
30
+ )
31
+ }
32
+ is ClientSessionActionsRequest.UnsetPaymentMethod -> {
33
+ Action(
34
+ type = "UNSET_PAYMENT_METHOD",
35
+ )
36
+ }
37
+ }
38
+ }
39
+ )
40
+ }
41
+ }
42
+ }
@@ -4,6 +4,6 @@ import kotlinx.serialization.*
4
4
 
5
5
  @Serializable
6
6
  data class PrimerResumeRequest(
7
- val error: Boolean,
8
- val token: String,
7
+ val error: String? = null,
8
+ val token: String? = null,
9
9
  )
@@ -16,7 +16,7 @@ class PrimerSettingsRN(
16
16
  val customer = customer?.format() ?: Customer()
17
17
  val business = business?.format() ?: Business()
18
18
  val options = options?.format() ?: Options()
19
- return PrimerSettings(order, business, customer, options)
19
+ return PrimerSettings(order, customer, business, options)
20
20
  }
21
21
  }
22
22
 
@@ -14,9 +14,7 @@ class PrimerEventQueueRN {
14
14
 
15
15
  fun poll(cb: Callback? = null) {
16
16
  if (cb != null) mCallback = cb
17
-
18
17
  val callback = mCallback ?: return
19
-
20
18
  val next = mQueue.poll() ?: return
21
19
 
22
20
  callback.invoke(next)
@@ -13,3 +13,7 @@ enum ErrorTypeRN: String, Error, Encodable {
13
13
  case clientTokenNotConfigured
14
14
  case flowParsingFailed
15
15
  }
16
+
17
+ struct ErrorRN: Error {
18
+ let message: String
19
+ }
@@ -5,7 +5,7 @@ struct PrimerInitRequest: Decodable {
5
5
  }
6
6
 
7
7
  struct PrimerResumeRequest: Decodable {
8
- let error: Bool;
8
+ let error: String?
9
9
  let token: String?
10
10
  }
11
11
 
@@ -39,7 +39,7 @@ extension PrimerSettingsRN {
39
39
  customer: Customer(
40
40
  firstName: customer?.firstName,
41
41
  lastName: customer?.lastName,
42
- email: customer?.email,
42
+ emailAddress: customer?.email,
43
43
  homePhoneNumber: nil,
44
44
  mobilePhoneNumber: customer?.phone,
45
45
  workPhoneNumber: nil,
@@ -28,13 +28,71 @@ extension PrimerRN: PrimerDelegate {
28
28
  } catch {
29
29
  checkoutFailed(with: ErrorTypeRN.ParseJsonFailed)
30
30
  }
31
- onResumeFlowCallback = { error, token in
31
+ onResumeFlowCallback = { error, clientToken in
32
+ if let error = error {
33
+ resumeHandler.handle(error: error)
34
+ } else if let clientToken = clientToken {
35
+ resumeHandler.handle(newClientToken: clientToken)
36
+ } else {
37
+ resumeHandler.handleSuccess()
38
+ }
39
+ }
40
+ }
41
+
42
+ func onClientSessionActions(_ actions: [ClientSession.Action], resumeHandler: ResumeHandlerProtocol?) {
43
+ do {
44
+ let actionsRN: [[String: String?]] = actions.compactMap {
45
+
46
+ if ($0.`type` == "SELECT_PAYMENT_METHOD") {
47
+ let network = ($0.params?["binData"] as? [String: Any])?["network"] as? String
48
+ return [
49
+ "type": "SET_PAYMENT_METHOD",
50
+ "paymentMethodType": $0.params?["paymentMethodType"] as? String,
51
+ "network": network,
52
+ ]
53
+ }
54
+
55
+ if ($0.`type` == "UNSELECT_PAYMENT_METHOD") {
56
+ return [
57
+ "type": "UNSET_PAYMENT_METHOD",
58
+ ]
59
+ }
60
+
61
+ return [ "type": "UNKNOWN" ]
62
+ }
63
+
64
+ let request: [String: Any] = [
65
+ "actions": actionsRN
66
+ ]
67
+
68
+ let data = try JSONSerialization.data(withJSONObject: request, options: .fragmentsAllowed)
69
+ let jsonString = String(data: data, encoding: .utf8)!
70
+ self.onClientSessionActionsCallback?([jsonString])
71
+ } catch {
72
+ checkoutFailed(with: ErrorTypeRN.ParseJsonFailed)
73
+ }
74
+
75
+ onActionResumeCallback = { error, token in
32
76
  if let token = token {
33
- resumeHandler.handle(newClientToken: token)
77
+ resumeHandler?.handle(newClientToken: token)
34
78
  } else if let error = error {
79
+ resumeHandler?.handle(error: error)
80
+ } else {
81
+ resumeHandler?.handle(error: PrimerError.generic)
82
+ }
83
+ }
84
+ }
85
+
86
+ func onResumeSuccess(_ clientToken: String, resumeHandler: ResumeHandlerProtocol) {
87
+ self.onResumeSuccessCallback?([clientToken])
88
+
89
+ onResumeFlowCallback = { error, clientToken in
90
+ if let error = error {
35
91
  resumeHandler.handle(error: error)
92
+ } else if let clientToken = clientToken {
93
+ resumeHandler.handle(newClientToken: clientToken)
36
94
  } else {
37
- resumeHandler.handle(error: PrimerError.generic)
95
+ resumeHandler.handleSuccess()
38
96
  }
39
97
  }
40
98
  }
@@ -17,10 +17,13 @@ class PrimerRN: NSObject {
17
17
  var theme: PrimerThemeRN?
18
18
  var flow: PrimerSessionFlow?
19
19
  var onTokenizeSuccessCallback: RCTResponseSenderBlock?
20
+ var onClientSessionActionsCallback: RCTResponseSenderBlock?
21
+ var onResumeSuccessCallback: RCTResponseSenderBlock?
20
22
  var onVaultSuccessCallback: RCTResponseSenderBlock?
21
23
  var onDismissCallback: RCTResponseSenderBlock?
22
24
  var onPrimerErrorCallback: RCTResponseSenderBlock?
23
25
  var onResumeFlowCallback: BasicCompletionBlock?
26
+ var onActionResumeCallback: BasicCompletionBlock?
24
27
  var onSavedPaymentInstrumentsFetchedCallback: RCTResponseSenderBlock?
25
28
 
26
29
  private var sdkWasInitialised = false
@@ -60,6 +63,14 @@ class PrimerRN: NSObject {
60
63
  self.onTokenizeSuccessCallback = callback
61
64
  }
62
65
 
66
+ @objc func configureOnClientSessionActions(_ callback: @escaping RCTResponseSenderBlock) {
67
+ self.onClientSessionActionsCallback = callback
68
+ }
69
+
70
+ @objc func configureOnResumeSuccess(_ callback: @escaping RCTResponseSenderBlock) {
71
+ self.onResumeSuccessCallback = callback
72
+ }
73
+
63
74
  @objc func configureOnVaultSuccess(_ callback: @escaping RCTResponseSenderBlock) {
64
75
  self.onVaultSuccessCallback = callback
65
76
  }
@@ -122,7 +133,6 @@ class PrimerRN: NSObject {
122
133
  Primer.shared.delegate = self
123
134
  Primer.shared.configure(settings: settings, theme: theme)
124
135
  Primer.shared.showCheckout(viewController, flow: flow)
125
-
126
136
  } catch {
127
137
  self?.checkoutFailed(with: error)
128
138
  }
@@ -135,11 +145,14 @@ class PrimerRN: NSObject {
135
145
  let json = request.data(using: .utf8)!
136
146
  let request = try JSONDecoder().decode(PrimerResumeRequest.self, from: json)
137
147
 
138
- if (request.error) {
139
- self?.onResumeFlowCallback?(ErrorTypeRN.ParseJsonFailed, nil)
148
+ if let error = request.error {
149
+ self?.onResumeFlowCallback?(ErrorRN(message: error), nil)
150
+ } else if let clientToken = request.token {
151
+ self?.onResumeFlowCallback?(nil, clientToken)
140
152
  } else {
141
- self?.onResumeFlowCallback?(nil, request.token)
153
+ self?.onResumeFlowCallback?(nil, nil)
142
154
  }
155
+
143
156
  self?.onResumeFlowCallback = nil
144
157
  } catch {
145
158
  self?.checkoutFailed(with: error)
@@ -147,6 +160,27 @@ class PrimerRN: NSObject {
147
160
  }
148
161
  }
149
162
 
163
+ @objc func actionResume(_ request: String) -> Void {
164
+ DispatchQueue.main.async { [weak self] in
165
+ do {
166
+ let json = request.data(using: .utf8)!
167
+ let request = try JSONDecoder().decode(PrimerResumeRequest.self, from: json)
168
+
169
+ if let error = request.error {
170
+ self?.onActionResumeCallback?(ErrorRN(message: error), nil)
171
+ } else if let clientToken = request.token {
172
+ self?.onActionResumeCallback?(nil, clientToken)
173
+ } else {
174
+ self?.onActionResumeCallback?(nil, nil)
175
+ }
176
+
177
+ self?.onActionResumeCallback = nil
178
+ } catch {
179
+ self?.checkoutFailed(with: error)
180
+ }
181
+ }
182
+ }
183
+
150
184
  @objc func dispose() -> Void {
151
185
 
152
186
  }
package/ios/ReactNative.m CHANGED
@@ -11,6 +11,10 @@ RCT_EXTERN_METHOD(configureIntent: (NSString *)request)
11
11
 
12
12
  RCT_EXTERN_METHOD(configureOnTokenizeSuccess: (RCTResponseSenderBlock)callback)
13
13
 
14
+ RCT_EXTERN_METHOD(configureOnClientSessionActions: (RCTResponseSenderBlock)callback)
15
+
16
+ RCT_EXTERN_METHOD(configureOnResumeSuccess: (RCTResponseSenderBlock)callback)
17
+
14
18
  RCT_EXTERN_METHOD(configureOnVaultSuccess: (RCTResponseSenderBlock)callback)
15
19
 
16
20
  RCT_EXTERN_METHOD(configureOnDismiss: (RCTResponseSenderBlock)callback)
@@ -25,6 +29,8 @@ RCT_EXTERN_METHOD(initialize: (NSString *)data)
25
29
 
26
30
  RCT_EXTERN_METHOD(resume: (NSString *)data)
27
31
 
32
+ RCT_EXTERN_METHOD(actionResume: (NSString *)data)
33
+
28
34
  RCT_EXTERN_METHOD(dispose)
29
35
 
30
36
  @end
@@ -56,6 +56,8 @@ function configure(config) {
56
56
  configureOnDismiss(config.onDismiss);
57
57
  configureOnError(config.onError);
58
58
  configureOnTokenizeSuccess(config.onTokenizeSuccess);
59
+ configureOnClientSessionActions(config.onClientSessionActions);
60
+ configureOnResumeSuccess(config.onResumeSuccess);
59
61
  configureOnSavedPaymentInstrumentsFetched(config.onSavedPaymentInstrumentsFetched);
60
62
  }
61
63
 
@@ -87,12 +89,104 @@ function configureOnTokenizeSuccess(callback = (_, __) => {}) {
87
89
  try {
88
90
  const parsedData = JSON.parse(data);
89
91
  callback(parsedData, {
90
- resumeWithError: () => resume({
91
- error: true,
92
- token: ''
92
+ handleError: error => resume({
93
+ error,
94
+ token: null
95
+ }),
96
+ handleSuccess: () => resume({
97
+ error: null,
98
+ token: null
99
+ }),
100
+ handleNewClientToken: token => resume({
101
+ error: null,
102
+ token
103
+ }),
104
+ // deprecated
105
+ resumeWithError: error => resume({
106
+ error,
107
+ token: null
108
+ }),
109
+ resumeWithSuccess: token => resume({
110
+ error: null,
111
+ token
112
+ })
113
+ });
114
+ } catch (e) {
115
+ console.log('failed to parse json', e);
116
+ }
117
+ });
118
+ }
119
+
120
+ function actionResume(request) {
121
+ const data = JSON.stringify(request);
122
+ NativeModule.actionResume(data);
123
+ }
124
+
125
+ function configureOnClientSessionActions(callback = (_, __) => {
126
+ NativeModule.configureOnClientSessionActions(___ => {
127
+ actionResume({
128
+ error: null,
129
+ token: null
130
+ });
131
+ configureOnClientSessionActions(callback);
132
+ });
133
+ }) {
134
+ NativeModule.configureOnClientSessionActions(data => {
135
+ try {
136
+ const parsedData = JSON.parse(data);
137
+ callback(parsedData, {
138
+ handleError: error => actionResume({
139
+ error,
140
+ token: null
141
+ }),
142
+ handleSuccess: () => actionResume({
143
+ error: null,
144
+ token: null
145
+ }),
146
+ handleNewClientToken: token => actionResume({
147
+ error: null,
148
+ token
149
+ }),
150
+ // deprecated
151
+ resumeWithError: error => actionResume({
152
+ error,
153
+ token: null
154
+ }),
155
+ resumeWithSuccess: token => actionResume({
156
+ error: null,
157
+ token
158
+ })
159
+ });
160
+ configureOnClientSessionActions(callback);
161
+ } catch (e) {
162
+ console.log('[OnClientSessionActions]', 'failed to parse json', e);
163
+ }
164
+ });
165
+ }
166
+
167
+ function configureOnResumeSuccess(callback = (_, __) => {}) {
168
+ NativeModule.configureOnResumeSuccess(paymentMethodToken => {
169
+ try {
170
+ callback(paymentMethodToken, {
171
+ handleError: error => resume({
172
+ error,
173
+ token: null
174
+ }),
175
+ handleSuccess: () => resume({
176
+ error: null,
177
+ token: null
178
+ }),
179
+ handleNewClientToken: token => resume({
180
+ error: null,
181
+ token
182
+ }),
183
+ // deprecated
184
+ resumeWithError: error => resume({
185
+ error,
186
+ token: null
93
187
  }),
94
188
  resumeWithSuccess: token => resume({
95
- error: false,
189
+ error: null,
96
190
  token
97
191
  })
98
192
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["Primer.ts"],"names":["PrimerRN","NativeModule","NativeModules","PrimerNativeMapping","showUniversalCheckout","token","config","configureIntent","vault","paymentMethod","configure","initialize","showVaultManager","showPaymentMethod","intent","fetchSavedPaymentInstruments","dispose","configureTheme","theme","configureSettings","settings","configureOnVaultSuccess","onTokenAddedToVault","configureOnDismiss","onDismiss","configureOnError","onError","configureOnTokenizeSuccess","onTokenizeSuccess","configureOnSavedPaymentInstrumentsFetched","onSavedPaymentInstrumentsFetched","data","JSON","stringify","resume","request","callback","_","__","parsedData","parse","resumeWithError","error","resumeWithSuccess","e","console","log","configureOnPrimerError"],"mappings":";;;;;;;AAAA;;AAkBA;;AAEA,MAAM;AAAEA,EAAAA,QAAQ,EAAEC;AAAZ,IAA6BC,0BAAnC;AAEO,MAAMC,mBAA4B,GAAG;AAC1CC,EAAAA,qBAAqB,CAACC,KAAD,EAAgBC,MAAhB,EAA4C;AAC/DC,IAAAA,eAAe,CAAC;AAAEC,MAAAA,KAAK,EAAE,KAAT;AAAgBC,MAAAA,aAAa,EAAE;AAA/B,KAAD,CAAf;AACAC,IAAAA,SAAS,CAACJ,MAAD,CAAT;AACAL,IAAAA,YAAY,CAACU,UAAb,CAAwBN,KAAxB;AACD,GALyC;;AAO1CO,EAAAA,gBAAgB,CAACP,KAAD,EAAgBC,MAAhB,EAA4C;AAC1DC,IAAAA,eAAe,CAAC;AAAEC,MAAAA,KAAK,EAAE,IAAT;AAAeC,MAAAA,aAAa,EAAE;AAA9B,KAAD,CAAf;AACAC,IAAAA,SAAS,CAACJ,MAAD,CAAT;AACAL,IAAAA,YAAY,CAACU,UAAb,CAAwBN,KAAxB;AACD,GAXyC;;AAa1CQ,EAAAA,iBAAiB,CACfR,KADe,EAEfS,MAFe,EAGfR,MAHe,EAIT;AACNC,IAAAA,eAAe,CAACO,MAAD,CAAf;AACAJ,IAAAA,SAAS,CAACJ,MAAD,CAAT;AACAL,IAAAA,YAAY,CAACU,UAAb,CAAwBN,KAAxB;AACD,GArByC;;AAuB1CU,EAAAA,4BAA4B,CAACV,KAAD,EAAgBC,MAAhB,EAA4C;AACtEI,IAAAA,SAAS,CAACJ,MAAD,CAAT;AACAL,IAAAA,YAAY,CAACc,4BAAb,CAA0CV,KAA1C;AACD,GA1ByC;;AA4B1CW,EAAAA,OAAO,GAAS;AACdf,IAAAA,YAAY,CAACe,OAAb;AACD;;AA9ByC,CAArC;;;AAiCP,SAASN,SAAT,CAAmBJ,MAAnB,EAA+C;AAC7CW,EAAAA,cAAc,CAACX,MAAM,CAACY,KAAR,CAAd;AACAC,EAAAA,iBAAiB,CAACb,MAAM,CAACc,QAAR,CAAjB;AACAC,EAAAA,uBAAuB,CAACf,MAAM,CAACgB,mBAAR,CAAvB;AACAC,EAAAA,kBAAkB,CAACjB,MAAM,CAACkB,SAAR,CAAlB;AACAC,EAAAA,gBAAgB,CAACnB,MAAM,CAACoB,OAAR,CAAhB;AACAC,EAAAA,0BAA0B,CAACrB,MAAM,CAACsB,iBAAR,CAA1B;AACAC,EAAAA,yCAAyC,CACvCvB,MAAM,CAACwB,gCADgC,CAAzC;AAGD;;AAED,SAASX,iBAAT,CAA2BC,QAAwB,GAAG,EAAtD,EAAgE;AAC9D,QAAMW,IAAI,GAAGC,IAAI,CAACC,SAAL,CAAeb,QAAf,CAAb;AACAnB,EAAAA,YAAY,CAACkB,iBAAb,CAA+BY,IAA/B;AACD;;AAED,SAASd,cAAT,CAAwBC,KAAkB,GAAG,EAA7C,EAAuD;AACrD,QAAMa,IAAI,GAAGC,IAAI,CAACC,SAAL,CAAef,KAAf,CAAb;AACAjB,EAAAA,YAAY,CAACgB,cAAb,CAA4Bc,IAA5B;AACD;;AAED,SAASxB,eAAT,CACEO,MAAoB,GAAG;AAAEN,EAAAA,KAAK,EAAE,KAAT;AAAgBC,EAAAA,aAAa,EAAE;AAA/B,CADzB,EAEQ;AACN,QAAMsB,IAAI,GAAGC,IAAI,CAACC,SAAL,CAAenB,MAAf,CAAb;AACAb,EAAAA,YAAY,CAACM,eAAb,CAA6BwB,IAA7B;AACD;;AAED,SAASG,MAAT,CAAgBC,OAAhB,EAAwC;AACtC,QAAMJ,IAAI,GAAGC,IAAI,CAACC,SAAL,CAAeE,OAAf,CAAb;AACAlC,EAAAA,YAAY,CAACiC,MAAb,CAAoBH,IAApB;AACD;;AAED,SAASJ,0BAAT,CACES,QAAmC,GAAG,CAACC,CAAD,EAAIC,EAAJ,KAAW,CAAE,CADrD,EAEE;AACArC,EAAAA,YAAY,CAAC0B,0BAAb,CAAyCI,IAAD,IAAe;AACrD,QAAI;AACF,YAAMQ,UAAU,GAAGP,IAAI,CAACQ,KAAL,CAAWT,IAAX,CAAnB;AACAK,MAAAA,QAAQ,CAACG,UAAD,EAAa;AACnBE,QAAAA,eAAe,EAAE,MAAMP,MAAM,CAAC;AAAEQ,UAAAA,KAAK,EAAE,IAAT;AAAerC,UAAAA,KAAK,EAAE;AAAtB,SAAD,CADV;AAEnBsC,QAAAA,iBAAiB,EAAGtC,KAAD,IAAW6B,MAAM,CAAC;AAAEQ,UAAAA,KAAK,EAAE,KAAT;AAAgBrC,UAAAA;AAAhB,SAAD;AAFjB,OAAb,CAAR;AAID,KAND,CAME,OAAOuC,CAAP,EAAU;AACVC,MAAAA,OAAO,CAACC,GAAR,CAAY,sBAAZ,EAAoCF,CAApC;AACD;AACF,GAVD;AAWD;;AAED,SAASvB,uBAAT,CACEe,QAAqC,GAAIC,CAAD,IAAO,CAAE,CADnD,EAEE;AACApC,EAAAA,YAAY,CAACoB,uBAAb,CAAsCU,IAAD,IAAe;AAClD,8BAAsCA,IAAtC,EAA4CK,QAA5C;AACD,GAFD;AAGD;;AAED,SAASb,kBAAT,CAA4Ba,QAA2B,GAAG,MAAM,CAAE,CAAlE,EAAoE;AAClEnC,EAAAA,YAAY,CAACsB,kBAAb,CAAiCc,CAAD,IAAYD,QAAQ,EAApD;AACD;;AAED,SAASX,gBAAT,CAA0BW,QAA+B,GAAIC,CAAD,IAAO,CAAE,CAArE,EAAuE;AACrEpC,EAAAA,YAAY,CAAC8C,sBAAb,CAAqChB,IAAD,IAAe;AACjD,8BAA2BA,IAA3B,EAAiCK,QAAjC;AACD,GAFD;AAGD;;AAED,SAASP,yCAAT,CACEO,QAAkD,GAAIC,CAAD,IAAO,CAAE,CADhE,EAEE;AACApC,EAAAA,YAAY,CAAC4B,yCAAb,CAAwDE,IAAD,IAAe;AACpE,8BAAwCA,IAAxC,EAA8CK,QAA9C;AACD,GAFD;AAGD","sourcesContent":["import { NativeModules } from 'react-native';\nimport type { PaymentInstrumentToken } from './models/payment-instrument-token';\nimport type { IPrimer } from './models/primer';\nimport type {\n OnDismissCallback,\n OnPrimerErrorCallback,\n OnSavedPaymentInstrumentsFetchedCallback,\n OnTokenAddedToVaultCallback,\n OnTokenizeSuccessCallback,\n} from './models/primer-callbacks';\nimport type { PrimerConfig } from './models/primer-config';\nimport type { PrimerError } from './models/primer-error';\nimport type {\n PrimerIntent,\n PrimerPaymentMethodIntent,\n} from './models/primer-intent';\nimport type { PrimerSettings } from './models/primer-settings';\nimport type { PrimerTheme } from './models/primer-theme';\nimport { parseCallback } from './utils';\n\nconst { PrimerRN: NativeModule } = NativeModules;\n\nexport const PrimerNativeMapping: IPrimer = {\n showUniversalCheckout(token: String, config: PrimerConfig): void {\n configureIntent({ vault: false, paymentMethod: 'Any' });\n configure(config);\n NativeModule.initialize(token);\n },\n\n showVaultManager(token: String, config: PrimerConfig): void {\n configureIntent({ vault: true, paymentMethod: 'Any' });\n configure(config);\n NativeModule.initialize(token);\n },\n\n showPaymentMethod(\n token: String,\n intent: PrimerPaymentMethodIntent,\n config: PrimerConfig\n ): void {\n configureIntent(intent);\n configure(config);\n NativeModule.initialize(token);\n },\n\n fetchSavedPaymentInstruments(token: String, config: PrimerConfig): void {\n configure(config);\n NativeModule.fetchSavedPaymentInstruments(token);\n },\n\n dispose(): void {\n NativeModule.dispose();\n },\n};\n\nfunction configure(config: PrimerConfig): void {\n configureTheme(config.theme);\n configureSettings(config.settings);\n configureOnVaultSuccess(config.onTokenAddedToVault);\n configureOnDismiss(config.onDismiss);\n configureOnError(config.onError);\n configureOnTokenizeSuccess(config.onTokenizeSuccess);\n configureOnSavedPaymentInstrumentsFetched(\n config.onSavedPaymentInstrumentsFetched\n );\n}\n\nfunction configureSettings(settings: PrimerSettings = {}): void {\n const data = JSON.stringify(settings);\n NativeModule.configureSettings(data);\n}\n\nfunction configureTheme(theme: PrimerTheme = {}): void {\n const data = JSON.stringify(theme);\n NativeModule.configureTheme(data);\n}\n\nfunction configureIntent(\n intent: PrimerIntent = { vault: false, paymentMethod: 'Any' }\n): void {\n const data = JSON.stringify(intent);\n NativeModule.configureIntent(data);\n}\n\nfunction resume(request: ResumeRequest) {\n const data = JSON.stringify(request);\n NativeModule.resume(data);\n}\n\nfunction configureOnTokenizeSuccess(\n callback: OnTokenizeSuccessCallback = (_, __) => {}\n) {\n NativeModule.configureOnTokenizeSuccess((data: any) => {\n try {\n const parsedData = JSON.parse(data) as PaymentInstrumentToken;\n callback(parsedData, {\n resumeWithError: () => resume({ error: true, token: '' }),\n resumeWithSuccess: (token) => resume({ error: false, token }),\n });\n } catch (e) {\n console.log('failed to parse json', e);\n }\n });\n}\n\nfunction configureOnVaultSuccess(\n callback: OnTokenAddedToVaultCallback = (_) => {}\n) {\n NativeModule.configureOnVaultSuccess((data: any) => {\n parseCallback<PaymentInstrumentToken>(data, callback);\n });\n}\n\nfunction configureOnDismiss(callback: OnDismissCallback = () => {}) {\n NativeModule.configureOnDismiss((_: any) => callback());\n}\n\nfunction configureOnError(callback: OnPrimerErrorCallback = (_) => {}) {\n NativeModule.configureOnPrimerError((data: any) => {\n parseCallback<PrimerError>(data, callback);\n });\n}\n\nfunction configureOnSavedPaymentInstrumentsFetched(\n callback: OnSavedPaymentInstrumentsFetchedCallback = (_) => {}\n) {\n NativeModule.configureOnSavedPaymentInstrumentsFetched((data: any) => {\n parseCallback<PaymentInstrumentToken[]>(data, callback);\n });\n}\n\ninterface ResumeRequest {\n error: boolean;\n token?: string;\n}\n"]}
1
+ {"version":3,"sources":["Primer.ts"],"names":["PrimerRN","NativeModule","NativeModules","PrimerNativeMapping","showUniversalCheckout","token","config","configureIntent","vault","paymentMethod","configure","initialize","showVaultManager","showPaymentMethod","intent","fetchSavedPaymentInstruments","dispose","configureTheme","theme","configureSettings","settings","configureOnVaultSuccess","onTokenAddedToVault","configureOnDismiss","onDismiss","configureOnError","onError","configureOnTokenizeSuccess","onTokenizeSuccess","configureOnClientSessionActions","onClientSessionActions","configureOnResumeSuccess","onResumeSuccess","configureOnSavedPaymentInstrumentsFetched","onSavedPaymentInstrumentsFetched","data","JSON","stringify","resume","request","callback","_","__","parsedData","parse","handleError","error","handleSuccess","handleNewClientToken","resumeWithError","resumeWithSuccess","e","console","log","actionResume","___","paymentMethodToken","configureOnPrimerError"],"mappings":"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","sourcesContent":["import { NativeModules } from 'react-native';\nimport type { ClientSessionActionsRequest } from './models/client-session-actions-request';\nimport type { PaymentInstrumentToken } from './models/payment-instrument-token';\nimport type { IPrimer } from './models/primer';\nimport type {\n OnClientSessionActionsCallback,\n OnDismissCallback,\n OnPrimerErrorCallback,\n OnSavedPaymentInstrumentsFetchedCallback,\n OnTokenAddedToVaultCallback,\n OnTokenizeSuccessCallback,\n} from './models/primer-callbacks';\nimport type { PrimerConfig } from './models/primer-config';\nimport type { PrimerError } from './models/primer-error';\nimport type {\n PrimerIntent,\n PrimerPaymentMethodIntent,\n} from './models/primer-intent';\nimport type { PrimerSettings } from './models/primer-settings';\nimport type { PrimerTheme } from './models/primer-theme';\nimport { parseCallback } from './utils';\n\nconst { PrimerRN: NativeModule } = NativeModules;\n\nexport const PrimerNativeMapping: IPrimer = {\n showUniversalCheckout(token: String, config: PrimerConfig): void {\n configureIntent({ vault: false, paymentMethod: 'Any' });\n configure(config);\n NativeModule.initialize(token);\n },\n\n showVaultManager(token: String, config: PrimerConfig): void {\n configureIntent({ vault: true, paymentMethod: 'Any' });\n configure(config);\n NativeModule.initialize(token);\n },\n\n showPaymentMethod(\n token: String,\n intent: PrimerPaymentMethodIntent,\n config: PrimerConfig\n ): void {\n configureIntent(intent);\n configure(config);\n NativeModule.initialize(token);\n },\n\n fetchSavedPaymentInstruments(token: String, config: PrimerConfig): void {\n configure(config);\n NativeModule.fetchSavedPaymentInstruments(token);\n },\n\n dispose(): void {\n NativeModule.dispose();\n },\n};\n\nfunction configure(config: PrimerConfig): void {\n configureTheme(config.theme);\n configureSettings(config.settings);\n configureOnVaultSuccess(config.onTokenAddedToVault);\n configureOnDismiss(config.onDismiss);\n configureOnError(config.onError);\n configureOnTokenizeSuccess(config.onTokenizeSuccess);\n configureOnClientSessionActions(config.onClientSessionActions);\n configureOnResumeSuccess(config.onResumeSuccess);\n configureOnSavedPaymentInstrumentsFetched(\n config.onSavedPaymentInstrumentsFetched\n );\n}\n\nfunction configureSettings(settings: PrimerSettings = {}): void {\n const data = JSON.stringify(settings);\n NativeModule.configureSettings(data);\n}\n\nfunction configureTheme(theme: PrimerTheme = {}): void {\n const data = JSON.stringify(theme);\n NativeModule.configureTheme(data);\n}\n\nfunction configureIntent(\n intent: PrimerIntent = { vault: false, paymentMethod: 'Any' }\n): void {\n const data = JSON.stringify(intent);\n NativeModule.configureIntent(data);\n}\n\nfunction resume(request: ResumeRequest) {\n const data = JSON.stringify(request);\n NativeModule.resume(data);\n}\n\nfunction configureOnTokenizeSuccess(\n callback: OnTokenizeSuccessCallback = (_, __) => {}\n) {\n NativeModule.configureOnTokenizeSuccess((data: any) => {\n try {\n const parsedData = JSON.parse(data) as PaymentInstrumentToken;\n callback(parsedData, {\n handleError: (error) => resume({ error, token: null }),\n handleSuccess: () => resume({ error: null, token: null }),\n handleNewClientToken: (token) => resume({ error: null, token }),\n // deprecated\n resumeWithError: (error) => resume({ error, token: null }),\n resumeWithSuccess: (token) => resume({ error: null, token }),\n });\n } catch (e) {\n console.log('failed to parse json', e);\n }\n });\n}\n\nfunction actionResume(request: ResumeRequest) {\n const data = JSON.stringify(request);\n NativeModule.actionResume(data);\n}\n\nfunction configureOnClientSessionActions(\n callback: OnClientSessionActionsCallback = (_, __) => {\n NativeModule.configureOnClientSessionActions((___: any) => {\n actionResume({ error: null, token: null });\n configureOnClientSessionActions(callback);\n });\n }\n) {\n NativeModule.configureOnClientSessionActions((data: any) => {\n try {\n const parsedData = JSON.parse(data) as ClientSessionActionsRequest;\n callback(parsedData, {\n handleError: (error) => actionResume({ error, token: null }),\n handleSuccess: () => actionResume({ error: null, token: null }),\n handleNewClientToken: (token) => actionResume({ error: null, token }),\n // deprecated\n resumeWithError: (error) => actionResume({ error, token: null }),\n resumeWithSuccess: (token) => actionResume({ error: null, token }),\n });\n configureOnClientSessionActions(callback);\n } catch (e) {\n console.log('[OnClientSessionActions]', 'failed to parse json', e);\n }\n });\n}\n\nfunction configureOnResumeSuccess(\n callback: OnTokenizeSuccessCallback = (_, __) => {}\n) {\n NativeModule.configureOnResumeSuccess((paymentMethodToken: any) => {\n try {\n callback(paymentMethodToken, {\n handleError: (error) => resume({ error, token: null }),\n handleSuccess: () => resume({ error: null, token: null }),\n handleNewClientToken: (token) => resume({ error: null, token }),\n // deprecated\n resumeWithError: (error) => resume({ error, token: null }),\n resumeWithSuccess: (token) => resume({ error: null, token }),\n });\n } catch (e) {\n console.log('failed to parse json', e);\n }\n });\n}\n\nfunction configureOnVaultSuccess(\n callback: OnTokenAddedToVaultCallback = (_) => {}\n) {\n NativeModule.configureOnVaultSuccess((data: any) => {\n parseCallback<PaymentInstrumentToken>(data, callback);\n });\n}\n\nfunction configureOnDismiss(callback: OnDismissCallback = () => {}) {\n NativeModule.configureOnDismiss((_: any) => callback());\n}\n\nfunction configureOnError(callback: OnPrimerErrorCallback = (_) => {}) {\n NativeModule.configureOnPrimerError((data: any) => {\n parseCallback<PrimerError>(data, callback);\n });\n}\n\nfunction configureOnSavedPaymentInstrumentsFetched(\n callback: OnSavedPaymentInstrumentsFetchedCallback = (_) => {}\n) {\n NativeModule.configureOnSavedPaymentInstrumentsFetched((data: any) => {\n parseCallback<PaymentInstrumentToken[]>(data, callback);\n });\n}\n\ninterface ResumeRequest {\n error: string | null;\n token: string | null;\n}\n"]}