@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
@@ -0,0 +1,279 @@
1
+ //
2
+ // ApplePayViewController.swift
3
+ // stripe-react-native
4
+ //
5
+ // Created by Charles Cruzan on 9/15/22.
6
+ //
7
+
8
+ import Foundation
9
+ import Stripe
10
+
11
+ extension StripeSdk : PKPaymentAuthorizationViewControllerDelegate, STPApplePayContextDelegate {
12
+ func paymentAuthorizationViewController(
13
+ _ controller: PKPaymentAuthorizationViewController,
14
+ didAuthorizePayment payment: PKPayment,
15
+ handler completion: @escaping (PKPaymentAuthorizationResult) -> Void
16
+ ) {
17
+ applePaymentMethodFlowCanBeCanceled = false
18
+ STPAPIClient.shared.createPaymentMethod(with: payment) { paymentMethod, error in
19
+ if let error = error {
20
+ self.createPlatformPayPaymentMethodResolver?(Errors.createError(ErrorType.Failed, error))
21
+ } else {
22
+ STPAPIClient.shared.createToken(with: payment) { token, error in
23
+ if let error = error {
24
+ self.createPlatformPayPaymentMethodResolver?(Errors.createError(ErrorType.Failed, error))
25
+ } else {
26
+ var promiseResult = ["paymentMethod": Mappers.mapFromPaymentMethod(paymentMethod?.splitApplePayAddressByNewline()) ?? [:]]
27
+ if let token = token {
28
+ promiseResult["token"] = Mappers.mapFromToken(token: token.splitApplePayAddressByNewline())
29
+ }
30
+ self.createPlatformPayPaymentMethodResolver?(promiseResult)
31
+ }
32
+ }
33
+ }
34
+ completion(PKPaymentAuthorizationResult.init(status: .success, errors: nil))
35
+ }
36
+ }
37
+
38
+ func paymentAuthorizationViewControllerDidFinish(
39
+ _ controller: PKPaymentAuthorizationViewController
40
+ ) {
41
+ if (applePaymentMethodFlowCanBeCanceled) {
42
+ self.createPlatformPayPaymentMethodResolver?(Errors.createError(ErrorType.Canceled, "The payment has been canceled"))
43
+ applePaymentMethodFlowCanBeCanceled = false
44
+ }
45
+ _ = maybeDismissApplePay()
46
+ }
47
+
48
+ func maybeDismissApplePay() -> Bool {
49
+ if let applePaymentAuthorizationController = applePaymentAuthorizationController {
50
+ DispatchQueue.main.async {
51
+ applePaymentAuthorizationController.dismiss(animated: true)
52
+ }
53
+ return true
54
+ }
55
+ return false
56
+ }
57
+
58
+ @available(iOS 15.0, *)
59
+ func paymentAuthorizationViewController(
60
+ _ controller: PKPaymentAuthorizationViewController,
61
+ didChangeCouponCode couponCode: String,
62
+ handler completion: @escaping (PKPaymentRequestCouponCodeUpdate) -> Void
63
+ ) {
64
+ if let callback = self.couponCodeEnteredJSCallback {
65
+ self.couponCodeUpdateCompletion = completion
66
+ callback(["couponCode": couponCode])
67
+ } else {
68
+ completion(
69
+ PKPaymentRequestCouponCodeUpdate.init(
70
+ errors: self.applePayCouponCodeErrors,
71
+ paymentSummaryItems: self.applePaySummaryItems,
72
+ shippingMethods: self.applePayShippingMethods
73
+ )
74
+ )
75
+ }
76
+ }
77
+
78
+ func paymentAuthorizationViewController(
79
+ _ controller: PKPaymentAuthorizationViewController,
80
+ didSelect shippingMethod: PKShippingMethod,
81
+ handler completion: @escaping (PKPaymentRequestShippingMethodUpdate) -> Void
82
+ ) {
83
+ if let callback = self.shippingMethodUpdateJSCallback {
84
+ self.shippingMethodUpdateCompletion = completion
85
+ callback(["shippingMethod": Mappers.mapFromShippingMethod(shippingMethod: shippingMethod)])
86
+ } else {
87
+ completion(
88
+ PKPaymentRequestShippingMethodUpdate.init(paymentSummaryItems: applePaySummaryItems)
89
+ )
90
+ }
91
+ }
92
+
93
+ func paymentAuthorizationViewController(
94
+ _ controller: PKPaymentAuthorizationViewController,
95
+ didSelectShippingContact contact: PKContact,
96
+ handler completion: @escaping (PKPaymentRequestShippingContactUpdate) -> Void
97
+ ) {
98
+ if let callback = self.shippingContactUpdateJSCallback {
99
+ self.shippingContactUpdateCompletion = completion
100
+ callback(["shippingContact": Mappers.mapFromShippingContact(shippingContact: contact)])
101
+ } else {
102
+ completion(
103
+ PKPaymentRequestShippingContactUpdate.init(
104
+ errors: applePayShippingAddressErrors,
105
+ paymentSummaryItems: applePaySummaryItems,
106
+ shippingMethods: applePayShippingMethods
107
+ )
108
+ )
109
+ }
110
+ }
111
+
112
+ func applePayContext(
113
+ _ context: STPApplePayContext,
114
+ didSelect shippingMethod: PKShippingMethod,
115
+ handler: @escaping (PKPaymentRequestShippingMethodUpdate) -> Void
116
+ ) {
117
+ if let callback = self.shippingMethodUpdateJSCallback {
118
+ self.shippingMethodUpdateCompletion = handler
119
+ callback(["shippingMethod": Mappers.mapFromShippingMethod(shippingMethod: shippingMethod)])
120
+ if (self.hasLegacyApplePayListeners) {
121
+ // Legacy, remove when useApplePay hook is removed
122
+ sendEvent(withName: "onDidSetShippingMethod", body: ["shippingMethod": Mappers.mapFromShippingMethod(shippingMethod: shippingMethod)])
123
+ }
124
+ } else {
125
+ handler(
126
+ PKPaymentRequestShippingMethodUpdate.init(paymentSummaryItems: applePaySummaryItems)
127
+ )
128
+ }
129
+ }
130
+
131
+ func applePayContext(
132
+ _ context: STPApplePayContext,
133
+ didSelectShippingContact contact: PKContact,
134
+ handler: @escaping (PKPaymentRequestShippingContactUpdate) -> Void
135
+ ) {
136
+ if let callback = self.shippingContactUpdateJSCallback {
137
+ self.shippingContactUpdateCompletion = handler
138
+ callback(["shippingContact": Mappers.mapFromShippingContact(shippingContact: contact)])
139
+ if (self.hasLegacyApplePayListeners) {
140
+ // Legacy, remove when useApplePay hook is removed
141
+ sendEvent(withName: "onDidSetShippingContact", body: ["shippingContact": Mappers.mapFromShippingContact(shippingContact: contact)])
142
+ }
143
+ } else {
144
+ handler(
145
+ PKPaymentRequestShippingContactUpdate.init(
146
+ errors: applePayShippingAddressErrors,
147
+ paymentSummaryItems: applePaySummaryItems,
148
+ shippingMethods: applePayShippingMethods
149
+ )
150
+ )
151
+ }
152
+ }
153
+
154
+ func applePayContext(
155
+ _ context: STPApplePayContext,
156
+ didCreatePaymentMethod paymentMethod: STPPaymentMethod,
157
+ paymentInformation: PKPayment,
158
+ completion: @escaping STPIntentClientSecretCompletionBlock
159
+ ) {
160
+ if let clientSecret = self.confirmApplePayPaymentClientSecret {
161
+ completion(clientSecret, nil)
162
+ } else {
163
+ self.applePayCompletionCallback = completion
164
+ let method = Mappers.mapFromPaymentMethod(paymentMethod.splitApplePayAddressByNewline())
165
+ self.deprecatedApplePayRequestResolver?(Mappers.createResult("paymentMethod", method))
166
+ self.deprecatedApplePayRequestRejecter = nil
167
+ }
168
+ }
169
+
170
+ func applePayContext(
171
+ _ context: STPApplePayContext,
172
+ didCompleteWith status: STPPaymentStatus,
173
+ error: Error?
174
+ ) {
175
+ switch status {
176
+ case .success:
177
+ if let resolve = self.confirmApplePayResolver {
178
+ if let clientSecret = self.confirmApplePayPaymentClientSecret {
179
+ STPAPIClient.shared.retrievePaymentIntent(withClientSecret: clientSecret) { (paymentIntent, error) in
180
+ guard error == nil else {
181
+ if let lastPaymentError = paymentIntent?.lastPaymentError {
182
+ resolve(Errors.createError(ErrorType.Unknown, lastPaymentError))
183
+ } else {
184
+ resolve(Errors.createError(ErrorType.Unknown, error as NSError?))
185
+ }
186
+ return
187
+ }
188
+
189
+ if let paymentIntent = paymentIntent {
190
+ resolve(Mappers.createResult("paymentIntent", Mappers.mapFromPaymentIntent(paymentIntent: paymentIntent)))
191
+ } else {
192
+ resolve(Mappers.createResult("paymentIntent", nil))
193
+ }
194
+ }
195
+ } else if let clientSecret = self.confirmApplePaySetupClientSecret {
196
+ STPAPIClient.shared.retrieveSetupIntent(withClientSecret: clientSecret) { (setupIntent, error) in
197
+ guard error == nil else {
198
+ if let lastSetupError = setupIntent?.lastSetupError {
199
+ resolve(Errors.createError(ErrorType.Unknown, lastSetupError))
200
+ } else {
201
+ resolve(Errors.createError(ErrorType.Unknown, error?.localizedDescription))
202
+ }
203
+ return
204
+ }
205
+
206
+ if let setupIntent = setupIntent {
207
+ resolve(Mappers.createResult("setupIntent", Mappers.mapFromSetupIntent(setupIntent: setupIntent)))
208
+ } else {
209
+ resolve(Mappers.createResult("setupIntent", nil))
210
+ }
211
+ }
212
+ }
213
+
214
+ } else {
215
+ deprecatedConfirmApplePayPaymentResolver?([])
216
+ }
217
+ break
218
+ case .error:
219
+ if let resolve = self.confirmApplePayResolver {
220
+ resolve(Errors.createError(ErrorType.Failed, error as NSError?))
221
+ } else {
222
+ let message = "Payment not completed"
223
+ deprecatedApplePayCompletionRejecter?(ErrorType.Failed, message, nil)
224
+ deprecatedApplePayRequestRejecter?(ErrorType.Failed, message, nil)
225
+ }
226
+ break
227
+ case .userCancellation:
228
+ let message = "The payment has been canceled"
229
+ if let resolve = self.confirmApplePayResolver {
230
+ resolve(Errors.createError(ErrorType.Canceled, message))
231
+ } else {
232
+ deprecatedApplePayCompletionRejecter?(ErrorType.Canceled, message, nil)
233
+ deprecatedApplePayRequestRejecter?(ErrorType.Canceled, message, nil)
234
+ }
235
+ break
236
+ @unknown default:
237
+ if let resolve = self.confirmApplePayResolver {
238
+ resolve(Errors.createError(ErrorType.Unknown, error as NSError?))
239
+ } else {
240
+ let message = "Payment not completed"
241
+ deprecatedApplePayCompletionRejecter?(ErrorType.Unknown, message, nil)
242
+ deprecatedApplePayRequestRejecter?(ErrorType.Unknown, message, nil)
243
+ }
244
+ break
245
+ }
246
+ confirmApplePayResolver = nil
247
+ confirmApplePayPaymentClientSecret = nil
248
+ confirmApplePaySetupClientSecret = nil
249
+ deprecatedApplePayCompletionRejecter = nil
250
+ deprecatedApplePayRequestRejecter = nil
251
+ }
252
+
253
+ }
254
+
255
+ extension STPPaymentMethod {
256
+ func splitApplePayAddressByNewline() -> STPPaymentMethod {
257
+ let address = self.billingDetails?.address?.line1?.split(whereSeparator: \.isNewline)
258
+ if (address?.indices.contains(0) == true) {
259
+ self.billingDetails?.address?.line1 = String(address?[0] ?? "")
260
+ }
261
+ if (address?.indices.contains(1) == true) {
262
+ self.billingDetails?.address?.line2 = String(address?[1] ?? "")
263
+ }
264
+ return self
265
+ }
266
+ }
267
+
268
+ extension STPToken {
269
+ func splitApplePayAddressByNewline() -> STPToken {
270
+ let address = self.card?.address?.line1?.split(whereSeparator: \.isNewline)
271
+ if (address?.indices.contains(0) == true) {
272
+ self.card?.address?.line1 = String(address?[0] ?? "")
273
+ }
274
+ if (address?.indices.contains(1) == true) {
275
+ self.card?.address?.line2 = String(address?[1] ?? "")
276
+ }
277
+ return self
278
+ }
279
+ }
@@ -0,0 +1,61 @@
1
+ //
2
+ // PKPaymentPassFinder.swift
3
+ // stripe-react-native
4
+ //
5
+ // Created by Charles Cruzan on 10/6/22.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ internal class PaymentPassFinder: NSObject {
11
+ enum PassLocation: String {
12
+ case CURRENT_DEVICE
13
+ case PAIRED_DEVICE
14
+ }
15
+
16
+ class func findPassWithLast4(last4: String, hasPairedAppleWatch: Bool, completion: @escaping ((Bool, [PassLocation]) -> Void)) {
17
+ let existingPassOnDevice: PKPass? = {
18
+ if #available(iOS 13.4, *) {
19
+ return PKPassLibrary().passes(of: PKPassType.secureElement)
20
+ .first(where: { $0.secureElementPass?.primaryAccountNumberSuffix == last4 && $0.secureElementPass?.passActivationState != .deactivated && !$0.isRemotePass })
21
+ } else {
22
+ return PKPassLibrary().passes(of: PKPassType.payment)
23
+ .first(where: { $0.paymentPass?.primaryAccountNumberSuffix == last4 && $0.paymentPass?.passActivationState != .deactivated && !$0.isRemotePass })
24
+ }
25
+ }()
26
+
27
+ var passLocations: [PassLocation] = []
28
+ if (existingPassOnDevice != nil) {
29
+ passLocations.append(.CURRENT_DEVICE)
30
+ }
31
+
32
+ // We're done here if the user does not have a paired Apple Watch
33
+ if (!hasPairedAppleWatch) {
34
+ completion(
35
+ passLocations.count < 1,
36
+ passLocations
37
+ )
38
+ return
39
+ }
40
+
41
+ let existingPassOnPairedDevices: PKPass? = {
42
+ if #available(iOS 13.4, *) {
43
+ return PKPassLibrary().remoteSecureElementPasses
44
+ .first(where: { $0.secureElementPass?.primaryAccountNumberSuffix == last4 && $0.secureElementPass?.passActivationState != .deactivated })
45
+ } else {
46
+ return PKPassLibrary().remotePaymentPasses()
47
+ .first(where: { $0.paymentPass?.primaryAccountNumberSuffix == last4 && $0.paymentPass?.passActivationState != .deactivated })
48
+ }
49
+ }()
50
+
51
+
52
+ if (existingPassOnPairedDevices != nil) {
53
+ passLocations.append(.PAIRED_DEVICE)
54
+ }
55
+
56
+ completion(
57
+ passLocations.count < 2,
58
+ passLocations
59
+ )
60
+ }
61
+ }
@@ -6,9 +6,10 @@
6
6
  //
