@primer-io/react-native 0.16.2 → 2.1.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.
Files changed (233) hide show
  1. package/README.md +114 -24
  2. package/android/build.gradle +10 -2
  3. package/android/gradle.properties +3 -3
  4. package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +124 -150
  5. package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +212 -128
  6. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +244 -0
  7. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +275 -0
  8. package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +2 -2
  9. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutDataRN.kt +12 -0
  10. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +54 -0
  11. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +6 -9
  12. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEvents.kt +13 -0
  13. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt +4 -4
  14. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentMethodDataRN.kt +8 -0
  15. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +43 -125
  16. package/android/src/main/java/com/primerioreactnative/extensions/Payment.kt +6 -0
  17. package/android/src/main/java/com/primerioreactnative/extensions/PrimerAddress.kt +15 -0
  18. package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutData.kt +7 -0
  19. package/android/src/main/java/com/primerioreactnative/extensions/PrimerClientSession.kt +15 -0
  20. package/android/src/main/java/com/primerioreactnative/extensions/PrimerCustomer.kt +13 -0
  21. package/android/src/main/java/com/primerioreactnative/extensions/PrimerLineItem.kt +8 -0
  22. package/android/src/main/java/com/primerioreactnative/extensions/PrimerOrder.kt +6 -0
  23. package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodData.kt +7 -0
  24. package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +11 -7
  25. package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +1 -3
  26. package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +45 -0
  27. package/android/src/main/java/com/primerioreactnative/utils/PrimerHeadlessUniversalCheckoutImplementedRNCallbacks.kt +31 -0
  28. package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +16 -6
  29. package/ios/Core/ReactNative-Bridging-Header.h +10 -0
  30. package/ios/DataModels/ImplementedRNCallbacks.swift +56 -0
  31. package/ios/DataModels/PrimerErrorRN.swift +0 -17
  32. package/ios/DataModels/PrimerSettingsRN.swift +78 -156
  33. package/ios/DataModels/PrimerThemeRN.swift +1 -10
  34. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +33 -1
  35. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +306 -54
  36. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +5 -1
  37. package/ios/RNTPrimer.m +28 -12
  38. package/ios/RNTPrimer.swift +273 -222
  39. package/ios/ReactNative-Bridging-Header.h +4 -0
  40. package/ios/ReactNative.xcodeproj/project.pbxproj +14 -14
  41. package/lib/commonjs/Primer.js +206 -149
  42. package/lib/commonjs/Primer.js.map +1 -1
  43. package/lib/commonjs/RNPrimer.js +113 -41
  44. package/lib/commonjs/RNPrimer.js.map +1 -1
  45. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +240 -71
  46. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -1
  47. package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckout.js +197 -0
  48. package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
  49. package/lib/commonjs/headless_checkout/types.js +4 -0
  50. package/lib/commonjs/index.js +118 -24
  51. package/lib/commonjs/index.js.map +1 -1
  52. package/lib/commonjs/models/PrimerCheckoutData.js +9 -0
  53. package/lib/commonjs/models/PrimerCheckoutData.js.map +1 -0
  54. package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js +2 -0
  55. package/lib/commonjs/models/{action-request.js.map → PrimerCheckoutPaymentMethodData.js.map} +0 -0
  56. package/lib/commonjs/models/PrimerClientSession.js +2 -0
  57. package/lib/commonjs/models/{client-session-actions-request.js.map → PrimerClientSession.js.map} +0 -0
  58. package/lib/commonjs/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
  59. package/lib/commonjs/models/PrimerCountryCode.js.map +1 -0
  60. package/lib/commonjs/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
  61. package/lib/commonjs/models/PrimerCurrencyCode.js.map +1 -0
  62. package/lib/commonjs/models/PrimerError.js +28 -0
  63. package/lib/commonjs/models/PrimerError.js.map +1 -0
  64. package/lib/commonjs/models/{primer-settings.js → PrimerInterfaces.js} +1 -1
  65. package/lib/commonjs/models/{primer-callbacks.js.map → PrimerInterfaces.js.map} +0 -0
  66. package/lib/commonjs/models/PrimerPaymentMethodTokenData.js +14 -0
  67. package/lib/commonjs/models/PrimerPaymentMethodTokenData.js.map +1 -0
  68. package/lib/commonjs/models/PrimerSessionIntent.js +14 -0
  69. package/lib/commonjs/models/PrimerSessionIntent.js.map +1 -0
  70. package/lib/commonjs/models/{primer.js → PrimerSettings.js} +1 -1
  71. package/lib/commonjs/models/{primer-config.js.map → PrimerSettings.js.map} +0 -0
  72. package/lib/commonjs/models/PrimerTheme.js +2 -0
  73. package/lib/commonjs/models/{primer-request.js.map → PrimerTheme.js.map} +0 -0
  74. package/lib/commonjs/utils/index.js.map +1 -1
  75. package/lib/module/Primer.js +205 -136
  76. package/lib/module/Primer.js.map +1 -1
  77. package/lib/module/RNPrimer.js +113 -41
  78. package/lib/module/RNPrimer.js.map +1 -1
  79. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +243 -70
  80. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -1
  81. package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckout.js +188 -0
  82. package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
  83. package/lib/module/headless_checkout/types.js +1 -1
  84. package/lib/module/index.js +10 -5
  85. package/lib/module/index.js.map +1 -1
  86. package/lib/module/models/PrimerCheckoutData.js +7 -0
  87. package/lib/module/models/PrimerCheckoutData.js.map +1 -0
  88. package/lib/module/models/PrimerCheckoutPaymentMethodData.js +2 -0
  89. package/lib/{commonjs/models/primer-settings.js.map → module/models/PrimerCheckoutPaymentMethodData.js.map} +0 -0
  90. package/lib/module/models/PrimerClientSession.js +2 -0
  91. package/lib/{commonjs/models/primer-theme.js.map → module/models/PrimerClientSession.js.map} +0 -0
  92. package/lib/module/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
  93. package/lib/module/models/PrimerCountryCode.js.map +1 -0
  94. package/lib/module/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
  95. package/lib/module/models/PrimerCurrencyCode.js.map +1 -0
  96. package/lib/module/models/PrimerError.js +19 -0
  97. package/lib/module/models/PrimerError.js.map +1 -0
  98. package/lib/module/models/PrimerInterfaces.js +2 -0
  99. package/lib/{commonjs/models/primer.js.map → module/models/PrimerInterfaces.js.map} +0 -0
  100. package/lib/module/models/PrimerPaymentMethodTokenData.js +7 -0
  101. package/lib/module/models/PrimerPaymentMethodTokenData.js.map +1 -0
  102. package/lib/module/models/PrimerSessionIntent.js +7 -0
  103. package/lib/module/models/PrimerSessionIntent.js.map +1 -0
  104. package/lib/module/models/PrimerSettings.js +2 -0
  105. package/lib/module/models/{action-request.js.map → PrimerSettings.js.map} +0 -0
  106. package/lib/module/models/PrimerTheme.js +2 -0
  107. package/lib/module/models/{client-session-actions-request.js.map → PrimerTheme.js.map} +0 -0
  108. package/lib/module/utils/index.js.map +1 -1
  109. package/lib/typescript/MerchantExample/App.d.ts +11 -0
  110. package/lib/typescript/src/Primer.d.ts +2 -0
  111. package/lib/typescript/{PrimerInput.d.ts → src/PrimerInput.d.ts} +0 -0
  112. package/lib/typescript/src/RNPrimer.d.ts +32 -0
  113. package/lib/typescript/{RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts → src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts} +0 -0
  114. package/lib/typescript/src/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +11 -0
  115. package/lib/typescript/src/headless_checkout/RNPrimerHeadlessUniversalCheckout.d.ts +22 -0
  116. package/lib/typescript/src/headless_checkout/types.d.ts +22 -0
  117. package/lib/typescript/src/index.d.ts +10 -0
  118. package/lib/typescript/src/models/PrimerCheckoutData.d.ts +15 -0
  119. package/lib/typescript/src/models/PrimerCheckoutPaymentMethodData.d.ts +5 -0
  120. package/lib/typescript/src/models/PrimerClientSession.d.ts +45 -0
  121. package/lib/typescript/{models/utils/countryCode.d.ts → src/models/PrimerCountryCode.d.ts} +1 -1
  122. package/lib/typescript/{models/utils/currencyCode.d.ts → src/models/PrimerCurrencyCode.d.ts} +1 -1
  123. package/lib/typescript/src/models/PrimerError.d.ts +11 -0
  124. package/lib/typescript/src/models/PrimerInterfaces.d.ts +27 -0
  125. package/lib/typescript/src/models/PrimerPaymentMethodTokenData.d.ts +116 -0
  126. package/lib/typescript/src/models/PrimerSessionIntent.d.ts +4 -0
  127. package/lib/typescript/src/models/PrimerSettings.d.ts +77 -0
  128. package/lib/typescript/{models/primer-theme.d.ts → src/models/PrimerTheme.d.ts} +1 -1
  129. package/lib/typescript/{utils → src/utils}/index.d.ts +1 -1
  130. package/package.json +1 -1
  131. package/primer-io-react-native.podspec +1 -1
  132. package/src/Primer.ts +231 -170
  133. package/src/RNPrimer.ts +148 -51
  134. package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +281 -94
  135. package/src/headless_checkout/RNPrimerHeadlessUniversalCheckout.ts +252 -0
  136. package/src/headless_checkout/types.ts +26 -12
  137. package/src/index.tsx +36 -8
  138. package/src/models/PrimerCheckoutData.ts +18 -0
  139. package/src/models/PrimerCheckoutPaymentMethodData.ts +5 -0
  140. package/src/models/PrimerClientSession.ts +53 -0
  141. package/src/models/{utils/countryCode.ts → PrimerCountryCode.ts} +1 -1
  142. package/src/models/{utils/currencyCode.ts → PrimerCurrencyCode.ts} +1 -1
  143. package/src/models/PrimerError.ts +20 -0
  144. package/src/models/PrimerInterfaces.ts +36 -0
  145. package/src/models/PrimerPaymentMethodTokenData.ts +130 -0
  146. package/src/models/PrimerSessionIntent.ts +4 -0
  147. package/src/models/PrimerSettings.ts +108 -0
  148. package/src/models/{primer-theme.ts → PrimerTheme.ts} +1 -1
  149. package/src/utils/index.ts +1 -1
  150. package/android/src/main/java/com/primerioreactnative/PrimerHeadlessUniversalCheckout.kt +0 -198
  151. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEventsRN.kt +0 -11
  152. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerIntentRN.kt +0 -80
  153. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerOnClientSessionActionsRequestRN.kt +0 -65
  154. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerRequestRN.kt +0 -9
  155. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerThemeRN.kt +0 -51
  156. package/android/src/main/java/com/primerioreactnative/huc/extensions/Map.kt +0 -10
  157. package/android/src/main/java/com/primerioreactnative/utils/Keys.kt +0 -7
  158. package/android/src/main/java/com/primerioreactnative/utils/PrimerEventQueueRN.kt +0 -30
  159. package/ios/DataModels/PrimerIntentRN.swift +0 -10
  160. package/ios/DataModels/PrimerRequestRN.swift +0 -14
  161. package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +0 -110
  162. package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +0 -1
  163. package/lib/commonjs/models/action-request.js +0 -2
  164. package/lib/commonjs/models/client-session-actions-request.js +0 -2
  165. package/lib/commonjs/models/payment-instrument-token.js +0 -30
  166. package/lib/commonjs/models/payment-instrument-token.js.map +0 -1
  167. package/lib/commonjs/models/primer-callbacks.js +0 -6
  168. package/lib/commonjs/models/primer-config.js +0 -6
  169. package/lib/commonjs/models/primer-error.js +0 -4
  170. package/lib/commonjs/models/primer-error.js.map +0 -1
  171. package/lib/commonjs/models/primer-intent.js +0 -4
  172. package/lib/commonjs/models/primer-intent.js.map +0 -1
  173. package/lib/commonjs/models/primer-request.js +0 -2
  174. package/lib/commonjs/models/primer-theme.js +0 -2
  175. package/lib/commonjs/models/utils/countryCode.js.map +0 -1
  176. package/lib/commonjs/models/utils/currencyCode.js.map +0 -1
  177. package/lib/commonjs/models/utils/redirectScheme.js +0 -4
  178. package/lib/commonjs/models/utils/redirectScheme.js.map +0 -1
  179. package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +0 -98
  180. package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +0 -1
  181. package/lib/module/models/action-request.js +0 -2
  182. package/lib/module/models/client-session-actions-request.js +0 -2
  183. package/lib/module/models/payment-instrument-token.js +0 -28
  184. package/lib/module/models/payment-instrument-token.js.map +0 -1
  185. package/lib/module/models/primer-callbacks.js +0 -2
  186. package/lib/module/models/primer-callbacks.js.map +0 -1
  187. package/lib/module/models/primer-config.js +0 -2
  188. package/lib/module/models/primer-config.js.map +0 -1
  189. package/lib/module/models/primer-error.js +0 -2
  190. package/lib/module/models/primer-error.js.map +0 -1
  191. package/lib/module/models/primer-intent.js +0 -2
  192. package/lib/module/models/primer-intent.js.map +0 -1
  193. package/lib/module/models/primer-request.js +0 -2
  194. package/lib/module/models/primer-request.js.map +0 -1
  195. package/lib/module/models/primer-settings.js +0 -2
  196. package/lib/module/models/primer-settings.js.map +0 -1
  197. package/lib/module/models/primer-theme.js +0 -2
  198. package/lib/module/models/primer-theme.js.map +0 -1
  199. package/lib/module/models/primer.js +0 -2
  200. package/lib/module/models/primer.js.map +0 -1
  201. package/lib/module/models/utils/countryCode.js.map +0 -1
  202. package/lib/module/models/utils/currencyCode.js.map +0 -1
  203. package/lib/module/models/utils/redirectScheme.js +0 -2
  204. package/lib/module/models/utils/redirectScheme.js.map +0 -1
  205. package/lib/typescript/Primer.d.ts +0 -15
  206. package/lib/typescript/RNPrimer.d.ts +0 -24
  207. package/lib/typescript/headless_checkout/NativePrimerHeadlessUniversalCheckout.d.ts +0 -13
  208. package/lib/typescript/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +0 -13
  209. package/lib/typescript/headless_checkout/types.d.ts +0 -16
  210. package/lib/typescript/index.d.ts +0 -5
  211. package/lib/typescript/models/action-request.d.ts +0 -10
  212. package/lib/typescript/models/client-session-actions-request.d.ts +0 -15
  213. package/lib/typescript/models/payment-instrument-token.d.ts +0 -76
  214. package/lib/typescript/models/primer-callbacks.d.ts +0 -10
  215. package/lib/typescript/models/primer-config.d.ts +0 -44
  216. package/lib/typescript/models/primer-error.d.ts +0 -8
  217. package/lib/typescript/models/primer-intent.d.ts +0 -13
  218. package/lib/typescript/models/primer-request.d.ts +0 -7
  219. package/lib/typescript/models/primer-settings.d.ts +0 -65
  220. package/lib/typescript/models/primer.d.ts +0 -33
  221. package/lib/typescript/models/utils/redirectScheme.d.ts +0 -3
  222. package/src/headless_checkout/NativePrimerHeadlessUniversalCheckout.ts +0 -132
  223. package/src/models/action-request.ts +0 -12
  224. package/src/models/client-session-actions-request.ts +0 -21
  225. package/src/models/payment-instrument-token.ts +0 -109
  226. package/src/models/primer-callbacks.ts +0 -14
  227. package/src/models/primer-config.ts +0 -55
  228. package/src/models/primer-error.ts +0 -19
  229. package/src/models/primer-intent.ts +0 -49
  230. package/src/models/primer-request.ts +0 -7
  231. package/src/models/primer-settings.ts +0 -73
  232. package/src/models/primer.ts +0 -41
  233. package/src/models/utils/redirectScheme.ts +0 -5
