@primer-io/react-native 2.16.7 → 2.17.0-rc.10

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 (283) hide show
  1. package/android/.project +2 -2
  2. package/android/build.gradle +2 -3
  3. package/android/gradle.properties +1 -1
  4. package/android/src/main/java/com/primerioreactnative/PrimerCardNumberEditTextManager.kt +0 -15
  5. package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +15 -2
  6. package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +23 -8
  7. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +20 -120
  8. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +61 -69
  9. package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +6 -2
  10. package/android/src/main/java/com/primerioreactnative/{huc → components}/assets/AssetsManager.kt +5 -14
  11. package/android/src/main/java/com/primerioreactnative/components/assets/CardNetworkImageFileProvider.kt +23 -0
  12. package/android/src/main/java/com/primerioreactnative/components/assets/PaymentMethodAssetFileProvider.kt +24 -0
  13. package/android/src/main/java/com/primerioreactnative/components/datamodels/core/PrimerRNHeadlessUniversalCheckoutPaymentMethod.kt +25 -0
  14. package/android/src/main/java/com/primerioreactnative/components/datamodels/core/PrimerRawPaymentMethodType.kt +9 -0
  15. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/asset/PrimerRNAsset.kt +106 -0
  16. package/android/src/main/java/com/primerioreactnative/{huc/datamodels/manager/raw/card/PrimerRNRawCardData.kt → components/datamodels/manager/raw/card/PrimerRNCardData.kt} +6 -8
  17. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/cardRedirect/PrimerRNCardRedirectData.kt +19 -0
  18. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/phoneNumber/PrimerRNPhoneNumberData.kt +14 -0
  19. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/retailOutlets/PrimerRNRetailOutletData.kt +12 -0
  20. package/android/src/main/java/com/primerioreactnative/{huc → components}/datamodels/manager/raw/retailOutlets/RNRetailOutletsList.kt +1 -1
  21. package/android/src/main/java/com/primerioreactnative/components/events/PrimerHeadlessUniversalCheckoutEvent.kt +17 -0
  22. package/android/src/main/java/com/primerioreactnative/{huc → components}/events/PrimerHeadlessUniversalCheckoutRawDataManagerEvent.kt +1 -2
  23. package/android/src/main/java/com/primerioreactnative/components/manager/asset/PrimerRNHeadlessUniversalCheckoutAssetManager.kt +131 -0
  24. package/android/src/main/java/com/primerioreactnative/components/manager/nativeUi/PrimerRNHeadlessUniversalCheckoutNativeUiManager.kt +87 -0
  25. package/android/src/main/java/com/primerioreactnative/{huc → components}/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManager.kt +72 -68
  26. package/android/src/main/java/com/primerioreactnative/{huc → components}/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManagerListener.kt +13 -5
  27. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +5 -4
  28. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerInputValidationErrorRN.kt +11 -0
  29. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +13 -9
  30. package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt +3 -3
  31. package/android/src/main/java/com/primerioreactnative/utils/PrimerHeadlessUniversalCheckoutImplementedRNCallbacks.kt +15 -15
  32. package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +7 -7
  33. package/ios/Podfile.lock +1 -1
  34. package/ios/ReactNative.xcodeproj/project.pbxproj +20 -20
  35. package/ios/Sources/DataModels/ImplementedRNCallbacks.swift +75 -0
  36. package/ios/{DataModels/RNTPrimerCardRedirectData.swift → Sources/DataModels/PrimerBancontactCardRedirectData+Extension.swift} +5 -8
  37. package/ios/{DataModels/RNTPrimerCardData.swift → Sources/DataModels/PrimerCardData+Extension.swift} +2 -5
  38. package/ios/Sources/DataModels/PrimerHeadlessUniversalCheckout_PaymentMethod.swift +20 -0
  39. package/ios/{DataModels/RNTPrimerPhoneNumberData.swift → Sources/DataModels/PrimerPhoneNumberData+Extension.swift} +0 -1
  40. package/ios/{DataModels/RNTPrimerRetailerData.swift → Sources/DataModels/PrimerRawRetailerData+Extension.swift} +3 -4
  41. package/ios/Sources/DataModels/PrimerSettings+Extensions.swift +94 -0
  42. package/ios/Sources/DataModels/RNTNativeError.swift +22 -0
  43. package/ios/Sources/DataModels/RNTPrimerPaymentMethodAsset.swift +67 -0
  44. package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTNativeUIManager.m +19 -0
  45. package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTNativeUIManager.swift +63 -0
  46. package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTRawDataManager.m +23 -0
  47. package/ios/{Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutRawDataManager.swift → Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTRawDataManager.swift } +36 -31
  48. package/ios/Sources/Headless Universal Checkout/Managers/RNTAssetsManager.m +24 -0
  49. package/ios/Sources/Headless Universal Checkout/Managers/RNTAssetsManager.swift +107 -0
  50. package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +41 -0
  51. package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +498 -0
  52. package/ios/Sources/Helpers/Encodable+Extension.swift +17 -0
  53. package/ios/Sources/Helpers/Error+Extensions.swift +39 -0
  54. package/ios/Sources/Helpers/UIColor+Extensions.swift +32 -0
  55. package/ios/Sources/Helpers/UIImage+Extensions.swift +32 -0
  56. package/ios/Sources/RNTPrimer.m +86 -0
  57. package/ios/{RNTPrimer.swift → Sources/RNTPrimer.swift} +37 -28
  58. package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js +59 -0
  59. package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -0
  60. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js +35 -0
  61. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +1 -0
  62. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +151 -0
  63. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -0
  64. package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +270 -0
  65. package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -0
  66. package/lib/commonjs/{headless_checkout → HeadlessUniversalCheckout}/RNPrimerHeadlessUniversalCheckout.js +7 -81
  67. package/lib/commonjs/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
  68. package/lib/commonjs/HeadlessUniversalCheckout/types.js +34 -0
  69. package/lib/commonjs/HeadlessUniversalCheckout/types.js.map +1 -0
  70. package/lib/commonjs/Primer.js +24 -23
  71. package/lib/commonjs/Primer.js.map +1 -1
  72. package/lib/commonjs/PrimerInput.js.map +1 -1
  73. package/lib/commonjs/RNPrimer.js +4 -4
  74. package/lib/commonjs/RNPrimer.js.map +1 -1
  75. package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -1
  76. package/lib/commonjs/index.js +63 -71
  77. package/lib/commonjs/index.js.map +1 -1
  78. package/lib/commonjs/models/PrimerAsset.js +2 -0
  79. package/lib/commonjs/models/PrimerAsset.js.map +1 -0
  80. package/lib/commonjs/models/PrimerCheckoutAdditionalInfo.js.map +1 -1
  81. package/lib/commonjs/models/PrimerCheckoutData.js.map +1 -1
  82. package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js.map +1 -1
  83. package/lib/commonjs/models/PrimerClientSession.js.map +1 -1
  84. package/lib/commonjs/models/PrimerCountryCode.js.map +1 -1
  85. package/lib/commonjs/models/PrimerCurrencyCode.js.map +1 -1
  86. package/lib/commonjs/models/PrimerError.js +4 -4
  87. package/lib/commonjs/models/PrimerError.js.map +1 -1
  88. package/lib/commonjs/models/PrimerHandlers.js +2 -0
  89. package/lib/commonjs/models/PrimerHandlers.js.map +1 -0
  90. package/lib/commonjs/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js +2 -0
  91. package/lib/commonjs/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js.map +1 -0
  92. package/lib/commonjs/models/PrimerImplementedRNCallbacks.js +2 -0
  93. package/lib/commonjs/models/PrimerImplementedRNCallbacks.js.map +1 -0
  94. package/lib/commonjs/models/PrimerInitializationData.js.map +1 -1
  95. package/lib/commonjs/models/PrimerInputElementType.js +20 -0
  96. package/lib/commonjs/models/PrimerInputElementType.js.map +1 -0
  97. package/lib/commonjs/models/PrimerInterfaces.js.map +1 -1
  98. package/lib/commonjs/models/PrimerPaymentMethodManagerCategory.js +14 -0
  99. package/lib/commonjs/models/PrimerPaymentMethodManagerCategory.js.map +1 -0
  100. package/lib/commonjs/models/PrimerPaymentMethodTokenData.js.map +1 -1
  101. package/lib/commonjs/models/PrimerRawData.js.map +1 -1
  102. package/lib/commonjs/models/PrimerSessionIntent.js.map +1 -1
  103. package/lib/commonjs/models/PrimerSettings.js.map +1 -1
  104. package/lib/commonjs/models/PrimerTheme.js.map +1 -1
  105. package/lib/commonjs/models/RetailOutletsRetail.js.map +1 -1
  106. package/lib/commonjs/utils/index.js.map +1 -1
  107. package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js +52 -0
  108. package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -0
  109. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js +28 -0
  110. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +1 -0
  111. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +144 -0
  112. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -0
  113. package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +261 -0
  114. package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -0
  115. package/lib/module/{headless_checkout → HeadlessUniversalCheckout}/RNPrimerHeadlessUniversalCheckout.js +7 -81
  116. package/lib/module/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
  117. package/lib/module/HeadlessUniversalCheckout/types.js +33 -0
  118. package/lib/module/HeadlessUniversalCheckout/types.js.map +1 -0
  119. package/lib/module/Primer.js +24 -23
  120. package/lib/module/Primer.js.map +1 -1
  121. package/lib/module/PrimerInput.js.map +1 -1
  122. package/lib/module/RNPrimer.js +4 -4
  123. package/lib/module/RNPrimer.js.map +1 -1
  124. package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -1
  125. package/lib/module/index.js +15 -9
  126. package/lib/module/index.js.map +1 -1
  127. package/lib/module/models/PrimerAsset.js +2 -0
  128. package/lib/module/models/PrimerAsset.js.map +1 -0
  129. package/lib/module/models/PrimerCheckoutAdditionalInfo.js.map +1 -1
  130. package/lib/module/models/PrimerCheckoutData.js.map +1 -1
  131. package/lib/module/models/PrimerCheckoutPaymentMethodData.js.map +1 -1
  132. package/lib/module/models/PrimerClientSession.js.map +1 -1
  133. package/lib/module/models/PrimerCountryCode.js.map +1 -1
  134. package/lib/module/models/PrimerCurrencyCode.js.map +1 -1
  135. package/lib/module/models/PrimerError.js +4 -4
  136. package/lib/module/models/PrimerError.js.map +1 -1
  137. package/lib/module/models/PrimerHandlers.js +2 -0
  138. package/lib/module/models/PrimerHandlers.js.map +1 -0
  139. package/lib/module/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js +2 -0
  140. package/lib/module/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js.map +1 -0
  141. package/lib/module/models/PrimerImplementedRNCallbacks.js +2 -0
  142. package/lib/module/models/PrimerImplementedRNCallbacks.js.map +1 -0
  143. package/lib/module/models/PrimerInitializationData.js.map +1 -1
  144. package/lib/module/models/PrimerInputElementType.js +13 -0
  145. package/lib/module/models/PrimerInputElementType.js.map +1 -0
  146. package/lib/module/models/PrimerInterfaces.js.map +1 -1
  147. package/lib/module/models/PrimerPaymentMethodManagerCategory.js +7 -0
  148. package/lib/module/models/PrimerPaymentMethodManagerCategory.js.map +1 -0
  149. package/lib/module/models/PrimerPaymentMethodTokenData.js.map +1 -1
  150. package/lib/module/models/PrimerRawData.js.map +1 -1
  151. package/lib/module/models/PrimerSessionIntent.js.map +1 -1
  152. package/lib/module/models/PrimerSettings.js.map +1 -1
  153. package/lib/module/models/PrimerTheme.js.map +1 -1
  154. package/lib/module/models/RetailOutletsRetail.js.map +1 -1
  155. package/lib/module/utils/index.js.map +1 -1
  156. package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts +9 -0
  157. package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts.map +1 -0
  158. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.d.ts +8 -0
  159. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.d.ts.map +1 -0
  160. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts +29 -0
  161. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts.map +1 -0
  162. package/lib/typescript/{headless_checkout → HeadlessUniversalCheckout}/PrimerHeadlessUniversalCheckout.d.ts +4 -5
  163. package/lib/typescript/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.d.ts.map +1 -0
  164. package/lib/typescript/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.d.ts +18 -0
  165. package/lib/typescript/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.d.ts.map +1 -0
  166. package/lib/typescript/HeadlessUniversalCheckout/types.d.ts +1 -0
  167. package/lib/typescript/HeadlessUniversalCheckout/types.d.ts.map +1 -0
  168. package/lib/typescript/Primer.d.ts +1 -0
  169. package/lib/typescript/Primer.d.ts.map +1 -0
  170. package/lib/typescript/PrimerInput.d.ts +5 -4
  171. package/lib/typescript/PrimerInput.d.ts.map +1 -0
  172. package/lib/typescript/RNPrimer.d.ts +4 -4
  173. package/lib/typescript/RNPrimer.d.ts.map +1 -0
  174. package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts +1 -0
  175. package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts.map +1 -0
  176. package/lib/typescript/index.d.ts +18 -9
  177. package/lib/typescript/index.d.ts.map +1 -0
  178. package/lib/typescript/models/PrimerAsset.d.ts +15 -0
  179. package/lib/typescript/models/PrimerAsset.d.ts.map +1 -0
  180. package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts +7 -6
  181. package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts.map +1 -0
  182. package/lib/typescript/models/PrimerCheckoutData.d.ts +3 -2
  183. package/lib/typescript/models/PrimerCheckoutData.d.ts.map +1 -0
  184. package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts +2 -1
  185. package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts.map +1 -0
  186. package/lib/typescript/models/PrimerClientSession.d.ts +6 -5
  187. package/lib/typescript/models/PrimerClientSession.d.ts.map +1 -0
  188. package/lib/typescript/models/PrimerCountryCode.d.ts +2 -1
  189. package/lib/typescript/models/PrimerCountryCode.d.ts.map +1 -0
  190. package/lib/typescript/models/PrimerCurrencyCode.d.ts +2 -1
  191. package/lib/typescript/models/PrimerCurrencyCode.d.ts.map +1 -0
  192. package/lib/typescript/models/PrimerError.d.ts +3 -1
  193. package/lib/typescript/models/PrimerError.d.ts.map +1 -0
  194. package/lib/typescript/models/PrimerHandlers.d.ts +22 -0
  195. package/lib/typescript/models/PrimerHandlers.d.ts.map +1 -0
  196. package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts +6 -0
  197. package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts.map +1 -0
  198. package/lib/typescript/models/PrimerImplementedRNCallbacks.d.ts +17 -0
  199. package/lib/typescript/models/PrimerImplementedRNCallbacks.d.ts.map +1 -0
  200. package/lib/typescript/models/PrimerInitializationData.d.ts +3 -2
  201. package/lib/typescript/models/PrimerInitializationData.d.ts.map +1 -0
  202. package/lib/typescript/models/PrimerInputElementType.d.ts +12 -0
  203. package/lib/typescript/models/PrimerInputElementType.d.ts.map +1 -0
  204. package/lib/typescript/models/PrimerInterfaces.d.ts +3 -20
  205. package/lib/typescript/models/PrimerInterfaces.d.ts.map +1 -0
  206. package/lib/typescript/models/PrimerPaymentMethodManagerCategory.d.ts +6 -0
  207. package/lib/typescript/models/PrimerPaymentMethodManagerCategory.d.ts.map +1 -0
  208. package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts +2 -1
  209. package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts.map +1 -0
  210. package/lib/typescript/models/PrimerRawData.d.ts +7 -10
  211. package/lib/typescript/models/PrimerRawData.d.ts.map +1 -0
  212. package/lib/typescript/models/PrimerSessionIntent.d.ts +1 -0
  213. package/lib/typescript/models/PrimerSessionIntent.d.ts.map +1 -0
  214. package/lib/typescript/models/PrimerSettings.d.ts +28 -6
  215. package/lib/typescript/models/PrimerSettings.d.ts.map +1 -0
  216. package/lib/typescript/models/PrimerTheme.d.ts +3 -2
  217. package/lib/typescript/models/PrimerTheme.d.ts.map +1 -0
  218. package/lib/typescript/models/RetailOutletsRetail.d.ts +2 -1
  219. package/lib/typescript/models/RetailOutletsRetail.d.ts.map +1 -0
  220. package/lib/typescript/utils/index.d.ts +1 -0
  221. package/lib/typescript/utils/index.d.ts.map +1 -0
  222. package/package.json +8 -7
  223. package/primer-io-react-native.podspec +1 -2
  224. package/src/HeadlessUniversalCheckout/Managers/AssetsManager.ts +56 -0
  225. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.ts +31 -0
  226. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.ts +166 -0
  227. package/src/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.ts +333 -0
  228. package/src/{headless_checkout → HeadlessUniversalCheckout}/RNPrimerHeadlessUniversalCheckout.ts +37 -128
  229. package/src/HeadlessUniversalCheckout/types.ts +32 -0
  230. package/src/Primer.ts +32 -31
  231. package/src/RNPrimer.ts +4 -9
  232. package/src/index.tsx +43 -29
  233. package/src/models/PrimerAsset.ts +14 -0
  234. package/src/models/PrimerError.ts +3 -1
  235. package/src/models/PrimerHandlers.ts +25 -0
  236. package/src/models/PrimerHeadlessUniversalCheckoutPaymentMethod.ts +5 -0
  237. package/src/models/PrimerImplementedRNCallbacks.ts +20 -0
  238. package/src/models/PrimerInputElementType.ts +11 -0
  239. package/src/models/PrimerInterfaces.ts +2 -28
  240. package/src/models/PrimerPaymentMethodManagerCategory.ts +5 -0
  241. package/src/models/PrimerRawData.ts +6 -10
  242. package/src/models/PrimerSettings.ts +42 -16
  243. package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/cardRedirect/PrimerRNPRawCardRedirectData.kt +0 -20
  244. package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/phoneNumber/PrimerRNRawPhoneNumberData.kt +0 -14
  245. package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/retailOutlets/PrimerRNRawRetailOutletData.kt +0 -12
  246. package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +0 -15
  247. package/ios/DataModels/ImplementedRNCallbacks.swift +0 -62
  248. package/ios/DataModels/PrimerErrorRN.swift +0 -35
  249. package/ios/DataModels/PrimerSettingsRN.swift +0 -84
  250. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +0 -62
  251. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +0 -501
  252. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.m +0 -14
  253. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +0 -117
  254. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutRawDataManager.m +0 -23
  255. package/ios/RNTPrimer.m +0 -59
  256. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -288
  257. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
  258. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js +0 -91
  259. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
  260. package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +0 -1
  261. package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js +0 -91
  262. package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
  263. package/lib/commonjs/headless_checkout/types.js +0 -6
  264. package/lib/commonjs/headless_checkout/types.js.map +0 -1
  265. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -279
  266. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
  267. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js +0 -83
  268. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
  269. package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +0 -1
  270. package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js +0 -84
  271. package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
  272. package/lib/module/headless_checkout/types.js +0 -2
  273. package/lib/module/headless_checkout/types.js.map +0 -1
  274. package/lib/typescript/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.d.ts +0 -18
  275. package/lib/typescript/headless_checkout/RNPrimerHeadlessUniversalCheckout.d.ts +0 -22
  276. package/lib/typescript/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.d.ts +0 -14
  277. package/lib/typescript/headless_checkout/types.d.ts +0 -22
  278. package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +0 -358
  279. package/src/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.ts +0 -109
  280. package/src/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.ts +0 -104
  281. package/src/headless_checkout/types.ts +0 -32
  282. /package/ios/{DataModels → Sources/DataModels}/PrimerThemeRN.swift +0 -0
  283. /package/ios/{Headless Universal Checkout → Sources/Headless Universal Checkout/Managers/Payment Method Managers}/RNTPrimerCardNumberInputElementManager.m +0 -0
