@stripe/stripe-react-native 0.20.0 → 0.22.0

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 (391) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/android/build.gradle +1 -0
  3. package/android/gradle.properties +1 -1
  4. package/android/proguard-rules.txt +7 -0
  5. package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +4 -0
  6. package/android/src/main/java/com/reactnativestripesdk/CollectBankAccountLauncherFragment.kt +1 -1
  7. package/android/src/main/java/com/reactnativestripesdk/FinancialConnectionsSheetFragment.kt +4 -1
  8. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonManager.kt +5 -0
  9. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +46 -8
  10. package/android/src/main/java/com/reactnativestripesdk/GooglePayFragment.kt +1 -1
  11. package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherFragment.kt +132 -0
  12. package/android/src/main/java/com/reactnativestripesdk/GooglePayRequestHelper.kt +144 -0
  13. package/android/src/main/java/com/reactnativestripesdk/PaymentLauncherFragment.kt +1 -1
  14. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetAppearance.kt +10 -9
  15. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetFragment.kt +8 -3
  16. package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +142 -21
  17. package/android/src/main/java/com/reactnativestripesdk/StripeSdkPackage.kt +3 -1
  18. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherFragment.kt +111 -0
  19. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetEvent.kt +28 -0
  20. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetView.kt +178 -0
  21. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetViewManager.kt +67 -0
  22. package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +5 -0
  23. package/android/src/main/java/com/reactnativestripesdk/utils/Mappers.kt +1 -1
  24. package/android/src/main/res/drawable/book_with_googlepay_button_content.xml +14 -0
  25. package/android/src/main/res/drawable/buy_with_googlepay_button_content.xml +14 -0
  26. package/android/src/main/res/drawable/checkout_with_googlepay_button_content.xml +14 -0
  27. package/android/src/main/res/drawable/donate_with_googlepay_button_content.xml +14 -0
  28. package/android/src/main/res/drawable/googlepay_button_background_shape.xml +11 -0
  29. package/android/src/main/res/drawable/googlepay_mark_background.xml +12 -0
  30. package/android/src/main/res/drawable/googlepay_mark_content.xml +27 -0
  31. package/android/src/main/res/drawable/order_with_googlepay_button_content.xml +14 -0
  32. package/android/src/main/res/drawable/pay_with_googlepay_button_content.xml +6 -6
  33. package/android/src/main/res/drawable/subscribe_with_googlepay_button_content.xml +14 -0
  34. package/android/src/main/res/drawable-ar/book_with_googlepay_button_content.xml +14 -0
  35. package/android/src/main/res/drawable-ar/buy_with_googlepay_button_content.xml +14 -0
  36. package/android/src/main/res/drawable-ar/checkout_with_googlepay_button_content.xml +14 -0
  37. package/android/src/main/res/drawable-ar/donate_with_googlepay_button_content.xml +14 -0
  38. package/android/src/main/res/drawable-ar/order_with_googlepay_button_content.xml +14 -0
  39. package/android/src/main/res/drawable-ar/pay_with_googlepay_button_content.xml +6 -6
  40. package/android/src/main/res/drawable-ar/subscribe_with_googlepay_button_content.xml +14 -0
  41. package/android/src/main/res/drawable-bg/book_with_googlepay_button_content.xml +14 -0
  42. package/android/src/main/res/drawable-bg/buy_with_googlepay_button_content.xml +14 -0
  43. package/android/src/main/res/drawable-bg/checkout_with_googlepay_button_content.xml +14 -0
  44. package/android/src/main/res/drawable-bg/donate_with_googlepay_button_content.xml +14 -0
  45. package/android/src/main/res/drawable-bg/order_with_googlepay_button_content.xml +14 -0
  46. package/android/src/main/res/drawable-bg/pay_with_googlepay_button_content.xml +4 -4
  47. package/android/src/main/res/drawable-bg/subscribe_with_googlepay_button_content.xml +14 -0
  48. package/android/src/main/res/drawable-ca/book_with_googlepay_button_content.xml +14 -0
  49. package/android/src/main/res/drawable-ca/buy_with_googlepay_button_content.xml +14 -0
  50. package/android/src/main/res/drawable-ca/checkout_with_googlepay_button_content.xml +14 -0
  51. package/android/src/main/res/drawable-ca/donate_with_googlepay_button_content.xml +14 -0
  52. package/android/src/main/res/drawable-ca/order_with_googlepay_button_content.xml +14 -0
  53. package/android/src/main/res/drawable-ca/pay_with_googlepay_button_content.xml +6 -6
  54. package/android/src/main/res/drawable-ca/subscribe_with_googlepay_button_content.xml +14 -0
  55. package/android/src/main/res/drawable-cs/book_with_googlepay_button_content.xml +14 -0
  56. package/android/src/main/res/drawable-cs/buy_with_googlepay_button_content.xml +14 -0
  57. package/android/src/main/res/drawable-cs/checkout_with_googlepay_button_content.xml +14 -0
  58. package/android/src/main/res/drawable-cs/donate_with_googlepay_button_content.xml +14 -0
  59. package/android/src/main/res/drawable-cs/order_with_googlepay_button_content.xml +14 -0
  60. package/android/src/main/res/drawable-cs/pay_with_googlepay_button_content.xml +6 -6
  61. package/android/src/main/res/drawable-cs/subscribe_with_googlepay_button_content.xml +14 -0
  62. package/android/src/main/res/drawable-da/book_with_googlepay_button_content.xml +14 -0
  63. package/android/src/main/res/drawable-da/buy_with_googlepay_button_content.xml +14 -0
  64. package/android/src/main/res/drawable-da/checkout_with_googlepay_button_content.xml +14 -0
  65. package/android/src/main/res/drawable-da/donate_with_googlepay_button_content.xml +14 -0
  66. package/android/src/main/res/drawable-da/order_with_googlepay_button_content.xml +14 -0
  67. package/android/src/main/res/drawable-da/pay_with_googlepay_button_content.xml +6 -6
  68. package/android/src/main/res/drawable-da/subscribe_with_googlepay_button_content.xml +14 -0
  69. package/android/src/main/res/drawable-de/book_with_googlepay_button_content.xml +15 -0
  70. package/android/src/main/res/drawable-de/buy_with_googlepay_button_content.xml +15 -0
  71. package/android/src/main/res/drawable-de/checkout_with_googlepay_button_content.xml +15 -0
  72. package/android/src/main/res/drawable-de/donate_with_googlepay_button_content.xml +15 -0
  73. package/android/src/main/res/drawable-de/order_with_googlepay_button_content.xml +15 -0
  74. package/android/src/main/res/drawable-de/pay_with_googlepay_button_content.xml +7 -7
  75. package/android/src/main/res/drawable-de/subscribe_with_googlepay_button_content.xml +15 -0
  76. package/android/src/main/res/drawable-el/book_with_googlepay_button_content.xml +14 -0
  77. package/android/src/main/res/drawable-el/buy_with_googlepay_button_content.xml +14 -0
  78. package/android/src/main/res/drawable-el/checkout_with_googlepay_button_content.xml +14 -0
  79. package/android/src/main/res/drawable-el/donate_with_googlepay_button_content.xml +14 -0
  80. package/android/src/main/res/drawable-el/order_with_googlepay_button_content.xml +14 -0
  81. package/android/src/main/res/drawable-el/pay_with_googlepay_button_content.xml +4 -4
  82. package/android/src/main/res/drawable-el/subscribe_with_googlepay_button_content.xml +14 -0
  83. package/android/src/main/res/drawable-et/book_with_googlepay_button_content.xml +15 -0
  84. package/android/src/main/res/drawable-et/buy_with_googlepay_button_content.xml +15 -0
  85. package/android/src/main/res/drawable-et/checkout_with_googlepay_button_content.xml +15 -0
  86. package/android/src/main/res/drawable-et/donate_with_googlepay_button_content.xml +15 -0
  87. package/android/src/main/res/drawable-et/order_with_googlepay_button_content.xml +15 -0
  88. package/android/src/main/res/drawable-et/pay_with_googlepay_button_content.xml +8 -8
  89. package/android/src/main/res/drawable-et/subscribe_with_googlepay_button_content.xml +15 -0
  90. package/android/src/main/res/drawable-fi/book_with_googlepay_button_content.xml +15 -0
  91. package/android/src/main/res/drawable-fi/buy_with_googlepay_button_content.xml +15 -0
  92. package/android/src/main/res/drawable-fi/checkout_with_googlepay_button_content.xml +15 -0
  93. package/android/src/main/res/drawable-fi/donate_with_googlepay_button_content.xml +15 -0
  94. package/android/src/main/res/drawable-fi/order_with_googlepay_button_content.xml +15 -0
  95. package/android/src/main/res/drawable-fi/pay_with_googlepay_button_content.xml +8 -8
  96. package/android/src/main/res/drawable-fi/subscribe_with_googlepay_button_content.xml +15 -0
  97. package/android/src/main/res/drawable-fr/book_with_googlepay_button_content.xml +14 -0
  98. package/android/src/main/res/drawable-fr/buy_with_googlepay_button_content.xml +14 -0
  99. package/android/src/main/res/drawable-fr/checkout_with_googlepay_button_content.xml +14 -0
  100. package/android/src/main/res/drawable-fr/donate_with_googlepay_button_content.xml +14 -0
  101. package/android/src/main/res/drawable-fr/order_with_googlepay_button_content.xml +14 -0
  102. package/android/src/main/res/drawable-fr/pay_with_googlepay_button_content.xml +5 -5
  103. package/android/src/main/res/drawable-fr/subscribe_with_googlepay_button_content.xml +14 -0
  104. package/android/src/main/res/drawable-hr/book_with_googlepay_button_content.xml +14 -0
  105. package/android/src/main/res/drawable-hr/buy_with_googlepay_button_content.xml +14 -0
  106. package/android/src/main/res/drawable-hr/checkout_with_googlepay_button_content.xml +14 -0
  107. package/android/src/main/res/drawable-hr/donate_with_googlepay_button_content.xml +14 -0
  108. package/android/src/main/res/drawable-hr/order_with_googlepay_button_content.xml +14 -0
  109. package/android/src/main/res/drawable-hr/pay_with_googlepay_button_content.xml +4 -4
  110. package/android/src/main/res/drawable-hr/subscribe_with_googlepay_button_content.xml +14 -0
  111. package/android/src/main/res/drawable-id/book_with_googlepay_button_content.xml +14 -0
  112. package/android/src/main/res/drawable-id/buy_with_googlepay_button_content.xml +14 -0
  113. package/android/src/main/res/drawable-id/checkout_with_googlepay_button_content.xml +14 -0
  114. package/android/src/main/res/drawable-id/donate_with_googlepay_button_content.xml +14 -0
  115. package/android/src/main/res/drawable-id/order_with_googlepay_button_content.xml +14 -0
  116. package/android/src/main/res/drawable-id/pay_with_googlepay_button_content.xml +4 -4
  117. package/android/src/main/res/drawable-id/subscribe_with_googlepay_button_content.xml +14 -0
  118. package/android/src/main/res/drawable-it/book_with_googlepay_button_content.xml +14 -0
  119. package/android/src/main/res/drawable-it/buy_with_googlepay_button_content.xml +14 -0
  120. package/android/src/main/res/drawable-it/checkout_with_googlepay_button_content.xml +14 -0
  121. package/android/src/main/res/drawable-it/donate_with_googlepay_button_content.xml +14 -0
  122. package/android/src/main/res/drawable-it/order_with_googlepay_button_content.xml +14 -0
  123. package/android/src/main/res/drawable-it/pay_with_googlepay_button_content.xml +6 -6
  124. package/android/src/main/res/drawable-it/subscribe_with_googlepay_button_content.xml +14 -0
  125. package/android/src/main/res/drawable-ja/book_with_googlepay_button_content.xml +14 -0
  126. package/android/src/main/res/drawable-ja/buy_with_googlepay_button_content.xml +14 -0
  127. package/android/src/main/res/drawable-ja/checkout_with_googlepay_button_content.xml +14 -0
  128. package/android/src/main/res/drawable-ja/donate_with_googlepay_button_content.xml +14 -0
  129. package/android/src/main/res/drawable-ja/order_with_googlepay_button_content.xml +14 -0
  130. package/android/src/main/res/drawable-ja/pay_with_googlepay_button_content.xml +5 -5
  131. package/android/src/main/res/drawable-ja/subscribe_with_googlepay_button_content.xml +14 -0
  132. package/android/src/main/res/drawable-ko/book_with_googlepay_button_content.xml +14 -0
  133. package/android/src/main/res/drawable-ko/buy_with_googlepay_button_content.xml +14 -0
  134. package/android/src/main/res/drawable-ko/checkout_with_googlepay_button_content.xml +14 -0
  135. package/android/src/main/res/drawable-ko/donate_with_googlepay_button_content.xml +14 -0
  136. package/android/src/main/res/drawable-ko/order_with_googlepay_button_content.xml +14 -0
  137. package/android/src/main/res/drawable-ko/pay_with_googlepay_button_content.xml +7 -7
  138. package/android/src/main/res/drawable-ko/subscribe_with_googlepay_button_content.xml +14 -0
  139. package/android/src/main/res/drawable-ms/book_with_googlepay_button_content.xml +14 -0
  140. package/android/src/main/res/drawable-ms/buy_with_googlepay_button_content.xml +14 -0
  141. package/android/src/main/res/drawable-ms/checkout_with_googlepay_button_content.xml +14 -0
  142. package/android/src/main/res/drawable-ms/donate_with_googlepay_button_content.xml +14 -0
  143. package/android/src/main/res/drawable-ms/order_with_googlepay_button_content.xml +14 -0
  144. package/android/src/main/res/drawable-ms/pay_with_googlepay_button_content.xml +4 -4
  145. package/android/src/main/res/drawable-ms/subscribe_with_googlepay_button_content.xml +14 -0
  146. package/android/src/main/res/drawable-nl/book_with_googlepay_button_content.xml +14 -0
  147. package/android/src/main/res/drawable-nl/buy_with_googlepay_button_content.xml +14 -0
  148. package/android/src/main/res/drawable-nl/checkout_with_googlepay_button_content.xml +14 -0
  149. package/android/src/main/res/drawable-nl/donate_with_googlepay_button_content.xml +14 -0
  150. package/android/src/main/res/drawable-nl/order_with_googlepay_button_content.xml +14 -0
  151. package/android/src/main/res/drawable-nl/pay_with_googlepay_button_content.xml +4 -4
  152. package/android/src/main/res/drawable-nl/subscribe_with_googlepay_button_content.xml +14 -0
  153. package/android/src/main/res/drawable-no/book_with_googlepay_button_content.xml +14 -0
  154. package/android/src/main/res/drawable-no/buy_with_googlepay_button_content.xml +14 -0
  155. package/android/src/main/res/drawable-no/checkout_with_googlepay_button_content.xml +14 -0
  156. package/android/src/main/res/drawable-no/donate_with_googlepay_button_content.xml +14 -0
  157. package/android/src/main/res/drawable-no/order_with_googlepay_button_content.xml +14 -0
  158. package/android/src/main/res/drawable-no/pay_with_googlepay_button_content.xml +6 -6
  159. package/android/src/main/res/drawable-no/subscribe_with_googlepay_button_content.xml +14 -0
  160. package/android/src/main/res/drawable-pl/book_with_googlepay_button_content.xml +14 -0
  161. package/android/src/main/res/drawable-pl/buy_with_googlepay_button_content.xml +14 -0
  162. package/android/src/main/res/drawable-pl/checkout_with_googlepay_button_content.xml +14 -0
  163. package/android/src/main/res/drawable-pl/donate_with_googlepay_button_content.xml +14 -0
  164. package/android/src/main/res/drawable-pl/order_with_googlepay_button_content.xml +14 -0
  165. package/android/src/main/res/drawable-pl/pay_with_googlepay_button_content.xml +7 -7
  166. package/android/src/main/res/drawable-pl/subscribe_with_googlepay_button_content.xml +14 -0
  167. package/android/src/main/res/drawable-ru/book_with_googlepay_button_content.xml +14 -0
  168. package/android/src/main/res/drawable-ru/buy_with_googlepay_button_content.xml +14 -0
  169. package/android/src/main/res/drawable-ru/checkout_with_googlepay_button_content.xml +14 -0
  170. package/android/src/main/res/drawable-ru/donate_with_googlepay_button_content.xml +14 -0
  171. package/android/src/main/res/drawable-ru/order_with_googlepay_button_content.xml +14 -0
  172. package/android/src/main/res/drawable-ru/pay_with_googlepay_button_content.xml +7 -7
  173. package/android/src/main/res/drawable-ru/subscribe_with_googlepay_button_content.xml +14 -0
  174. package/android/src/main/res/drawable-sk/book_with_googlepay_button_content.xml +14 -0
  175. package/android/src/main/res/drawable-sk/buy_with_googlepay_button_content.xml +14 -0
  176. package/android/src/main/res/drawable-sk/checkout_with_googlepay_button_content.xml +14 -0
  177. package/android/src/main/res/drawable-sk/donate_with_googlepay_button_content.xml +14 -0
  178. package/android/src/main/res/drawable-sk/order_with_googlepay_button_content.xml +14 -0
  179. package/android/src/main/res/drawable-sk/pay_with_googlepay_button_content.xml +4 -4
  180. package/android/src/main/res/drawable-sk/subscribe_with_googlepay_button_content.xml +14 -0
  181. package/android/src/main/res/drawable-sl/book_with_googlepay_button_content.xml +14 -0
  182. package/android/src/main/res/drawable-sl/buy_with_googlepay_button_content.xml +14 -0
  183. package/android/src/main/res/drawable-sl/checkout_with_googlepay_button_content.xml +14 -0
  184. package/android/src/main/res/drawable-sl/donate_with_googlepay_button_content.xml +14 -0
  185. package/android/src/main/res/drawable-sl/order_with_googlepay_button_content.xml +14 -0
  186. package/android/src/main/res/drawable-sl/pay_with_googlepay_button_content.xml +4 -4
  187. package/android/src/main/res/drawable-sl/subscribe_with_googlepay_button_content.xml +14 -0
  188. package/android/src/main/res/drawable-sr/book_with_googlepay_button_content.xml +14 -0
  189. package/android/src/main/res/drawable-sr/buy_with_googlepay_button_content.xml +14 -0
  190. package/android/src/main/res/drawable-sr/checkout_with_googlepay_button_content.xml +14 -0
  191. package/android/src/main/res/drawable-sr/donate_with_googlepay_button_content.xml +14 -0
  192. package/android/src/main/res/drawable-sr/order_with_googlepay_button_content.xml +14 -0
  193. package/android/src/main/res/drawable-sr/pay_with_googlepay_button_content.xml +7 -7
  194. package/android/src/main/res/drawable-sr/subscribe_with_googlepay_button_content.xml +14 -0
  195. package/android/src/main/res/drawable-sv/book_with_googlepay_button_content.xml +14 -0
  196. package/android/src/main/res/drawable-sv/buy_with_googlepay_button_content.xml +14 -0
  197. package/android/src/main/res/drawable-sv/checkout_with_googlepay_button_content.xml +14 -0
  198. package/android/src/main/res/drawable-sv/donate_with_googlepay_button_content.xml +14 -0
  199. package/android/src/main/res/drawable-sv/order_with_googlepay_button_content.xml +14 -0
  200. package/android/src/main/res/drawable-sv/pay_with_googlepay_button_content.xml +4 -4
  201. package/android/src/main/res/drawable-sv/subscribe_with_googlepay_button_content.xml +14 -0
  202. package/android/src/main/res/drawable-th/book_with_googlepay_button_content.xml +14 -0
  203. package/android/src/main/res/drawable-th/buy_with_googlepay_button_content.xml +14 -0
  204. package/android/src/main/res/drawable-th/checkout_with_googlepay_button_content.xml +14 -0
  205. package/android/src/main/res/drawable-th/donate_with_googlepay_button_content.xml +14 -0
  206. package/android/src/main/res/drawable-th/order_with_googlepay_button_content.xml +14 -0
  207. package/android/src/main/res/drawable-th/pay_with_googlepay_button_content.xml +6 -6
  208. package/android/src/main/res/drawable-th/subscribe_with_googlepay_button_content.xml +14 -0
  209. package/android/src/main/res/drawable-tr/book_with_googlepay_button_content.xml +14 -0
  210. package/android/src/main/res/drawable-tr/buy_with_googlepay_button_content.xml +14 -0
  211. package/android/src/main/res/drawable-tr/checkout_with_googlepay_button_content.xml +14 -0
  212. package/android/src/main/res/drawable-tr/donate_with_googlepay_button_content.xml +14 -0
  213. package/android/src/main/res/drawable-tr/order_with_googlepay_button_content.xml +14 -0
  214. package/android/src/main/res/drawable-tr/pay_with_googlepay_button_content.xml +7 -7
  215. package/android/src/main/res/drawable-tr/subscribe_with_googlepay_button_content.xml +14 -0
  216. package/android/src/main/res/drawable-uk/book_with_googlepay_button_content.xml +14 -0
  217. package/android/src/main/res/drawable-uk/buy_with_googlepay_button_content.xml +14 -0
  218. package/android/src/main/res/drawable-uk/checkout_with_googlepay_button_content.xml +14 -0
  219. package/android/src/main/res/drawable-uk/donate_with_googlepay_button_content.xml +14 -0
  220. package/android/src/main/res/drawable-uk/order_with_googlepay_button_content.xml +14 -0
  221. package/android/src/main/res/drawable-uk/pay_with_googlepay_button_content.xml +5 -5
  222. package/android/src/main/res/drawable-uk/subscribe_with_googlepay_button_content.xml +14 -0
  223. package/android/src/main/res/layout/book_with_googlepay_button.xml +20 -0
  224. package/android/src/main/res/layout/buy_with_googlepay_button.xml +20 -0
  225. package/android/src/main/res/layout/checkout_with_googlepay_button.xml +20 -0
  226. package/android/src/main/res/layout/donate_with_googlepay_button.xml +20 -0
  227. package/android/src/main/res/layout/googlepay_mark_button.xml +18 -0
  228. package/android/src/main/res/layout/order_with_googlepay_button.xml +20 -0
  229. package/android/src/main/res/layout/pay_with_googlepay_button.xml +10 -24
  230. package/android/src/main/res/layout/plain_googlepay_button.xml +17 -0
  231. package/android/src/main/res/layout/subscribe_with_googlepay_button.xml +20 -0
  232. package/android/src/main/res/values/googlepay_strings.xml +3 -2
  233. package/ios/AddressSheet/AddressSheetUtils.swift +98 -0
  234. package/ios/AddressSheet/AddressSheetView.swift +131 -0
  235. package/ios/AddressSheet/AddressSheetViewManager.m +25 -0
  236. package/ios/AddressSheet/AddressSheetViewManager.swift +19 -0
  237. package/ios/ApplePayButtonManager.m +5 -0
  238. package/ios/ApplePayButtonManager.swift +3 -1
  239. package/ios/ApplePayButtonView.swift +21 -0
  240. package/ios/ApplePayUtils.swift +187 -0
  241. package/ios/ApplePayViewController.swift +279 -0
  242. package/ios/PaymentPassFinder.swift +61 -0
  243. package/ios/PaymentSheetAppearance.swift +24 -23
  244. package/ios/{pushprovisioning → PushProvisioning}/AddToWalletButtonManager.m +0 -0
  245. package/ios/{pushprovisioning → PushProvisioning}/AddToWalletButtonManager.swift +0 -0
  246. package/ios/{pushprovisioning → PushProvisioning}/AddToWalletButtonView.swift +10 -10
  247. package/ios/PushProvisioning/PushProvisioningUtils.swift +87 -0
  248. package/ios/StripeSdk.m +29 -0
  249. package/ios/StripeSdk.swift +200 -130
  250. package/ios/Tests/AddressSheetUtilsTests.swift +273 -0
  251. package/ios/Tests/PushProvisioningTests.swift +14 -11
  252. package/jest/mock.js +44 -0
  253. package/lib/commonjs/NativeStripeSdk.js.map +1 -1
  254. package/lib/commonjs/components/AddressSheet.js +2 -0
  255. package/lib/commonjs/components/AddressSheet.js.map +1 -0
  256. package/lib/commonjs/components/PlatformPayButton.js +2 -0
  257. package/lib/commonjs/components/PlatformPayButton.js.map +1 -0
  258. package/lib/commonjs/functions.js +1 -1
  259. package/lib/commonjs/functions.js.map +1 -1
  260. package/lib/commonjs/hooks/usePlatformPay.js +2 -0
  261. package/lib/commonjs/hooks/usePlatformPay.js.map +1 -0
  262. package/lib/commonjs/hooks/useStripe.js +1 -1
  263. package/lib/commonjs/hooks/useStripe.js.map +1 -1
  264. package/lib/commonjs/index.js +1 -1
  265. package/lib/commonjs/index.js.map +1 -1
  266. package/lib/commonjs/types/Errors.js +1 -1
  267. package/lib/commonjs/types/Errors.js.map +1 -1
  268. package/lib/commonjs/types/PlatformPay.js +2 -0
  269. package/lib/commonjs/types/PlatformPay.js.map +1 -0
  270. package/lib/commonjs/types/PushProvisioning.js +2 -0
  271. package/lib/commonjs/types/PushProvisioning.js.map +1 -0
  272. package/lib/commonjs/types/index.js +1 -1
  273. package/lib/commonjs/types/index.js.map +1 -1
  274. package/lib/module/NativeStripeSdk.js.map +1 -1
  275. package/lib/module/components/AddressSheet.js +2 -0
  276. package/lib/module/components/AddressSheet.js.map +1 -0
  277. package/lib/module/components/PlatformPayButton.js +2 -0
  278. package/lib/module/components/PlatformPayButton.js.map +1 -0
  279. package/lib/module/functions.js +1 -1
  280. package/lib/module/functions.js.map +1 -1
  281. package/lib/module/hooks/usePlatformPay.js +2 -0
  282. package/lib/module/hooks/usePlatformPay.js.map +1 -0
  283. package/lib/module/hooks/useStripe.js +1 -1
  284. package/lib/module/hooks/useStripe.js.map +1 -1
  285. package/lib/module/index.js +1 -1
  286. package/lib/module/index.js.map +1 -1
  287. package/lib/module/types/Errors.js +1 -1
  288. package/lib/module/types/Errors.js.map +1 -1
  289. package/lib/module/types/PlatformPay.js +2 -0
  290. package/lib/module/types/PlatformPay.js.map +1 -0
  291. package/lib/module/types/PushProvisioning.js +2 -0
  292. package/lib/module/types/PushProvisioning.js.map +1 -0
  293. package/lib/module/types/index.js +1 -1
  294. package/lib/module/types/index.js.map +1 -1
  295. package/lib/typescript/src/NativeStripeSdk.d.ts +8 -1
  296. package/lib/typescript/src/components/AddressSheet.d.ts +53 -0
  297. package/lib/typescript/src/components/PlatformPayButton.d.ts +65 -0
  298. package/lib/typescript/src/functions.d.ts +73 -1
  299. package/lib/typescript/src/hooks/usePlatformPay.d.ts +70 -0
  300. package/lib/typescript/src/hooks/useStripe.d.ts +18 -1
  301. package/lib/typescript/src/index.d.ts +3 -0
  302. package/lib/typescript/src/types/ApplePay.d.ts +9 -0
  303. package/lib/typescript/src/types/Common.d.ts +12 -0
  304. package/lib/typescript/src/types/Errors.d.ts +9 -0
  305. package/lib/typescript/src/types/GooglePay.d.ts +2 -1
  306. package/lib/typescript/src/types/PaymentSheet.d.ts +7 -1
  307. package/lib/typescript/src/types/PlatformPay.d.ts +285 -0
  308. package/lib/typescript/src/types/PushProvisioning.d.ts +66 -0
  309. package/lib/typescript/src/types/components/ApplePayButtonComponent.d.ts +2 -2
  310. package/lib/typescript/src/types/index.d.ts +6 -44
  311. package/package.json +8 -1
  312. package/src/NativeStripeSdk.tsx +20 -0
  313. package/src/components/AddressSheet.tsx +82 -0
  314. package/src/components/PlatformPayButton.tsx +157 -0
  315. package/src/functions.ts +181 -0
  316. package/src/hooks/usePlatformPay.tsx +174 -0
  317. package/src/hooks/useStripe.tsx +77 -0
  318. package/src/index.tsx +9 -0
  319. package/src/types/ApplePay.ts +9 -0
  320. package/src/types/Common.ts +13 -0
  321. package/src/types/Errors.ts +11 -0
  322. package/src/types/GooglePay.ts +2 -1
  323. package/src/types/PaymentSheet.ts +7 -1
  324. package/src/types/PlatformPay.ts +326 -0
  325. package/src/types/PushProvisioning.ts +76 -0
  326. package/src/types/components/ApplePayButtonComponent.ts +3 -2
  327. package/src/types/index.ts +8 -64
  328. package/stripe-react-native.podspec +1 -1
  329. package/android/src/main/res/drawable/googlepay_button_background.xml +0 -6
  330. package/android/src/main/res/drawable/googlepay_button_content.xml +0 -48
  331. package/android/src/main/res/drawable/googlepay_button_overlay.xml +0 -12
  332. package/android/src/main/res/drawable-af/pay_with_googlepay_button_content.xml +0 -14
  333. package/android/src/main/res/drawable-am/pay_with_googlepay_button_content.xml +0 -15
  334. package/android/src/main/res/drawable-as/pay_with_googlepay_button_content.xml +0 -14
  335. package/android/src/main/res/drawable-az/pay_with_googlepay_button_content.xml +0 -14
  336. package/android/src/main/res/drawable-be/pay_with_googlepay_button_content.xml +0 -14
  337. package/android/src/main/res/drawable-bn/pay_with_googlepay_button_content.xml +0 -14
  338. package/android/src/main/res/drawable-bs/pay_with_googlepay_button_content.xml +0 -14
  339. package/android/src/main/res/drawable-cy/pay_with_googlepay_button_content.xml +0 -14
  340. package/android/src/main/res/drawable-en-rau/pay_with_googlepay_button_content.xml +0 -14
  341. package/android/src/main/res/drawable-en-rca/pay_with_googlepay_button_content.xml +0 -14
  342. package/android/src/main/res/drawable-en-rgb/pay_with_googlepay_button_content.xml +0 -14
  343. package/android/src/main/res/drawable-en-rin/pay_with_googlepay_button_content.xml +0 -14
  344. package/android/src/main/res/drawable-es/pay_with_googlepay_button_content.xml +0 -14
  345. package/android/src/main/res/drawable-es-res/pay_with_googlepay_button_content.xml +0 -14
  346. package/android/src/main/res/drawable-eu/pay_with_googlepay_button_content.xml +0 -15
  347. package/android/src/main/res/drawable-fa/pay_with_googlepay_button_content.xml +0 -14
  348. package/android/src/main/res/drawable-fil/pay_with_googlepay_button_content.xml +0 -14
  349. package/android/src/main/res/drawable-fr-rca/pay_with_googlepay_button_content.xml +0 -14
  350. package/android/src/main/res/drawable-ga/pay_with_googlepay_button_content.xml +0 -14
  351. package/android/src/main/res/drawable-gl/pay_with_googlepay_button_content.xml +0 -14
  352. package/android/src/main/res/drawable-gu/pay_with_googlepay_button_content.xml +0 -14
  353. package/android/src/main/res/drawable-hdpi/googlepay_button_background_image.9.png +0 -0
  354. package/android/src/main/res/drawable-hu/pay_with_googlepay_button_content.xml +0 -15
  355. package/android/src/main/res/drawable-hy/pay_with_googlepay_button_content.xml +0 -15
  356. package/android/src/main/res/drawable-is/pay_with_googlepay_button_content.xml +0 -14
  357. package/android/src/main/res/drawable-iw/pay_with_googlepay_button_content.xml +0 -14
  358. package/android/src/main/res/drawable-ka/pay_with_googlepay_button_content.xml +0 -15
  359. package/android/src/main/res/drawable-kk/pay_with_googlepay_button_content.xml +0 -14
  360. package/android/src/main/res/drawable-km/pay_with_googlepay_button_content.xml +0 -14
  361. package/android/src/main/res/drawable-kn/pay_with_googlepay_button_content.xml +0 -14
  362. package/android/src/main/res/drawable-ky/pay_with_googlepay_button_content.xml +0 -14
  363. package/android/src/main/res/drawable-lo/pay_with_googlepay_button_content.xml +0 -14
  364. package/android/src/main/res/drawable-lt/pay_with_googlepay_button_content.xml +0 -14
  365. package/android/src/main/res/drawable-lv/pay_with_googlepay_button_content.xml +0 -14
  366. package/android/src/main/res/drawable-mdpi/googlepay_button_background_image.9.png +0 -0
  367. package/android/src/main/res/drawable-mk/pay_with_googlepay_button_content.xml +0 -14
  368. package/android/src/main/res/drawable-ml/pay_with_googlepay_button_content.xml +0 -14
  369. package/android/src/main/res/drawable-mn/pay_with_googlepay_button_content.xml +0 -14
  370. package/android/src/main/res/drawable-mr/pay_with_googlepay_button_content.xml +0 -14
  371. package/android/src/main/res/drawable-ne/pay_with_googlepay_button_content.xml +0 -14
  372. package/android/src/main/res/drawable-pt-rbr/pay_with_googlepay_button_content.xml +0 -14
  373. package/android/src/main/res/drawable-pt-rpt/pay_with_googlepay_button_content.xml +0 -14
  374. package/android/src/main/res/drawable-ro/pay_with_googlepay_button_content.xml +0 -14
  375. package/android/src/main/res/drawable-sq/pay_with_googlepay_button_content.xml +0 -14
  376. package/android/src/main/res/drawable-sw/pay_with_googlepay_button_content.xml +0 -14
  377. package/android/src/main/res/drawable-ta/pay_with_googlepay_button_content.xml +0 -14
  378. package/android/src/main/res/drawable-te/pay_with_googlepay_button_content.xml +0 -14
  379. package/android/src/main/res/drawable-ur/pay_with_googlepay_button_content.xml +0 -14
  380. package/android/src/main/res/drawable-uz/pay_with_googlepay_button_content.xml +0 -14
  381. package/android/src/main/res/drawable-v21/googlepay_button_background.xml +0 -7
  382. package/android/src/main/res/drawable-vi/pay_with_googlepay_button_content.xml +0 -14
  383. package/android/src/main/res/drawable-xhdpi/googlepay_button_background_image.9.png +0 -0
  384. package/android/src/main/res/drawable-xxhdpi/googlepay_button_background_image.9.png +0 -0
  385. package/android/src/main/res/drawable-xxxhdpi/googlepay_button_background_image.9.png +0 -0
  386. package/android/src/main/res/drawable-zh-rcn/pay_with_googlepay_button_content.xml +0 -15
  387. package/android/src/main/res/drawable-zh-rhk/pay_with_googlepay_button_content.xml +0 -15
  388. package/android/src/main/res/drawable-zh-rtw/pay_with_googlepay_button_content.xml +0 -15
  389. package/android/src/main/res/drawable-zu/pay_with_googlepay_button_content.xml +0 -14
  390. package/android/src/main/res/layout/googlepay_button.xml +0 -39
  391. package/ios/pushprovisioning/PushProvisioningUtils.swift +0 -64