@@ -10,30 +10,43 @@ import PrimerSDK
10
10
 
11
11
  @objc
12
12
  enum PrimerHeadlessUniversalCheckoutEvents: Int, CaseIterable {
13
- case clientSessionDidSetUpSuccessfully = 0
14
- case preparationStarted
15
- case paymentMethodPresented
16
- case tokenizationStarted
17
- case tokenizationSucceeded
18
- case resume
19
- case error
13
+
14
+ case onHUCTokenizeStart = 0
15
+ case onHUCPrepareStart
16
+ case onHUCAvailablePaymentMethodsLoaded
17
+ case onHUCPaymentMethodShow
18
+ case onTokenizeSuccess
19
+ case onResumeSuccess
20
+ case onBeforePaymentCreate
21
+ case onBeforeClientSessionUpdate
22
+ case onClientSessionUpdate
23
+ case onCheckoutComplete
24
+ case onError
20
25
 
21
26
  var stringValue: String {
22
27
  switch self {
23
- case .clientSessionDidSetUpSuccessfully:
24
- return "clientSessionDidSetUpSuccessfully"
25
- case .preparationStarted:
26
- return "preparationStarted"
27
- case .paymentMethodPresented:
28
- return "paymentMethodPresented"
29
- case .tokenizationStarted:
30
- return "tokenizationStarted"
31
- case .tokenizationSucceeded:
32
- return "tokenizationSucceeded"
33
- case .resume:
34
- return "resume"
35
- case .error:
36
- return "error"
28
+ case .onHUCPrepareStart:
29
+ return "onHUCPrepareStart"
30
+ case .onHUCTokenizeStart:
31
+ return "onHUCTokenizeStart"
32
+ case .onHUCPaymentMethodShow:
33
+ return "onHUCPaymentMethodShow"
34
+ case .onTokenizeSuccess:
35
+ return "onTokenizeSuccess"
36
+ case .onResumeSuccess:
37
+ return "onResumeSuccess"
38
+ case .onBeforePaymentCreate:
39
+ return "onBeforePaymentCreate"
40
+ case .onBeforeClientSessionUpdate:
41
+ return "onBeforeClientSessionUpdate"
42
+ case .onClientSessionUpdate:
43
+ return "onClientSessionUpdate"
44
+ case .onCheckoutComplete:
45
+ return "onCheckoutComplete"
46
+ case .onHUCAvailablePaymentMethodsLoaded:
47
+ return "onHUCAvailablePaymentMethodsLoaded"
48
+ case .onError:
49
+ return "onError"
37
50
  }
38
51
  }
39
52
  }
