@stripe/stripe-react-native 0.56.0 → 0.57.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 (328) hide show
  1. package/android/build.gradle +76 -118
  2. package/android/gradle.properties +1 -1
  3. package/android/settings.gradle +2 -0
  4. package/android/spotless.gradle +1 -1
  5. package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormView.kt +24 -20
  6. package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +20 -17
  7. package/android/src/main/java/com/reactnativestripesdk/CardFormView.kt +28 -32
  8. package/android/src/main/java/com/reactnativestripesdk/{CollectBankAccountLauncherFragment.kt → CollectBankAccountLauncherManager.kt} +23 -44
  9. package/android/src/main/java/com/reactnativestripesdk/CustomPaymentMethodActivity.kt +2 -0
  10. package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementView.kt +4 -11
  11. package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementViewManager.kt +52 -132
  12. package/android/src/main/java/com/reactnativestripesdk/EventEmitterCompat.kt +0 -8
  13. package/android/src/main/java/com/reactnativestripesdk/FakeOnrampSdkModule.kt +154 -0
  14. package/android/src/main/java/com/reactnativestripesdk/{FinancialConnectionsSheetFragment.kt → FinancialConnectionsSheetManager.kt} +43 -92
  15. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +1 -1
  16. package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherManager.kt +107 -0
  17. package/android/src/main/java/com/reactnativestripesdk/GooglePayPaymentMethodLauncherManager.kt +37 -0
  18. package/android/src/main/java/com/reactnativestripesdk/GooglePayRequestHelper.kt +7 -5
  19. package/android/src/main/java/com/reactnativestripesdk/NavigationBarManager.kt +31 -0
  20. package/android/src/main/java/com/reactnativestripesdk/NavigationBarView.kt +120 -0
  21. package/android/src/main/java/com/reactnativestripesdk/PaymentElementConfig.kt +228 -0
  22. package/android/src/main/java/com/reactnativestripesdk/{PaymentLauncherFragment.kt → PaymentLauncherManager.kt} +40 -77
  23. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt +11 -20
  24. package/android/src/main/java/com/reactnativestripesdk/PaymentOptionDisplayDataMapper.kt +4 -6
  25. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetAppearance.kt +409 -483
  26. package/android/src/main/java/com/reactnativestripesdk/{PaymentSheetFragment.kt → PaymentSheetManager.kt} +65 -300
  27. package/android/src/main/java/com/reactnativestripesdk/StripeAbstractComposeView.kt +53 -17
  28. package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +227 -232
  29. package/android/src/main/java/com/reactnativestripesdk/StripeSdkPackage.kt +21 -2
  30. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherManager.kt +78 -0
  31. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetView.kt +52 -39
  32. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetViewManager.kt +2 -2
  33. package/android/src/main/java/com/reactnativestripesdk/customersheet/{CustomerSheetFragment.kt → CustomerSheetManager.kt} +64 -99
  34. package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerSessionProvider.kt +2 -3
  35. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonManager.kt +5 -10
  36. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonView.kt +90 -77
  37. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/TapAndPayProxy.kt +6 -4
  38. package/android/src/main/java/com/reactnativestripesdk/utils/Errors.kt +13 -3
  39. package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +87 -11
  40. package/android/src/main/java/com/reactnativestripesdk/utils/KeepJsAwakeTask.kt +1 -1
  41. package/android/src/main/java/com/reactnativestripesdk/utils/Mappers.kt +178 -185
  42. package/android/src/main/java/com/reactnativestripesdk/utils/StripeUIManager.kt +62 -0
  43. package/android/src/oldarch/java/com/reactnativestripesdk/NativeOnrampSdkModuleSpec.java +118 -0
  44. package/android/src/oldarch/java/com/reactnativestripesdk/NativeStripeSdkModuleSpec.java +4 -0
  45. package/android/src/onramp/java/com/reactnativestripesdk/OnrampSdkModule.kt +922 -0
  46. package/android/src/test/java/com/facebook/testutils/shadows/ShadowArguments.kt +29 -0
  47. package/android/src/test/java/com/reactnativestripesdk/EmbeddedPaymentElementViewManagerTest.kt +163 -0
  48. package/android/src/test/java/com/reactnativestripesdk/PaymentElementConfigTest.kt +976 -0
  49. package/android/src/test/java/com/reactnativestripesdk/PaymentSheetAppearanceTest.kt +801 -0
  50. package/android/src/test/java/com/reactnativestripesdk/PaymentSheetManagerTest.kt +523 -0
  51. package/android/src/test/java/com/reactnativestripesdk/addresssheet/AddressSheetViewTest.kt +551 -0
  52. package/android/src/test/java/com/reactnativestripesdk/mappers/MappersTest.kt +567 -0
  53. package/android/src/test/java/com/reactnativestripesdk/mappers/PaymentOptionDisplayDataMapperTest.kt +456 -0
  54. package/android/src/test/java/com/reactnativestripesdk/pushprovisioning/PushProvisioningProxyTest.kt +43 -0
  55. package/android/src/test/resources/robolectric.properties +2 -0
  56. package/ios/AddressSheet/AddressSheetUtils.swift +3 -3
  57. package/ios/AddressSheet/AddressSheetView.swift +26 -26
  58. package/ios/AddressSheet/AddressSheetViewManager.swift +2 -2
  59. package/ios/ApplePayButtonManager.swift +1 -1
  60. package/ios/ApplePayButtonView.swift +9 -10
  61. package/ios/ApplePayUtils.swift +51 -51
  62. package/ios/ApplePayViewController.swift +25 -29
  63. package/ios/AuBECSDebitFormManager.swift +1 -1
  64. package/ios/AuBECSDebitFormView.swift +13 -15
  65. package/ios/CardFieldManager.swift +4 -4
  66. package/ios/CardFieldView.swift +9 -9
  67. package/ios/CardFormManager.swift +3 -3
  68. package/ios/CardFormView.swift +28 -28
  69. package/ios/ConnectAccountOnboarding/ConnectAccountOnboardingView.swift +97 -0
  70. package/ios/ConnectAccountOnboarding/ConnectAccountOnboardingViewController.swift +133 -0
  71. package/ios/ConnectAccountOnboarding/ConnectAccountOnboardingViewManager.m +16 -0
  72. package/ios/ConnectAccountOnboarding/ConnectAccountOnboardingViewManager.swift +17 -0
  73. package/ios/CustomerSheet/CustomerSheetUtils.swift +15 -16
  74. package/ios/CustomerSheet/ReactNativeCustomerAdapter.swift +19 -19
  75. package/ios/EmbeddedPaymentElementView.swift +2 -2
  76. package/ios/Errors.swift +22 -23
  77. package/ios/FinancialConnections.swift +37 -37
  78. package/ios/Mappers.swift +212 -75
  79. package/ios/NavigationBarManager.m +13 -0
  80. package/ios/NavigationBarManager.swift +17 -0
  81. package/ios/NavigationBarView.swift +65 -0
  82. package/ios/NewArch/NavigationBarComponentView.h +10 -0
  83. package/ios/NewArch/NavigationBarComponentView.mm +86 -0
  84. package/ios/OldArch/StripeSdkEventEmitterCompat.h +1 -0
  85. package/ios/OldArch/StripeSdkEventEmitterCompat.m +7 -1
  86. package/ios/PaymentMethodFactory.swift +24 -41
  87. package/ios/PaymentOptionDisplayData+ReactNative.swift +4 -4
  88. package/ios/PaymentPassFinder.swift +9 -10
  89. package/ios/PaymentSheetAppearance.swift +137 -138
  90. package/ios/PushProvisioning/AddToWalletButtonManager.swift +2 -2
  91. package/ios/PushProvisioning/AddToWalletButtonView.swift +16 -18
  92. package/ios/PushProvisioning/PushProvisioningUtils.swift +11 -11
  93. package/ios/StripeContainerManager.swift +1 -1
  94. package/ios/StripeContainerView.swift +3 -3
  95. package/ios/StripeOnrampSdk.h +17 -0
  96. package/ios/StripeOnrampSdk.mm +158 -0
  97. package/ios/StripeSdk.mm +8 -0
  98. package/ios/StripeSdkEmitter.swift +4 -0
  99. package/ios/StripeSdkImpl+CustomerSheet.swift +31 -26
  100. package/ios/StripeSdkImpl+Embedded.swift +11 -9
  101. package/ios/StripeSdkImpl+PaymentSheet.swift +51 -42
  102. package/ios/StripeSdkImpl.swift +919 -191
  103. package/ios/UIColorExtension.swift +72 -0
  104. package/lib/commonjs/components/AddToWalletButton.js +1 -1
  105. package/lib/commonjs/components/AddToWalletButton.js.map +1 -1
  106. package/lib/commonjs/components/AddressSheet.js +1 -1
  107. package/lib/commonjs/components/AddressSheet.js.map +1 -1
  108. package/lib/commonjs/components/AuBECSDebitForm.js +1 -1
  109. package/lib/commonjs/components/AuBECSDebitForm.js.map +1 -1
  110. package/lib/commonjs/components/CardField.js +1 -1
  111. package/lib/commonjs/components/CardField.js.map +1 -1
  112. package/lib/commonjs/components/CardForm.js +1 -1
  113. package/lib/commonjs/components/CardForm.js.map +1 -1
  114. package/lib/commonjs/components/PlatformPayButton.js +1 -1
  115. package/lib/commonjs/components/PlatformPayButton.js.map +1 -1
  116. package/lib/commonjs/components/StripeContainer.js +1 -1
  117. package/lib/commonjs/components/StripeContainer.js.map +1 -1
  118. package/lib/commonjs/components/StripeProvider.js +1 -1
  119. package/lib/commonjs/components/StripeProvider.js.map +1 -1
  120. package/lib/commonjs/connect/Components.js +2 -0
  121. package/lib/commonjs/connect/Components.js.map +1 -0
  122. package/lib/commonjs/connect/ConnectComponentsProvider.js +2 -0
  123. package/lib/commonjs/connect/ConnectComponentsProvider.js.map +1 -0
  124. package/lib/commonjs/connect/EmbeddedComponent.js +19 -0
  125. package/lib/commonjs/connect/EmbeddedComponent.js.map +1 -0
  126. package/lib/commonjs/connect/ModalCloseButton.js +2 -0
  127. package/lib/commonjs/connect/ModalCloseButton.js.map +1 -0
  128. package/lib/commonjs/connect/NavigationBar.js +2 -0
  129. package/lib/commonjs/connect/NavigationBar.js.map +1 -0
  130. package/lib/commonjs/connect/connectTypes.js +2 -0
  131. package/lib/commonjs/connect/connectTypes.js.map +1 -0
  132. package/lib/commonjs/events.js +1 -1
  133. package/lib/commonjs/events.js.map +1 -1
  134. package/lib/commonjs/helpers.js +1 -1
  135. package/lib/commonjs/helpers.js.map +1 -1
  136. package/lib/commonjs/hooks/useOnramp.js +2 -0
  137. package/lib/commonjs/hooks/useOnramp.js.map +1 -0
  138. package/lib/commonjs/index.js +1 -1
  139. package/lib/commonjs/index.js.map +1 -1
  140. package/lib/commonjs/plugin/withStripe.js +1 -1
  141. package/lib/commonjs/plugin/withStripe.js.map +1 -1
  142. package/lib/commonjs/specs/NativeAddToWalletButton.js +1 -1
  143. package/lib/commonjs/specs/NativeAddToWalletButton.js.map +1 -1
  144. package/lib/commonjs/specs/NativeAddressSheet.js +1 -1
  145. package/lib/commonjs/specs/NativeAddressSheet.js.map +1 -1
  146. package/lib/commonjs/specs/NativeApplePayButton.js +1 -1
  147. package/lib/commonjs/specs/NativeApplePayButton.js.map +1 -1
  148. package/lib/commonjs/specs/NativeAuBECSDebitForm.js +1 -1
  149. package/lib/commonjs/specs/NativeAuBECSDebitForm.js.map +1 -1
  150. package/lib/commonjs/specs/NativeCardField.js +1 -1
  151. package/lib/commonjs/specs/NativeCardField.js.map +1 -1
  152. package/lib/commonjs/specs/NativeCardForm.js +1 -1
  153. package/lib/commonjs/specs/NativeCardForm.js.map +1 -1
  154. package/lib/commonjs/specs/NativeConnectAccountOnboardingView.js +2 -0
  155. package/lib/commonjs/specs/NativeConnectAccountOnboardingView.js.map +1 -0
  156. package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js +1 -1
  157. package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js.map +1 -1
  158. package/lib/commonjs/specs/NativeGooglePayButton.js +1 -1
  159. package/lib/commonjs/specs/NativeGooglePayButton.js.map +1 -1
  160. package/lib/commonjs/specs/NativeNavigationBar.js +2 -0
  161. package/lib/commonjs/specs/NativeNavigationBar.js.map +1 -0
  162. package/lib/commonjs/specs/NativeOnrampSdkModule.js +2 -0
  163. package/lib/commonjs/specs/NativeOnrampSdkModule.js.map +1 -0
  164. package/lib/commonjs/specs/NativeStripeContainer.js +1 -1
  165. package/lib/commonjs/specs/NativeStripeContainer.js.map +1 -1
  166. package/lib/commonjs/specs/NativeStripeSdkModule.js.map +1 -1
  167. package/lib/commonjs/types/EmbeddedPaymentElement.js +1 -1
  168. package/lib/commonjs/types/EmbeddedPaymentElement.js.map +1 -1
  169. package/lib/commonjs/types/Errors.js +1 -1
  170. package/lib/commonjs/types/Errors.js.map +1 -1
  171. package/lib/commonjs/types/Onramp.js +2 -0
  172. package/lib/commonjs/types/Onramp.js.map +1 -0
  173. package/lib/commonjs/types/PaymentIntent.js.map +1 -1
  174. package/lib/commonjs/types/PaymentSheet.js.map +1 -1
  175. package/lib/commonjs/types/index.js +1 -1
  176. package/lib/commonjs/types/index.js.map +1 -1
  177. package/lib/module/components/AddToWalletButton.js +1 -1
  178. package/lib/module/components/AddToWalletButton.js.map +1 -1
  179. package/lib/module/components/AddressSheet.js +1 -1
  180. package/lib/module/components/AddressSheet.js.map +1 -1
  181. package/lib/module/components/AuBECSDebitForm.js +1 -1
  182. package/lib/module/components/AuBECSDebitForm.js.map +1 -1
  183. package/lib/module/components/CardField.js +1 -1
  184. package/lib/module/components/CardField.js.map +1 -1
  185. package/lib/module/components/CardForm.js +1 -1
  186. package/lib/module/components/CardForm.js.map +1 -1
  187. package/lib/module/components/PlatformPayButton.js +1 -1
  188. package/lib/module/components/PlatformPayButton.js.map +1 -1
  189. package/lib/module/components/StripeContainer.js +1 -1
  190. package/lib/module/components/StripeContainer.js.map +1 -1
  191. package/lib/module/components/StripeProvider.js +1 -1
  192. package/lib/module/components/StripeProvider.js.map +1 -1
  193. package/lib/module/connect/Components.js +2 -0
  194. package/lib/module/connect/Components.js.map +1 -0
  195. package/lib/module/connect/ConnectComponentsProvider.js +2 -0
  196. package/lib/module/connect/ConnectComponentsProvider.js.map +1 -0
  197. package/lib/module/connect/EmbeddedComponent.js +19 -0
  198. package/lib/module/connect/EmbeddedComponent.js.map +1 -0
  199. package/lib/module/connect/ModalCloseButton.js +2 -0
  200. package/lib/module/connect/ModalCloseButton.js.map +1 -0
  201. package/lib/module/connect/NavigationBar.js +2 -0
  202. package/lib/module/connect/NavigationBar.js.map +1 -0
  203. package/lib/module/connect/connectTypes.js +2 -0
  204. package/lib/module/connect/connectTypes.js.map +1 -0
  205. package/lib/module/events.js +1 -1
  206. package/lib/module/events.js.map +1 -1
  207. package/lib/module/helpers.js +1 -1
  208. package/lib/module/helpers.js.map +1 -1
  209. package/lib/module/hooks/useOnramp.js +2 -0
  210. package/lib/module/hooks/useOnramp.js.map +1 -0
  211. package/lib/module/index.js +1 -1
  212. package/lib/module/index.js.map +1 -1
  213. package/lib/module/plugin/withStripe.js +1 -1
  214. package/lib/module/plugin/withStripe.js.map +1 -1
  215. package/lib/module/specs/NativeAddToWalletButton.js +1 -1
  216. package/lib/module/specs/NativeAddToWalletButton.js.map +1 -1
  217. package/lib/module/specs/NativeAddressSheet.js +1 -1
  218. package/lib/module/specs/NativeAddressSheet.js.map +1 -1
  219. package/lib/module/specs/NativeApplePayButton.js +1 -1
  220. package/lib/module/specs/NativeApplePayButton.js.map +1 -1
  221. package/lib/module/specs/NativeAuBECSDebitForm.js +1 -1
  222. package/lib/module/specs/NativeAuBECSDebitForm.js.map +1 -1
  223. package/lib/module/specs/NativeCardField.js +1 -1
  224. package/lib/module/specs/NativeCardField.js.map +1 -1
  225. package/lib/module/specs/NativeCardForm.js +1 -1
  226. package/lib/module/specs/NativeCardForm.js.map +1 -1
  227. package/lib/module/specs/NativeConnectAccountOnboardingView.js +2 -0
  228. package/lib/module/specs/NativeConnectAccountOnboardingView.js.map +1 -0
  229. package/lib/module/specs/NativeEmbeddedPaymentElement.js +1 -1
  230. package/lib/module/specs/NativeEmbeddedPaymentElement.js.map +1 -1
  231. package/lib/module/specs/NativeGooglePayButton.js +1 -1
  232. package/lib/module/specs/NativeGooglePayButton.js.map +1 -1
  233. package/lib/module/specs/NativeNavigationBar.js +2 -0
  234. package/lib/module/specs/NativeNavigationBar.js.map +1 -0
  235. package/lib/module/specs/NativeOnrampSdkModule.js +2 -0
  236. package/lib/module/specs/NativeOnrampSdkModule.js.map +1 -0
  237. package/lib/module/specs/NativeStripeContainer.js +1 -1
  238. package/lib/module/specs/NativeStripeContainer.js.map +1 -1
  239. package/lib/module/specs/NativeStripeSdkModule.js.map +1 -1
  240. package/lib/module/types/EmbeddedPaymentElement.js +1 -1
  241. package/lib/module/types/EmbeddedPaymentElement.js.map +1 -1
  242. package/lib/module/types/Errors.js +1 -1
  243. package/lib/module/types/Errors.js.map +1 -1
  244. package/lib/module/types/Onramp.js +2 -0
  245. package/lib/module/types/Onramp.js.map +1 -0
  246. package/lib/module/types/PaymentIntent.js.map +1 -1
  247. package/lib/module/types/PaymentSheet.js.map +1 -1
  248. package/lib/module/types/index.js +1 -1
  249. package/lib/module/types/index.js.map +1 -1
  250. package/lib/typescript/src/components/StripeProvider.d.ts.map +1 -1
  251. package/lib/typescript/src/connect/Components.d.ts +23 -0
  252. package/lib/typescript/src/connect/Components.d.ts.map +1 -0
  253. package/lib/typescript/src/connect/ConnectComponentsProvider.d.ts +22 -0
  254. package/lib/typescript/src/connect/ConnectComponentsProvider.d.ts.map +1 -0
  255. package/lib/typescript/src/connect/EmbeddedComponent.d.ts +18 -0
  256. package/lib/typescript/src/connect/EmbeddedComponent.d.ts.map +1 -0
  257. package/lib/typescript/src/connect/ModalCloseButton.d.ts +7 -0
  258. package/lib/typescript/src/connect/ModalCloseButton.d.ts.map +1 -0
  259. package/lib/typescript/src/connect/NavigationBar.d.ts +8 -0
  260. package/lib/typescript/src/connect/NavigationBar.d.ts.map +1 -0
  261. package/lib/typescript/src/connect/connectTypes.d.ts +464 -0
  262. package/lib/typescript/src/connect/connectTypes.d.ts.map +1 -0
  263. package/lib/typescript/src/events.d.ts +3 -0
  264. package/lib/typescript/src/events.d.ts.map +1 -1
  265. package/lib/typescript/src/functions.d.ts.map +1 -1
  266. package/lib/typescript/src/helpers.d.ts.map +1 -1
  267. package/lib/typescript/src/hooks/useOnramp.d.ts +158 -0
  268. package/lib/typescript/src/hooks/useOnramp.d.ts.map +1 -0
  269. package/lib/typescript/src/index.d.ts +4 -0
  270. package/lib/typescript/src/index.d.ts.map +1 -1
  271. package/lib/typescript/src/plugin/withStripe.d.ts +15 -0
  272. package/lib/typescript/src/plugin/withStripe.d.ts.map +1 -1
  273. package/lib/typescript/src/specs/NativeConnectAccountOnboardingView.d.ts +14 -0
  274. package/lib/typescript/src/specs/NativeConnectAccountOnboardingView.d.ts.map +1 -0
  275. package/lib/typescript/src/specs/NativeNavigationBar.d.ts +11 -0
  276. package/lib/typescript/src/specs/NativeNavigationBar.d.ts.map +1 -0
  277. package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts +28 -0
  278. package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts.map +1 -0
  279. package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +3 -0
  280. package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts.map +1 -1
  281. package/lib/typescript/src/types/Errors.d.ts +5 -0
  282. package/lib/typescript/src/types/Errors.d.ts.map +1 -1
  283. package/lib/typescript/src/types/Onramp.d.ts +275 -0
  284. package/lib/typescript/src/types/Onramp.d.ts.map +1 -0
  285. package/lib/typescript/src/types/PaymentIntent.d.ts +1 -9
  286. package/lib/typescript/src/types/PaymentIntent.d.ts.map +1 -1
  287. package/lib/typescript/src/types/PaymentMethod.d.ts +2 -8
  288. package/lib/typescript/src/types/PaymentMethod.d.ts.map +1 -1
  289. package/lib/typescript/src/types/PaymentSheet.d.ts +7 -0
  290. package/lib/typescript/src/types/PaymentSheet.d.ts.map +1 -1
  291. package/lib/typescript/src/types/index.d.ts +7 -1
  292. package/lib/typescript/src/types/index.d.ts.map +1 -1
  293. package/package.json +24 -12
  294. package/src/components/StripeProvider.tsx +5 -0
  295. package/src/connect/Components.tsx +279 -0
  296. package/src/connect/ConnectComponentsProvider.tsx +93 -0
  297. package/src/connect/EmbeddedComponent.tsx +407 -0
  298. package/src/connect/ModalCloseButton.tsx +44 -0
  299. package/src/connect/NavigationBar.tsx +29 -0
  300. package/src/connect/connectTypes.ts +626 -0
  301. package/src/events.ts +22 -0
  302. package/src/hooks/useOnramp.tsx +334 -0
  303. package/src/index.tsx +13 -0
  304. package/src/plugin/withStripe.ts +104 -7
  305. package/src/specs/NativeConnectAccountOnboardingView.ts +19 -0
  306. package/src/specs/NativeNavigationBar.ts +16 -0
  307. package/src/specs/NativeOnrampSdkModule.ts +47 -0
  308. package/src/specs/NativeStripeSdkModule.ts +5 -0
  309. package/src/types/Errors.ts +6 -0
  310. package/src/types/Onramp.ts +317 -0
  311. package/src/types/PaymentIntent.ts +0 -10
  312. package/src/types/PaymentMethod.ts +0 -9
  313. package/src/types/PaymentSheet.ts +7 -0
  314. package/src/types/index.ts +8 -0
  315. package/stripe-react-native.podspec +21 -8
  316. package/android/.idea/AndroidProjectSystem.xml +0 -6
  317. package/android/.idea/caches/deviceStreaming.xml +0 -703
  318. package/android/.idea/compiler.xml +0 -6
  319. package/android/.idea/gradle.xml +0 -18
  320. package/android/.idea/migrations.xml +0 -10
  321. package/android/.idea/misc.xml +0 -10
  322. package/android/.idea/runConfigurations.xml +0 -17
  323. package/android/.idea/vcs.xml +0 -6
  324. package/android/local.properties +0 -8
  325. package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherFragment.kt +0 -146
  326. package/android/src/main/java/com/reactnativestripesdk/GooglePayPaymentMethodLauncherFragment.kt +0 -68
  327. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherFragment.kt +0 -102
  328. package/android/src/main/java/com/reactnativestripesdk/utils/StripeFragment.kt +0 -52
