@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
@@ -0,0 +1,2 @@
1
+ [*.{kt,kts}]
2
+ max_line_length = 120
@@ -6,6 +6,9 @@ buildscript {
6
6
  google()
7
7
  mavenCentral()
8
8
  mavenLocal()
9
+ maven {
10
+ url "https://plugins.gradle.org/m2/"
11
+ }
9
12
  }
10
13
 
11
14
  dependencies {
@@ -14,12 +17,14 @@ buildscript {
14
17
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
15
18
  classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
16
19
  classpath "org.jetbrains.kotlinx:kover-gradle-plugin:$kover_version"
20
+ classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.23.7"
17
21
  }
18
22
  }
19
23
 
20
24
  apply plugin: 'com.android.library'
21
25
  apply plugin: 'kotlin-android'
22
26
  apply plugin: 'kotlinx-serialization'
27
+ apply plugin: 'io.gitlab.arturbosch.detekt'
23
28
  apply from: "./config/coverage-scripts/kover.gradle"
24
29
 
25
30
  def getExtOrDefault(name) {
@@ -147,14 +152,37 @@ repositories {
147
152
  }
148
153
  }
149
154
 
155
+ detekt {
156
+ buildUponDefaultConfig = true
157
+ def defaultConfig = file("$rootDir/tooling/code-analysis/detekt.yml")
158
+
159
+ if (defaultConfig.exists()) {
160
+ config.setFrom(files(defaultConfig))
161
+ }
162
+
163
+ debug = true
164
+ parallel = true
165
+ disableDefaultRuleSets = false
166
+
167
+ ignoredBuildTypes = ["debug"]
168
+
169
+ reports {
170
+ html.required.set(true)
171
+ xml.required.set(false)
172
+ txt.required.set(true)
173
+ sarif.required.set(true)
174
+ }
175
+ }
176
+
150
177
  def kotlin_version = getExtOrDefault('kotlinVersion')
151
178
 