@@ -41,7 +54,11 @@ enum PrimerHeadlessUniversalCheckoutEvents: Int, CaseIterable {
41
54
  @objc(PrimerHeadlessUniversalCheckout)
42
55
  class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
43
56
 
44
- private var resumeTokenCompletion: ((_ resumeToken: String) -> Void)?
57
+ private var primerWillCreatePaymentWithDataDecisionHandler: ((_ errorMessage: String?) -> Void)?
58
+ private var primerDidTokenizePaymentMethodDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
59
+ private var primerDidResumeWithDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
60
+ private var primerDidFailWithErrorDecisionHandler: ((_ errorMessage: String) -> Void)?
61
+ private var implementedRNCallbacks: ImplementedRNCallbacks?
45
62
 
46
63
  override class func requiresMainQueueSetup() -> Bool {
47
64
  return true
@@ -67,9 +84,7 @@ class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
67
84
  var settings: PrimerSettings?
68
85
  if let settingsStr = settingsStr {
69
86
  do {
70
- let settingsData = settingsStr.data(using: .utf8)!
71
- let settingsRN = try JSONDecoder().decode(PrimerSettingsRN.self, from: settingsData)
72
- settings = settingsRN.asPrimerSettings()
87
+ settings = try PrimerSettings.initialize(with: settingsStr)
73
88
  } catch {
74
89
  errorCallback([error.rnError])
75
90
  return
@@ -85,11 +100,6 @@ class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
85
100
  }
86
101
  }
87
102
 
88
- @objc
89
- public func resumeWithClientToken(_ resumeToken: String) {
90
- self.resumeTokenCompletion?(resumeToken)
91
- }
92
-
93
103
  @objc
94
104
  public func getAssetForPaymentMethodType(_ paymentMethodTypeStr: String,
95
105
  assetType assetTypeStr: String,
@@ -98,7 +108,7 @@ class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
98
108
  {
99
109
  do {
100
110
  try validate(assetStr: paymentMethodTypeStr, assetTypeStr: assetTypeStr)
101
- let paymentMethodType = PaymentMethodConfigType(rawValue: paymentMethodTypeStr)
111
+ let paymentMethodType = PrimerPaymentMethodType(rawValue: paymentMethodTypeStr)
102
112
 
103
113
  guard let image = PrimerHeadlessUniversalCheckout.getAsset(for: paymentMethodType, assetType: PrimerAsset.ImageType(rawValue: assetTypeStr)!) else {
104
114
  let err = NativeError(errorId: "missing-asset", errorDescription: "Failed to find \(assetTypeStr) for \(paymentMethodTypeStr)", recoverySuggestion: nil)
@@ -143,9 +153,18 @@ class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
143
153
  }
144
154
 
145
155
  @objc
146
- public func showPaymentMethod(_ paymentMethodTypeStr: String) {
156
+ public func showPaymentMethod(_ paymentMethodTypeStr: String,
157
+ resolver: RCTPromiseResolveBlock,
158
+ rejecter: RCTPromiseRejectBlock)
159
+ {
147
160
  let paymentMethodType = PrimerPaymentMethodType(rawValue: paymentMethodTypeStr)
148
161
  PrimerHeadlessUniversalCheckout.current.showPaymentMethod(paymentMethodType)
162
+ resolver(nil)
163
+ }
164
+
165
+ @objc
166
+ public func disposePrimerHeadlessUniversalCheckout() {
167
+
149
168
  }
150
169
 
151
170
  // MARK: - HELPERS
@@ -153,7 +172,7 @@ class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
153
172
  private func validate(assetStr: String, assetTypeStr: String) throws {
154
173
  var errors: [NativeError] = []
155
174
 
156
- if PaymentMethodConfigType(rawValue: assetStr) != .other(rawValue: assetStr) {
175
+ if PrimerPaymentMethodType(rawValue: assetStr) != .other(rawValue: assetStr) {
157
176
  // ...
158
177
  } else if CardNetwork(rawValue: assetStr) != nil {
159
178
  // ...
@@ -194,48 +213,281 @@ class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
194
213
  try pngData.write(to: imageURL)
195
214
  return imageURL
196
215
  }
216
+
217
+ // MARK: - DECISION HANDLERS
218
+
219
+ // MARK: Tokenization
220
+
221
+ @objc
222
+ public func handleTokenizationNewClientToken(_ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
223
+ DispatchQueue.main.async {
224
+ self.primerDidTokenizePaymentMethodDecisionHandler?(newClientToken, nil)
225
+ self.primerDidTokenizePaymentMethodDecisionHandler = nil
226
+ resolver(nil)
227
+ }
228
+ }
229
+
230
+ @objc
231
+ public func handleTokenizationSuccess(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
232
+ DispatchQueue.main.async {
233
+ self.primerDidTokenizePaymentMethodDecisionHandler?(nil, nil)
234
+ self.primerDidTokenizePaymentMethodDecisionHandler = nil
235
+ let err = NSError(domain: "native-bridge", code: 0, userInfo: [NSLocalizedDescriptionKey: "PrimerTokenizationHandler's handleSuccess function is not available on HUC."])
236
+ rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
237
+ }
238
+ }
239
+
240
+ @objc
241
+ public func handleTokenizationFailure(_ errorMessage: String?, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
242
+ DispatchQueue.main.async {
243
+ self.primerDidTokenizePaymentMethodDecisionHandler?(nil, errorMessage ?? "")
244
+ self.primerDidTokenizePaymentMethodDecisionHandler = nil
245
+ let err = NSError(domain: "native-bridge", code: 0, userInfo: [NSLocalizedDescriptionKey: "PrimerTokenizationHandler's handleFailure function is not available on HUC."])
246
+ rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
247
+ }
248
+ }
249
+
250
+ // MARK: Resume Payment
251
+
252
+ @objc
253
+ public func handleResumeWithNewClientToken(_ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
254
+ DispatchQueue.main.async {
255
+ self.primerDidResumeWithDecisionHandler?(newClientToken, nil)
256
+ self.primerDidResumeWithDecisionHandler = nil
257
+ resolver(nil)
258
+ }
259
+ }
260
+
261
+ @objc
262
+ public func handleResumeSuccess(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
263
+ DispatchQueue.main.async {
264
+ let err = NSError(domain: "native-bridge", code: 0, userInfo: [NSLocalizedDescriptionKey: "PrimerResumeHandler's handleSuccess function is not available on HUC."])
265
+ rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
266
+ }
267
+ }
268
+
269
+ @objc
270
+ public func handleResumeFailure(_ errorMessage: String?, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
271
+ DispatchQueue.main.async {
272
+ let err = NSError(domain: "native-bridge", code: 0, userInfo: [NSLocalizedDescriptionKey: "PrimerResumeHandler's handleFailure function is not available on HUC."])
273
+ rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
274
+ }
275
+ }
276
+
277
+ // MARK: Payment Creation
278
+
279
+ @objc
280
+ public func handlePaymentCreationAbort(_ errorMessage: String?, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
281
+ DispatchQueue.main.async {
282
+ self.primerWillCreatePaymentWithDataDecisionHandler?(errorMessage ?? "")
283
+ self.primerWillCreatePaymentWithDataDecisionHandler = nil
284
+ resolver(nil)
285
+ }
286
+ }
287
+
288
+ @objc
289
+ public func handlePaymentCreationContinue(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
290
+ DispatchQueue.main.async {
291
+ self.primerWillCreatePaymentWithDataDecisionHandler?(nil)
292
+ self.primerWillCreatePaymentWithDataDecisionHandler = nil
293
+ resolver(nil)
294
+ }
295
+ }
296
+
297
+ // MARK: Helpers
298
+
299
+ private func detectImplemetedCallbacks() {
300
+ sendEvent(withName: PrimerEvents.detectImplementedRNCallbacks.stringValue, body: nil)
301
+ }
302
+
303
+ @objc
304
+ public func setImplementedRNCallbacks(_ implementedRNCallbacksStr: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
305
+ DispatchQueue.main.async {
306
+ do {
307
+ guard let implementedRNCallbacksData = implementedRNCallbacksStr.data(using: .utf8) else {
308
+ let err = NSError(domain: "native-bridge", code: 0, userInfo: [NSLocalizedDescriptionKey: "Failed to convert string to data"])
309
+ throw err
310
+ }
311
+ self.implementedRNCallbacks = try JSONDecoder().decode(ImplementedRNCallbacks.self, from: implementedRNCallbacksData)
312
+ resolver(nil)
313
+ } catch {
314
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: false)
315
+ rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
316
+ }
317
+ }
318
+ }
319
+
320
+ private func handleRNBridgeError(_ error: Error, checkoutData: PrimerCheckoutData?, stopOnDebug: Bool) {
321
+ DispatchQueue.main.async {
322
+ if stopOnDebug {
323
+ assertionFailure(error.localizedDescription)
324
+ }
325
+
326
+ var body: [String: Any] = ["error": error.rnError]
327
+ if let checkoutData = checkoutData,
328
+ let data = try? JSONEncoder().encode(checkoutData),
329
+ let json = try? JSONSerialization.jsonObject(with: data){
330
+ body["checkoutData"] = json
331
+ }
332
+
333
+ self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onError.stringValue, body: body)
334
+ }
335
+ }
197
336
  }
198
337
 
199
338
  // MARK: - EVENTS
200
339
 
201
340
  extension RNTPrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutDelegate {
202
- func primerHeadlessUniversalCheckoutClientSessionDidSetUpSuccessfully() {
203
- sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.clientSessionDidSetUpSuccessfully.stringValue, body: nil)
341
+
342
+ func primerHeadlessUniversalCheckoutPreparationDidStart(for paymentMethodType: String) {
343
+ sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onHUCPrepareStart.stringValue, body: ["paymentMethodType": paymentMethodType])
204
344
  }
205
345
 
206
- func primerHeadlessUniversalCheckoutPreparationStarted() {
207
- sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.preparationStarted.stringValue, body: nil)
346
+ func primerHeadlessUniversalCheckoutTokenizationDidStart(for paymentMethodType: String) {
347
+ sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onHUCTokenizeStart.stringValue, body: ["paymentMethodType": paymentMethodType])
208
348
  }
209
349
 
210
- func primerHeadlessUniversalCheckoutTokenizationStarted() {
211
- sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.tokenizationStarted.stringValue, body: nil)
350
+ func primerHeadlessUniversalCheckoutDidLoadAvailablePaymentMethods(_ paymentMethodTypes: [String]) {
351
+ sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onHUCAvailablePaymentMethodsLoaded.stringValue, body: ["paymentMethodTypes": paymentMethodTypes])
212
352
  }
213
353
 
214
- func primerHeadlessUniversalCheckoutPaymentMethodPresented() {
215
- sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.paymentMethodPresented.stringValue, body: nil)
354
+ func primerHeadlessUniversalCheckoutPaymentMethodDidShow(for paymentMethodType: String) {
355
+ sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onHUCPaymentMethodShow.stringValue, body: ["paymentMethodType": paymentMethodType])
216
356
  }
217
357
 
218
- func primerHeadlessUniversalCheckoutTokenizationSucceeded(paymentMethodToken: PaymentMethodToken, resumeHandler: ResumeHandlerProtocol?) {
219
- do {
220
- let paymentMethodTokenData = try JSONEncoder().encode(paymentMethodToken)
221
- let paymentMethodTokenStr = String(data: paymentMethodTokenData, encoding: .utf8)!
358
+ func primerHeadlessUniversalCheckoutDidTokenizePaymentMethod(_ paymentMethodTokenData: PrimerPaymentMethodTokenData, decisionHandler: @escaping (PrimerResumeDecision) -> Void) {
359
+ if self.implementedRNCallbacks?.isOnTokenizeSuccessImplemented == true {
360
+ self.primerDidTokenizePaymentMethodDecisionHandler = { (newClientToken, errorMessage) in
361
+ DispatchQueue.main.async {
362
+ if let errorMessage = errorMessage {
363
+ decisionHandler(.fail(withErrorMessage: errorMessage.isEmpty ? nil : errorMessage))
364
+ } else if let newClientToken = newClientToken {
365
+ decisionHandler(.continueWithNewClientToken(newClientToken))
366
+ } else {
367
+ decisionHandler(.succeed())
368
+ }
369
+ }
370
+ }
222
371
 
223
- self.resumeTokenCompletion = { (resumeToken) in
224
- resumeHandler?.handle(newClientToken: resumeToken)
372
+ do {
373
+ let data = try JSONEncoder().encode(paymentMethodTokenData)
374
+ let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
375
+ DispatchQueue.main.async {
376
+ self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onTokenizeSuccess.stringValue, body: json)
377
+ }
378
+ } catch {
379
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
380
+ }
381
+ } else {
382
+ // RN dev hasn't opted in on listening the tokenization callback.
383
+ // Throw an error if it's the manual flow, ignore if it's the
384
+ // auto flow.
385
+ }
386
+ }
387
+
388
+ func primerHeadlessUniversalCheckoutDidResumeWith(_ resumeToken: String, decisionHandler: @escaping (PrimerResumeDecision) -> Void) {
389
+ if self.implementedRNCallbacks?.isOnResumeSuccessImplemented == true {
390
+ self.primerDidResumeWithDecisionHandler = { (resumeToken, errorMessage) in
391
+ DispatchQueue.main.async {
392
+ if let errorMessage = errorMessage {
393
+ decisionHandler(.fail(withErrorMessage: errorMessage.isEmpty ? nil : errorMessage))
394
+ } else if let resumeToken = resumeToken {
395
+ decisionHandler(.continueWithNewClientToken(resumeToken))
396
+ } else {
397
+ decisionHandler(.succeed())
398
+ }
399
+ }
225
400
  }
226
401
 
227
- sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.tokenizationSucceeded.stringValue, body: ["paymentMethodToken": paymentMethodTokenStr])
402
+ DispatchQueue.main.async {
403
+ self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onResumeSuccess.stringValue, body: ["resumeToken": resumeToken])
404
+ }
405
+ } else {
406
+ // RN dev hasn't opted in on listening the tokenization callback.
407
+ // Throw an error if it's the manual flow.
408
+ }
409
+ }
410
+
411
+ func primerHeadlessUniversalCheckoutDidFail(withError err: Error) {
412
+ if self.implementedRNCallbacks?.isOnErrorImplemented == true {
413
+ // Send the error message to the RN bridge.
414
+ self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
228
415
 
229
- } catch {
230
- self.primerHeadlessUniversalCheckoutUniversalCheckoutDidFail(withError: error)
416
+ } else {
417
+ // RN dev hasn't opted in on listening SDK dismiss.
418
+ // Ignore!
419
+ }
420
+ }
421
+
422
+ func primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData(_ data: PrimerCheckoutData) {
423
+ DispatchQueue.main.async {
424
+ if self.implementedRNCallbacks?.isOnCheckoutCompleteImplemented == true {
425
+ do {
426
+ let checkoutData = try JSONEncoder().encode(data)
427
+ let checkoutJson = try JSONSerialization.jsonObject(with: checkoutData, options: .allowFragments)
428
+ self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onCheckoutComplete.stringValue, body: checkoutJson)
429
+ } catch {
430
+ self.handleRNBridgeError(error, checkoutData: data, stopOnDebug: true)
431
+ }
432
+ } else {
433
+ let err = NSError(domain: "native-bridge", code: 1, userInfo: [NSLocalizedDescriptionKey: "Callback [onCheckoutComplete] should be implemented."])
434
+ self.handleRNBridgeError(err, checkoutData: data, stopOnDebug: false)
435
+ }
436
+ }
437
+ }
438
+
439
+ func primerHeadlessUniversalCheckoutClientSessionWillUpdate() {
440
+ if self.implementedRNCallbacks?.isOnBeforeClientSessionUpdateImplemented == true {
441
+ DispatchQueue.main.async {
442
+ self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onBeforeClientSessionUpdate.stringValue, body: nil)
443
+ }
444
+ } else {
445
+ // RN Dev hasn't implemented this callback, ignore.
231
446
  }
232
447
  }