@@ -1,12 +1,9 @@
1
1
  package com.reactnativestripesdk.utils
2
2
 
3
3
  import android.annotation.SuppressLint
4
- import android.os.Bundle
5
- import android.util.Log
6
4
  import com.facebook.react.bridge.Arguments
7
5
  import com.facebook.react.bridge.ReadableArray
8
6
  import com.facebook.react.bridge.ReadableMap
9
- import com.facebook.react.bridge.ReadableType
10
7
  import com.facebook.react.bridge.WritableArray
11
8
  import com.facebook.react.bridge.WritableMap
12
9
  import com.facebook.react.bridge.WritableNativeMap
@@ -30,13 +27,16 @@ import com.stripe.android.model.StripeIntent.NextActionType
30
27
  import com.stripe.android.model.Token
31
28
  import com.stripe.android.paymentelement.ExperimentalCustomPaymentMethodsApi
32
29
  import com.stripe.android.paymentsheet.PaymentSheet
30
+ import java.lang.IllegalArgumentException
31
+
32
+ internal fun createEmptyResult(): WritableMap = WritableNativeMap()
33
33
 
34
34
  internal fun createResult(
35
35
  key: String,
36
36
  value: WritableMap,
37
37
  additionalFields: Map<String, Any>? = null,
38
38
  ): WritableMap {
39
- val map = WritableNativeMap()
39
+ val map = Arguments.createMap()
40
40
  map.putMap(key, value)
41
41
  additionalFields?.let { map.merge(it.toReadableMap()) }
42
42
  return map
@@ -46,9 +46,9 @@ internal fun createCanAddCardResult(
46
46
  canAddCard: Boolean,
47
47
  status: String? = null,
48
48
  token: WritableMap? = null,
49
- ): WritableNativeMap {
50
- val result = WritableNativeMap()
51
- val details = WritableNativeMap()
49
+ ): WritableMap {
50
+ val result = Arguments.createMap()
51
+ val details = Arguments.createMap()
52
52
  result.putBoolean("canAddCard", canAddCard)
53
53
  if (status != null) {
54
54
  details.putString("status", status)
@@ -94,8 +94,8 @@ internal fun mapToReturnURL(urlScheme: String?): String? {
94
94
  }
95
95
 
96
96
  internal fun mapIntentShipping(shipping: PaymentIntent.Shipping): WritableMap {
97
- val map: WritableMap = WritableNativeMap()
98
- val address: WritableMap = WritableNativeMap()
97
+ val map: WritableMap = Arguments.createMap()
98
+ val address: WritableMap = Arguments.createMap()
99
99
 
100
100
  address.putString("city", shipping.address.city)
101
101
  address.putString("country", shipping.address.country)
@@ -138,7 +138,6 @@ internal fun mapPaymentMethodType(type: PaymentMethod.Type?): String =
138
138
  PaymentMethod.Type.CardPresent -> "CardPresent"
139
139
  PaymentMethod.Type.Eps -> "Eps"
140
140
  PaymentMethod.Type.Fpx -> "Fpx"
141
- PaymentMethod.Type.Giropay -> "Giropay"
142
141
  PaymentMethod.Type.GrabPay -> "GrabPay"
143
142
  PaymentMethod.Type.Ideal -> "Ideal"
144
143
  PaymentMethod.Type.Netbanking -> "Netbanking"
@@ -171,7 +170,6 @@ internal fun mapToPaymentMethodType(type: String?): PaymentMethod.Type? =
171
170
  "CardPresent" -> PaymentMethod.Type.CardPresent
172
171
  "Eps" -> PaymentMethod.Type.Eps
173
172
  "Fpx" -> PaymentMethod.Type.Fpx
174
- "Giropay" -> PaymentMethod.Type.Giropay
175
173
  "GrabPay" -> PaymentMethod.Type.GrabPay
176
174
  "Netbanking" -> PaymentMethod.Type.Netbanking
177
175
  "Oxxo" -> PaymentMethod.Type.Oxxo
@@ -190,8 +188,8 @@ internal fun mapToPaymentMethodType(type: String?): PaymentMethod.Type? =
190
188
  }
191
189
 
192
190
  internal fun mapFromBillingDetails(billingDatails: PaymentMethod.BillingDetails?): WritableMap {
193
- val details: WritableMap = WritableNativeMap()
194
- val address: WritableMap = WritableNativeMap()
191
+ val details: WritableMap = Arguments.createMap()
192
+ val address: WritableMap = Arguments.createMap()
195
193
 
196
194
  address.putString("country", billingDatails?.address?.country)
197
195
  address.putString("city", billingDatails?.address?.city)
@@ -237,7 +235,6 @@ internal fun mapTokenType(type: Token.Type): String =
237
235
  Token.Type.CvcUpdate -> "CvcUpdate"
238
236
  Token.Type.Person -> "Person"
239
237
  Token.Type.Pii -> "Pii"
240
- else -> "Unknown"
241
238
  }
242
239
 
243
240
  internal fun mapFromBankAccountType(type: BankAccount.Type?): String =
@@ -269,7 +266,7 @@ internal fun mapFromBankAccount(bankAccount: BankAccount?): WritableMap? {
269
266
  return null
270
267
  }
271
268
 
272
- val bankAccountMap: WritableMap = WritableNativeMap()
269
+ val bankAccountMap: WritableMap = Arguments.createMap()
273
270
  bankAccountMap.putString("id", bankAccount.id)
274
271
  bankAccountMap.putString("bankName", bankAccount.bankName)
275
272
  bankAccountMap.putString("accountHolderName", bankAccount.accountHolderName)
@@ -316,13 +313,13 @@ internal fun mapFromUSBankAccountType(type: PaymentMethod.USBankAccount.USBankAc
316
313
  }
317
314
 
318
315
  internal fun mapFromCard(card: Card?): WritableMap? {
319
- val cardMap: WritableMap = WritableNativeMap()
316
+ val cardMap: WritableMap = Arguments.createMap()
320
317
 
321
318
  if (card == null) {
322
319
  return null
323
320
  }
324
321
 
325
- val address: WritableMap = WritableNativeMap()
322
+ val address: WritableMap = Arguments.createMap()
326
323
 
327
324
  cardMap.putString("country", card.country)
328
325
  cardMap.putString("brand", mapCardBrand(card.brand))
@@ -350,7 +347,7 @@ internal fun mapFromCard(card: Card?): WritableMap? {
350
347
  }
351
348
 
352
349
  internal fun mapFromToken(token: Token): WritableMap {
353
- val tokenMap: WritableMap = WritableNativeMap()
350
+ val tokenMap: WritableMap = Arguments.createMap()
354
351
  tokenMap.putString("id", token.id)
355
352
  tokenMap.putString("created", token.created.time.toString())
356
353
  tokenMap.putString("type", mapTokenType(token.type))
@@ -363,7 +360,7 @@ internal fun mapFromToken(token: Token): WritableMap {
363
360
  }
364
361
 
365
362
  internal fun mapFromPaymentMethod(paymentMethod: PaymentMethod): WritableMap {
366
- val pm: WritableMap = WritableNativeMap()
363
+ val pm: WritableMap = Arguments.createMap()
367
364
 
368
365
  pm.putString("id", paymentMethod.id)
369
366
  pm.putString("paymentMethodType", mapPaymentMethodType(paymentMethod.type))
@@ -372,7 +369,7 @@ internal fun mapFromPaymentMethod(paymentMethod: PaymentMethod): WritableMap {
372
369
  pm.putMap("billingDetails", mapFromBillingDetails(paymentMethod.billingDetails))
373
370
  pm.putMap(
374
371
  "Card",
375
- WritableNativeMap().also {
372
+ Arguments.createMap().also {
376
373
  it.putString("brand", mapCardBrand(paymentMethod.card?.brand))
377
374
  it.putString("country", paymentMethod.card?.country)
378
375
  paymentMethod.card?.expiryYear?.let { year -> it.putInt("expYear", year) }
@@ -390,7 +387,7 @@ internal fun mapFromPaymentMethod(paymentMethod: PaymentMethod): WritableMap {
390
387
  )
391
388
  it.putMap(
392
389
  "threeDSecureUsage",
393
- WritableNativeMap().also { threeDSecureUsageMap ->
390
+ Arguments.createMap().also { threeDSecureUsageMap ->
394
391
  threeDSecureUsageMap.putBoolean(
395
392
  "isSupported",
396
393
  paymentMethod.card?.threeDSecureUsage?.isSupported ?: false,
@@ -401,7 +398,7 @@ internal fun mapFromPaymentMethod(paymentMethod: PaymentMethod): WritableMap {
401
398
  )
402
399
  pm.putMap(
403
400
  "SepaDebit",
404
- WritableNativeMap().also {
401
+ Arguments.createMap().also {
405
402
  it.putString("bankCode", paymentMethod.sepaDebit?.bankCode)
406
403
  it.putString("country", paymentMethod.sepaDebit?.country)
407
404
  it.putString("fingerprint", paymentMethod.sepaDebit?.fingerprint)
@@ -410,7 +407,7 @@ internal fun mapFromPaymentMethod(paymentMethod: PaymentMethod): WritableMap {
410
407
  )
411
408
  pm.putMap(
412
409
  "BacsDebit",
413
- WritableNativeMap().also {
410
+ Arguments.createMap().also {
414
411
  it.putString("fingerprint", paymentMethod.bacsDebit?.fingerprint)
415
412
  it.putString("last4", paymentMethod.bacsDebit?.last4)
416
413
  it.putString("sortCode", paymentMethod.bacsDebit?.sortCode)
@@ -418,7 +415,7 @@ internal fun mapFromPaymentMethod(paymentMethod: PaymentMethod): WritableMap {
418
415
  )
419
416
  pm.putMap(
420
417
  "AuBecsDebit",
421
- WritableNativeMap().also {
418
+ Arguments.createMap().also {
422
419
  it.putString("bsbNumber", paymentMethod.bacsDebit?.sortCode)
423
420
  it.putString("fingerprint", paymentMethod.bacsDebit?.fingerprint)
424
421
  it.putString("last4", paymentMethod.bacsDebit?.last4)
@@ -426,22 +423,22 @@ internal fun mapFromPaymentMethod(paymentMethod: PaymentMethod): WritableMap {
426
423
  )
427
424
  pm.putMap(
428
425
  "Ideal",
429
- WritableNativeMap().also {
426
+ Arguments.createMap().also {
430
427
  it.putString("bankName", paymentMethod.ideal?.bank)
431
428
  it.putString("bankIdentifierCode", paymentMethod.ideal?.bankIdentifierCode)
432
429
  },
433
430
  )
434
431
  pm.putMap(
435
432
  "Fpx",
436
- WritableNativeMap().also {
433
+ Arguments.createMap().also {
437
434
  it.putString("accountHolderType", paymentMethod.fpx?.accountHolderType)
438
435
  it.putString("bank", paymentMethod.fpx?.bank)
439
436
  },
440
437
  )
441
- pm.putMap("Upi", WritableNativeMap().also { it.putString("vpa", paymentMethod.upi?.vpa) })
438
+ pm.putMap("Upi", Arguments.createMap().also { it.putString("vpa", paymentMethod.upi?.vpa) })
442
439
  pm.putMap(
443
440
  "USBankAccount",
444
- WritableNativeMap().also {
441
+ Arguments.createMap().also {
445
442
  it.putString("routingNumber", paymentMethod.usBankAccount?.routingNumber)
446
443
  it.putString(
447
444
  "accountType",
@@ -467,7 +464,7 @@ internal fun mapFromPaymentMethod(paymentMethod: PaymentMethod): WritableMap {
467
464
  }
468
465
 
469
466
  internal fun mapFromPaymentIntentResult(paymentIntent: PaymentIntent): WritableMap {
470
- val map: WritableMap = WritableNativeMap()
467
+ val map: WritableMap = Arguments.createMap()
471
468
  map.putString("id", paymentIntent.id)
472
469
  map.putString("clientSecret", paymentIntent.clientSecret)
473
470
  map.putBoolean("livemode", paymentIntent.isLiveMode)
@@ -494,7 +491,7 @@ internal fun mapFromPaymentIntentResult(paymentIntent: PaymentIntent): WritableM
494
491
  map.putNull("canceledAt")
495
492
 
496
493
  paymentIntent.lastPaymentError?.let {
497
- val paymentError: WritableMap = WritableNativeMap()
494
+ val paymentError: WritableMap = Arguments.createMap()
498
495
  paymentError.putString("code", it.code)
499
496
  paymentError.putString("message", it.message)
500
497
  paymentError.putString("type", mapFromPaymentIntentLastErrorType(it.type))
@@ -525,8 +522,8 @@ internal fun mapFromMicrodepositType(type: MicrodepositType): String =
525
522
  internal fun mapNextAction(
526
523
  type: NextActionType?,
527
524
  data: NextActionData?,
528
- ): WritableNativeMap? {
529
- val nextActionMap = WritableNativeMap()
525
+ ): WritableMap? {
526
+ val nextActionMap = Arguments.createMap()
530
527
  when (type) {
531
528
  NextActionType.RedirectToUrl -> {
532
529
  (data as? NextActionData.RedirectToUrl)?.let {
@@ -593,6 +590,12 @@ internal fun mapNextAction(
593
590
  nextActionMap.putString("voucherURL", it.hostedVoucherUrl)
594
591
  }
595
592
  }
593
+ NextActionType.DisplayPayNowDetails -> {
594
+ (data as? NextActionData.DisplayPayNowDetails)?.let {
595
+ nextActionMap.putString("type", "paynow")
596
+ nextActionMap.putString("qrCodeUrl", it.qrCodeUrl)
597
+ }
598
+ }
596
599
  }
597
600
  return nextActionMap
598
601
  }
@@ -658,6 +661,21 @@ internal fun mapToAddress(
658
661
  return address.build()
659
662
  }
660
663
 
664
+ internal fun mapToPaymentSheetAddress(addressMap: ReadableMap?): PaymentSheet.Address? {
665
+ if (addressMap == null) {
666
+ return null
667
+ }
668
+
669
+ return PaymentSheet.Address(
670
+ city = addressMap.getString("city"),
671
+ country = addressMap.getString("country"),
672
+ line1 = addressMap.getString("line1"),
673
+ line2 = addressMap.getString("line2"),
674
+ postalCode = addressMap.getString("postalCode"),
675
+ state = addressMap.getString("state"),
676
+ )
677
+ }
678
+
661
679
  internal fun mapToBillingDetails(
662
680
  billingDetails: ReadableMap?,
663
681
  cardAddress: Address?,
@@ -665,7 +683,7 @@ internal fun mapToBillingDetails(
665
683
  if (billingDetails == null && cardAddress == null) {
666
684
  return null
667
685
  }
668
- val address = mapToAddress(getMapOrNull(billingDetails, "address"), cardAddress)
686
+ val address = mapToAddress(billingDetails?.getMap("address"), cardAddress)
669
687
  val paymentMethodBillingDetailsBuilder = PaymentMethod.BillingDetails.Builder()
670
688
 
671
689
  if (billingDetails != null) {
@@ -679,14 +697,17 @@ internal fun mapToBillingDetails(
679
697
  return paymentMethodBillingDetailsBuilder.build()
680
698
  }
681
699
 
682
- internal fun mapToMetadata(metadata: ReadableMap?): Map<String, String>? = metadata?.toHashMap()?.mapValues { it.value.toString() }
700
+ internal fun mapToMetadata(metadata: ReadableMap?): Map<String, String>? =
701
+ metadata?.toHashMap()?.mapValues {
702
+ it.value.toString()
703
+ }
683
704
 
684
705
  internal fun mapToShippingDetails(shippingDetails: ReadableMap?): ConfirmPaymentIntentParams.Shipping? {
685
706
  if (shippingDetails == null) {
686
707
  return null
687
708
  }
688
709
 
689
- val address = mapToAddress(getMapOrNull(shippingDetails, "address"), null)
710
+ val address = mapToAddress(shippingDetails.getMap("address"), null)
690
711
 
691
712
  return ConfirmPaymentIntentParams.Shipping(
692
713
  name = getValOr(shippingDetails, "name") ?: "",
@@ -694,37 +715,17 @@ internal fun mapToShippingDetails(shippingDetails: ReadableMap?): ConfirmPayment
694
715
  )
695
716
  }
696
717
 
697
- private fun getStringOrNull(
698
- map: ReadableMap?,
699
- key: String,
700
- ): String? = if (map?.hasKey(key) == true) map.getString(key) else null
701
-
702
- fun getIntOrNull(
703
- map: ReadableMap?,
704
- key: String,
705
- ): Int? = if (map?.hasKey(key) == true) map.getInt(key) else null
706
-
707
- fun getMapOrNull(
708
- map: ReadableMap?,
709
- key: String,
710
- ): ReadableMap? = if (map?.hasKey(key) == true) map.getMap(key) else null
711
-
712
- fun getBooleanOrFalse(
713
- map: ReadableMap?,
714
- key: String,
715
- ): Boolean = if (map?.hasKey(key) == true) map.getBoolean(key) else false
716
-
717
718
  private fun convertToUnixTimestamp(timestamp: Long): String = (timestamp * 1000).toString()
718
719
 
719
720
  fun mapToUICustomization(params: ReadableMap): PaymentAuthConfig.Stripe3ds2UiCustomization {
720
- val labelCustomization = getMapOrNull(params, "label")
721
+ val labelCustomization = params.getMap("label")
721
722
  val navigationBarCustomization = params.getMap("navigationBar")
722
- val textBoxCustomization = getMapOrNull(params, "textField")
723
- val submitButtonCustomization = getMapOrNull(params, "submitButton")
724
- val cancelButtonCustomization = getMapOrNull(params, "cancelButton")
725
- val nextButtonCustomization = getMapOrNull(params, "nextButton")
726
- val continueButtonCustomization = getMapOrNull(params, "continueButton")
727
- val resendButtonCustomization = getMapOrNull(params, "resendButton")
723
+ val textBoxCustomization = params.getMap("textField")
724
+ val submitButtonCustomization = params.getMap("submitButton")
725
+ val cancelButtonCustomization = params.getMap("cancelButton")
726
+ val nextButtonCustomization = params.getMap("nextButton")
727
+ val continueButtonCustomization = params.getMap("continueButton")
728
+ val resendButtonCustomization = params.getMap("resendButton")
728
729
 
729
730
  val labelCustomizationBuilder = PaymentAuthConfig.Stripe3ds2LabelCustomization.Builder()
730
731
  val toolbarCustomizationBuilder = PaymentAuthConfig.Stripe3ds2ToolbarCustomization.Builder()
@@ -736,121 +737,121 @@ fun mapToUICustomization(params: ReadableMap): PaymentAuthConfig.Stripe3ds2UiCus
736
737
  val continueButtonCustomizationBuilder = PaymentAuthConfig.Stripe3ds2ButtonCustomization.Builder()
737
738
  val resendButtonCustomizationBuilder = PaymentAuthConfig.Stripe3ds2ButtonCustomization.Builder()
738
739
 
739
- getStringOrNull(labelCustomization, "headingTextColor")?.let {
740
+ labelCustomization?.getString("headingTextColor")?.let {
740
741
  labelCustomizationBuilder.setHeadingTextColor(it)
741
742
  }
742
- getStringOrNull(labelCustomization, "textColor")?.let {
743
+ labelCustomization?.getString("textColor")?.let {
743
744
  labelCustomizationBuilder.setTextColor(it)
744
745
  }
745
- getIntOrNull(labelCustomization, "headingFontSize")?.let {
746
+ labelCustomization.getIntOrNull("headingFontSize")?.let {
746
747
  labelCustomizationBuilder.setHeadingTextFontSize(it)
747
748
  }
748
- getIntOrNull(labelCustomization, "textFontSize")?.let {
749
+ labelCustomization.getIntOrNull("textFontSize")?.let {
749
750
  labelCustomizationBuilder.setTextFontSize(it)
750
751
  }
751
752
 
752
- getStringOrNull(navigationBarCustomization, "headerText")?.let {
753
+ navigationBarCustomization?.getString("headerText")?.let {
753
754
  toolbarCustomizationBuilder.setHeaderText(it)
754
755
  }
755
- getStringOrNull(navigationBarCustomization, "buttonText")?.let {
756
+ navigationBarCustomization?.getString("buttonText")?.let {
756
757
  toolbarCustomizationBuilder.setButtonText(it)
757
758
  }
758
- getStringOrNull(navigationBarCustomization, "textColor")?.let {
759
+ navigationBarCustomization?.getString("textColor")?.let {
759
760
  toolbarCustomizationBuilder.setTextColor(it)
760
761
  }
761
- getStringOrNull(navigationBarCustomization, "statusBarColor")?.let {
762
+ navigationBarCustomization?.getString("statusBarColor")?.let {
762
763
  toolbarCustomizationBuilder.setStatusBarColor(it)
763
764
  }
764
- getStringOrNull(navigationBarCustomization, "backgroundColor")?.let {
765
+ navigationBarCustomization?.getString("backgroundColor")?.let {
765
766
  toolbarCustomizationBuilder.setBackgroundColor(it)
766
767
  }
767
- getIntOrNull(navigationBarCustomization, "textFontSize")?.let {
768
+ navigationBarCustomization.getIntOrNull("textFontSize")?.let {
768
769
  toolbarCustomizationBuilder.setTextFontSize(it)
769
770
  }
770
771
 
771
- getStringOrNull(textBoxCustomization, "borderColor")?.let {
772
+ textBoxCustomization?.getString("borderColor")?.let {
772
773
  textBoxCustomizationBuilder.setBorderColor(it)
773
774
  }
774
- getStringOrNull(textBoxCustomization, "textColor")?.let {
775
+ textBoxCustomization?.getString("textColor")?.let {
775
776
  textBoxCustomizationBuilder.setTextColor(it)
776
777
  }
777
- getIntOrNull(textBoxCustomization, "borderWidth")?.let {
778
+ textBoxCustomization.getIntOrNull("borderWidth")?.let {
778
779
  textBoxCustomizationBuilder.setBorderWidth(it)
779
780
  }
780
- getIntOrNull(textBoxCustomization, "borderRadius")?.let {
781
+ textBoxCustomization.getIntOrNull("borderRadius")?.let {
781
782
  textBoxCustomizationBuilder.setCornerRadius(it)
782
783
  }
783
- getIntOrNull(textBoxCustomization, "textFontSize")?.let {
784
+ textBoxCustomization.getIntOrNull("textFontSize")?.let {
784
785
  textBoxCustomizationBuilder.setTextFontSize(it)
785
786
  }
786
787
 
787
788
  // Submit button
788
- getStringOrNull(submitButtonCustomization, "backgroundColor")?.let {
789
+ submitButtonCustomization?.getString("backgroundColor")?.let {
789
790
  submitButtonCustomizationBuilder.setBackgroundColor(it)
790
791
  }
791
- getIntOrNull(submitButtonCustomization, "borderRadius")?.let {
792
+ submitButtonCustomization.getIntOrNull("borderRadius")?.let {
792
793
  submitButtonCustomizationBuilder.setCornerRadius(it)
793
794
  }
794
- getStringOrNull(submitButtonCustomization, "textColor")?.let {
795
+ submitButtonCustomization?.getString("textColor")?.let {
795
796
  submitButtonCustomizationBuilder.setTextColor(it)
796
797
  }
797
- getIntOrNull(submitButtonCustomization, "textFontSize")?.let {
798
+ submitButtonCustomization.getIntOrNull("textFontSize")?.let {
798
799
  submitButtonCustomizationBuilder.setTextFontSize(it)
799
800
  }
800
801
 
801
802
  // Cancel button
802
- getStringOrNull(cancelButtonCustomization, "backgroundColor")?.let {
803
+ cancelButtonCustomization?.getString("backgroundColor")?.let {
803
804
  cancelButtonCustomizationBuilder.setBackgroundColor(it)
804
805
  }
805
- getIntOrNull(cancelButtonCustomization, "borderRadius")?.let {
806
+ cancelButtonCustomization.getIntOrNull("borderRadius")?.let {
806
807
  cancelButtonCustomizationBuilder.setCornerRadius(it)
807
808
  }
808
- getStringOrNull(cancelButtonCustomization, "textColor")?.let {
809
+ cancelButtonCustomization?.getString("textColor")?.let {
809
810
  cancelButtonCustomizationBuilder.setTextColor(it)
810
811
  }
811
- getIntOrNull(cancelButtonCustomization, "textFontSize")?.let {
812
+ cancelButtonCustomization.getIntOrNull("textFontSize")?.let {
812
813
  cancelButtonCustomizationBuilder.setTextFontSize(it)
813
814
  }
814
815
 
815
816
  // Continue button
816
- getStringOrNull(continueButtonCustomization, "backgroundColor")?.let {
817
+ continueButtonCustomization?.getString("backgroundColor")?.let {
817
818
  continueButtonCustomizationBuilder.setBackgroundColor(it)
818
819
  }
819
- getIntOrNull(continueButtonCustomization, "borderRadius")?.let {
820
+ continueButtonCustomization.getIntOrNull("borderRadius")?.let {
820
821
  continueButtonCustomizationBuilder.setCornerRadius(it)
821
822
  }
822
- getStringOrNull(continueButtonCustomization, "textColor")?.let {
823
+ continueButtonCustomization?.getString("textColor")?.let {
823
824
  continueButtonCustomizationBuilder.setTextColor(it)
824
825
  }
825
- getIntOrNull(continueButtonCustomization, "textFontSize")?.let {
826
+ continueButtonCustomization.getIntOrNull("textFontSize")?.let {
826
827
  continueButtonCustomizationBuilder.setTextFontSize(it)
827
828
  }
828
829
 
829
830
  // Next button
830
- getStringOrNull(nextButtonCustomization, "backgroundColor")?.let {
831
+ nextButtonCustomization?.getString("backgroundColor")?.let {
831
832
  nextButtonCustomizationBuilder.setBackgroundColor(it)
832
833
  }
833
- getIntOrNull(nextButtonCustomization, "borderRadius")?.let {
834
+ nextButtonCustomization.getIntOrNull("borderRadius")?.let {
834
835
  nextButtonCustomizationBuilder.setCornerRadius(it)
835
836
  }
836
- getStringOrNull(nextButtonCustomization, "textColor")?.let {
837
+ nextButtonCustomization?.getString("textColor")?.let {
837
838
  nextButtonCustomizationBuilder.setTextColor(it)
838
839
  }
839
- getIntOrNull(nextButtonCustomization, "textFontSize")?.let {
840
+ nextButtonCustomization.getIntOrNull("textFontSize")?.let {
840
841
  nextButtonCustomizationBuilder.setTextFontSize(it)
841
842
  }
842
843
 
843
844
  // Resend button
844
- getStringOrNull(resendButtonCustomization, "backgroundColor")?.let {
845
+ resendButtonCustomization?.getString("backgroundColor")?.let {
845
846
  resendButtonCustomizationBuilder.setBackgroundColor(it)
846
847
  }
847
- getIntOrNull(resendButtonCustomization, "borderRadius")?.let {
848
+ resendButtonCustomization.getIntOrNull("borderRadius")?.let {
848
849
  resendButtonCustomizationBuilder.setCornerRadius(it)
849
850
  }
850
- getStringOrNull(resendButtonCustomization, "textColor")?.let {
851
+ resendButtonCustomization?.getString("textColor")?.let {
851
852
  resendButtonCustomizationBuilder.setTextColor(it)
852
853
  }
853
- getIntOrNull(resendButtonCustomization, "textFontSize")?.let {
854
+ resendButtonCustomization.getIntOrNull("textFontSize")?.let {
854
855
  resendButtonCustomizationBuilder.setTextFontSize(it)
855
856
  }
856
857
 
@@ -876,13 +877,13 @@ fun mapToUICustomization(params: ReadableMap): PaymentAuthConfig.Stripe3ds2UiCus
876
877
  PaymentAuthConfig.Stripe3ds2UiCustomization.ButtonType.RESEND,
877
878
  )
878
879
 
879
- getStringOrNull(params, "accentColor")?.let { uiCustomization.setAccentColor(it) }
880
+ params.getString("accentColor")?.let { uiCustomization.setAccentColor(it) }
880
881
 
881
882
  return uiCustomization.build()
882
883
  }
883
884
 
884
885
  internal fun mapFromSetupIntentResult(setupIntent: SetupIntent): WritableMap {
885
- val map: WritableMap = WritableNativeMap()
886
+ val map: WritableMap = Arguments.createMap()
886
887
  val paymentMethodTypes: WritableArray = Arguments.createArray()
887
888
  map.putString("id", setupIntent.id)
888
889
  map.putString("status", mapIntentStatus(setupIntent.status))
@@ -899,7 +900,7 @@ internal fun mapFromSetupIntentResult(setupIntent: SetupIntent): WritableMap {
899
900
  map.putMap("nextAction", mapNextAction(setupIntent.nextActionType, setupIntent.nextActionData))
900
901
 
901
902
  setupIntent.lastSetupError?.let {
902
- val setupError: WritableMap = WritableNativeMap()
903
+ val setupError: WritableMap = Arguments.createMap()
903
904
  setupError.putString("code", it.code)
904
905
  setupError.putString("message", it.message)
905
906
  setupError.putString("type", mapFromSetupIntentLastErrorType(it.type))
@@ -936,79 +937,30 @@ fun mapToPaymentIntentFutureUsage(type: String?): ConfirmPaymentIntentParams.Set
936
937
  else -> null
937
938
  }
938
939
 
939
- fun toBundleObject(readableMap: ReadableMap?): Bundle {
940
- val result = Bundle()
941
- if (readableMap == null) {
942
- return result
943
- }
944
- val iterator = readableMap.keySetIterator()
945
- while (iterator.hasNextKey()) {
946
- val key = iterator.nextKey()
947
- when (readableMap.getType(key)) {
948
- ReadableType.Null -> result.putString(key, null)
949
- ReadableType.Boolean -> result.putBoolean(key, readableMap.getBoolean(key))
950
- ReadableType.Number ->
951
- try {
952
- val numAsInt = readableMap.getInt(key)
953
- val numAsDouble = readableMap.getDouble(key)
954
- if (numAsDouble - numAsInt != 0.0) {
955
- result.putDouble(key, numAsDouble)
956
- } else {
957
- result.putInt(key, numAsInt)
958
- }
959
- } catch (e: Exception) {
960
- Log.e("toBundleException", "Failed to add number to bundle. Failed on: $key.")
961
- }
962
- ReadableType.String -> result.putString(key, readableMap.getString(key))
963
- ReadableType.Map -> result.putBundle(key, toBundleObject(readableMap.getMap(key)))
964
- ReadableType.Array -> {
965
- val list = readableMap.getArray(key)?.toArrayList()
966
- if (list == null) {
967
- result.putString(key, null)
968
- } else if (list.isEmpty()) {
969
- result.putStringArrayList(key, ArrayList())
970
- } else {
971
- when (list.first()) {
972
- is String -> result.putStringArrayList(key, list as java.util.ArrayList<String>)
973
- is Int -> result.putIntegerArrayList(key, list as java.util.ArrayList<Int>)
974
- else ->
975
- Log.e(
976
- "toBundleException",
977
- "Cannot put arrays of objects into bundles. Failed on: $key.",
978
- )
979
- }
980
- }
981
- }
982
- else -> Log.e("toBundleException", "Could not convert object with key: $key.")
983
- }
984
- }
985
- return result
986
- }
987
-
988
940
  internal fun mapFromShippingContact(googlePayResult: GooglePayResult): WritableMap {
989
- val map = WritableNativeMap()
941
+ val map = Arguments.createMap()
990
942
  map.putString("emailAddress", googlePayResult.email)
991
- val name = WritableNativeMap()
943
+ val name = Arguments.createMap()
992
944
  googlePayResult.name
993
945
  name.putString("givenName", googlePayResult.shippingInformation?.name)
994
946
  map.putMap("name", name)
995
947
  googlePayResult.shippingInformation?.phone?.let { map.putString("phoneNumber", it) }
996
948
  ?: run { map.putString("phoneNumber", googlePayResult.phoneNumber) }
997
- val postalAddress = WritableNativeMap()
949
+ val postalAddress = Arguments.createMap()
998
950
  postalAddress.putString("city", googlePayResult.shippingInformation?.address?.city)
999
951
  postalAddress.putString("country", googlePayResult.shippingInformation?.address?.country)
1000
952
  postalAddress.putString("postalCode", googlePayResult.shippingInformation?.address?.postalCode)
1001
953
  postalAddress.putString("state", googlePayResult.shippingInformation?.address?.state)
1002
954
  val line1: String? = googlePayResult.shippingInformation?.address?.line1
1003
955
  val line2: String? = googlePayResult.shippingInformation?.address?.line2
1004
- val street = (if (line1 != null) "$line1" else "") + (if (line2 != null) "\n$line2" else "")
956
+ val street = (line1 ?: "") + (if (line2 != null) "\n$line2" else "")
1005
957
  postalAddress.putString("street", street)
1006
958
  postalAddress.putString("isoCountryCode", googlePayResult.shippingInformation?.address?.country)
1007
959
  map.putMap("postalAddress", postalAddress)
1008
960
  return map
1009
961
  }
1010
962
 
1011
- internal fun mapToPreferredNetworks(networksAsInts: ArrayList<Int>?): List<CardBrand> {
963
+ internal fun mapToPreferredNetworks(networksAsInts: List<Int>?): List<CardBrand> {
1012
964
  if (networksAsInts == null) {
1013
965
  return emptyList()
1014
966
  }
@@ -1048,6 +1000,7 @@ private fun List<Any?>.toWritableArray(): WritableArray {
1048
1000
  val writableArray = Arguments.createArray()
1049
1001
 
1050
1002
  forEach { value ->
1003
+ @Suppress("UNCHECKED_CAST")
1051
1004
  when (value) {
1052
1005
  null -> writableArray.pushNull()
1053
1006
  is Boolean -> writableArray.pushBoolean(value)
@@ -1055,7 +1008,7 @@ private fun List<Any?>.toWritableArray(): WritableArray {
1055
1008
  is Double -> writableArray.pushDouble(value)
1056
1009
  is String -> writableArray.pushString(value)
1057
1010
  is Map<*, *> -> writableArray.pushMap((value as Map<String, Any?>).toReadableMap())
1058
- is List<*> -> writableArray.pushArray((value as List<Any?>).toWritableArray())
1011
+ is List<*> -> writableArray.pushArray(value.toWritableArray())
1059
1012
  else -> writableArray.pushString(value.toString())
1060
1013
  }
1061
1014
  }
@@ -1067,6 +1020,7 @@ private fun Map<String, Any?>.toReadableMap(): ReadableMap {
1067
1020
  val writableMap = Arguments.createMap()
1068
1021
 
1069
1022
  forEach { (key, value) ->
1023
+ @Suppress("UNCHECKED_CAST")
1070
1024
  when (value) {
1071
1025
  null -> writableMap.putNull(key)
1072
1026
  is Boolean -> writableMap.putBoolean(key, value)
@@ -1074,7 +1028,7 @@ private fun Map<String, Any?>.toReadableMap(): ReadableMap {
1074
1028
  is Double -> writableMap.putDouble(key, value)
1075
1029
  is String -> writableMap.putString(key, value)
1076
1030
  is Map<*, *> -> writableMap.putMap(key, (value as Map<String, Any?>).toReadableMap())
1077
- is List<*> -> writableMap.putArray(key, (value as List<Any?>).toWritableArray())
1031
+ is List<*> -> writableMap.putArray(key, value.toWritableArray())
1078
1032
  else -> writableMap.putString(key, value.toString())
1079
1033
  }
1080
1034
  }
@@ -1084,34 +1038,31 @@ private fun Map<String, Any?>.toReadableMap(): ReadableMap {
1084
1038
 
1085
1039
  @OptIn(ExperimentalCustomPaymentMethodsApi::class)
1086
1040
  @SuppressLint("RestrictedApi")
1087
- internal fun parseCustomPaymentMethods(customPaymentMethodConfig: Bundle?): List<PaymentSheet.CustomPaymentMethod> {
1041
+ internal fun parseCustomPaymentMethods(customPaymentMethodConfig: ReadableMap?): List<PaymentSheet.CustomPaymentMethod> {
1088
1042
  if (customPaymentMethodConfig == null) {
1089
1043
  return emptyList()
1090
1044
  }
1091
1045
 
1092
- val configHashMap = customPaymentMethodConfig.getSerializable("customPaymentMethodConfigurationReadableMap") as? HashMap<String, Any>
1093
- if (configHashMap != null) {
1094
- val customPaymentMethods = configHashMap["customPaymentMethods"] as? List<HashMap<String, Any>>
1095
- if (customPaymentMethods != null) {
1096
- val result = mutableListOf<PaymentSheet.CustomPaymentMethod>()
1097
-
1098
- for (customPaymentMethodMap in customPaymentMethods) {
1099
- val id = customPaymentMethodMap["id"] as? String
1100
- if (id != null) {
1101
- val subtitle = customPaymentMethodMap["subtitle"] as? String
1102
- val disableBillingDetailCollection = customPaymentMethodMap["disableBillingDetailCollection"] as? Boolean ?: false
1103
- result.add(
1104
- PaymentSheet.CustomPaymentMethod(
1105
- id = id,
1106
- subtitle = subtitle,
1107
- disableBillingDetailCollection = disableBillingDetailCollection,
1108
- ),
1109
- )
1110
- }
1046
+ val customPaymentMethods = customPaymentMethodConfig.getArray("customPaymentMethods")
1047
+ if (customPaymentMethods != null) {
1048
+ val result = mutableListOf<PaymentSheet.CustomPaymentMethod>()
1049
+
1050
+ customPaymentMethods.forEachMap { customPaymentMethodMap ->
1051
+ val id = customPaymentMethodMap.getString("id")
1052
+ if (id != null) {
1053
+ val subtitle = customPaymentMethodMap.getString("subtitle")
1054
+ val disableBillingDetailCollection = customPaymentMethodMap.getBooleanOr("disableBillingDetailCollection", false)
1055
+ result.add(
1056
+ PaymentSheet.CustomPaymentMethod(
1057
+ id = id,
1058
+ subtitle = subtitle,
1059
+ disableBillingDetailCollection = disableBillingDetailCollection,
1060
+ ),
1061
+ )
1111
1062
  }
1112
-
1113
- return result
1114
1063
  }
1064
+
1065
+ return result
1115
1066
  }
1116
1067
 
1117
1068
  return emptyList()
@@ -1122,10 +1073,10 @@ internal fun mapFromCustomPaymentMethod(
1122
1073
  customPaymentMethod: PaymentSheet.CustomPaymentMethod,
1123
1074
  billingDetails: PaymentMethod.BillingDetails,
1124
1075
  ): WritableMap =
1125
- WritableNativeMap().apply {
1076
+ Arguments.createMap().apply {
1126
1077
  putMap(
1127
1078
  "customPaymentMethod",
1128
- WritableNativeMap().apply {
1079
+ Arguments.createMap().apply {
1129
1080
  putString("id", customPaymentMethod.id)
1130
1081
  },
1131
1082
  )
@@ -1134,7 +1085,7 @@ internal fun mapFromCustomPaymentMethod(
1134
1085
 
1135
1086
  @SuppressLint("RestrictedApi")
1136
1087
  internal fun mapFromConfirmationToken(confirmationToken: ConfirmationToken): WritableMap {
1137
- val token: WritableMap = WritableNativeMap()
1088
+ val token: WritableMap = Arguments.createMap()
1138
1089
 
1139
1090
  token.putString("id", confirmationToken.id)
1140
1091
  token.putDouble("created", confirmationToken.created.toDouble())
@@ -1147,7 +1098,7 @@ internal fun mapFromConfirmationToken(confirmationToken: ConfirmationToken): Wri
1147
1098
 
1148
1099
  // PaymentMethodPreview
1149
1100
  confirmationToken.paymentMethodPreview?.let { preview ->
1150
- val paymentMethodPreview = WritableNativeMap()
1101
+ val paymentMethodPreview = Arguments.createMap()
1151
1102
  paymentMethodPreview.putString("type", mapPaymentMethodType(preview.type))
1152
1103
  paymentMethodPreview.putMap("billingDetails", mapFromBillingDetails(preview.billingDetails))
1153
1104
  paymentMethodPreview.putString("allowRedisplay", mapFromAllowRedisplay(preview.allowRedisplay))
@@ -1159,12 +1110,12 @@ internal fun mapFromConfirmationToken(confirmationToken: ConfirmationToken): Wri
1159
1110
 
1160
1111
  // Shipping details
1161
1112
  confirmationToken.shipping?.let { shippingDetails ->
1162
- val shipping = WritableNativeMap()
1113
+ val shipping = Arguments.createMap()
1163
1114
  shipping.putString("name", shippingDetails.name)
1164
1115
  shipping.putString("phone", shippingDetails.phone)
1165
1116
 
1166
1117
  shippingDetails.address?.let { address ->
1167
- val addressMap = WritableNativeMap()
1118
+ val addressMap = Arguments.createMap()
1168
1119
  addressMap.putString("city", address.city)
1169
1120
  addressMap.putString("country", address.country)
1170
1121
  addressMap.putString("line1", address.line1)
@@ -1173,7 +1124,7 @@ internal fun mapFromConfirmationToken(confirmationToken: ConfirmationToken): Wri
1173
1124
  addressMap.putString("state", address.state)
1174
1125
  shipping.putMap("address", addressMap)
1175
1126
  } ?: run {
1176
- shipping.putMap("address", WritableNativeMap())
1127
+ shipping.putMap("address", Arguments.createMap())
1177
1128
  }
1178
1129
 
1179
1130
  token.putMap("shipping", shipping)
@@ -1201,3 +1152,45 @@ private fun mapFromAllowRedisplay(allowRedisplay: PaymentMethod.AllowRedisplay?)
1201
1152
  PaymentMethod.AllowRedisplay.UNSPECIFIED -> "unspecified"
1202
1153
  null -> null
1203
1154
  }
1155
+
1156
+ fun readableMapOf(vararg pairs: Pair<String, Any?>): ReadableMap =
1157
+ Arguments.createMap().apply {
1158
+ for ((key, value) in pairs) {
1159
+ when (value) {
1160
+ null -> putNull(key)
1161
+ is String -> putString(key, value)
1162
+ is Boolean -> putBoolean(key, value)
1163
+ is Double -> putDouble(key, value)
1164
+ is Float -> putDouble(key, value.toDouble())
1165
+ is Int -> putInt(key, value)
1166
+ is Long -> putLong(key, value)
1167
+ is ReadableMap -> putMap(key, value)
1168
+ is ReadableArray -> putArray(key, value)
1169
+ else -> {
1170
+ val valueType = value.javaClass.canonicalName
1171
+ throw IllegalArgumentException("Illegal value type $valueType for key \"$key\"")
1172
+ }
1173
+ }
1174
+ }
1175
+ }
1176
+
1177
+ fun readableArrayOf(vararg elements: Any?): ReadableArray =
1178
+ Arguments.createArray().apply {
1179
+ for (element in elements) {
1180
+ when (element) {
1181
+ null -> pushNull()
1182
+ is String -> pushString(element)
1183
+ is Boolean -> pushBoolean(element)
1184
+ is Double -> pushDouble(element)
1185
+ is Float -> pushDouble(element.toDouble())
1186
+ is Int -> pushInt(element)
1187
+ is Long -> pushInt(element.toInt())
1188
+ is ReadableMap -> pushMap(element)
1189
+ is ReadableArray -> pushArray(element)
1190
+ else -> {
1191
+ val valueType = element.javaClass.canonicalName
1192
+ throw IllegalArgumentException("Illegal value type $valueType for array element")
1193
+ }
1194
+ }
1195
+ }
1196
+ }