@@ -5,16 +5,15 @@ import android.content.Intent
5
5
  import android.os.Parcelable
6
6
  import android.util.Log
7
7
  import androidx.appcompat.app.AppCompatActivity
8
- import androidx.fragment.app.Fragment
9
8
  import com.facebook.react.bridge.*
10
9
  import com.facebook.react.module.annotations.ReactModule
10
+ import com.reactnativestripesdk.addresssheet.AddressLauncherFragment
11
11
  import com.reactnativestripesdk.pushprovisioning.PushProvisioningProxy
12
12
  import com.reactnativestripesdk.utils.*
13
- import com.reactnativestripesdk.utils.createError
14
- import com.reactnativestripesdk.utils.createMissingActivityError
15
13
  import com.stripe.android.*
16
14
  import com.stripe.android.core.ApiVersion
17
15
  import com.stripe.android.core.AppInfo
16
+ import com.stripe.android.googlepaylauncher.GooglePayLauncher
18
17
  import com.stripe.android.model.*
19
18
  import com.stripe.android.payments.bankaccount.CollectBankAccountConfiguration
20
19
  import com.stripe.android.paymentsheet.PaymentSheet
@@ -40,32 +39,47 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
40
39
 
41
40
  private var confirmPromise: Promise? = null
42
41
  private var confirmPaymentClientSecret: String? = null