233
448
 
234
- func primerHeadlessUniversalCheckoutResume(withResumeToken resumeToken: String, resumeHandler: ResumeHandlerProtocol?) {
235
- sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.resume.stringValue, body: ["resumeToken": resumeToken])
449
+ func primerHeadlessUniversalCheckoutClientSessionDidUpdate(_ clientSession: PrimerClientSession) {
450
+ if self.implementedRNCallbacks?.isOnClientSessionUpdateImplemented == true {
451
+ do {
452
+ let data = try JSONEncoder().encode(clientSession)
453
+ let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
454
+ DispatchQueue.main.async {
455
+ self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onClientSessionUpdate.stringValue, body: json)
456
+ }
457
+ } catch {
458
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
459
+ }
460
+ } else {
461
+ // RN Dev hasn't implemented this callback, ignore.
462
+ }
236
463
  }
237
464
 
238
- func primerHeadlessUniversalCheckoutUniversalCheckoutDidFail(withError err: Error) {
239
- sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.error.stringValue, body: ["error": err.rnError])
465
+ func primerHeadlessUniversalCheckoutWillCreatePaymentWithData(_ data: PrimerCheckoutPaymentMethodData, decisionHandler: @escaping (PrimerPaymentCreationDecision) -> Void) {
466
+ if self.implementedRNCallbacks?.isOnBeforePaymentCreateImplemented == true {
467
+ self.primerWillCreatePaymentWithDataDecisionHandler = { errorMessage in
468
+ DispatchQueue.main.async {
469
+ if let errorMessage = errorMessage {
470
+ decisionHandler(.abortPaymentCreation(withErrorMessage: errorMessage.isEmpty ? nil : errorMessage))
471
+ } else {
472
+ decisionHandler(.continuePaymentCreation())
473
+ }
474
+ }
475
+ }
476
+
477
+ DispatchQueue.main.async {
478
+ do {
479
+ let checkoutPaymentmethodData = try JSONEncoder().encode(data)
480
+ let checkoutPaymentmethodJson = try JSONSerialization.jsonObject(with: checkoutPaymentmethodData, options: .allowFragments)
481
+ self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onBeforePaymentCreate.stringValue, body: checkoutPaymentmethodJson)
482
+ } catch {
483
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
484
+ }
485
+ }
486
+ } else {
487
+ // RN Dev hasn't implemented this callback, send a decision to continue the flow.
488
+ DispatchQueue.main.async {
489
+ decisionHandler(.continuePaymentCreation())
490
+ }
491
+ }
240
492
  }