@@ -0,0 +1,107 @@
1
+ //
2
+ // RNTAssetsManager.swift
3
+ // primer-io-react-native
4
+ //
5
+ // Created by Evangelos on 6/10/22.
6
+ //
7
+
8
+ import Foundation
9
+ import PrimerSDK
10
+
11
+ @objc(RNTPrimerHeadlessUniversalCheckoutAssetsManager)
12
+ class RNTPrimerHeadlessUniversalCheckoutAssetsManager: RCTEventEmitter {
13
+
14
+ override func supportedEvents() -> [String]! {
15
+ return []
16
+ }
17
+
18
+ override class func requiresMainQueueSetup() -> Bool {
19
+ return true
20
+ }
21
+
22
+ @objc
23
+ func getCardNetworkImage(
24
+ _ cardNetworkStr: String,
25
+ resolver: RCTPromiseResolveBlock,
26
+ rejecter: RCTPromiseRejectBlock
27
+ ) {
28
+ do {
29
+
30
+ guard let cardNetwork = CardNetwork(rawValue: cardNetworkStr) else {
31
+ let err = RNTNativeError(
32
+ errorId: "native-ios",
33
+ errorDescription: "Failed to find asset of \(cardNetworkStr).",
34
+ recoverySuggestion: nil)
35
+ throw err
36
+ }
37
+
38
+ guard let cardNetworkImage = try PrimerSDK.PrimerHeadlessUniversalCheckout.AssetsManager.getCardNetworkImage(for: cardNetwork) else {
39
+ let err = RNTNativeError(
40
+ errorId: "native-ios",
41
+ errorDescription: "Failed to find asset of \(cardNetworkStr).",
42
+ recoverySuggestion: nil)
43
+ throw err
44
+ }
45
+
46
+ let localUrl = try cardNetworkImage.store(withName: cardNetwork.rawValue)
47
+ resolver(["cardNetworkImageURL": localUrl.absoluteString])
48
+
49
+ } catch {
50
+ rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
51
+ }
52
+ }
53
+
54
+ @objc
55
+ func getPaymentMethodAsset(
56
+ _ paymentMethodType: String,
57
+ resolver: RCTPromiseResolveBlock,
58
+ rejecter: RCTPromiseRejectBlock
59
+ ) {
60
+ do {
61
+ guard let paymentMethodAsset = try PrimerSDK.PrimerHeadlessUniversalCheckout.AssetsManager.getPaymentMethodAsset(for: paymentMethodType) else {
62
+ let err = RNTNativeError(
63
+ errorId: "native-ios",
64
+ errorDescription: "Failed to find asset of \(paymentMethodType) for this session",
65
+ recoverySuggestion: nil)
66
+ throw err
67
+ }
68
+
69
+ if let rntPaymentMethodAsset = try? RNTPrimerPaymentMethodAsset(primerPaymentMethodAsset: paymentMethodAsset).toJsonObject() {
70
+ resolver(["paymentMethodAsset": rntPaymentMethodAsset])
71
+ } else {
72
+ let err = RNTNativeError(
73
+ errorId: "native-ios",
74
+ errorDescription: "Failed to create the RNTPrimerPaymentMethodAsset",
75
+ recoverySuggestion: nil)
76
+ throw err
77
+ }
78
+
79
+ } catch {
80
+ rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
81
+ }
82
+ }
83
+
84
+ @objc
85
+ func getPaymentMethodAssets(
86
+ _ resolver: RCTPromiseResolveBlock,
87
+ rejecter: RCTPromiseRejectBlock
88
+ ) {
89
+ do {
90
+ let paymentMethodAssets = try PrimerSDK.PrimerHeadlessUniversalCheckout.AssetsManager.getPaymentMethodAssets()
91
+
92
+ let rntPaymentMethodAssets = paymentMethodAssets.compactMap({ try? RNTPrimerPaymentMethodAsset(primerPaymentMethodAsset: $0).toJsonObject() })
93
+ guard !rntPaymentMethodAssets.isEmpty else {
94
+ let err = RNTNativeError(
95
+ errorId: "native-ios",
96
+ errorDescription: "Failed to find assets for this session",
97
+ recoverySuggestion: nil)
98
+ throw err
99
+ }
100
+
101
+ resolver(["paymentMethodAssets": rntPaymentMethodAssets])
102
+
103
+ } catch {
104
+ rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
105
+ }
106
+ }
107
+ }
@@ -0,0 +1,41 @@
1
+ //
2
+ // RNTPrimerHeadlessUniversalCheckout.m
3
+ // primer-io-react-native
4
+ //
5
+ // Created by Evangelos on 8/3/22.
6
+ //
7
+
8
+ #import <React/RCTBridgeModule.h>
9
+ #import <React/RCTEventEmitter.h>
10
+
11
+ @interface RCT_EXTERN_MODULE(PrimerHeadlessUniversalCheckout, RCTEventEmitter)
12
+
13
+ RCT_EXTERN_METHOD(startWithClientToken:(NSString *)clientToken
14
+ settingsStr:(NSString *)settingsStr
15
+ resolver:(RCTPromiseResolveBlock)resolver
16
+ rejecter: (RCTPromiseRejectBlock)rejecter)
17
+
18
+ RCT_EXTERN_METHOD(cleanUp:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
19
+
20
+ // MARK: - DECISION HANDLERS
21
+
22
+ // MARK: Tokenization & Resume Handlers
23
+
24
+ RCT_EXTERN_METHOD(handleTokenizationNewClientToken:(NSString *)newClientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
25
+
26
+ RCT_EXTERN_METHOD(handleResumeWithNewClientToken:(NSString *)newClientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
27
+
28
+ RCT_EXTERN_METHOD(handleCompleteFlow:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
29
+
30
+ // MARK: Payment Creation Handlers
31
+
32
+ RCT_EXTERN_METHOD(handlePaymentCreationAbort:(NSString *)errorMessage resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
33
+
34
+ RCT_EXTERN_METHOD(handlePaymentCreationContinue:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
35
+
36
+ // MARK: - HELPERS
37
+
38
+ RCT_EXTERN_METHOD(setImplementedRNCallbacks:(NSString *)implementedRNCallbacksStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
39
+
40
+
41
+ @end
@@ -0,0 +1,498 @@
1
+ //
2
+ // RNTPrimerHeadlessUniversalCheckout.swift
3
+ // primer-io-react-native
4
+ //
5
+ // Created by Evangelos on 8/3/22.
6
+ //
7
+
8
+ import Foundation
9
+ import PrimerSDK
10
+
11
+ @objc
12
+ enum PrimerHeadlessUniversalCheckoutEvents: Int, CaseIterable {
13
+
14
+ // Delegate
15
+ case onAvailablePaymentMethodsLoad = 0
16
+ case onTokenizationStart
17
+ case onTokenizationSuccess
18
+ case onCheckoutResume
19
+ case onCheckoutPending
20
+ case onCheckoutAdditionalInfo
21
+ case onError
22
+ case onCheckoutComplete
23
+ case onBeforeClientSessionUpdate
24
+ case onClientSessionUpdate
25
+ case onBeforePaymentCreate
26
+
27
+ // UI Delegate
28
+ case onPreparationStart
29
+ case onPaymentMethodShow
30
+
31
+ var stringValue: String {
32
+ switch self {
33
+ case .onAvailablePaymentMethodsLoad:
34
+ return "onAvailablePaymentMethodsLoad"
35
+ case .onTokenizationStart:
36
+ return "onTokenizationStart"
37
+ case .onTokenizationSuccess:
38
+ return "onTokenizationSuccess"
39
+ case .onCheckoutResume:
40
+ return "onCheckoutResume"
41
+ case .onCheckoutPending:
42
+ return "onCheckoutPending"
43
+ case .onCheckoutAdditionalInfo:
44
+ return "onCheckoutAdditionalInfo"
45
+ case .onError:
46
+ return "onError"
47
+ case .onBeforeClientSessionUpdate:
48
+ return "onBeforeClientSessionUpdate"
49
+ case .onCheckoutComplete:
50
+ return "onCheckoutComplete"
51
+ case .onBeforePaymentCreate:
52
+ return "onBeforePaymentCreate"
53
+ case .onClientSessionUpdate:
54
+ return "onClientSessionUpdate"
55
+ case .onPreparationStart:
56
+ return "onPreparationStart"
57
+ case .onPaymentMethodShow:
58
+ return "onPaymentMethodShow"
59
+ }
60
+ }
61
+ }
62
+
63
+ @objc(PrimerHeadlessUniversalCheckout)
64
+ class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
65
+
66
+ private var settings: PrimerSettings?
67
+ private var primerWillCreatePaymentWithDataDecisionHandler: ((_ errorMessage: String?) -> Void)?
68
+ private var primerDidTokenizePaymentMethodDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
69
+ private var primerDidResumeWithDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
70
+ private var implementedRNCallbacks: ImplementedRNCallbacks?
71
+
72
+ override class func requiresMainQueueSetup() -> Bool {
73
+ return true
74
+ }
75
+
76
+ override init() {
77
+ super.init()
78
+ PrimerHeadlessUniversalCheckout.current.delegate = self
79
+ PrimerHeadlessUniversalCheckout.current.uiDelegate = self
80
+ }
81
+
82
+ override func supportedEvents() -> [String]! {
83
+ return PrimerHeadlessUniversalCheckoutEvents.allCases.compactMap({ $0.stringValue })
84
+ }
85
+
86
+ // MARK: - API
87
+
88
+ @objc
89
+ public func startWithClientToken(_ clientToken: String,
90
+ settingsStr: String?,
91
+ resolver: @escaping RCTPromiseResolveBlock,
92
+ rejecter: @escaping RCTPromiseRejectBlock)
93
+ {
94
+ do {
95
+ var tmpSettings: PrimerSettings?
96
+ if let settingsStr = settingsStr {
97
+ tmpSettings = try PrimerSettings(settingsStr: settingsStr)
98
+ self.settings = tmpSettings
99
+ }
100
+
101
+ PrimerHeadlessUniversalCheckout.current.start(
102
+ withClientToken: clientToken,
103
+ settings: settings,
104
+ delegate: self,
105
+ uiDelegate: self) { paymentMethods, err in
106
+ if let err = err {
107
+ rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
108
+ } else if let paymentMethods = paymentMethods {
109
+ let paymentMethodObjects = paymentMethods.compactMap({ $0.toJsonObject() })
110
+ resolver(["availablePaymentMethods": paymentMethodObjects])
111
+ }
112
+ }
113
+
114
+ } catch {
115
+ rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
116
+ }
117
+ }
118
+
119
+ @objc
120
+ public func cleanUp(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
121
+ DispatchQueue.main.async {
122
+ PrimerHeadlessUniversalCheckout.current.cleanUp()
123
+ resolver(nil)
124
+ }
125
+ }
126
+
127
+ // MARK: - DECISION HANDLERS
128
+
129
+ // MARK: Tokenization & Resume Handlers
130
+
131
+ @objc
132
+ public func handleTokenizationNewClientToken(_ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
133
+ DispatchQueue.main.async {
134
+ self.primerDidTokenizePaymentMethodDecisionHandler?(newClientToken, nil)
135
+ self.primerDidTokenizePaymentMethodDecisionHandler = nil
136
+ resolver(nil)
137
+ }
138
+ }
139
+
140
+ @objc
141
+ public func handleResumeWithNewClientToken(_ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
142
+ DispatchQueue.main.async {
143
+ self.primerDidResumeWithDecisionHandler?(newClientToken, nil)
144
+ self.primerDidResumeWithDecisionHandler = nil
145
+ resolver(nil)
146
+ }
147
+ }
148
+
149
+ @objc
150
+ public func handleCompleteFlow(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
151
+ DispatchQueue.main.async {
152
+ self.primerDidResumeWithDecisionHandler?(nil, nil)
153
+ self.primerDidResumeWithDecisionHandler = nil
154
+ resolver(nil)
155
+ }
156
+ }
157
+
158
+ // MARK: Payment Creation
159
+
160
+ @objc
161
+ public func handlePaymentCreationAbort(_ errorMessage: String?, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
162
+ DispatchQueue.main.async {
163
+ self.primerWillCreatePaymentWithDataDecisionHandler?(errorMessage ?? "")
164
+ self.primerWillCreatePaymentWithDataDecisionHandler = nil
165
+ resolver(nil)
166
+ }
167
+ }
168
+
169
+ @objc
170
+ public func handlePaymentCreationContinue(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
171
+ DispatchQueue.main.async {
172
+ self.primerWillCreatePaymentWithDataDecisionHandler?(nil)
173
+ self.primerWillCreatePaymentWithDataDecisionHandler = nil
174
+ resolver(nil)
175
+ }
176
+ }
177
+
178
+ // MARK: Helpers
179
+
180
+ private func detectImplemetedCallbacks() {
181
+ sendEvent(withName: PrimerEvents.detectImplementedRNCallbacks.stringValue, body: nil)
182
+ }
183
+
184
+ @objc
185
+ public func setImplementedRNCallbacks(_ implementedRNCallbacksStr: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
186
+ DispatchQueue.main.async {
187
+ do {
188
+ guard let implementedRNCallbacksData = implementedRNCallbacksStr.data(using: .utf8) else {
189
+ let err = RNTNativeError(
190
+ errorId: "native-ios",
191
+ errorDescription: "Failed to convert string to data",
192
+ recoverySuggestion: nil)
193
+ throw err
194
+ }
195
+ self.implementedRNCallbacks = try JSONDecoder().decode(ImplementedRNCallbacks.self, from: implementedRNCallbacksData)
196
+ resolver(nil)
197
+ } catch {
198
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: false)
199
+ rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
200
+ }
201
+ }
202
+ }
203
+
204
+ private func handleRNBridgeError(_ error: Error, checkoutData: PrimerCheckoutData?, stopOnDebug: Bool) {
205
+ DispatchQueue.main.async {
206
+ if stopOnDebug {
207
+ assertionFailure(error.localizedDescription)
208
+ }
209
+
210
+ var body: [String: Any] = ["error": error.rnError]
211
+ if let checkoutData = checkoutData,
212
+ let data = try? JSONEncoder().encode(checkoutData),
213
+ let json = try? JSONSerialization.jsonObject(with: data){
214
+ body["checkoutData"] = json
215
+ }
216
+
217
+ self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onError.stringValue, body: body)
218
+ }
219
+ }
220
+ }
221
+
222
+ // MARK: - EVENTS
223
+
224
+ extension RNTPrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutDelegate {
225
+
226
+ // case onAvailablePaymentMethodsLoad = 0
227
+ func primerHeadlessUniversalCheckoutDidLoadAvailablePaymentMethods(_ paymentMethods: [PrimerHeadlessUniversalCheckout.PaymentMethod]) {
228
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onAvailablePaymentMethodsLoad.stringValue
229
+
230
+ DispatchQueue.main.async {
231
+ self.sendEvent(
232
+ withName: rnCallbackName,
233
+ body: ["availablePaymentMethods": paymentMethods.compactMap({ $0.toJsonObject() })])
234
+ }
235
+ }
236
+
237
+ // case onTokenizationStart
238
+ func primerHeadlessUniversalCheckoutDidStartTokenization(for paymentMethodType: String) {
239
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onTokenizationStart.stringValue
240
+
241
+ DispatchQueue.main.async {
242
+ self.sendEvent(
243
+ withName: rnCallbackName,
244
+ body: ["paymentMethodType": paymentMethodType])
245
+ }
246
+ }
247
+
248
+ // case onTokenizationSuccess
249
+ func primerHeadlessUniversalCheckoutDidTokenizePaymentMethod(_ paymentMethodTokenData: PrimerPaymentMethodTokenData, decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void) {
250
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onTokenizationSuccess.stringValue
251
+
252
+ DispatchQueue.main.async {
253
+ if self.implementedRNCallbacks?.isOnTokenizationSuccessImplemented == true {
254
+ self.primerDidTokenizePaymentMethodDecisionHandler = { (newClientToken, errorMessage) in
255
+ DispatchQueue.main.async {
256
+ if let newClientToken = newClientToken {
257
+ decisionHandler(.continueWithNewClientToken(newClientToken))
258
+ } else {
259
+ decisionHandler(.complete())
260
+ }
261
+ }
262
+ }
263
+
264
+ do {
265
+ let paymentMethodTokenJson = try paymentMethodTokenData.toJsonObject()
266
+ self.sendEvent(
267
+ withName: rnCallbackName,
268
+ body: ["paymentMethodTokenData": paymentMethodTokenJson])
269
+
270
+ } catch {
271
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
272
+ }
273
+ } else {
274
+ if self.settings?.paymentHandling == .manual {
275
+ let err = RNTNativeError(
276
+ errorId: "native-ios",
277
+ errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
278
+ recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
279
+ self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
280
+ }
281
+ }
282
+ }
283
+ }
284
+
285
+ // case onCheckoutResume
286
+ func primerHeadlessUniversalCheckoutDidResumeWith(_ resumeToken: String, decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void) {
287
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutResume.stringValue
288
+
289
+ DispatchQueue.main.async {
290
+ if self.implementedRNCallbacks?.isOnCheckoutResumeImplemented == true {
291
+ self.primerDidResumeWithDecisionHandler = { (resumeToken, errorMessage) in
292
+ DispatchQueue.main.async {
293
+ if let resumeToken = resumeToken {
294
+ decisionHandler(.continueWithNewClientToken(resumeToken))
295
+ } else {
296
+ decisionHandler(.complete())
297
+ }
298
+ }
299
+ }
300
+
301
+ self.sendEvent(
302
+ withName: rnCallbackName,
303
+ body: ["resumeToken": resumeToken])
304
+
305
+ } else {
306
+ if self.settings?.paymentHandling == .manual {
307
+ let err = RNTNativeError(
308
+ errorId: "native-ios",
309
+ errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
310
+ recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
311
+ self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
312
+ }
313
+ }
314
+ }
315
+ }
316
+
317
+ // case onCheckoutPending
318
+ func primerHeadlessUniversalCheckoutDidEnterResumePendingWithPaymentAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?) {
319
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutPending.stringValue
320
+
321
+ DispatchQueue.main.async {
322
+ if self.implementedRNCallbacks?.isOnCheckoutPendingImplemented == true {
323
+ do {
324
+ let checkoutAdditionalInfoJson = try additionalInfo?.toJsonObject()
325
+ self.sendEvent(withName: rnCallbackName, body: checkoutAdditionalInfoJson)
326
+ } catch {
327
+ let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
328
+ self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
329
+ }
330
+ } else {
331
+ let err = RNTNativeError(
332
+ errorId: "native-ios",
333
+ errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
334
+ recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
335
+
336
+ let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
337
+ self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
338
+ }
339
+ }
340
+ }
341
+
342
+ // case onCheckoutAdditionalInfo
343
+ func primerHeadlessUniversalCheckoutDidReceiveAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?) {
344
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutAdditionalInfo.stringValue
345
+
346
+ DispatchQueue.main.async {
347
+ if self.implementedRNCallbacks?.isOnCheckoutAdditionalInfoImplemented == true {
348
+ do {
349
+ let checkoutAdditionalInfoJson = try additionalInfo?.toJsonObject()
350
+ self.sendEvent(
351
+ withName: rnCallbackName,
352
+ body: checkoutAdditionalInfoJson)
353
+
354
+ } catch {
355
+ let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
356
+ self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
357
+ }
358
+ } else {
359
+ let err = RNTNativeError(
360
+ errorId: "native-bridge",
361
+ errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
362
+ recoverySuggestion: "Callback [\(rnCallbackName)] should be implemented.")
363
+
364
+ let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
365
+ self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
366
+ }
367
+ }
368
+ }
369
+
370
+ // case onError
371
+ func primerHeadlessUniversalCheckoutDidFail(withError err: Error, checkoutData: PrimerCheckoutData?) {
372
+ if self.implementedRNCallbacks?.isOnErrorImplemented == true {
373
+ // Send the error message to the RN bridge.
374
+ self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
375
+
376
+ } else {
377
+ // RN dev hasn't opted in on listening SDK errors.
378
+ // Ignore!
379
+ }
380
+ }
381
+
382
+ // case onCheckoutComplete
383
+ func primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData(_ data: PrimerCheckoutData) {
384
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutComplete.stringValue
385
+
386
+ DispatchQueue.main.async {
387
+ if self.implementedRNCallbacks?.isOnCheckoutCompleteImplemented == true {
388
+ do {
389
+ let checkoutJson = try data.toJsonObject()
390
+ self.sendEvent(withName: rnCallbackName, body: checkoutJson)
391
+ } catch {
392
+ self.handleRNBridgeError(error, checkoutData: data, stopOnDebug: true)
393
+ }
394
+ } else {
395
+ let err = RNTNativeError(
396
+ errorId: "native-ios",
397
+ errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
398
+ recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
399
+ self.handleRNBridgeError(err, checkoutData: data, stopOnDebug: false)
400
+ }
401
+ }
402
+ }
403
+
404
+ // case onBeforeClientSessionUpdate
405
+ func primerHeadlessUniversalCheckoutWillUpdateClientSession() {
406
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onBeforeClientSessionUpdate.stringValue
407
+
408
+ DispatchQueue.main.async {
409
+ if self.implementedRNCallbacks?.isOnBeforeClientSessionUpdateImplemented == true {
410
+ self.sendEvent(
411
+ withName: rnCallbackName,
412
+ body: nil)
413
+ }
414
+ }
415
+ }
416
+
417
+ // case onClientSessionUpdate
418
+ func primerHeadlessUniversalCheckoutDidUpdateClientSession(_ clientSession: PrimerClientSession) {
419
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onClientSessionUpdate.stringValue
420
+
421
+ DispatchQueue.main.async {
422
+ if self.implementedRNCallbacks?.isOnClientSessionUpdateImplemented == true {
423
+ do {
424
+ let json = try clientSession.toJsonObject()
425
+ self.sendEvent(
426
+ withName: rnCallbackName,
427
+ body: ["clientSession": json])
428
+
429
+ } catch {
430
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
431
+ }
432
+ }
433
+ }
434
+ }
435
+
436
+ // case onBeforePaymentCreate
437
+ func primerHeadlessUniversalCheckoutWillCreatePaymentWithData(_ data: PrimerCheckoutPaymentMethodData, decisionHandler: @escaping (PrimerPaymentCreationDecision) -> Void) {
438
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onBeforePaymentCreate.stringValue
439
+
440
+ DispatchQueue.main.async {
441
+ if self.implementedRNCallbacks?.isOnBeforePaymentCreateImplemented == true {
442
+ self.primerWillCreatePaymentWithDataDecisionHandler = { errorMessage in
443
+ DispatchQueue.main.async {
444
+ if let errorMessage = errorMessage {
445
+ decisionHandler(.abortPaymentCreation(withErrorMessage: errorMessage.isEmpty ? nil : errorMessage))
446
+ } else {
447
+ decisionHandler(.continuePaymentCreation())
448
+ }
449
+ }
450
+ }
451
+
452
+ do {
453
+ let checkoutPaymentmethodJson = try data.toJsonObject()
454
+ self.sendEvent(
455
+ withName: rnCallbackName,
456
+ body: checkoutPaymentmethodJson)
457
+
458
+ } catch {
459
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
460
+ }
461
+
462
+ } else {
463
+ // 'primerHeadlessUniversalCheckoutWillCreatePaymentWithData' hasn't
464
+ // been implemented on the RN side, continue the payment flow.
465
+ decisionHandler(.continuePaymentCreation())
466
+ }
467
+ }
468
+ }
469
+
470
+ }
471
+
472
+ extension RNTPrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutUIDelegate {
473
+
474
+ // onPreparationStart
475
+ func primerHeadlessUniversalCheckoutUIDidStartPreparation(for paymentMethodType: String) {
476
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onPreparationStart.stringValue
477
+
478
+ DispatchQueue.main.async {
479
+ if self.implementedRNCallbacks?.isOnPreparationStartImplemented == true {
480
+ self.sendEvent(
481
+ withName: rnCallbackName,
482
+ body: ["paymentMethodType": paymentMethodType])
483
+ }
484
+ }
485
+ }
486
+
487
+ func primerHeadlessUniversalCheckoutUIDidShowPaymentMethod(for paymentMethodType: String) {
488
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onPaymentMethodShow.stringValue
489
+
490
+ DispatchQueue.main.async {
491
+ if self.implementedRNCallbacks?.isOnPaymentMethodShowImplemented == true {
492
+ self.sendEvent(
493
+ withName: rnCallbackName,
494
+ body: ["paymentMethodType": paymentMethodType])
495
+ }
496
+ }
497
+ }
498
+ }
@@ -0,0 +1,17 @@
1
+ //
2
+ // Encodable+Extension.swift
3
+ // primer-io-react-native
4
+ //
5
+ // Created by Evangelos on 7/10/22.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ extension Encodable {
11
+
12
+ func toJsonObject() throws -> Any {
13
+ let data = try JSONEncoder().encode(self)
14
+ let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
15
+ return json
16
+ }
17
+ }