@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
package/CHANGELOG.md CHANGED
@@ -2,6 +2,36 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.22.0 - 2022-12-02
6
+
7
+ ### Breaking changes
8
+
9
+ ### New features
10
+
11
+ - Added the `hasPairedAppleWatch` option to `canAddCardToWallet`. [#1219](https://github.com/stripe/stripe-react-native/pull/1219)
12
+ - Added new functions and a new component to streamline integrating with Apple and Google Pay and add more feature support. See the [Migrating to Platform Pay guide](https://github.com/stripe/stripe-react-native/blob/master/docs/Platform-Pay-Migration.md) for more details. The old Apple and Google Pay APIs are marked as `deprecated` and will be removed in a future release, but are still supported in this version.
13
+
14
+ ## Fixes
15
+
16
+ - Fixed an issue where builds would error with the message `'const' enums are not supported.` [see commit](https://github.com/stripe/stripe-react-native/commit/f882bfa588aa6d23a980b4b43d2cca660ca1dd2a)
17
+ - Fixed an issue where the `canAddCardToWallet` method would sometimes wrongly return `false` with a `details.status` of `MISSING_CONFIGURATION` in production builds. [#1215](https://github.com/stripe/stripe-react-native/pull/1215)
18
+ - Fixed an issue on Android where, for certain countries, the postal code would not be enabled but would still be required. [#1213](https://github.com/stripe/stripe-react-native/pull/1213)
19
+ - Fixed an issue on iOS where `canAddCardToWallet` would return `false` if the card had already been provisioned on a paired device like an Apple Watch, but had not yet been provisioned on the current device, and would also return `false` if the card had been provisioned on the current device, but not on a paired Apple Watch. [#1219](https://github.com/stripe/stripe-react-native/pull/1219)
20
+
21
+ ## 0.21.0 - 2022-11-15
22
+
23
+ ### Breaking changes
24
+
25
+ ### New features
26
+
27
+ - Added the `<AddressSheet />` component, which enables you to collect local and international shipping or billing addresses from your customers _with_ address autocomplete. [#1169](https://github.com/stripe/stripe-react-native/pull/1169)
28
+ - [Find the docs here](https://stripe.com/docs/elements/address-element?platform=react-native)
29
+ - Added the `defaultShippingDetails` field to the `params` argument in `initPaymentSheet(params)`. This will allow you to collect shipping details (either in your own UI or using the new `<AddressSheet />` component) for payments in the Payment Sheet. [#1169](https://github.com/stripe/stripe-react-native/pull/1169)
30
+
31
+ ## Fixes
32
+
33
+ - Fixed a build error on Android when using Kotlin version 1.7.10. [#1195](https://github.com/stripe/stripe-react-native/pull/1195)
34
+
5
35
  ## 0.20.0 - 2022-11-03
6
36
 
7
37
  ### Breaking changes
@@ -25,7 +55,7 @@
25
55
  - Fixed an issue with Financial Connections on iOS where the app wouldn't properly redirect back after authentication. [#1178](https://github.com/stripe/stripe-react-native/pull/1178)
26
56
  - Fixed `borderWidth` and `borderRadius` for `<CardField />` and `CardForm />` was inconsistent across iOS and Android. [#1182](https://github.com/stripe/stripe-react-native/pull/1182)
27
57
 
28
- ## 0.19.0 - 2022-09-16
58
+ ## 0.19.0 - 2022-09-16 (📌 Expo SDK 47)
29
59
 
30
60
  ### Breaking changes
31
61
 
@@ -35,6 +35,7 @@ android {
35
35
  versionName "1.0"
36
36
  vectorDrawables.useSupportLibrary = true
37
37
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
38
+ consumerProguardFiles 'proguard-rules.txt'
38
39
  }
39
40
 
40
41
  buildTypes {
@@ -1,2 +1,2 @@
1
1
  StripeSdk_kotlinVersion=1.6.21
2
- StripeSdk_stripeVersion=20.15.+
2
+ StripeSdk_stripeVersion=20.16.+
@@ -0,0 +1,7 @@
1
+ -keepclassmembers class com.google.android.gms.tapandpay.** {
2
+ public *;
3
+ }
4
+
5
+ -keepclassmembers class com.stripe.android.pushProvisioning.** {
6
+ public *;
7
+ }
@@ -204,6 +204,10 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
204
204
 
205
205
  fun setPostalCodeEnabled(isEnabled: Boolean) {
206
206
  mCardWidget.postalCodeEnabled = isEnabled
207
+
208
+ if (isEnabled === false) {
209
+ mCardWidget.postalCodeRequired = false
210
+ }
207
211
  }
208
212
 
209
213
  /**
@@ -91,6 +91,6 @@ class CollectBankAccountLauncherFragment(
91
91
  }
92
92
 
93
93
  companion object {
94
- const val TAG = "collect_bank_account_launcher_fragment"
94
+ internal const val TAG = "collect_bank_account_launcher_fragment"
95
95
  }
96
96
  }
@@ -125,7 +125,7 @@ class FinancialConnectionsSheetFragment : Fragment() {
125
125
  private fun commitFragmentAndStartFlow(currentActivity: AppCompatActivity) {
126
126
  try {
127
127
  currentActivity.supportFragmentManager.beginTransaction()
128
- .add(this, "financial_connections_sheet_launch_fragment")
128
+ .add(this, TAG)
129
129
  .commit()
130
130
  } catch (error: IllegalStateException) {
131
131
  promise.resolve(createError(ErrorType.Failed.toString(), error.message))
@@ -133,6 +133,8 @@ class FinancialConnectionsSheetFragment : Fragment() {
133
133
  }
134
134
 
135
135
  companion object {
136
+ internal const val TAG = "financial_connections_sheet_launch_fragment"
137
+
136
138
  private fun createTokenResult(result: FinancialConnectionsSheetForTokenResult.Completed): WritableMap {
137
139
  return WritableNativeMap().also {
138
140
  it.putMap("session", mapFromSession(result.financialConnectionsSession))
@@ -239,6 +241,7 @@ class FinancialConnectionsSheetFragment : Fragment() {
239
241
  FinancialConnectionsAccount.Permissions.TRANSACTIONS -> "transactions"
240
242
  FinancialConnectionsAccount.Permissions.ACCOUNT_NUMBERS -> "accountNumbers"
241
243
  FinancialConnectionsAccount.Permissions.UNKNOWN -> "unparsable"
244
+ FinancialConnectionsAccount.Permissions.ACCOUNT_NUMBERS -> "accountNumbers"
242
245
  }
243
246
  }
244
247
 
@@ -17,6 +17,11 @@ class GooglePayButtonManager : SimpleViewManager<GooglePayButtonView?>() {
17
17
 
18
18
  @ReactProp(name = "buttonType")
19
19
  fun buttonType(view: GooglePayButtonView, buttonType: String) {
20
+ view.setButtonType(buttonType)
21
+ }
22
+
23
+ @ReactProp(name = "type")
24
+ fun type(view: GooglePayButtonView, buttonType: Int) {
20
25
  view.setType(buttonType)
21
26
  }
22
27
 
@@ -1,28 +1,66 @@
1
1
  package com.reactnativestripesdk
2
2
 
3
3
  import android.view.LayoutInflater
4
+ import android.view.View
4
5
  import android.widget.FrameLayout
5
6
  import com.facebook.react.uimanager.ThemedReactContext
6
7
 
7
8
  class GooglePayButtonView(private val context: ThemedReactContext) : FrameLayout(context) {
9
+ private var button: View? = null
10
+ // Used in legacy GooglePayButton implementations
8
11
  private var buttonType: String? = null
9
12
 
13
+ // Used in the new PlatformPayButton implementations
14
+ private var type: Int? = null
15
+
10
16
  fun initialize() {
11
- val type =
12
- when (buttonType) {
13
- "pay" -> R.layout.pay_with_googlepay_button
14
- "standard" -> R.layout.googlepay_button
15
- else -> R.layout.googlepay_button
17
+ val resAsset: Int =
18
+ if (type != null) {
19
+ when (type) {
20
+ 0 -> R.layout.plain_googlepay_button
21
+ 1 -> R.layout.buy_with_googlepay_button
22
+ 6 -> R.layout.book_with_googlepay_button
23
+ 5 -> R.layout.checkout_with_googlepay_button
24
+ 4 -> R.layout.donate_with_googlepay_button
25
+ 11 -> R.layout.order_with_googlepay_button
26
+ 1000 -> R.layout.pay_with_googlepay_button
27
+ 7 -> R.layout.subscribe_with_googlepay_button
28
+ 1001 -> R.layout.googlepay_mark_button
29
+ else -> R.layout.plain_googlepay_button
30
+ }
31
+ } else {
32
+ when (buttonType) {
33
+ "pay" -> R.layout.pay_with_googlepay_button
34
+ "standard" -> R.layout.plain_googlepay_button
35
+ else -> R.layout.plain_googlepay_button
36
+ }
16
37
  }
17
38
 
18
- val button = LayoutInflater.from(context).inflate(
19
- type, null
39
+ button = LayoutInflater.from(context).inflate(
40
+ resAsset, null
20
41
  )
21
42
 
22
43
  addView(button)
44
+ viewTreeObserver.addOnGlobalLayoutListener { requestLayout() }
45
+ }
46
+
47
+ override fun requestLayout() {
48
+ super.requestLayout()
49
+ post(mLayoutRunnable)
23
50
  }
24
51
 
25
- fun setType(type: String) {
52
+ private val mLayoutRunnable = Runnable {
53
+ measure(
54
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
55
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY))
56
+ button?.layout(left, top, right, bottom)
57
+ }
58
+
59
+ fun setButtonType(type: String) {
26
60
  buttonType = type
27
61
  }
62
+
63
+ fun setType(type: Int) {
64
+ this.type = type
65
+ }
28
66
  }
@@ -206,6 +206,6 @@ class GooglePayFragment(private val initPromise: Promise) : Fragment() {
206
206
  }
207
207
 
208
208
  companion object {
209
- const val TAG = "google_pay_launch_fragment"
209
+ internal const val TAG = "google_pay_launch_fragment"
210
210
  }
211
211
  }
@@ -0,0 +1,132 @@
1
+ package com.reactnativestripesdk
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.*
11
+ import com.reactnativestripesdk.utils.*
12
+ import com.reactnativestripesdk.utils.createError
13
+ import com.reactnativestripesdk.utils.createMissingActivityError
14
+ import com.stripe.android.googlepaylauncher.GooglePayEnvironment
15
+ import com.stripe.android.googlepaylauncher.GooglePayLauncher
16
+
17
+ class GooglePayLauncherFragment : Fragment() {
18
+ enum class Mode {
19
+ ForSetup, ForPayment
20
+ }
21
+
22
+ private lateinit var launcher: GooglePayLauncher
23
+ private lateinit var clientSecret: String
24
+ private lateinit var mode: Mode
25
+ private lateinit var configuration: GooglePayLauncher.Config
26
+ private lateinit var currencyCode: String
27
+ private lateinit var callback: (result: GooglePayLauncher.Result?, error: WritableMap?) -> Unit
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
+ launcher = GooglePayLauncher(
38
+ fragment = this,
39
+ config = configuration,
40
+ readyCallback = ::onGooglePayReady,
41
+ resultCallback = ::onGooglePayResult
42
+ )
43
+ }
44
+
45
+ fun presentGooglePaySheet(clientSecret: String, mode: Mode, googlePayParams: ReadableMap, context: ReactApplicationContext, callback: (GooglePayLauncher.Result?, error: WritableMap?) -> Unit) {
46
+ this.clientSecret = clientSecret
47
+ this.mode = mode
48
+ this.callback = callback
49
+ this.currencyCode = googlePayParams.getString("currencyCode") ?: "USD"
50
+ this.configuration = GooglePayLauncher.Config(
51
+ environment = if (googlePayParams.getBoolean("testEnv")) GooglePayEnvironment.Test else GooglePayEnvironment.Production,
52
+ merchantCountryCode = googlePayParams.getString("merchantCountryCode").orEmpty(),
53
+ merchantName = googlePayParams.getString("merchantName").orEmpty(),
54
+ isEmailRequired = googlePayParams.getBooleanOr("isEmailRequired", false),
55
+ billingAddressConfig = buildBillingAddressParameters(googlePayParams.getMap("billingAddressConfig")),
56
+ existingPaymentMethodRequired = googlePayParams.getBooleanOr("existingPaymentMethodRequired", false),
57
+ allowCreditCards = googlePayParams.getBooleanOr("allowCreditCards", true),
58
+ )
59
+
60
+ (context.currentActivity as? AppCompatActivity)?.let {
61
+ attemptToCleanupPreviousFragment(it)
62
+ commitFragmentAndStartFlow(it)
63
+ } ?: run {
64
+ callback(null, createMissingActivityError())
65
+ return
66
+ }
67
+ }
68
+
69
+ private fun attemptToCleanupPreviousFragment(currentActivity: AppCompatActivity) {
70
+ currentActivity.supportFragmentManager.beginTransaction()
71
+ .remove(this)
72
+ .commitAllowingStateLoss()
73
+ }
74
+
75
+ private fun commitFragmentAndStartFlow(currentActivity: AppCompatActivity) {
76
+ try {
77
+ currentActivity.supportFragmentManager.beginTransaction()
78
+ .add(this, TAG)
79
+ .commit()
80
+ } catch (error: IllegalStateException) {
81
+ callback(
82
+ null,
83
+ createError(ErrorType.Failed.toString(), error.message)
84
+ )
85
+ }
86
+ }
87
+
88
+ private fun onGooglePayReady(isReady: Boolean) {
89
+ if (isReady) {
90
+ when (mode) {
91
+ Mode.ForSetup -> {
92
+ launcher.presentForSetupIntent(clientSecret, currencyCode)
93
+ }
94
+ Mode.ForPayment -> {
95
+ launcher.presentForPaymentIntent(clientSecret)
96
+ }
97
+ }
98
+ } else {
99
+ callback(
100
+ null,
101
+ createError(
102
+ GooglePayErrorType.Failed.toString(),
103
+ "Google Pay is not available on this device. You can use isPlatformPaySupported to preemptively check for Google Pay support."
104
+ )
105
+ )
106
+ }
107
+ }
108
+
109
+ private fun onGooglePayResult(result: GooglePayLauncher.Result) {
110
+ callback(result, null)
111
+ }
112
+
113
+ companion object {
114
+ const val TAG = "google_pay_launcher_fragment"
115
+
116
+ private fun buildBillingAddressParameters(params: ReadableMap?): GooglePayLauncher.BillingAddressConfig {
117
+ val isRequired = params?.getBooleanOr("isRequired", false)
118
+ val isPhoneNumberRequired = params?.getBooleanOr("isPhoneNumberRequired", false)
119
+ val format = when (params?.getString("format").orEmpty()) {
120
+ "FULL" -> GooglePayLauncher.BillingAddressConfig.Format.Full
121
+ "MIN" -> GooglePayLauncher.BillingAddressConfig.Format.Min
122
+ else -> GooglePayLauncher.BillingAddressConfig.Format.Min
123
+ }
124
+
125
+ return GooglePayLauncher.BillingAddressConfig(
126
+ isRequired = isRequired ?: false,
127
+ format = format,
128
+ isPhoneNumberRequired = isPhoneNumberRequired ?: false
129
+ )
130
+ }
131
+ }
132
+ }
@@ -0,0 +1,144 @@
1
+ package com.reactnativestripesdk
2
+
3
+ import android.app.Activity
4
+ import android.content.Intent
5
+ import androidx.appcompat.app.AppCompatActivity
6
+ import com.facebook.react.bridge.Promise
7
+ import com.facebook.react.bridge.ReadableMap
8
+ import com.facebook.react.bridge.WritableNativeMap
9
+ import com.google.android.gms.tasks.Task
10
+ import com.google.android.gms.wallet.*
11
+ import com.reactnativestripesdk.utils.*
12
+ import com.reactnativestripesdk.utils.createError
13
+ import com.reactnativestripesdk.utils.mapFromPaymentMethod
14
+ import com.reactnativestripesdk.utils.mapFromToken
15
+ import com.stripe.android.ApiResultCallback
16
+ import com.stripe.android.GooglePayJsonFactory
17
+ import com.stripe.android.Stripe
18
+ import com.stripe.android.model.GooglePayResult
19
+ import com.stripe.android.model.PaymentMethod
20
+ import com.stripe.android.model.PaymentMethodCreateParams
21
+ import org.json.JSONObject
22
+ import java.util.*
23
+
24
+ class GooglePayRequestHelper {
25
+ companion object {
26
+ internal const val LOAD_PAYMENT_DATA_REQUEST_CODE = 414243
27
+
28
+ internal fun createPaymentRequest(activity: AppCompatActivity, factory: GooglePayJsonFactory, googlePayParams: ReadableMap): Task<PaymentData> {
29
+ val transactionInfo = buildTransactionInfo(googlePayParams)
30
+ val merchantInfo = GooglePayJsonFactory.MerchantInfo(googlePayParams.getString("merchantName").orEmpty())
31
+ val billingAddressParameters = buildBillingAddressParameters(googlePayParams.getMap("billingAddressConfig"))
32
+ val shippingAddressParameters = buildShippingAddressParameters(googlePayParams.getMap("shippingAddressConfig"))
33
+
34
+ val request = factory.createPaymentDataRequest(
35
+ transactionInfo = transactionInfo,
36
+ merchantInfo = merchantInfo,
37
+ billingAddressParameters = billingAddressParameters,
38
+ shippingAddressParameters = shippingAddressParameters,
39
+ isEmailRequired = googlePayParams.getBooleanOr("isEmailRequired", false),
40
+ allowCreditCards = googlePayParams.getBooleanOr("allowCreditCards", true)
41
+ )
42
+
43
+ val walletOptions = Wallet.WalletOptions.Builder()
44
+ .setEnvironment(if (googlePayParams.getBoolean("testEnv")) WalletConstants.ENVIRONMENT_TEST else WalletConstants.ENVIRONMENT_PRODUCTION)
45
+ .build()
46
+ return Wallet.getPaymentsClient(activity, walletOptions).loadPaymentData(PaymentDataRequest.fromJson(request.toString()))
47
+ }
48
+
49
+ @Suppress("UNCHECKED_CAST")
50
+ private fun buildShippingAddressParameters(params: ReadableMap?): GooglePayJsonFactory.ShippingAddressParameters {
51
+ val isPhoneNumberRequired = params?.getBooleanOr("isPhoneNumberRequired", false)
52
+ val isRequired = params?.getBooleanOr("isRequired", false)
53
+ val allowedCountryCodes = if (params?.hasKey("allowedCountryCodes") == true)
54
+ params.getArray("allowedCountryCodes") as Array<String> else Locale.getISOCountries()
55
+
56
+ return GooglePayJsonFactory.ShippingAddressParameters(
57
+ isRequired = isRequired ?: false,
58
+ allowedCountryCodes = allowedCountryCodes.toSet(),
59
+ phoneNumberRequired = isPhoneNumberRequired ?: false
60
+ )
61
+ }
62
+
63
+ private fun buildBillingAddressParameters(params: ReadableMap?): GooglePayJsonFactory.BillingAddressParameters {
64
+ val isRequired = params?.getBooleanOr("isRequired", false)
65
+ val isPhoneNumberRequired = params?.getBooleanOr("isPhoneNumberRequired", false)
66
+ val format = when (params?.getString("format").orEmpty()) {
67
+ "FULL" -> GooglePayJsonFactory.BillingAddressParameters.Format.Full
68
+ "MIN" -> GooglePayJsonFactory.BillingAddressParameters.Format.Min
69
+ else -> GooglePayJsonFactory.BillingAddressParameters.Format.Min
70
+ }
71
+
72
+ return GooglePayJsonFactory.BillingAddressParameters(
73
+ isRequired = isRequired ?: false,
74
+ format = format,
75
+ isPhoneNumberRequired = isPhoneNumberRequired ?: false
76
+ )
77
+ }
78
+
79
+ private fun buildTransactionInfo(params: ReadableMap): GooglePayJsonFactory.TransactionInfo {
80
+ val countryCode = params.getString("merchantCountryCode").orEmpty()
81
+ val currencyCode = params.getString("currencyCode") ?: "USD"
82
+ val amount = params.getInt("amount")
83
+
84
+ return GooglePayJsonFactory.TransactionInfo(
85
+ currencyCode = currencyCode,
86
+ totalPriceStatus = GooglePayJsonFactory.TransactionInfo.TotalPriceStatus.Estimated,
87
+ countryCode = countryCode,
88
+ totalPrice = amount,
89
+ checkoutOption = GooglePayJsonFactory.TransactionInfo.CheckoutOption.Default
90
+ )
91
+ }
92
+
93
+ internal fun createPaymentMethod(request: Task<PaymentData>, activity: AppCompatActivity) {
94
+ AutoResolveHelper.resolveTask(
95
+ request,
96
+ activity,
97
+ LOAD_PAYMENT_DATA_REQUEST_CODE
98
+ )
99
+ }
100
+
101
+ internal fun handleGooglePaymentMethodResult(resultCode: Int, data: Intent?, stripe: Stripe, promise: Promise) {
102
+ when (resultCode) {
103
+ Activity.RESULT_OK -> {
104
+ data?.let { intent ->
105
+ PaymentData.getFromIntent(intent)?.let {
106
+ resolveWithPaymentMethodAndToken(it, stripe, promise)
107
+ }
108
+ }
109
+ }
110
+ Activity.RESULT_CANCELED -> {
111
+ promise.resolve(createError(ErrorType.Canceled.toString(), "The payment has been canceled"))
112
+ }
113
+ AutoResolveHelper.RESULT_ERROR -> {
114
+ AutoResolveHelper.getStatusFromIntent(data)?.let {
115
+ promise.resolve(createError(ErrorType.Failed.toString(), it.statusMessage))
116
+ }
117
+ }
118
+ }
119
+ }
120
+
121
+ private fun resolveWithPaymentMethodAndToken(paymentData: PaymentData, stripe: Stripe, promise: Promise) {
122
+ val paymentInformation = JSONObject(paymentData.toJson())
123
+ val googlePayResult = GooglePayResult.fromJson(paymentInformation)
124
+ val promiseResult = WritableNativeMap()
125
+ googlePayResult.token?.let {
126
+ promiseResult.putMap("token", mapFromToken(it))
127
+ }
128
+ stripe.createPaymentMethod(
129
+ PaymentMethodCreateParams.createFromGooglePay(paymentInformation),
130
+ callback = object : ApiResultCallback<PaymentMethod> {
131
+ override fun onError(e: Exception) {
132
+ promise.resolve(createError("Failed", e))
133
+ }
134
+
135
+ override fun onSuccess(result: PaymentMethod) {
136
+ promiseResult.putMap("paymentMethod", mapFromPaymentMethod(result))
137
+ promise.resolve(promiseResult)
138
+ }
139
+ }
140
+ )
141
+ }
142
+ }
143
+ }
144
+
@@ -120,7 +120,7 @@ class PaymentLauncherFragment(
120
120
  }
121
121
  }
122
122
 
123
- const val TAG = "payment_launcher_fragment"
123
+ internal const val TAG = "payment_launcher_fragment"
124
124
  }
125
125
 
126
126
  override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
@@ -2,27 +2,28 @@ package com.reactnativestripesdk
2
2
 
3
3
  import android.graphics.Color
4
4
  import android.os.Bundle
5
+ import com.facebook.react.bridge.ReactContext
5
6
  import com.reactnativestripesdk.utils.PaymentSheetAppearanceException
6
7
  import com.stripe.android.paymentsheet.PaymentSheet
7
8
 
8
- fun PaymentSheetFragment.buildPaymentSheetAppearance(userParams: Bundle?): PaymentSheet.Appearance {
9
+ fun buildPaymentSheetAppearance(userParams: Bundle?, context: ReactContext): PaymentSheet.Appearance {
9
10
  val colorParams = userParams?.getBundle(PaymentSheetAppearanceKeys.COLORS)
10
11
  val lightColorParams = colorParams?.getBundle(PaymentSheetAppearanceKeys.LIGHT) ?: colorParams
11
12
  val darkColorParams = colorParams?.getBundle(PaymentSheetAppearanceKeys.DARK) ?: colorParams
12
13
 
13
14
  return PaymentSheet.Appearance(
14
- typography = buildTypography(userParams?.getBundle(PaymentSheetAppearanceKeys.FONT)),
15
+ typography = buildTypography(userParams?.getBundle(PaymentSheetAppearanceKeys.FONT), context),
15
16
  colorsLight = buildColors(lightColorParams, PaymentSheet.Colors.defaultLight),
16
17
  colorsDark = buildColors(darkColorParams, PaymentSheet.Colors.defaultDark),
17
18
  shapes = buildShapes(userParams?.getBundle(PaymentSheetAppearanceKeys.SHAPES)),
18
- primaryButton = buildPrimaryButton(userParams?.getBundle(PaymentSheetAppearanceKeys.PRIMARY_BUTTON))
19
+ primaryButton = buildPrimaryButton(userParams?.getBundle(PaymentSheetAppearanceKeys.PRIMARY_BUTTON), context)
19
20
  )
20
21
  }
21
22
 
22
- private fun PaymentSheetFragment.buildTypography(fontParams: Bundle?): PaymentSheet.Typography {
23
+ private fun buildTypography(fontParams: Bundle?, context: ReactContext): PaymentSheet.Typography {
23
24
  return PaymentSheet.Typography.default.copy(
24
25
  sizeScaleFactor = getFloatOr(fontParams, PaymentSheetAppearanceKeys.SCALE, PaymentSheet.Typography.default.sizeScaleFactor),
25
- fontResId = getFontResId(fontParams, PaymentSheetAppearanceKeys.FAMILY, PaymentSheet.Typography.default.fontResId)
26
+ fontResId = getFontResId(fontParams, PaymentSheetAppearanceKeys.FAMILY, PaymentSheet.Typography.default.fontResId, context)
26
27
  )
27
28
  }
28
29
 
@@ -64,7 +65,7 @@ private fun buildShapes(shapeParams: Bundle?): PaymentSheet.Shapes {
64
65
  )
65
66
  }
66
67
 
67
- private fun PaymentSheetFragment.buildPrimaryButton(params: Bundle?): PaymentSheet.PrimaryButton {
68
+ private fun buildPrimaryButton(params: Bundle?, context: ReactContext): PaymentSheet.PrimaryButton {
68
69
  if (params == null) {
69
70
  return PaymentSheet.PrimaryButton()
70
71
  }
@@ -83,7 +84,7 @@ private fun PaymentSheetFragment.buildPrimaryButton(params: Bundle?): PaymentShe
83
84
  borderStrokeWidthDp = getFloatOrNull(shapeParams, PaymentSheetAppearanceKeys.BORDER_WIDTH),
84
85
  ),
85
86
  typography = PaymentSheet.PrimaryButtonTypography(
86
- fontResId = getFontResId(fontParams, PaymentSheetAppearanceKeys.FAMILY, null)
87
+ fontResId = getFontResId(fontParams, PaymentSheetAppearanceKeys.FAMILY, null, context)
87
88
  )
88
89
  )
89
90
  }
@@ -120,7 +121,7 @@ private fun getFloatOrNull(bundle: Bundle?, key: String): Float? {
120
121
  }
121
122
 
122
123
  @Throws(PaymentSheetAppearanceException::class)
123
- private fun PaymentSheetFragment.getFontResId(bundle: Bundle?, key: String, defaultValue: Int?): Int? {
124
+ private fun getFontResId(bundle: Bundle?, key: String, defaultValue: Int?, context: ReactContext): Int? {
124
125
  val fontErrorPrefix = "Encountered an error when setting a custom font:"
125
126
  if (bundle?.containsKey(key) != true) {
126
127
  return defaultValue
@@ -134,7 +135,7 @@ private fun PaymentSheetFragment.getFontResId(bundle: Bundle?, key: String, defa
134
135
  )
135
136
  }
136
137
 
137
- val id = resources.getIdentifier(fontFileName, "font", context?.packageName)
138
+ val id = context.resources.getIdentifier(fontFileName, "font", context.packageName)
138
139
  if (id == 0) {
139
140
  throw PaymentSheetAppearanceException("$fontErrorPrefix Failed to find font: $fontFileName")
140
141
  } else {
@@ -10,7 +10,6 @@ import android.view.LayoutInflater
10
10
  import android.view.View
11
11
  import android.view.ViewGroup
12
12
  import android.widget.FrameLayout
13
- import androidx.appcompat.app.AppCompatActivity
14
13
  import androidx.appcompat.content.res.AppCompatResources
15
14
  import androidx.core.graphics.drawable.DrawableCompat
16
15
  import androidx.fragment.app.Fragment
@@ -18,6 +17,7 @@ import com.facebook.react.bridge.Promise
18
17
  import com.facebook.react.bridge.ReactApplicationContext
19
18
  import com.facebook.react.bridge.WritableMap
20
19
  import com.facebook.react.bridge.WritableNativeMap
20
+ import com.reactnativestripesdk.addresssheet.AddressSheetView
21
21
  import com.reactnativestripesdk.utils.*
22
22
  import com.reactnativestripesdk.utils.createError
23
23
  import com.reactnativestripesdk.utils.createResult
@@ -65,12 +65,16 @@ class PaymentSheetFragment(
65
65
  paymentIntentClientSecret = arguments?.getString("paymentIntentClientSecret").orEmpty()
66
66
  setupIntentClientSecret = arguments?.getString("setupIntentClientSecret").orEmpty()
67
67
  val appearance = try {
68
- buildPaymentSheetAppearance(arguments?.getBundle("appearance"))
68
+ buildPaymentSheetAppearance(arguments?.getBundle("appearance"), context)
69
69
  } catch (error: PaymentSheetAppearanceException) {
70
70
  initPromise.resolve(createError(ErrorType.Failed.toString(), error))
71
71
  return
72
72
  }
73
73
 
74
+ val shippingDetails = arguments?.getBundle("defaultShippingDetails")?.let {
75
+ AddressSheetView.buildAddressDetails(it)
76
+ }
77
+
74
78
  val paymentOptionCallback = PaymentOptionCallback { paymentOption ->
75
79
  val result = paymentOption?.let {
76
80
  val bitmap = getBitmapFromVectorDrawable(context, it.drawableResourceId)
@@ -128,6 +132,7 @@ class PaymentSheetFragment(
128
132
  ) else null,
129
133
  googlePay = googlePayConfig,
130
134
  appearance = appearance,
135
+ shippingDetails = shippingDetails,
131
136
  primaryButtonLabel = primaryButtonLabel
132
137
  )
133
138
 
@@ -198,7 +203,7 @@ class PaymentSheetFragment(
198
203
  }
199
204
 
200
205
  companion object {
201
- const val TAG = "payment_sheet_launch_fragment"
206
+ internal const val TAG = "payment_sheet_launch_fragment"
202
207
 
203
208
  internal fun buildGooglePayConfig(params: Bundle?): PaymentSheet.GooglePayConfiguration? {
204
209
  if (params == null) {