42
+ private var createPlatformPayPaymentMethodPromise: Promise? = null
43
43
 
44
44
  private var paymentSheetFragment: PaymentSheetFragment? = null
45
45
  private var googlePayFragment: GooglePayFragment? = null
46
46
  private var paymentLauncherFragment: PaymentLauncherFragment? = null
47
47
  private var collectBankAccountLauncherFragment: CollectBankAccountLauncherFragment? = null
48
- private var financialConnectionsSheetFragment: FinancialConnectionsSheetFragment? = null
49
- private val allFragments: List<Fragment?>
48
+
49
+ // If you create a new Fragment, you must put the tag here, otherwise result callbacks for that
50
+ // Fragment will not work on RN < 0.65
51
+ private val allStripeFragmentTags: List<String>
50
52
  get() = listOf(
51
- paymentSheetFragment,
52
- googlePayFragment,
53
- paymentLauncherFragment,
54
- collectBankAccountLauncherFragment,
55
- financialConnectionsSheetFragment
53
+ PaymentSheetFragment.TAG,
54
+ GooglePayFragment.TAG,
55
+ PaymentLauncherFragment.TAG,
56
+ CollectBankAccountLauncherFragment.TAG,
57
+ FinancialConnectionsSheetFragment.TAG,
58
+ AddressLauncherFragment.TAG,
59
+ GooglePayLauncherFragment.TAG
56
60
  )
