@primer-io/react-native 2.17.3 → 2.19.0

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