@primer-io/react-native 2.16.0 → 2.17.0-rc.1

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 +13 -34
  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 +99 -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 +0 -8
  30. package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt +0 -4
  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 +82 -0
  42. package/ios/{DataModels → Sources/DataModels}/PrimerThemeRN.swift +0 -0
  43. package/ios/Sources/DataModels/RNTNativeError.swift +22 -0
  44. package/ios/Sources/DataModels/RNTPrimerPaymentMethodAsset.swift +65 -0
  45. package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTNativeUIManager.m +19 -0
  46. package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTNativeUIManager.swift +63 -0
  47. package/ios/{Headless Universal Checkout → Sources/Headless Universal Checkout/Managers/Payment Method Managers}/RNTPrimerCardNumberInputElementManager.m +0 -0
  48. package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTRawDataManager.m +23 -0
  49. package/ios/{Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutRawDataManager.swift → Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTRawDataManager.swift } +36 -31
  50. package/ios/Sources/Headless Universal Checkout/Managers/RNTAssetsManager.m +24 -0
  51. package/ios/Sources/Headless Universal Checkout/Managers/RNTAssetsManager.swift +107 -0
  52. package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +41 -0
  53. package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +498 -0
  54. package/ios/Sources/Helpers/Encodable+Extension.swift +17 -0
  55. package/ios/Sources/Helpers/Error+Extensions.swift +39 -0
  56. package/ios/Sources/Helpers/UIColor+Extensions.swift +32 -0
  57. package/ios/Sources/Helpers/UIImage+Extensions.swift +32 -0
  58. package/ios/Sources/RNTPrimer.m +80 -0
  59. package/ios/{RNTPrimer.swift → Sources/RNTPrimer.swift} +20 -34
  60. package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js +59 -0
  61. package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -0
  62. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js +35 -0
  63. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +1 -0
  64. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +151 -0
  65. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -0
  66. package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +270 -0
  67. package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -0
  68. package/lib/commonjs/{headless_checkout → HeadlessUniversalCheckout}/RNPrimerHeadlessUniversalCheckout.js +7 -81
  69. package/lib/commonjs/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
  70. package/lib/commonjs/HeadlessUniversalCheckout/types.js +34 -0
  71. package/lib/commonjs/HeadlessUniversalCheckout/types.js.map +1 -0
  72. package/lib/commonjs/Primer.js +52 -52
  73. package/lib/commonjs/Primer.js.map +1 -1
  74. package/lib/commonjs/PrimerInput.js.map +1 -1
  75. package/lib/commonjs/RNPrimer.js +2 -12
  76. package/lib/commonjs/RNPrimer.js.map +1 -1
  77. package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -1
  78. package/lib/commonjs/index.js +63 -71
  79. package/lib/commonjs/index.js.map +1 -1
  80. package/lib/commonjs/models/PrimerAsset.js +2 -0
  81. package/lib/commonjs/models/PrimerAsset.js.map +1 -0
  82. package/lib/commonjs/models/PrimerCheckoutAdditionalInfo.js.map +1 -1
  83. package/lib/commonjs/models/PrimerCheckoutData.js.map +1 -1
  84. package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js.map +1 -1
  85. package/lib/commonjs/models/PrimerClientSession.js.map +1 -1
  86. package/lib/commonjs/models/PrimerCountryCode.js.map +1 -1
  87. package/lib/commonjs/models/PrimerCurrencyCode.js.map +1 -1
  88. package/lib/commonjs/models/PrimerError.js +4 -4
  89. package/lib/commonjs/models/PrimerError.js.map +1 -1
  90. package/lib/commonjs/models/PrimerHandlers.js +2 -0
  91. package/lib/commonjs/models/PrimerHandlers.js.map +1 -0
  92. package/lib/commonjs/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js +2 -0
  93. package/lib/commonjs/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js.map +1 -0
  94. package/lib/commonjs/models/PrimerImplementedRNCallbacks.js +2 -0
  95. package/lib/commonjs/models/PrimerImplementedRNCallbacks.js.map +1 -0
  96. package/lib/commonjs/models/PrimerInitializationData.js.map +1 -1
  97. package/lib/commonjs/models/PrimerInputElementType.js +20 -0
  98. package/lib/commonjs/models/PrimerInputElementType.js.map +1 -0
  99. package/lib/commonjs/models/PrimerInterfaces.js.map +1 -1
  100. package/lib/commonjs/models/PrimerPaymentMethodManagerCategory.js +14 -0
  101. package/lib/commonjs/models/PrimerPaymentMethodManagerCategory.js.map +1 -0
  102. package/lib/commonjs/models/PrimerPaymentMethodTokenData.js.map +1 -1
  103. package/lib/commonjs/models/PrimerRawData.js.map +1 -1
  104. package/lib/commonjs/models/PrimerSessionIntent.js.map +1 -1
  105. package/lib/commonjs/models/PrimerSettings.js.map +1 -1
  106. package/lib/commonjs/models/PrimerTheme.js.map +1 -1
  107. package/lib/commonjs/models/RetailOutletsRetail.js.map +1 -1
  108. package/lib/commonjs/utils/index.js.map +1 -1
  109. package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js +52 -0
  110. package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -0
  111. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js +28 -0
  112. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +1 -0
  113. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +144 -0
  114. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -0
  115. package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +261 -0
  116. package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -0
  117. package/lib/module/{headless_checkout → HeadlessUniversalCheckout}/RNPrimerHeadlessUniversalCheckout.js +7 -81
  118. package/lib/module/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
  119. package/lib/module/HeadlessUniversalCheckout/types.js +33 -0
  120. package/lib/module/HeadlessUniversalCheckout/types.js.map +1 -0
  121. package/lib/module/Primer.js +52 -52
  122. package/lib/module/Primer.js.map +1 -1
  123. package/lib/module/PrimerInput.js.map +1 -1
  124. package/lib/module/RNPrimer.js +2 -12
  125. package/lib/module/RNPrimer.js.map +1 -1
  126. package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -1
  127. package/lib/module/index.js +15 -9
  128. package/lib/module/index.js.map +1 -1
  129. package/lib/module/models/PrimerAsset.js +2 -0
  130. package/lib/module/models/PrimerAsset.js.map +1 -0
  131. package/lib/module/models/PrimerCheckoutAdditionalInfo.js.map +1 -1
  132. package/lib/module/models/PrimerCheckoutData.js.map +1 -1
  133. package/lib/module/models/PrimerCheckoutPaymentMethodData.js.map +1 -1
  134. package/lib/module/models/PrimerClientSession.js.map +1 -1
  135. package/lib/module/models/PrimerCountryCode.js.map +1 -1
  136. package/lib/module/models/PrimerCurrencyCode.js.map +1 -1
  137. package/lib/module/models/PrimerError.js +4 -4
  138. package/lib/module/models/PrimerError.js.map +1 -1
  139. package/lib/module/models/PrimerHandlers.js +2 -0
  140. package/lib/module/models/PrimerHandlers.js.map +1 -0
  141. package/lib/module/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js +2 -0
  142. package/lib/module/models/PrimerHeadlessUniversalCheckoutPaymentMethod.js.map +1 -0
  143. package/lib/module/models/PrimerImplementedRNCallbacks.js +2 -0
  144. package/lib/module/models/PrimerImplementedRNCallbacks.js.map +1 -0
  145. package/lib/module/models/PrimerInitializationData.js.map +1 -1
  146. package/lib/module/models/PrimerInputElementType.js +13 -0
  147. package/lib/module/models/PrimerInputElementType.js.map +1 -0
  148. package/lib/module/models/PrimerInterfaces.js.map +1 -1
  149. package/lib/module/models/PrimerPaymentMethodManagerCategory.js +7 -0
  150. package/lib/module/models/PrimerPaymentMethodManagerCategory.js.map +1 -0
  151. package/lib/module/models/PrimerPaymentMethodTokenData.js.map +1 -1
  152. package/lib/module/models/PrimerRawData.js.map +1 -1
  153. package/lib/module/models/PrimerSessionIntent.js.map +1 -1
  154. package/lib/module/models/PrimerSettings.js.map +1 -1
  155. package/lib/module/models/PrimerTheme.js.map +1 -1
  156. package/lib/module/models/RetailOutletsRetail.js.map +1 -1
  157. package/lib/module/utils/index.js.map +1 -1
  158. package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts +9 -0
  159. package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts.map +1 -0
  160. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.d.ts +8 -0
  161. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.d.ts.map +1 -0
  162. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts +29 -0
  163. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts.map +1 -0
  164. package/lib/typescript/{headless_checkout → HeadlessUniversalCheckout}/PrimerHeadlessUniversalCheckout.d.ts +4 -5
  165. package/lib/typescript/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.d.ts.map +1 -0
  166. package/lib/typescript/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.d.ts +18 -0
  167. package/lib/typescript/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.d.ts.map +1 -0
  168. package/lib/typescript/HeadlessUniversalCheckout/types.d.ts +1 -0
  169. package/lib/typescript/HeadlessUniversalCheckout/types.d.ts.map +1 -0
  170. package/lib/typescript/Primer.d.ts +1 -0
  171. package/lib/typescript/Primer.d.ts.map +1 -0
  172. package/lib/typescript/PrimerInput.d.ts +5 -4
  173. package/lib/typescript/PrimerInput.d.ts.map +1 -0
  174. package/lib/typescript/RNPrimer.d.ts +3 -4
  175. package/lib/typescript/RNPrimer.d.ts.map +1 -0
  176. package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts +1 -0
  177. package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts.map +1 -0
  178. package/lib/typescript/index.d.ts +18 -9
  179. package/lib/typescript/index.d.ts.map +1 -0
  180. package/lib/typescript/models/PrimerAsset.d.ts +14 -0
  181. package/lib/typescript/models/PrimerAsset.d.ts.map +1 -0
  182. package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts +7 -6
  183. package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts.map +1 -0
  184. package/lib/typescript/models/PrimerCheckoutData.d.ts +3 -2
  185. package/lib/typescript/models/PrimerCheckoutData.d.ts.map +1 -0
  186. package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts +2 -1
  187. package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts.map +1 -0
  188. package/lib/typescript/models/PrimerClientSession.d.ts +6 -5
  189. package/lib/typescript/models/PrimerClientSession.d.ts.map +1 -0
  190. package/lib/typescript/models/PrimerCountryCode.d.ts +2 -1
  191. package/lib/typescript/models/PrimerCountryCode.d.ts.map +1 -0
  192. package/lib/typescript/models/PrimerCurrencyCode.d.ts +2 -1
  193. package/lib/typescript/models/PrimerCurrencyCode.d.ts.map +1 -0
  194. package/lib/typescript/models/PrimerError.d.ts +3 -1
  195. package/lib/typescript/models/PrimerError.d.ts.map +1 -0
  196. package/lib/typescript/models/PrimerHandlers.d.ts +22 -0
  197. package/lib/typescript/models/PrimerHandlers.d.ts.map +1 -0
  198. package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts +6 -0
  199. package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts.map +1 -0
  200. package/lib/typescript/models/PrimerImplementedRNCallbacks.d.ts +17 -0
  201. package/lib/typescript/models/PrimerImplementedRNCallbacks.d.ts.map +1 -0
  202. package/lib/typescript/models/PrimerInitializationData.d.ts +3 -2
  203. package/lib/typescript/models/PrimerInitializationData.d.ts.map +1 -0
  204. package/lib/typescript/models/PrimerInputElementType.d.ts +12 -0
  205. package/lib/typescript/models/PrimerInputElementType.d.ts.map +1 -0
  206. package/lib/typescript/models/PrimerInterfaces.d.ts +2 -20
  207. package/lib/typescript/models/PrimerInterfaces.d.ts.map +1 -0
  208. package/lib/typescript/models/PrimerPaymentMethodManagerCategory.d.ts +6 -0
  209. package/lib/typescript/models/PrimerPaymentMethodManagerCategory.d.ts.map +1 -0
  210. package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts +2 -1
  211. package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts.map +1 -0
  212. package/lib/typescript/models/PrimerRawData.d.ts +7 -10
  213. package/lib/typescript/models/PrimerRawData.d.ts.map +1 -0
  214. package/lib/typescript/models/PrimerSessionIntent.d.ts +1 -0
  215. package/lib/typescript/models/PrimerSessionIntent.d.ts.map +1 -0
  216. package/lib/typescript/models/PrimerSettings.d.ts +30 -16
  217. package/lib/typescript/models/PrimerSettings.d.ts.map +1 -0
  218. package/lib/typescript/models/PrimerTheme.d.ts +3 -2
  219. package/lib/typescript/models/PrimerTheme.d.ts.map +1 -0
  220. package/lib/typescript/models/RetailOutletsRetail.d.ts +2 -1
  221. package/lib/typescript/models/RetailOutletsRetail.d.ts.map +1 -0
  222. package/lib/typescript/utils/index.d.ts +1 -0
  223. package/lib/typescript/utils/index.d.ts.map +1 -0
  224. package/package.json +8 -7
  225. package/primer-io-react-native.podspec +1 -2
  226. package/src/HeadlessUniversalCheckout/Managers/AssetsManager.ts +56 -0
  227. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.ts +31 -0
  228. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.ts +166 -0
  229. package/src/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.ts +333 -0
  230. package/src/{headless_checkout → HeadlessUniversalCheckout}/RNPrimerHeadlessUniversalCheckout.ts +37 -128
  231. package/src/HeadlessUniversalCheckout/types.ts +32 -0
  232. package/src/Primer.ts +49 -60
  233. package/src/RNPrimer.ts +2 -18
  234. package/src/index.tsx +43 -29
  235. package/src/models/PrimerAsset.ts +13 -0
  236. package/src/models/PrimerError.ts +3 -1
  237. package/src/models/PrimerHandlers.ts +25 -0
  238. package/src/models/PrimerHeadlessUniversalCheckoutPaymentMethod.ts +5 -0
  239. package/src/models/PrimerImplementedRNCallbacks.ts +20 -0
  240. package/src/models/PrimerInputElementType.ts +11 -0
  241. package/src/models/PrimerInterfaces.ts +1 -28
  242. package/src/models/PrimerPaymentMethodManagerCategory.ts +5 -0
  243. package/src/models/PrimerRawData.ts +6 -10
  244. package/src/models/PrimerSettings.ts +40 -26
  245. package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/cardRedirect/PrimerRNPRawCardRedirectData.kt +0 -20
  246. package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/phoneNumber/PrimerRNRawPhoneNumberData.kt +0 -14
  247. package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/retailOutlets/PrimerRNRawRetailOutletData.kt +0 -12
  248. package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +0 -15
  249. package/ios/DataModels/ImplementedRNCallbacks.swift +0 -62
  250. package/ios/DataModels/PrimerErrorRN.swift +0 -35
  251. package/ios/DataModels/PrimerSettingsRN.swift +0 -84
  252. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +0 -62
  253. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +0 -501
  254. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.m +0 -14
  255. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +0 -117
  256. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutRawDataManager.m +0 -23
  257. package/ios/RNTPrimer.m +0 -59
  258. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -288
  259. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
  260. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js +0 -91
  261. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
  262. package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +0 -1
  263. package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js +0 -91
  264. package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
  265. package/lib/commonjs/headless_checkout/types.js +0 -6
  266. package/lib/commonjs/headless_checkout/types.js.map +0 -1
  267. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -279
  268. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
  269. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js +0 -83
  270. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
  271. package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +0 -1
  272. package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js +0 -84
  273. package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map +0 -1
  274. package/lib/module/headless_checkout/types.js +0 -2
  275. package/lib/module/headless_checkout/types.js.map +0 -1
  276. package/lib/typescript/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.d.ts +0 -18
  277. package/lib/typescript/headless_checkout/RNPrimerHeadlessUniversalCheckout.d.ts +0 -22
  278. package/lib/typescript/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.d.ts +0 -14
  279. package/lib/typescript/headless_checkout/types.d.ts +0 -22
  280. package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +0 -358
  281. package/src/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.ts +0 -109
  282. package/src/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.ts +0 -104
  283. package/src/headless_checkout/types.ts +0 -32