7
7
  import StripePaymentSheet
8
8
 
9
- extension StripeSdk {
10
- func buildPaymentSheetAppearance(userParams: NSDictionary) throws -> PaymentSheet.Appearance {
9
+ internal class PaymentSheetAppearance {
10
+ class func buildAppearanceFromParams(userParams: NSDictionary?) throws -> PaymentSheet.Appearance {
11
11
  var appearance = PaymentSheet.Appearance()
12
+ guard let userParams = userParams else { return appearance }
12
13
 
13
14
  if let fontParams = userParams[PaymentSheetAppearanceKeys.FONT] as? NSDictionary {
14
15
  appearance.font = try buildFont(params: fontParams)
@@ -30,7 +31,7 @@ extension StripeSdk {
30
31
  return appearance
31
32
  }
32
33
 
33
- private func buildFont(params: NSDictionary) throws -> PaymentSheet.Appearance.Font {
34
+ private class func buildFont(params: NSDictionary) throws -> PaymentSheet.Appearance.Font {
34
35
  var font = PaymentSheet.Appearance.Font()
35
36
  if let fontName = params[PaymentSheetAppearanceKeys.FAMILY] as? String {
36
37
  guard let customFont = UIFont(name: fontName, size: UIFont.systemFontSize) else {
@@ -41,8 +42,8 @@ extension StripeSdk {
41
42
  font.sizeScaleFactor = params[PaymentSheetAppearanceKeys.SCALE] as? CGFloat ?? PaymentSheet.Appearance.default.font.sizeScaleFactor
42
43
  return font
43
44
  }
44
-
45
- private func buildColors(params: NSDictionary) throws -> PaymentSheet.Appearance.Colors {
45
+
46
+ private class func buildColors(params: NSDictionary) throws -> PaymentSheet.Appearance.Colors {
46
47
  var colors = PaymentSheet.Appearance.Colors()
47
48
 
48
49
  if (params.object(forKey: PaymentSheetAppearanceKeys.LIGHT) != nil && params.object(forKey: PaymentSheetAppearanceKeys.DARK) == nil ||
@@ -53,25 +54,25 @@ extension StripeSdk {
53
54
  let lightModeParams = params[PaymentSheetAppearanceKeys.LIGHT] as? NSDictionary ?? params
54
55
  let darkModeParams = params[PaymentSheetAppearanceKeys.DARK] as? NSDictionary ?? params
55
56
 
56
- colors.primary = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.PRIMARY, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.primary
57
- colors.background = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.BACKGROUND, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.background
58
- colors.componentBackground = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.COMPONENT_BACKGROUND, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.componentBackground
59
- colors.componentBorder = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.COMPONENT_BORDER, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.componentBorder
60
- colors.componentDivider = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.COMPONENT_DIVIDER, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.componentDivider
61
- colors.text = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.PRIMARY_TEXT, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.text
62
- colors.textSecondary = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.SECONDARY_TEXT, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.textSecondary
63
- colors.componentText = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.COMPONENT_TEXT, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.componentText
64
- colors.componentPlaceholderText = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.PLACEHOLDER_TEXT, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.componentPlaceholderText
65
- colors.icon = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.ICON, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.icon
66
- colors.danger = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.ERROR, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.danger
57
+ colors.primary = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.PRIMARY, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.primary
58
+ colors.background = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.BACKGROUND, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.background
59
+ colors.componentBackground = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.COMPONENT_BACKGROUND, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.componentBackground
60
+ colors.componentBorder = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.COMPONENT_BORDER, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.componentBorder
61
+ colors.componentDivider = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.COMPONENT_DIVIDER, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.componentDivider
62
+ colors.text = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.PRIMARY_TEXT, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.text
63
+ colors.textSecondary = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.SECONDARY_TEXT, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.textSecondary
64
+ colors.componentText = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.COMPONENT_TEXT, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.componentText
65
+ colors.componentPlaceholderText = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.PLACEHOLDER_TEXT, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.componentPlaceholderText
66
+ colors.icon = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.ICON, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.icon
67
+ colors.danger = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.ERROR, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.colors.danger
67
68
 
68
69
  return colors
69
70
  }
70
71
 
71
- private func buildShadow(params: NSDictionary) throws -> PaymentSheet.Appearance.Shadow {
72
+ private class func buildShadow(params: NSDictionary) throws -> PaymentSheet.Appearance.Shadow {
72
73
  var shadow = PaymentSheet.Appearance.Shadow()
73
74
 
74
- if let color = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.SHADOW_COLOR, lightParams: params, darkParams: params) {
75
+ if let color = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.SHADOW_COLOR, lightParams: params, darkParams: params) {
75
76
  shadow.color = color
76
77
  }
77
78
  if let opacity = params[PaymentSheetAppearanceKeys.OPACITY] as? CGFloat {
@@ -89,7 +90,7 @@ extension StripeSdk {
89
90
  return shadow
90
91
  }
91
92
 
92
- private func buildPrimaryButton(params: NSDictionary) throws -> PaymentSheet.Appearance.PrimaryButton {
93
+ private class func buildPrimaryButton(params: NSDictionary) throws -> PaymentSheet.Appearance.PrimaryButton {
93
94
  var primaryButton = PaymentSheet.Appearance.PrimaryButton()
94
95
 
95
96
  if let fontName = (params[PaymentSheetAppearanceKeys.FONT] as? NSDictionary)?[PaymentSheetAppearanceKeys.FAMILY] as? String {
@@ -118,15 +119,15 @@ extension StripeSdk {
118
119
  let lightModeParams = colorParams[PaymentSheetAppearanceKeys.LIGHT] as? NSDictionary ?? colorParams
119
120
  let darkModeParams = colorParams[PaymentSheetAppearanceKeys.DARK] as? NSDictionary ?? colorParams
120
121
 
121
- primaryButton.backgroundColor = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.BACKGROUND, lightParams: lightModeParams, darkParams: darkModeParams)
122
- primaryButton.textColor = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.TEXT, lightParams: lightModeParams, darkParams: darkModeParams)
123
- primaryButton.borderColor = try StripeSdk.buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.BORDER, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.primaryButton.borderColor
122
+ primaryButton.backgroundColor = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.BACKGROUND, lightParams: lightModeParams, darkParams: darkModeParams)
123
+ primaryButton.textColor = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.TEXT, lightParams: lightModeParams, darkParams: darkModeParams)
124
+ primaryButton.borderColor = try buildUserInterfaceStyleAwareColor(key: PaymentSheetAppearanceKeys.BORDER, lightParams: lightModeParams, darkParams: darkModeParams) ?? PaymentSheet.Appearance.default.primaryButton.borderColor
124
125
  }
125
126
 
126
127
  return primaryButton
127
128
  }
128
129
 
129
- private static func buildUserInterfaceStyleAwareColor(key: String, lightParams: NSDictionary, darkParams: NSDictionary) throws -> UIColor? {
130
+ private class func buildUserInterfaceStyleAwareColor(key: String, lightParams: NSDictionary, darkParams: NSDictionary) throws -> UIColor? {
130
131
  guard let lightHexString = lightParams[key] as? String, let darkHexString = darkParams[key] as? String else {
131
132
  return nil
132
133
  }
@@ -19,20 +19,10 @@ class AddToWalletButtonView: UIView {
19
19
  @objc var ephemeralKey: NSDictionary?
20
20
  @objc var onCompleteAction: RCTDirectEventBlock?
21
21
 
22
- override init(frame: CGRect) {
23
- super.init(frame: frame)
24
- }
25
-
26
22
  required init?(coder: NSCoder) {
27
23
  fatalError("init(coder:) has not been implemented")
28
24
  }
29
25
 
30
- override func layoutSubviews() {
31
- if let addToWalletButton = self.addToWalletButton {
32
- addToWalletButton.frame = self.bounds
33
- }
34
- }
35
-
36
26
  override func didSetProps(_ changedProps: [String]!) {
37
27
  if let addToWalletButton = addToWalletButton {
38
28
  addToWalletButton.removeFromSuperview()
@@ -96,6 +86,16 @@ class AddToWalletButtonView: UIView {
96
86
  let vc = findViewControllerPresenter(from: UIApplication.shared.delegate?.window??.rootViewController ?? UIViewController())
97
87
  vc.present(controller!, animated: true, completion: nil)
98
88
  }
89
+
90
+ override init(frame: CGRect) {
91
+ super.init(frame: frame)
92
+ }
93
+
94
+ override func layoutSubviews() {
95
+ if let addToWalletButton = self.addToWalletButton {
96
+ addToWalletButton.frame = self.bounds
97
+ }
98
+ }
99
99
  }
100
100
 
101
101
 
@@ -0,0 +1,87 @@
1
+ //
2
+ // PushProvisioningUtils.swift
3
+ // stripe-react-native
4
+ //
5
+ // Created by Charles Cruzan on 6/9/22.
6
+ //
7
+
8
+ import Foundation
9
+ import Stripe
10
+
11
+ internal class PushProvisioningUtils {
12
+ class func canAddCardToWallet(
13
+ last4: String,
14
+ primaryAccountIdentifier: String,
15
+ testEnv: Bool,
16
+ hasPairedAppleWatch: Bool,
17
+ completion: @escaping (_ canAddCard: Bool, _ status: AddCardToWalletStatus?) -> Void
18
+ ) {
19
+ if (!PKAddPassesViewController.canAddPasses()) {
20
+ completion(false, AddCardToWalletStatus.UNSUPPORTED_DEVICE)
21
+ }
22
+
23
+ let canAddCard = canAddPaymentPass(
24
+ primaryAccountIdentifier: primaryAccountIdentifier,
25
+ isTestMode: testEnv)
26
+
27
+ if (!canAddCard) {
28
+ completion(canAddCard, AddCardToWalletStatus.MISSING_CONFIGURATION)
29
+ } else {
30
+ PaymentPassFinder.findPassWithLast4(last4: last4, hasPairedAppleWatch: hasPairedAppleWatch) { canAddCardToADevice, passLocations in
31
+ var status: AddCardToWalletStatus? = nil
32
+ if (!canAddCardToADevice) {
33
+ status = AddCardToWalletStatus.CARD_ALREADY_EXISTS
34
+ } else if (passLocations.contains(.PAIRED_DEVICE)) {
35
+ status = AddCardToWalletStatus.CARD_EXISTS_ON_PAIRED_DEVICE
36
+ } else if (passLocations.contains(.CURRENT_DEVICE)) {
37
+ status = AddCardToWalletStatus.CARD_EXISTS_ON_CURRENT_DEVICE
38
+ }
39
+ completion(canAddCardToADevice, status)
40
+ }
41
+ }
42
+ }
43
+
44
+ class func canAddPaymentPass(primaryAccountIdentifier: String, isTestMode: Bool) -> Bool {
45
+ if (isTestMode) {
46
+ return STPFakeAddPaymentPassViewController.canAddPaymentPass()
47
+ }
48
+
49
+ if #available(iOS 13.4, *) {
50
+ return PKPassLibrary().canAddSecureElementPass(primaryAccountIdentifier: primaryAccountIdentifier)
51
+ } else {
52
+ return PKAddPaymentPassViewController.canAddPaymentPass()
53
+ }
54
+ }
55
+
56
+ class func getPassLocation(last4: String) -> PaymentPassFinder.PassLocation? {
57
+ let existingPassOnDevice: PKPass? = {
58
+ if #available(iOS 13.4, *) {
59
+ return PKPassLibrary().passes(of: PKPassType.secureElement)
60
+ .first(where: { $0.secureElementPass?.primaryAccountNumberSuffix == last4 && $0.secureElementPass?.passActivationState != .suspended && !$0.isRemotePass })
61
+ } else {
62
+ return PKPassLibrary().passes(of: PKPassType.payment)
63
+ .first(where: { $0.paymentPass?.primaryAccountNumberSuffix == last4 && $0.paymentPass?.passActivationState != .suspended && !$0.isRemotePass })
64
+ }
65
+ }()
66
+
67
+ let existingPassOnPairedDevices: PKPass? = {
68
+ if #available(iOS 13.4, *) {
69
+ return PKPassLibrary().remoteSecureElementPasses
70
+ .first(where: { $0.secureElementPass?.primaryAccountNumberSuffix == last4 && $0.secureElementPass?.passActivationState != .suspended })
71
+ } else {
72
+ return PKPassLibrary().remotePaymentPasses()
73
+ .first(where: { $0.paymentPass?.primaryAccountNumberSuffix == last4 && $0.paymentPass?.passActivationState != .suspended })
74
+ }
75
+ }()
76
+
77
+ return existingPassOnDevice != nil ? PaymentPassFinder.PassLocation.CURRENT_DEVICE : (existingPassOnPairedDevices != nil ? PaymentPassFinder.PassLocation.PAIRED_DEVICE : nil)
78
+ }
79
+
80
+ enum AddCardToWalletStatus: String {
81
+ case UNSUPPORTED_DEVICE
82
+ case MISSING_CONFIGURATION
83
+ case CARD_ALREADY_EXISTS
84
+ case CARD_EXISTS_ON_CURRENT_DEVICE
85
+ case CARD_EXISTS_ON_PAIRED_DEVICE
86
+ }
87
+ }
package/ios/StripeSdk.m CHANGED
@@ -19,6 +19,35 @@ RCT_EXTERN_METHOD(
19
19
  resolver: (RCTPromiseResolveBlock)resolve
20
20
  rejecter: (RCTPromiseRejectBlock)reject)
21
21
 
22
+ RCT_EXTERN_METHOD(
23
+ isPlatformPaySupported:(NSDictionary *)params
24
+ resolver: (RCTPromiseResolveBlock)resolve
25
+ rejecter: (RCTPromiseRejectBlock)reject)
26
+
27
+ RCT_EXTERN_METHOD(
28
+ createPlatformPayPaymentMethod:(NSDictionary *)params
29
+ resolver: (RCTPromiseResolveBlock)resolve
30
+ rejecter: (RCTPromiseRejectBlock)reject)
31
+
32
+ RCT_EXTERN_METHOD(
33
+ confirmPlatformPay:(NSString *)clientSecret
34
+ params:(NSDictionary *)params
35
+ isPaymentIntent:(BOOL)isPaymentIntent
36
+ resolver: (RCTPromiseResolveBlock)resolve
37
+ rejecter: (RCTPromiseRejectBlock)reject
38
+ )
39
+
40
+ RCT_EXTERN_METHOD(
41
+ dismissPlatformPay: (RCTPromiseResolveBlock)resolve
42
+ rejecter: (RCTPromiseRejectBlock)reject)
43
+
44
+ RCT_EXTERN_METHOD(
45
+ updatePlatformPaySheet:(NSArray *)summaryItems
46
+ shippingMethods:(NSArray *)summaryItems
47
+ errors: (NSArray *)errors
48
+ resolver: (RCTPromiseResolveBlock)resolve
49
+ rejecter: (RCTPromiseRejectBlock)reject)
50
+
22
51
  RCT_EXTERN_METHOD(
23
52
  presentApplePay:(NSDictionary *)params
24
53
  resolver: (RCTPromiseResolveBlock)resolve