57
61
 
58
62
  private val mActivityEventListener = object : BaseActivityEventListener() {
59
63
  override fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?) {
60
64
  if (::stripe.isInitialized) {
61
- dispatchActivityResultsToFragments(requestCode, resultCode, data)
62
- try {
63
- val result = AddPaymentMethodActivityStarter.Result.fromIntent(data)
64
- if (data?.getParcelableExtra<Parcelable>("extra_activity_result") != null) {
65
- onFpxPaymentMethodResult(result)
65
+ when (requestCode) {
66
+ GooglePayRequestHelper.LOAD_PAYMENT_DATA_REQUEST_CODE -> {
67
+ createPlatformPayPaymentMethodPromise?.let {
68
+ GooglePayRequestHelper.handleGooglePaymentMethodResult(resultCode, data, stripe, it)
69
+ createPlatformPayPaymentMethodPromise = null
70
+ } ?: run { Log.d("StripeReactNative", "No promise was found, Google Pay result went unhandled,") }
71
+ }
72
+ else -> {
73
+ dispatchActivityResultsToFragments(requestCode, resultCode, data)
74
+ try {
75
+ val result = AddPaymentMethodActivityStarter.Result.fromIntent(data)
76
+ if (data?.getParcelableExtra<Parcelable>("extra_activity_result") != null) {
77
+ onFpxPaymentMethodResult(result)
78
+ }
79
+ } catch (e: java.lang.Exception) {
80
+ Log.d("StripeReactNative", e.localizedMessage ?: e.toString())
81
+ }
66
82
  }
67
- } catch (e: java.lang.Exception) {
68
- Log.d("Error", e.localizedMessage ?: e.toString())
69
83
  }
70
84
  }
71
85
  }
@@ -77,8 +91,12 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
77
91
 
78
92
  // Necessary on older versions of React Native (~0.65 and below)
79
93
  private fun dispatchActivityResultsToFragments(requestCode: Int, resultCode: Int, data: Intent?) {
80
- for (fragment in allFragments) {
81
- fragment?.activity?.activityResultRegistry?.dispatchResult(requestCode, resultCode, data)
94
+ getCurrentActivityOrResolveWithError(null)?.supportFragmentManager?.let { fragmentManager ->
95
+ for (tag in allStripeFragmentTags) {
96
+ fragmentManager.findFragmentByTag(tag)?.let {
97
+ it.activity?.activityResultRegistry?.dispatchResult(requestCode, resultCode, data)
98
+ }
99
+ }
82
100
  }
83
101
  }
84
102
 
@@ -120,6 +138,7 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
120
138
  }
121
139
 
122
140
  this.publishableKey = publishableKey
141
+ AddressLauncherFragment.publishableKey = publishableKey
123
142
 
124
143
  val name = getValOr(appInfo, "name", "") as String
125
144
  val partnerId = getValOr(appInfo, "partnerId", "")
@@ -489,6 +508,26 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
489
508
  }
490
509
  }