241
493
  }
@@ -19,7 +19,11 @@ class RNTPrimerHeadlessUniversalCheckoutCardFormUIManager: RCTViewManager {
19
19
  private lazy var cardFormUIManager: PrimerHeadlessUniversalCheckout.CardFormUIManager = {
20
20
  return try! PrimerHeadlessUniversalCheckout.CardFormUIManager()
21
21
  }()
22
- private var successCallback: RCTResponseSenderBlock?
22
+ private var successCallback: RCTResponseSenderBlock? {
23
+ didSet {
24
+
25
+ }
26
+ }
23
27
 
24
28
  deinit {
25
29
  print("🧨 deinit: \(self) \(Unmanaged.passUnretained(self).toOpaque())")
package/ios/RNTPrimer.m CHANGED
@@ -10,34 +10,50 @@
10
10
 
11
11
  @interface RCT_EXTERN_MODULE(NativePrimer, RCTEventEmitter)
12
12
 
13
- RCT_EXTERN_METHOD(configureWithSettings:(NSString *)settingsStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
13
+ // MARK: - PRIMER SDK API
14
14
 
15
- RCT_EXTERN_METHOD(configureWithTheme:(NSString *)themeStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
16
-
17
- RCT_EXTERN_METHOD(showUniversalCheckout:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
15
+ RCT_EXTERN_METHOD(configure:(NSString *)settingsStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
18
16
 
19
17
  RCT_EXTERN_METHOD(showUniversalCheckoutWithClientToken:(NSString *)clientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
20
18
 
21
- RCT_EXTERN_METHOD(showVaultManager:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
19
+ RCT_EXTERN_METHOD(showVaultManagerWithClientToken: (NSString *)clientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
22
20
 
23
- RCT_EXTERN_METHOD(showVaultManager:(NSString *)clientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
21
+ RCT_EXTERN_METHOD(showPaymentMethod:(NSString *)paymentMethodStr intent:(NSString *)intentStr clientToken:(NSString *)clientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
24
22
 
23
+ RCT_EXTERN_METHOD(dismiss)
25
24
 
25
+ RCT_EXTERN_METHOD(dispose)
26
26
 
27
- RCT_EXTERN_METHOD(handleNewClientToken:(NSString *)clientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
27
+ // MARK: - HELPERS
28
28
 
29
- RCT_EXTERN_METHOD(handleError:(NSString *)errorStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
29
+ RCT_EXTERN_METHOD(setImplementedRNCallbacks:(NSString *)implementedRNCallbacksStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
30
30
 
31
- RCT_EXTERN_METHOD(handleSuccess:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
31
+ // MARK: - DECISION HANDLERS
32
32
 
33
- RCT_EXTERN_METHOD(setImplementedRNCallbacks:(NSString *)implementedRNCallbacksStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
33
+ // MARK: Tokenization Handlers
34
34
 
35
+ RCT_EXTERN_METHOD(handleTokenizationNewClientToken:(NSString *)newClientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
35
36
 
37
+ RCT_EXTERN_METHOD(handleTokenizationSuccess:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
36
38
 
39
+ RCT_EXTERN_METHOD(handleTokenizationFailure:(NSString *)errorMessage resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
37
40
 
41
+ // MARK: Resume Handlers
38
42
 
43
+ RCT_EXTERN_METHOD(handleResumeWithNewClientToken:(NSString *)newClientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
39
44
 
40
- RCT_EXTERN_METHOD(showPaymentMethod:(NSString *)clientToken paymentMethodStr:(NSString *)paymentMethodStr intentStr:(NSString *)intentStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
45
+ RCT_EXTERN_METHOD(handleResumeSuccess:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
41
46
 
42
- @end
47
+ RCT_EXTERN_METHOD(handleResumeFailure:(NSString *)errorMessage resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
48
+
49
+ // MARK: Payment Creation Handlers
43
50
 
51
+ RCT_EXTERN_METHOD(handlePaymentCreationAbort:(NSString *)errorMessage resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
52
+
53
+ RCT_EXTERN_METHOD(handlePaymentCreationContinue:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
54
+
55
+ // MARK: Error Handler
56
+
57
+ RCT_EXTERN_METHOD(showErrorMessage:(NSString *)errorMessage resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
58
+
59
+ @end