@primer-io/react-native 2.30.0 → 2.30.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 (308) hide show
  1. package/android/.editorconfig +2 -0
  2. package/android/build.gradle +29 -1
  3. package/android/detekt-baseline.xml +24 -0
  4. package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +248 -195
  5. package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +261 -253
  6. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +177 -143
  7. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +298 -291
  8. package/android/src/main/java/com/primerioreactnative/PrimerRNViewModelStoreOwner.kt +2 -3
  9. package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +33 -36
  10. package/android/src/main/java/com/primerioreactnative/components/assets/AssetsManager.kt +29 -30
  11. package/android/src/main/java/com/primerioreactnative/components/assets/CardNetworkImageFileProvider.kt +15 -15
  12. package/android/src/main/java/com/primerioreactnative/components/assets/PaymentMethodAssetFileProvider.kt +16 -16
  13. package/android/src/main/java/com/primerioreactnative/components/datamodels/core/PrimerRNHeadlessUniversalCheckoutPaymentMethod.kt +9 -9
  14. package/android/src/main/java/com/primerioreactnative/components/datamodels/core/PrimerRawPaymentMethodType.kt +5 -5
  15. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/asset/Resources.kt +143 -0
  16. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/card/PrimerRNCardData.kt +11 -11
  17. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/cardRedirect/PrimerRNBancontactCardData.kt +19 -0
  18. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/phoneNumber/PrimerRNPhoneNumberData.kt +5 -5
  19. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/retailOutlets/PrimerRNRetailOutletData.kt +2 -3
  20. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/retailOutlets/RNRetailOutletsList.kt +15 -14
  21. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/vault/PrimerRNValidationError.kt +10 -10
  22. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/vault/PrimerRNVaultedPaymentMethod.kt +15 -16
  23. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/vault/PrimerRNVaultedPaymentMethodAdditionalData.kt +4 -2
  24. package/android/src/main/java/com/primerioreactnative/components/events/PrimerHeadlessUniversalCheckoutComponentEvent.kt +6 -6
  25. package/android/src/main/java/com/primerioreactnative/components/events/PrimerHeadlessUniversalCheckoutEvent.kt +13 -13
  26. package/android/src/main/java/com/primerioreactnative/components/events/PrimerHeadlessUniversalCheckoutRawDataManagerEvent.kt +2 -2
  27. package/android/src/main/java/com/primerioreactnative/components/manager/NativeViewContainer.kt +9 -8
  28. package/android/src/main/java/com/primerioreactnative/components/manager/ach/{AchMandateManager.kt → PrimerRNAchMandateManager.kt} +20 -17
  29. package/android/src/main/java/com/primerioreactnative/components/manager/ach/PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent.kt +227 -212
  30. package/android/src/main/java/com/primerioreactnative/components/manager/asset/PrimerRNHeadlessUniversalCheckoutAssetManager.kt +178 -163
  31. package/android/src/main/java/com/primerioreactnative/components/manager/banks/PrimerRNHeadlessUniversalCheckoutBanksComponent.kt +207 -194
  32. package/android/src/main/java/com/primerioreactnative/components/manager/googlePay/PrimerGooglePayButtonConstantsModule.kt +23 -26
  33. package/android/src/main/java/com/primerioreactnative/components/manager/googlePay/PrimerGooglePayButtonManager.kt +25 -23
  34. package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerKlarnaPaymentViewManager.kt +24 -23
  35. package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.kt +111 -87
  36. package/android/src/main/java/com/primerioreactnative/components/manager/nativeUi/PrimerRNHeadlessUniversalCheckoutNativeUiManager.kt +68 -63
  37. package/android/src/main/java/com/primerioreactnative/components/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManager.kt +189 -164
  38. package/android/src/main/java/com/primerioreactnative/components/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManagerListener.kt +39 -37
  39. package/android/src/main/java/com/primerioreactnative/components/manager/vault/PrimerRNHeadlessUniversalCheckoutVaultManager.kt +128 -118
  40. package/android/src/main/java/com/primerioreactnative/datamodels/{NamedComponentStepRN.kt → NamedComponentStep.kt} +0 -2
  41. package/android/src/main/java/com/primerioreactnative/datamodels/{NamedComponentValidatableDataRN.kt → NamedComponentValidatableData.kt} +1 -3
  42. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutAdditionalInfoRN.kt +14 -14
  43. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutDataRN.kt +4 -4
  44. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +34 -35
  45. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +14 -14
  46. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEvents.kt +10 -11
  47. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerInputValidationErrorRN.kt +4 -4
  48. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerIssuingBankRN.kt +1 -1
  49. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt +66 -67
  50. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +128 -119
  51. package/android/src/main/java/com/primerioreactnative/datamodels/ach/AchUserDetailsStepRN.kt +2 -3
  52. package/android/src/main/java/com/primerioreactnative/datamodels/banks/BanksStepRN.kt +3 -3
  53. package/android/src/main/java/com/primerioreactnative/datamodels/extensions/ach/AchUserDetailsCollectableData.kt +11 -6
  54. package/android/src/main/java/com/primerioreactnative/datamodels/extensions/ach/AchUserDetailsStep.kt +1 -1
  55. package/android/src/main/java/com/primerioreactnative/datamodels/extensions/banks/BanksCollectableData.kt +2 -2
  56. package/android/src/main/java/com/primerioreactnative/datamodels/extensions/banks/BanksStep.kt +8 -4
  57. package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentCategoryRN.kt +2 -2
  58. package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentCollectableDataRN.kt +2 -3
  59. package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentStepRN.kt +6 -6
  60. package/android/src/main/java/com/primerioreactnative/extensions/JSONExtensions.kt +26 -26
  61. package/android/src/main/java/com/primerioreactnative/extensions/LocaleSettingsRN.kt +5 -5
  62. package/android/src/main/java/com/primerioreactnative/extensions/PaymentInstrumentData.kt +37 -31
  63. package/android/src/main/java/com/primerioreactnative/extensions/PrimerAddress.kt +11 -10
  64. package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutAdditionalInfo.kt +19 -14
  65. package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutData.kt +1 -1
  66. package/android/src/main/java/com/primerioreactnative/extensions/PrimerClientSession.kt +9 -9
  67. package/android/src/main/java/com/primerioreactnative/extensions/PrimerCustomer.kt +9 -8
  68. package/android/src/main/java/com/primerioreactnative/extensions/PrimerDebugOptionsRN.kt +1 -2
  69. package/android/src/main/java/com/primerioreactnative/extensions/PrimerError.kt +3 -3
  70. package/android/src/main/java/com/primerioreactnative/extensions/PrimerIssuingBank.kt +1 -2
  71. package/android/src/main/java/com/primerioreactnative/extensions/PrimerLineItem.kt +10 -3
  72. package/android/src/main/java/com/primerioreactnative/extensions/PrimerOrder.kt +5 -3
  73. package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodData.kt +4 -1
  74. package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt +69 -54
  75. package/android/src/main/java/com/primerioreactnative/extensions/PrimerUIOptionsRN.kt +16 -16
  76. package/android/src/main/java/com/primerioreactnative/extensions/ThreeDsAuthenticationData.kt +7 -7
  77. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategory.kt +1 -1
  78. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategoryRN.kt +1 -1
  79. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCollectableData.kt +4 -4
  80. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentStep.kt +8 -7
  81. package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +6 -5
  82. package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +33 -34
  83. package/android/src/main/java/com/primerioreactnative/utils/PrimerHeadlessUniversalCheckoutImplementedRNCallbacks.kt +26 -26
  84. package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +20 -20
  85. package/android/src/test/java/com/primerioreactnative/utils/ErrorHelperTest.kt +12 -13
  86. package/android/tooling/code-analysis/detekt.yml +68 -0
  87. package/ios/Sources/DataModels/Ach Component/RNTAchUserDetailsCollectableData.swift +2 -2
  88. package/ios/Sources/DataModels/Banks Component/RNTBanksCollectableData.swift +0 -1
  89. package/ios/Sources/DataModels/ImplementedRNCallbacks.swift +83 -63
  90. package/ios/Sources/DataModels/Klarna Component/PrimerHeadlessUniversalCheckoutComponentEvent.swift +3 -1
  91. package/ios/Sources/DataModels/Klarna Component/RNTKlarnaCollectableData.swift +2 -2
  92. package/ios/Sources/DataModels/Klarna Component/RNTKlarnaPaymentCategory.swift +1 -1
  93. package/ios/Sources/DataModels/Klarna Component/RNTKlarnaStep.swift +5 -5
  94. package/ios/Sources/DataModels/Klarna Component/RNTPrimerError.swift +1 -1
  95. package/ios/Sources/DataModels/PrimerBancontactCardRedirectData+Extension.swift +1 -2
  96. package/ios/Sources/DataModels/PrimerCardData+Extension.swift +6 -7
  97. package/ios/Sources/DataModels/PrimerCheckoutAdditionalInfoRN.swift +6 -7
  98. package/ios/Sources/DataModels/PrimerHeadlessUniversalCheckout_PaymentMethod.swift +10 -7
  99. package/ios/Sources/DataModels/PrimerPhoneNumberData+Extension.swift +1 -2
  100. package/ios/Sources/DataModels/PrimerRawRetailerData+Extension.swift +1 -2
  101. package/ios/Sources/DataModels/PrimerSettings+Extensions.swift +91 -50
  102. package/ios/Sources/DataModels/PrimerThemeRN.swift +6 -6
  103. package/ios/Sources/DataModels/RNTNativeError.swift +3 -4
  104. package/ios/Sources/DataModels/RNTPrimerPaymentMethodAsset.swift +54 -48
  105. package/ios/Sources/Headless Universal Checkout/Managers/Ach/PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent.swift +225 -202
  106. package/ios/Sources/Headless Universal Checkout/Managers/Ach/RNTAchMandateManager.swift +6 -6
  107. package/ios/Sources/Headless Universal Checkout/Managers/Assets Manager/RNTAssetsManager.swift +163 -161
  108. package/ios/Sources/Headless Universal Checkout/Managers/Klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.swift +268 -250
  109. package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNPrimerHeadlessUniversalCheckoutVaultManager.swift +88 -66
  110. package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTNativeUIManager.swift +51 -43
  111. package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTRawDataManager.swift +181 -158
  112. package/ios/Sources/Headless Universal Checkout/Managers/RNTRedirectManager.swift +165 -156
  113. package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +526 -459
  114. package/ios/Sources/Helpers/Encodable+Extension.swift +5 -1
  115. package/ios/Sources/Helpers/Error+Extensions.swift +5 -5
  116. package/ios/Sources/Helpers/UIColor+Extensions.swift +23 -20
  117. package/ios/Sources/RNTPrimer.swift +135 -48
  118. package/lib/commonjs/HeadlessUniversalCheckout/Components/NativeResourceView.js.map +1 -1
  119. package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.js.map +1 -1
  120. package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js.map +1 -1
  121. package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js +4 -4
  122. package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -1
  123. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js +1 -1
  124. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js.map +1 -1
  125. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js +2 -2
  126. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js.map +1 -1
  127. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +1 -1
  128. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -1
  129. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -1
  130. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +1 -1
  131. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +6 -6
  132. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
  133. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js.map +1 -1
  134. package/lib/commonjs/HeadlessUniversalCheckout/Managers/VaultManager.js.map +1 -1
  135. package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +4 -4
  136. package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
  137. package/lib/commonjs/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js +1 -1
  138. package/lib/commonjs/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +1 -1
  139. package/lib/commonjs/HeadlessUniversalCheckout/types.js +5 -5
  140. package/lib/commonjs/Primer.js +2 -2
  141. package/lib/commonjs/Primer.js.map +1 -1
  142. package/lib/commonjs/RNPrimer.js +5 -5
  143. package/lib/commonjs/RNPrimer.js.map +1 -1
  144. package/lib/commonjs/index.js.map +1 -1
  145. package/lib/commonjs/models/PrimerError.js.map +1 -1
  146. package/lib/module/HeadlessUniversalCheckout/Components/NativeResourceView.js +3 -3
  147. package/lib/module/HeadlessUniversalCheckout/Components/NativeResourceView.js.map +1 -1
  148. package/lib/module/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.js +1 -1
  149. package/lib/module/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.js.map +1 -1
  150. package/lib/module/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js +1 -1
  151. package/lib/module/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js.map +1 -1
  152. package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js +4 -4
  153. package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -1
  154. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js +1 -1
  155. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js.map +1 -1
  156. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js +2 -2
  157. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js.map +1 -1
  158. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +1 -1
  159. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -1
  160. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -1
  161. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.js.map +1 -1
  162. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +6 -6
  163. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
  164. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js.map +1 -1
  165. package/lib/module/HeadlessUniversalCheckout/Managers/VaultManager.js.map +1 -1
  166. package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +4 -4
  167. package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
  168. package/lib/module/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js +1 -1
  169. package/lib/module/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.js.map +1 -1
  170. package/lib/module/HeadlessUniversalCheckout/types.js +5 -5
  171. package/lib/module/Primer.js +2 -2
  172. package/lib/module/Primer.js.map +1 -1
  173. package/lib/module/RNPrimer.js +5 -5
  174. package/lib/module/RNPrimer.js.map +1 -1
  175. package/lib/module/index.js.map +1 -1
  176. package/lib/module/models/PrimerError.js.map +1 -1
  177. package/lib/typescript/HeadlessUniversalCheckout/Components/NativeResourceView.d.ts +2 -2
  178. package/lib/typescript/HeadlessUniversalCheckout/Components/NativeResourceView.d.ts.map +1 -1
  179. package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.d.ts +1 -1
  180. package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.d.ts.map +1 -1
  181. package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.d.ts.map +1 -1
  182. package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts +4 -4
  183. package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts.map +1 -1
  184. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.d.ts.map +1 -1
  185. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.d.ts.map +1 -1
  186. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.d.ts.map +1 -1
  187. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.d.ts.map +1 -1
  188. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.d.ts.map +1 -1
  189. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts.map +1 -1
  190. package/lib/typescript/HeadlessUniversalCheckout/Managers/VaultManager.d.ts.map +1 -1
  191. package/lib/typescript/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.d.ts.map +1 -1
  192. package/lib/typescript/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.d.ts.map +1 -1
  193. package/lib/typescript/Primer.d.ts.map +1 -1
  194. package/lib/typescript/RNPrimer.d.ts.map +1 -1
  195. package/lib/typescript/index.d.ts +4 -4
  196. package/lib/typescript/index.d.ts.map +1 -1
  197. package/lib/typescript/models/IssuingBank.d.ts.map +1 -1
  198. package/lib/typescript/models/NamedComponentStep.d.ts.map +1 -1
  199. package/lib/typescript/models/NamedComponentValidatableData.d.ts.map +1 -1
  200. package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts +4 -4
  201. package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts.map +1 -1
  202. package/lib/typescript/models/PrimerCheckoutData.d.ts +1 -1
  203. package/lib/typescript/models/PrimerCheckoutData.d.ts.map +1 -1
  204. package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts.map +1 -1
  205. package/lib/typescript/models/PrimerClientSession.d.ts.map +1 -1
  206. package/lib/typescript/models/PrimerComponentDataValidation.d.ts +5 -5
  207. package/lib/typescript/models/PrimerComponentDataValidation.d.ts.map +1 -1
  208. package/lib/typescript/models/PrimerCountryCode.d.ts +1 -1
  209. package/lib/typescript/models/PrimerCountryCode.d.ts.map +1 -1
  210. package/lib/typescript/models/PrimerCurrencyCode.d.ts +1 -1
  211. package/lib/typescript/models/PrimerCurrencyCode.d.ts.map +1 -1
  212. package/lib/typescript/models/PrimerError.d.ts.map +1 -1
  213. package/lib/typescript/models/PrimerHandlers.d.ts.map +1 -1
  214. package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts +2 -2
  215. package/lib/typescript/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts.map +1 -1
  216. package/lib/typescript/models/PrimerImplementedRNCallbacks.d.ts.map +1 -1
  217. package/lib/typescript/models/PrimerInitializationData.d.ts +1 -1
  218. package/lib/typescript/models/PrimerInitializationData.d.ts.map +1 -1
  219. package/lib/typescript/models/PrimerInputElementType.d.ts.map +1 -1
  220. package/lib/typescript/models/PrimerInterfaces.d.ts +1 -1
  221. package/lib/typescript/models/PrimerPaymentMethodManagerCategory.d.ts.map +1 -1
  222. package/lib/typescript/models/PrimerPaymentMethodResource.d.ts.map +1 -1
  223. package/lib/typescript/models/PrimerRawData.d.ts.map +1 -1
  224. package/lib/typescript/models/PrimerSettings.d.ts +10 -10
  225. package/lib/typescript/models/PrimerSettings.d.ts.map +1 -1
  226. package/lib/typescript/models/PrimerValidationError.d.ts.map +1 -1
  227. package/lib/typescript/models/PrimerValidationErrorResult.d.ts +1 -1
  228. package/lib/typescript/models/PrimerValidationErrorResult.d.ts.map +1 -1
  229. package/lib/typescript/models/PrimerVaultedPaymentMethod.d.ts +1 -1
  230. package/lib/typescript/models/PrimerVaultedPaymentMethod.d.ts.map +1 -1
  231. package/lib/typescript/models/PrimerVaultedPaymentMethodAdditionalData.d.ts.map +1 -1
  232. package/lib/typescript/models/PrimerVaultedPaymentMethodResult.d.ts +1 -1
  233. package/lib/typescript/models/PrimerVaultedPaymentMethodResult.d.ts.map +1 -1
  234. package/lib/typescript/models/RetailOutletsRetail.d.ts.map +1 -1
  235. package/lib/typescript/models/ach/AchCollectableData.d.ts +4 -4
  236. package/lib/typescript/models/ach/AchCollectableData.d.ts.map +1 -1
  237. package/lib/typescript/models/ach/AchSteps.d.ts +3 -3
  238. package/lib/typescript/models/ach/AchSteps.d.ts.map +1 -1
  239. package/lib/typescript/models/banks/BanksCollectableData.d.ts +3 -3
  240. package/lib/typescript/models/banks/BanksCollectableData.d.ts.map +1 -1
  241. package/lib/typescript/models/banks/BanksSteps.d.ts +6 -6
  242. package/lib/typescript/models/banks/BanksSteps.d.ts.map +1 -1
  243. package/lib/typescript/models/klarna/KlarnaPaymentCategory.d.ts +2 -2
  244. package/lib/typescript/models/klarna/KlarnaPaymentCategory.d.ts.map +1 -1
  245. package/lib/typescript/models/klarna/KlarnaPaymentCollectableData.d.ts +4 -4
  246. package/lib/typescript/models/klarna/KlarnaPaymentCollectableData.d.ts.map +1 -1
  247. package/lib/typescript/models/klarna/KlarnaPaymentSteps.d.ts +6 -6
  248. package/lib/typescript/models/klarna/KlarnaPaymentSteps.d.ts.map +1 -1
  249. package/lib/typescript/utils/index.d.ts +1 -1
  250. package/package.json +5 -4
  251. package/primer-io-react-native.podspec +1 -1
  252. package/src/HeadlessUniversalCheckout/Components/NativeResourceView.tsx +17 -21
  253. package/src/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.tsx +3 -6
  254. package/src/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.tsx +2 -4
  255. package/src/HeadlessUniversalCheckout/Managers/AssetsManager.ts +68 -69
  256. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.ts +127 -131
  257. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.ts +23 -25
  258. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.ts +21 -30
  259. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.ts +137 -141
  260. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/NativeUIManager.ts +17 -18
  261. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.ts +158 -142
  262. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.ts +7 -7
  263. package/src/HeadlessUniversalCheckout/Managers/VaultManager.ts +96 -87
  264. package/src/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.ts +159 -170
  265. package/src/HeadlessUniversalCheckout/RNPrimerHeadlessUniversalCheckout.ts +2 -6
  266. package/src/HeadlessUniversalCheckout/types.ts +5 -5
  267. package/src/Primer.ts +60 -57
  268. package/src/RNPrimer.ts +53 -54
  269. package/src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tsx +1 -1
  270. package/src/index.tsx +73 -36
  271. package/src/models/IssuingBank.ts +5 -5
  272. package/src/models/NamedComponentStep.ts +5 -5
  273. package/src/models/NamedComponentValidatableData.ts +5 -5
  274. package/src/models/PrimerCheckoutAdditionalInfo.ts +18 -23
  275. package/src/models/PrimerCheckoutData.ts +8 -8
  276. package/src/models/PrimerCheckoutPaymentMethodData.ts +6 -6
  277. package/src/models/PrimerClientSession.ts +34 -34
  278. package/src/models/PrimerComponentDataValidation.ts +33 -33
  279. package/src/models/PrimerCountryCode.ts +1 -1
  280. package/src/models/PrimerCurrencyCode.ts +1 -1
  281. package/src/models/PrimerError.ts +7 -1
  282. package/src/models/PrimerHandlers.ts +24 -24
  283. package/src/models/PrimerHeadlessUniversalCheckoutPaymentMethod.ts +4 -4
  284. package/src/models/PrimerImplementedRNCallbacks.ts +15 -15
  285. package/src/models/PrimerInitializationData.ts +3 -3
  286. package/src/models/PrimerInputElementType.ts +9 -9
  287. package/src/models/PrimerInterfaces.ts +1 -1
  288. package/src/models/PrimerPaymentMethodManagerCategory.ts +4 -4
  289. package/src/models/PrimerPaymentMethodResource.ts +11 -11
  290. package/src/models/PrimerRawData.ts +9 -9
  291. package/src/models/PrimerSessionIntent.ts +1 -1
  292. package/src/models/PrimerSettings.ts +37 -21
  293. package/src/models/PrimerValidationError.ts +3 -3
  294. package/src/models/PrimerValidationErrorResult.ts +2 -2
  295. package/src/models/PrimerVaultedPaymentMethod.ts +7 -7
  296. package/src/models/PrimerVaultedPaymentMethodAdditionalData.ts +1 -1
  297. package/src/models/PrimerVaultedPaymentMethodResult.ts +3 -3
  298. package/src/models/RetailOutletsRetail.ts +5 -5
  299. package/src/models/ach/AchCollectableData.ts +12 -12
  300. package/src/models/ach/AchSteps.ts +18 -18
  301. package/src/models/banks/BanksCollectableData.ts +14 -14
  302. package/src/models/banks/BanksSteps.ts +13 -13
  303. package/src/models/klarna/KlarnaPaymentCategory.ts +16 -16
  304. package/src/models/klarna/KlarnaPaymentCollectableData.ts +16 -15
  305. package/src/models/klarna/KlarnaPaymentSteps.ts +21 -17
  306. package/src/utils/index.ts +1 -1
  307. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/cardRedirect/PrimerRNCardRedirectData.kt +0 -19
  308. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/resource/Resources.kt +0 -138