@@ -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
+ }
@@ -0,0 +1,39 @@
1
+ //
2
+ // Error+Extensions.swift
3
+ // primer-io-react-native
4
+ //
5
+ // Created by Evangelos on 7/10/22.
6
+ //
7
+
8
+ import Foundation
9
+ import PrimerSDK
10
+
11
+ internal extension Error {
12
+ var rnError: [String: String] {
13
+ var json: [String: String] = [
14
+ "description": localizedDescription
15
+ ]
16
+
17
+ if let primerValidationErr = self as? PrimerValidationError {
18
+ json["errorId"] = primerValidationErr.errorId
19
+ json["diagnosticsId"] = primerValidationErr.diagnosticsId
20
+
21
+ } else if let primerErr = self as? PrimerError {
22
+ json["errorId"] = primerErr.errorId
23
+ json["diagnosticsId"] = primerErr.diagnosticsId
24
+
25
+ } else {
26
+ json["errorId"] = (self as NSError).domain
27
+ }
28
+
29
+ if let inputElementType = (self as NSError).userInfo["inputElementType"] as? String {
30
+ json["inputElementType"] = inputElementType
31
+ }
32
+
33
+ if let recoverySuggestion = (self as NSError).localizedRecoverySuggestion {
34
+ json["recoverySuggestion"] = recoverySuggestion
35
+ }
36
+
37
+ return json
38
+ }
39
+ }
@@ -0,0 +1,32 @@
1
+ //
2
+ // UIColor+Extensions.swift
3
+ // primer-io-react-native
4
+ //
5
+ // Created by Evangelos on 6/10/22.
6
+ //
7
+
8
+ import UIKit
9
+
10
+ extension UIColor {
11
+
12
+ func toHex(alpha: Bool = false) -> String? {
13
+ guard let components = cgColor.components, components.count >= 3 else {
14
+ return nil
15
+ }
16
+
17
+ let r = Float(components[0])
18
+ let g = Float(components[1])
19
+ let b = Float(components[2])
20
+ var a = Float(1.0)
21
+
22
+ if components.count >= 4 {
23
+ a = Float(components[3])
24
+ }
25
+
26
+ if alpha {
27
+ return String(format: "%02lX%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255), lroundf(a * 255))
28
+ } else {
29
+ return String(format: "%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255))
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ //
2
+ // UIImage+Extensions.swift
3
+ // primer-io-react-native
4
+ //
5
+ // Created by Evangelos on 6/10/22.
6
+ //
7
+
8
+ import UIKit
9
+
10
+ extension UIImage {
11
+
12
+ func store(withName name: String) throws -> URL {
13
+ guard let imageURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("\(name).png") else {
14
+ let err = RNTNativeError(
15
+ errorId: "native-ios",
16
+ errorDescription: "Failed to create URL for asset",
17
+ recoverySuggestion: nil)
18
+ throw err
19
+ }
20
+
21
+ guard let pngData = self.pngData() else {
22
+ let err = RNTNativeError(
23
+ errorId: "native-ios",
24
+ errorDescription: "Failed to get image's PNG data",
25
+ recoverySuggestion: nil)
26
+ throw err
27
+ }
28
+
29
+ try pngData.write(to: imageURL)
30
+ return imageURL
31
+ }
32
+ }