152
179
  dependencies {
180
+ detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.7")
153
181
  // noinspection GradleDynamicVersion
154
182
  api 'com.facebook.react:react-native:+'
155
183
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
156
184
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1"
157
- implementation 'io.primer:android:2.36.1'
185
+ implementation 'io.primer:android:2.36.3'
158
186
  testImplementation 'io.mockk:mockk:1.13.11'
159
187
  testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
160
188
  testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" ?>
2
+ <SmellBaseline>
3
+ <ManuallySuppressedIssues></ManuallySuppressedIssues>
4
+ <CurrentIssues>
5
+ <ID>TooGenericExceptionCaught:PrimerRN.kt$PrimerRN$e: Exception</ID>
6
+ <ID>TooGenericExceptionCaught:PrimerRNHeadlessUniversalCheckout.kt$PrimerRNHeadlessUniversalCheckout$e: Exception</ID>
7
+ <ID>TooGenericExceptionCaught:PrimerRNHeadlessUniversalCheckoutAssetManager.kt$PrimerRNHeadlessUniversalCheckoutAssetManager$e: Exception</ID>
8
+ <ID>TooGenericExceptionCaught:PrimerRNHeadlessUniversalCheckoutNativeUiManager.kt$PrimerRNHeadlessUniversalCheckoutNativeUiManager$e: Exception</ID>
9
+ <ID>TooGenericExceptionCaught:PrimerRNHeadlessUniversalCheckoutRawManager.kt$PrimerRNHeadlessUniversalCheckoutRawManager$e: Exception</ID>
10
+ <ID>TooGenericExceptionCaught:PrimerRNHeadlessUniversalCheckoutVaultManager.kt$PrimerRNHeadlessUniversalCheckoutVaultManager$e: Exception</ID>
11
+ <ID>UnusedParameter:PrimerRN.kt$PrimerRN$count: Int?</ID>
12
+ <ID>UnusedParameter:PrimerRN.kt$PrimerRN$eventName: String?</ID>
13
+ <ID>UnusedParameter:PrimerRNHeadlessUniversalCheckout.kt$PrimerRNHeadlessUniversalCheckout$count: Int?</ID>
14
+ <ID>UnusedParameter:PrimerRNHeadlessUniversalCheckout.kt$PrimerRNHeadlessUniversalCheckout$eventName: String?</ID>
15
+ <ID>UnusedParameter:PrimerRNHeadlessUniversalCheckoutBanksComponent.kt$PrimerRNHeadlessUniversalCheckoutBanksComponent$count: Int?</ID>
16
+ <ID>UnusedParameter:PrimerRNHeadlessUniversalCheckoutBanksComponent.kt$PrimerRNHeadlessUniversalCheckoutBanksComponent$eventName: String?</ID>
17
+ <ID>UnusedParameter:PrimerRNHeadlessUniversalCheckoutKlarnaComponent.kt$PrimerRNHeadlessUniversalCheckoutKlarnaComponent$count: Int?</ID>
18
+ <ID>UnusedParameter:PrimerRNHeadlessUniversalCheckoutKlarnaComponent.kt$PrimerRNHeadlessUniversalCheckoutKlarnaComponent$eventName: String?</ID>
19
+ <ID>UnusedParameter:PrimerRNHeadlessUniversalCheckoutRawManager.kt$PrimerRNHeadlessUniversalCheckoutRawManager$count: Int?</ID>
20
+ <ID>UnusedParameter:PrimerRNHeadlessUniversalCheckoutRawManager.kt$PrimerRNHeadlessUniversalCheckoutRawManager$eventName: String?</ID>
21
+ <ID>UnusedParameter:PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent.kt$PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent$count: Int?</ID>
22
+ <ID>UnusedParameter:PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent.kt$PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent$eventName: String?</ID>
23
+ </CurrentIssues>
24
+ </SmellBaseline>
@@ -1,9 +1,19 @@
1
1
  package com.primerioreactnative
2
2
 
3
3
  import android.util.Log
4
- import com.facebook.react.bridge.*
4
+ import com.facebook.react.bridge.Arguments
5
+ import com.facebook.react.bridge.Promise
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
8
+ import com.facebook.react.bridge.ReactMethod
9
+ import com.facebook.react.bridge.WritableMap
5
10
  import com.facebook.react.modules.core.DeviceEventManagerModule
6
- import com.primerioreactnative.datamodels.*
11
+ import com.primerioreactnative.datamodels.ErrorTypeRN
12
+ import com.primerioreactnative.datamodels.PrimerCheckoutDataRN
13
+ import com.primerioreactnative.datamodels.PrimerErrorRN
14
+ import com.primerioreactnative.datamodels.PrimerEvents
15
+ import com.primerioreactnative.datamodels.PrimerSettingsRN
16
+ import com.primerioreactnative.datamodels.toPrimerSettings
7
17
  import com.primerioreactnative.utils.PrimerImplementedRNCallbacks
8
18
  import com.primerioreactnative.utils.errorTo
9
19
  import com.primerioreactnative.utils.toWritableMap
@@ -14,201 +24,244 @@ import kotlinx.serialization.encodeToString
14
24
  import kotlinx.serialization.json.Json
15
25
  import org.json.JSONObject
16
26
 
27
+ @Suppress("TooManyFunctions")
17
28
  class PrimerRN(private val reactContext: ReactApplicationContext, private val json: Json) :
18
- ReactContextBaseJavaModule(reactContext) {
19
- private val mListener = PrimerRNEventListener()
20
-
21
- init {
22
- mListener.sendEvent = { eventName, paramsJson -> sendEvent(eventName, paramsJson) }
23
- mListener.sendError = { paramsJson -> onError(paramsJson) }
24
- mListener.sendErrorWithCheckoutData =
25
- { paramsJson, checkoutData -> onError(paramsJson, checkoutData) }
26
- mListener.onDismissedEvent = { Primer.instance.dismiss(true) }
27
- }
28
-
29
- override fun getName(): String = "NativePrimer"
30
-
31
- @ReactMethod
32
- fun configure(settingsStr: String, promise: Promise) {
33
- try {
34
- Log.d("PrimerRN", "settings: $settingsStr")
35
- val settings =
36
- if (settingsStr.isBlank()) PrimerSettingsRN() else json.decodeFromString(
37
- settingsStr
38
- )
39
- startSdk(settings.toPrimerSettings(reactContext))
40
- promise.resolve(null)
41
- } catch (e: Exception) {
42
- Log.e("PrimerRN", "configure settings error: $e")
43
- val exception = ErrorTypeRN.NativeBridgeFailed errorTo "failed to parse settings."
44
- onError(exception)
45
- promise.reject(exception.errorId, exception.description, e)
46
- }
47
- }
48
-
49
- @ReactMethod
50
- fun showUniversalCheckoutWithClientToken(
51
- clientToken: String,
52
- promise: Promise
53
- ) {
54
- try {
55
- Primer.instance.showUniversalCheckout(reactApplicationContext.applicationContext, clientToken)
56
- promise.resolve(null)
57
- } catch (e: Exception) {
58
- val exception = ErrorTypeRN.NativeBridgeFailed errorTo
59
- "Primer SDK failed: ${e.message}"
60
- onError(exception)
61
- promise.reject(exception.errorId, exception.description, e)
62
- }
63
- }
64
-
65
- @ReactMethod
66
- fun showVaultManagerWithClientToken(clientToken: String, promise: Promise) {
67
- try {
68
- Primer.instance.showVaultManager(reactApplicationContext.applicationContext, clientToken)
69
- promise.resolve(null)
70
- } catch (e: Exception) {
71
- val exception = ErrorTypeRN.NativeBridgeFailed errorTo
72
- "Primer SDK failed: ${e.message}"
73
- onError(exception)
74
- promise.reject(exception.errorId, exception.description, e)
75
- }
76
- }
77
-
78
- @ReactMethod
79
- fun dismiss(promise: Promise) {
80
- Primer.instance.dismiss(true)
81
- promise.resolve(null)
82
- }
83
-
84
- @ReactMethod
85
- fun cleanUp(promise: Promise) {
86
- Primer.instance.dismiss(true)
87
- promise.resolve(null)
88
- }
89
-
90
- // region tokenization handlers
91
- @ReactMethod
92
- fun handleTokenizationNewClientToken(newClientToken: String, promise: Promise) {
93
- mListener.handleTokenizationNewClientToken(newClientToken)
94
- promise.resolve(null)
95
- }
96
-
97
- @ReactMethod
98
- fun handleTokenizationSuccess(promise: Promise) {
99
- mListener.handleTokenizationSuccess()
100
- promise.resolve(null)
101
- }
102
-
103
- @ReactMethod
104
- fun handleTokenizationFailure(errorMessage: String?, promise: Promise) {
105
- mListener.handleTokenizationFailure(errorMessage.orEmpty())
106
- promise.resolve(null)
107
- }
108
- // endregion
109
-
110
- // region resume handlers
111
- @ReactMethod
112
- fun handleResumeNewClientToken(newClientToken: String, promise: Promise) {
113
- mListener.handleResumeNewClientToken(newClientToken)
114
- promise.resolve(null)
115
- }
116
-
117
- @ReactMethod
118
- fun handleResumeSuccess(promise: Promise) {
119
- mListener.handleResumeSuccess()
120
- promise.resolve(null)
121
- }
122
-
123
- @ReactMethod
124
- fun handleResumeFailure(errorMessage: String?, promise: Promise) {
125
- mListener.handleResumeFailure(errorMessage.orEmpty())
126
- promise.resolve(null)
127
- }
128
- // endregion
129
-
130
- // region payment handlers
131
- @ReactMethod
132
- fun handlePaymentCreationContinue(promise: Promise) {
133
- mListener.handlePaymentCreationContinue()
134
- promise.resolve(null)
135
- }
136
-
137
- @ReactMethod
138
- fun handlePaymentCreationAbort(errorMessage: String?, promise: Promise) {
139
- mListener.handlePaymentCreationAbort(errorMessage.orEmpty())
140
- promise.resolve(null)
141
- }
142
- // endregion
143
-
144
- // region error handlers
145
- @ReactMethod
146
- fun showErrorMessage(errorMessage: String?, promise: Promise) {
147
- mListener.handleErrorMessage(errorMessage.orEmpty())
148
- promise.resolve(null)
149
- }
150
- // endregion
151
-
152
- @ReactMethod
153
- fun setImplementedRNCallbacks(implementedRNCallbacksStr: String, promise: Promise) {
154
- try {
155
- Log.d("PrimerRN", "implementedRNCallbacks: $implementedRNCallbacksStr")
156
- val implementedRNCallbacks =
157
- json.decodeFromString<PrimerImplementedRNCallbacks>(implementedRNCallbacksStr)
158
- this.mListener.setImplementedCallbacks(implementedRNCallbacks)
159
- promise.resolve(null)
160
- } catch (e: Exception) {
161
- val exception =
162
- ErrorTypeRN.NativeBridgeFailed errorTo "Implemented callbacks $implementedRNCallbacksStr is not valid."
163
- onError(exception)
164
- promise.reject(exception.errorId, exception.description, e)
165
- }
166
- }
167
-
168
- @ReactMethod
169
- fun addListener(eventName: String?) = Unit
170
-
171
- @ReactMethod
172
- fun removeListeners(count: Int?) = Unit
173
-
174
- private fun startSdk(settings: PrimerSettings) {
175
- Primer.instance.configure(settings, mListener)
176
- }
177
-
178
- private fun onError(exception: PrimerErrorRN, checkoutDataRN: PrimerCheckoutDataRN? = null) {
179
- val params = Arguments.createMap()
180
- val errorJson = JSONObject(Json.encodeToString(exception))
181
- val errorData = prepareData(errorJson)
182
- params.putMap(Keys.ERROR, errorData)
183
- checkoutDataRN?.let {
184
- val checkoutDataJson = JSONObject(Json.encodeToString(it))
185
- val checkoutData = prepareData(checkoutDataJson)
186
- params.putMap(Keys.CHECKOUT_DATA, checkoutData)
187
- }
188
- sendEvent(PrimerEvents.ON_ERROR.eventName, params)
189
- }
190
-
191
- private fun sendEvent(name: String, params: WritableMap) {
192
- reactApplicationContext.getJSModule(
193
- DeviceEventManagerModule.RCTDeviceEventEmitter::class.java
194
- ).emit(name, params)
195
- }
196
-
197
- private fun sendEvent(name: String, data: JSONObject?) {
198
- val params = prepareData(data)
199
- reactApplicationContext.getJSModule(
200
- DeviceEventManagerModule.RCTDeviceEventEmitter::class.java
201
- ).emit(name, params)
202
- }
203
-
204
- private fun prepareData(data: JSONObject?): WritableMap {
205
- return data.toWritableMap()
206
- }
29
+ ReactContextBaseJavaModule(reactContext) {
30
+ private val mListener = PrimerRNEventListener()
31
+
32
+ init {
33
+ mListener.sendEvent = { eventName, paramsJson -> sendEvent(eventName, paramsJson) }
34
+ mListener.sendError = { paramsJson -> onError(paramsJson) }
35
+ mListener.sendErrorWithCheckoutData =
36
+ { paramsJson, checkoutData -> onError(paramsJson, checkoutData) }
37
+ mListener.onDismissedEvent = { Primer.instance.dismiss(true) }
38
+ }
39
+
40
+ override fun getName(): String = "NativePrimer"
41
+
42
+ @ReactMethod
43
+ fun configure(
44
+ settingsStr: String,
45
+ promise: Promise,
46
+ ) {
47
+ try {
48
+ Log.d("PrimerRN", "settings: $settingsStr")
49
+ val settings =
50
+ if (settingsStr.isBlank()) {
51
+ PrimerSettingsRN()
52
+ } else {
53
+ json.decodeFromString(
54
+ settingsStr,
55
+ )
56
+ }
57
+ startSdk(settings.toPrimerSettings(reactContext))
58
+ promise.resolve(null)
59
+ } catch (e: Exception) {
60
+ Log.e("PrimerRN", "configure settings error: $e")
61
+ val exception = ErrorTypeRN.NativeBridgeFailed errorTo "failed to parse settings."
62
+ onError(exception)
63
+ promise.reject(exception.errorId, exception.description, e)
64
+ }
65
+ }
66
+
67
+ @ReactMethod
68
+ fun showUniversalCheckoutWithClientToken(
69
+ clientToken: String,
70
+ promise: Promise,
71
+ ) {
72
+ try {
73
+ Primer.instance.showUniversalCheckout(reactApplicationContext.applicationContext, clientToken)
74
+ promise.resolve(null)
75
+ } catch (e: Exception) {
76
+ val exception =
77
+ ErrorTypeRN.NativeBridgeFailed errorTo
78
+ "Primer SDK failed: ${e.message}"
79
+ onError(exception)
80
+ promise.reject(exception.errorId, exception.description, e)
81
+ }
82
+ }
83
+
84
+ @ReactMethod
85
+ fun showVaultManagerWithClientToken(
86
+ clientToken: String,
87
+ promise: Promise,
88
+ ) {
89
+ try {
90
+ Primer.instance.showVaultManager(reactApplicationContext.applicationContext, clientToken)
91
+ promise.resolve(null)
92
+ } catch (e: Exception) {
93
+ val exception =
94
+ ErrorTypeRN.NativeBridgeFailed errorTo
95
+ "Primer SDK failed: ${e.message}"
96
+ onError(exception)
97
+ promise.reject(exception.errorId, exception.description, e)
98
+ }
99
+ }
100
+
101
+ @ReactMethod
102
+ fun dismiss(promise: Promise) {
103
+ Primer.instance.dismiss(true)
104
+ promise.resolve(null)
105
+ }
106
+
107
+ @ReactMethod
108
+ fun cleanUp(promise: Promise) {
109
+ Primer.instance.dismiss(true)
110
+ promise.resolve(null)
111
+ }
112
+
113
+ // region tokenization handlers
114
+ @ReactMethod
115
+ fun handleTokenizationNewClientToken(
116
+ newClientToken: String,
117
+ promise: Promise,
118
+ ) {
119
+ mListener.handleTokenizationNewClientToken(newClientToken)
120
+ promise.resolve(null)
121
+ }
122
+
123
+ @ReactMethod
124
+ fun handleTokenizationSuccess(promise: Promise) {
125
+ mListener.handleTokenizationSuccess()
126
+ promise.resolve(null)
127
+ }
128
+
129
+ @ReactMethod
130
+ fun handleTokenizationFailure(
131
+ errorMessage: String?,
132
+ promise: Promise,
133
+ ) {
134
+ mListener.handleTokenizationFailure(errorMessage.orEmpty())
135
+ promise.resolve(null)
136
+ }
137
+ // endregion
138
+
139
+ // region resume handlers
140
+ @ReactMethod
141
+ fun handleResumeNewClientToken(
142
+ newClientToken: String,
143
+ promise: Promise,
144
+ ) {
145
+ mListener.handleResumeNewClientToken(newClientToken)
146
+ promise.resolve(null)
147
+ }
148
+
149
+ @ReactMethod
150
+ fun handleResumeSuccess(promise: Promise) {
151
+ mListener.handleResumeSuccess()
152
+ promise.resolve(null)
153
+ }
154
+
155
+ @ReactMethod
156
+ fun handleResumeFailure(
157
+ errorMessage: String?,
158
+ promise: Promise,
159
+ ) {
160
+ mListener.handleResumeFailure(errorMessage.orEmpty())
161
+ promise.resolve(null)
162
+ }
163
+ // endregion
164
+
165
+ // region payment handlers
166
+ @ReactMethod
167
+ fun handlePaymentCreationContinue(promise: Promise) {
168
+ mListener.handlePaymentCreationContinue()
169
+ promise.resolve(null)
170
+ }
171
+
172
+ @ReactMethod
173
+ fun handlePaymentCreationAbort(
174
+ errorMessage: String?,
175
+ promise: Promise,
176
+ ) {
177
+ mListener.handlePaymentCreationAbort(errorMessage.orEmpty())
178
+ promise.resolve(null)
179
+ }
180
+ // endregion
181
+
182
+ // region error handlers
183
+ @ReactMethod
184
+ fun showErrorMessage(
185
+ errorMessage: String?,
186
+ promise: Promise,
187
+ ) {
188
+ mListener.handleErrorMessage(errorMessage.orEmpty())
189
+ promise.resolve(null)
190
+ }
191
+ // endregion
192
+
193
+ @ReactMethod
194
+ fun setImplementedRNCallbacks(
195
+ implementedRNCallbacksStr: String,
196
+ promise: Promise,
197
+ ) {
198
+ try {
199
+ Log.d("PrimerRN", "implementedRNCallbacks: $implementedRNCallbacksStr")
200
+ val implementedRNCallbacks =
201
+ json.decodeFromString<PrimerImplementedRNCallbacks>(implementedRNCallbacksStr)
202
+ this.mListener.setImplementedCallbacks(implementedRNCallbacks)
203
+ promise.resolve(null)
204
+ } catch (e: Exception) {
205
+ val exception =
206
+ ErrorTypeRN.NativeBridgeFailed errorTo "Implemented callbacks $implementedRNCallbacksStr is not valid."
207
+ onError(exception)
208
+ promise.reject(exception.errorId, exception.description, e)
209
+ }
210
+ }
211
+
212
+ @ReactMethod
213
+ fun addListener(eventName: String?) = Unit
214
+
215
+ @ReactMethod
216
+ fun removeListeners(count: Int?) = Unit
217
+
218
+ private fun startSdk(settings: PrimerSettings) {
219
+ Primer.instance.configure(settings, mListener)
220
+ }
221
+
222
+ private fun onError(
223
+ exception: PrimerErrorRN,
224
+ checkoutDataRN: PrimerCheckoutDataRN? = null,
225
+ ) {
226
+ val params = Arguments.createMap()
227
+ val errorJson = JSONObject(Json.encodeToString(exception))
228
+ val errorData = prepareData(errorJson)
229
+ params.putMap(Keys.ERROR, errorData)
230
+ checkoutDataRN?.let {
231
+ val checkoutDataJson = JSONObject(Json.encodeToString(it))
232
+ val checkoutData = prepareData(checkoutDataJson)
233
+ params.putMap(Keys.CHECKOUT_DATA, checkoutData)
234
+ }
235
+ sendEvent(PrimerEvents.ON_ERROR.eventName, params)
236
+ }
237
+
238
+ private fun sendEvent(
239
+ name: String,
240
+ params: WritableMap,
241
+ ) {
242
+ reactApplicationContext.getJSModule(
243
+ DeviceEventManagerModule.RCTDeviceEventEmitter::class.java,
244
+ ).emit(name, params)
245
+ }
246
+
247
+ private fun sendEvent(
248
+ name: String,
249
+ data: JSONObject?,
250
+ ) {
251
+ val params = prepareData(data)
252
+ reactApplicationContext.getJSModule(
253
+ DeviceEventManagerModule.RCTDeviceEventEmitter::class.java,
254
+ ).emit(name, params)
255
+ }
256
+
257
+ private fun prepareData(data: JSONObject?): WritableMap {
258
+ return data.toWritableMap()
259
+ }
207
260
  }
208
261
 
209
262
  internal object Keys {
210
- const val ERROR = "error"
211
- const val RESUME_TOKEN = "resumeToken"
212
- const val CHECKOUT_DATA = "checkoutData"
213
- const val ADDITIONAL_INFO = "additionalInfo"
263
+ const val ERROR = "error"
264
+ const val RESUME_TOKEN = "resumeToken"
265
+ const val CHECKOUT_DATA = "checkoutData"
266
+ const val ADDITIONAL_INFO = "additionalInfo"
214
267
  }