491
510
 
511
+ @ReactMethod
512
+ fun isPlatformPaySupported(params: ReadableMap?, promise: Promise) {
513
+ val fragment = GooglePayPaymentMethodLauncherFragment(
514
+ reactApplicationContext,
515
+ getBooleanOrFalse(params, "testEnv"),
516
+ getBooleanOrFalse(params, "existingPaymentMethodRequired"),
517
+ promise
518
+ )
519
+
520
+ getCurrentActivityOrResolveWithError(promise)?.let {
521
+ try {
522
+ it.supportFragmentManager.beginTransaction()
523
+ .add(fragment, GooglePayPaymentMethodLauncherFragment.TAG)
524
+ .commit()
525
+ } catch (error: IllegalStateException) {
526
+ promise.resolve(createError(ErrorType.Failed.toString(), error.message))
527
+ }
528
+ }
529
+ }
530
+
492
531
  @ReactMethod
493
532
  fun isGooglePaySupported(params: ReadableMap?, promise: Promise) {
494
533
  val fragment = GooglePayPaymentMethodLauncherFragment(
@@ -545,6 +584,62 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
545
584
  }
546
585
  }
547
586
 
587
+ @ReactMethod
588
+ fun confirmPlatformPay(clientSecret: String, params: ReadableMap, isPaymentIntent: Boolean, promise: Promise) {
589
+ if (!::stripe.isInitialized) {
590
+ promise.resolve(createMissingInitError())
591
+ return
592
+ }
593
+
594
+ val googlePayParams: ReadableMap = params.getMap("googlePay") ?: run {
595
+ promise.resolve(createError(GooglePayErrorType.Failed.toString(), "You must provide the `googlePay` parameter."))
596
+ return
597
+ }
598
+
599
+ GooglePayLauncherFragment().also {
600
+ it.presentGooglePaySheet(
601
+ clientSecret,
602
+ if (isPaymentIntent) GooglePayLauncherFragment.Mode.ForPayment else GooglePayLauncherFragment.Mode.ForSetup,
603
+ googlePayParams,
604
+ reactApplicationContext
605
+ ) { launcherResult, errorMap ->
606
+ if (errorMap != null) {
607
+ promise.resolve(errorMap)
608
+ } else if (launcherResult != null) {
609
+ when (launcherResult) {
610
+ GooglePayLauncher.Result.Completed -> {
611
+ if (isPaymentIntent) {
612
+ stripe.retrievePaymentIntent(clientSecret, stripeAccountId, object : ApiResultCallback<PaymentIntent> {
613
+ override fun onError(e: Exception) {
614
+ promise.resolve(createResult("paymentIntent", WritableNativeMap()))
615
+ }
616
+ override fun onSuccess(result: PaymentIntent) {
617
+ promise.resolve(createResult("paymentIntent", mapFromPaymentIntentResult(result)))
618
+ }
619
+ })
620
+ } else {
621
+ stripe.retrieveSetupIntent(clientSecret, stripeAccountId, object : ApiResultCallback<SetupIntent> {
622
+ override fun onError(e: Exception) {
623
+ promise.resolve(createResult("setupIntent", WritableNativeMap()))
624
+ }
625
+ override fun onSuccess(result: SetupIntent) {
626
+ promise.resolve(createResult("setupIntent", mapFromSetupIntentResult(result)))
627
+ }
628
+ })
629
+ }
630
+ }
631
+ GooglePayLauncher.Result.Canceled -> {
632
+ promise.resolve(createError(GooglePayErrorType.Canceled.toString(), "Google Pay has been canceled"))
633
+ }
634
+ is GooglePayLauncher.Result.Failed -> {
635
+ promise.resolve(createError(GooglePayErrorType.Failed.toString(), launcherResult.error))
636
+ }
637
+ }
638
+ }
639
+ }
640
+ }
641
+ }
642
+
548
643
  @ReactMethod