@@ -9,540 +9,607 @@ import Foundation
9
9
  import PrimerSDK
10
10
  import React
11
11
 
12
+ // swiftlint:disable file_length
12
13
  @objc
13
14
  enum PrimerHeadlessUniversalCheckoutEvents: Int, CaseIterable {
14
15
 
15
- // Delegate
16
- case onAvailablePaymentMethodsLoad = 0
17
- case onTokenizationStart
18
- case onTokenizationSuccess
19
- case onCheckoutResume
20
- case onCheckoutPending
21
- case onCheckoutAdditionalInfo
22
- case onError
23
- case onCheckoutComplete
24
- case onBeforeClientSessionUpdate
25
- case onClientSessionUpdate
26
- case onBeforePaymentCreate
27
-
28
- // UI Delegate
29
- case onPreparationStart
30
- case onPaymentMethodShow
31
-
32
- var stringValue: String {
33
- switch self {
34
- case .onAvailablePaymentMethodsLoad:
35
- return "onAvailablePaymentMethodsLoad"
36
- case .onTokenizationStart:
37
- return "onTokenizationStart"
38
- case .onTokenizationSuccess:
39
- return "onTokenizationSuccess"
40
- case .onCheckoutResume:
41
- return "onCheckoutResume"
42
- case .onCheckoutPending:
43
- return "onCheckoutPending"
44
- case .onCheckoutAdditionalInfo:
45
- return "onCheckoutAdditionalInfo"
46
- case .onError:
47
- return "onError"
48
- case .onBeforeClientSessionUpdate:
49
- return "onBeforeClientSessionUpdate"
50
- case .onCheckoutComplete:
51
- return "onCheckoutComplete"
52
- case .onBeforePaymentCreate:
53
- return "onBeforePaymentCreate"
54
- case .onClientSessionUpdate:
55
- return "onClientSessionUpdate"
56
- case .onPreparationStart:
57
- return "onPreparationStart"
58
- case .onPaymentMethodShow:
59
- return "onPaymentMethodShow"
60
- }
16
+ // Delegate
17
+ case onAvailablePaymentMethodsLoad = 0
18
+ case onTokenizationStart
19
+ case onTokenizationSuccess
20
+ case onCheckoutResume
21
+ case onCheckoutPending
22
+ case onCheckoutAdditionalInfo
23
+ case onError
24
+ case onCheckoutComplete
25
+ case onBeforeClientSessionUpdate
26
+ case onClientSessionUpdate
27
+ case onBeforePaymentCreate
28
+
29
+ // UI Delegate
30
+ case onPreparationStart
31
+ case onPaymentMethodShow
32
+
33
+ var stringValue: String {
34
+ switch self {
35
+ case .onAvailablePaymentMethodsLoad:
36
+ return "onAvailablePaymentMethodsLoad"
37
+ case .onTokenizationStart:
38
+ return "onTokenizationStart"
39
+ case .onTokenizationSuccess:
40
+ return "onTokenizationSuccess"
41
+ case .onCheckoutResume:
42
+ return "onCheckoutResume"
43
+ case .onCheckoutPending:
44
+ return "onCheckoutPending"
45
+ case .onCheckoutAdditionalInfo:
46
+ return "onCheckoutAdditionalInfo"
47
+ case .onError:
48
+ return "onError"
49
+ case .onBeforeClientSessionUpdate:
50
+ return "onBeforeClientSessionUpdate"
51
+ case .onCheckoutComplete:
52
+ return "onCheckoutComplete"
53
+ case .onBeforePaymentCreate:
54
+ return "onBeforePaymentCreate"
55
+ case .onClientSessionUpdate:
56
+ return "onClientSessionUpdate"
57
+ case .onPreparationStart:
58
+ return "onPreparationStart"
59
+ case .onPaymentMethodShow:
60
+ return "onPaymentMethodShow"
61
61
  }
62
+ }
62
63
  }
63
64
 
64
65
  @objc(PrimerHeadlessUniversalCheckout)
65
66
  class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
66
67
 
67
- var settings: PrimerSettings?
68
- var primerWillCreatePaymentWithDataDecisionHandler: ((_ errorMessage: String?) -> Void)?
69
- var primerDidTokenizePaymentMethodDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
70
- var primerDidResumeWithDecisionHandler: ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
71
- var implementedRNCallbacks: ImplementedRNCallbacks?
72
-
73
- override class func requiresMainQueueSetup() -> Bool {
74
- return true
75
- }
68
+ var settings: PrimerSettings?
69
+ // swiftlint:disable identifier_name
70
+ var primerWillCreatePaymentWithDataDecisionHandler: ((_ errorMessage: String?) -> Void)?
71
+ var primerDidTokenizePaymentMethodDecisionHandler:
72
+ ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
73
+ // swiftlint:enable identifier_name
74
+ var primerDidResumeWithDecisionHandler:
75
+ ((_ resumeToken: String?, _ errorMessage: String?) -> Void)?
76
+ var implementedRNCallbacks: ImplementedRNCallbacks?
77
+
78
+ override class func requiresMainQueueSetup() -> Bool {
79
+ return true
80
+ }
81
+
82
+ override init() {
83
+ super.init()
84
+ }
85
+
86
+ override func supportedEvents() -> [String]! {
87
+ return PrimerHeadlessUniversalCheckoutEvents.allCases.compactMap({ $0.stringValue })
88
+ }
89
+
90
+ // MARK: - API
91
+
92
+ @objc
93
+ public func startWithClientToken(
94
+ _ clientToken: String,
95
+ settingsStr: String?,
96
+ resolver: @escaping RCTPromiseResolveBlock,
97
+ rejecter: @escaping RCTPromiseRejectBlock
98
+ ) {
99
+ PrimerHeadlessUniversalCheckout.current.delegate = self
100
+ PrimerHeadlessUniversalCheckout.current.uiDelegate = self
101
+
102
+ do {
103
+ var tmpSettings: PrimerSettings?
104
+ if let settingsStr = settingsStr {
105
+ tmpSettings = try PrimerSettings(settingsStr: settingsStr)
106
+ self.settings = tmpSettings
107
+ }
108
+
109
+ PrimerHeadlessUniversalCheckout.current.start(
110
+ withClientToken: clientToken,
111
+ settings: settings,
112
+ delegate: self,
113
+ uiDelegate: self
114
+ ) { paymentMethods, err in
115
+ if let err = err {
116
+ rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
117
+ } else if let paymentMethods = paymentMethods {
118
+ let paymentMethodObjects = paymentMethods.compactMap({ $0.toJsonObject() })
119
+ resolver(["availablePaymentMethods": paymentMethodObjects])
120
+ }
121
+ }
76
122
 
77
- override init() {
78
- super.init()
123
+ } catch {
124
+ rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
79
125
  }
80
-
81
- override func supportedEvents() -> [String]! {
82
- return PrimerHeadlessUniversalCheckoutEvents.allCases.compactMap({ $0.stringValue })
126
+ }
127
+
128
+ @objc
129
+ public func cleanUp(
130
+ _ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
131
+ ) {
132
+ DispatchQueue.main.async {
133
+ PrimerHeadlessUniversalCheckout.current.cleanUp()
134
+ resolver(nil)
83
135
  }
136
+ }
84
137
 
85
- // MARK: - API
86
-
87
- @objc
88
- public func startWithClientToken(_ clientToken: String,
89
- settingsStr: String?,
90
- resolver: @escaping RCTPromiseResolveBlock,
91
- rejecter: @escaping RCTPromiseRejectBlock)
92
- {
93
- PrimerHeadlessUniversalCheckout.current.delegate = self
94
- PrimerHeadlessUniversalCheckout.current.uiDelegate = self
95
-
96
- do {
97
- var tmpSettings: PrimerSettings?
98
- if let settingsStr = settingsStr {
99
- tmpSettings = try PrimerSettings(settingsStr: settingsStr)
100
- self.settings = tmpSettings
101
- }
138
+ // MARK: - DECISION HANDLERS
102
139
 
103
- PrimerHeadlessUniversalCheckout.current.start(
104
- withClientToken: clientToken,
105
- settings: settings,
106
- delegate: self,
107
- uiDelegate: self) { paymentMethods, err in
108
- if let err = err {
109
- rejecter(err.rnError["errorId"]!, err.rnError["description"], err)
110
- } else if let paymentMethods = paymentMethods {
111
- let paymentMethodObjects = paymentMethods.compactMap({ $0.toJsonObject() })
112
- resolver(["availablePaymentMethods": paymentMethodObjects])
113
- }
114
- }
140
+ // MARK: Tokenization & Resume Handlers
115
141
 
116
- } catch {
117
- rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
118
- }
142
+ @objc
143
+ public func handleTokenizationNewClientToken(
144
+ _ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock,
145
+ rejecter: @escaping RCTPromiseRejectBlock
146
+ ) {
147
+ DispatchQueue.main.async {
148
+ self.primerDidTokenizePaymentMethodDecisionHandler?(newClientToken, nil)
149
+ self.primerDidTokenizePaymentMethodDecisionHandler = nil
150
+ resolver(nil)
119
151
  }
120
-
121
- @objc
122
- public func cleanUp(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
123
- DispatchQueue.main.async {
124
- PrimerHeadlessUniversalCheckout.current.cleanUp()
125
- resolver(nil)
126
- }
152
+ }
153
+
154
+ @objc
155
+ public func handleResumeWithNewClientToken(
156
+ _ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock,
157
+ rejecter: @escaping RCTPromiseRejectBlock
158
+ ) {
159
+ DispatchQueue.main.async {
160
+ self.primerDidResumeWithDecisionHandler?(newClientToken, nil)
161
+ self.primerDidResumeWithDecisionHandler = nil
162
+ resolver(nil)
127
163
  }
128
-
129
- // MARK: - DECISION HANDLERS
130
-
131
- // MARK: Tokenization & Resume Handlers
132
-
133
- @objc
134
- public func handleTokenizationNewClientToken(_ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
135
- DispatchQueue.main.async {
136
- self.primerDidTokenizePaymentMethodDecisionHandler?(newClientToken, nil)
137
- self.primerDidTokenizePaymentMethodDecisionHandler = nil
138
- resolver(nil)
139
- }
164
+ }
165
+
166
+ @objc
167
+ public func handleCompleteFlow(
168
+ _ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
169
+ ) {
170
+ DispatchQueue.main.async {
171
+ self.primerDidResumeWithDecisionHandler?(nil, nil)
172
+ self.primerDidResumeWithDecisionHandler = nil
173
+ resolver(nil)
140
174
  }
141
-
142
- @objc
143
- public func handleResumeWithNewClientToken(_ newClientToken: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
144
- DispatchQueue.main.async {
145
- self.primerDidResumeWithDecisionHandler?(newClientToken, nil)
146
- self.primerDidResumeWithDecisionHandler = nil
147
- resolver(nil)
148
- }
175
+ }
176
+
177
+ // MARK: Payment Creation
178
+
179
+ @objc
180
+ public func handlePaymentCreationAbort(
181
+ _ errorMessage: String?, resolver: @escaping RCTPromiseResolveBlock,
182
+ rejecter: @escaping RCTPromiseRejectBlock
183
+ ) {
184
+ DispatchQueue.main.async {
185
+ self.primerWillCreatePaymentWithDataDecisionHandler?(errorMessage ?? "")
186
+ self.primerWillCreatePaymentWithDataDecisionHandler = nil
187
+ resolver(nil)
149
188
  }
150
-
151
- @objc
152
- public func handleCompleteFlow(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
153
- DispatchQueue.main.async {
154
- self.primerDidResumeWithDecisionHandler?(nil, nil)
155
- self.primerDidResumeWithDecisionHandler = nil
156
- resolver(nil)
157
- }
189
+ }
190
+
191
+ @objc
192
+ public func handlePaymentCreationContinue(
193
+ _ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock
194
+ ) {
195
+ DispatchQueue.main.async {
196
+ self.primerWillCreatePaymentWithDataDecisionHandler?(nil)
197
+ self.primerWillCreatePaymentWithDataDecisionHandler = nil
198
+ resolver(nil)
158
199
  }
159
-
160
- // MARK: Payment Creation
161
-
162
- @objc
163
- public func handlePaymentCreationAbort(_ errorMessage: String?, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
164
- DispatchQueue.main.async {
165
- self.primerWillCreatePaymentWithDataDecisionHandler?(errorMessage ?? "")
166
- self.primerWillCreatePaymentWithDataDecisionHandler = nil
167
- resolver(nil)
200
+ }
201
+
202
+ // MARK: Helpers
203
+
204
+ private func detectImplemetedCallbacks() {
205
+ sendEvent(withName: PrimerEvents.detectImplementedRNCallbacks.stringValue, body: nil)
206
+ }
207
+
208
+ @objc
209
+ public func setImplementedRNCallbacks(
210
+ _ implementedRNCallbacksStr: String, resolver: @escaping RCTPromiseResolveBlock,
211
+ rejecter: @escaping RCTPromiseRejectBlock
212
+ ) {
213
+ DispatchQueue.main.async {
214
+ do {
215
+ guard let implementedRNCallbacksData = implementedRNCallbacksStr.data(using: .utf8) else {
216
+ let err = RNTNativeError(
217
+ errorId: "native-ios",
218
+ errorDescription: "Failed to convert string to data",
219
+ recoverySuggestion: nil)
220
+ throw err
168
221
  }
222
+ self.implementedRNCallbacks = try JSONDecoder().decode(
223
+ ImplementedRNCallbacks.self, from: implementedRNCallbacksData)
224
+ resolver(nil)
225
+ } catch {
226
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: false)
227
+ rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
228
+ }
169
229
  }
170
-
171
- @objc
172
- public func handlePaymentCreationContinue(_ resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
173
- DispatchQueue.main.async {
174
- self.primerWillCreatePaymentWithDataDecisionHandler?(nil)
175
- self.primerWillCreatePaymentWithDataDecisionHandler = nil
176
- resolver(nil)
177
- }
178
- }
179
-
180
- // MARK: Helpers
181
-
182
- private func detectImplemetedCallbacks() {
183
- sendEvent(withName: PrimerEvents.detectImplementedRNCallbacks.stringValue, body: nil)
184
- }
185
-
186
- @objc
187
- public func setImplementedRNCallbacks(_ implementedRNCallbacksStr: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
188
- DispatchQueue.main.async {
189
- do {
190
- guard let implementedRNCallbacksData = implementedRNCallbacksStr.data(using: .utf8) else {
191
- let err = RNTNativeError(
192
- errorId: "native-ios",
193
- errorDescription: "Failed to convert string to data",
194
- recoverySuggestion: nil)
195
- throw err
196
- }
197
- self.implementedRNCallbacks = try JSONDecoder().decode(ImplementedRNCallbacks.self, from: implementedRNCallbacksData)
198
- resolver(nil)
199
- } catch {
200
- self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: false)
201
- rejecter(error.rnError["errorId"]!, error.rnError["description"], error)
202
- }
203
- }
204
- }
205
-
206
- private func handleRNBridgeError(_ error: Error, checkoutData: PrimerCheckoutData?, stopOnDebug: Bool) {
207
- DispatchQueue.main.async {
208
- if stopOnDebug {
209
- assertionFailure(error.localizedDescription)
210
- }
211
-
212
- var body: [String: Any] = ["error": error.rnError]
213
- if let checkoutData = checkoutData,
214
- let data = try? JSONEncoder().encode(checkoutData),
215
- let json = try? JSONSerialization.jsonObject(with: data){
216
- body["checkoutData"] = json
217
- }
218
-
219
- self.sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.onError.stringValue, body: body)
220
- }
230
+ }
231
+
232
+ private func handleRNBridgeError(
233
+ _ error: Error, checkoutData: PrimerCheckoutData?, stopOnDebug: Bool
234
+ ) {
235
+ DispatchQueue.main.async {
236
+ if stopOnDebug {
237
+ assertionFailure(error.localizedDescription)
238
+ }
239
+
240
+ var body: [String: Any] = ["error": error.rnError]
241
+ if let checkoutData = checkoutData,
242
+ let data = try? JSONEncoder().encode(checkoutData),
243
+ let json = try? JSONSerialization.jsonObject(with: data) {
244
+ body["checkoutData"] = json
245
+ }
246
+
247
+ self.sendEvent(
248
+ withName: PrimerHeadlessUniversalCheckoutEvents.onError.stringValue, body: body)
221
249
  }
250
+ }
222
251
  }
223
252
 
224
253
  // MARK: - EVENTS
225
254
 
226
255
  extension RNTPrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutDelegate {
227
256
 
228
- // case onAvailablePaymentMethodsLoad = 0
229
- func primerHeadlessUniversalCheckoutDidLoadAvailablePaymentMethods(_ paymentMethods: [PrimerHeadlessUniversalCheckout.PaymentMethod]) {
230
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onAvailablePaymentMethodsLoad.stringValue
231
-
232
- DispatchQueue.main.async {
233
- self.sendEvent(
234
- withName: rnCallbackName,
235
- body: ["availablePaymentMethods": paymentMethods.compactMap({ $0.toJsonObject() })])
236
- }
257
+ // case onAvailablePaymentMethodsLoad = 0
258
+ func primerHeadlessUniversalCheckoutDidLoadAvailablePaymentMethods(
259
+ _ paymentMethods: [PrimerHeadlessUniversalCheckout.PaymentMethod]
260
+ ) {
261
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onAvailablePaymentMethodsLoad
262
+ .stringValue
263
+
264
+ DispatchQueue.main.async {
265
+ self.sendEvent(
266
+ withName: rnCallbackName,
267
+ body: ["availablePaymentMethods": paymentMethods.compactMap({ $0.toJsonObject() })])
237
268
  }
269
+ }
238
270
 
239
- // case onTokenizationStart
240
- func primerHeadlessUniversalCheckoutDidStartTokenization(for paymentMethodType: String) {
241
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onTokenizationStart.stringValue
271
+ // case onTokenizationStart
272
+ func primerHeadlessUniversalCheckoutDidStartTokenization(for paymentMethodType: String) {
273
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onTokenizationStart.stringValue
242
274
 
243
- DispatchQueue.main.async {
244
- self.sendEvent(
245
- withName: rnCallbackName,
246
- body: ["paymentMethodType": paymentMethodType])
247
- }
275
+ DispatchQueue.main.async {
276
+ self.sendEvent(
277
+ withName: rnCallbackName,
278
+ body: ["paymentMethodType": paymentMethodType])
248
279
  }
249
-
250
- // case onTokenizationSuccess
251
- func primerHeadlessUniversalCheckoutDidTokenizePaymentMethod(_ paymentMethodTokenData: PrimerPaymentMethodTokenData, decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void) {
252
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onTokenizationSuccess.stringValue
253
-
254
- DispatchQueue.main.async {
255
- if self.implementedRNCallbacks?.isOnTokenizationSuccessImplemented == true {
256
- self.primerDidTokenizePaymentMethodDecisionHandler = { (newClientToken, errorMessage) in
257
- DispatchQueue.main.async {
258
- if let newClientToken = newClientToken {
259
- decisionHandler(.continueWithNewClientToken(newClientToken))
260
- } else {
261
- decisionHandler(.complete())
262
- }
263
- }
264
- }
265
-
266
- do {
267
- let paymentMethodTokenJson = try paymentMethodTokenData.toJsonObject()
268
- self.sendEvent(
269
- withName: rnCallbackName,
270
- body: ["paymentMethodTokenData": paymentMethodTokenJson])
271
-
272
- } catch {
273
- self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
274
- }
280
+ }
281
+
282
+ // case onTokenizationSuccess
283
+ func primerHeadlessUniversalCheckoutDidTokenizePaymentMethod(
284
+ _ paymentMethodTokenData: PrimerPaymentMethodTokenData,
285
+ decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void
286
+ ) {
287
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onTokenizationSuccess.stringValue
288
+
289
+ DispatchQueue.main.async {
290
+ if self.implementedRNCallbacks?.isOnTokenizationSuccessImplemented == true {
291
+ self.primerDidTokenizePaymentMethodDecisionHandler = { (newClientToken, _) in
292
+ DispatchQueue.main.async {
293
+ if let newClientToken = newClientToken {
294
+ decisionHandler(.continueWithNewClientToken(newClientToken))
275
295
  } else {
276
- if self.settings?.paymentHandling == .manual {
277
- let err = RNTNativeError(
278
- errorId: "native-ios",
279
- errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
280
- recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
281
- self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
282
- }
296
+ decisionHandler(.complete())
283
297
  }
298
+ }
284
299
  }
285
- }
286
300
 
287
- // case onCheckoutResume
288
- func primerHeadlessUniversalCheckoutDidResumeWith(_ resumeToken: String, decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void) {
289
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutResume.stringValue
290
-
291
- DispatchQueue.main.async {
292
- if self.implementedRNCallbacks?.isOnCheckoutResumeImplemented == true {
293
- self.primerDidResumeWithDecisionHandler = { (resumeToken, errorMessage) in
294
- DispatchQueue.main.async {
295
- if let resumeToken = resumeToken {
296
- decisionHandler(.continueWithNewClientToken(resumeToken))
297
- } else {
298
- decisionHandler(.complete())
299
- }
300
- }
301
- }
302
-
303
- self.sendEvent(
304
- withName: rnCallbackName,
305
- body: ["resumeToken": resumeToken])
301
+ do {
302
+ let paymentMethodTokenJson = try paymentMethodTokenData.toJsonObject()
303
+ self.sendEvent(
304
+ withName: rnCallbackName,
305
+ body: ["paymentMethodTokenData": paymentMethodTokenJson])
306
306
 
307
+ } catch {
308
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
309
+ }
310
+ } else {
311
+ if self.settings?.paymentHandling == .manual {
312
+ let err = RNTNativeError(
313
+ errorId: "native-ios",
314
+ errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
315
+ recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
316
+ self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
317
+ }
318
+ }
319
+ }
320
+ }
321
+
322
+ // case onCheckoutResume
323
+ func primerHeadlessUniversalCheckoutDidResumeWith(
324
+ _ resumeToken: String,
325
+ decisionHandler: @escaping (PrimerHeadlessUniversalCheckoutResumeDecision) -> Void
326
+ ) {
327
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutResume.stringValue
328
+
329
+ DispatchQueue.main.async {
330
+ if self.implementedRNCallbacks?.isOnCheckoutResumeImplemented == true {
331
+ self.primerDidResumeWithDecisionHandler = { (resumeToken, _) in
332
+ DispatchQueue.main.async {
333
+ if let resumeToken = resumeToken {
334
+ decisionHandler(.continueWithNewClientToken(resumeToken))
307
335
  } else {
308
- if self.settings?.paymentHandling == .manual {
309
- let err = RNTNativeError(
310
- errorId: "native-ios",
311
- errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
312
- recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
313
- self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
314
- }
336
+ decisionHandler(.complete())
315
337
  }
338
+ }
339
+ }
340
+
341
+ self.sendEvent(
342
+ withName: rnCallbackName,
343
+ body: ["resumeToken": resumeToken])
344
+
345
+ } else {
346
+ if self.settings?.paymentHandling == .manual {
347
+ let err = RNTNativeError(
348
+ errorId: "native-ios",
349
+ errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
350
+ recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
351
+ self.handleRNBridgeError(err, checkoutData: nil, stopOnDebug: false)
316
352
  }
353
+ }
317
354
  }
355
+ }
318
356
 
319
- // case onCheckoutPending
320
- func primerHeadlessUniversalCheckoutDidEnterResumePendingWithPaymentAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?) {
321
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutPending.stringValue
322
-
323
- DispatchQueue.main.async {
324
- if self.implementedRNCallbacks?.isOnCheckoutPendingImplemented == true {
325
- do {
326
- let checkoutAdditionalInfoJson = try additionalInfo?.toJsonObject()
327
- self.sendEvent(withName: rnCallbackName, body: checkoutAdditionalInfoJson)
328
- } catch {
329
- let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
330
- self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
331
- }
332
- } else {
333
- let err = RNTNativeError(
334
- errorId: "native-ios",
335
- errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
336
- recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
357
+ // case onCheckoutPending
358
+ func primerHeadlessUniversalCheckoutDidEnterResumePendingWithPaymentAdditionalInfo(
359
+ _ additionalInfo: PrimerCheckoutAdditionalInfo?
360
+ ) {
361
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutPending.stringValue
337
362
 
338
- let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
339
- self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
340
- }
363
+ DispatchQueue.main.async {
364
+ if self.implementedRNCallbacks?.isOnCheckoutPendingImplemented == true {
365
+ do {
366
+ let checkoutAdditionalInfoJson = try additionalInfo?.toJsonObject()
367
+ self.sendEvent(withName: rnCallbackName, body: checkoutAdditionalInfoJson)
368
+ } catch {
369
+ let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
370
+ self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
341
371
  }
372
+ } else {
373
+ let err = RNTNativeError(
374
+ errorId: "native-ios",
375
+ errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
376
+ recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
377
+
378
+ let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
379
+ self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
380
+ }
342
381
  }
382
+ }
343
383
 
344
- // case onCheckoutAdditionalInfo
345
- func primerHeadlessUniversalCheckoutDidReceiveAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?) {
346
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutAdditionalInfo.stringValue
347
-
348
- DispatchQueue.main.async {
349
- if self.implementedRNCallbacks?.isOnCheckoutAdditionalInfoImplemented == true {
350
- do {
351
- switch additionalInfo {
352
- case let info as ACHBankAccountCollectorAdditionalInfo:
353
- // Handled internally, nothing for merchant to handle
354
- let keyWindow = UIApplication
355
- .shared
356
- .connectedScenes
357
- .flatMap { ($0 as? UIWindowScene)?.windows ?? [] }
358
- .last { $0.isKeyWindow }
359
- DispatchQueue.main.async {
360
- if let rootViewController = keyWindow?.rootViewController {
361
- rootViewController.present(info.collectorViewController, animated: true, completion: nil)
362
- } else {
363
- let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
364
- self.handleRNBridgeError(
365
- RNTNativeError(
366
- errorId: "native-ios",
367
- errorDescription: "Failed to retrieve root view controller, cannot present Stripe view controller",
368
- recoverySuggestion: nil
369
- ),
370
- checkoutData: checkoutData,
371
- stopOnDebug: true
372
- )
373
- }
374
- }
375
- return
376
- case _ as ACHMandateAdditionalInfo:
377
- self.sendEvent(
378
- withName: rnCallbackName,
379
- body: try AchAdditionalInfoDisplayMandateRN().toJsonObject()
380
- )
381
- case let info as MultibancoCheckoutAdditionalInfo:
382
- self.sendEvent(
383
- withName: rnCallbackName,
384
- body: try MultibancoCheckoutAdditionalInfoRN(expiresAt: info.expiresAt, reference: info.reference, entity: info.entity).toJsonObject()
385
- )
386
- case let info as PromptPayCheckoutAdditionalInfo:
387
- self.sendEvent(
388
- withName: rnCallbackName,
389
- body: try PromptPayCheckoutAdditionalInfoRN(expiresAt: info.expiresAt, qrCodeUrl: info.qrCodeUrl, qrCodeBase64: info.qrCodeBase64).toJsonObject()
390
- )
391
- case let info as XenditCheckoutVoucherAdditionalInfo:
392
- self.sendEvent(
393
- withName: rnCallbackName,
394
- body: try XenditCheckoutVoucherAdditionalInfoRN(expiresAt: info.expiresAt, couponCode: info.couponCode, retailerName: info.retailerName).toJsonObject()
395
- )
396
- default:
397
- self.sendEvent(
398
- withName: rnCallbackName,
399
- body: try additionalInfo?.toJsonObject()
400
- )
401
- }
402
- } catch {
403
- let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
404
- self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
405
- }
406
- } else {
407
- let err = RNTNativeError(
408
- errorId: "native-bridge",
409
- errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
410
- recoverySuggestion: "Callback [\(rnCallbackName)] should be implemented.")
384
+ // case onCheckoutAdditionalInfo
385
+ // swiftlint:disable function_body_length
386
+ func primerHeadlessUniversalCheckoutDidReceiveAdditionalInfo(
387
+ _ additionalInfo: PrimerCheckoutAdditionalInfo?
388
+ ) {
389
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutAdditionalInfo.stringValue
411
390
 
391
+ DispatchQueue.main.async {
392
+ if self.implementedRNCallbacks?.isOnCheckoutAdditionalInfoImplemented == true {
393
+ do {
394
+ switch additionalInfo {
395
+ case let info as ACHBankAccountCollectorAdditionalInfo:
396
+ // Handled internally, nothing for merchant to handle
397
+ let keyWindow = UIApplication
398
+ .shared
399
+ .connectedScenes
400
+ .flatMap { ($0 as? UIWindowScene)?.windows ?? [] }
401
+ .last { $0.isKeyWindow }
402
+ DispatchQueue.main.async {
403
+ if let rootViewController = keyWindow?.rootViewController {
404
+ rootViewController.present(
405
+ info.collectorViewController, animated: true, completion: nil)
406
+ } else {
412
407
  let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
413
- self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
408
+ self.handleRNBridgeError(
409
+ RNTNativeError(
410
+ errorId: "native-ios",
411
+ errorDescription:
412
+ "Failed to retrieve root view controller, cannot present Stripe view controller",
413
+ recoverySuggestion: nil
414
+ ),
415
+ checkoutData: checkoutData,
416
+ stopOnDebug: true
417
+ )
418
+ }
414
419
  }
420
+ return
421
+ case _ as ACHMandateAdditionalInfo:
422
+ self.sendEvent(
423
+ withName: rnCallbackName,
424
+ body: try AchAdditionalInfoDisplayMandateRN().toJsonObject()
425
+ )
426
+ case let info as MultibancoCheckoutAdditionalInfo:
427
+ self.sendEvent(
428
+ withName: rnCallbackName,
429
+ body: try MultibancoCheckoutAdditionalInfoRN(
430
+ expiresAt: info.expiresAt,
431
+ reference: info.reference,
432
+ entity: info.entity
433
+ ).toJsonObject()
434
+ )
435
+ case let info as PromptPayCheckoutAdditionalInfo:
436
+ self.sendEvent(
437
+ withName: rnCallbackName,
438
+ body: try PromptPayCheckoutAdditionalInfoRN(
439
+ expiresAt: info.expiresAt,
440
+ qrCodeUrl: info.qrCodeUrl,
441
+ qrCodeBase64: info.qrCodeBase64
442
+ ).toJsonObject()
443
+ )
444
+ case let info as XenditCheckoutVoucherAdditionalInfo:
445
+ self.sendEvent(
446
+ withName: rnCallbackName,
447
+ body: try XenditCheckoutVoucherAdditionalInfoRN(
448
+ expiresAt: info.expiresAt,
449
+ couponCode: info.couponCode,
450
+ retailerName: info.retailerName
451
+ ).toJsonObject()
452
+ )
453
+ default:
454
+ self.sendEvent(
455
+ withName: rnCallbackName,
456
+ body: try additionalInfo?.toJsonObject()
457
+ )
458
+ }
459
+ } catch {
460
+ let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
461
+ self.handleRNBridgeError(error, checkoutData: checkoutData, stopOnDebug: true)
415
462
  }
463
+ } else {
464
+ let err = RNTNativeError(
465
+ errorId: "native-bridge",
466
+ errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
467
+ recoverySuggestion: "Callback [\(rnCallbackName)] should be implemented.")
468
+
469
+ let checkoutData = PrimerCheckoutData(payment: nil, additionalInfo: additionalInfo)
470
+ self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
471
+ }
416
472
  }
473
+ }
474
+ // swiftlint:enable function_body_length
475
+
476
+ // case onError
477
+ func primerHeadlessUniversalCheckoutDidFail(
478
+ withError err: Error, checkoutData: PrimerCheckoutData?
479
+ ) {
480
+ if self.implementedRNCallbacks?.isOnErrorImplemented == true {
481
+ // Send the error message to the RN bridge.
482
+ self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
483
+
484
+ } else {
485
+ // RN dev hasn't opted in on listening SDK errors.
486
+ // Ignore!
487
+ }
488
+ }
417
489
 
418
- // case onError
419
- func primerHeadlessUniversalCheckoutDidFail(withError err: Error, checkoutData: PrimerCheckoutData?) {
420
- if self.implementedRNCallbacks?.isOnErrorImplemented == true {
421
- // Send the error message to the RN bridge.
422
- self.handleRNBridgeError(err, checkoutData: checkoutData, stopOnDebug: false)
490
+ // case onCheckoutComplete
491
+ func primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData(_ data: PrimerCheckoutData) {
492
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutComplete.stringValue
423
493
 
424
- } else {
425
- // RN dev hasn't opted in on listening SDK errors.
426
- // Ignore!
494
+ DispatchQueue.main.async {
495
+ if self.implementedRNCallbacks?.isOnCheckoutCompleteImplemented == true {
496
+ do {
497
+ let checkoutJson = try data.toJsonObject()
498
+ self.sendEvent(withName: rnCallbackName, body: checkoutJson)
499
+ } catch {
500
+ self.handleRNBridgeError(error, checkoutData: data, stopOnDebug: true)
427
501
  }
502
+ } else {
503
+ let err = RNTNativeError(
504
+ errorId: "native-ios",
505
+ errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
506
+ recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
507
+ self.handleRNBridgeError(err, checkoutData: data, stopOnDebug: false)
508
+ }
428
509
  }
429
-
430
- // case onCheckoutComplete
431
- func primerHeadlessUniversalCheckoutDidCompleteCheckoutWithData(_ data: PrimerCheckoutData) {
432
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onCheckoutComplete.stringValue
433
-
434
- DispatchQueue.main.async {
435
- if self.implementedRNCallbacks?.isOnCheckoutCompleteImplemented == true {
436
- do {
437
- let checkoutJson = try data.toJsonObject()
438
- self.sendEvent(withName: rnCallbackName, body: checkoutJson)
439
- } catch {
440
- self.handleRNBridgeError(error, checkoutData: data, stopOnDebug: true)
441
- }
442
- } else {
443
- let err = RNTNativeError(
444
- errorId: "native-ios",
445
- errorDescription: "Callback [\(rnCallbackName)] is not implemented.",
446
- recoverySuggestion: "Callback [\(rnCallbackName)] must be implemented.")
447
- self.handleRNBridgeError(err, checkoutData: data, stopOnDebug: false)
448
- }
449
- }
510
+ }
511
+
512
+ // case onBeforeClientSessionUpdate
513
+ func primerHeadlessUniversalCheckoutWillUpdateClientSession() {
514
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onBeforeClientSessionUpdate
515
+ .stringValue
516
+
517
+ DispatchQueue.main.async {
518
+ if self.implementedRNCallbacks?.isOnBeforeClientSessionUpdateImplemented == true {
519
+ self.sendEvent(
520
+ withName: rnCallbackName,
521
+ body: nil)
522
+ }
450
523
  }
524
+ }
451
525
 
452
- // case onBeforeClientSessionUpdate
453
- func primerHeadlessUniversalCheckoutWillUpdateClientSession() {
454
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onBeforeClientSessionUpdate.stringValue
526
+ // case onClientSessionUpdate
527
+ func primerHeadlessUniversalCheckoutDidUpdateClientSession(_ clientSession: PrimerClientSession) {
528
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onClientSessionUpdate.stringValue
455
529
 
456
- DispatchQueue.main.async {
457
- if self.implementedRNCallbacks?.isOnBeforeClientSessionUpdateImplemented == true {
458
- self.sendEvent(
459
- withName: rnCallbackName,
460
- body: nil)
461
- }
530
+ DispatchQueue.main.async {
531
+ if self.implementedRNCallbacks?.isOnClientSessionUpdateImplemented == true {
532
+ do {
533
+ let json = try clientSession.toJsonObject()
534
+ self.sendEvent(
535
+ withName: rnCallbackName,
536
+ body: ["clientSession": json])
537
+
538
+ } catch {
539
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
462
540
  }
541
+ }
463
542
  }
464
-
465
- // case onClientSessionUpdate
466
- func primerHeadlessUniversalCheckoutDidUpdateClientSession(_ clientSession: PrimerClientSession) {
467
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onClientSessionUpdate.stringValue
468
-
469
- DispatchQueue.main.async {
470
- if self.implementedRNCallbacks?.isOnClientSessionUpdateImplemented == true {
471
- do {
472
- let json = try clientSession.toJsonObject()
473
- self.sendEvent(
474
- withName: rnCallbackName,
475
- body: ["clientSession": json])
476
-
477
- } catch {
478
- self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
479
- }
543
+ }
544
+
545
+ // case onBeforePaymentCreate
546
+ func primerHeadlessUniversalCheckoutWillCreatePaymentWithData(
547
+ _ data: PrimerCheckoutPaymentMethodData,
548
+ decisionHandler: @escaping (PrimerPaymentCreationDecision) -> Void
549
+ ) {
550
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onBeforePaymentCreate.stringValue
551
+
552
+ DispatchQueue.main.async {
553
+ if self.implementedRNCallbacks?.isOnBeforePaymentCreateImplemented == true {
554
+ self.primerWillCreatePaymentWithDataDecisionHandler = { errorMessage in
555
+ DispatchQueue.main.async {
556
+ if let errorMessage = errorMessage {
557
+ decisionHandler(
558
+ .abortPaymentCreation(withErrorMessage: errorMessage.isEmpty ? nil : errorMessage))
559
+ } else {
560
+ decisionHandler(.continuePaymentCreation())
480
561
  }
562
+ }
481
563
  }
482
- }
483
564
 
484
- // case onBeforePaymentCreate
485
- func primerHeadlessUniversalCheckoutWillCreatePaymentWithData(_ data: PrimerCheckoutPaymentMethodData, decisionHandler: @escaping (PrimerPaymentCreationDecision) -> Void) {
486
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onBeforePaymentCreate.stringValue
487
-
488
- DispatchQueue.main.async {
489
- if self.implementedRNCallbacks?.isOnBeforePaymentCreateImplemented == true {
490
- self.primerWillCreatePaymentWithDataDecisionHandler = { errorMessage in
491
- DispatchQueue.main.async {
492
- if let errorMessage = errorMessage {
493
- decisionHandler(.abortPaymentCreation(withErrorMessage: errorMessage.isEmpty ? nil : errorMessage))
494
- } else {
495
- decisionHandler(.continuePaymentCreation())
496
- }
497
- }
498
- }
499
-
500
- do {
501
- let checkoutPaymentmethodJson = try data
502
- .toPrimerCheckoutPaymentMethodDataRN()
503
- .toJsonObject()
504
- self.sendEvent(
505
- withName: rnCallbackName,
506
- body: checkoutPaymentmethodJson)
507
-
508
- } catch {
509
- self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
510
- }
565
+ do {
566
+ let checkoutPaymentmethodJson =
567
+ try data
568
+ .toPrimerCheckoutPaymentMethodDataRN()
569
+ .toJsonObject()
570
+ self.sendEvent(
571
+ withName: rnCallbackName,
572
+ body: checkoutPaymentmethodJson)
511
573
 
512
- } else {
513
- // 'primerHeadlessUniversalCheckoutWillCreatePaymentWithData' hasn't
514
- // been implemented on the RN side, continue the payment flow.
515
- decisionHandler(.continuePaymentCreation())
516
- }
574
+ } catch {
575
+ self.handleRNBridgeError(error, checkoutData: nil, stopOnDebug: true)
517
576
  }
577
+
578
+ } else {
579
+ // 'primerHeadlessUniversalCheckoutWillCreatePaymentWithData' hasn't
580
+ // been implemented on the RN side, continue the payment flow.
581
+ decisionHandler(.continuePaymentCreation())
582
+ }
518
583
  }
584
+ }
519
585
 
520
586
  }
521
587
 
522
588
  extension RNTPrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutUIDelegate {
523
589
 
524
- // onPreparationStart
525
- func primerHeadlessUniversalCheckoutUIDidStartPreparation(for paymentMethodType: String) {
526
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onPreparationStart.stringValue
590
+ // onPreparationStart
591
+ func primerHeadlessUniversalCheckoutUIDidStartPreparation(for paymentMethodType: String) {
592
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onPreparationStart.stringValue
527
593
 
528
- DispatchQueue.main.async {
529
- if self.implementedRNCallbacks?.isOnPreparationStartImplemented == true {
530
- self.sendEvent(
531
- withName: rnCallbackName,
532
- body: ["paymentMethodType": paymentMethodType])
533
- }
534
- }
594
+ DispatchQueue.main.async {
595
+ if self.implementedRNCallbacks?.isOnPreparationStartImplemented == true {
596
+ self.sendEvent(
597
+ withName: rnCallbackName,
598
+ body: ["paymentMethodType": paymentMethodType])
599
+ }
535
600
  }
601
+ }
536
602
 
537
- func primerHeadlessUniversalCheckoutUIDidShowPaymentMethod(for paymentMethodType: String) {
538
- let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onPaymentMethodShow.stringValue
603
+ func primerHeadlessUniversalCheckoutUIDidShowPaymentMethod(for paymentMethodType: String) {
604
+ let rnCallbackName = PrimerHeadlessUniversalCheckoutEvents.onPaymentMethodShow.stringValue
539
605
 
540
- DispatchQueue.main.async {
541
- if self.implementedRNCallbacks?.isOnPaymentMethodShowImplemented == true {
542
- self.sendEvent(
543
- withName: rnCallbackName,
544
- body: ["paymentMethodType": paymentMethodType])
545
- }
546
- }
606
+ DispatchQueue.main.async {
607
+ if self.implementedRNCallbacks?.isOnPaymentMethodShowImplemented == true {
608
+ self.sendEvent(
609
+ withName: rnCallbackName,
610
+ body: ["paymentMethodType": paymentMethodType])
611
+ }
547
612
  }
613
+ }
548
614
  }
615
+ // swiftlint:enable file_length