549
644
  fun createGooglePayPaymentMethod(params: ReadableMap, promise: Promise) {
550
645
  val currencyCode = getValOr(params, "currencyCode", null) ?: run {
@@ -558,6 +653,23 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
558
653
  googlePayFragment?.createPaymentMethod(currencyCode, amount, promise)
559
654
  }
560
655
 
656
+ @ReactMethod
657
+ fun createPlatformPayPaymentMethod(params: ReadableMap, promise: Promise) {
658
+ val googlePayParams: ReadableMap = params.getMap("googlePay") ?: run {
659
+ promise.resolve(createError(GooglePayErrorType.Failed.toString(), "You must provide the `googlePay` parameter."))
660
+ return
661
+ }
662
+ createPlatformPayPaymentMethodPromise = promise
663
+ getCurrentActivityOrResolveWithError(promise)?.let {
664
+ val request = GooglePayRequestHelper.createPaymentRequest(
665
+ it,
666
+ GooglePayJsonFactory(reactApplicationContext),
667
+ googlePayParams
668
+ )
669
+ GooglePayRequestHelper.createPaymentMethod(request, it)
670
+ }
671
+ }
672
+
561
673
  @ReactMethod
562
674
  fun canAddCardToWallet(params: ReadableMap, promise: Promise) {
563
675
  val last4 = getValOr(params, "cardLastFour", null) ?: run {
@@ -718,7 +830,7 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
718
830
  promise.resolve(createMissingInitError())
719
831
  return
720
832
  }
721
- financialConnectionsSheetFragment = FinancialConnectionsSheetFragment().also {
833
+ FinancialConnectionsSheetFragment().also {
722
834
  it.presentFinancialConnectionsSheet(clientSecret, FinancialConnectionsSheetFragment.Mode.ForToken, publishableKey, stripeAccountId, promise, reactApplicationContext)
723
835
  }
724
836
  }
@@ -729,11 +841,20 @@ class StripeSdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
729
841
  promise.resolve(createMissingInitError())
730
842
  return
731
843
  }
732
- financialConnectionsSheetFragment = FinancialConnectionsSheetFragment().also {
844
+ FinancialConnectionsSheetFragment().also {
733
845
  it.presentFinancialConnectionsSheet(clientSecret, FinancialConnectionsSheetFragment.Mode.ForSession, publishableKey, stripeAccountId, promise, reactApplicationContext)
734
846
  }
735
847
  }
736
848
 
849
+ /**
850
+ * We need the following in order to avoid some annoying console.warns() from our Apple Pay event listeners. Otherwise,
851
+ * we'd have to put our users through some annoying (if Platform.OS...) logic & null-handling logic.
852
+ */
853
+ @ReactMethod
854
+ fun addListener(eventName: String) {}
855
+ @ReactMethod
856
+ fun removeListeners(count: Int) {}
857
+
737
858
  /**
738
859
  * Safely get and cast the current activity as an AppCompatActivity. If that fails, the promise
739
860
  * provided will be resolved with an error message instructing the user to retry the method.
@@ -4,6 +4,7 @@ import com.facebook.react.ReactPackage
4
4
  import com.facebook.react.bridge.NativeModule
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
6
  import com.facebook.react.uimanager.ViewManager
7
+ import com.reactnativestripesdk.addresssheet.AddressSheetViewManager
7
8
  import com.reactnativestripesdk.pushprovisioning.AddToWalletButtonManager
8
9
 
9
10
  class StripeSdkPackage : ReactPackage {
@@ -18,7 +19,8 @@ class StripeSdkPackage : ReactPackage {
18
19
  StripeContainerManager(),
19
20
  CardFormViewManager(),
20
21
  GooglePayButtonManager(),
21
- AddToWalletButtonManager(reactContext)
22
+ AddToWalletButtonManager(reactContext),
23
+ AddressSheetViewManager()
22
24
  )
23
25
  }
24
26
  }
@@ -0,0 +1,111 @@
1
+ package com.reactnativestripesdk.addresssheet
2
+
3
+ import android.os.Bundle
4
+ import android.view.LayoutInflater
5
+ import android.view.View
6
+ import android.view.ViewGroup
7
+ import android.widget.FrameLayout
8
+ import androidx.appcompat.app.AppCompatActivity
9
+ import androidx.fragment.app.Fragment
10
+ import com.facebook.react.bridge.ReactContext
11
+ import com.facebook.react.bridge.WritableMap
12
+ import com.reactnativestripesdk.utils.ErrorType
13
+ import com.reactnativestripesdk.utils.createError
14
+ import com.stripe.android.paymentsheet.PaymentSheet
15
+ import com.stripe.android.paymentsheet.addresselement.AddressDetails
16
+ import com.stripe.android.paymentsheet.addresselement.AddressLauncher
17
+ import com.stripe.android.paymentsheet.addresselement.AddressLauncherResult
18
+
19
+ class AddressLauncherFragment : Fragment() {
20
+ companion object {
21
+ internal var publishableKey: String? = null
22
+ internal const val TAG = "address_launcher_fragment"
23
+ }
24
+
25
+ private lateinit var addressLauncher: AddressLauncher
26
+ private var configuration = AddressLauncher.Configuration()
27
+ private var callback: ((error: WritableMap?, address: AddressDetails?) -> Unit)? = null
28
+
29
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
30
+ savedInstanceState: Bundle?): View {
31
+ return FrameLayout(requireActivity()).also {
32
+ it.visibility = View.GONE
33
+ }
34
+ }
35
+
36
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
37
+ publishableKey?.let { publishableKey ->
38
+ addressLauncher = AddressLauncher(this,
39
+ ::onAddressLauncherResult).also {
40
+ it.present(
41
+ publishableKey = publishableKey,
42
+ configuration = configuration
43
+ )
44
+ }
45
+ } ?: run {
46
+ callback?.invoke(
47
+ createError(ErrorType.Failed.toString(), "No publishable key set. Stripe has not been initialized. Initialize Stripe in your app with the StripeProvider component or the initStripe method."),
48
+ null
49
+ )
50
+ }
51
+ }
52
+
53
+ private fun onAddressLauncherResult(result: AddressLauncherResult) {
54
+ when (result) {
55
+ is AddressLauncherResult.Canceled -> {
56
+ callback?.invoke(
57
+ createError(ErrorType.Canceled.toString(), "The flow has been canceled."),
58
+ null
59
+ )
60
+ }
61
+ is AddressLauncherResult.Succeeded -> {
62
+ callback?.invoke(
63
+ null,
64
+ result.address
65
+ )
66
+ }
67
+ }
68
+ }
69
+
70
+ fun presentAddressSheet(
71
+ context: ReactContext,
72
+ appearance: PaymentSheet.Appearance,
73
+ defaultAddress: AddressDetails?,
74
+ allowedCountries: Set<String>,
75
+ buttonTitle: String?,
76
+ title: String?,
77
+ googlePlacesApiKey: String?,
78
+ autocompleteCountries: Set<String>,
79
+ additionalFields: AddressLauncher.AdditionalFieldsConfiguration?,
80
+ callback: ((error: WritableMap?, address: AddressDetails?) -> Unit)) {
81
+ configuration = AddressLauncher.Configuration(
82
+ appearance = appearance,
83
+ address = defaultAddress,
84
+ allowedCountries = allowedCountries,
85
+ buttonTitle = buttonTitle,
86
+ additionalFields = additionalFields,
87
+ title = title,
88
+ googlePlacesApiKey = googlePlacesApiKey,
89
+ autocompleteCountries = autocompleteCountries,
90
+ )
91
+ this.callback = callback
92
+ (context.currentActivity as? AppCompatActivity)?.let {
93
+ attemptToCleanupPreviousFragment(it)
94
+ commitFragmentAndStartFlow(it)
95
+ }
96
+ }
97
+
98
+ private fun attemptToCleanupPreviousFragment(currentActivity: AppCompatActivity) {
99
+ currentActivity.supportFragmentManager.beginTransaction()
100
+ .remove(this)
101
+ .commitAllowingStateLoss()
102
+ }
103
+
104
+ private fun commitFragmentAndStartFlow(currentActivity: AppCompatActivity) {
105
+ try {
106
+ currentActivity.supportFragmentManager.beginTransaction()
107
+ .add(this, TAG)
108
+ .commit()
109
+ } catch (_: IllegalStateException) {}
110
+ }
111
+ }
@@ -0,0 +1,28 @@
1
+ package com.reactnativestripesdk.addresssheet
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.events.Event
5
+ import com.facebook.react.uimanager.events.RCTEventEmitter
6
+
7
+ internal class AddressSheetEvent constructor(viewTag: Int, private val eventType: EventType, private val eventMap: WritableMap?) : Event<AddressSheetEvent>(viewTag) {
8
+ enum class EventType {
9
+ OnSubmit,
10
+ OnError
11
+ }
12
+
13
+ override fun dispatch(rctEventEmitter: RCTEventEmitter) {
14
+ rctEventEmitter.receiveEvent(viewTag, eventName, eventMap)
15
+ }
16
+
17
+ companion object {
18
+ const val ON_SUBMIT = "onSubmitAction"
19
+ const val ON_ERROR = "onErrorAction"
20
+ }
21
+
22
+ override fun getEventName(): String {
23
+ return when (eventType) {
24
+ EventType.OnSubmit -> ON_SUBMIT
25
+ EventType.OnError -> ON_ERROR
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,178 @@
1
+ package com.reactnativestripesdk.addresssheet
2
+
3
+ import android.os.Bundle
4
+ import android.util.Log
5
+ import android.widget.FrameLayout
6
+ import com.facebook.react.bridge.Arguments
7
+ import com.facebook.react.bridge.ReadableMap
8
+ import com.facebook.react.bridge.WritableMap
9
+ import com.facebook.react.bridge.WritableNativeMap
10
+ import com.facebook.react.uimanager.ThemedReactContext
11
+ import com.facebook.react.uimanager.UIManagerModule
12
+ import com.facebook.react.uimanager.events.EventDispatcher
13
+ import com.reactnativestripesdk.buildPaymentSheetAppearance
14
+ import com.reactnativestripesdk.utils.ErrorType
15
+ import com.reactnativestripesdk.utils.PaymentSheetAppearanceException
16
+ import com.reactnativestripesdk.utils.createError
17
+ import com.reactnativestripesdk.utils.toBundleObject
18
+ import com.stripe.android.paymentsheet.PaymentSheet
19
+ import com.stripe.android.paymentsheet.addresselement.AddressDetails
20
+ import com.stripe.android.paymentsheet.addresselement.AddressLauncher
21
+ import com.stripe.android.paymentsheet.addresselement.AddressLauncherResult
22
+
23
+ class AddressSheetView(private val context: ThemedReactContext) : FrameLayout(context) {
24
+ private var eventDispatcher: EventDispatcher? = context.getNativeModule(UIManagerModule::class.java)?.eventDispatcher
25
+ private var isVisible = false
26
+ private var appearanceParams: ReadableMap? = null
27
+ private var defaultAddress: AddressDetails? = null
28
+ private var allowedCountries: Set<String> = emptySet()
29
+ private var buttonTitle: String? = null
30
+ private var sheetTitle: String? = null
31
+ private var googlePlacesApiKey: String? = null
32
+ private var autocompleteCountries: Set<String> = emptySet()
33
+ private var additionalFields: AddressLauncher.AdditionalFieldsConfiguration? = null
34
+
35
+ private fun onSubmit(params: WritableMap) {
36
+ eventDispatcher?.dispatchEvent(
37
+ AddressSheetEvent(id, AddressSheetEvent.EventType.OnSubmit, params)
38
+ )
39
+ }
40
+
41
+ private fun onError(params: WritableMap?) {
42
+ eventDispatcher?.dispatchEvent(
43
+ AddressSheetEvent(id, AddressSheetEvent.EventType.OnError, params)
44
+ )
45
+ }
46
+
47
+ fun setVisible(newVisibility: Boolean) {
48
+ if (newVisibility && !isVisible) {
49
+ launchAddressSheet()
50
+ } else if (!newVisibility && isVisible) {
51
+ Log.w("StripeReactNative", "Programmatically dismissing the Address Sheet is not supported on Android.")
52
+ }
53
+ isVisible = newVisibility
54
+ }
55
+
56
+ private fun launchAddressSheet() {
57
+ val appearance = try {
58
+ buildPaymentSheetAppearance(toBundleObject(appearanceParams), context)
59
+ } catch (error: PaymentSheetAppearanceException) {
60
+ onError(createError(ErrorType.Failed.toString(), error))
61
+ return
62
+ }
63
+ AddressLauncherFragment().presentAddressSheet(
64
+ context,
65
+ appearance,
66
+ defaultAddress,
67
+ allowedCountries,
68
+ buttonTitle,
69
+ sheetTitle,
70
+ googlePlacesApiKey,
71
+ autocompleteCountries,
72
+ additionalFields
73
+ ) { error, address ->
74
+ if (address != null) {
75
+ onSubmit(buildResult(address))
76
+ } else {
77
+ onError(error)
78
+ }
79
+ isVisible = false
80
+ }
81
+ }
82
+
83
+ fun setAppearance(appearanceParams: ReadableMap) {
84
+ this.appearanceParams = appearanceParams
85
+ }
86
+
87
+ fun setDefaultValues(defaults: ReadableMap) {
88
+ defaultAddress = buildAddressDetails(defaults)
89
+ }
90
+
91
+ fun setAdditionalFields(fields: ReadableMap) {
92
+ additionalFields = buildAdditionalFieldsConfiguration(fields)
93
+ }
94
+
95
+ fun setAllowedCountries(countries: List<String>) {
96
+ allowedCountries = countries.toSet()
97
+ }
98
+
99
+ fun setAutocompleteCountries(countries: List<String>) {
100
+ autocompleteCountries = countries.toSet()
101
+ }
102
+
103
+ fun setPrimaryButtonTitle(title: String) {
104
+ buttonTitle = title
105
+ }
106
+
107
+ fun setSheetTitle(title: String) {
108
+ sheetTitle = title
109
+ }
110
+
111
+ fun setGooglePlacesApiKey(key: String) {
112
+ googlePlacesApiKey = key
113
+ }
114
+
115
+ companion object {
116
+ internal fun buildAddressDetails(bundle: Bundle): AddressDetails {
117
+ return AddressDetails(
118
+ name = bundle.getString("name"),
119
+ address = buildAddress(bundle.getBundle("address")),
120
+ phoneNumber = bundle.getString("phone"),
121
+ isCheckboxSelected = bundle.getBoolean("isCheckboxSelected"),
122
+ )
123
+ }
124
+
125
+ internal fun buildAddressDetails(map: ReadableMap): AddressDetails {
126
+ return buildAddressDetails(toBundleObject(map))
127
+ }
128
+
129
+ internal fun buildAddress(bundle: Bundle?): PaymentSheet.Address? {
130
+ if (bundle == null) {
131
+ return null
132
+ }
133
+ return PaymentSheet.Address(
134
+ city = bundle.getString("city"),
135
+ country = bundle.getString("country"),
136
+ line1 = bundle.getString("line1"),
137
+ line2 = bundle.getString("line2"),
138
+ state = bundle.getString("state"),
139
+ postalCode = bundle.getString("postalCode")
140
+ )
141
+ }
142
+
143
+ internal fun getFieldConfiguration(key: String?): AddressLauncher.AdditionalFieldsConfiguration.FieldConfiguration {
144
+ return when (key) {
145
+ "hidden" -> AddressLauncher.AdditionalFieldsConfiguration.FieldConfiguration.HIDDEN
146
+ "optional" -> AddressLauncher.AdditionalFieldsConfiguration.FieldConfiguration.OPTIONAL
147
+ "required" -> AddressLauncher.AdditionalFieldsConfiguration.FieldConfiguration.REQUIRED
148
+ else -> AddressLauncher.AdditionalFieldsConfiguration.FieldConfiguration.HIDDEN
149
+ }
150
+ }
151
+
152
+ internal fun buildAdditionalFieldsConfiguration(params: ReadableMap): AddressLauncher.AdditionalFieldsConfiguration {
153
+ val phoneConfiguration = getFieldConfiguration(params.getString("phoneNumber"))
154
+
155
+ return AddressLauncher.AdditionalFieldsConfiguration(
156
+ phone = phoneConfiguration,
157
+ checkboxLabel = params.getString("checkboxLabel")
158
+ )
159
+ }
160
+
161
+ internal fun buildResult(addressDetails: AddressDetails): WritableMap {
162
+ val result = WritableNativeMap()
163
+ result.putString("name", addressDetails.name)
164
+ WritableNativeMap().let {
165
+ it.putString("city", addressDetails.address?.city)
166
+ it.putString("country", addressDetails.address?.country)
167
+ it.putString("line1", addressDetails.address?.line1)
168
+ it.putString("line2", addressDetails.address?.line2)
169
+ it.putString("postalCode", addressDetails.address?.postalCode)
170
+ it.putString("state", addressDetails.address?.state)
171
+ result.putMap("address", it)
172
+ }
173
+ result.putString("phone", addressDetails.phoneNumber)
174
+ result.putBoolean("isCheckboxSelected", addressDetails.isCheckboxSelected ?: false)
175
+ return result
176
+ }
177
+ }
178
+ }
@@ -0,0 +1,67 @@
1
+ package com.reactnativestripesdk.addresssheet
2
+
3
+ import com.facebook.react.bridge.ReadableArray
4
+ import com.facebook.react.bridge.ReadableMap
5
+ import com.facebook.react.common.MapBuilder
6
+ import com.facebook.react.uimanager.SimpleViewManager
7
+ import com.facebook.react.uimanager.ThemedReactContext
8
+ import com.facebook.react.uimanager.annotations.ReactProp
9
+
10
+ class AddressSheetViewManager : SimpleViewManager<AddressSheetView>() {
11
+ override fun getName() = "AddressSheetView"
12
+
13
+ override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> {
14
+ return MapBuilder.of(
15
+ AddressSheetEvent.ON_SUBMIT, MapBuilder.of("registrationName", "onSubmitAction"),
16
+ AddressSheetEvent.ON_ERROR, MapBuilder.of("registrationName", "onErrorAction"))
17
+ }
18
+
19
+ @ReactProp(name = "visible")
20
+ fun setVisible(view: AddressSheetView, visibility: Boolean) {
21
+ view.setVisible(visibility)
22
+ }
23
+
24
+ @ReactProp(name = "appearance")
25
+ fun setAppearance(view: AddressSheetView, appearance: ReadableMap) {
26
+ view.setAppearance(appearance)
27
+ }
28
+
29
+ @ReactProp(name = "defaultValues")
30
+ fun setDefaultValues(view: AddressSheetView, defaults: ReadableMap) {
31
+ view.setDefaultValues(defaults)
32
+ }
33
+
34
+ @ReactProp(name = "additionalFields")
35
+ fun setAdditionalFields(view: AddressSheetView, fields: ReadableMap) {
36
+ view.setAdditionalFields(fields)
37
+ }
38
+
39
+ @ReactProp(name = "allowedCountries")
40
+ fun setAllowedCountries(view: AddressSheetView, countries: ReadableArray) {
41
+ view.setAllowedCountries(countries.toArrayList().filterIsInstance<String>())
42
+ }
43
+
44
+ @ReactProp(name = "autocompleteCountries")
45
+ fun setAutocompleteCountries(view: AddressSheetView, countries: ReadableArray) {
46
+ view.setAutocompleteCountries(countries.toArrayList().filterIsInstance<String>())
47
+ }
48
+
49
+ @ReactProp(name = "primaryButtonTitle")
50
+ fun setPrimaryButtonTitle(view: AddressSheetView, title: String) {
51
+ view.setPrimaryButtonTitle(title)
52
+ }
53
+
54
+ @ReactProp(name = "sheetTitle")
55
+ fun setSheetTitle(view: AddressSheetView, title: String) {
56
+ view.setSheetTitle(title)
57
+ }
58
+
59
+ @ReactProp(name = "googlePlacesApiKey")
60
+ fun setGooglePlacesApiKey(view: AddressSheetView, key: String) {
61
+ view.setGooglePlacesApiKey(key)
62
+ }
63
+
64
+ override fun createViewInstance(reactContext: ThemedReactContext): AddressSheetView {
65
+ return AddressSheetView(reactContext)
66
+ }
67
+ }
@@ -6,6 +6,7 @@ import android.view.inputmethod.InputMethodManager
6
6
  import androidx.appcompat.app.AppCompatActivity
7
7
  import androidx.fragment.app.Fragment
8
8
  import com.facebook.react.bridge.ReactApplicationContext
9
+ import com.facebook.react.bridge.ReadableMap
9
10
 
10
11
  fun View.showSoftKeyboard() {
11
12
  post {
@@ -30,3 +31,7 @@ fun Fragment.removeFragment(context: ReactApplicationContext) {
30
31
  }
31
32
  }
32
33
  }
34
+
35
+ fun ReadableMap.getBooleanOr(key: String, default: Boolean): Boolean {
36
+ return if (this.hasKey(key)) this.getBoolean(key) else default
37
+ }
@@ -487,7 +487,7 @@ internal fun mapNextAction(type: NextActionType?, data: NextActionData?): Writab
487
487
  NextActionType.AlipayRedirect -> { // TODO: Can't access, private
488
488
  return null
489
489
  }
490
- NextActionType.BlikAuthorize, NextActionType.UseStripeSdk, null -> {
490
+ NextActionType.BlikAuthorize, NextActionType.UseStripeSdk, NextActionType.UpiAwaitNotification, null -> {
491
491
  return null
492
492
  }
493
493
  }